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=high),我必须添加以下内容:
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。但是,庞大的网络是不可能的!