2012-02-23 3 views
7

Tôi là người mẫu phù hợp với lme, lmer và glmer. Tôi cần phải xây dựng bảng với các đối tượng summary() và xuất sang Latex hiển thị kết quả của tôi. xtable, mtable và apsrtable không hoạt động. Tôi đã nhìn thấy một bài trước (liên kết bên dưới) với một giải pháp cho các đối tượng lme4, nhưng không phải cho những cái này.Làm thế nào để trích xuất kết quả hồi quy từ lme, lmer, glmer sang Latex?

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

Đây là hai ví dụ về các mô hình tôi phù hợp:

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

Bất kỳ sự giúp đỡ?

cảm ơn

Trả lời

3

Đối với lme, phiên bản cá nhân của tôi dưới đây; bạn có thể tải xuống bằng các phần bổ trợ tương tự khác, ví dụ: để trích xuất \Sexpr{} chuỗi cho p-giá trị của bảng LME/lm/GLM như Dmisc từ

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

này là rất cá nhân, nhưng nếu tôi muốn làm tròn để thực sự đáng kể chữ số rất nhiều. Xin lỗi, gói nlme làm tất cả những gì tôi cần (và nhiều hơn lme/gaussian), vì vậy chưa có phiên bản 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

Cảm ơn, Dieter! Điều này thực sự hữu ích. – user1172558

+0

Tôi gặp lỗi khi tôi sử dụng chức năng của bạn. Bạn có thể giúp tôi? Lỗi là 'Lỗi trong '[.data.frame' (xtTab,," giá trị p "): các cột không xác định được chọn' – user1172558

+1

Có thể là sự cố ngôn ngữ không? Kiểm tra xem trong miền địa phương của bạn có một "giá trị p" columen khi bạn để một bản tóm tắt (lme (....)) –

6

Edit:

Tại thời điểm chỉnh sửa gói lme4 đã được cập nhật và memisc không còn làm việc với các đối tượng này. Texreg gói là một thay thế. Tôi đã để lại câu trả lời này trong trường hợp memisc được cập nhật và nó bắt đầu hoạt động trở lại.

bảng

Gói memisc không lme4:

Dưới đây là một đoạn của một số mã tôi đã viết:

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) 

Rõ ràng, bạn có thể biến summary.stats = TRUE nếu bạn muốn bất kỳ thứ đó. Lưu ý rằng các dcolumn và booktabs Gói latex đều được sử dụng theo mặc định, do đó, hoặc đặt chúng trong phần mở đầu Latex của bạn hoặc tắt chúng bằng cách sử dụng các lệnh trong helpfile (useBooktabs = FALSE, useDcolumn = FALSE).

+1

Cảm ơn vì điều này! 'mtable' hoạt động tốt với GLMER của tôi. Trang trợ giúp ('? Mtable') cũng thực sự hữu ích khi hiển thị cách gắn nhãn các biến và mô hình của bạn theo các cụm từ chính thức hơn bạn có thể chọn để sử dụng trong R – Jota

0

Đây là giải pháp của tôi: Giả sử fit là kết quả của mô hình lme của bạn, ví dụ: fit <- lme(...). Nếu bạn muốn có tất cả các biến hiển thị bởi summary(fit) bạn có thể chỉ cần gõ

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

và bạn sẽ thấy những kết quả cấu trúc như thế nào. Sau đó, bạn có thể lưu các thành phần nhất định của báo cáo tóm tắt vào một tệp txt hoặc tệp Rdata.

6

Tôi vừa phát hiện ra rằng có một phương pháp coef cho các đối tượng summary.mer cung cấp tất cả các dữ liệu cần thiết (đối với các hiệu ứng cố định). Đối tượng được trả về (sau khi ép buộc data.frame) có thể dễ dàng được chuyển giao cho gói định dạng được lựa chọn (ví dụ: xtable hoặc ascii).
Xem ví dụ sau (mà chỉ tạo ra có thể sử dụng 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