### Eclipse Workspace Patch 1.0 #P lme4 Index: R/lmer.R =================================================================== --- R/lmer.R (revision 1697) +++ R/lmer.R (working copy) @@ -78,7 +78,7 @@ lmer <- function(formula, data, REML = TRUE, sparseX = FALSE, control = list(), start = NULL, verbose = 0L, subset, weights, na.action, offset, - contrasts = NULL, devFunOnly=FALSE, + contrasts = NULL, devFunOnly=FALSE, doFit = TRUE, optimizer="Nelder_Mead", ...) { if (sparseX) warning("sparseX = TRUE has no effect at present") @@ -133,11 +133,12 @@ devfun <- mkdevfun(rho, 0L) devfun(reTrms$theta) # one evaluation to ensure all values are set + if (!doFit) return(list(rho=rho, devfun=devfun, reTrms=reTrms, optimizer=optimizer, control=control, fr=fr, mc=mc, verbose=verbose)) if (devFunOnly) return(devfun) opt <- optwrap(optimizer, devfun, rho$pp$theta, lower=reTrms$lower, control=control, - rho=rho, adj=FALSE) + rho=rho, adj=FALSE, verbose=verbose) mkMerMod(environment(devfun), opt, reTrms, fr, mc) }## { lmer } @@ -263,7 +264,7 @@ glmer <- function(formula, data, family = gaussian, sparseX = FALSE, control = list(), start = NULL, verbose = 0L, nAGQ = 1L, compDev = TRUE, subset, weights, na.action, offset, - contrasts = NULL, mustart, etastart, devFunOnly = FALSE, + contrasts = NULL, mustart, etastart, devFunOnly = FALSE, doFit = TRUE, tolPwrss = 1e-10, optimizer=c("bobyqa","Nelder_Mead"), ...) { verbose <- as.integer(verbose) @@ -348,7 +349,8 @@ if (length(optimizer)==1) { optimizer <- replicate(2,optimizer) } - opt <- optwrap(optimizer[[1]],devfun,rho$pp$theta, rho$lower, + if (!doFit) return(list(rho=rho, devfun=devfun, reTrms=reTrms, optimizer=optimizer, control=control, fr=fr, mc=mc, nAGQ=nAGQ, family=family, verbose=verbose)) + opt <- optwrap(optimizer[[1]],devfun,rho$pp$theta, rho$lower, control=control, rho=rho, adj=FALSE, verbose=verbose) @@ -404,7 +406,7 @@ ##' @export nlmer <- function(formula, data, control = list(), start = NULL, verbose = 0L, nAGQ = 1L, subset, weights, na.action, offset, - contrasts = NULL, devFunOnly = 0L, tolPwrss = 1e-10, + contrasts = NULL, devFunOnly = 0L, tolPwrss = 1e-10, doFit = TRUE, optimizer="Nelder_Mead", ...) { vals <- nlformula(mc <- match.call()) @@ -432,6 +434,7 @@ if (length(optimizer)==1) { optimizer <- replicate(2,optimizer) } + if (!doFit) return(list(rho=rho, devfun=devfun, reTrms=reTrms, optimizer=optimizer, control=control, fr=fr, mc=mc, nAGQ=nAGQ, verbose=verbose)) opt <- optwrap(optimizer[[1]],devfun, rho$pp$theta, rho$lower, control=control, rho=rho, adj=FALSE) @@ -458,6 +461,43 @@ mkMerMod(environment(devfun), opt, vals$reTrms, vals$frame, mc) }## {nlmer} +lmer_finalize = function(rho, optimizer, devfun, reTrms, control, fr, mc, verbose) +{ + opt <- optwrap(optimizer, + devfun, rho$pp$theta, lower=reTrms$lower, control=control, + rho=rho, adj=FALSE, verbose=verbose) + + mkMerMod(environment(devfun), opt, reTrms, fr, mc) +}## { lmer_finalize } + +glmer_finalize = function(rho, optimizer, devfun, reTrms, control, fr, mc, nAGQ, verbose) +{ + opt <- optwrap(optimizer[[1]],devfun,rho$pp$theta, rho$lower, + control=control, rho=rho, + adj=FALSE, verbose=verbose) + + rho$nAGQ <- nAGQ + if (nAGQ > 0L) { + rho$lower <- c(rho$lower, rep.int(-Inf, length(rho$beta0))) + rho$u0 <- rho$pp$u0 + rho$beta0 <- rho$pp$beta0 + rho$dpars <- seq_along(rho$pp$theta) + if (nAGQ > 1L) { + if (length(reTrms$flist) != 1L || length(reTrms$cnms[[1]]) != 1L) + stop("nAGQ > 1 is only available for models with a single, scalar random-effects term") + rho$fac <- reTrms$flist[[1]] + } + devfun <- mkdevfun(rho, nAGQ) + #if (devFunOnly) return(devfun) + + opt <- optwrap(optimizer[[2]],devfun,c(rho$pp$theta, rho$beta0), + rho$lower, control=control, rho=rho, + adj=TRUE, verbose=verbose) + } + + mkMerMod(environment(devfun), opt, reTrms, fr, mc) +}## { glmer_finalize } + ##' Create a deviance evaluation function from a predictor and a response module ##' ##' From an merMod object create an R function that takes a single argument,