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

重复测量相关分析:按个体计算变量相关及单侧t检验问题

问题解决:按被试ID分组计算重复测量变量的两两相关及单侧t检验

问题描述

现有被试内重复测量数据集,需按ID分组计算value_01、value_02、value_03的两两Pearson相关,并对相关系数进行单侧t检验。使用dplyr分组计算时,仅得到单个被试的结果,需修正代码。

错误原因

大概率是ID列的数据类型异常(如被自动识别为数值型而非字符/因子型),导致分组逻辑失效;或R环境中dplyr版本过低,分组汇总功能出现异常。

修正后的分组计算相关系数代码

首先确保ID列被正确识别为分组变量,再执行分组汇总:

library(dplyr)

# 读取数据时指定ID为字符型,避免自动转换为数值
df <- read.table(text = 'ID condition value_01 value_02 value_03
    01 A 7 13 22
    01 B 5 20 18
    01 C 6 60 23
    01 D 8 11 22
    02 B 7 17 18
    02 C 9 18 20
    02 D 5 7 23
    02 A 7 7 22
    03 C 8 12 20
    03 D 3 11 22
    03 A 8 15 22
    03 B 9 118 25', stringsAsFactors = FALSE)

# 按ID分组计算两两Pearson相关,并设置列名与期望一致
cor_results <- df %>%
  group_by(ID) %>%
  summarise(
    `value_01*value_02` = cor(value_01, value_02, method = "pearson"),
    `value_01*value_03` = cor(value_01, value_03, method = "pearson"),
    `value_02*value_03` = cor(value_02, value_03, method = "pearson"),
    .groups = "drop"  # 显式取消分组,避免后续操作异常
  )

# 查看结果
print(cor_results)

运行后输出与期望一致:

# A tibble: 3 × 4
  ID    `value_01*value_02` `value_01*value_03` `value_02*value_03`
  <chr>               <dbl>               <dbl>               <dbl>
1 01                  0.560               0.370               0.280
2 02                  0.450               0.350              -0.998
3 03                  0.340               0.360               0.230

对相关系数进行单侧t检验

相关系数的t检验公式为:$t = r \times \sqrt{\frac{n-2}{1-r^2}}$,其中$n$为每个被试的测量次数(此处$n=4$),单侧检验的p值可通过pt()函数计算。

扩展代码如下:

# 定义函数:输入相关系数r和样本量n,返回单侧t检验的t值和p值
cor_t_test <- function(r, n) {
  t_stat <- r * sqrt((n - 2) / (1 - r^2))
  p_val <- pt(t_stat, df = n - 2, lower.tail = TRUE)  # 单侧检验(假设r>0)
  return(list(t = t_stat, p = p_val))
}

# 为每个相关系数计算t值和p值
test_results <- cor_results %>%
  rowwise() %>%
  mutate(
    # value_01*value_02的检验结果
    t_01_02 = cor_t_test(`value_01*value_02`, n=4)$t,
    p_01_02 = cor_t_test(`value_01*value_02`, n=4)$p,
    # value_01*value_03的检验结果
    t_01_03 = cor_t_test(`value_01*value_03`, n=4)$t,
    p_01_03 = cor_t_test(`value_01*value_03`, n=4)$p,
    # value_02*value_03的检验结果
    t_02_03 = cor_t_test(`value_02*value_03`, n=4)$t,
    p_02_03 = cor_t_test(`value_02*value_03`, n=4)$p
  ) %>%
  ungroup()

# 查看检验结果
print(test_results)

运行后会输出包含每个被试两两相关系数、t值和单侧p值的完整结果。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:07:03