R中计算50个相邻测量点两两Cohen's D值的实现方法
实现方案
前置处理
首先确保依赖包加载正常,同时校准测量点因子的排序,避免因因子顺序错乱导致配对错误:
library(tidyverse) library(rstatix) DF <- DF %>% mutate( # 提取测量点后的数字,按数值顺序重排因子,确保顺序为Point.1到Point.50 point_num = as.numeric(str_remove(variable, "Point\\.")), variable = fct_reorder(variable, point_num) )
批量计算相邻测量点的Cohen's D
50个测量点共生成49组相邻配对,我们可以直接遍历配对列表完成计算,避免全量两两配对的冗余运算:
# 提取有序的测量点名称列表 all_points <- levels(DF$variable) # 生成相邻配对列表:c("Point.1","Point.2"), c("Point.2","Point.3") ... adj_pairs <- map2(head(all_points, -1), tail(all_points, -1), ~c(.x, .y)) # 遍历所有配对计算Cohen's D,合并为结果表 cohen_d_res <- map_dfr(seq_along(adj_pairs), function(i) { # 过滤仅保留当前配对的两个测量点数据 sub_df <- DF %>% filter(variable %in% adj_pairs[[i]]) # 计算Cohen's D并补充配对标识 sub_df %>% cohens_d(value ~ variable, var.equal = TRUE) %>% mutate( # 配对序号1-49 pair_id = i, # 配对名称 pair_name = paste0(adj_pairs[[i]][1], " vs ", adj_pairs[[i]][2]), # 若需要X轴对应1-50的测量点序号,可将D值匹配到后一个测量点,即Point1与Point2的D值对应X=2 x_axis = i + 1 ) })
注:50个测量点仅能生成49组相邻配对,如果你需要X轴为1-50的连续序列,可将X=1的D值设为NA,其余配对匹配到对应后一个测量点的序号即可。
绘制趋势图
以匹配到后一个测量点序号的X轴为例,折线图绘制代码如下:
ggplot(cohen_d_res, aes(x = x_axis, y = effsize)) + geom_line(linewidth = 1, color = "#2c3e50") + geom_point(size = 2, color = "#e74c3c") + scale_x_continuous(breaks = 1:50, name = "测量点序号") + labs(y = "Cohen's D值") + theme_bw()
内容的提问来源于stack exchange,提问作者CanyonView
相关产品推荐
相关产品推荐

