2014-04-01 154 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