皮尔逊相关性分析中NA、NaN、-Inf***结果含义问询
Pearson相关性分析中常量变量异常结果的含义解析
问题描述
我正在开展Pearson相关性分析,部分结果表格未显示相关系数,而是出现“NA”“NaN”“-Inf***”。查询资料得知NaN表示变量间无相关性,因变量无变化。我的数据中sand、silt、clay为单值测量(所有观测值完全相同),其余变量为重复测量,仅这三个变量出现该异常结果,现咨询这三个结果含义是否一致。
所用代码及数据子集
# Library library(tidyverse) library(Hmisc) # Data subset dk1 <-structure(list(tc = c(1.38, 1.76, 1.36, 1.48, 1.25, 1.48), soc = c(0.618, 0.951, 1.08, 1.11, 0.756, 1.38), tn = c(0.104, 0.137, 0.11, 0.112, 0.112, 0.106), sand = c(96, 96, 96, 96, 96, 96), silt = c(2.5,2.5, 2.5, 2.5, 2.5, 2.5), clay = c(1.6, 1.6, 1.6, 1.6, 1.6, 1.6), ph = c(6.77, 7.25, 6.69, 7.14, 6.63, 7.18)), row.names = c("1","2", "3", "4", "5", "6"), class = "data.frame") View(dk1) # Correlation table dk1corr <- rcorr(as.matrix(dk1), type = c("pearson")) dk1corr # Correlations coefficients and p value extract ccr.dk1corr<-dk1corr$r ccp.dk1corr<-dk1corr$P
解答
这三个异常结果的本质含义完全一致,都是因为sand、silt、clay是无变异的常量(所有观测值完全相同),导致Pearson相关系数无法正常计算。不同表现形式是rcorr函数处理除以0场景时的不同输出:
- NaN:Pearson相关系数公式的分母是两个变量的标准差乘积,常量的标准差为0,导致分母为0,计算结果为NaN(Not a Number),直接表示无法得到有效相关系数。
- NA:
rcorr函数在部分场景下会用NA标记无法计算的相关系数,本质原因和NaN一致——变量无变异导致计算失效。 - -Inf*:同样源于常量变量标准差为0引发的除以0操作,计算过程中产生负无穷;末尾的***是
rcorr默认的显著性标记,但此处毫无意义,因为相关系数本身无效。
简言之,这三种输出都是“变量无变异,无法计算有效Pearson相关系数”的不同表述,没有本质区别。
内容的提问来源于stack exchange,提问作者MGB
相关产品推荐
相关产品推荐

