[R] Error: function cannot be evaluated at initial parameters

Anmol Mohan anmolmohan at gmail.com
Thu Aug 6 15:22:20 CEST 2009


I am facing a similar problem

The code which i am pasting below has been taken from the book "Bayesian
Computation with R" by Jim Albert.

laplace=function (logpost, mode, par) 
{
    options(warn=-1)
    fit=optim(mode, logpost, gr = NULL, par, hessian=TRUE,
      control=list(fnscale=-1))
    options(warn=0)
    mode=fit$par
    h=-solve(fit$hessian)
    p=length(mode)
    int = p/2 * log(2 * pi) + 0.5 * log(det(h)) +
        logpost(mode, par)
    stuff = list(mode = mode, var = h, int = int, 
         converge=fit$convergence==0)   
    return(stuff)
}
A<-read.table(file="chemotherapy.txt",head=TRUE)
A
library(survival)
Model_01=survreg(Surv(A$time,A$status)~factor(A$treat)+A$age,dist="weibull")
weibullregpost=function (theta, A) 
{
    logf=function(t,c,x,sigma,mu,beta)
    {
    z=(log(t)-mu-x%*%beta)/sigma
    f=1/sigma*exp(z-exp(z))
    S=exp(-exp(z))
    c*log(f)+(1-c)*log(S)
    }
    
    k = dim(A)[2]
    p = k - 2
    t = A[, 1]
    c = A[, 2]
    X = A[, 3:k]
    sigma = exp(theta[1])
    mu = theta[2]
    beta = array(theta[3:k], c(p,1))
    return(sum(logf(t,c,X,sigma,mu,beta)))
}
start=array(c(-Model_01$scale, Model_01$coefficients),c(1,4))
d=cbind(A$time,A$status,A$treat-1,A$age)
fit=laplace(weibullregpost, start, d)
fit
proposal=list(var=fit$var,scale=1.5)
rwmetrop=function (logpost, proposal, start, m, par) 
{
    pb = length(start)
    Mpar = array(0, c(m, pb))
    b = matrix(t(start))
    lb = logpost(start, par)
    a = chol(proposal$var)
    scale = proposal$scale
    accept = 0
    for (i in 1:m) {
        bc = b + scale * t(a) %*% array(rnorm(pb), c(pb, 1))
        lbc = logpost(t(bc), par)
        prob = exp(lbc - lb)
        if (is.na(prob) == FALSE) {
            if (runif(1) < prob) {
                lb = lbc
                b = bc
                accept = accept + 1
            }
        }
        Mpar[i, ] = b
    }
    accept = accept/m
    stuff = list(par = Mpar, accept = accept)
    return(stuff)
}
bayesfit=rwmetrop(weibullregpost,proposal,fit$mode,10000,d)
bayesfit$accept
par(mfrow=c(2,2))
sigma=exp(bayesfit$par[,1])
mu=bayesfit$par[,2]
beta1=bayesfit$par[,3]
beta2=bayesfit$par[,4]
hist(beta1,xlab="treatment")
hist(beta2,xlab="age",main="")
hist(sigma,xlab="sigma",main="")


The code is running fine for the data given in the book, but when i am using
it on my data which is quite large compared to book's data, i am gettin same
error.
Then i tried changing the parameters and tested a lot of them but the error
remains.

The other error which i got was 

Error in chol.default(proposal$var) : 
  the leading minor of order 1 is not positive definite
In addition: Warning message:
In log(det(h)) : NaNs produced

Can anybody suggest some way to get the right parameters?

It is really very urgent and i desperately need some help!!!

Thanks a lot


sandsky wrote:
> 
> I have an error for a simple optimization problem. Is there anyone knowing
> about this error?
> 
> lambda1=-9
> lambda2=-6
> L<-function(a){
> s2i2f<-(exp(-lambda1*(250^a)-lambda2*(275^a-250^a))
>        -exp(-lambda1*(250^a)-lambda2*(300^a-250^a)))
> logl<-log(s2i2f)
> return(-logl)}
> optim(1,L)
> 
> Error in optim(1, L) : function cannot be evaluated at initial parameters
> 
> Thank you in advance
> 

-- 
View this message in context: http://www.nabble.com/Error%3A--function-cannot-be-evaluated-at-initial-parameters-tp19565286p24846455.html
Sent from the R help mailing list archive at Nabble.com.




More information about the R-help mailing list