1

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。但是,庞大的网络是不可能的!

4

0 回答 0