Как вычислить матрицу вероятностей на основе двоичной матрицы? - PullRequest
0 голосов
/ 18 апреля 2019

enter image description here Моя попытка:

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 не является симметрией.

Вопрос. Как правильно указать знаменатель?

Edit. После ответа Стефана Лорана.

Я думаю, что мы должны иметь другое значение: k_j_out, k_i_in, k_i_out, k_j_in. enter image description here

Наконец, мне нужно получить весовую матрицу, Вт.

I <- matrix(0, n, n); diag(I) <- 1
W <- A %*% (I - P) - t(A) %*% (I - P)

И я думаю, что эта матрица должна быть симметричной.

1 Ответ

1 голос
/ 18 апреля 2019

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
...