# [R] Error in maximum likelihood estimation.

From: Dong-hyun Oh <r.arecibo_at_gmail.com>
Date: Mon, 16 Jun 2008 16:41:04 +0200

Dear UseRs,

I wrote the following function to use MLE.

mlog <- function(theta, nx = 1, nz = 1, dt){

beta <- matrix(theta[1:(nx+1)], ncol = 1)    delta <- matrix(theta[(nx+2):(nx+nz+1)], ncol = 1)    sigma2 <- theta[nx+nz+2]
gamma <- theta[nx+nz+3]

```   y <- as.matrix(dt[, 1], ncol = 1)
x <- as.matrix(data.frame(1, as.matrix(dt[, 2:(nx+1)], ncol = 2)))
z <- as.matrix(dt[, (nx+2):(nx+nz+1)], ncol = nz)

```

d <- z %*% delta / (gamma * sigma2)^.5    mustar <- (1-gamma) * z %*% delta - gamma * ( y - x %*% beta)    sigmastar <- (gamma * (1-gamma) * sigma2)^.5    dstar <- mustar / sigmastar

```   loglik <- (-0.5 * nrow(x) *(log(2*pi) + log(sigma2))
-0.5 * sum(( y - x %*% beta + z %*% delta)^2/sigma2)
-sum(log(pnorm(d))) + sum(log(pnorm(dstar))))
```
return(-loglik)
}

To test the above function with an artificial data set, I created the following data.frame.

```x1 <- abs(rnorm(100))*100
x2 <- abs(rnorm(100))*10
z1 <- abs(rnorm(100))*5
z2 <- abs(rnorm(100))*7
```

y <- abs(0.3 + 0.3* log(x1) + 0.7* log(x2)) dat <- data.frame(log(y), log(x1), log(x2), z1, z2)

The starting value I set up is as follows:

theta.start <- c(0.09, 0.008, 0.008, 0.023, 0.0008, 0.008, 0.008)

Applying nlm() function to the above function with the starting values gives the following error message.

out <- nlm(mlog, theta.start, nx = 2 , nz = 2, dt = dat, print.level = 2, hessian\
• T, iterlim = 500)

iteration = 0
Step:
 0 0 0 0 0 0 0
Parameter:
 0.0900 0.0080 0.0080 0.0230 0.0008 0.0080 0.0080 Function Value
 6116.2
 -10704.8 -46465.7 -22536.4 47168.2 54542.9 -776512.5 579.9

Error in nlm(mlog, theta.start, nx = 2, nz = 2, dt = dat, print.level = 2, :

(converted from warning) NA/Inf replaced by maximum positive value

My questions are
1. Is my loglikelihood function set up appropriately? 2. How to set up starting values efficiently? I read a thread shown at https://stat.ethz.ch/pipermail/r-help/2005-September/079617.html   , but I cannot figure out how to set up starting values with expand.grid() of parameters I used (beta, delta, gamma, sigma2).