r - 如何评估 ARIMA 预测图的趋势,因为它逐渐变为水平?
问题描述
目前,我们正在研究对超过 120 个单元的学生的预测(这将使他们能够毕业)。以下是我们正在处理的当前数据集。
structure(list(Term = structure(c(5L, 9L, 1L, 6L, 10L, 2L, 7L,
11L, 3L, 8L, 12L, 4L), .Label = c("F - 2014", "F - 2015", "F - 2016",
"F - 2017", "S - 2014", "S - 2015", "S - 2016", "S - 2017", "Sp - 2014",
"Sp - 2015", "Sp - 2016", "Sp - 2017"), class = "factor"), Bachelors = c(182L,
1103L, 496L, 177L, 1236L, 511L, 161L, 1264L, 544L, 150L, 1479L,
607L), Masters = c(33L, 144L, 35L, 22L, 175L, 55L, 57L, 114L,
66L, 52L, 147L, 50L), Seniors = c(577L, 2485L, 2339L, 604L, 2660L,
2474L, 545L, 2628L, 2594L, 712L, 2807L, 2546L), Over.120 = structure(c(235L,
1746L, 1188L, 235L, 1837L, 1192L, 200L, 1883L, 1217L, 255L, 2002L,
1245L), .Tsp = c(2014, 2017.66666666667, 3), class = "ts")), row.names = c(NA,
-12L), class = "data.frame")
我们希望使用 ARIMA 预测——查看一年中的 3 个不同时期:春季、夏季、秋季 - 从 2014 年到 2017 年——以此来看看未来 6 年的趋势会是什么样子(2018 年至 2023 年)
data <- read.csv("Graduation3.csv")
str(data)
library(forecast)
data$Over.120 <- ts(data$Over.120, start=c(2014,1), end=c(2017,3), frequency = 3)
summary(data)
dOver120 <- diff(data$Over.120)
dOver120 <- diff(data$Over.120,3)
plot(dOver120)
fit_diff_ar <- arima(dOver120, order=c(3,0,0))
summary(fit_diff_ar)
fit_diff_arf <- forecast(fit_diff_ar,h=18)
print(fit_diff_arf)
plot(fit_diff_arf,include=12)
我们预计预测图的条件异常线将遵循与前几年相同的类型趋势(之字形),但随着时间的推移,该线开始在平均值附近趋于平缓。目前被困在这一点上,不确定它是否在代码中,或者这只是趋势应该发生的方式。
解决方案
模型 ARIMA(3,0,0) 有 3 个自回归系数,因此在预测下一个值时,它只会查看序列的最后三个值。在这种情况下,可能拟合的系数具有阻尼效应,会慢慢缩小预测值。随着模型被外推,它用于预测下一个的每 3 个值继续受到更多抑制。
如果您查看系数,summary(fit_diff_ar)
您可以手动计算每个预测值,并更好地理解结果。
尝试fit_diff_ar <- auto.arima(dOver120)
看看系数与您估计的模型有何不同。这可能会预测持续波动的值。
推荐阅读
- c# - 哪个更适合编译和执行禅?if(a == null) 或 a?
- ios - Xcode 11 GM 中缺少 iOS 12.4
- python - __defaults__ 显式默认以克服可变问题
- javascript - 为什么 Node.js 通常使用 'var' 而不是 'let'?
- python - 为什么我的 python 代码中的每一行后面都有空格?
- ios - Swift,带有基本身份验证的 URL
- google-cloud-platform - 在 VM 实例中安装 Python 库
- php - 在更新时,我的 where 条件不起作用
- javascript - re:当单元格变为空白/空时输入公式
- python - 如何打印行和列标签以输出 csv 文件