有效地在散点图中找到线性拟合

时间:2013-04-14 20:27:51

标签: r optimization scatter-plot

我有一个积分列表

   n     x
   7     99.06
  12    100.45
  25     98.11
  42    106.92
  75    106.78
  94    102.34
 128    119.05
 145    116.54
 149    116.06
 167    111.49
 173    112.69
 195    120.25
 201    119.70
 217    107.62
 233    105.53
 239    107.86
 257    109.77
 287    115.71

这是散点图和我想要实现的目标 the scatter plot

我想找到跨越两点的所有直线。 我所拥有的是蓝点 - 我想要找的是红线。

简单的解决方案是在所有组合上运行lm,并通过调整后的R平方过滤前面的组合。但是,有很多组合,这需要很长时间。我已经尝试通过设置部分之间的角度限制来消除,但它不够重要。另外,当我有一个包含其他重要段的长行时,我遇到了一些问题,如图中的1/2所示。

我会很感激任何新想法。

1 个答案:

答案 0 :(得分:1)

我用lm完成了它,找到所有匹配项只需不到两秒钟。这对你来说太长了吗?如果没有,我就是这样做的。我创建了一个包含数据中所有816个三点组合的向量,并循环遍历它。当r平方高于0.9999时,我绘制了该线。

根据这个标准,我在图表的左侧得到更多的拟合,而右边的一些则不存在。似乎在你的图表中,某些拟合并非最佳。您可能想要检查出来

library(zoo)
data1 <- read.table(text="
2012-01-11  99.06
2012-01-19 100.45
2012-02-07  98.11
2012-03-02 106.92
2012-04-19 106.78
2012-05-16 102.34
2012-07-05 119.05
2012-07-30 116.54
2012-08-03 116.06
2012-08-29 111.49
2012-09-07 112.69
2012-10-09 120.25
2012-10-17 119.70
2012-11-12 107.62
2012-12-05 105.53
2012-12-13 107.86
2013-01-10 109.77
2013-02-25 115.71")
data1 <-zoo(data1[,2],as.Date(data1[,1]))
plot.zoo(data1, type="p", col="blue", pch=16)

my.comb <-combn(data1, 3,simplify = FALSE)

for (i in 1:length(my.comb)){
vect <- my.comb[[i]]
reg <-lm(coredata(vect)~index(vect))
if(summary(reg)$adj.r.squared>0.9999) lines(my.comb[[i]], col="red")
}

enter image description here