How extract regression results from lme, lmer, glmer to Latex?

I'm fitting models with lme, lmer and glmer. I need to construct tables with the summary() objects and export to Latex showing my results. xtable, mtable, and apsrtable do not work. I saw a previous post (link below) with a solution for lme4 objects, but not for these ones.

http://leftcensored.skepsi.net/2011/03/13/code-latex-tables-for-lme4-models/

These are two examples of the models I'm fitting:

lme(y ~  time, data, na.action=na.omit, method="REML", random = ~ 1 | subject, control=lmeControl(msMaxIter = 200, msVerbose = TRUE))

glmer(y ~ time + (time | subject), data, family=binomial(link = "logit"), REML=T, control=list(maxIter = 800, maxFN=1000, msVerbose = TRUE))

Any help?

thanks


For lme , my personal version is below; you can download it with other similar addons, eg to extract Sexpr{} string for p-values of lme/lm/glm tables as Dmisc from

http://www.menne-biomed.de/download

This is very personalized, but if I like the rounding to really significant digits a lot. Sorry, package nlme does all I need (and more than lme/gaussian), so there is not lme4 version yet.

"latex.summary.lme" <-
function(object, title="",parameter=NULL, file="",
  shadep=0.05,caption=NULL,label=NULL,ctable=FALSE,form=NULL,
  interceptp = FALSE, moredec=0, where="!htbp", ...) {
  # This function can be mis-used for gls models when an explicit
  # form is given
  options(Hverbose=FALSE)
  require('Hmisc')
  require('nlme')
  dd <- object$dims
  method <- object$method
  fixF <- object$call$fixed
  xtTab <- as.data.frame(object$tTable)
  sigp <- xtTab[,"p-value"]< shadep # cells that will be shaded
  if (!interceptp){
    sigp[1] <- FALSE # intercept will never be shaded
    # Replace small significances, discarding p-value for (Intercept)
    xtTab[1,"p-value"] = 1 # we do not show it anyway, easier formatting
  }
  pval <- format(zapsmall(xtTab[, "p-value"],4))
  pval[as.double(pval) < 0.0001] <- "$< .0001$"
  xtTab[, "p-value"] <- pval
  xtTab[,"t-value"] <- round(xtTab[,"t-value"],1)
  if (ncol(xtTab) == 5) # not for gls
    xtTab[,"DF"] <- as.integer(xtTab[,"DF"])
  # extract formula
  if (is.null(form)) {
    if (!is.null(object$terms)) {
      form=object$terms
    } else {
      form = formula(object)
    }
  }
  if (is.null(parameter)) {
    parameter=as.character(form[[2]])
  }
  if (any(wchLv <- (as.double(levels(xtTab[, "p-value"])) == 0))) {
      levels(xtTab[, "p-value"])[wchLv] <- "<.0001"
  }
  if (is.null(label))
    label <- lmeLabel("contr",form)
  form <- deparse(removeFormFunc(as.formula(form)),width.cutoff=500)

  form <- paste(sub('~','$\sim$ ',form),sep="")
  # All I( in factors are replaced with (This could be improved)
  row.names(xtTab) <- 
    gsub("I(","(",dimnames(object$tTable)[[1]])
  row.names(xtTab) <-  gsub("^2","texttwosuperior",row.names(xtTab))

  # Determine base level  
  levs <- lapply(object$contrasts,function(object) {dimnames(object)[[1]][1]})
  levnames <- paste(names(levs),levs,sep=" = ",collapse=", ")
  # Try to locate numeric covariables
#  v1 <- all.vars(formula(object))[-1]
## Changed 8.10.2008, not regression-tested
  v1 <- all.vars(form)[-1]
  numnames <- v1[is.na(match(v1,names(levs)))]
  if (length(numnames > 0)) {
    numnames <- paste(numnames," = 0",collapse=", ")
    levnames <- paste(levnames,numnames,sep=", ")
  }
  if (is.null(caption)){ # TODO: Allow %s substitution
    if (inherits(object,"lme"))
      md = "Mixed model (lme)" else
    if (inherits(object,"gls"))
      md = "Extended linear model (gls)" else
      md = "Linear model"
    caption <- paste(md," contrast table for emph{",
       parameter, "} (model ",form,
    "). The value in row (Intercept) gives the reference value for ",
      levnames,".",sep='')
  }
  caption.lot <- paste("Contrast table for ",parameter, " by ",
      levnames)
  ndec <- pmax(round(1-log10(xtTab[,2]+0.000001)+moredec),0)
  xtTab[,1] <- formatC(round(xtTab[,1],ndec))
  xtTab[,2] <- formatC(round(xtTab[,2],ndec))
  if (ncol(xtTab) == 5) {
    names(xtTab) <- c("Value","StdErr","DF","t","p")
    pcol = 5
  } else {# gls misuse
    names(xtTab) <- c("Value","StdErr","t","p")
    pcol = 4
  }
  # Only show intercept p/t when explicitely required
  if (!interceptp){
    xtTab[1,pcol-1] <- NA
    xtTab[1,pcol] <- ''
  }
  cellTex <- matrix(rep("", NROW(xtTab) * NCOL(xtTab)), nrow=NROW(xtTab))
  cellTex[sigp,pcol] <- "cellcolor[gray]{0.9}"
  rowlabel <- ifelse(nchar(parameter) >9,"",parameter)
  latex(xtTab, title=title, file=file, caption=caption,caption.lot=caption.lot,
    caption.loc="bottom", label=label, cellTexCmds = cellTex,
    rowlabel=rowlabel, ctable=ctable, where=where,
    booktabs = !ctable, numeric.dollar=FALSE,col.just=rep("r",5),...)
}

"latex.lme" <-
function(object, title="",parameter=NULL,file="",shadep=0.05,
  caption=NULL,label=NULL,ctable=FALSE,form=NULL,
  interceptp=FALSE,  moredec= 0, where="!htbp",...) {
  options(Hverbose=FALSE)
  require('Hmisc')
  require('nlme')
  latex.summary.lme(summary(object),title=title,parameter=parameter, 
    file=file, shadep=shadep, caption=caption,
    label=label, ctable=ctable, form=form, moredec=moredec, where=where,...)
}

I just found out that there exists a coef method for summary.mer objects which provides all the necessary data (for the fixed effects). The returned object (after coercion to data.frame ) can than easily be handed over to the formatting package of choice (eg, xtable or ascii ).
See the following example (which only produces the usable data.frame ):

require(lme4)

gm1 <- glmer(cbind(incidence, size - incidence) ~ period + (1 | herd),
              family = binomial, data = cbpp)

(res.table <- as.data.frame(coef(summary(gm1))))
##             Estimate Std. Error z value        Pr(>|z|)
## (Intercept)  -1.3985     0.2279  -6.137 0.0000000008416
## period2      -0.9923     0.3054  -3.249 0.0011562741408
## period3      -1.1287     0.3260  -3.462 0.0005368285553
## period4      -1.5804     0.4288  -3.686 0.0002282168737

Edit:

At the time of edit the lme4 package has updated and memisc no longer works with these objects. Package texreg is an alternative. I've left this answer up in case memisc gets updated and it starts working again.

The memisc package does lme4 tables:

Here's a snippet of some code I wrote:

GPusenonMH=lmer(GPEtc_c~Age.y+Measure+Gender+Marital2+Work2+(1|NHS), family="poisson", data=subset(lemurdata, Measure %in% c(1,3)))

model1=mtable(GPusetotal, GPuseMH, GPusenonMH, summary.stats=FALSE)

toLatex(model1)

Obviously you could turn summary.stats=TRUE if you wanted any of that stuff.

Note that the dcolumn and booktabs Latex packages are both used by default so either put them in your Latex preamble or turn them off using the commands in the helpfile (useBooktabs=FALSE, useDcolumn=FALSE).

链接地址: http://www.djcxy.com/p/24992.html

上一篇: 是否有可能在Stargazer表中报告NAs?

下一篇: 如何从lme,lmer,glmer向Latex提取回归结果?