我们如何用两行显示 F 统计量/自由度

Hon*_*dha 8 latex r linear-regression r-markdown stargazer

我正在使用 Stargazer 输出包含多个 lm 模型的回归表。问题是 Stargazer 默认在一行中输出 F 统计量和自由度。如果您有 3 或 4 个模型,则意味着 Latex 中的输出不必要地宽并且延伸到页面之外。

有一个选项可以使用以下方法隐藏自由度:

stargazer(lm1,lm2,lm3,lm4, df = F)
Run Code Online (Sandbox Code Playgroud)

但是,没有办法让它显示在两行上。

这是一个可重现的不良结果示例:

lm.out.1 <- lm(stack.loss ~ Air.Flow , data=stackloss)
lm.out.2 <- lm(stack.loss ~ Water.Temp, data=stackloss)
lm.out.3 <- lm(stack.loss ~ Acid.Conc., data=stackloss)
lm.out.4 <- lm(stack.loss ~ Air.Flow + Water.Temp, data=stackloss)
lm.out.5 <- lm(stack.loss ~ Air.Flow + Water.Temp + Acid.Conc., data=stackloss)

stargazer(lm.out.1, 
          lm.out.2,
          lm.out.3,
          lm.out.4,
          lm.out.5)
Run Code Online (Sandbox Code Playgroud)

当你渲染乳胶输出时,你会得到一个不必要的宽表: 在此输入图像描述

当渲染打印时,它位于页边距之外: 在此输入图像描述

可以看到如何使用df=F选项以可打印的方式整齐有效地呈现该表:

stargazer(lm.out.1, 
          lm.out.2,
          lm.out.3,
          lm.out.4,
          lm.out.5, df = F)
Run Code Online (Sandbox Code Playgroud)

产生以下结果: 在此输入图像描述

但是,现在我们失去了有关自由度的信息。

有没有办法打印带有换行符的信息,以便它打印在表格的两行上?

软件包作者似乎在这里发布了一些有用的内容 - 关于添加自由度: 在观星者表中显示自由度

我不知道如何采取这一点并在两行上获得 F-Stat 和 DF 的所需输出......

Car*_*era 2

您必须修改 的输出stargazer()才能制作一个在不同行中显示 F 统计量和 dfs 的表格。此答案 ( ) 中的用户定义函数show_F_in_two_lines()将生成如下所示的表格。

在此输入图像描述

library(stringr)

show_F_in_two_lines <- function(stargazer) {
  # `Stringr` works better than base's regex 
  require(stringr)

  # If you remove `capture.output()`, not only the modified LaTeX code 
  # but also the original code would show up
  stargazer <- stargazer |>
    capture.output()

  # Reuse the index in which F-statistics are displayed
  position_F <- str_which(stargazer, "F Statistic")

  # Extract only F-statistics
  Fs <- stargazer[position_F] |>
    str_replace_all("\\(.*?\\)", "")

  # Extract only df values and make a new line for them
  dfs <- stargazer[position_F] |>
    str_extract_all("\\(.*?\\)") |>
    unlist() |>
    (
      \(dfs)
      paste0(" & ", dfs, collapse = "")
    )() |>
    paste0(" \\\\")

  # Reuse table elements that are specified
  # after the index of F-statistics
  after_Fs <- stargazer[-seq_len(position_F)]

  c(
    stargazer[seq_len(position_F - 1)],
    Fs,
    dfs,
    after_Fs
  ) |>
    cat(sep = "\n")
}

stargazer(
  header = FALSE,
  lm.out.1,
  lm.out.2,
  lm.out.3,
  lm.out.4,
  lm.out.5
) |>
  show_F_in_two_lines()
Run Code Online (Sandbox Code Playgroud)