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

如何在R中为McNemar显著性检验批量生成所需2x2矩阵

实现方案

你完全可以通过批量遍历的方式自动生成所有选项对应的2×2检验矩阵,不用手动逐个构造,核心逻辑是对每个选项,把两道题的作答转换为「选了该选项/没选该选项」的二分类值,再直接生成配对列联表即可,和你手动构造的矩阵逻辑完全一致。

以下是R语言的可直接复用的实现代码:

# --------------------------
# 第一步:替换为你的真实数据
# --------------------------
# 示例模拟数据,你可以替换成自己调研数据里的a2、a3列
set.seed(123)
a2 <- sample(c("a","b","c","d","e"), size = 200, replace = T)
a3 <- sample(c("a","b","c","d","e"), size = 200, replace = T)

# 提取所有需要检验的选项
opts <- unique(c(a2, a3)) |> sort()

# --------------------------
# 第二步:批量生成矩阵+检验
# --------------------------
# 用列表存所有选项的结果,方便后续调用
mcnemar_res <- list()

for (opt in opts) {
  # 对当前选项生成二分类标记:选了记为1,没选记为0
  a2_bin <- ifelse(a2 == opt, 1, 0)
  a3_bin <- ifelse(a3 == opt, 1, 0)
  # 生成2×2列联表,行对应a2的结果,列对应a3的结果
  mat <- table(a2_bin, a3_bin)
  # 校验矩阵合法性,避免极端情况下矩阵维度不足
  if (nrow(mat) == 2 & ncol(mat) == 2) {
    mcnemar_res[[opt]][["matrix"]] <- mat
    # 可按需设置mcnemar.test的correct参数控制连续性校正
    mcnemar_res[[opt]][["test"]] <- mcnemar.test(mat)
  } else {
    mcnemar_res[[opt]] <- "样本分布极端,无法构建2×2矩阵"
  }
}

结果调用方式

  • 获取e选项的2×2矩阵:mcnemar_res[["e"]][["matrix"]]
  • 查看e选项的McNemar检验结果:mcnemar_res[["e"]][["test"]]

如果不想用for循环,也可以换成lapply写法,运行逻辑和输出结果完全一致:

mcnemar_res <- lapply(opts, function(opt) {
  a2_bin <- ifelse(a2 == opt, 1, 0)
  a3_bin <- ifelse(a3 == opt, 1, 0)
  mat <- table(a2_bin, a3_bin)
  if(nrow(mat)==2 & ncol(mat)==2) {
    return(list(matrix = mat, test = mcnemar.test(mat)))
  } else {
    return("样本分布极端,无法构建2×2矩阵")
  }
}) |> setNames(opts)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:06:03