首页 > 解决方案 > 四参数多项式的平滑曲线

问题描述

我正在使用这个公式处理一个 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 计算的估计值来设置变量?

标签: rfunctioncurve-fittingpolynomialsnls

解决方案


您需要定义方程以接受系数 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 时将不平滑。


推荐阅读