我正在使用来自调查数据的面板数据集进行逻辑回归,并且我想更正面板设计的标准误差。此调查中的权重考虑了抽样概率,面板死亡率和分层后的情况。
如果我正确理解了Berger et al 2017,则应该为面板数据使用聚类协方差。但是,我不确定命令是否适用于具有测量权重的数据。
我首先用glm
估计回归,并用coeftest
包中的lmtest
和vcovPL
包中的sandwich
校正标准误差。随后,我使用了svydesign
包中的svyglm
和survey
来估计加权模型,并以相同的方式再次校正了标准误差。
在这个问题中,R's sandwich package producing strange results for robust standard errors in linear model Zeileis写道,使用svyglm
对象可能会产生错误的结果。但是,我不确定这是否仅适用于复杂的调查权重(带有分层等)或基本调查权重,因为它指出here,如果不使用分层就不会有太大区别。但是,我不完全理解那里的解释。此外,我不知道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's sandwich package producing strange results for robust standard errors in linear model
# 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
答案 0 :(得分:0)
您要使用
coeftest(model, vcov=vcov(model))
对于svyglm
模型,vcov()
已经产生了适当的三明治估计量,并且我认为“ sandwich”包对对象的内部知识并不了解足够正确。