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

R语言nls双变量模型使用predFit计算预测区间报错问题

nls模型使用predFit计算预测区间时变量找不到的问题解决

问题场景

使用nls拟合含Day、Treatment两个解释变量的非线性回归模型,单独获取预测值时predict()和predFit()都正常,但添加interval="prediction"参数计算预测区间时,触发object 'Day' not found错误,仅保留Day单变量的简化模型则无此问题。

数据集与模型代码

DS <- data.frame(Day=rep(1:5,t=2),
                 Amount=c(65,17,11,3.5,1.2,85,23,15,5,1.7),
                 Treatment=rep(c(0,1),e=5))

Model <- nls(Amount ~ (a+b*Treatment) * exp((c+d*Treatment)*Day) + e,
  data=DS, start = list(a=10,b=10,c=-0.1,d=-0.1,e=0.1))

正常输出预测值

# predict()输出结果
predict(Model)
# [1] 64.814965 18.614433  7.150980  4.306624  3.600871 84.626103 25.804353  9.562934  5.078476  3.840261

# predFit()无区间参数时输出结果
predFit(Model)
# [1] 64.814965 18.614433  7.150980  4.306624  3.600871 84.626103 25.804353  9.562934  5.078476  3.840261

计算预测区间时的错误

执行以下代码:

predFit(Model,interval="prediction",level=0.95)

触发错误:

Error in eval(form[[3]]) : object 'Day' not found
In addition: Warning message:
In assign(xname, newdata[, xname]) :
only the first element is used as variable name

解决方法

问题源于predFit()处理含多变量交互的nls模型时,自动生成预测数据的逻辑存在缺陷,需显式指定newdata参数,即使要复用原数据集也必须传入。

修正后的代码:

library(investr)
predFit(Model, interval="prediction", level=0.95, newdata=DS)

原理说明

当模型公式包含变量的乘积或嵌套交互(如Treatment与Day的组合项),predFit()无法自动从模型对象中正确提取所有变量的完整数据。显式传入newdata可以明确告知函数要使用的数据集,避免变量解析时的丢失问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:05:59