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

能否利用nlsList对象实现反向预测,估算给定y对应的x值?

解决nlsList模型反推x值的问题

nlsList本质是分组的nls模型集合,每个元素都是标准的nls对象,刚好能适配invest函数的要求——只需要逐个处理每个子模型即可:

方法1:用investr包逐个处理子模型

假设你的nlsList对象名为my_nlsList,需要反推的目标y值按分组顺序存在target_y向量里,直接用mapply遍历每个模型和对应的y值:

library(investr)

# 按分组顺序传入目标y值,得到对应x的估算值
pred_x <- mapply(function(sub_mod, y_val) {
  # 可根据需求设置interval参数,比如"confidence"获取置信区间
  invest(sub_mod, y = y_val, interval = "none")$x
}, my_nlsList, target_y)

方法2:手动实现非线性反推(无需额外包)

如果不想依赖investr,可利用uniroot函数求解非线性方程f(x) = y。先定义反推函数,再遍历子模型:

# 定义反推函数:计算模型预测值与目标y的差值,用于找根
inv_function <- function(x, model, target_y) {
  predict(model, newdata = data.frame(x = x)) - target_y
}

# 遍历每个子模型,求解对应x值
pred_x <- lapply(seq_along(my_nlsList), function(i) {
  sub_mod <- my_nlsList[[i]]
  y_val <- target_y[i]
  # 需根据你的数据设置合理的x搜索区间,避免无解或收敛失败
  uniroot(inv_function, interval = c(0, 20), model = sub_mod, target_y = y_val)$root
})

# 转成向量方便查看
pred_x <- unlist(pred_x)

注意事项

  • 搜索区间interval必须覆盖真实x值的范围,否则uniroot会报错;
  • 如果模型存在多个解,需要根据业务逻辑限定区间或选择合适的解;
  • 若分组数量多,可结合dplyr或data.table将结果与分组信息绑定,方便后续分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:55:17