Salida de LaTeX para el objeto summary.lm de R - mientras se muestra la información fuera de la tabla [cerrado]

10

Esto me pareció básico, pero parece que no puedo encontrar una solución en línea, así que me preguntaba qué podría estar perdiendo.

Deseo incluir la salida de un objeto de resumen lm dentro de un documento Sweave (.Rnw). Puedo generar el summary.lm como está o usar los paquetes xtable / Hmisc (a través de los comandos xtable o latex). ¿Hay algo como xtable que también proporcione la información de resumen que está disponible desde fuera de la tabla? ( , F estadísticas, etc ...?)R2

Tal Galili
fuente
¿Por qué debería estar esto cerrado? ¿Debería seguir así SO en su lugar?
Tal Galili
44
Creo que puede quedarse aquí, la pregunta es más relevante para los estadísticos que para los programadores.
mpiktas
De acuerdo con los estándares actuales de este foro, esto definitivamente está fuera de tema.
ameba

Respuestas:

6

Mira el paquete aplicable . Puede ajustar la salida de la manera que desee y resumir varios modelos en lugar de uno.

mpiktas
fuente
Hola mpiktas Gracias por la respuesta. Estoy menos interesado en mostrar varias tablas, y deseo simplemente tener un resumen de un modelo, pero eso se verá "bien". Puedo abrir el código y hacerlo, pero me sorprende que no se haya hecho antes ...
Tal Galili
1
@Tal Tengo +1 esta respuesta porque estoy bastante seguro de que hay una manera de lograr lo que quieres, aunque no me tomé el tiempo para investigar las opciones del paquete en profundidad (lo usé una vez para mostrar varios modelos como dijiste).
chl
2

Me rendí y jugué con el código para producir algo similar. Sin embargo, no es lo más bonito. Si alguien tiene ganas de mejorarlo, me encantaría usar su código.

print.summary.lm.xtable <- function (x, digits = max(3, getOption("digits") - 3), symbolic.cor = x$symbolic.cor, 
    signif.stars = getOption("show.signif.stars"), ...) 
{

if(!require(xtable)) stop("This function requires the package 'xtable' - please make sure you get it")


cat("\\begin{verbatim}")

    cat("\nCall:\n", paste(deparse(x$call), sep = "\n", collapse = "\n"), 
        "\n\n", sep = "")
    resid <- x$residuals
    df <- x$df
    rdf <- df[2L]
    cat(if (!is.null(x$w) && diff(range(x$w))) 
        "Weighted ", "Residuals:\n", sep = "")
    if (rdf > 5L) {
        nam <- c("Min", "1Q", "Median", "3Q", "Max")
        rq <- if (length(dim(resid)) == 2L) 
            structure(apply(t(resid), 1L, quantile), dimnames = list(nam, 
                dimnames(resid)[[2L]]))
        else {
            zz <- zapsmall(quantile(resid), digits + 1)
            structure(zz, names = nam)
        }
        print(rq, digits = digits, ...)
    }
    else if (rdf > 0L) {
        print(resid, digits = digits, ...)
    }
    else {
        cat("ALL", df[1L], "residuals are 0: no residual degrees of freedom!\n")
    }
#     if (length(x$aliased) == 0L) {
#         cat("\nNo Coefficients\n")
#     }
#     else {
#         if (nsingular <- df[3L] - df[1L]) 
#             cat("\nCoefficients: (", nsingular, " not defined because of singularities)\n", 
#                 sep = "")
#         else cat("\nCoefficients:\n")
#         coefs <- x$coefficients
#         if (!is.null(aliased <- x$aliased) && any(aliased)) {
#             cn <- names(aliased)
#             coefs <- matrix(NA, length(aliased), 4, dimnames = list(cn, 
#                 colnames(coefs)))
#             coefs[!aliased, ] <- x$coefficients
#         }
#         printCoefmat(coefs, digits = digits, signif.stars = signif.stars, 
#             na.print = "NA", ...)
#     }


cat("\\end{verbatim}")

print(xtable(x),   latex.environments = "left") # x is a summary of some lm object

cat("\\begin{verbatim}")
    cat("Residual standard error:", format(signif(x$sigma, 
        digits)), "on", rdf, "degrees of freedom\n")
    if (nzchar(mess <- naprint(x$na.action))) 
        cat("  (", mess, ")\n", sep = "")
    if (!is.null(x$fstatistic)) {
        cat("Multiple R-squared:", formatC(x$r.squared, digits = digits))
        cat(",\tAdjusted R-squared:", formatC(x$adj.r.squared, 
            digits = digits), "\nF-statistic:", formatC(x$fstatistic[1L], 
            digits = digits), "on", x$fstatistic[2L], "and", 
            x$fstatistic[3L], "DF,  p-value:", format.pval(pf(x$fstatistic[1L], 
                x$fstatistic[2L], x$fstatistic[3L], lower.tail = FALSE), 
                digits = digits), "\n")
    }
    correl <- x$correlation
    if (!is.null(correl)) {
        p <- NCOL(correl)
        if (p > 1L) {
            cat("\nCorrelation of Coefficients:\n")
            if (is.logical(symbolic.cor) && symbolic.cor) {
                print(symnum(correl, abbr.colnames = NULL))
            }
            else {
                correl <- format(round(correl, 2), nsmall = 2, 
                  digits = digits)
                correl[!lower.tri(correl)] <- ""
                print(correl[-1, -p, drop = FALSE], quote = FALSE)
            }
        }
    }
    cat("\n")
cat("\\end{verbatim}")
    invisible(x)
}
Tal Galili
fuente
2

Una posible solución es swst: imprimir resultados estadísticos en el paquete Sweave de Sacha Epskamp .

Ejemplos

library(swst)
x <- c(44.4, 45.9, 41.9, 53.3, 44.7, 44.1, 50.7, 45.2, 60.1)
y <- c( 2.6, 3.1, 2.5, 5.0, 3.6, 4.0, 5.2, 2.8, 3.8)
corTest <- cor.test(x, y, method = "kendall", alternative = "greater")
swst(corTest)

( , )p = 0.06T=26p=0.06

# Chi-square test:
M <- as.table(rbind(c(762, 327, 468), c(484,239,477)))
dimnames(M) <- list(gender=c("M","F"),
party=c("Democrat","Independent", "Republican"))
chisqTest <- chisq.test(M)
swst(chisqTest)

( , )p < 0.001chi2(2)=30.07p<0.001

# Linear model:
## Annette Dobson (1990) "An Introduction to Generalized Linear Models".
## Page 9: Plant Weight Data.
ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2,10,20, labels=c("Ctl","Trt"))
weight <- c(ctl, trt)
lm.D9 <- lm(weight ~ group)
lm.D90 <- lm(weight ~ group - 1) # omitting intercept
swst(lm.D9)

( , )p = 0.249F(1,18)=1.419p=0.249

swst(lm.D90)

( , )p < 0.001F(2,18)=485.051p<0.001

MYaseen208
fuente
0

Personalmente disfruto de texreg , que juega muy bien booktabsy también es altamente personalizable.

No es exactamente lo que estás buscando, pero creo que esta también es una buena lectura para este tipo de trabajo.

* Nota, no estoy relacionado con el Philip que escribió ese paquete. Jajaja

Philip
fuente