首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向我的texreg输出添加多个颜色

向我的texreg输出添加多个颜色
EN

Stack Overflow用户
提问于 2016-05-24 00:05:30
回答 2查看 1.9K关注 0票数 9

我想通过texreg创建一个包含分组列的表。我只能看到分组行(groups)的选项。

下面是一个例子:

代码语言:javascript
复制
set.seed(01349)
DF <- data.frame(y = rnorm(100), x1A = rnorm(100), x2A = rnorm(100),
                 x1B = rnorm(100), x2B = rnorm(100))
regs <- lapply(paste0("x", 1:2, c("A", "A", "B", "B")), function(x)
          lm(paste0("y ~ ", x), data = DF))

这是我和普通texreg最接近的地方

代码语言:javascript
复制
texreg(regs, custom.coef.names = c("Intercept", rep("x", 4)),
       custom.model.names = c("1", "2", "1", "2"))

具有LaTeX输出:

代码语言:javascript
复制
\begin{table}
\begin{center}
\begin{tabular}{l c c c c }
\hline
           & 1 & 2 & 1 & 2 \\
\hline
Intercept  & $-0.13$  & $-0.13$  & $-0.11$  & $-0.11$  \\
           & $(0.12)$ & $(0.12)$ & $(0.12)$ & $(0.12)$ \\
x          & $0.02$   & $0.07$   & $0.13$   & $-0.11$  \\
           & $(0.13)$ & $(0.12)$ & $(0.12)$ & $(0.13)$ \\
\hline
R$^2$      & 0.00     & 0.00     & 0.01     & 0.01     \\
Adj. R$^2$ & -0.01    & -0.01    & 0.00     & -0.00    \\
Num. obs.  & 100      & 100      & 100      & 100      \\
RMSE       & 1.18     & 1.17     & 1.17     & 1.17     \\
\hline
\multicolumn{5}{l}{\scriptsize{$^{***}p<0.001$, $^{**}p<0.01$, $^*p<0.05$}}
\end{tabular}
\caption{Statistical models}
\label{table:coefficients}
\end{center}
\end{table}

我更喜欢多一行(用%注释突出显示):

代码语言:javascript
复制
\begin{table}
\begin{center}
\begin{tabular}{l c c c c }
\hline
%*************A HEADER LINE HERE*********************
 & \multicolumn{2}{c}{A} & \multicolumn{2}{c}{B} \\ %
%****************************************************
           & 1 & 2 & 1 & 2 \\
\hline
Intercept  & $-0.13$  & $-0.13$  & $-0.11$  & $-0.11$  \\
           & $(0.12)$ & $(0.12)$ & $(0.12)$ & $(0.12)$ \\
x          & $0.02$   & $0.07$   & $0.13$   & $-0.11$  \\
           & $(0.13)$ & $(0.12)$ & $(0.12)$ & $(0.13)$ \\
\hline
R$^2$      & 0.00     & 0.00     & 0.01     & 0.01     \\
Adj. R$^2$ & -0.01    & -0.01    & 0.00     & -0.00    \\
Num. obs.  & 100      & 100      & 100      & 100      \\
RMSE       & 1.18     & 1.17     & 1.17     & 1.17     \\
\hline
\multicolumn{5}{l}{\scriptsize{$^{***}p<0.001$, $^{**}p<0.01$, $^*p<0.05$}}
\end{tabular}
\caption{Statistical models}
\label{table:coefficients}
\end{center}
\end{table}

我是不是遗漏了什么,还是没有内置的方法来做这件事?

我的解决办法是:

代码语言:javascript
复制
x <- capture.output(texreg(
  regs, custom.coef.names = c("Intercept", rep("x", 4)),
  custom.model.names = c("1", "2", "1", "2")))

x[6] <- paste0("& \\multicolumn{2}{c}{A} & \\multicolumn{2}{c}{B} \\\\ \n", x[6])

cat(x, sep = "\n")

但这显然有点像胶带。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-08 12:55:24

您可以通过将function输入控制台或从包texreggithub 网站中读取它的代码。

代码语言:javascript
复制
texreg
function (l, file = NULL, single.row = FALSE, stars = c(0.001, 
    0.01, 0.05), custom.model.names = NULL,...

这是由4种模型组成的表的texreg输出:

代码语言:javascript
复制
\begin{table}
\begin{center}
\begin{tabular}{l c c c c }
\hline
 & Model 1 & Model 2 & Model 3 & Model 4 \\

我查看了代码行四百六十九 (表的开头):

代码语言:javascript
复制
 string <- paste0(string, "\\begin{tabular}{", coldef, 
            "}", linesep)

然后我添加了我自己的一些修改:

代码语言:javascript
复制
string <- paste0(string, "\\begin{tabular}{", coldef, 
                 "}", linesep)
## Additions
string <- paste0(string, "\\\\[-1.8ex]\\hline", linesep)
string <- paste0(string, "& \\multicolumn{", length(l), 
                 "}{c}{\\textit{Dependent variable:}} \\\\", linesep)
string <- paste0(string, "\\cline{2-",length(modnames), "}", linesep)
string <- paste0(string, "\\\\[-1.8ex] & \\multicolumn{", length(l), 
                 "}{c}{", dep.var, "} \\\\", linesep)

然后,使用不同的名称保存函数,例如:

代码语言:javascript
复制
texreg2 <- function (l, file = NULL, single.row = FALSE, ...)

现在,函数需要来自包的内部函数,因此需要将自定义函数附加到环境中包的命名空间。简单的农民:

代码语言:javascript
复制
environment(texreg2) <- asNamespace('texreg')

现在你可以调用你的新函数了。我添加的内容包括三行和一个因变量的名称,类似于stargazer

代码语言:javascript
复制
texreg2(out, dep.var = "Normalize Citation Score")

\begin{table}
\begin{center}
\begin{tabular}{l c c c c }
\\[-1.8ex]\hline
& \multicolumn{4}{c}{\textit{Dependent variable:}} \\
\cline{2-5}
\\[-1.8ex] & \multicolumn{4}{c}{Normalize Citation Score} \\
\hline
 & Model 1 & Model 2 & Model 3 & Model 4 \\

最后,如果您不喜欢这个方法,可以使用regex操作输出,签出这个问题

票数 0
EN

Stack Overflow用户

发布于 2020-05-22 09:05:26

这可能已经晚了,但仍然很有用。

texreg的一个新版本(1.36.28)刚刚在GitHub上发布(还没有发布在CRAN上,2020年5月22日)。它添加了创建回归组的选项custom.header

应用于您的示例,它创建:

代码语言:javascript
复制
library(texreg)

set.seed(01349)
DF <- data.frame(y = rnorm(100), x1A = rnorm(100), x2A = rnorm(100),
                 x1B = rnorm(100), x2B = rnorm(100))
regs <- lapply(paste0("x", 1:2, c("A", "A", "B", "B")), function(x)
  lm(paste0("y ~ ", x), data = DF))

screenreg(
  regs, 
  custom.header = list("A" = 1:2, "B" = 3:4),
  custom.coef.names = c("Intercept", rep("x", 4)),
  custom.model.names = c("1", "2", "1", "2"),
)

=============================================
                   A                 B       
           ----------------  ----------------
           1        2        1        2      
---------------------------------------------
Intercept   -0.13    -0.13    -0.11    -0.11 
            (0.12)   (0.12)   (0.12)   (0.12)
x            0.02     0.07     0.13    -0.11 
            (0.13)   (0.12)   (0.12)   (0.13)
---------------------------------------------
R^2          0.00     0.00     0.01     0.01 
Adj. R^2    -0.01    -0.01     0.00    -0.00 
Num. obs.  100      100      100      100    
=============================================
*** p < 0.001; ** p < 0.01; * p < 0.05

我使用screenreg()来更容易地显示输出,但它也适用于texreg()

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37402445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档