R 如何基于二进制矩阵计算概率矩阵?
我的尝试是:R 如何基于二进制矩阵计算概率矩阵?,r,matrix,vector,igraph,R,Matrix,Vector,Igraph,我的尝试是: library(igraph) set.seed(41) n<-10 A <- sample.int (2, n*n, TRUE)-1L; dim(A) <- c(n,n); m <- sum(A) g <- graph_from_adjacency_matrix(A) k_in <- degree(g, v = V(g), mode = "in", loops = TRUE, normalized = FALSE)#; k_in k
library(igraph)
set.seed(41)
n<-10
A <- sample.int (2, n*n, TRUE)-1L; dim(A) <- c(n,n);
m <- sum(A)
g <- graph_from_adjacency_matrix(A)
k_in <- degree(g, v = V(g), mode = "in", loops = TRUE, normalized = FALSE)#; k_in
k_out <- degree(g, v = V(g), mode = "out", loops = TRUE, normalized = FALSE)#; k_out
p <- (k_in %*% t(k_out) / (2*m))/(k_in %*% t(k_out) / (2*m) + k_in %*% t(k_out) / (2*m))
round(p, 3)
我认为这个矩阵应该是对称的。这个
2m
是无用的,因为它同时出现在分子和分母上。你可以做:
p <- (k_in %*% t(k_out))/(k_out %*% t(k_in) + k_in %*% t(k_out))
stackoverflow不支持p mathjax。请编辑您的问题,使其更详细readable@Cettt,我添加了图片。谢谢你的回答,但我认为我们应该有四个不同的值:k_j_out,k_I_in,k_I_out,k_j_in。@Nick你可以通过计算
k_out[j]*k_in[I]/(k_out[j]*k_in[I]+k_out[I]*k_in[j])
来检验这一点。请参阅我的编辑。
p <- (k_in %*% t(k_out))/(k_out %*% t(k_in) + k_in %*% t(k_out))
M <- k_in %*% t(k_out)
M / (M + t(M))
i <- 2; j <- 3
k_out[j] * k_in[i] / (k_out[j] * k_in[i] + k_out[i] * k_in[j])
# 0.5384615
p[i,j]
# 0.5384615