最稳健的方法来测量R中点之间的对齐

Mic*_*ele 1 r correlation

到目前为止,我曾经习惯于cor测量点之间的对齐.我很满意结果,两者之间的值,-10始终发现我想要的线条.但是,由于这里的答案和评论,我意识到这不是最强大的方法,因为扁平线的标准偏差为零,例如:

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

我的目标是定义一个函数,它给出1完美对齐的点(无论斜率)和更接近于0不符合点的值.你会建议一个比我更强大的方法吗?

编辑:

按照@Hong Ooi的建议,我得到了

data1 <- data.frame(date = c(13636, 13636, 14403, 14761, 15201, 15741),
                    value = c(865310, 999989, 999989, 2, 999989, 26))

data2 <- data.frame(date = c(12667, 12745, 13106, 13276, 13461, 13626),
                    value = c(1904, 2055, 2740, 3376, 3567, 4099))

m <- cbind(data1$date, data1$value)
sdev <- prcomp(m)$sdev
sdev[1]/sum(sdev)
# 0.9986399

m <- cbind(data2$date, data2$value)
sdev <- prcomp(m)$sdev
sdev[1]/sum(sdev)
# 0.961
Run Code Online (Sandbox Code Playgroud)

但是,我期待的价值非常低 data1

在此输入图像描述

Hon*_*Ooi 6

您可以使用主成分,或者更具体地说,使用第一主成分解释的总方差的比例.这相当于拟合最小化点与线的正交距离的平方和的线,而不是垂直距离(这是相关性).

这可以在R中使用prcompprincomp函数完成.

m <- cbind(1:10, rep(10, 10))
sdev <- prcomp(m)$sdev
sdev[1]/sum(sdev)
Run Code Online (Sandbox Code Playgroud)