贝叶斯网络与R语言
基本语句
1.1网络的创建
#加载扩展包和bnlearn包自带数据集marks
数据集marks,88 学生5门课的成绩,MECH (mechanics) ,VECT (vectors),ALG (algebra),ANL (analysis),STAT (statistics)。
library(bnlearn)
data(marks)
str(marks)
创建一个空网络,节点对应于marks 的变量。然后通过指派一个两列的矩阵来添加边。
①生成一个无向图:
ug<- empty.graph(names(marks))
arcs(ug,check.cycles = FALSE) = matrix(c("MECH", "VECT","MECH", "ALG", "VECT", "MECH","VECT", "ALG","ALG", "MECH","ALG", "VECT", "ALG", "ANL","ALG", "STAT","ANL", "ALG","ANL","STAT", "STAT", "ALG","STAT", "ANL"),ncol = 2, byrow = TRUE,dimnames = list(c(),c("from", "to")))
#输出网络
plot(ug)
②生成一个有向图:
dg <- empty.graph(names(marks))
arcs(dg) = matrix(c("VECT","MECH", "ALG", "MECH", "ALG","VECT", "ANL", "ALG", "STAT","ALG", "STAT", "ANL"), ncol = 2, byrow = TRUE,dimnames = list(c(), c("from", "to")))
plot(dg)
1.2网络的修改
手工修改一个已经存在的网络,利用加边(set.arc)、去边(drop.arc)、颠倒(rev.arc)这几个操作,也可以得到一个需要的网络。
dg2 <- empty.graph(nodes(dg))
plot(dg2)
dg2 <- set.arc(dg2, "VECT", "MECH")
plot(dg2)
dg2 <- set.arc(dg2, "ALG", "MECH")
dg2 <- set.arc(dg2, "ALG", "VECT")
dg2 <- set.arc(dg2, "ANL", "ALG")
dg2 <- set.arc(dg2, "STAT", "ALG")
dg2 <- set.arc(dg2, "STAT", "ANL")
plot(dg2)
1.3网络的结构
我们全面希望了解网络的结构,可以使用存储在每个节点的信息。
节点的拓扑顺序
> node.ordering(dg)
[1] "STAT" "ANL" "ALG" "VECT" "MECH"
(2)节点的邻居(nbr)和the Markov blanket of the node (mb)
Markov blanke是指对一个节点A,它的所有父节点,子节点以及和A 有相同子节点的其它节点 。
> nbr(dg, "STAT")
[1] "ALG""ANL"
> mb(dg, "STAT")
[1] "ALG""ANL"
> "ANL" %in%mb(dg, "STAT")
[1] TRUE
> "STAT" %in%mb(dg, "ANL")
[1] TRUE
(3)某个给定节点的子代(child)和父代(parents)和子代的其它父代(o.par)
> children(dg, "STAT")
[1] "ALG" "ANL"
> parents(dg, "STAT")
character(0)
> parents(dg, "MECH")
[1] "VECT" "ALG"