R: Как получить правильную таблицу латексной регрессии из кадра данных?
Рассмотрим следующий пример
inds <- c('var1','','var2','')
model1 <- c(10.2,0.00,0.02,0.3)
model2 <- c(11.2,0.01,0.02,0.023)
df = df=data.frame(inds,model1,model2)
df
inds model1 model2
var1 10.20 11.200
0.00 0.010
var2 0.02 0.020
0.30 0.023
Здесь у вас есть выходные данные пользовательской модели регрессии с коэффициентами и P-значениями (я на самом деле могу показать любую другую статистику, если мне понадобятся, скажем, стандартные ошибки коэффициентов).
Есть две переменные, var1
а также var2
,
Например, в модели 1 var1
поставляется с коэффициентом 10.2
и P-значение 0.00
в то время как var2
имеет коэффициент 0.02
и P-значение 0.30
,
Есть ли пакет, который обрабатывает эти (пользовательские) таблицы автоматически и может создать аккуратную таблицу из латекса со значками по значимости?
Спасибо!
1 ответ
Вот решение с использованием texreg
,
Обратите внимание, что texreg
>= 1.36.18 требуется.
Информация, которую вы предоставляете во фрейме данных (коэффи- циенты и значения p), может быть произвольно размещена в фрейме данных. Поэтому нам нужно написать код, который выбирает эти данные из соответствующих мест во фрейме данных и использует их для создания texreg
объект. Поскольку вы запрашиваете универсальное (и предположительно многоразовое) решение, мы должны обернуть код в повторно используемую функцию. Я назову эту функцию extractFromDataFrame
, Итак, вот функция, которая извлекает информацию из фрейма данных и создает список texreg
объекты для разных моделей:
require("texreg")
extractFromDataFrame <- function (dataFrame) {
coef.row.indices <- seq(1, nrow(dataFrame) - 1, 2)
pval.row.indices <- seq(2, nrow(dataFrame), 2)
texregObjects <- list()
for (i in 2:ncol(dataFrame)) {
coefs <- dataFrame[coef.row.indices, i]
coefnames <- as.character(dataFrame[coef.row.indices, 1])
pvalues <- dataFrame[pval.row.indices, i]
tr <- createTexreg(coef = coefs, coef.names = coefnames, pvalues = pvalues)
texregObjects[i - 1] <- list(tr)
}
return(texregObjects)
}
В этой функции мы сначала определяем, в каких строках фрейма данных хранятся коэффициенты и в каких строках хранятся p-значения. Затем мы создали пустой список, в котором мы сохранили texreg
объекты. Мы перебираем все столбцы, кроме первого, поскольку первый содержит только метки. В каждом из этих столбцов модели мы сохраняем коэффициенты, их имена и значения p, а затем передаем их createTexreg
конструктор, который является функцией, которая создает texreg
объект для нас на основе данных. Мы добавляем texreg
возражать против списка. В итоге мы возвращаем список texreg
объекты.
Теперь мы можем применить функцию к любому фрейму данных, который выглядит как тот, который представлен в вопросе, с произвольным числом столбцов (> 1). В этом случае после применения функции к df
объект, мы можем захотеть напечатать содержимое списка, если мы хотим убедиться, что мы все сделали правильно:
tr <- extractFromDataFrame(df)
tr
И действительно, результаты содержат соответствующие данные:
[[1]]
No standard errors were defined for this texreg object.
No decimal places were defined for the GOF statistics.
coef. p
var1 10.20 0.0
var2 0.02 0.3
No GOF block defined.
[[2]]
No standard errors were defined for this texreg object.
No decimal places were defined for the GOF statistics.
coef. p
var1 11.20 0.010
var2 0.02 0.023
No GOF block defined.
Теперь мы можем просто передать список texreg
объекты к screenreg
например, screenreg(tr)
со следующим результатом:
========================
Model 1 Model 2
------------------------
var1 10.20 *** 11.20 *
var2 0.02 0.02 *
========================
*** p < 0.001, ** p < 0.01, * p < 0.05
Или к htmlreg
для создания таблицы HTML. Или, как и требовалось в первоначальном вопросе, texreg
для создания таблицы LaTeX. Выход из texreg(tr, single.row = TRUE)
выглядит так:
\begin{table}
\begin{center}
\begin{tabular}{l c c }
\hline
& Model 1 & Model 2 \\
\hline
var1 & $10.20^{***}$ & $11.20^{*}$ \\
var2 & $0.02$ & $0.02^{*}$ \\
\hline
\multicolumn{3}{l}{\scriptsize{$^{***}p<0.001$, $^{**}p<0.01$, $^*p<0.05$}}
\end{tabular}
\caption{Statistical models}
\label{table:coefficients}
\end{center}
\end{table}
Это решение может быть модифицировано для учета стандартных ошибок, доверительных интервалов или статистики соответствия.
Различный texreg
аргументы могут быть использованы для настройки вывода, включая использование booktabs
пакет или десятичное выравнивание через dcolumn
, например.
Обратите внимание, что вы не должны вызывать фрейм данных df
потому что это имя объекта уже определено в stats
пакет.