【问题标题】:Multi-panel regression tables in RR中的多面板回归表
【发布时间】:2021-09-26 15:51:54
【问题描述】:

我正在尝试创建一个回归表,其中包含两个面板重叠但不完全相同的因变量。对于每个面板,我想要一个标题来指示每个面板的名称以及每个回归的因变量。

# rm(list = ls())

data("mtcars")

# Regressions for panel 1
reg1 <- lm(mpg ~ cyl + disp, data = mtcars)
reg2 <- lm(cyl ~ cyl + disp, data = mtcars)

# Regressions for panel 2
reg3 <- lm(mpg ~ hp + drat, data = mtcars)
reg4 <- lm(cyl ~ hp + drat, data = mtcars)
reg5 <- lm(disp ~ hp + qsec, data = mtcars)

# Panel 1 output
panel1 <- stargazer::stargazer(
  reg1, reg2,
  float = TRUE,
  header = FALSE,
  model.numbers = FALSE,
  omit.table.layout = "n",
  multicolumn = FALSE,
  dep.var.caption = "",
  type = "latex",
  align = TRUE, 
  digits = 2,
  df = FALSE, 
  digits.extra = 2,
  nobs = TRUE,
  omit.stat = c("rsq", "adj.rsq", "ser") 
)

# Panel 2 output
panel2 <- 
  stargazer::stargazer(
  reg3, reg4, reg5,
  float = TRUE,
  header = FALSE,
  model.numbers = FALSE,
  omit.table.layout = "n",
  multicolumn = FALSE,
  dep.var.caption = "",
  type = "latex",
  align = TRUE, 
  digits = 2,
  df = FALSE, 
  digits.extra = 2,
  nobs = TRUE,
  omit.stat = c("rsq", "adj.rsq", "ser")
)

# Plot panels together
table <- 
  starpolishr::star_panel(
  panel1, 
  panel2,
  panel.names = c(
    "Panel 1", 
    "Panel 2"
  ), 
  same.summary.stats = FALSE, 
  same.lhs.vars = FALSE )

# Save as a .tex file
starpolishr::star_tex_write(
  starlist = table, 
  file = paste0(here::here(), "/panel_mwes.tex"), 
  headers = FALSE
)

此代码产生以下输出:

我需要改变的是1)将“面板A:面板1”移动到因变量名称上方;和 2) 在“面板 B:面板 2”下方添加因变量名称。有没有什么好的方法来实现这一点(在 stargazer/starpolishr 或其他方式)而不是超级hacky?

【问题讨论】:

  • 请不要在您的代码中添加 never ever rm(list = ls())。如果有人运行您的代码,可能会发生大量数据丢失。
  • @Martin Gal,感谢收看,我忘记评论了。
  • 这两个表是否需要垂直连接成一个表,或者将它们作为两个单独的表或水平连接是否可以?如果是后者,texreg 中的 custom.header 参数会满足您的要求吗?见here
  • 感谢@PhilipLeifeld -- 不幸的是,这些面板需要垂直连接。

标签: r tex stargazer xtable texreg


【解决方案1】:

所以这是我的 hacky 做事方式(我不会接受这个作为答案,因为必须有更好的方式来做这件事)。

# 1. Flip the panel name and column names around
col_names  <- table[8]
panel_name <- table[10]

table[8]  <- panel_name
table[10] <- col_names

# 2. Insert custom column names below panel 2 header
table <- 
  starpolishr::star_insert_row(
    table, 
    c("\\hline \\\\[-1.8ex] & \\multicolumn{1}{c}{mpg} & \\multicolumn{1}{c}{cyl} & \\multicolumn{1}{c}{disp} \\\\ \\hline \\\\[-1.8ex]"),
    insert.after = c(24)
  )

# Save output
starpolishr::star_tex_write(
  starlist = table, 
  file = paste0(here::here(), "/panel_mwe2.tex"), 
  headers = FALSE
)

以下输出大致是我想要实现的:

【讨论】:

    猜你喜欢
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    相关资源
    最近更新 更多