更新线性回归

时间:2014-04-01 08:51:53

标签: r linear-regression

我对我编写的代码有疑问,应该更新线性回归。

data<-rnorm(100,mean= 3,sd=1.8)
reg.cuve<-rep(0,length(data)-20)
x<-seq(1:20)
for(i in 20:length(data)){
  reg<-lm(data[i-19:i]~x)
  reg.curve[i]<-tail(fitted(reg),1)
}

错误必须在for循环中发生。我得到的错误信息是

Error in model.frame.default(formula = data[i - 19:i] ~ x, drop.unused.levels = TRUE) : 
  variable lengths differ (found for 'x') 

然而,为固定的i运行所有命令,一切正常。原始数据是连续数百天的空气污染。谢谢你的帮助

2 个答案:

答案 0 :(得分:1)

问题是[i-19:i],它没有按照你的想法做到

例如,当i = 20

20-19:20
[1] 1 0

您需要的是[(i-19):i]

(20-19):20
[1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

答案 1 :(得分:1)

中的冒号
i-19:i

具有比减法更高的优先级,因此对于i = 20,您得到20-c(19,20)而不是(20-19):20,正如您所期望的那样。适当放置的括号解决了这个问题

data<-rnorm(100,mean= 3,sd=1.8)
reg.curve<-rep(0,length(data)-20)
x<-seq(1:20)
for(i in 20:length(data)){
  reg<-lm(data[(i-19):i]~x)
  reg.curve[i]<-tail(fitted(reg),1)
}