[英]Does the Sandwich Package work for Robust Standard Errors for Logistic Regression with basic Survey Weights
我正在使用来自调查数据的面板数据集运行逻辑回归,我想纠正面板设计的标准误差。 本次调查中包含的权重考虑了抽样概率、小组死亡率和后分层。
如果我正确理解Berger et al 2017 ,我应该对面板数据使用聚类协方差。 但是,我不确定这些命令是否适用于具有调查权重的数据。
我开始估计与回归glm
和纠正的标准误差与coeftest
从lmtest
包和vcovPL
从sandwich
包装。 随后,我使用了survey
包中的svydesign
和svyglm
来估计一个加权模型,并以同样的方式再次修正标准误差。
在这个问题R 的三明治包中,线性模型中的鲁棒标准误差产生奇怪的结果Zeileis 写道,使用svyglm
对象可能会产生不正确的结果。 但是,我不确定这是否仅适用于复杂的调查权重(包括分层等),还是也适用于基本调查权重,因为它在此处指出,如果不使用分层,则没有太大区别。 但是,我不完全理解那里的解释。 此外,我想知道Berger et al 2017 中描述的新实现的功能是否允许使用svyglm
对象。 所以我不知道如果我的设计没有分层,我是否可以将sandwich
包中的命令用于类svyglm
对象。
这是我使用的代码:
# not weighted
model <- glm(depend_var ~ indep_var1 + indep_var2 ,family=quasibinomial(link='logit'),data=dataset)
m_vcov <- coeftest(model,vcov. = sandwich::vcovPL(x = model, cluster = ~ id_var,order.by = ~ year ,pairwise = T))
# weighted
design.ps <- svydesign(ids=~1, weights=~wgt, data=dataset)
model_wgt <- svyglm(depend_var ~ indep_var1 + indep_var2, design=design.ps,family=quasibinomial(link='logit'),data=dataset)
mwt_vcov <- coeftest(model_wgt, vcov. = sandwich::vcovPL(x = model_wgt, cluster = ~ id_var,order.by = ~ year ,pairwise = T))
查看上面测试代码提供的系数,结果似乎有点合理,不像这里提供的结果: R 的三明治包为线性模型中的稳健标准误差产生奇怪的结果
# basic model
> summary(model)
Estimate Std. Error t value Pr(>|t|)
(Intercept) -3.68570 0.01264 -291.68 <2e-16 ***
indep_var1_test 0.37538 0.01111 33.78 <2e-16 ***
indep_var2_test 1.05226 0.01100 95.62 <2e-16 ***
# basic model with SE correction
> m_vcov
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.685702 0.176121 -20.9271 < 2.2e-16 ***
indep_var1_test 0.375380 0.049817 7.5353 4.874e-14 ***
indep_var2_test 1.052258 0.068763 15.3027 < 2.2e-16 ***
# weighted model
> summary(model_wgt)
Estimate Std. Error t value Pr(>|t|)
(Intercept) -3.89702 0.01751 -222.57 <2e-16 ***
indep_var1_test 0.42373 0.01454 29.15 <2e-16 ***
indep_var2_test 1.05291 0.01439 73.15 <2e-16 ***
# weighted model with SE correction
> mwt_vcov
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.897021 0.319932 -12.1808 < 2.2e-16 ***
indep_var1_test. 0.423732 0.075202 5.6346 1.755e-08 ***
indep_var2_test 1.052915 0.126569 8.3189 < 2.2e-16 ***
我的问题是:我可以使用上面的命令来纠正标准错误吗?
我想我的问题类似于这个未回答的问题: https : //stats.stackexchange.com/questions/260515/does-coeftest-correctly-use-weights-from-svydesign-in-svyglm-object? rq =1
你想用
coeftest(model, vcov=vcov(model))
对于svyglm
模型, vcov()
已经生成了适当的三明治估计器,我认为“三明治”包对对象的内部结构了解得不够多,无法使其正确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.