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 的所需输出......
您必须修改 的输出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)