使用BayesARIMAX建模后predict报错object 'X' not found如何解决
问题原因
- BayesARIMAX包的
predict方法存在实现缺陷:函数内部硬编码从全局环境查找名为X的训练用外生变量对象,而不是从已拟合的模型结果中提取该数据,因此当你训练模型时传入的外生变量没有被命名为全局环境下的X时,就会触发找不到对象的报错。 - 你的代码还存在三处隐藏问题:
number.row <- dim(merge.data)[1]中merge.data对象未定义,会导致训练集、测试集拆分逻辑出错- 预测时传入的
newxreg = x[1:3]是训练集前3个外生变量值,不符合预测逻辑,应该传入预测期对应的新外生变量值 - 你调用predict时取
bayes_arima_model[[1]],如果test_function正常收敛返回模型,不需要加[[1]]索引,只有当递归重试时才可能返回嵌套结构,需要先判断返回结果结构。
修复方案
按以下步骤修改代码即可解决报错:
- 先修正训练集拆分的错误,把
merge.data替换为你实际使用的数据集对象,此处如果仅用GDP数据和你生成的x变量,直接替换为gdp即可 - 在调用predict函数前,新增一行代码将训练用外生变量赋值给全局环境的
X - 修正
newxreg的取值,传入你预测步长对应的外生变量值
修改后的核心代码片段:
# 修正训练集拆分逻辑 number.row <- dim(gdp)[1] gdp.train <- gdp[1:train.row] gdp.test <- gdp[(train.row+1):number.row] date.test <- date.q[(train.row+1):number.row] # 其余代码不变,训练模型完成后,调用predict前新增以下代码 X <- x # 匹配包predict函数内部硬编码的变量名 # 假设你要预测3步,准备好对应3个新的外生变量值,这里示例用随机数代替,你替换为实际值 new_x = rnorm(3,4,1) # 调用predict,根据返回的模型结构调整是否加[[1]] bayes_arima_pred <- xts(predict(bayes_arima_model, newxreg = new_x)$pred, date.test[1:3])
内容的提问来源于stack exchange,提问作者Shahin Shirazi
相关产品推荐
相关产品推荐

