2015-04-15 75 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"