2012-02-23 6 views
7

Sto adattando i modelli con lme, lmer e glmer. Ho bisogno di costruire tabelle con gli oggetti summary() ed esportare in Latex mostrando i miei risultati. xtable, mtable e apsrtable non funzionano. Ho visto un post precedente (link sotto) con una soluzione per gli oggetti lme4, ma non per questi.Come si ottiene la regressione dell'estrazione da lme, lmer, glmer a Latex?

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

sono questi due esempi dei modelli Sono montaggio:

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)) 

Qualsiasi aiuto?

grazie

risposta

3

Per lme, la mia versione personale è al di sotto; puoi scaricarlo con altri componenti aggiuntivi simili, ad es. per estrarre \Sexpr{} stringa per p-value delle tabelle LME/lm/GLM come Dmisc da

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

Questo è molto personalizzato, ma se mi piace l'arrotondamento a cifre davvero significative molto. Spiacente, il pacchetto nlme fa tutto ciò di cui ho bisogno (e più di lme/gaussian), quindi non c'è ancora la versione lme4.

"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,...) 
} 
+0

Grazie, Dieter! Questo è veramente utile. – user1172558

+0

Ricevo un errore quando utilizzo la funzione. Potresti aiutarmi? L'errore è 'Errore in '[.data.frame' (xtTab,," p-value "): colonne non definite selezionate' – user1172558

+1

Potrebbe essere un problema di lingua? Controlla se nel tuo locale c'è un "valore p" di colume quando fai un riassunto (lme (....)) –

6

Edit:

Al momento della modifica del pacchetto lme4 ha aggiornato e memisc non funziona più con questi oggetti. Il pacchetto texreg è un'alternativa. Ho lasciato questa risposta nel caso in cui memisc venga aggiornato e inizi a funzionare di nuovo.

tavoli

Il pacchetto memisc non lme4:

Ecco un frammento di codice che ho scritto:

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) 

Ovviamente si potrebbe trasformare summary.stats = TRUE se si voleva qualsiasi di quella roba.

Si noti che i pacchetti latex di dcolumn e booktabs sono entrambi utilizzati di default, quindi inseriscili nel preambolo Latex o disattivali utilizzando i comandi nel file di help (useBooktabs = FALSE, useDcolumn = FALSE).

+1

Grazie per questo! 'mtable' funziona magnificamente con i miei GLMER. Anche la pagina di aiuto ('? Mtable') è molto utile per mostrare come ridenominare variabili e modelli in termini più formali di quelli che potresti scegliere di usare in R – Jota

0

Ecco la mia soluzione: Supponiamo che fit sia il risultato del tuo modello lme, ad es. fit <- lme(...). Se si desidera avere tutte le variabili visualizzate da summary(fit) si può semplicemente digitare

> fit_text <- unclass(fit) 
> attributes(fit_text) 

e vedrete il risultato struttura simile. Quindi è possibile salvare determinati componenti del report di riepilogo in un file txt o in un file Rdata.

6

Ho appena scoperto che esiste un metodo coef per gli oggetti summary.mer che fornisce tutti i dati necessari (per gli effetti fissi). L'oggetto restituito (dopo la coercizione a data.frame) può essere facilmente trasferito al pacchetto di formattazione scelto (ad esempio, xtable o ascii).
Vedere il seguente esempio (che produce solo la utilizzabile 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 
Problemi correlati