r - 四参数多项式的平滑曲线
问题描述
我正在使用这个公式处理一个 nls 模型(b1 * ((b2 * x)^b4)) / (1 + ((b2 * x)^b4))^(b3 / b4)
我使用带有随机算法的 nls2 包来查找初始值。这是我的公式和曲线函数代码:
eqn <- function(x){(b1 * ((b2 * x)^b4)) / (1 + ((b2 * x)^b4))^(b3 / b4)}
curve(eqn, data$x, data$y, col = "green", n = 6)
我不知道,如果我正确使用 n = "" 。但是,我使用 n = 6 作为方程的长度,因为我的数据在 x 和 y 变量上有 6 个值。
但是,当我尝试为模型制作曲线时,它最终出现了错误:object 'b1' not found.
我怎样才能避免这个错误?我通过在 nls2 的结构之外设置使用 nls2 获得的变量的估计值来避免这个错误。
例如:
b1 = 1
b2 = 5
b3 = 0.7
b4 = 9.5
**另一方面,如何在curve()
不出错的情况下设置方程内的变量值:object 'b1' not found.
,我应该使用start = list()
吗?
curve(eqn, data$x, data$y, col = "green", n = 6, start = list (b1 = 1, b2 = 5, b3 = 0.7, b = 9.5))
我找到了各种关于为多项式方程制作曲线的例子,但这些例子已经为方程的变量定义了值。有没有办法使用从 nls2 计算的估计值来设置变量?
解决方案
您需要定义方程以接受系数 b1 到 b4 作为输入,如下所示:
eqn <- function(x, b1, b2, b3, b4){
(b1 * ((b2 * x)^b4)) / (1 + ((b2 * x)^b4))^(b3 / b4)
}
将系数传递给调用函数,如下所示:
curve(eqn(x, b1 = 1, b2 = 5, b3 = 0.7, b4 = 9.5), from=0, to=2, col = "green", n = 60)
您需要定义 x 的起始值和终止值。还要为“n”选择一个足够大的值以获得平滑曲线,n 在 6 时将不平滑。
推荐阅读
- python-3.x - 使用 ImageMagick 转换 - 非法参数
- scala - 如何为 Binding.Scala 执行单元测试?
- html - PowerShell 从网页中获取字符串
- json - 我可以循环一些带有嵌套值的数据 json
- javascript - 将 jquery 转换为 javascript 以帮助显示 div?
- gradle - 在 Gradle docker 映像中运行时如何避免 Gradle 包装器下载发行版?
- python - 删除列数据中的空格而不丢失它们在 python pandas 数据框中的原始数据
- html - 如何使用 .each Rails 为 html 选择器创建条件
- woocommerce - 在 WooCommerce 单品图片下显示自定义字段
- java - 为什么我的 Spring 3.2 混合配置会导致异常?