我需要找到一个最小化QRsum的β(3元素矢量),定义如下:
#indicator function
I=function(x,min,max){
if (min<=x && x<max){i=1} else {i=0}}
#QR check function
rho=function(a, theta){
return(abs(theta-I(a,-Inf,0))*abs(a))
}
#QR sum
QRsum=function(beta,y,X,theta){
sum=0
for (i in 1:length(y)){
sum=sum+rho(y[i]-t(X[i,])%*%beta,theta)
}
sum=1/length(y)*sum
return(sum)
}
result=optim(initial_beta,QRsum(beta,y,X,0.05),method="BFGS")
运行优化功能已完成以下消息:
Browse[1]> Q
> result=optim(initial_beta[1,],fn=QRsum(beta[1,],y,X,0.05),method="BFGS")
Error in (function (par) : could not find function "fn"
QRsum的参数是y-a向量,X - 具有3列的矩阵和β - 应该优化的3个元素的向量。 QRsum函数在调用时工作正常,但在这里它以某种方式失败。 y和X是我之前定义的对象还是未知的,尽管我之前定义过它们?我应该把什么作为我的函数的第一个参数 - 向量的任意值? 我必须说我第一次使用优化,所以我想我在这里遗漏了一些东西,但我无法弄清楚究竟是基于什么帮助。
答案 0 :(得分:1)
您需要将optim
包的调用修改为以下内容:
# define some data / value with which you want to use in the optimization
y_val <- ...
X_val <- ...
theta_val <- 0.05
# call optim / optimize beta with given values for y, X and theta
optim(par=initial_beta, fn=QRsum, y=y_val, X=X_val, theta=theta_val, method="BFGS")