2017-04-22 2 views
1

Je veux calculer les probabilités postérieures de mon résultat, mais je ne trouve pas de fonction appropriée.Comment calculer le résultat de Bayes

Ceci est mon code, je l'ai appris de 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) 

Mais je ne peux pas trouver la fonction de « Bayes », donc je veux que quelqu'un me aider.

Répondre

0

Le lien pour la fonction (sur le lien que vous fournissez) semble être mort, vous devrez donc contacter l'auteur de la page. Dans ce cas, il n'est pas difficile à calculer, car postérieur = probabilité * avant. Il suffit donc de calculer en multipliant les tables. (? Maladie) (? Test) Semble le calcul que vous voulez est la probabilité de D donnée de vraisemblance pos

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

Comme alternative, vous pouvez l'encadrer comme un réseau bayésien (maladie -> test) en utilisant le package 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