2014-06-21 48 views
0

我遇到了类似的问题,这里的提问者用线性模型预测函数,但我尝试使用Rob Hyndman的预测包中的“时间序列线性模型”函数。用`tslm`预测返回的尺寸错误

Predict.lm in R fails to recognize newdata

predict.lm with newdata

totalConv <- ts(varData[,43]) 
metaSearch <- ts(varData[,45]) 
PPCBrand <- ts(varData[,38]) 
PPCGeneric <- ts(varData[,34]) 
PPCLocation <- ts(varData[,35]) 
brandDisplay <- ts(varData[,29]) 
standardDisplay <- ts(varData[,3]) 
TV <- ts(varData[,2]) 
richMedia <- ts(varData[,46]) 

df.HA <- data.frame(totalConv, metaSearch, 
      PPCBrand, PPCGeneric, PPCLocation, 
      brandDisplay, standardDisplay, 
      TV, richMedia) 

正如你可以看到我已经试图通过建立时间序列对象的数据帧,以避免名称的问题。

然而,我然后安装一个tslm对象(的时间序列的线性模型)如下 -

fit1 <- tslm(totalConv ~ metaSearch 
      + PPCBrand + PPCGeneric + PPCLocation 
      + brandDisplay + standardDisplay 
      + TV + richMedia data = df.HA 
      ) 

尽管已经创建的数据帧和正确命名的所有对象我得到同样的尺寸误差,因为这些其他用户经历过。

Error in forecast.lm(fit1) : Variables not found in newdata 
In addition: Warning messages: 
1: 'newdata' had 10 rows but variables found have 696 rows 
2: 'newdata' had 10 rows but variables found have 696 rows 

模型框架似乎给明智的名字所有的变量,所以我不知道是什么了预测功能: -

names(model.frame(fit1)) 
[1] "totalConv"  "metaSearch"  "PPCBrand"  "PPCGeneric"  "PPCLocation"  "brandDisplay" 
[7] "standardDisplay" "TV"    "richMedia" 

任何人都可以提出任何其他改进我的模型规范可能有助于预测功能运行?

编辑1:好吧,就这样有一个工作的例子,我用Irsal对这个问题的答案(转换为时间序列对象)给出的数据,然后安装tslm。我得到同样的错误(不同的尺寸明显): -

Is there an easy way to revert a forecast back into a time series for plotting?

我真搞不清楚什么我做错了,我的代码看起来相同,在所有在这个例子中使用.. ...

data <- c(11,53,50,53,57,69,70,65,64,66,66,64,61,65,69,61,67,71,74,71,77,75,85,88,95, 
      93,96,89,95,98,110,134,127,132,107,94,79,72,68,72,70,66,62,62,60,59,61,67, 
      74,87,112,134,51,50,38,40,44,54,52,51,48,50,49,49,48,57,52,53,50,50,55,50, 
      55,60,65,67,75,66,65,65,69,72,93,137,125,110,93,72,61,55,51,52,50,46,46,45, 
      48,44,45,53,55,65,89,112,38,7,39,35,37,41,51,53,57,52,57,51,52,49,48,48,51, 
      54,48,50,50,53,56,64,71,74,66,69,71,75,84,93,107,111,112,90,75,62,53,51,52, 
      51,49,48,49,52,50,50,59,58,69,95,148,49,83,40,40,40,53,57,54,52,56,53,55, 
      55,51,54,45,49,46,52,49,50,57,58,63,73,66,63,72,72,71,77,105,97,104,85,73, 
      66,55,52,50,52,48,48,46,48,53,49,58,56,72,84,124,76,4,40,39,36,38,48,55,49, 
      51,48,46,46,47,44,44,45,43,48,46,45,50,50,56,62,53,62,63) 

data2 <- c(rnorm(237)) 


library(forecast) 



nData <- ts(data) 
nData2 <- ts(data2) 
dat.ts <- tslm(nData~nData2) 
forecast(dat.ts) 
Error in forecast.lm(dat.ts) : Variables not found in newdata 
In addition: Warning messages: 
1: 'newdata' had 10 rows but variables found have 237 rows 
2: 'newdata' had 10 rows but variables found have 237 rows 

编辑2:即使我将两个系列组合到一个数据框中也是如此。

nData.df <- data.frame(nData, nData2) 
dat.ts <- tslm(nData~nData2, data = nData.df) 
forecast(dat.ts) 

回答

2

tslm拟合线性回归模型。如果您想预测,您需要提供解释变量的未来值。这些应通过newdata参数forecast.lm提供。

+0

Rob,非常感谢。我真是一个愚蠢的疏忽。应该能够用这一个下周给老板留下深刻的印象! :d –