我有一些数据,我尝试使用以下方法拟合幂律曲线:
z <- nls(y ~ a*x^b+c, start = list(a=1, b=1))
但是我不断收到以下错误消息:
* x ^ b + c中的错误:二元运算符的非数字参数
(较短的版本,y ~ a*x^b+c
工作正常,但我需要免费字词c
)。
有什么想法吗?
答案 0 :(得分:6)
您没有在开始时指定c
,因此R会尝试从工作区中获取它。如果没有c
那么它最终会获得c
函数。所以它试图在c
函数中添加一些东西,然后抛出:
> z <- nls(y ~ a*x^b+c, start = list(a=1, b=1))
Error in a * x^b + c : non-numeric argument to binary operator
这里的“二元运算符”是+
,“非数字参数”是c
函数。
如果您想要适合c
:
> z <- nls(y ~ a*x^b+c, start = list(a=1, b=1, c=1))
> z
Nonlinear regression model
model: y ~ a * x^b + c
data: parent.frame()
a b c
1.647 1.575 2.596
residual sum-of-squares: 9.07
Number of iterations to convergence: 6
Achieved convergence tolerance: 6.503e-07
如果您要修复c
,请定义它,然后将其删除:
> c=2
> z <- nls(y ~ a*x^b+c, start = list(a=1, b=1))
> z
Nonlinear regression model
model: y ~ a * x^b + c
data: parent.frame()
a b
1.802 1.539
residual sum-of-squares: 9.42
Number of iterations to convergence: 7
Achieved convergence tolerance: 2.899e-08