2015-07-01 75 views
0

我預計利用這樣產生的諧波迴歸時間序列:[R諧波預測失敗 - newdata結構

(包使用:T系列,預測,TSA,plyr)

airp <- AirPassengers 
TIME <- 1:length(airp) 
SIN <- COS <- matrix(nrow = length(TIME), ncol = 6,0) 
for (i in 1:6){ 
    SIN[,i] <- sin(2*pi*i*TIME/12) 
    COS[,i] <- cos(2*pi*i*TIME/12) 
} 
SIN <- SIN[,-6] 

decomp.seasonal <- decompose(airp)$seasonal 

seasonalfit <- lm(airp ~ SIN + COS) 

上的裝配工作只精細。預測時發生問題。

TIME.NEW <- seq(length(TIME)+1, length(TIME)+12, by=1) 
SINNEW <- COSNEW <- matrix(nrow=length(TIME.NEW), ncol = 6, 0) 
for (i in 1:6) { 
    SINNEW[,i] <- sin(2*pi*i*TIME.NEW/12) 
    COSNEW[,i] <- cos(2*pi*i*TIME.NEW/12) 
} 
SINNEW <- SINNEW[,-6] 

prediction.harmonic.dataframe <- data.frame(TIME = TIME.NEW, SIN = SINNEW, COS = COSNEW) 

seasonal.predictions <- predict(seasonalfit, newdata = prediction.harmonic.dataframe) 

這將導致警告:

Warning message: 
'newdata' had 12 rows but variables found have 144 rows 

我經歷了,發現名字是SIN.1SIN.2,等等,而不是SIN1SIN2 ...所以我手動更改的,它仍然沒有工作。我還手動刪除了SIN.6,因爲它由於某種原因仍然存在。

幫助?

編輯:我也瀏覽過類似的帖子,這些問題的答案並沒有解決我的問題。

+0

'airp'從哪裏來?這裏使用了哪些軟件包?請確保您的示例是[reproducible](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 – MrFlick

+0

@MrFlick我修好了 - 現在應該可以重現。是嗎? –

回答

2

嘗試使用不在data.frame內的變量(特別是矩陣)擬合lm模型後用data.frame預測並不好玩。如果你總是適合數據框架中的數據,那會更好。

舉例來說,如果你沒有

seasonalfit <- lm(airp ~ ., data.frame(airp=airp,SIN=SIN,COS=COS)) 

那麼你的預測是可行的。

或者,您可以嘗試將矩陣填充到data.frames中,但這通常是一個糟糕的主意。你會做

prediction.harmonic.dataframe <- data.frame(TIME = TIME.NEW, 
    SIN = I(SINNEW), COS = I(COSNEW)) 

I()(或ASIS功能)將讓他們爲矩陣。