关于R语言COBALT包bal.tab函数p值统计检验及结果矛盾的问询
我采用最近邻法进行倾向得分匹配,使用COBALT包的bal.tab()函数设置均值差阈值为0.05来评估匹配后的组间平衡,执行代码如下:
# Balance tables with thresholds for mean differences and means pre and post matching bal.tab(m.outtest, continuous = "std", binary = "raw", disp = c("means"), un = TRUE, stats = c("m"),thresholds = c(m = .05))
得到的平衡结果中,duration_h的匹配后均值差(Diff.Adj)为0.0774,被标记为“Not Balanced, >0.05”;但通常p值>0.05表示组间无显著差异,这与当前标记逻辑存在矛盾。同时我未找到bal.tab()函数中判定平衡的p值所基于的统计检验方法,现寻求对该矛盾及统计检验依据的解释。
问题解释与解答
关于平衡标记与p值的矛盾
这里不存在逻辑矛盾:bal.tab()的不平衡标记完全基于你设定的均值差阈值(0.05),和假设检验的p值没有关系。你通过thresholds = c(m = .05)指定了判断标准——只要标准化均值差(因你设置continuous = "std",连续变量用标准化均值差)超过0.05,就会标记为不平衡。
均值差是描述性的差异大小度量,反映组间实际差异的幅度;而p值是统计显著性指标,反映的是“在原假设成立时观察到当前差异的概率”,两者评估维度完全不同:大样本下极小的均值差也可能得到显著p值,小样本下较大的均值差也可能p>0.05。bal.tab()此处的判定逻辑只遵循你设定的均值差阈值,和p值无关。关于统计检验方法
你当前的代码中stats = c("m"),仅要求输出均值差(m代表mean difference),bal.tab()并没有计算p值,所以你找不到对应p值的检验方法是合理的。若要调用p值统计量,需将stats参数设为c("m", "p")。此时默认的检验规则为:- 连续变量:匹配前用两样本t检验,匹配后根据匹配类型(如最近邻匹配为配对样本)使用配对t检验;
- 分类变量:使用卡方检验,当单元格期望频数过小时自动切换为Fisher精确检验。
内容的提问来源于stack exchange,提问作者user19939387

