制作APA格式相关表格:从矩阵提取特定相关并添加显著性星号
制作带显著性星号的APA格式相关表格(R实现)
我来分享一个完整的R实现流程,完美匹配你提到的用Hmisc计算相关、MOTE处理格式,最后提取特定变量生成表格的需求:
1. 先加载需要的工具包
Hmisc用来计算带p值的相关矩阵,MOTE帮我们处理系数的APA格式,要是最后想导出规范的表格,flextable或者apaTables可以锦上添花:
# 加载核心包 library(Hmisc) library(MOTE) # 可选:用于导出APA格式表格的包 # library(flextable) # library(apaTables)
2. 用Hmisc生成相关系数和p值矩阵
Hmisc的rcorr函数比基础的cor好用多了,能一次性输出相关系数矩阵和对应的p值矩阵,拿mtcars数据集举个例子:
# 用mtcars作为示例数据(你换成自己的数据集就行) data(mtcars) # 计算所有变量的相关系数与p值 cor_results <- rcorr(as.matrix(mtcars)) cor_matrix <- cor_results$r # 提取相关系数矩阵 p_matrix <- cor_results$P # 提取p值矩阵
3. 把系数转成APA风格+添加显著性星号
这里我们写个小函数,用MOTE的apa.num去掉相关系数的前导零、保留两位小数,再根据p值给系数加星号(***p<0.001, **p<0.01, *p<0.05):
# 定义格式化函数:处理系数+加星号 format_cor_with_stars <- function(cor_val, p_val) { # MOTE的apa.num处理APA格式的数字,去掉前导零 formatted_cor <- apa.num(cor_val, decimals = 2, leading.zero = FALSE) # 根据p值匹配星号 stars <- dplyr::case_when( p_val < 0.001 ~ "***", p_val < 0.01 ~ "**", p_val < 0.05 ~ "*", TRUE ~ "" ) # 把系数和星号拼起来 paste0(formatted_cor, stars) } # 把函数应用到整个矩阵 formatted_cor_matrix <- mapply(format_cor_with_stars, cor_matrix, p_matrix) # 转成矩阵格式,保留原来的变量名 formatted_cor_matrix <- matrix(formatted_cor_matrix, nrow = nrow(cor_matrix), dimnames = dimnames(cor_matrix))
4. 提取你感兴趣的变量构建子矩阵
比如你只想保留mpg、disp、hp这三个变量的相关,直接按变量名提取就行:
# 定义你要保留的变量列表 target_vars <- c("mpg", "disp", "hp") # 提取目标子矩阵 target_cor_matrix <- formatted_cor_matrix[target_vars, target_vars] # 看看结果 print(target_cor_matrix)
5. 导出成规范的APA格式表格(可选)
要是需要把结果导出成Word里能用的APA表格,用flextable就能轻松搞定:
# 把矩阵转成数据框,方便制表 cor_df <- as.data.frame(target_cor_matrix) # 把行名变成第一列(变量名) cor_df <- cbind(Variables = rownames(cor_df), cor_df) # 生成APA风格的表格 ft <- flextable(cor_df) %>% set_header_labels(Variables = "") %>% # 去掉第一列的表头 theme_apa() %>% # 应用APA主题样式 align(align = "center", part = "all") # 所有内容居中对齐 # 预览表格 ft # 导出为Word文档 # save_as_docx(ft, path = "APA相关表格.docx")
内容的提问来源于stack exchange,提问作者Benjamin Telkamp
相关产品推荐
相关产品推荐

