考虑以下示例
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
。
是否有自动处理这些(自定义)表的包,并且可以创建一个整齐的Latex表,其中有明星的重要性?
谢谢!
答案 0 :(得分:3)
以下是使用texreg
的解决方案。
请注意,texreg
&gt; = 1.36.18是必需的。
您在数据框中提供的信息(coefs和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
个对象的列表。
我们现在可以将该函数应用于任何类似于问题中提供的数据框,具有任意数量的列(&gt; 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
包中定义。