如何根据双模网络的匹配创建单模网络(邻接矩阵)
How to create a one-mode network (adjacency matrix) based on matches from two-mode network
我正在处理调查数据(行=受访者;列=意见)并尝试在受访者之间创建一个单模邻接矩阵,以衡量他们对每个二元网络给出相同答案的次数。具体来说,
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")
)
affiliation_matrix
在上面的 3x3 矩阵示例中,我想创建一个看起来像
的矩阵
ideal_matrix <- matrix(c(
1,1,2,
1,1,0,
2,0,2
)
,nrow=3
,ncol=3,
byrow=TRUE)
dimnames(ideal_matrix) <- list(
c("Alyssa", "Brad", "Carla"),
c("Alyssa", "Brad", "Carla")
)
所以在 Alyssa 和 Carla 之间,他们的联系得到了 2,因为他们对意见 1 和意见 2 的回答相同。同样,Alyssa 和 Brad 之间的联系得到 1,因为他们在意见 3 中都回答了 0。
我正在查找代码 get.adjacency() 和 bipartite.projection,但这似乎只处理人事网络,其中只有值 1 被视为匹配项。是否有 R 包可以让我这样做,或者我是否需要手动创建自己的循环(如果是这样......如何??)?
谢谢!!
可能有我不知道的现成解决方案。然而,在这种特殊的(二进制)情况下,可以重新编码矩阵,将每个矩阵乘以其转置,最后将它们相加:
affiliation_matrix_recoded <- affiliation_matrix
affiliation_matrix_recoded[] <- ifelse(affiliation_matrix_recoded > 0, 0, 1)
a <- tcrossprod(affiliation_matrix)
b <- tcrossprod(affiliation_matrix_recoded )
r <- a + b
diag(r) <- 0
r
结果:
Alyssa Brad Carla
Alyssa 0 1 2
Brad 1 0 0
Carla 2 0 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")
)
affiliation_matrix
在上面的 3x3 矩阵示例中,我想创建一个看起来像
的矩阵ideal_matrix <- matrix(c(
1,1,2,
1,1,0,
2,0,2
)
,nrow=3
,ncol=3,
byrow=TRUE)
dimnames(ideal_matrix) <- list(
c("Alyssa", "Brad", "Carla"),
c("Alyssa", "Brad", "Carla")
)
所以在 Alyssa 和 Carla 之间,他们的联系得到了 2,因为他们对意见 1 和意见 2 的回答相同。同样,Alyssa 和 Brad 之间的联系得到 1,因为他们在意见 3 中都回答了 0。
我正在查找代码 get.adjacency() 和 bipartite.projection,但这似乎只处理人事网络,其中只有值 1 被视为匹配项。是否有 R 包可以让我这样做,或者我是否需要手动创建自己的循环(如果是这样......如何??)?
谢谢!!
可能有我不知道的现成解决方案。然而,在这种特殊的(二进制)情况下,可以重新编码矩阵,将每个矩阵乘以其转置,最后将它们相加:
affiliation_matrix_recoded <- affiliation_matrix
affiliation_matrix_recoded[] <- ifelse(affiliation_matrix_recoded > 0, 0, 1)
a <- tcrossprod(affiliation_matrix)
b <- tcrossprod(affiliation_matrix_recoded )
r <- a + b
diag(r) <- 0
r
结果:
Alyssa Brad Carla
Alyssa 0 1 2
Brad 1 0 0
Carla 2 0 0