You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何cor_auto处理两变量时listwise与pairwise缺失策略结果不同?

问题原因解析:cor_auto中listwise与pairwise缺失处理的差异

当仅涉及两个变量时,你预期两种缺失策略会得到一致结果,但实际出现差异,核心原因在于cor_auto计算多分格(polychoric)相关时,两种缺失模式下的阈值估计逻辑不同,而非用于计算相关的样本集差异。

关键差异点:阈值估计的样本范围

多分格相关的计算依赖于对有序分类变量潜在连续阈值的估计,cor_auto在两种缺失模式下的处理逻辑有本质区别:

  • missing = "listwise":先删除所有含缺失值的案例(即你的示例中89个完整样本),阈值估计和相关系数计算均基于这个统一的完整数据集。
  • missing = "pairwise":阈值估计是分别基于每个变量自身的所有非缺失样本(变量a用全部100个样本,变量b用89个非缺失样本),再用两个变量均无缺失的89个样本计算相关系数。

由于阈值是多分格相关计算的核心参数,不同样本范围估计出的阈值存在差异,最终导致相关系数结果不同。

手动验证过程

你可以通过拆解步骤验证这个逻辑:

  1. 验证listwise模式的结果:
library(psych)
# 提取listwise删除后的完整数据集
df_listwise <- df[complete.cases(df), ]
# 计算该数据集的多分格相关
psych::polychoric(df_listwise)$rho

此结果与cor_auto(df[,c("a", "b")], missing = "listwise")完全一致。

  1. 验证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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 13:50:14