在 svyglm 与 glm 中使用权重

机器算法验证 r 民意调查
2022-01-22 20:03:53

我想知道权重的处理方式svyglmglm

我正在使用twangR 中的包来创建倾向得分,然后将其用作权重,如下所示(此代码来自twang文档):

library(twang)
library(survey)
set.seed(1)

data(lalonde)

ps.lalonde <- ps(treat ~ age + educ + black + hispan + nodegree + married + re74 + re75,
 data = lalonde)

lalonde$w <- get.weights(ps.lalonde, stop.method="es.mean")
design.ps <- svydesign(ids=~1, weights=~w, data=lalonde)

glm1 <- svyglm(re78 ~ treat, design=design.ps)

summary(glm1)

...
Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   6685.2      374.4  17.853   <2e-16 ***
treat         -432.4      753.0  -0.574    0.566    

将此与以下内容进行比较:

glm11 <- glm(re78 ~ treat, weights=w , data=lalonde)
summary(glm11)

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   6685.2      362.5  18.441   <2e-16 ***
treat         -432.4      586.1  -0.738    0.461  

所以参数估计是相同的,但处理的标准误差是完全不同的。

svyglm之间的权重处理有何不同glm

2个回答

有很多不同种类的权重,它们会让人感到困惑。当您使用您认为正在使用的权重类型的不同功能或软件时,您必须非常小心。

svyglm 函数使用调查权重 - 这些权重对每个案例的重要性进行加权,以使它们具有代表性(彼此之间,在 twang 之后)。我不确定 glm() 中的权重是什么 - 我认为它们代表了测量的准确性。(如果您使用的是二项式系列,它们有不同的含义)。

调查权重(在surveyglm 中)是您想要的权重,为您提供正确的标准误差。

(还有频率权重、分析权重和重要性权重)。

survey考虑到采样权重引入的精度损失来计算标准误差. 权重glm只是调整赋予最小二乘估计误差的权重,因此标准误差不正确。以下是 Lumley (2010) 的选集:

在基于模型的分析中,有必要正确指定模型的随机部分以获得正确的标准误差,但我们所有的标准误差估计都是基于设计的,因此无论模型如何都是有效的。值得注意的是,有时在基于模型的回归分析中使用的“三明治”或“模型稳健”或“异方差一致”标准误差与我们将使用的基于设计的标准误差几乎相同;主要区别在于分层的处理。

因此,如果您的设计中没有分层,您可能会发现使用sandwich将获得相同或几乎相同的 SE 估计值。

library(sandwich)
coefs <- vcovHC(glm11, type="HC0")
lmtest::coeftest(glm11,coefs)

在我的测试中,它们在使用“HC0”或“HC1”时并没有准确计算出来,但非常接近。svyglm现在也报告 z 值而不是 t 值。