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