2014-04-01 123 views
0

我有一个关于我写的应该更新线性回归的代码的问题。更新线性回归

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的所有命令,一切正常。原始数据是连续100天的空气污染。感谢您的帮助

回答

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) 
} 
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