来自相关函数的NA

时间:2013-06-26 12:22:46

标签: r correlation

请你解释一下这两种情况之间的区别吗?

> cor(1:10, rep(10,10))
[1] NA
Warning message:
In cor(1:10, rep(10, 10)) : the standard deviation is zero

> cor(1:10, 1:10)
[1] 1

第一个只是一条直线,第二个我希望相关性为1。我不考虑什么?感谢

2 个答案:

答案 0 :(得分:2)

绘制数据,应该清楚。数据集

## y doesn't vary
plot(1:10, rep(10,10))

只是一条水平线。水平线的相关系数undefined,因为y的标准偏差的估计值为0(这出现在相关系数的分母上)。而

plot(1:10, 1:10)

是一行:

y = x

enter image description here

答案 1 :(得分:1)

如果你想衡量积分“在线”的数量, 你可以使用(一个减去)方差矩阵的特征值的比率。

f <- function(x,y) { 
  e <- eigen(var(cbind(x,y)))$values
  1 - e[2] / e[1]
}

# To have values closer to 0, you can square that quantity.
f <- function(x,y) { 
  e <- eigen(var(cbind(x,y)))$values
  ( 1 - e[2] / e[1] )^2
}
f( 1:10, 1:10 )
f( 1:10, rep(1,10) )
f( rnorm(100), rnorm(100) )     # Close to 0
f( rnorm(100), 2 * rnorm(100) ) # Closer to 1
f( 2 * rnorm(100), rnorm(100) ) # Similar

如果点对齐,则为1, 如果它们形成的云具有球形,则为0 翻译和轮换不变, 非负的,对称的。

如果您的情况不对称,即如果xy不起作用, 罗兰的评论中提出的基于回归的方法更有意义。