基于多列多行数据的评分者theta与score相关性计算问题
解决方案
要实现每个Rater对应的score集合与theta集合的相关性计算,核心是先把宽格式的评分数据转换成长格式,让每个有效评分都对应唯一的theta值,再按Rater分组计算相关性。具体步骤如下:
1. 加载工具包
使用tidyverse套件(包含dplyr和tidyr)处理数据转换与分组计算:
library(tidyverse)
2. 转换数据格式
将分散在多列的Case评分转为长格式,同时保留对应的theta和Rater信息:
long_df <- df %>% pivot_longer( cols = starts_with("Case"), # 匹配所有以Case开头的列 names_to = "case_id", # 新列存储原Case列的名称 values_to = "score" # 新列存储评分值 ) %>% filter(!is.na(score)) # 过滤无有效评分的行
执行后,每个有效评分会单独成为一行,每行包含theta、Rater、case_id和score四个字段,解决了评分分散在多行多列的问题。
3. 分组计算相关性
按Rater分组,计算每组内theta与score的相关系数,同时保留有效样本量(避免样本量不足导致计算错误):
cor_result <- long_df %>% group_by(Rater) %>% summarize( valid_sample_count = n(), theta_score_correlation = ifelse( valid_sample_count >= 2, # 至少2个样本才能计算相关性 cor(theta, score, method = "pearson"), # 默认用Pearson相关 NA_real_ # 样本量不足时返回NA ) )
若需计算Spearman秩相关,只需将method = "pearson"改为method = "spearman"。
示例输出
运行后,cor_result会生成一个数据框,包含每个Rater的ID、有效评分数量,以及对应的theta与score相关系数。
内容的提问来源于stack exchange,提问作者D Theorist
相关产品推荐
相关产品推荐

