| BB | Bb | bb | |
| AA | |||
| Aa | |||
| aa |
Total n =
pAB= pAb=
paB= pab=
phi=
function estimateit(n22,n21,n20,n12,n11,n10,n02,n01,n00){
//EM Algorithm
var p11, p10, p01, p00, phi;
var newp11, newp10, newp01, newp00;
p11=0; p10=0; p01=0; p00=0;
newp11=0.5; newp10=0.5; newp01=0.5; newp00=0.5;
while (Math.abs(p11-newp11)+Math.abs(p10-newp10)+Math.abs(p01-newp01)+Math.abs(p00-newp00)>1.e-8){
p11=newp11; p10=newp10; p01=newp01; p00=newp00;
//E-step
phi=p11*p00/(p11*p00+p10*p01);
//M-step
newp11=(2*n22+(n21+n12)+phi*n11)/2/n;
newp10=(2*n20+(n21+n10)+(1-phi)*n11)/2/n;
newp01=(2*n02+(n01+n12)+(1-phi)*n11)/2/n;
newp00=(2*n00+(n10+n01)+phi*n11)/2/n;
}
retun(0);
}
function [p11, p10, p01, p00, phi]=estimateit(n22,n21,n20,n12,n11,n10,n02,n01,n00)
n=n22+n21+n20+n12+n11+n10+n02+n01+n00;
p11=0; p10=0; p01=0; p00=0;
newp11=0.5; newp10=0.5; newp01=0.5; newp00=0.5;
while (abs(p11-newp11)+abs(p10-newp10)+abs(p01-newp01)+abs(p00-newp00)>1.e-8)
p11=newp11; p10=newp10; p01=newp01; p00=newp00;
%E-step
phi=p11*p00/(p11*p00+p10*p01);
%M-step
newp11=(2*n22+(n21+n12)+phi*n11)/2/n;
newp10=(2*n20+(n21+n10)+(1-phi)*n11)/2/n;
newp01=(2*n02+(n01+n12)+(1-phi)*n11)/2/n;
newp00=(2*n00+(n10+n01)+phi*n11)/2/n;
end