R:如何从数据框中获得适当的乳胶回归table?

R :How to get a proper latex regression table from a dataframe?

考虑以下示例

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 值的自定义回归模型的输出(实际上,如果需要,我可以显示任何其他统计数据,例如系数的标准误差)。

有两个变量,var1var2

例如,在模型 1 中,var1 的系数为 10.2,P 值为 0.00,而 var2 的系数为 0.020.30.

的 P 值

是否有一个包可以自动处理这些(自定义)table 并且可以创建一个整洁的 Latex table 并带有重要的星号?

谢谢!

这是使用 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 对象添加到列表中。最后,我们 return 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 table。或者,按照原始问题中的要求,texreg 创建 LaTeX table。 texreg(tr, single.row = TRUE) 的输出如下所示:

\begin{table}
\begin{center}
\begin{tabular}{l c c }
\hline
 & Model 1 & Model 2 \
\hline
var1 & .20^{***}$ & .20^{*}$ \
var2 & [=14=].02$        & [=14=].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 包中定义。