You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 18:06:02