贝叶斯网络与R语言



贝叶斯网络与R语言

  1. 基本语句

1.1网络的创建

#加载扩展包和bnlearn包自带数据集marks

数据集marks88 学生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网络的结构

我们全面希望了解网络的结构,可以使用存储在每个节点的信息。

  1. 节点的拓扑顺序

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

你可能感兴趣的:(贝叶斯网络)