2017-04-22 4 views
1

Ich möchte die hinteren Wahrscheinlichkeiten meines Ergebnisses berechnen, aber ich kann keine passende Funktion finden.Wie berechnet man das Bayes-Ergebnis

Dies ist mein Code, ich lernte es von 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) 

Aber ich kann nicht Funktion der „Bayes“ finden, so dass ich will jemanden, mir zu helfen.

Antwort

0

Der Link für die Funktion (an dem von Ihnen angegebenen Link) scheint verstorben zu sein, so dass Sie den Autor der Seite kontaktieren müssen. In diesem Fall ist es nicht schwierig zu berechnen, wie posterior = Likelihood * vorher. Berechnen Sie einfach, indem Sie die Tabellen multiplizieren. (? Krankheit) (? Test) scheint die Berechnung, die Sie wollen, ist die Wahrscheinlichkeit von D gegeben po Wahrscheinlichkeit

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

Als Alternative könnte man es als ein Bayes-Netzwerk (Krankheit -> Test) Rahmen mit dem gRain Paket

> 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 
Verwandte Themen