为何cor_auto处理两变量时listwise与pairwise缺失策略结果不同?
问题原因解析:cor_auto中listwise与pairwise缺失处理的差异
当仅涉及两个变量时,你预期两种缺失策略会得到一致结果,但实际出现差异,核心原因在于cor_auto计算多分格(polychoric)相关时,两种缺失模式下的阈值估计逻辑不同,而非用于计算相关的样本集差异。
关键差异点:阈值估计的样本范围
多分格相关的计算依赖于对有序分类变量潜在连续阈值的估计,cor_auto在两种缺失模式下的处理逻辑有本质区别:
missing = "listwise":先删除所有含缺失值的案例(即你的示例中89个完整样本),阈值估计和相关系数计算均基于这个统一的完整数据集。missing = "pairwise":阈值估计是分别基于每个变量自身的所有非缺失样本(变量a用全部100个样本,变量b用89个非缺失样本),再用两个变量均无缺失的89个样本计算相关系数。
由于阈值是多分格相关计算的核心参数,不同样本范围估计出的阈值存在差异,最终导致相关系数结果不同。
手动验证过程
你可以通过拆解步骤验证这个逻辑:
- 验证listwise模式的结果:
library(psych) # 提取listwise删除后的完整数据集 df_listwise <- df[complete.cases(df), ] # 计算该数据集的多分格相关 psych::polychoric(df_listwise)$rho
此结果与cor_auto(df[,c("a", "b")], missing = "listwise")完全一致。
- 验证pairwise模式的结果:
# 用变量a的全样本估计阈值 thresh_a <- psych::polychoric(df$a)$tau # 用变量b的非缺失样本估计阈值 thresh_b <- psych::polychoric(df$b[!is.na(df$b)])$tau # 使用上述阈值,基于共同完整样本计算相关 psych::polychoric(table(df_listwise$a, df_listwise$b), tau_x = thresh_a, tau_y = thresh_b)$rho
此结果与cor_auto(df[,c("a", "b")], missing = "pairwise")完全一致。
总结
两种模式下用于计算相关的样本集确实是同一个(89个完整样本),但阈值估计阶段使用的样本范围不同,这才是导致多分格相关结果差异的根本原因。
内容的提问来源于stack exchange,提问作者Georgia
相关产品推荐
相关产品推荐

