求助:在R中计算双条目求和变量的Spearman-Brown系数可行代码
计算两个条目求和变量的Spearman-Brown系数实现方法
核心原理
Spearman-Brown系数用于评估测验长度调整后的信度,针对两个条目(var1和var2)的场景,计算公式非常直接:
SB = (2 * r) / (1 + r)
其中r是两个条目间的皮尔逊相关系数(计算前需剔除含缺失值的样本)。
手动实现步骤(R语言)
- 预处理数据:你的数据是
rowwise_df格式,先转成普通数据框,再删除含NA的行:
# 加载你的数据 df <- structure(list(var1 = c(5, 2, NA, 2, 3, 1, 6, 1, 4, 5, 5, 2, 2, 3, 1, 3, 2, NA, 5, 7, 5, 2, 2, 2, NA, 2, NA, 2, 2, 5, 2, 4, 2, 3, 5, 5, 2, 5, 5, 2, 4, NA, 6, 7, 7, 3), var2 = c(2, 1, NA, 2, 2, 1, 1, 1, 2, 2, 3, 1, 2, 2, 1, 2, 2, NA, 3, 2, 1, 2, 2, 1, NA, 1, NA, 1, 1, 2, 1, 1, 2, 2, 2, 4, 2, 3, 2, 2, 1, NA, 2, 2, 4, 1)), class = c("rowwise_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA, -46L), groups = structure(list(.rows = structure(list(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L), ptype = integer(0), class = c("vctrs_list_of", "vctrs_vctr", "list"))), row.names = c(NA, -46L), class = c("tbl_df", "tbl", "data.frame"))) # 转换为普通数据框并剔除缺失值 df_clean <- as.data.frame(df) |> na.omit()
- 计算相关系数r:
# 计算var1和var2的皮尔逊相关系数 r <- cor(df_clean$var1, df_clean$var2, method = "pearson")
- 计算Spearman-Brown系数:
# 代入公式计算 spearman_brown_coeff <- (2 * r) / (1 + r) # 输出结果 cat("Spearman-Brown系数:", spearman_brown_coeff, "\n")
使用psych包快速计算
如果偏好现成工具,可以用psych包的spearman.brown函数,直接传入相关系数即可:
# 安装并加载psych包(首次使用需安装) # install.packages("psych") library(psych) # 计算Spearman-Brown系数 sb_result <- spearman.brown(r, n = 2) # 查看结果 sb_result
注意事项
- 必须先剔除缺失值,否则相关系数计算会返回NA;
- 原始的
rowwise_df是按行分组的格式,转换为普通数据框后才能正常进行统计运算; - 这里的Spearman-Brown系数本质是将单条目信度校正为双条目求和后的信度结果。
内容的提问来源于stack exchange,提问作者Espejito
相关产品推荐
相关产品推荐

