2017-04-22 63 views
1

我想计算结果的后验概率,但找不到合适的函数。如何计算贝叶斯结果

这是我的代码,我学会了从here

prior = c(D = .0001, not.D = 1 - .0001) 
like.D = c(pos=.99, neg=.01) 
like.not.D = c(pos=.01, neg=.99) 
likelihood = rbind(D = like.D, not.D = like.not.D) 
data="pos" 
bayes(prior, likelihood, data) 

但我无法找到“贝叶斯”的功能,所以我希望有人来帮助我。

回答

0

函数的链接(在您提供的链接处)似乎已经死亡,因此您需要联系页面作者。在这种情况下,计算起来并不困难,因为后验=可能*之前。所以只需通过乘以表来计算。 (?病)(?测试)给出POS可能性似乎所需的计算是d的概率

> joint = likelihood * prior 
> # marginalise to calculate posterior (need to normalise) 
> cs = colSums(joint) 
> joint[,"pos"]/cs["pos"] 
      D  not.D 
0.009803922 0.990196078 

作为替代方案,你可以镜框为贝叶斯网络(疾病 - >试验)使用gRain

> library(gRain) 
> d = cptable(~disease, values = prior, levels=names(prior)) 
> tt = cptable(~test+disease, values=t(likelihood), levels=colnames(likelihood)) 
> net = grain(compileCPT(list(d, tt))) 
> net2 = setEvi(net, evidence=list(test="pos")) 
> querygrain(net2) 
$disease 
disease 
      D  not.D 
0.009803922 0.990196078