【问题标题】:Weighting observations in a spdep::lagsarlm Model?在 spdep::lagsarlm 模型中加权观察?
【发布时间】:2015-03-05 11:40:14
【问题描述】:

我想估计 R 中的 spdep::lagsarlm 模型(空间自回归)。我的观察结果 (n=447) 是多边形,每个都代表柏林的一个行政区域。

但是,问题在于这些地区的居民数量差异很大(在 500 到 32000 之间)。因此,我想用它的居民数量来衡量每个观测值。使用lm 这很容易,因为它接受可选参数weights=...

如何使用spdep::lagsarlm 做类似的事情?有解决办法吗?

【问题讨论】:

  • 你的回答怎么了?我认为这是一个很好的补充。
  • 可能认为异方差错误,看看包sphet和对应的两篇JSS论文?
  • @LyzanderR:我删除了它,因为作者没有允许我在 Stack 上发布它。
  • @Gui_struggling_with_R 真可惜……我相信它可能对某人有所帮助。无论如何,这是他的选择。谢谢您的回复。
  • 根据 Roger Bivand 的说法,这尚未开发(截至 2015 年)。在这里查看他的回复。 r-sig-geo.2731867.n2.nabble.com/…

标签: r statistics regression sp spdep


【解决方案1】:

我没有使用过spdep::lagsarlm,但很容易复制lm使用权重的方式,使用以下方法:

假设您有一个 data.frame df 定义为:

df <- data.frame(a=runif(10), b=runif(10))

> df
           a          b
1  0.8266429 0.43591733
2  0.4624063 0.93180891
3  0.7085656 0.36468984
4  0.3339251 0.79093356
5  0.8236406 0.39687242
6  0.8266429 0.83213817
7  0.4624063 0.34714824
8  0.7085656 0.01812133
9  0.3339251 0.54498829
10 0.8236406 0.73677156

权重向量定义为:

c(1,1,1,1,2,2,2,2,2,2)

对上述数据运行lm 会产生以下结果:

> lm(a~b, data=df, weights=c(1,1,1,1,2,2,2,2,2,2))

Call:
lm(formula = a ~ b, data = df, weights = c(1, 1, 1, 1, 2, 2, 
    2, 2, 2, 2))

Coefficients:
(Intercept)            b  
     0.6672      -0.0467  

现在让我们看看lm 函数实际上是如何使用权重向量的。

我们首先按照权重中定义的数字复制 data.frame df 的行,如下所示:

replicate_rows <- rep(1:nrow(df), c(1,1,1,1,2,2,2,2,2,2))

权重为 2 的行出现两次,如下所示:

> replicate_rows
 [1]  1  2  3  4  5  5  6  6  7  7  8  8  9  9 10 10

使用上述创建一个新的 data.frame df2 使用这些行:

df2 <- df[replicate_rows, ]

> df2
             a          b
1    0.8266429 0.43591733
2    0.4624063 0.93180891
3    0.7085656 0.36468984
4    0.3339251 0.79093356
5    0.8236406 0.39687242
5.1  0.8236406 0.39687242
6    0.8266429 0.83213817
6.1  0.8266429 0.83213817
7    0.4624063 0.34714824
7.1  0.4624063 0.34714824
8    0.7085656 0.01812133
8.1  0.7085656 0.01812133
9    0.3339251 0.54498829
9.1  0.3339251 0.54498829
10   0.8236406 0.73677156
10.1 0.8236406 0.73677156

我已经根据权重复制了数据帧 df 的行。现在让我们在不使用权重的情况下运行lm

> lm(a~b, data=df2)

Call:
lm(formula = a ~ b, data = df2)

Coefficients:
(Intercept)            b  
     0.6672      -0.0467  

如你所见,结果完全一样!

您可以使用上述方法对您的 data.frame 进行相应的权衡,然后在您的 spdep::lagsarlm 函数中使用它。

【讨论】:

  • 您是否有任何文件支持这一点(或者我注定要阅读?lm 中引用的文献?
  • @RomanLuštrik 不,很遗憾,我没有任何文件支持这一点。 lm 中的文献也没有指定任何其他内容。但这是在lm 中使用权重参数的方式,如上所示。
  • 这是有道理的,以直观的方式,就像外层对它们具有“权重”一样,您可以通过复制/三重复制来对现有数据点施加一些影响......它们。感谢您的洞察力。
  • @RomanLuštrik -- 在?lm 中也有一个类似的句子,这可能会让您更加确信weights 的含义。这是其中的一个 sn-p:“'weights' 可用于指示,[当 'weights' 的元素是正整数 w_i 时],每个响应 y_i 是 w_i 单位权重观测值的平均值(包括有 w_i 个观测值等于 y_i 且数据已汇总)”。很漂亮,不是吗?
  • @JoshO'Brien 感谢您的评论。这使它更清楚。如果我还发现任何其他内容,我会更新。我记得在某处也读到过它(虽然不是在论文中)。
猜你喜欢
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 2022-08-17
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多