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

使用R语言onls包拟合非线性幂律函数出现报错如何解决?

问题解决方法

错误原因

你的报错核心是数据框构造代码错误:as.data.frame(x, y)的语法不符合R的数据框创建规则,as.data.frame()第一个参数是待转换的对象,第二个参数为行名等配置参数,不会将y识别为第二列存入数据框,最终生成的DAT仅包含x变量,onls函数读取data参数中的y时找不到符合要求的变量,就会抛出格式错误。

修复步骤

1. 正确构造输入数据框

将创建DAT的代码替换为标准数据框构造写法:

DAT <- data.frame(x = x, y = y)

生成的DAT会同时包含x、y两列,结构完全符合模型函数的输入要求。

2. 调整初始值(可选,提升拟合成功率)

你要拟合的公式为y = b * x^(-a),对应你写的拟合公式y ~ b1*x^b2时,b2的理论值为负数,你原本设置的初始值1为正数,大概率会导致拟合不收敛,建议调整初始值到更接近真实值的范围:

# 未安装onls包先执行:install.packages("onls")
library(onls)
fit <- onls(y ~ b1*x^b2, data = DAT, start = list(b1 = 10000, b2 = -1.5))

3. 提取拟合结果

拟合完成后执行summary(fit)即可查看参数估计值、显著性、拟合优度等结果,你需要的幂律参数:

  • b对应coef(fit)[["b1"]]
  • a对应-coef(fit)[["b2"]]

完整可运行代码

# 安装并加载包
# install.packages("onls")
library(onls)

# 输入原始数据
x <- c(370, 470, 520, 590, 660, 880, 950)
y <- c(11.7, 6.7, 5.31, 4.6, 4.8, 3.2, 1.6)

# 构造标准数据框
DAT <- data.frame(x = x, y = y)

# 执行正交非线性最小二乘拟合
fit <- onls(y ~ b1*x^b2, data = DAT, start = list(b1 = 10000, b2 = -1.5))

# 输出拟合结果
summary(fit)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:57:04