【问题标题】:nonlinear curve fitting in RR中的非线性曲线拟合
【发布时间】:2021-05-08 03:25:05
【问题描述】:

我正在研究 R 中的非线性曲线拟合,但我无法弄清楚如何使用变量来约束数据... 这是一个例子:

dat<-read.table(text="time y
1 4.62
2 13.55
3 30.82
6 93.97
12 145.93
24 179.93", header = TRUE)
plot(data);lines(data)
model <- nls(y ~ Max * (1-exp(-k * (time - Lag))),data=dat,start=list(Max = 200, k = 0.1, Lag = 0.5))

我想包括 if (time - Lag)

【问题讨论】:

  • 在你的等式中做y ~ Max * (1-exp(-k * pmax(time - Lag)))会起作用吗?在黑暗中拍摄。在这种情况下,任何time - Lag &lt; 0 都将为 0,即为您提供Max * (1 - exp(0)),或 0。

标签: r curve-fitting nls


【解决方案1】:

右手边乘以(time &gt; Lag)

st <- list(Max = 200, k = 0.1, Lag = 0.5)
model <- nls(y ~ (time > Lag) * Max * (1-exp(-k * (time - Lag))), data = dat, start = st)
model
## Nonlinear regression model
##   model: y ~ (time > Lag) * Max * (1 - exp(-k * (time - Lag)))
##    data: dat
##      Max        k      Lag 
## 185.6447   0.1523   1.6016 
##  residual sum-of-squares: 65.06
##
## Number of iterations to convergence: 4 
## Achieved convergence tolerance: 2.016e-07

plot(dat)
lines(fitted(model) ~ time, dat, col = "red")

【讨论】:

  • 只是一个问题@G。格洛腾迪克,表达式 (time &gt; Lag) 是作为布尔值(到 0 还是 1)?
  • 是的,TRUE/FALSE 在乘以数字或用于任何数字公式时会自动转换为 1/0。
  • 这是对强制为 0 或 1 的逻辑条件的有趣用法。每天我都在这里学到新东西。谢谢@G。格洛腾迪克,祝你有美好的一天。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 2019-03-15
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
相关资源
最近更新 更多