2015-02-11 58 views
4

我试图将逆概率权重应用于回归,但lm()仅使用分析权重。这是我正在工作的复制的一部分,原作者在Stata中使用pweight,但我试图在R中复制它。分析权重提供了较低的标准错误,这导致我的一些变量存在问题意义。r中的逆概率权重

我试过看着survey包,但不知道如何准备一个调查对象,以便与svyglm()一起使用。这是我想要的方法,还是有更简单的方法来应用逆概率权重?

dput:

data <- structure(list(lexptot = c(9.1595, 9.86330744180814, 
8.92372556833205, 8.58202430280175, 10.1133857229336), progvillm = c(1L, 
1L, 1L, 1L, 0L), sexhead = c(1L, 1L, 0L, 1L, 1L), agehead = c(79L, 
43L, 52L, 48L, 35L), weight = c(1.04273509979248, 1.01139605045319, 
1.01139605045319, 1.01139605045319, 0.76305216550827)), .Names = c("lexptot", 
"progvillm", "sexhead", "agehead", "weight"), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -5L)) 

线性模型(使用分析权重)

prog.lm <- lm(lexptot ~ progvillm + sexhead + agehead, data = data, weight = weight) 
summary(prog.lm) 
+1

以前没有用过,但是在RSeek上找到了[ipw软件包](http://www.jstatsoft.org/v43/i13/paper)。它目前不在CRAN上,但可以安装存档版本。 – Gregor 2015-02-11 02:00:33

+0

@Gregor我已经看过那个包,但是因为它没有数据,在CRAN中没有,我没有想到要安装它。此外,似乎“调查”已经占据了位置,但我无法弄清楚如何获得回归对象。 – Vedda 2015-02-11 02:02:14

回答

4

好了,所以我想通了,我想我会更新帖子柜面其他人试图弄明白。这其实很简单。

data$X <- 1:nrow(data) 
des1 <- svydesign(id = ~X, weights = ~weight, data = data) 
prog.lm <- svyglm(lexptot ~ progvillm + sexhead + agehead, design=des1) 
summary(prog.lm) 

标准错误现在是正确的。

+0

你确定这是正确的吗? 'id'参数用于指定群集设计。对于简单的随机设计,Id应该是“〜0”或“〜1”。 – 2015-09-03 14:29:51

+0

@Michał是的,这是正确的。标准错误现在是正确的。我不认为需要'身份证',但如果您有任何建议,请提供答案。 – Vedda 2015-09-19 17:27:49

+1

这个主题是两岁,但它是有用的:)我会补充说,'svydesign(id =〜1,...)'是简单的,并产生完全相同的结果! – Roah 2017-05-01 09:28:22