在做毕业设计的时候做的一个贝叶斯网络,下面是程序代码,有问题可以一起交流
library(bnlearn)
survey <- read.csv("C:\\Users\\Administrator.DESKTOP-DD2HFLO\\Desktop\\survey.csv")
str(survey)
#把整型变量转换为数值型变量
survey2=as.data.frame(matrix(as.numeric(as.matrix(survey)),nrow=33,ncol=10))
colnames(survey2)=c("SY", "SJ", "KF", "LT", "DD", "T", "W", "A",
"J", "N")
str(survey2)
#生成贝叶斯网络
dg <- empty.graph(nodes = c("X","N","SY","SJ","KF","LT","DD","T","W","A","J"))
dg <- set.arc(dg, from = "X", to ="T")
dg <- set.arc(dg, from = "X", to ="W")
dg <- set.arc(dg, from = "X", to ="A")
dg <- set.arc(dg, from = "X", to ="J")
dg <- set.arc(dg, from = "N", to ="T")
dg <- set.arc(dg, from = "N", to ="W")
dg <- set.arc(dg, from = "N", to ="A")
dg <- set.arc(dg, from = "N", to ="J")
dg <- set.arc(dg, from = "SY", to ="T")
dg <- set.arc(dg, from = "SY", to ="W")
dg <- set.arc(dg, from = "SY", to ="A")
dg <- set.arc(dg, from = "SY", to ="J")
dg <- set.arc(dg, from = "SJ", to ="T")
dg <- set.arc(dg, from = "SJ", to ="W")
dg <- set.arc(dg, from = "SJ", to ="A")
dg <- set.arc(dg, from = "SJ", to ="J")
dg <- set.arc(dg, from = "KF", to ="T")
dg <- set.arc(dg, from = "KF", to ="W")
dg <- set.arc(dg, from = "KF", to ="A")
dg <- set.arc(dg, from = "KF", to ="J")
dg <- set.arc(dg, from = "LT", to ="T")
dg <- set.arc(dg, from = "LT", to ="W")
dg <- set.arc(dg, from = "LT", to ="A")
dg <- set.arc(dg, from = "LT", to ="J")
dg <- set.arc(dg, from = "DD", to ="T")
dg <- set.arc(dg, from = "DD", to ="W")
dg <- set.arc(dg, from = "DD", to ="A")
dg <- set.arc(dg, from = "DD", to ="J")
dg <- set.arc(dg, from = "T", to ="J")
dg <- set.arc(dg, from = "W", to ="J")
dg <- set.arc(dg, from = "A", to ="J")
dg
#绘制网络
library(Rgraphviz)
graphviz.plot(dg, layout = "fdp")
plot(dg, radius = 250, arrow = 30)
#结构学习
survey2.bn <- gs(survey2,undirected = FALSE)
survey2.bn
#结构学习调试过程
survey2.bn <- gs(survey2,debug = TRUE)
#结构学习得到网络的无向图
graphviz.plot(survey2.bn, layout = "fdp")
#对网络进行评分和修正
survey2.bn <- hc(survey2)
survey2.bn
graphviz.plot(survey2.bn, layout = "fdp")#调试后得到有向网络
#得分
score(survey2.bn, data = survey2, type = "bic-g") ####出错
#参数学习
survey2.bn <- gs(survey2, undirected = FALSE)
survey2.bn2 <- hc(survey2)
survey2.fit <- bn.fit(survey2.bn2, data = survey2)
survey2.fit <- bn.fit(survey2.bn, data = survey2)
#Error in bn.fit(survey2.bn, data = survey2) : the graph is only partially directed.
survey2.fit$A
#离散化
survey2.d <- discretize(survey2, method = "interval", breaks = 3)
survey2.dgs <- gs(survey2.d)
plot(survey2.dgs, radius = 200, arrow = 30)##无向图
survey2.dhc <- hc(survey2.d)
plot(survey2.dhc, radius = 160, arrow = 40)##gs算法与hc算法结果出现差异
all.equal(cpdag(survey2.dgs), cpdag(survey2.dhc))
#参数学习结果
survey2.fit2 <- bn.fit(survey2.dhc, data = survey2.d)
survey2.fit2$A