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

R语言调用MAPE函数计算预测误差报错如何解决

报错核心原因
  • 参数长度不匹配:sel筛选的是rent字段为NA的样本子集,newprediction的行数等于rent缺失的样本总数,但传入MAPE的第二个参数mysample$rent是全数据集的rent序列,包含所有非缺失、缺失样本的rent值,两者长度不一致,无法逐行配对计算误差。
  • 输入对象类型错误:调用predict()时设置了interval="prediction"参数,返回的newprediction是3列矩阵,列名分别为fit(点预测值)、lwr(预测区间下限)、upr(预测区间上限),并非MAPE函数要求的一维预测值向量,函数无法识别有效预测输入。
  • 计算逻辑矛盾:MAPE的计算需要配对的真实值与预测值,你筛选做预测的样本本身rent就是缺失状态,没有可供比对的真实rent值,这部分样本的预测结果本身就不具备计算MAPE的基础。
对应解决方案

根据你的实际需求二选一操作即可:

场景1:需要计算模型的MAPE指标

MAPE是预测值和真实值的偏差指标,必须在有真实rent值的样本上计算,不能用rent缺失的样本:

# 筛选rent非缺失、有真实值的样本
valid_sel <- !is.na(mysample$rent)
# 生成对应样本的点预测值,不要加interval参数,直接返回一维预测向量
valid_pred <- predict(model.5, newdata = mysample[valid_sel, ])
# 提取对应位置的真实rent值
valid_real <- mysample$rent[valid_sel]
# 传入同长度的预测值、真实值向量计算MAPE
MAPE(valid_pred, valid_real)

注意:如果使用第三方包(如forecast、DMwR2)中的MAPE函数,需确保传入的两个参数都是等长的数值型向量,无NA值,否则仍会触发报错。如果不想依赖第三方包,也可以直接手动计算:mean(abs((valid_real - valid_pred)/valid_real)) * 100

场景2:需要给rent缺失的样本填充预测值

这部分样本没有真实rent值,不需要计算MAPE,直接提取预测结果的点估计列填充即可:

sel <- is.na(mysample$rent)
newprediction <- predict(model.5, newdata=subset(mysample, sel), interval="prediction")
# 提取fit列的点预测值填充到原数据集的缺失位置
mysample$rent[sel] <- newprediction[, "fit"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:15:35