贝叶斯网络与R语言
贝叶斯网络与R语言
基本语句
1.1网络的创建
#加载扩展包和bnlearn包自带数据集marks
该数据集包含了我们研究的课程成绩记录:其中所包含的数据集包括了包括了88名学生在五门课程中的考试成绩记录:具体来说涉及的具体学科领域包括力学(mechanics)向量(vectors)代数(algebra)分析(analysis)以及统计学(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) creates a matrix with specified columns and rows, assigning values based on the provided parameters.
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"
