2010-12-03 6 views
10

xtable dans Sweave fonctionne génial, mais fait une table par régression. Vous pouvez également lui fournir une trame de données, ce qui fait que j'ai été manuellement chargé dans les trames de données, mais cela ne semble pas très évolutif.Combinaison de plusieurs tables de régression en une pour utilisation dans xtable avec Sweave dans R

Existe-t-il une solution plus automatisée/robuste qui fonctionne comme xtable, mais sur plusieurs objets lm? Est-ce que toutes les tables que je vois dans les papiers/livres sont générées manuellement? Y at-il une meilleure solution à mon code janky qui génère une trame de données à nourrir à xtable?

library(reshape2) 

    data <- data.frame(matrix(rnorm(50), 10, 5)) 
    names(data) <- letters[1:5] 
    l.raw <- list() 
    l.raw[["a"]] <- lm(a ~ d + e, data=data) 
    l.raw[["b"]] <- lm(b ~ d + e, data=data) 
    l.raw[["c"]] <- lm(c ~ d + e, data=data) 

    form.table.from.lm <- function(l.raw) { 
    summ <- list() 

    for (i in names(l.raw)) { 
     temp <- coef(summary(l.raw[[i]])) 
     summ[[i]] <- data.frame(param=rownames(temp), test=i, temp) 
    } 

    df.res <- do.call("rbind", summ) 
    df.res <- transform(df.res, t.value = paste("(", signif(t.value), ")", sep=""), Estimate = signif(Estimate)) 
    df.res.long <- melt(df.res, id.vars=c("test", "param")) 
    df.res.wide <- dcast(df.res.long, test + variable ~ param) 

    temp <- subset(df.res.wide, variable %in% c("Estimate", "t.value")) 
    df.res <- temp[, -2] 
    df.res[, 1] <- as.vector(rbind(names(l.raw), "")) 
    colnames(df.res)[1] <- "regressor" 
    return(df.res) 
} 

qui produit la trame de données:

regressor (Intercept)   d   e 
1   a 0.393996 -0.666721 0.159508 
2    (0.573926) (0.422125) (0.526446) 
5   b 0.611077 0.0288942 -0.70033 
6    (0.32696) (0.24048) (0.299911) 
9   c -0.101033 -0.287821 0.14581 
10   (0.203193) (0.149449) (0.186383) 

Compte tenu des forfaits incroyables R Traçage, je me sens comme Google et rseek se cachent quelque chose de moi.

Répondre

5

Il ya quelque temps je suis tombé sur la fonction outreg de Paul Johnson.

Vous pouvez appliquer directement outreg à votre objet lm et combiner plusieurs lm sorties en une seule, belle table de latex.

Vous trouverez ici un exemple .pdf

outreg examples

et le code de la fonction

outreg code

page d'accueil générale par Paul Johnson

Paul Johnson

+0

Merci! Cela devrait couvrir beaucoup de cas que je rencontre. –

+2

Pour les personnes qui voient cela maintenant (beaucoup plus tard) ... il semble que Paul Johnson a maintenant combiné certains de ses nombreux extraits R (y compris l'exception) dans un paquet appelé "rockchalk". Documentation: http://pj.freefaculty.org/R/rockchalk.pdf – Pygmalion

4

Votre code a jeté des erreurs pour moi lors de l'appel dcast, donc j'ai simplement lu dans la sortie que vous avez offert et ajusté les colnames pour faire correspondre. Ce code produit un fichier pdf bien formé sur mon système après l'avoir passé par mon processeur LaTex. (Je suppose que vous avez une installation LaTeX appropriée si vous utilisez déjà Sweave.)

require(Hmisc) 
latex(df.res) 

Quand je suis passé l'exemple dans l'aide (lmList) dans le latex paquet lme4() produisent également un 4 assez grand et unweildy la page affichage qui aurait besoin de quelques ajustements pour élargir la page sur ma machine mais pourrait aussi valoir la peine d'être examiné.

require(lme4) 
(fm1 <- lmList(Reaction ~ Days | Subject, sleepstudy)) 
latex(fm1) 
+0

Merci! Je ne connaissais pas 'lmList'. Cela va vraiment être utile. Je vais recopier le code ci-dessus. Cela fonctionne pour moi, mais il semble que Paul Johnson a du code avec certaines des fonctionnalités que je recherche (la réponse de MRopa). –

+0

Content que vous ayez trouvé cela utile. La vérification de ces options a également fait progresser mes connaissances dans ce domaine, donc je suppose que je devrais voter pour la question, hein? –

1

Consultez le package de table apsrtable dans CRAN Ce qui crée des tables de style American Political Science Review qui ressemblent à peu près à ce que je pense que vous voulez. Il prend les modèles lm et glm ainsi que certains modèles non linéaires de certains paquets. Il a également une longue série d'options pour générer des étoiles à des niveaux particuliers et autres.Il y a a nice vingette et il génère à la fois des tables LaTeX et HTML qui peuvent ensuite être ajoutées à OpenOffice/Word. Je l'utilise depuis 2 ou 3 ans maintenant et il continue à être en développement actif. Je viens de regarder rapidement mais il semble beaucoup plus solide/caractéristique qu'Endorg.

1

Voici un plus d'options que j'ai vu passer CRANberries qui m'a rappelé cette question:

texreg - En regardant le vingette, il semble faire un très bon travail de génération de tables de régression assez standard dans R et qui est sous un développement très actif au moment de l'écriture.

Mise à jour: J'ai été jouer avec un peu d'entre eux et je pense qu'au fil du temps, texreg est devenu le leader de leader dans cet espace en termes de maturité il, la stabilité et featurefulness. Le plus important pour moi, il fonctionne avec une variété de modèles et fait des choses merveilleusement pratiques comme des erreurs standard bootstrap pour construire des étoiles pour les modèles lme4() - quelque chose que le paquet lui-même rend un peu difficile à obtenir (pour de bonnes raisons) demande néanmoins. Je recommande fortement d'utiliser texreg. Il semble être activement maintenu.

Questions connexes