cauchy.mle2 <- function(x, maxiter=20, eps=1e-8, itertrace=FALSE, maxattempts=100){ # initialize parameter vector p <- median(x) n <- length(x) # calculate log-likelihood at initial parameter estimates ll <- - n*log(pi) - sum(log(1 + (x-p)^2)) iter <- 0 while (iter < maxiter){ iter <- iter+1 # calculate shortcuts denom <- (1 + (x-p)^2) denom2 <- denom^2 xminusp <- x-p # calculate second derivatives at current parameter estimates D <- 2* sum((- denom + 2*xminusp^2)/denom2) # calculate first derivaties at current parameter estimates f <- 2*sum(xminusp/denom) # first derivative of loglik wrt theta pnew <- p - f/D # calculate log-likelihood at new parameter estimates llnew <- - n*log(pi) - sum(log(1 + (x-pnew)^2)) # if likelihood decreased, try random step sizes in both directions if (llnew