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

如何在R语言中通过循环批量求解非线性方程并获取参数与R方

批量求解非线性方程并获取拟合参数与R方

你可以通过将方程与对应初始值整理为列表,结合向量化函数(如Map)批量完成拟合与结果计算,避免重复编写代码。以下是完整实现:

1. 准备数据、方程与初始值列表

先把所有待拟合的方程和对应的初始参数值分别存入列表,确保两者顺序严格一一对应:

# 原始数据
x <- c(1,2,3,4,5,6,7)
y <- c(0.12,0.15,0.19,0.29,0.52,0.60,0.66)

# 待拟合方程列表
equations <- list(
  y ~ a*x + b,
  y ~ a*(x - b),
  y ~ a + b*x + c*x^0.5,
  y ~ a*x/(b + x)
)

# 对应每个方程的初始参数列表(顺序需与方程列表匹配)
start_params <- list(
  list(a=1, b=1),
  list(a=1, b=1),
  list(a=1, b=1, c=1),
  list(a=1, b=1)
)

2. 批量拟合与结果计算

使用Map函数同时遍历方程和初始值,完成拟合后提取系数并计算R方:

# 批量执行拟合与结果提取
model_results <- Map(function(formula, start) {
  # 拟合非线性模型
  fit <- nls(formula, start = start, data = data.frame(x, y))
  # 计算R方
  pred <- predict(fit)
  r_sq <- cor(y, pred)^2
  # 返回包含系数和R方的结果
  list(
    coefficients = coef(fit),
    R_squared = r_sq
  )
}, equations, start_params)

# 为结果命名(方便识别对应模型)
names(model_results) <- paste0("model_", seq_along(model_results))

3. 查看结果

直接打印model_results即可查看所有模型的拟合参数和R方:

# 打印全部结果
print(model_results)

# 单独提取某一模型的结果,比如第三个模型
model_results$model_3

这种方式可轻松扩展到20+个方程,只需在equations和start_params列表中添加对应内容,无需修改核心循环逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:05:22