我通过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',但它将错误作为未使用的参数返回。我已经查看了与此有些相关的其他问题,并没有看到任何可以帮助解决这个问题。我觉得我错过了一个可以解决这个问题的论点,或者是否有不同的功能?
感谢任何帮助!
答案 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")