LaTeX-Ausgabe für das Objekt summary.lm von R - während die Informationen außerhalb der Tabelle angezeigt werden [geschlossen]

10

Dies schien mir grundlegend zu sein, aber ich kann online keine Lösung finden, also fragte ich mich, was mir fehlen könnte.

Ich möchte die Ausgabe eines lm-Zusammenfassungsobjekts in ein Sweave-Dokument (.Rnw) aufnehmen. Ich kann entweder die summary.lm unverändert ausgeben oder die xtable / Hmisc-Pakete verwenden (über die Befehle xtable oder latex). Gibt es so etwas wie xtable, das auch die zusammenfassenden Informationen enthält, die außerhalb der Tabelle verfügbar sind? ( , F Statistik etc ...?)R2

Tal Galili
quelle
Warum sollte dies geschlossen werden? Sollte es stattdessen so weitergehen?!
Tal Galili
4
Ich denke, es kann hier bleiben, die Frage ist für Statistiker relevanter als für Programmierer.
mpiktas
Nach den aktuellen Standards dieses Forums ist dies definitiv kein Thema.
Amöbe sagt Reinstate Monica

Antworten:

6

Schauen Sie sich das Paket apsrtable an . Sie können dann die Ausgabe nach Ihren Wünschen anpassen und mehrere Modelle anstelle eines zusammenfassen.

mpiktas
quelle
Hallo mpiktas. Danke für die Antwort. Ich bin weniger daran interessiert, mehrere Tabellen zu zeigen - und möchte einfach eine Zusammenfassung eines Modells haben, aber das wird "schön" aussehen. Ich kann den Code öffnen und es tun, aber ich bin überrascht, dass es vorher nicht getan wurde ...
Tal Galili
1
@Tal Ich habe +1 auf diese Antwort, weil ich mir ziemlich sicher bin, dass es einen Weg gibt, das zu erreichen, was Sie wollen, obwohl ich mir keine Zeit genommen habe, die Paketoptionen eingehend zu untersuchen (ich habe sie einmal verwendet, um mehrere Modelle anzuzeigen, wie Sie sagten).
Chl
2

Ich gab auf und spielte mit dem Code, um etwas Ähnliches zu produzieren. Nicht das Schönste. Wenn jemand Lust hat, es zu verbessern, würde ich gerne Ihren Code verwenden.

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
quelle
2

Eine mögliche Lösung ist swst: Drucken Sie statistische Ergebnisse im Sweave- Paket von Sacha Epskamp .

Beispiele

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)

F(2,18)=485.051p<0.001

MYaseen208
quelle
0

Persönlich mag ich Texreg , das gut spielt booktabsund auch sehr anpassbar ist.

Nicht genau das, wonach Sie suchen, aber ich denke, das ist auch eine gute Lektüre für diese Art von Arbeit.

* Beachten Sie, ich bin nicht verwandt mit dem Philip, der dieses Paket geschrieben hat. Lol.

Philip
quelle