2015-05-10 18 views
7

Ho diversi modelli di regressione in R, che voglio riassumere in un formato tabella piacevole che potrebbe essere incluso nella pubblicazione. Ho tutti i risultati pronti, ma non sono riuscito a trovare un modo per esportarli, e non sarebbe efficiente farlo a mano perché ho bisogno di circa 20 tavoli.Esportazione del riepilogo di regressione R per la carta pubblicabile

Così, uno dei miei modelli è:

felm1=felm(ROA~BC+size+sizesq+age | stateyeard+industryyeard, data=data) 

e sto ottenendo sintesi desiderato in R.

Tuttavia, quello che voglio per il mio lavoro è quello di avere solo il seguente nella tabella , le stime con statistica t tra parentesi e anche i codici di significatività (*,, ecc.).

C'è un modo per creare qualsiasi tipo di tabella che includerà quanto sopra? Lyx, excel, word, .rft, tutto davvero.

Ancora meglio, un altro modello che ho è (con alcune variabili diverse):

felm2=felm(ROA~BC+BCHHI+size+sizesq+age | stateyeard+industryyeard, data=data) 

avrei potuto sintesi dei due regressioni combinati in una tabella (dove stesse variabili sarebbero sulla stessa riga, e altri produrrebbero celle vuote)?

Grazie in anticipo e apprezzerò qualsiasi tentativo di aiuto.

Ecco un esempio riproducibile:

x<-rnorm(1:20) 

y<-(1:20)/10+x 

summary(lm(y~x)) 



    Coefficients: 
      Estimate Std. Error t value Pr(>|t|)  

(Itercept) 1.0539  0.1368 7.702 4.19e-07 *** 

    x   1.0257  0.1156 8.869 5.48e-08 *** 

Questo è il risultato in R. voglio il risultato in una tabella a guardare come

(Itercept) 1.0539*** (7.702) 
     X  1.0257*** (8.869) 

è possibile?

+1

Sarebbe utile se hai incluso un [esempio riproducibile] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) con alcuni dati di input di esempio e l'output desiderato. Sia chiaro quale pacchetto formano le cupole di funzione 'flem()'. L'output di LaTeX è accettabile? – MrFlick

+0

Purtroppo non riesco a pubblicare le immagini come sono nuovo. Ma penso che la risposta a una regressione generale sia sufficiente. Quindi il riepilogo (fittingmodel) restituisce le stime, st. errore, ecc. ma voglio esportare solo le stime, la statistica t tra parentesi e il significato in termini di # di stelle. Sto usando il pacchetto 'lfe', ma per semplicità assumiamo che si tratti di una regressione periodica. Non ho familiarità con Latex, ma non è simile al lyx? –

+0

LyX è un frontend per LaTeX. È possibile utilizzare la marcatura LaTeX in essa. –

risposta

2

Per tabella di testo, provate questo:

x<-rnorm(1:20) 
y<-(1:20)/10+x 
result <- lm(y~x) 

library(stargazer) 
stargazer(result, type = "text") 

risultati in ...

=============================================== 
         Dependent variable:  
        --------------------------- 
           y    
----------------------------------------------- 
x       0.854***   
           (0.108)   

Constant      1.041***   
           (0.130)   

----------------------------------------------- 
Observations     20    
R2        0.777   
Adjusted R2     0.765   
Residual Std. Error  0.579 (df = 18)  
F Statistic   62.680*** (df = 1; 18) 
=============================================== 
Note:    *p<0.1; **p<0.05; ***p<0.01 

per la regressione multipla, basta fare

stargazer(result, result, type = "text") 

E, solo per il gusto di rendendo il risultato richiesto.

addStars <- function(coeffs) { 
    fb <- format(coeffs[, 1], digits = 4) 
    s <- cut(coeffs[, 4], 
      breaks = c(-1, 0.01, 0.05, 0.1, 1), 
      labels = c("***", "**", "*", "")) 
    sb <- paste0(fb, s) 
} 
addPar <- function(coeffs) { 
    se <- format(coeffs[, 2], digits = 3) 
    pse <- paste0("(", se, ")") 
} 
textTable <- function(result){ 
    coeffs <- result$coefficients 
    lab <- rownames(coeffs) 
    sb <- addStars(coeffs) 
    pse <- addPar(coeffs) 
    out <- cbind(lab,sb, pse) 
    colnames(out) <- NULL 
    out 
} 
print(textTable(result), quote = FALSE) 

È possibile utilizzare xtable::xtable, Hmisc::latex, Gmisc::htmltable ecc una volta che si dispone di una tabella di testo. Qualcuno ha pubblicato un collegamento nei commenti. :)

+0

GRAZIE molto, questo è quello che stavo cercando. Ci scusiamo per tutta la confusione. –

6

La scopa è molto utile per rendere piacevoli le tabelle di regressione per l'esportazione. I risultati possono quindi essere esportati in csv per essere aggiornati con Excel oppure si può usare Rmarkdown e la funzione kable di knitr per creare documenti Word (o latex).

require(broom) # for tidy() 
require(knitr) # for kable() 

x<-rnorm(1:20) 

y<-(1:20)/10+x 

model <- lm(y~x) 
out <- tidy(model) 
out 
     term estimate std.error statistic  p.value 
1 (Intercept) 1.036583 0.1390777 7.453261 6.615701e-07 
2   x 1.055189 0.1329951 7.934044 2.756835e-07 

kable(out) 


|term  | estimate| std.error| statistic| p.value| 
|:-----------|--------:|---------:|---------:|-------:| 
|(Intercept) | 1.036583| 0.1390777| 7.453261| 7e-07| 
|x   | 1.055189| 0.1329951| 7.934044| 3e-07| 

devo dire che io uso l'eccellente Pixiedust per l'esportazione dei risultati di regressione in quanto permette un controllo molto più fine dell'uscita, permettendo all'utente di fare di più in R e meno in qualsiasi altro pacchetto.

see the vignette on Cran

library(dplyr) # for pipe (%>%) command 
library(pixiedust) 

dust(model) %>% 
     sprinkle(cols = c("estimate", "std.error", "statistic"), round = 2) %>% 
     sprinkle(cols = "p.value", fn = quote(pvalString(value))) %>% 
     sprinkle_colnames("Term", "Coefficient", "SE", "T-statistic", 
         "P-value") 

     Term Coefficient SE T-statistic P-value 
1 (Intercept)  1.08 0.14  7.44 < 0.001 
2   x  0.93 0.14  6.65 < 0.001 
Problemi correlati