R语言survey包多层聚类标准误差计算问题咨询
问题解答
1. 关于survey包是否支持多层聚类标准误的判断
你的推测不正确,Thomas Lumley开发的survey包完全支持多阶段分层聚类抽样设计的标准误计算,可支持两层及以上的多层聚类标准误估计。
2. 示例中单/两层聚类标准误一致的成因
你提供的示例中两个模型输出标准误完全一致,核心原因是两阶段聚类设计的参数指定不完整:
- 你在构造
dclus2时仅传入了最终合并权重pw,没有提供各阶段的抽样权重或有限总体校正(FPC)参数。 survey包默认基于泰勒级数线性化法估计方差时,对于参数不完整的多阶段设计,会自动以最顶层聚类单元(也就是示例中的第一阶段学区dnum)的组间变异作为方差估计的唯一依据,第二阶段的学校聚类单元snum不会对方差估计产生额外贡献,因此和仅指定单层聚类的dclus1输出结果完全一致。- 你可以通过
degf(dclus1)和degf(dclus2)查看两个设计的自由度,二者输出完全相同,也能验证这一点。
3. 对应解决办法
3.1 真实数据场景的解决方法
如果使用自有真实数据,需要在svydesign调用中补充完整的多阶段设计参数:
- 可传入各阶段对应的抽样权重:
weights参数接受多参数公式,例如weights=~w1 + w2分别对应第一、第二阶段的抽样权重 - 也可传入各阶段的有限总体校正参数:
fpc=~fpc1 + fpc2分别对应第一、第二阶段的总集群数
补充参数后survey包会自动计算正确的两层聚类标准误,结果会和单层聚类的输出有明显差异。
3.2 基于示例数据集的验证方法
你使用的apiclus2内置数据集本身自带各阶段的有限总体校正参数,修改设计构造代码即可看到差异:
library(survey) data(api) # 单层聚类设计 dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus2) # 正确指定两阶段fpc的两层聚类设计 dclus2_correct<-svydesign(id=~dnum+snum, weights=~pw, fpc=~fpc1+fpc2, data=apiclus2) # 对比两个模型的标准误,会出现明显差异 summary(svyglm(api00~ell+meals+mobility, design=dclus1)) summary(svyglm(api00~ell+meals+mobility, design=dclus2_correct))
3.3 替代估计方法
也可以使用重复权重法(比如自助法、刀切法)估计多层聚类标准误:通过as.svrepdesign函数将多阶段设计转换为重复权重设计,再调用svyglm即可得到对应的标准误估计结果。
内容的提问来源于stack exchange,提问作者Brian Guay
相关产品推荐
相关产品推荐

