• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

R语言与数据分析练习:选择适当模型拟合某股票连续若干天的收盘价序列的发展 - JohnZh ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

R语言与数据分析练习:选择适当模型拟合某股票连续若干天的收盘价序列的发展

R语言与数据分析练习:选择适当模型拟合某股票连续若干天的收盘价序列的发展

ARIMA模型

ARIMA模型(英语:Autoregressive Integrated Moving Average model),差分整合移动平均自回归模型,又称整合移动平均自回归模型(移动也可称作滑动),是时间序列预测分析方法之一。ARIMA(p,d,q)中,AR是“自回归”,p为自回归项数;MA为“滑动平均”,q为滑动平均项数,d为使之成为平稳序列所做的差分次数(阶数)。“差分”一词虽未出现在ARIMA的英文名称中,却是关键步骤。

题目:

某股票连续若干天的收盘价如表5-13所示,选择适当模型拟合该序列的发展。

数据如下:

表5-13 某股票收盘价
————————————————————————————————————
304 303 307 299 296 293 301 293 301 295 284 286 286 287 284 282 278 281
278 277 279 278 270 268 272 273 279 279 280 275 271 277 278 279 283 284
282 283 279 280 280 279 278 283 278 270 275 273 273 272 275 273 273 272
273 272 273 271 272 271 273 277 274 274 272 280 282 292 295 295 294 290
291 288 288 290 293 288 289 291 293 293 290 288 287 289 292 288 288 285
282 286 286 287 284 283 286 282 287 286 287 282 282 294 291 288 289
————————————————————————————————————

实现代码:

# 设置工作目录并读取数据
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)

运行截图:


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
R语言绘制省市热力地图发布时间:2022-07-18
下一篇:
线性线性混合效应模型及R语言实现发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap