You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

循环运行Arima模型后,如何将MAE结果合并为单个数据框?

解决循环计算MAE并合并为数据框的问题

首先看你的原代码,核心问题是你虽然初始化了alladvancedfit数据框,但循环里并没有把每次计算的MAE结果存储进去——每次循环只是覆盖了inSampleAdvancedFitMAE这个变量,最后自然只保留了最后一次的计算值。下面给你三种可行的修正方案,每种都能帮你把7个MAE结果整合到同一个数据框里:

方案一:直接给预初始化的数据框赋值

这种方式最贴合你原本的思路,利用已经创建好的7行数据框,通过循环索引定位行来存储结果:

AllModel <- AllData[c(2:8)]
alladvancedfit <- data.frame(matrix(, nrow=7, ncol=1))
# 给列命名,让结果更易读
colnames(alladvancedfit) <- "MAE"

# 用索引循环,同时定位数据框的行
for (i in seq_along(AllModel)) {
  Model <- AllModel[[i]]
  advancedfit.model <- Arima(AllData$x1, order=c(0,1,2), xreg=Model)
  alladvancedfit[i, "MAE"] <- mean(abs(advancedfit.model$residuals))
}

# 给行添加变量名(对应v1-v7),方便对应每个变量的MAE
rownames(alladvancedfit) <- colnames(AllModel)

方案二:先收集到向量再转数据框

如果不想提前初始化数据框,也可以先把所有MAE结果存到一个向量里,循环结束后再转换成结构化的数据框:

AllModel <- AllData[c(2:8)]
mae_vector <- c()

for (Model in AllModel) {
  advancedfit.model <- Arima(AllData$x1, order=c(0,1,2), xreg=Model)
  mae_val <- mean(abs(advancedfit.model$residuals))
  mae_vector <- c(mae_vector, mae_val)
}

# 转换成带变量名的完整数据框
alladvancedfit <- data.frame(
  Variable = colnames(AllModel),
  MAE = mae_vector,
  row.names = NULL
)

方案三:正确使用rbind合并

你之前尝试rbind失败,大概率是因为直接把单个数值和数据框合并了——rbind要求合并的对象结构一致。只要把每次的MAE包装成单行数据框,就能正常合并:

AllModel <- AllData[c(2:8)]
alladvancedfit <- data.frame()

for (Model in AllModel) {
  advancedfit.model <- Arima(AllData$x1, order=c(0,1,2), xreg=Model)
  mae_val <- mean(abs(advancedfit.model$residuals))
  # 把单个MAE值包装成一行的数据框再合并
  alladvancedfit <- rbind(alladvancedfit, data.frame(MAE = mae_val))
}

rownames(alladvancedfit) <- colnames(AllModel)

注意:这种rbind循环的方式在数据量很大时效率偏低,小数据集用没问题,大数据集更推荐前两种方案。

运行任意一种代码后,你都会得到类似这样的结构化结果:

VariableMAE
v161.01004
v261.23916
v360.78099
v461.15394
v561.16968
v661.30191
v761.00637

内容的提问来源于stack exchange,提问作者aua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 21:39:04