0

你能解释一下这两种情况的区别吗?

> 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

第一个只是一条直线,而第二个我希望相关性是一个。我没有考虑什么?谢谢

4

2 回答 2

2

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

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

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

plot(1:10, 1:10)

是行:

y = x

在此处输入图像描述

于 2013-06-26T12:25:06.000 回答
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不扮演相同的角色,那么 Roland 评论中建议的基于回归的方法更有意义。

于 2013-06-26T13:10:49.307 回答