如何用R生成符合APA格式的线性与调节回归系数表
解决R中生成APA格式回归系数表并导出Word的问题
问题说明
- 已完成1个简单线性回归、2个调节回归分析,需要生成符合APA格式的系数表,要求包含estimate(非标准化系数b)、SE、t值、p值、95%CI、R²、F统计量等核心指标,且能直接导出至Word文档。
- 当前遇到的问题:
- 使用
apaTables的apa.reg.table生成的表格指标不全,置信区间与R原生输出不符,缺少SE、t值、p值; - 尝试
apa.save函数时提示未识别; - 使用
rempsyc的nice_table函数时提示未识别。
- 使用
解决方案
方案1:优化apaTables包的使用
apaTables的apa.reg.table支持通过参数配置显示更多APA要求的指标,且导出Word的正确方式是直接在函数内指定filename,无需额外调用apa.save:
library(apaTables) # 简单线性回归表格(包含全部APA要求指标) apa.reg.table(DF1, table.number = 1, show.conf.interval = TRUE, # 显示95%CI show.se = TRUE, # 显示标准误SE show.t = TRUE, # 显示t值 show.p = TRUE, # 显示p值 show.std = TRUE, # 可选:显示标准化系数β filename = "table1.doc") # 第一个调节回归表格 apa.reg.table(DF2, table.number = 2, show.conf.interval = TRUE, show.se = TRUE, show.t = TRUE, show.p = TRUE, filename = "table2.doc") # 第二个调节回归表格 apa.reg.table(DF3, table.number = 3, show.conf.interval = TRUE, show.se = TRUE, show.t = TRUE, show.p = TRUE, filename = "table3.doc")
注:APA格式中通常用
b代表非标准化回归系数(即你要的estimate),如果需要标准化系数,添加show.std = TRUE参数即可。
方案2:使用rempsyc包的正确函数(nice_lm而非nice_table)
你之前误用了函数,rempsyc中专门处理回归分析的APA格式表格函数是nice_lm,而非nice_table:
# 安装并加载依赖包 install.packages(c("rempsyc", "flextable", "broom", "effectsize")) library(rempsyc) library(flextable) # 生成简单线性回归的APA表格 table1 <- nice_lm(DF1, title = c("Table 1", "线性回归:TUTscore对UEBscore的预测作用"), note = c("数据来源于本研究", "* p < .05, ** p < .01, *** p < .001")) # 导出至Word save_as_docx(table1, path = "table1.docx") # 第一个调节回归表格 table2 <- nice_lm(DF2, title = c("Table 2", "调节回归:social_context对TUTscore与UEBscore关系的调节作用"), note = c("数据来源于本研究", "* p < .05, ** p < .01, *** p < .001")) save_as_docx(table2, path = "table2.docx") # 第二个调节回归表格 table3 <- nice_lm(DF3, title = c("Table 3", "调节回归:emotionality对TUTscore与UEBscore关系的调节作用"), note = c("数据来源于本研究", "* p < .05, ** p < .01, *** p < .001")) save_as_docx(table3, path = "table3.docx")
注:
nice_lm会自动输出非标准化系数b(estimate)、SE、t值、p值、95%CI,以及模型的R²、调整R²、F统计量,完全符合APA格式规范。
方案3:broom+flextable手动定制(灵活性最高)
如果需要完全自定义表格内容(比如调整列顺序、添加个性化注释),可以用broom提取回归结果,再用flextable格式化并导出:
install.packages(c("broom", "flextable", "dplyr")) library(broom) library(flextable) library(dplyr) # 定义函数:提取回归结果并整理成APA格式 extract_reg_results <- function(model, model_name) { # 提取系数表(包含estimate、SE、t、p、CI) coeffs <- tidy(model, conf.int = TRUE) %>% select(term, estimate, std.error, statistic, p.value, conf.low, conf.high) %>% rename(b = estimate, SE = std.error, t = statistic, p = p.value, `95% CI下限` = conf.low, `95% CI上限` = conf.high) # 提取模型拟合指标(R²、F统计量等) fit <- glance(model) %>% select(r.squared, adj.r.squared, statistic, p.value, df.residual) %>% rename(R² = r.squared, `调整R²` = adj.r.squared, F = statistic, `F-p值` = p.value) # 返回整理后的结果列表 list(coeffs = coeffs, fit = fit, name = model_name) } # 处理三个回归模型 res1 <- extract_reg_results(DF1, "模型1:简单线性回归") res2 <- extract_reg_results(DF2, "模型2:social_context调节回归") res3 <- extract_reg_results(DF3, "模型3:emotionality调节回归") # 定义函数:格式化结果为flextable并添加标题、注释 format_reg_table <- function(res) { ft <- flextable(res$coeffs) %>% set_caption(caption = res$name, align_with_table = TRUE) %>% # 添加模型拟合指标行 add_footer_row(values = paste0("R² = ", round(res$fit$R², 3), ", 调整R² = ", round(res$fit$`调整R²`, 3), ", F(", res$fit$df.residual, ",", nrow(finalised_dataset)-res$fit$df.residual-1, ") = ", round(res$fit$F, 2), ", p = ", round(res$fit$`F-p值`, 3)), colwidths = ncol(res$coeffs)) %>% # 添加显著性注释行 add_footer_row(values = "* p < .05, ** p < .01, *** p < .001", colwidths = ncol(res$coeffs)) %>% autofit() return(ft) } # 生成表格并导出至Word ft1 <- format_reg_table(res1) save_as_docx(ft1, path = "table1_custom.docx") ft2 <- format_reg_table(res2) save_as_docx(ft2, path = "table2_custom.docx") ft3 <- format_reg_table(res3) save_as_docx(ft3, path = "table3_custom.docx")
内容的提问来源于stack exchange,提问作者pillypum
相关产品推荐
相关产品推荐

