Status: portfolio-quality script toolkit. It is intentionally lightweight and is not yet an installable CRAN package.
reg2paper 是一个面向政治学、社会学等社科本科生的 R 语言小工具。它的目标很简单:把你已经做好的 lm() 或 glm() 回归模型,一键整理成接近社科期刊规范的回归表格,并同时输出模型诊断图。
你不需要手动复制系数、标准误、星号、R² 和样本量,也不需要自己从零画诊断图。这个工具把这些重复工作交给成熟 R 包完成,包括 modelsummary、flextable、sandwich、performance、see 和 patchwork。
适合以下场景:
- 你正在写政治学、社会学、公共管理、传播学等社科论文;
- 你已经学会用
lm()做线性回归,或用glm()做 logistic 回归; - 你希望把多个模型整理成一个 Word 表格;
- 你希望表格里自动有稳健标准误、显著性星号、N、R² 等信息;
- 你希望检查模型残差、正态性、同方差性和异常值。
如果你刚开始学 R,只要先理解这一句:
lm(因变量 ~ 自变量1 + 自变量2, data = 数据集)在 R 公式里,~ 左边是因变量,右边是自变量。例如:
lm(mpg ~ wt + hp, data = mtcars)意思是:用 wt 和 hp 解释 mpg。
首次使用前,请在 RStudio 控制台运行:
install.packages(c(
"modelsummary", "performance", "see", "patchwork",
"sandwich", "lmtest", "flextable", "ggplot2", "purrr"
))Word (.docx) 输出不需要额外工具;HTML 输出由 flextable 调用 Pandoc,使用前请安装 Pandoc 并确认 pandoc --version 可在终端运行。
如果安装过程中提示选择 CRAN 镜像,选择 China 或 Cloud 都可以。
reg2paper/
├── R/
│ ├── reg_report.R # 主函数:生成回归表和诊断图
│ ├── diagnostic_plot.R # 单独生成诊断图
│ ├── style_presets.R # 期刊风格和三线表字体设置
│ └── utils.R # 输入检查、稳健标准误等辅助函数
├── data/
│ ├── gapminder_classroom.csv
│ ├── owid_democracy_classroom.csv
│ ├── owid_women_parliament_classroom.csv
│ └── README.md
├── examples/
│ ├── demo.R
│ ├── demo_chinese.R
│ └── demo_social_data.R
├── output/
└── README.md
请先在 RStudio 中把工作目录设置为 reg2paper 文件夹:
Session -> Set Working Directory -> Choose Directory...
然后运行:
source("R/reg_report.R")
m1 <- lm(mpg ~ wt, data = mtcars)
m2 <- lm(mpg ~ wt + hp, data = mtcars)
reg_report(
models = list(m1, m2),
output_file = "output/my_regression.docx",
model_names = c("模型1", "模型2"),
title = "汽车油耗的影响因素"
)- 所有示例数据均来自公开教学数据,并在
data/README.md中列出来源。 robust_se = TRUE当前使用 HC1 异方差稳健标准误,不替代 clustered、HAC 或 survey-design inference。ajps与asr是便于课堂使用的 inspired presets,不是对期刊排版规范的逐项复刻。- 诊断图用于发现模型问题,不自动证明模型设定正确。
- 输出字体是否生效取决于运行机器是否安装相应字体。
- 转换为标准 R package 结构并增加
testthat。 - 增加 clustered standard errors 与
fixest模型支持。 - 增加 LaTeX/HTML 三线表输出。
- 为不同操作系统增加自动化 smoke tests。
MIT License。课堂数据仍受各原始数据源条款约束。
运行后会在 output/ 文件夹里生成:
my_regression.docx:Word 回归表格;diagnostic_plots.png:模型诊断图。
回归模型写在 lm() 或 glm() 里,不是写在 reg_report() 里。
最常用格式是:
模型名 <- lm(因变量 ~ 自变量1 + 自变量2 + 自变量3, data = 数据集)例如:
m1 <- lm(life_expectancy ~ gdp_per_capita, data = mydata)
m2 <- lm(life_expectancy ~ gdp_per_capita + population, data = mydata)上面两行中:
life_expectancy是因变量;gdp_per_capita、population是自变量;mydata是数据集名称;m1、m2是模型名称,可以自己改。
然后把模型放进 reg_report():
reg_report(
models = list(m1, m2),
output_file = "output/table.docx"
)字体和字号集中写在 reg_table_theme() 里。你只要改这一段即可:
table_theme = reg_table_theme(
chinese_font = "Microsoft YaHei",
english_font = "Times New Roman",
font_size = 10,
note_size = 9
)完整例子:
reg_report(
models = list(m1, m2),
output_file = "output/table.docx",
title = "回归结果",
table_theme = reg_table_theme(
chinese_font = "宋体",
english_font = "Times New Roman",
font_size = 10,
note_size = 9,
table_align = "center",
variable_align = "left"
)
)常用字体建议:
| 场景 | 中文字体 | 英文字体 |
|---|---|---|
| Windows 中文论文 | "宋体" 或 "Microsoft YaHei" |
"Times New Roman" |
| macOS 中文论文 | "Songti SC" 或 "PingFang SC" |
"Times New Roman" |
| 英文论文 | "Times New Roman" |
"Times New Roman" |
reg_report(
models,
output_file = "regression_results.docx",
style = "default",
robust_se = TRUE,
coef_map = NULL,
model_names = NULL,
title = "回归结果",
notes = NULL,
table_theme = reg_table_theme(),
diagnostic = TRUE,
diagnostic_file = "diagnostic_plots.png"
)| 参数 | 说明 | 新手建议 |
|---|---|---|
models |
lm 或 glm 模型组成的 list |
必填,例如 list(m1, m2) |
output_file |
输出文件名 | Word 用 .docx,网页用 .html |
style |
表格风格 | 先用 "default" |
robust_se |
是否使用 HC1 稳健标准误 | 社科论文建议保留 TRUE |
coef_map |
变量名美化 | 把英文变量名改成中文展示名 |
model_names |
模型列名 | 例如 c("模型1", "模型2") |
title |
表格标题 | 写成论文中的表名 |
notes |
表格底部说明 | 可写数据来源、控制变量说明 |
table_theme |
三线表字体和字号 | 用 reg_table_theme() 设置 |
diagnostic |
是否输出诊断图 | 默认 TRUE |
diagnostic_file |
诊断图文件名 | 建议放在 output/ |
reg2paper 内置三种展示风格:
| 风格 | 标准误 | 常数项 | 统计量顺序 |
|---|---|---|---|
"default" |
圆括号 | 显示 | N、R²、Adjusted R²、F、AIC、BIC |
"ajps" |
圆括号 | 默认隐藏 | N、R²、Adjusted R²、F |
"asr" |
方括号 | 显示 | N、R²、Adjusted R²、AIC、BIC、F |
显著性星号统一为:
*:p < 0.1**:p < 0.05***:p < 0.01
如果原始数据中的变量名是英文,论文表格里可以显示成中文:
coef_labels <- c(
"gdp_per_capita" = "人均 GDP",
"population" = "人口规模",
"democracy_index" = "民主指数"
)
reg_report(
models = list(m1, m2),
output_file = "output/table.docx",
coef_map = coef_labels
)注意:左边必须是数据里的真实变量名,右边是你希望表格中显示的名字。
如果数据列名本身就是中文,写公式时要用反引号:
m1 <- lm(`政治信任` ~ `受教育年限` + `收入`, data = mydata)反引号不是单引号。它通常在键盘左上角,和 ~ 在同一个键上。
项目中已经放入 3 个课堂演示 CSV:
| 文件 | 主题 | 适合演示 |
|---|---|---|
data/gapminder_classroom.csv |
国家发展、人口、人均 GDP、预期寿命 | 线性回归、散点图 |
data/owid_democracy_classroom.csv |
选举民主指数 | 政治制度比较 |
data/owid_women_parliament_classroom.csv |
女性议员席位比例 | 性别与政治代表 |
读取方法:
gap <- read.csv("data/gapminder_classroom.csv")
head(gap)课堂数据来自公开数据项目的课堂版整理,来源说明见 data/README.md。
source("examples/demo_chinese.R")
source("examples/demo_social_data.R")demo.R 还演示 HTML 导出,因此需要 Pandoc;其 Word 表和诊断图部分不依赖 Pandoc。
运行后请查看 output/ 文件夹。
说明你的工作目录没有设到 reg2paper 文件夹。请在 RStudio 中点击:
Session -> Set Working Directory -> Choose Directory...
然后选择 reg2paper 文件夹。
说明还没安装依赖包。复制第 2 节的 install.packages() 代码运行即可。
可能是电脑没有安装该字体。Windows 可用 "宋体"、"Microsoft YaHei";macOS 可用 "Songti SC"、"PingFang SC"。
可以。例如:
m_logit <- glm(am ~ wt + hp, data = mtcars, family = binomial())
reg_report(list(m_logit), output_file = "output/logit.docx")但 logistic 回归不一定有普通 OLS 的 R² 和 F 统计量,表格只会显示模型可用的统计量。
诊断图不是论文最终一定要放进去的图,而是帮助你检查模型是否有明显问题。比如:
- 残差是否有系统性模式;
- 残差是否大致接近正态;
- 方差是否大致稳定;
- 是否有特别极端的异常点。
下面这段代码适合课堂演示或学生第一次使用。复制到 RStudio 脚本中运行即可:
# 1. 加载 reg2paper
source("R/reg_report.R")
# 2. 读取课堂数据
gap <- read.csv("data/gapminder_classroom.csv")
# 3. 建立回归模型
# 写法:lm(因变量 ~ 自变量1 + 自变量2, data = 数据集)
# 这里的因变量是 life_expectancy
# 这里的自变量是 gdp_per_capita 和 population
m1 <- lm(life_expectancy ~ gdp_per_capita, data = gap)
m2 <- lm(life_expectancy ~ gdp_per_capita + population, data = gap)
# 4. 设置变量显示名称
coef_labels <- c(
"gdp_per_capita" = "人均 GDP",
"population" = "人口规模"
)
# 5. 一键生成 Word 表格和诊断图
reg_report(
models = list(m1, m2),
output_file = "output/课堂演示_回归结果.docx",
style = "default",
robust_se = TRUE,
coef_map = coef_labels,
model_names = c("模型1", "模型2"),
title = "国家发展水平与预期寿命",
notes = "课堂演示数据:Gapminder classroom subset。",
table_theme = reg_table_theme(
chinese_font = "Microsoft YaHei",
english_font = "Times New Roman",
font_size = 10,
note_size = 9
),
diagnostic = TRUE,
diagnostic_file = "output/课堂演示_诊断图.png"
)