R语言cor()生成相关矩阵结果异常,与手动单变量相关性计算结果不一致
结果差异的核心原因
两种计算方式的有效样本筛选逻辑完全不同:
- 批量计算相关性矩阵时,你设置了
use = "complete.obs",此时R会先把actual包含的所有列、predicted包含的所有列合并为宽表,仅保留所有列都没有缺失值的行,再基于这部分完全样本计算所有两两变量的相关性。 - 单独计算
overall_15和potential_15的相关性时,仅会筛选这两个列没有缺失值的行,其他年度的overall/potential字段是否有缺失不影响样本纳入规则。
两种场景用到的样本量和样本范围不一致,自然会得到不同的计算结果。
修复方案
如果要让矩阵中每个位置的计算结果和单独计算对应变量对的结果一致,把cor函数的use参数改为pairwise.complete.obs即可:
cormat <- round( cor( x = actual, y = predicted, use = "pairwise.complete.obs", method = "pearson"), 3)
pairwise.complete.obs的逻辑是:计算每一对变量的相关性时,仅单独筛选当前这对变量无缺失的行,和你手动单组计算的逻辑完全一致。
内容的提问来源于stack exchange,提问作者Xavier
相关产品推荐
相关产品推荐

