请你解释一下这两种情况之间的区别吗?
> 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。我不考虑什么?感谢
答案 0 :(得分:2)
绘制数据,应该清楚。数据集
## y doesn't vary
plot(1:10, rep(10,10))
只是一条水平线。水平线的相关系数undefined,因为y
的标准偏差的估计值为0(这出现在相关系数的分母上)。而
plot(1:10, 1:10)
是一行:
y = x
答案 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 翻译和轮换不变, 非负的,对称的。
如果您的情况不对称,即如果x
和y
不起作用,
罗兰的评论中提出的基于回归的方法更有意义。