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 пакет.

Другие вопросы по тегам