Skip to content

4b8wsfdk7y-cloud/reg2paper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

reg2paper:社科论文回归表格与诊断图小工具

R License: MIT

Status: portfolio-quality script toolkit. It is intentionally lightweight and is not yet an installable CRAN package.

reg2paper 是一个面向政治学、社会学等社科本科生的 R 语言小工具。它的目标很简单:把你已经做好的 lm()glm() 回归模型,一键整理成接近社科期刊规范的回归表格,并同时输出模型诊断图。

你不需要手动复制系数、标准误、星号、R² 和样本量,也不需要自己从零画诊断图。这个工具把这些重复工作交给成熟 R 包完成,包括 modelsummaryflextablesandwichperformanceseepatchwork

1. 这个工具适合谁?

适合以下场景:

  • 你正在写政治学、社会学、公共管理、传播学等社科论文;
  • 你已经学会用 lm() 做线性回归,或用 glm() 做 logistic 回归;
  • 你希望把多个模型整理成一个 Word 表格;
  • 你希望表格里自动有稳健标准误、显著性星号、N、R² 等信息;
  • 你希望检查模型残差、正态性、同方差性和异常值。

如果你刚开始学 R,只要先理解这一句:

lm(因变量 ~ 自变量1 + 自变量2, data = 数据集)

在 R 公式里,~ 左边是因变量,右边是自变量。例如:

lm(mpg ~ wt + hp, data = mtcars)

意思是:用 wthp 解释 mpg

2. 第一次使用:安装依赖包

首次使用前,请在 RStudio 控制台运行:

install.packages(c(
  "modelsummary", "performance", "see", "patchwork",
  "sandwich", "lmtest", "flextable", "ggplot2", "purrr"
))

Word (.docx) 输出不需要额外工具;HTML 输出由 flextable 调用 Pandoc,使用前请安装 Pandoc 并确认 pandoc --version 可在终端运行。

如果安装过程中提示选择 CRAN 镜像,选择 China 或 Cloud 都可以。

3. 项目结构

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

4. 最快上手:复制运行

请先在 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 = "汽车油耗的影响因素"
)

15. 可复现性与限制

  • 所有示例数据均来自公开教学数据,并在 data/README.md 中列出来源。
  • robust_se = TRUE 当前使用 HC1 异方差稳健标准误,不替代 clustered、HAC 或 survey-design inference。
  • ajpsasr 是便于课堂使用的 inspired presets,不是对期刊排版规范的逐项复刻。
  • 诊断图用于发现模型问题,不自动证明模型设定正确。
  • 输出字体是否生效取决于运行机器是否安装相应字体。

16. Roadmap

  • 转换为标准 R package 结构并增加 testthat
  • 增加 clustered standard errors 与 fixest 模型支持。
  • 增加 LaTeX/HTML 三线表输出。
  • 为不同操作系统增加自动化 smoke tests。

License

MIT License。课堂数据仍受各原始数据源条款约束。

运行后会在 output/ 文件夹里生成:

  • my_regression.docx:Word 回归表格;
  • diagnostic_plots.png:模型诊断图。

5. 如何填写因变量和自变量?

回归模型写在 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_capitapopulation 是自变量;
  • mydata 是数据集名称;
  • m1m2 是模型名称,可以自己改。

然后把模型放进 reg_report()

reg_report(
  models = list(m1, m2),
  output_file = "output/table.docx"
)

6. 三线表字体、字号如何自定义?

字体和字号集中写在 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"

7. 主函数参数说明

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 lmglm 模型组成的 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/

8. 三种期刊风格

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

9. 自定义变量名

如果原始数据中的变量名是英文,论文表格里可以显示成中文:

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
)

注意:左边必须是数据里的真实变量名,右边是你希望表格中显示的名字。

10. 中文变量名怎么写?

如果数据列名本身就是中文,写公式时要用反引号:

m1 <- lm(`政治信任` ~ `受教育年限` + `收入`, data = mydata)

反引号不是单引号。它通常在键盘左上角,和 ~ 在同一个键上。

11. 课堂数据集

项目中已经放入 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

12. 运行示例脚本

source("examples/demo_chinese.R")
source("examples/demo_social_data.R")

demo.R 还演示 HTML 导出,因此需要 Pandoc;其 Word 表和诊断图部分不依赖 Pandoc。

运行后请查看 output/ 文件夹。

13. 常见问题

Q1:为什么提示找不到 R/reg_report.R

说明你的工作目录没有设到 reg2paper 文件夹。请在 RStudio 中点击:

Session -> Set Working Directory -> Choose Directory...

然后选择 reg2paper 文件夹。

Q2:为什么提示缺少某个包?

说明还没安装依赖包。复制第 2 节的 install.packages() 代码运行即可。

Q3:为什么 Word 里的中文字体不是我设置的?

可能是电脑没有安装该字体。Windows 可用 "宋体""Microsoft YaHei";macOS 可用 "Songti SC""PingFang SC"

Q4:可以用于 logistic 回归吗?

可以。例如:

m_logit <- glm(am ~ wt + hp, data = mtcars, family = binomial())
reg_report(list(m_logit), output_file = "output/logit.docx")

但 logistic 回归不一定有普通 OLS 的 R² 和 F 统计量,表格只会显示模型可用的统计量。

Q5:为什么要看诊断图?

诊断图不是论文最终一定要放进去的图,而是帮助你检查模型是否有明显问题。比如:

  • 残差是否有系统性模式;
  • 残差是否大致接近正态;
  • 方差是否大致稳定;
  • 是否有特别极端的异常点。

14. 一键复制完整代码

下面这段代码适合课堂演示或学生第一次使用。复制到 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"
)

About

R toolkit for publication-oriented regression tables and model diagnostics

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages