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

R语言cor()函数不同调用方式下相关性结果不一致的原因

问题原因解析

核心差异来自cor()函数中use="complete.obs"参数在不同输入类型下的行为不同:

  • 当输入是数据框/矩阵时:use="complete.obs"执行列表删除(listwise deletion)——会删掉数据框中任意一个变量存在缺失值的行,仅用所有变量都无缺失的完整行,计算所有变量对的相关性。
  • 当输入是两个单独向量时:use="complete.obs"执行成对删除(pairwise deletion)——仅删除这两个向量中至少一个存在缺失值的行,只要这两个变量的值完整,就会被纳入计算,完全不考虑其他变量的缺失情况。

结合你的案例具体解释:

  • 调用cor(df[vars_num1], use="complete.obs")时,会过滤掉所有包含缺失值的行(比如某行serBilir有缺失,哪怕years和age都完整,也会被剔除),用剩余的"全变量完整"行计算相关性,样本量更小。
  • 调用cor(df$years, df$age, use="complete.obs")时,只要years和age的值完整,不管其他变量是否缺失,这些行都会被保留,样本量更大,因此相关性结果不同。

你可以用以下代码验证这个结论:

# 检查years和age本身的缺失情况
sum(is.na(df$years))
sum(is.na(df$age))

# 查看列表删除后的样本量(全变量无缺失的行数)
nrow(na.omit(df[vars_num1]))

# 查看成对删除后的样本量(仅years和age无缺失的行数)
nrow(na.omit(data.frame(years=df$years, age=df$age)))

而你的自定义函数my_corr本质上仅基于years和age的完整观测计算,因此结果和cor(df$years, df$age, use="complete.obs")完全一致。

内容的提问来源于stack exchange,提问作者Hunter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:13:14