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

R中的非线性最小二乘误差,r,regression,R,Regression,我是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] 此外:警告消息: Error in qr(.swts * gr) : dims [product 3] do not match the length of obj

我是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]
此外:警告消息:

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

您的问题在于
sum()
函数。你确定你的公式正确吗?您的总和将存储在
x
中的预测信息向量压缩为一个数字,但您的结果长度为25。是的,我确信我的公式是正确的:“1/n*sum(exp(b0+b1*x1)*log(1+Y^ta)”,它相当于“mean(exp(b0+b1*x1)*log(1+Y^ta)”“平均值是一个数字。但你是在模拟25。试着去掉和,看看happensIt在没有和的情况下能起什么作用,但我的公式包含一个和nls函数的输出给ta 0Thanks@G.Grothendieck
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