如何为ARIMA模型训练集添加行及实现训练集与测试集连续绘图
解决你的ARIMA训练集与绘图问题
一、让训练集与测试集绘图首尾衔接
你遇到的绘图重合问题,核心原因是lines()默认会把传入的test_set的x轴坐标从1开始计数,而你的训练集training_set的x轴是1到500,自然会和测试集的开头重叠。解决方法很简单,手动指定lines()的x参数为测试集在原序列中的索引即可:
training_set = series[1:500,] test_set = series[501:790,] # 绘制训练集,x轴默认对应原序列的1-500索引 plot.default(training_set, type = "l") # 指定x为测试集在原序列的索引范围,和训练集末尾完美衔接 lines(x = 501:790, y = test_set, col="blue", type = "l")
如果你的series是时间序列对象(比如ts或xts类型),更稳妥的方式是保留原序列的时间索引,绘图时会自动对齐:
# 提取训练集和测试集对应的时间索引 train_time <- time(series)[1:500] test_time <- time(series)[501:790] plot(train_time, training_set, type = "l") lines(test_time, test_set, col="blue", type = "l")
这样就能清晰呈现训练集到测试集的连续趋势了。
二、为ARIMA训练集添加行
根据需求不同,有两种常见的处理方式:
- 直接扩展训练集范围
如果只是想把训练集从原来的1-500扩展到更大的区间(比如1-600),直接重新索引原序列即可:
# 扩展训练集到前600行 training_set_expanded <- series[1:600,]
如果是时间序列对象,推荐用window()函数精准选择时间范围:
# 假设series是ts对象,选择到第600个时间点的部分作为新训练集 training_set_expanded <- window(series, end = time(series)[600])
- 添加外部新数据行
如果要添加不在原series里的新观测数据,需要确保新数据和训练集结构一致(单变量、格式匹配),然后用rbind()合并:
# 假设new_data是和training_set同结构的单列数据 training_set_updated <- rbind(training_set, new_data)
如果是时间序列对象,记得先把新数据转换成相同频率的时间序列,再合并:
# 将新数据转为和series同频率的ts对象 new_data_ts <- ts(new_data, start = time(series)[501], frequency = frequency(series)) # 合并训练集与新数据 training_set_updated <- c(training_set, new_data_ts)
注意:添加新数据后,若要重新训练ARIMA模型,需要重新拟合模型,因为训练集的变化会影响模型参数。
内容的提问来源于stack exchange,提问作者Hugo Pasqual del Pobil
相关产品推荐
相关产品推荐

