1

到现在为止,我曾经用来cor测量点之间的对齐。我对结果、两者之间的值非常满意,-1并且0总是能找到我想要的线条。但是,由于此处的答案和评论,我意识到这不是最可靠的方法,因为平线的标准偏差为零,例如:

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

我的目标是定义一个函数,它给出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

然而,我期待一个非常低的价值data1

在此处输入图像描述

4

2 回答 2

6

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

这可以在 R 中使用prcomporprincomp函数来完成。

m <- cbind(1:10, rep(10, 10))
sdev <- prcomp(m)$sdev
sdev[1]/sum(sdev)
于 2013-06-26T13:46:50.103 回答
1

如何使用回归的 R 平方(或调整后的 R 平方)?毕竟,R 平方只是样本相关系数的平方。

reg.data1 <-lm(data1$value~data1$date)
summary(reg.data1)$adj.r.squared
#[1] 0.1844582

reg.data2 <-lm(data2$value~data2$date)
summary(reg.data2)$adj.r.squared
#[1] 0.9848801
于 2013-06-26T15:52:10.433 回答