【问题标题】:How to compute a probability matrix based on a binary matrix?如何基于二进制矩阵计算概率矩阵?
【发布时间】:2019-09-08 11:07:10
【问题描述】:

我的尝试是:

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éphane Laurent 的回答之后。

我认为我们应该有不同的值: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)

而且我认为这个矩阵应该是对称的。

【问题讨论】:

  • mathjax 在 stackoverflow 上不受支持。请编辑您的问题,使其更具可读性
  • @Cettt,我已经添加了图片。

标签: r matrix vector igraph


【解决方案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

【讨论】:

  • 感谢您的回答,但我认为我们应该有四个不同的值: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])来检查这个作品。查看我的编辑。
猜你喜欢
  • 1970-01-01
  • 2018-01-21
  • 2012-05-29
  • 2018-05-05
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 2019-11-06
  • 2021-06-10
相关资源
最近更新 更多