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

在R中用predict扩展nls拟合曲线时无法生成新预测值求助

解决nls预测仅返回拟合值的问题

我看了你的代码,问题主要出在新数据的构造方式和predict的调用逻辑上,咱们一步步来修正:

问题根源

  1. 你构造的NewData把拟合时的x和拟合结果RES绑定到了一起,但predict.nls只需要包含**自变量(这里是x)**的数据,完全不需要传入因变量y。而且你用as.matrix转换后处理列名的方式也有问题,导致数据结构不符合函数要求。
  2. 你没有传入真正的「新x值」,而是复用了拟合时的那5个x,所以返回的自然是原来的拟合值,不是新的预测结果。

修正步骤与代码

1. 准备新的预测数据

如果你想对全部的xall(也就是mydata里所有的激发能)做预测,直接把它整理成列名为x的数据框就行:

# 准备新数据:用全部的xall作为预测自变量
new_x_data <- data.frame(x = xall)

要是你想预测自定义的x范围(比如从2到5,步长0.1),可以改成:

new_x_data <- data.frame(x = seq(2, 5, 0.1))

2. 正确调用predict函数

现在用这个新数据框调用predict,就能得到对应x的预测值了,还可以指定置信区间或预测区间:

# 生成带95%置信区间的预测结果
pred_results <- predict(FitEt, newdata = new_x_data, se.fit = TRUE, interval = "confidence", level = 0.95)

# 查看前几行结果
head(pred_results$fit)

3. 完整修正后的预测+可视化代码

把你原来的预测部分代码替换成下面这段,还能直接看到带置信区间的可视化结果:

### 修正后的predict nls ###
# 准备新的x数据(这里用全部的xall,可自定义范围)
new_x_data <- data.frame(x = xall)

# 执行预测,获取拟合值、置信区间和标准误
pred_results <- predict(FitEt, newdata = new_x_data, se.fit = TRUE, interval = "confidence", level = 0.95)

# 合并预测结果与自变量,方便后续处理
pred_df <- cbind(new_x_data, pred_results$fit, se.fit = pred_results$se.fit)
colnames(pred_df) <- c("x", "fit", "lwr", "upr", "se.fit")

# 可视化:原始数据+拟合曲线+置信区间
plot(xall, yall, col = "gray48", pch = 20, main = "Prediction with 95% Confidence Interval")
lines(xall, pred_df$fit, col = "red", lwd = 2)
lines(xall, pred_df$lwr, col = "blue", lty = 2)
lines(xall, pred_df$upr, col = "blue", lty = 2)

额外提醒

predict.nls要求newdata必须是data.frame,并且里面的变量名要和你nls公式里的自变量名完全一致(这里你的公式用的是x,所以新数据框必须有一列叫x),这一点很关键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:40:50