R语言与数据分析练习:选择适当模型拟合某股票连续若干天的收盘价序列的发展
R语言与数据分析练习:选择适当模型拟合某股票连续若干天的收盘价序列的发展
ARIMA模型
ARIMA模型(英语:Autoregressive Integrated Moving Average model),差分整合移动平均自回归模型,又称整合移动平均自回归模型(移动也可称作滑动),是时间序列预测分析方法之一。ARIMA(p,d,q)中,AR是“自回归”,p为自回归项数;MA为“滑动平均”,q为滑动平均项数,d为使之成为平稳序列所做的差分次数(阶数)。“差分”一词虽未出现在ARIMA的英文名称中,却是关键步骤。
题目:
某股票连续若干天的收盘价如表5-13所示,选择适当模型拟合该序列的发展。
数据如下:
实现代码:
# 设置工作目录并读取数据
setwd("D:/bigdata/R语言与数据分析/R语言数据分析实战/第5章/02-习题程序")
data1 <- read.csv("./data/data.csv")
data <- data1[1:100, ]
# 平稳性检验
# 结论: 1.序列并未全部在一个常数内稳定地来回波动 属于非平稳随机序列
# 2.发现数据为非平稳序列 需要做处理
data <- ts(data)
plot(data) # 绘制时序图
acf(data, lag.max = 30) # 数据自相关检验
# 差分运算:使得数据在一个常数附件随机波动
data_t1 <- diff(data)
plot(data_t1) # 绘制时序图
acf(data_t1, lag.max = 30) # 数据自相关检验
# 单位根检验:若p值小于0.05 则该序列为非纯随机序列
library(tseries)
adf.test(data_t1)
# 模型定阶
library(TSA)
res <- armasubsets(y = data_t1, nar = 5, nma = 5) # 差分序列BIC定阶
plot(res)
# 模型残差检验
library(forecast)
for(p in c(0, 3, 5)){
for(q in c(0, 3, 4)){
arima.model <- Arima(data, order = c(p, 1, q))
box.test.result <- Box.test(arima.model$residuals, lag = 1, type = "Ljung-Box")
print(paste(\'p =\', p, \'; q =\', q , \'; 残差P值:\',
round(box.test.result$p.value, 4), collapse = ""))
}
}
# 模型评估
for(p in c(0, 3, 5)){
for(q in c(0, 3, 4)){
arima.model <- Arima(data, order = c(p, 1, q))
forecast.data <- forecast(arima.model, h = 7)
pred <- forecast.data$mean
error <- abs(data1[101:107, 1] - pred) / data1[101:107, 1]
print(paste(\'p =\', p, \'; q =\', q , \';误差:\', round(mean(error), 6)))
}
}
# 因此最优模型是ARIMA(3,1,3)
请发表评论