2015-04-15 48 views
3

我对这个数据运行AR。预测与回归模型与场景

Date  Price  YOY Quarter 
    2000-01-15 2.385368 -312362  Q1 
    2000-02-15 2.614250 -442117  Q1 
    2000-03-15 2.828261 -252596  Q1 
    2000-04-15 3.028842 -292756  Q2 
    2000-05-15 3.596409 -401578  Q2 
    ...... 

该模型是

price.fit<-lm(log(Price)~+(YOY)+log(lag(Price))+relevel(Quarter,ref="Q4"),subset(Data,Year>=2000)) 

现在我需要在接下来的12个期间的预测。组成数据帧“newdata”包括变量YOY的估计值(范围)。

newdata 
high mean low 
..... 

如何使用预测函数或其他方法预测未来12个月的价格范围(高,中,低)?或者也许使用循环?

回答

1

有一个通用功能predict(),它可以用于预测。虽然predict.lm()用于以下澄清,predict()应该工作。给定一个lm对象和新数据,它返回预测值。

作为回归返回数字值,转换成因子(高,中,低)必须手动映射并sapply()用于那些。

library(lubridate) 
dates <- ymd(19990115) + months(0:71) 
df <- data.frame(date = dates, 
       price = sample(100:150, 72, replace = T), 
       YOY = sample(-40000:-20000, 72, replace = T), 
       Qtr = as.factor(quarter(dates))) 

price.fit <- lm(log(price) ~ +(YOY) + log(lag(price)) + relevel(Qtr, ref = "4"), 
       data = df[year(df$date) >= 2000,]) 


pred <- predict.lm(price.fit, newdata = df[year(df$date) < 2000,]) 
pred 
#1  2  3  4  5  6 
#4.976734 4.653960 4.605170 4.691348 4.663439 4.969813 
#7  8  9  10  11  12 
#4.927254 4.727388 4.634729 4.875197 4.700480 4.700480 

sapply(pred, function(x) { 
    if(x < 4.56) "low" 
    else if(x < 4.75) "medium" 
    else "high" 
}) 
#1  2  3  4  5  6  7  8 
#"high" "medium" "medium" "medium" "medium" "high" "high" "medium" 
#9  10  11  12 
#"medium" "high" "medium" "medium"