【问题标题】:Nonlinear regression in R / SR / S中的非线性回归
【发布时间】:2011-10-14 06:25:25
【问题描述】:

我有一个与 R / S / 非线性回归相关的问题,而且我不是 R 程序员,所以我需要帮助。

我有两个数组 - tt 和 td。

我需要找到参数 a、b 和 c,因此对于非线性函数,最小二乘之和是最小的:

td / tt - a * exp( b * tt ) + c 

我不知道该怎么做。我尝试了nls() 函数,nls2() 没有运气...

提前致谢。

编辑:

我的数据:

td <-as.array(0.2, 0.4, 0.8, 1.5, 3);

tt <-as.array(0.016, 0.036, 0.0777, 0.171, 0.294);

使用下面答案中的方法,我得到随机数据的 ok 值,但我使用的数据返回缺失值或评估模型消息时产生的无穷大。

很抱歉没有尽快提供数据。

【问题讨论】:

  • 如果您向我们提供示例数据和您尝试过的示例代码,问题会更容易回答。
  • 请编辑您的问题以便重现。谢谢,欢迎来到 SO。 stackoverflow.com/questions/5963269/…

标签: r statistics nonlinear-optimization s


【解决方案1】:

您的数据:

n <- 100
td <- runif(n)
tt <- runif(n)
data <- data.frame(td = td, tt = tt)

函数的合成结果

a <- 0.5
b <- 2
c <- 5
y <- jitter(td / tt - a * exp( b * tt ) + c)

(在实践中,直到后面你才会知道a、b和c是什么。这里我们用它们来与答案进行比较。)

配件:

nls(
  y ~ td / tt - a * exp( b * tt ) + c, 
  data = data, 
  start = list(a = 1, b = 1, c = 1)
)

答案:

Nonlinear regression model
  model:  y ~ td/tt - a * exp(b * tt) + c 
   data:  data 
     a      b      c 
0.4996 2.0008 4.9994 
 residual sum-of-squares: 0.0001375

Number of iterations to convergence: 7 
Achieved convergence tolerance: 1.604e-06

【讨论】:

  • 我很抱歉,但是一旦我用随机数据替换前三行:n
  • 将 3 参数非线性模型拟合到 5 个数据点总是让人头疼。您需要良好的起始值。
猜你喜欢
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 2016-07-09
  • 2012-07-24
  • 1970-01-01
  • 2022-01-11
相关资源
最近更新 更多