R中的非线性最小二乘误差



我是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))

根据您想要的内容,这里有两种可能性。它们并不等同。

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(或者,我们可以在没有1/n*sum的情况下最小化y11和右手边的差的平方和,如下所示:

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

最新更新