使用情景预测回归模型

时间:2015-04-15 20:04:03

标签: r regression linear predict

我在这些数据上运行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个时期。一个虚构的数据框&#34; newdata&#34;包括变量YOY的估计(范围)。

newdata
high mean low
.....

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

1 个答案:

答案 0 :(得分: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"