含季度虚拟变量的ARIMA预测报错及统计量输出问题咨询
很高兴能帮你解决这两个ARIMA模型的问题,咱们一个一个来拆解:
问题1:带外生回归项的ARIMA预测报错
当你的ARIMA模型包含xreg外生变量时,预测未来值必须提供对应预测期的外生变量数据——这就是你遇到Error in arima2(x, model, xreg = xreg, method = method) : No regressors provided报错的核心原因。模型训练时用了季度虚拟变量,预测阶段也得给未来3年的季度虚拟变量,模型才能生成预测值。
解决方案
先构造未来12个季度(3年)的季度虚拟变量,再传入forecast()的xreg参数即可:
# 生成未来3年的季度时间序列框架 future_ts <- ts(start = 2016, frequency = 4, end = 2018) # 生成对应季度的虚拟变量(Q4作为基准组,无需单独传入) future_qdummies <- seasonaldummy(future_ts) # 带外生变量做预测并绘图 fc <- forecast(fit_y, h = 12, xreg = future_qdummies) plot(fc)
顺带提一句,训练期的虚拟变量也可以用seasonaldummy(y)一键生成,比手动绑定Q1-Q3更简洁哦。
问题2:获取ARIMA模型的t统计量和p值
首先要纠正一个小错误:你用coeftest(y)是不对的,第一个参数应该是你的模型对象fit_y,而不是原始序列y~
另外,forecast包的Arima()用极大似然(ML)估计时,系数的渐近分布默认是正态的,所以coeftest()默认返回z值。如果想要基于t分布的统计量和对应的p值,有两种方法:
方法1:手动计算(直观可控)
从模型对象中提取系数、标准误,手动计算t统计量和p值:
# 提取模型系数和标准误 model_coefs <- coef(fit_y) model_ses <- sqrt(diag(vcov(fit_y))) # 计算t统计量 t_stats <- model_coefs / model_ses # 计算p值:自由度 = 样本量 - 模型参数总数 df <- length(y) - length(model_coefs) p_vals <- 2 * pt(abs(t_stats), df = df, lower.tail = FALSE) # 整理成易读的数据框 model_summary <- data.frame( Coefficient = model_coefs, Std_Error = model_ses, t_Statistic = t_stats, p_Value = p_vals ) print(model_summary)
方法2:用coeftest指定t分布
借助lmtest包的coeftest(),手动传入自由度,让它直接输出t统计量:
library(lmtest) # 计算自由度 df <- length(y) - length(coef(fit_y)) # 指定t分布做系数检验 coeftest(fit_y, df = df)
内容的提问来源于stack exchange,提问作者Hisham
相关产品推荐
相关产品推荐

