Dear all,
I would need to maximize a self-defined 'target' function(see below)
with respect to theta, where v follows a log-normal distribution with mean
'mu(x)' and a constant variance. For each v drawn from its distribution,
one maximized value and optimal theta are produced. I'd like to do this
repeatedly and store the maximized value and corresponding theta. I wrote the
following code that can produce a result. But the problem is that the result
doesn't seem to be the optimized one because if I arbitrarily choose
theta=c(4,27), I will get much bigger value than those simulated ones. I am not
sure where is wrong. Could anyone help me with this? Thank you in advance! Here
is the code:
rdt<-matrix(0,10,3)
for (i in 1:10){
#Define the target function
target<-function(theta){
d0=theta[1]
T0=theta[2]
mu<-function(x,d=d0,ta=23.86,ti=11.067,ppt=1.321,a=-12.31, S=5.62, L=3.83,
b=c(0.338,-0.0055,0.113,-0.00466,-0.008,-0.205,-0.044,0.266,1.719,-0.169)){
return(a+sum(b*c(x,x^2,d,d^2,S,L,ta,ti,ppt,ti*ppt)))}
v<-function(x,d=d0){
return(rlnorm(1,mean=mu(x),sd=0.835^0.5))}
p<-function(x,d=d0){
if(8.179+0.00023*(5.29+0.16*x-0.21*d)^5>45){return(45)}
return(8.179+0.00023*(5.29+0.16*x-0.21*d)^5)
}
Y3<-function(x,d=d0){
return(p(x,d)*v(x,d))
}
r<-Y3(T0)
return(r)
}
result<-optim(c(2,10),target,lower=c(0.1,0.5),upper=c(66,50),
method="L-BFGS-B",control=list(maxit=100000,fnscale=-1))
rdt[i,1]<-result$value
rdt[i,2:3]<-result$par }
---------------------------------
[[alternative HTML version deleted]]