2

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

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

我怎样才能做类似的事情spdep::lagsarlm?有解决方法吗?

4

1 回答 1

4

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

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

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对上述数据运行 an会产生以下结果:

> 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

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

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函数中使用它。

于 2015-03-05T12:38:54.037 回答