2016-05-24 8 views
8

Voglio creare una tabella con colonne raggruppate tramite texreg. Riesco a vedere solo le opzioni raggruppate righe (groups).Aggiunta di colonne al mio output texreg

Ecco un esempio:

set.seed(01349) 
DF <- data.frame(y = rnorm(100), x1A = rnorm(100), x2A = rnorm(100), 
       x1B = rnorm(100), x2B = rnorm(100)) 
regs <- lapply(paste0("x", 1:2, c("A", "A", "B", "B")), function(x) 
      lm(paste0("y ~ ", x), data = DF)) 

Ecco il più vicino che posso ottenere con la pianura texreg:

texreg(regs, custom.coef.names = c("Intercept", rep("x", 4)), 
     custom.model.names = c("1", "2", "1", "2")) 

Con uscita LaTeX:

\begin{table} 
\begin{center} 
\begin{tabular}{l c c c c } 
\hline 
      & 1 & 2 & 1 & 2 \\ 
\hline 
Intercept & $-0.13$ & $-0.13$ & $-0.11$ & $-0.11$ \\ 
      & $(0.12)$ & $(0.12)$ & $(0.12)$ & $(0.12)$ \\ 
x   & $0.02$ & $0.07$ & $0.13$ & $-0.11$ \\ 
      & $(0.13)$ & $(0.12)$ & $(0.12)$ & $(0.13)$ \\ 
\hline 
R$^2$  & 0.00  & 0.00  & 0.01  & 0.01  \\ 
Adj. R$^2$ & -0.01 & -0.01 & 0.00  & -0.00 \\ 
Num. obs. & 100  & 100  & 100  & 100  \\ 
RMSE  & 1.18  & 1.17  & 1.17  & 1.17  \\ 
\hline 
\multicolumn{5}{l}{\scriptsize{$^{***}p<0.001$, $^{**}p<0.01$, $^*p<0.05$}} 
\end{tabular} 
\caption{Statistical models} 
\label{table:coefficients} 
\end{center} 
\end{table} 

preferirei un extra linea (evidenziata con i commenti %):

\begin{table} 
\begin{center} 
\begin{tabular}{l c c c c } 
\hline 
%*************A HEADER LINE HERE********************* 
& \multicolumn{2}{c}{A} & \multicolumn{2}{c}{B} \\ % 
%**************************************************** 
      & 1 & 2 & 1 & 2 \\ 
\hline 
Intercept & $-0.13$ & $-0.13$ & $-0.11$ & $-0.11$ \\ 
      & $(0.12)$ & $(0.12)$ & $(0.12)$ & $(0.12)$ \\ 
x   & $0.02$ & $0.07$ & $0.13$ & $-0.11$ \\ 
      & $(0.13)$ & $(0.12)$ & $(0.12)$ & $(0.13)$ \\ 
\hline 
R$^2$  & 0.00  & 0.00  & 0.01  & 0.01  \\ 
Adj. R$^2$ & -0.01 & -0.01 & 0.00  & -0.00 \\ 
Num. obs. & 100  & 100  & 100  & 100  \\ 
RMSE  & 1.18  & 1.17  & 1.17  & 1.17  \\ 
\hline 
\multicolumn{5}{l}{\scriptsize{$^{***}p<0.001$, $^{**}p<0.01$, $^*p<0.05$}} 
\end{tabular} 
\caption{Statistical models} 
\label{table:coefficients} 
\end{center} 
\end{table} 

Mi manca qualcosa o non esiste un modo integrato per farlo?

La mia soluzione è:

x <- capture.output(texreg(
    regs, custom.coef.names = c("Intercept", rep("x", 4)), 
    custom.model.names = c("1", "2", "1", "2"))) 

x[6] <- paste0("& \\multicolumn{2}{c}{A} & \\multicolumn{2}{c}{B} \\\\ \n", x[6]) 

cat(x, sep = "\n") 

Ma questo è ovviamente un dotto-tape-y bit.

risposta

0

È possibile leggere il codice di function digitandolo nella console o dallo githubwebside del pacchetto texreg.

texreg 
function (l, file = NULL, single.row = FALSE, stars = c(0.001, 
    0.01, 0.05), custom.model.names = NULL,... 

Questa è l'uscita di texreg per un tavolo di 4 modelli:

\begin{table} 
\begin{center} 
\begin{tabular}{l c c c c } 
\hline 
& Model 1 & Model 2 & Model 3 & Model 4 \\ 

ho guardato nella linea di codice 469, beggining della tavola:

string <- paste0(string, "\\begin{tabular}{", coldef, 
      "}", linesep) 

Poi ho aggiunte alcune modifiche personali:

string <- paste0(string, "\\begin{tabular}{", coldef, 
      "}", linesep) 
     ## Additions 
     string <- paste0(string, "\\\\[-1.8ex]\\hline", linesep) 
     string <- paste0(string, "& \\multicolumn{", length(l), "}{c}{\\textit{Dependent variable:}} \\\\", linesep) 
     string <- paste0(string, "\\cline{2-5}", linesep) 
     string <- paste0(string, "\\\\[-1.8ex] & \\multicolumn{", length(l), "}{c}{", dep.var, "} \\\\", linesep) 

Quindi, salvare la funzione con un nome diverso, per esempio:

texreg2 <- function (l, file = NULL, single.row = FALSE, ...) 

Ora, la funzione richiede funzioni interne del pacchetto, quindi è necessario collegare la funzione personalizzata per lo spazio dei nomi del pacchetto nel proprio ambiente. Easy peasy:

environment(texreg2) <- asNamespace('texreg') 

Ora è possibile chiamare la nuova funzione. Le mie aggiunte includono tre righe e un nome per la variabile dipendente, simile a stargazer.

texreg2(out, dep.var = "Normalize Citation Score") 

\begin{table} 
\begin{center} 
\begin{tabular}{l c c c c } 
\\[-1.8ex]\hline 
& \multicolumn{4}{c}{\textit{Dependent variable:}} \\ 
\cline{2-5} 
\\[-1.8ex] & \multicolumn{4}{c}{Normalize Citation Score} \\ 
\hline 
& Model 1 & Model 2 & Model 3 & Model 4 \\ 

Infine, se non ti piace questo metodo, è possibile manipolare l'uscita con regex, checkout questo question.

+1

in effetti è così che sto andando ad aggiungere 'multicolumn's da qualche tempo. Trovo che sia un po 'troppo idiosincratico essermi preoccupato di scriverlo in una funzione e gestirlo caso per caso. Grazie per la risposta. – MichaelChirico

Problemi correlati