首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在spdep::lagsarlm模型中加权观测?

在spdep::lagsarlm模型中加权观测?
EN

Stack Overflow用户
提问于 2015-03-05 19:40:15
回答 1查看 448关注 0票数 2

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

然而,问题是这些地区的居民数量差异很大(在5亿到32000之间)。因此,我想将每个观察值与其居民数量进行加权。对于lm,这很容易,因为它接受可选的参数weights=...

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

EN

回答 1

Stack Overflow用户

发布于 2015-03-05 20:38:54

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

让我们假设您有一个定义为: data.frame的df

代码语言:javascript
复制
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

以及定义如下的权重向量:

代码语言:javascript
复制
c(1,1,1,1,2,2,2,2,2,2)

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

代码语言:javascript
复制
> 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的行,如下所示:

代码语言:javascript
复制
replicate_rows <- rep(1:nrow(df), c(1,1,1,1,2,2,2,2,2,2))

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

代码语言:javascript
复制
> replicate_rows
 [1]  1  2  3  4  5  5  6  6  7  7  8  8  9  9 10 10

使用上面的代码创建一个使用这些行的新data.frame df2

代码语言:javascript
复制
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

我已经根据权重复制了dataframe df的行。让我们现在运行一个不使用权重的lm

代码语言:javascript
复制
> lm(a~b, data=df2)

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

Coefficients:
(Intercept)            b  
     0.6672      -0.0467  

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

您可以使用上面的内容来衡量您的data.frame,然后在您的spdep::lagsarlm函数中使用它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28877057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档