如何计算贝叶斯结果

时间:2017-04-22 15:02:41

标签: r bayesian

我想计算结果的后验概率,但我找不到合适的功能。

这是我的代码,我是从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)

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

1 个答案:

答案 0 :(得分: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