Sortie LaTeX pour l'objet summary.lm de R - tout en affichant les informations en dehors de la table [fermé]

10

Cela m'a semblé être basique, mais je n'arrive pas à trouver de solution en ligne, alors je me suis demandé ce qui pourrait me manquer.

Je souhaite inclure la sortie d'un objet récapitulatif lm dans un document Sweave (.Rnw). Je peux soit produire le résumé.lm tel quel, soit utiliser les packages xtable / Hmisc (via les commandes xtable ou latex). Existe-t-il quelque chose comme xtable qui donne également les informations récapitulatives disponibles de l'extérieur du tableau? ( , statistiques F etc ...?)R2

Tal Galili
la source
Pourquoi devrait-il être fermé? Est-ce que ça devrait aller sur SO à la place?!
Tal Galili
4
Je pense que cela peut rester ici, la question est plus pertinente pour les statisticiens que pour les programmeurs.
mpiktas
Selon les normes actuelles de ce forum, c'est définitivement hors sujet.
amoeba

Réponses:

6

Regardez le package apsrtable . Vous pouvez ensuite modifier la sortie comme vous le souhaitez et résumer plusieurs modèles au lieu d'un.

mpiktas
la source
Salut mpiktas. Merci pour votre réponse. Je suis moins intéressé à montrer plusieurs tableaux - et je souhaite simplement avoir un résumé d'un modèle, mais cela aura l'air "sympa". Je peux ouvrir le code et le faire, mais je suis surpris que cela n'ait pas été fait avant ...
Tal Galili
1
@Tal j'ai attribué +1 à cette réponse, car je suis sûr qu'il existe un moyen d'atteindre ce que vous voulez, même si je n'ai pas pris le temps d'étudier en profondeur les options de package (je l'ai utilisé une fois pour afficher plusieurs modèles comme vous l'avez dit).
chl
2

J'ai abandonné et joué avec le code pour produire quelque chose de similaire. Pas la plus jolie chose cependant. Si quelqu'un a envie de l'améliorer - je serais heureux d'utiliser votre code.

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
la source
2

Une solution possible est swst: imprimer les résultats statistiques dans le package Sweave de Sacha Epskamp .

Exemples

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)

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

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

F(1,18)=1,419p=0,249

swst(lm.D90)

F(2,18)=485.051p<0,001

MYaseen208
la source
0

Personnellement, j'apprécie texreg , qui joue bien avec booktabset est également hautement personnalisable.

Pas exactement ce que vous cherchez, mais je pense que c'est aussi une bonne lecture pour ce genre de travail.

* Remarque, je n'ai aucun lien avec Philip qui a écrit ce package. Lol.

Philippe
la source