使用cor()计算Pearson相关系数得到NA的原因及解决方法
R语言cor()计算Pearson相关系数返回NA的问题
问题场景
你的数据集为:
G1m: 1.0437500 1.0333333 0.9270833 0.7187500 0.3979167 S1m: 0 0 0 0 0
执行代码:
cor(G1m,S1m)
返回结果与警告:
NA Warning message: In cor(G1m, S1m) : the standard deviation is zero
错误原因
Pearson相关系数的计算公式需要除以两个变量标准差的乘积。你的S1m变量所有取值均为0,其标准差为0,这会导致计算过程中出现除以0的无意义运算,因此R无法生成有效相关系数,只能返回NA并抛出标准差为0的警告。
从统计逻辑来看,一个完全没有变异(所有取值相同)的变量,无法与其他变量产生线性相关关系,Pearson相关系数本身就没有定义。
解决方法
校验数据准确性
先确认S1m的取值是否为预期结果:是否是数据录入、导入环节出现错误,导致所有值被误设为0?如果是数据错误,修正S1m的取值后重新运行cor()函数即可。数据确实无变异的处理
如果S1m的取值确实全为0,从统计角度来说,该变量与G1m的Pearson相关系数不存在有效结果。此时可以:
- 直接在分析结论中说明该变量无变异,无法计算有效相关系数;
- 若你是批量计算多变量相关矩阵,可通过设置
cor()函数的use参数跳过这类无变异变量,比如使用use="pairwise.complete.obs",但本质上还是无法得到该变量与其他变量的相关系数,仅能避免警告干扰批量计算流程。
内容的提问来源于stack exchange,提问作者FG17
相关产品推荐
相关产品推荐

