我在这些数据上运行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个月的价格范围(高,平均,低)?或者也许使用循环?
答案 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"