比较来自数据子集的lm模型或找到拐点以消除滞后时间

时间:2017-04-18 09:43:37

标签: r lm

我在不同实验的数据上运行了大量线性模型,我们希望从实验开始时排除滞后时间。这种滞后时间可能在运行之间有所不同,并且在下面的示例图中非常明显。有没有一种强大的方法可以自动排除延迟时间,在我下面的例子中,它将是x< 1

我认为这样做的方法是生成线性模型并逐渐从数据开始删除点并比较模型,但我不知道从子集化数据中比较模型的最佳方法

df <- data.frame (x1 =  c(0.7,1.7,2.8,3.7,4.9,6.0,6.7,7.7,8.7,9.7,10.7,12.0,13.1),
             y1 = c(22.7,50.7,103.2,143.4,175.2,216.8,234.1,246.6,256.0,266.2,276.0,287.6,295.5))

plot(1/df$x1, log(df$y1), type = "l")

summary(lm(log(y1) ~ I(1/x1), data = df))
summary(lm(log(y1) ~ I(1/x1), data = df[df$x1 > 1,]))
summary(lm(log(y1) ~ I(1/x1), data = df[df$x1 > 2,]))

1 个答案:

答案 0 :(得分:0)

我。生成14个data.frame的列表,其中v = 0到df $ x1的最大整数值

library(dplyr)
all.dat <- lapply(max(df$x1) %>% seq(from =0, to=.), function(v) df[df$x1 > v,])

II。使用14 data.frames生成lm模型列表

lm.form <- as.formula("log(y1) ~ I(1/x1)")
all.lm <- lapply(all.dat, function(x)lm(lm.form, data=x))

III。查看所有14个lm模型的摘要

lapply(all.lm, summary)

sapply(all.lm, function(x)summary(x)$r.sq) #extract r.sq value for all models

[1] 0.9074019 0.9960153 0.9957543 0.9903552 0.9783031 0.9937000 0.9899247 0.9915223 0.9982270 0.9997441 0.9998207 1.0000000 0.0000000 0.0000000