【问题标题】:Non-numeric argument to binary operator R NLS package二元运算符 R NLS 包的非数字参数
【发布时间】:2017-08-08 18:05:47
【问题描述】:

我正在使用 R 中的 nls 包来执行非线性拟合。我已经指定了我的自变量如下:

t <- seq(1,7)

我的因变量为 P

然后我尝试了:

m &lt;- nls(P ~ 1 / (c + q*exp(-b*t))^(1/v)),

但每次我得到:

"c + q * exp(-b * t) 中的错误:二进制的非数字参数 运营商”

我的每一个变量都是数字。有任何想法吗?

谢谢!

【问题讨论】:

  • 是否也提供cqbv
  • ... 作为起始值。
  • 尝试添加更多()m &lt;- nls(P ~ (1 / (c + q*exp(-b*t))^(1/v)))
  • 您还会收到带有建议的警告:考虑指定“开始”或使用 selfStart 模型。如果您指定 start nls 能够更好地识别什么是参数并正确解释您的公式。

标签: r


【解决方案1】:

您的脚本中存在不止一个问题。主要问题是你不应该使用 R 使用的名称:t 是矩阵转置,c 是创建向量的常用方法,q 是退出指令。 nls() 不会尝试适应它们,因为它们已经定义。我建议使用更有意义且危险性更低的变量,例如Coef1Coef2、...

第二个问题是您试图将具有 4 个变量的模型拟合到具有 7 个数据的数据集...这可能会产生奇点和其他问题。

为了论证,我将你的模型简化为三个变量,并更改了一些名称:

Time <- seq(1,7)
Prob <- c(0.0246, 0.2735, 0.5697, 0.6715, 0.8655, 0.9614, 1)
plot(Time, Prob)

现在我们执行 nls() 拟合:

Fit <- nls(Prob ~ 1 / (Coef1 + Coef2 * exp(-Coef3 * Time))) 
X   <- data.frame(Time = seq(0, 7, length.out = 100))
Y   <- predict(object = Fit, newdata = X)
lines(X$Time, Y)

以及结果总结:

summary(Fit)           
# Formula: Prob ~ 1/(Coef1 + Coef2 * exp(-Coef3 * Time))
# 
# Parameters:
# Estimate Std. Error t value Pr(>|t|)    
# Coef1  1.00778    0.06113  16.487 7.92e-05 ***
# Coef2 23.43349   14.42378   1.625   0.1796    
# Coef3  1.04899    0.21892   4.792   0.0087 ** 
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# Residual standard error: 0.06644 on 4 degrees of freedom
# 
# Number of iterations to convergence: 12 
# Achieved convergence tolerance: 3.04e-06

我知道这不是您想要的,但我希望它有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    相关资源
    最近更新 更多