R:使用bn.fit在每个类别中获得条件概率作为贝叶斯网络的输出

时间:2016-11-07 17:28:57

标签: r bayesian

我通过bnlearn包和bn.fit函数生成了一个贝叶斯网络,该函数有一个'eyecolor'变量有6个预测变量。我试图获得每个样本的每个可能的眼睛颜色类别(其中有3个)的概率。

dag_iris<-empty.graph(nodes=c("rs122","rs128","rs129","rs139","rs180","rs168","eyecolor"))
dag_iris<-set.arc(dag_iris,from="eyecolor", to="rs168")
dag_iris<-set.arc(dag_iris,from="eyecolor", to="rs128")
dag_iris<-set.arc(dag_iris,from="eyecolor", to="rs122")
dag_iris<-set.arc(dag_iris,from="eyecolor", to="rs129")
dag_iris<-set.arc(dag_iris,from="eyecolor", to="rs139")
dag_iris<-set.arc(dag_iris,from="eyecolor", to="rs180")


bn.mle<-bn.fit(dag_iris,data=iris.geno[,2:8],method="mle")
bn.grain<-as.grain(bn.mle)
predict.mle<-predict(bn.grain,"eyecolor",newdata=iris_geno[,2:7],predictors =     
c("rs129","rs180","rs128","rs168","rs139","rs122"),method="bayes-lw")

此输出为每个样本提供可能性最高的类别(“蓝色”,“棕色”或“整数”),但我希望每个类别中的数值概率值(蓝色,棕色和整数) 。我用Google搜索并看到在bn.fit实用程序的预测函数中使用'prob',但它将错误作为未使用的参数返回。我已经查看了与此有些相关的其他问题,并没有看到任何可以帮助解决这个问题。我觉得我错过了一个可以解决这个问题的论点,或者是否有不同的功能?

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

通过将bnlearn网转换为gRain网,我发现只需添加type="distribution"属性就可以完全满足我的要求:

predict.mle <- predict(bn.grain, c("eyecolor"), 
                       predictors=c("rs129","rs180","rs168","rs128","rs139","rs122"), 
                       newdata=iris_test[,2:7] ,
                       type="distribution")