[R] optim works on command-line but not inside a function

Berend Hasselman bhh at xs4all.nl
Wed Nov 3 21:03:09 CET 2010



Damokun wrote:
> 
> Dear all, 
> 
> I am trying to optimize a logistic function using optim, inside the
> following functions: 
> #Estimating a and b from thetas and outcomes by ML
> 
> IRT.estimate.abFromThetaX <- function(t, X, inits, lw=c(-Inf,-Inf),
> up=rep(Inf,2)){
>   optRes <- optim(inits, method="L-BFGS-B", fn=IRT.llZetaLambdaCorrNan, 
>       gr=IRT.gradZL, 
>       lower=lw, upper=up, t=t, X=X)
>   c(optRes$par[2], -(optRes$par[1]/optRes$par[2]) )
> }
> 
> #Estimating a and b from thetas and outcomes by ML, avoiding 0*log(0)
> IRT.estimate.abFromThetaX2 <- function(tar, Xes, inits, lw=c(-Inf,-Inf),
> up=rep(Inf,2)){
> 
>   optRes <- optim(inits, method="L-BFGS-B", fn=IRT.llZetaLambdaCorrNan, 
>       gr=IRT.gradZL, 
>       lower=lw, upper=up, t=tar, X=Xes)
>   c(optRes$par[2], -(optRes$par[1]/optRes$par[2]) )
> }
> 
> The problem is that this does not work: 
>> IRT.estimate.abFromThetaX(sx, st, c(0,0))
> Error in optim(inits, method = "L-BFGS-B", fn = IRT.llZetaLambdaCorrNan, 
> : 
>   L-BFGS-B needs finite values of 'fn'
> But If I try the same optim call on the command line, with the same data,
> it works fine:
>> optRes <- optim(c(0,0), method="L-BFGS-B", fn=IRT.llZetaLambdaCorrNan, 
> +       gr=IRT.gradZL, 
> +       lower=c(-Inf, -Inf), upper=c(Inf, Inf), t=st, X=sx)
>> optRes
> $par
> [1] -0.6975157  0.7944972
> $convergence
> [1] 0
> $message
> [1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"
> 

In your command line you have set t=st and X=sx.
However in the alternative you do:  IRT.estimate.abFromThetaX(sx, st,
c(0,0))

Therefore you are assigning sx to t and st to X in the
IRT.estimate.abFromThetaX function, which is reversed from your command line
call.

You should switch sx and st in the function call:
IRT.estimate.abFromThetaX(st, sx, c(0,0))

and then all will be well.

best

Berend
If yoou
-- 
View this message in context: http://r.789695.n4.nabble.com/optim-works-on-command-line-but-not-inside-a-function-tp3025414p3026099.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list