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)
概率矩阵p
的所有值均为0.5。
我认为p的分母有误,因为矩阵A不是对称的。
问题。如何正确指定分母?
编辑。在斯特凡·洛朗(StéphaneLaurent)回答之后。
我认为我们应该具有不同的值:k_j_out,k_i_in,k_i_out,k_j_in。
最后,我需要获得权重矩阵W。
I <- matrix(0, n, n); diag(I) <- 1
W <- A %*% (I - P) - t(A) %*% (I - P)
我认为这个矩阵应该对称。
答案 0 :(得分:1)
2m
是无用的,因为它同时出现在分子和分母上。您可以这样做:
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