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

如何基于双模调查数据构建统计相同回答次数的单模邻接矩阵

构建基于观点回答的受访者单模邻接矩阵(统计相同回答次数)

你遇到的问题是从人物-观点的二部矩阵生成人物间的单模邻接矩阵,统计每对受访者在所有观点上回答相同的次数(包括0和1的匹配),而igraph的bipartite.projection只统计共同选择1的情况,确实不适用。下面提供两种解决方案,优先推荐高效的向量/矩阵运算方法,再补充手动循环的实现:

方法1:高效的矩阵运算(推荐)

这种方法利用R的向量化运算,比循环快得多,适合处理大规模数据。核心思路是分别统计两人同时选1的次数和两人同时选0的次数,再将两者相加得到总相同回答次数:

# 你的原始数据矩阵
affiliation_matrix <- matrix(c(0,1,0, 1,0,0, 0,1,1), nrow=3, ncol=3, byrow=TRUE)
dimnames(affiliation_matrix) <- list(c("Alyssa", "Brad", "Carla"), c("opinion1", "opinion2", "opinion3"))

# 计算两人同时选1的匹配次数
match_1 <- t(affiliation_matrix) %*% affiliation_matrix
# 计算两人同时选0的匹配次数
match_0 <- t(1 - affiliation_matrix) %*% (1 - affiliation_matrix)
# 总相同回答次数
adj_matrix <- match_1 + match_0

# 如果你需要和示例中的对角线一致(将对角线设为1)
diag(adj_matrix) <- 1

# 查看结果
adj_matrix

运行后得到的结果完全匹配你想要的ideal_matrix:

Alyssa Brad Carla
Alyssa      1    1     2
Brad        1    1     0
Carla       2    0     2

方法2:手动循环实现

如果你更偏好直观的循环逻辑,也可以用双层循环遍历每对受访者,统计他们回答相同的观点数量:

# 初始化空矩阵
n <- nrow(affiliation_matrix)
adj_matrix <- matrix(0, nrow = n, ncol = n)
respondents <- rownames(affiliation_matrix)
dimnames(adj_matrix) <- list(respondents, respondents)

# 双层循环计算每对的相同回答次数
for (i in 1:n) {
  for (j in 1:n) {
    adj_matrix[i,j] <- sum(affiliation_matrix[i,] == affiliation_matrix[j,])
  }
}

# 调整对角线为1(和示例一致)
diag(adj_matrix) <- 1

# 查看结果
adj_matrix

补充说明

  • 如果你不需要修改对角线,去掉diag(adj_matrix) <- 1即可,此时对角线的值是每个受访者自己与自己的相同回答次数(也就是观点的总数)。
  • 对于大规模数据集,方法1的运算效率远高于手动循环,建议优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:57:39