【问题标题】:Non- linear least square error in RR中的非线性最小二乘误差
【发布时间】:2018-12-27 14:09:40
【问题描述】:

我是 R 的初学者,我正在尝试查找函数的参数 (b0,b1,ta)

1/n*sum(exp(b0+b1*x1)*log(1+Y^(ta))) 

但我不断收到错误:

R 输出:

Error in qr(.swts * gr) : dims [product 3] do not match the length of object [25]

另外:警告信息:

.swts * gr 中:较长的对象长度不是较短对象长度的倍数

有人可以帮忙解决这个问题吗?

set.seed(56)  
x1 =runif(25)
y11 = runif(25)  
n= 25 
b0=1    
b1=1    
ta=0.5 
Y = runif(25)   
dat= data.frame(y11,x1)    
nls( y11~ 1/n*sum(exp(b0+b1*x1)*log(1+Y^(ta))),data = dat ,c(b0=1,b1=1,ta=0.5))

【问题讨论】:

  • 您的问题出在sum() 函数上。你确定你的公式是正确的吗?您的总和将存储在x 中的预测信息向量折叠成一个数字,但您的结果长度为 25。
  • 是的,我确信我的公式是正确的: '1/n * sum( exp( b0 + b1*x1)* log(1+Y^ta )' 这相当于 '平均值(exp(b0 + b1*x1)* log(1+Y^ta)'
  • 均值是一个数字。但是您正在建模 25。尝试删除总和,看看会发生什么
  • 它没有总和但我的公式包含总和
  • nls 函数的输出给出了 ta 0

标签: r regression


【解决方案1】:

这里有两种可能性,具体取决于您想要什么。它们不是等价的。

1) 首先,我们可以使用optim 来最小化均值差的平方。

f <- function(par, x1, Y, y11) {
 b0 <- par[1]
 b1 <- par[2]
 ta <- par[3]
 (mean(exp(b0+b1*x1)*log(1+Y^(ta))) - mean(y11))^2
}

set.seed(56)  
x1 =runif(25)
y11 = runif(25)  
Y = runif(25)   

optim(c(1,1,0.5), f, x1 = x1, Y = Y, y11 = y11)

给予:

$`par`
[1] 0.2307641 0.8844143 1.1084035

$value
[1] 1.544321e-08

$counts
function gradient 
      56       NA 

$convergence
[1] 0

$message
NULL

2) 或者,我们可以最小化y11 和右侧没有1/n*sum 的差的平方和,如下所示:

dat <- data.frame(x1, Y, y11)
nls( y11 ~ exp(b0+b1*x1)*log(1+Y^(ta)), dat, list(b0=1,b1=1,ta=0.5))

给予:

Nonlinear regression model
  model: y11 ~ exp(b0 + b1 * x1) * log(1 + Y^(ta))
   data: dat
     b0      b1      ta 
0.08043 0.10121 0.35551 
 residual sum-of-squares: 1.585

Number of iterations to convergence: 8 
Achieved convergence tolerance: 1.578e-06

【讨论】:

  • 感谢@G.Grothendieck
猜你喜欢
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
相关资源
最近更新 更多