Может ли пакет bnlearn вычислить безусловные вероятности каждого узла? Например, в простом случае, если у нас есть три узла A, S ---> E:
library(bnlearn)
dag <- empty.graph(nodes = c("A", "S", "E"))
dag <- set.arc(dag, from = "A", to = "E")
dag <- set.arc(dag, from = "S", to = "E")
A.lv <- c("young", "adult", "old")
S.lv <- c("M", "F")
E.lv <- c("high", "uni")
A.prob <- array(c(0.30, 0.50, 0.20), dim = 3, dimnames = list(A = A.lv))
S.prob <- array(c(0.60, 0.40), dim = 2, dimnames = list(S = S.lv))
E.prob <- array(c(0.75, 0.25, 0.72, 0.28, 0.88, 0.12, 0.64,
0.36, 0.70, 0.30, 0.90, 0.10), dim = c(2, 3, 2), dimnames = list(E = E.lv, A = A.lv, S = S.lv))
cpt <- list(A = A.prob, S = S.prob, E = E.prob)
bn <- custom.fit(dag, cpt)
Все команды bnlearn (например, E.prob) показывают условные вероятности? Если я хочу вычислить P (E = высокий), я должен добавить следующее:
E=as.data.frame(E.prob)
A=as.data.frame(t(A.prob))
S=as.data.frame(t(S.prob))
R=c(E$young.M[1]*A$young*S$M, E$adult.M[1]*A$adult*S$M,
E$old.M[1]*A$old*S$M, E$young.F[1]*A$young*S$F,
E$adult.F[1]*A$adult*S$F, E$old.F[1]*A$old*S$F)
print(sum(R))
P (E = высокий) = 0,745. Однако это невозможно для огромной сети!