R中加权数据集Kruskal-Wallis检验异常问题及解决
使用WeightIt与survey包分析跨国观察数据的问题与解决方法
数据加权处理
我正在分析包含4个国家受试者的大型观察数据库,由于不同国家受试者基线特征差异显著,使用WeightIt包基于**协变量平衡倾向得分(CBPS)**为观测值赋权,代码如下:
w.out <- weightit(country ~ baseline1 + baseline2, data = df, method = "cbps", verbose = TRUE) df$ps_weights <- w.out$weights
协变量平衡验证
通过love plot和基线特征TableOne表验证,上述权重能够有效平衡各组间的协变量。
异常问题出现
错误创建survey对象
随后创建survey对象时使用了如下代码:
ipd <- svydesign(id =~country, data = df, weights = ~ps_weights)
后续分析异常
- 生成加权TableOne表时,连续变量的P值显示为NA:
tab1_weighted <- svyCreateTableOne(vars = myVars, data = ipd, factorVars = catVars, strata = "country") - 为获取组间差异的非参数P值,执行Kruskal-Wallis检验,结果出现极大卡方统计量(>1×10^28)和NaN的P值:
未加权数据的检验结果合理,但即使每组仅取10个观测子集测试,结果仍异常;已提前排除所有含NA的观测,尝试使用sjstat包时还出现自由度错误。svyranktest(test ~ country, design = ipd, test = "KruskalWallis")
问题解决方法
问题根源在于survey对象的创建方式,将代码修改为如下形式后,卡方值恢复合理,P值可正常计算:
ipd <- svydesign(~1, data = df, weights = ~ps_weights)
内容的提问来源于stack exchange,提问作者user6387185
相关产品推荐
相关产品推荐

