texreg - создать пустой столбец

Я использую texreg для создания таблицы LaTeX из R. Я хотел бы вставить в вывод пустой столбец (по стилистическим соображениям). Я могу, конечно, сделать это вручную, но было бы здорово иметь возможность создать это автоматически. Вот пример:

library(texreg)

x1  <- rnorm(n=100,m=1,s=1)
x2  <- rnorm(n=100,m=1,s=1)
e  <- rnorm(n=100,m=0,s=1)

y <- 0.1 + 0.3 * x1 + 0.4 * x2 + e

reg1 <- lm(y~x1)
reg2 <- lm(y~x2)
reg3 <- lm(y~x1+x2)

texreg(list(reg1,reg2,reg3)
       ,stars=c(0.01,0.05,0.1)
       ,digits=2
       ,dcolumn=T
       ,use.packages=F 
       ,file="tabfile.tex")

Это дает мне вывод:

\begin{table}
\begin{center}
\begin{tabular}{l D{.}{.}{3.5} D{.}{.}{3.5} D{.}{.}{3.5} }
\hline
 & \multicolumn{1}{c}{Model 1} & \multicolumn{1}{c}{Model 2} & \multicolumn{1}{c}{Model 3} \\
\hline
(Intercept) & 0.59^{***} & 0.53^{***} & 0.05       \\
            & (0.16)     & (0.16)     & (0.19)     \\
x1          & 0.36^{***} &            & 0.40^{***} \\
            & (0.11)     &            & (0.10)     \\
x2          &            & 0.43^{***} & 0.48^{***} \\
            &            & (0.11)     & (0.11)     \\
\hline
R$^2$       & 0.10       & 0.13       & 0.25       \\
Adj. R$^2$  & 0.09       & 0.12       & 0.23       \\
Num. obs.   & 100        & 100        & 100        \\
RMSE        & 1.05       & 1.03       & 0.96       \\
\hline
\multicolumn{4}{l}{\scriptsize{$^{***}p<0.01$, $^{**}p<0.05$, $^*p<0.1$}}
\end{tabular}
\caption{Statistical models}
\label{table:coefficients}
\end{center}
\end{table}

Вместо этого я хотел бы иметь:

\begin{table}
\begin{center}
\begin{tabular}{lc D{.}{.}{3.5} D{.}{.}{3.5} D{.}{.}{3.5} }
\hline
 && \multicolumn{1}{c}{Model 1} & \multicolumn{1}{c}{Model 2} & \multicolumn{1}{c}{Model 3} \\
\hline
(Intercept) && 0.59^{***} & 0.53^{***} & 0.05       \\
            && (0.16)     & (0.16)     & (0.19)     \\
x1          && 0.36^{***} &            & 0.40^{***} \\
            && (0.11)     &            & (0.10)     \\
x2          &&            & 0.43^{***} & 0.48^{***} \\
            &&            & (0.11)     & (0.11)     \\
\hline
R$^2$       && 0.10       & 0.13       & 0.25       \\
Adj. R$^2$  && 0.09       & 0.12       & 0.23       \\
Num. obs.   && 100        & 100        & 100        \\
RMSE        && 1.05       & 1.03       & 0.96       \\
\hline
\multicolumn{5}{l}{\scriptsize{$^{***}p<0.01$, $^{**}p<0.05$, $^*p<0.1$}}
\end{tabular}
\caption{Statistical models}
\label{table:coefficients}
\end{center}
\end{table}

Конечно, было бы еще лучше, если бы была возможность вставлять произвольные пустые столбцы.


person Andy    schedule 29.08.2016    source источник
comment
texreg был создан для lm объектов и будет принимать только их. Как упоминалось в этом сообщении, вы можете просто создавать свои отдельные объекты lm взяв уже существующий объект lm и превратив его числа в символы. возможно, textreg примет это. emptyLM <- reg1; emptyLM$coefficients[1:2] <- as.character(rep( "",2)) и так далее. Затем позвоните texreg(list(reg1,reg2,emptyLM,reg3). Удачи!   -  person nilsole    schedule 30.08.2016
comment
последней возможностью, конечно, было бы манипулировать самой функцией textreg в соответствии с вашими потребностями.   -  person nilsole    schedule 30.08.2016
comment
@nilsole: это неправильно. texreg был сделан для всех типов моделей. В настоящее время он поддерживает более 70 из них и настраивается. Настраиваемость означает, что вы можете легко писать новые расширения, предоставляя методы для общей функции extract, как описано в моем ответе здесь: stackoverflow.com/questions/38894044/. Принуждение коэффициентов к контейнерам lm или изменение функции texreg — абсолютно неправильный способ сделать это.   -  person Philip Leifeld    schedule 30.08.2016


Ответы (1)


Вы можете вставлять новые столбцы, используя аргумент custom.columns для texreg. Новые столбцы должны быть переданы как именованный список. Аргумент custom.col.pos можно использовать, чтобы указать, где должны быть расположены столбцы. Например, вы можете вставить новый пустой столбец, добавив аргумент custom.columns = list("new column" = rep("", 3)).

person Philip Leifeld    schedule 30.08.2016