R:拟合幂律曲线到数据(c的起始值)

时间:2014-12-31 14:49:38

标签: r

我有一些数据,我尝试使用以下方法拟合幂律曲线:

z <- nls(y ~ a*x^b+c, start = list(a=1, b=1))

但是我不断收到以下错误消息:

  

* x ^ b + c中的错误:二元运算符的非数字参数

(较短的版本,y ~ a*x^b+c工作正常,但我需要免费字词c)。

有什么想法吗?

1 个答案:

答案 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