R错误:没有起始值的参数

时间:2016-08-24 02:46:56

标签: r non-linear-regression

非线性现实世界数据,n = 2,600

SAMPLE 
X values    71.33   74.98   80  85.35   90.03
Y values    119.17  107.73  99.72   75  54.59

我手动绘制了一个起点的公式,

formula:  y = b/x^2+a
manual:   y = 800000/x^2-39.5
sum of residuals = 185
correlation forecast to actual =0.79 

在R中使用nls公式,我收到一条错误消息:

a_start = -39.5
b_start = 800000
m<-nls(y~b/(x^2)+a, start=list(a=a_start,b=b_start))

Error in nls(y~ b/(x^2) + a, start = list(a = a_start, b = b_start)) : 
parameters without starting value in 'data': y, x

不确定我在这里缺少什么。

1 个答案:

答案 0 :(得分:4)

我可以重现你的错误。 nls函数缺少其中的参数data

 m<-nls(y ~ b/(x^2)+a, start=list(a=a_start, b=b_start))
 # Error in nls(y ~ b/(x^2) + a, start = list(a = a_start, b = b_start)) : 
 # parameters without starting value in 'data': y, x

现在创建数据df并将其传递到nls函数。确保I()中的绝缘表达是预期的表达式。

df <- data.frame(x = c(71.33,   74.98 ,  80 , 85.35  , 90.03),
                 y = c(119.17,  107.73 , 99.72 ,  75,  54.59))
a_start <- -39.5
b_start <- 800000
m <- nls(y ~ I(b/(x^2+a)), data = df, start=list(a=a_start, b=b_start)) 
summary(m)

# Formula: y ~ I(b/(x^2 + a))
# 
# Parameters:
#   Estimate Std. Error t value Pr(>|t|)  
# a  -1743.2      872.5  -1.998   0.1396  
# b 412486.2    89981.4   4.584   0.0195 *
#   ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# Residual standard error: 9.103 on 3 degrees of freedom
# 
# Number of iterations to convergence: 6 
# Achieved convergence tolerance: 4.371e-06

阅读公式手册页以了解绝缘表达。

?formula

formula的手册页说明了

  

^运算符表示交叉到指定的度数。例如   (a + b + c)^ 2与(a + b + c)*(a + b + c)相同,后者又扩展为a   公式包含a,b和c的主要影响   二阶互动

它还建议使用I()来防止公式运算符和算术运算符之间存在歧义。

以下是公式手册

中的另一个引用
  

避免这种混淆,函数I()可以用来括起来   模型公式的一部分,其中运算符用于其中   算术意义。例如,在公式y~a + I(b + c)中,该项   b + c应解释为b和c的总和。

此手册页也值得一读

 ?AsIs
  

在功能公式中。它用来抑制对它的解释   运算符如“+”,“ - ”,“*”和“^”作为公式运算符,所以它们   用作算术运算符。这被解释为符号   terms.formula。