重复测量相关分析:按个体计算变量相关及单侧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
相关产品推荐
相关产品推荐

