如何使用fpp2包进行预测?调用forecast、naive函数报错如何处理?
报错原因与解决方案
核心错误原因
SPEI::spi()函数返回的是包含拟合值、计算参数、残差等多内容的S4类列表对象,并非fpp2预测函数要求的纯数值ts类时间序列,直接传入会触发类型不匹配报错。- 原有代码存在参数位置错误:
end=c(2019,12)属于ts()函数的参数,误写在了spi()的入参位置。
修正步骤
- 构造时间序列时正确传入
start、end、freq参数 - 调用
spi()计算完成后,提取其fitted属性,该属性为计算得到的SPI值对应的ts类对象,符合fpp2函数的输入要求 - 将提取出的
ts对象传入forecast()、naive()等函数完成预测
修正后可运行代码
library(SPEI) library(fpp2) # 读取原始数据 m <- read.delim("D:/PHD_UOM/PHD_Dissertation/PhD/PhD_R/mydata/mruspi.txt") # 正确构造时间序列,end参数放在ts函数内 ts_mru <- ts(m$mru, freq = 12, start = c(1971,1), end = c(2019,12)) # 计算12尺度SPI spi_cal <- spi(ts_mru, scale = 12) # 提取SPI拟合时间序列(已自带ts属性) y_spi <- spi_cal$fitted # 执行预测 # 普通预测12期 forecast_result <- forecast(y_spi, h = 12) print(forecast_result) # 朴素法预测12期 naive_result <- naive(y_spi, h = 12) print(naive_result)
验证方法
运行class(y_spi),返回结果为ts即说明提取的对象符合预测函数输入要求。
内容的提问来源于stack exchange,提问作者user15556454
相关产品推荐
相关产品推荐

