У нас есть две монеты с вероятностями глав $ \ theta_ {1} $ и $ \ theta_ {2} $. Следующие данные дают нам количество головок, которые возникли после 10 сальто и 5 итераций: $ x1 = 5, x2 = 9, x3 = 8, x4 = 4, x5 = 7 $.
Рассмотрим из приведенных выше данных результаты первой монеты с вероятностью $ p $ и вероятностью $ 1-p $ за второй. Условие завершения EM-алгоритма после последовательных итераций $ (r) $ и $ (r + 1) $: $ (p ^ {(r + 1)} -p ^ {(r)}) ^ 2 + (\ theta_ {1} ^ {(r + 1)} - \ theta_ {1} ^ {(r)}) ^ 2 + (\ theta_ {2} ^ {(r + 1)} - \ theta_ {2} ^ { (r)}) ^ 2 <= 10 ^ {(- 10)} $ </p>
например, я могу использовать код, но я хочу сделать это с while l oop и поставить условие допуска
EMflipcoin = function(p,n,theta1,theta2,x) {
likelihood = function(p,x,theta,n){
p * dbinom(x, n, theta) / (p * dbinom(x,n,theta) +
(1 - p) * (dbinom(x,n,1-theta)))}
M = function(p,x,theta,n){pi.est = likelihood(p,x,theta,n)
mean(pi.est)}
tol=10^(-10)
maxiter=1000
diff=1
iter=0
while(diff>tol & iter<maxiter){
## E-step:
d1 = likelihood(p=p,x=x,theta=theta1,n=n)
d2 = likelihood(p=p,x=x,theta=theta2,n=n)
p1 = likelihood(p=p,x=x,theta=p,n=n)
## M-step:
m1 = M(p,x,theta1,n)
m2 = M(p,x,theta2,n)
p.new = M(p,x,p,n)
## calculate diff to check convergence
diff= (mean(p1)-p.new)^2+(mean(d1)-m1)^2+ (mean(d2)-m2)^2
d1=m1; d2=m2;
iter=iter+1;
cat("Iter", iter,
", p=", p.new,
": theta1=", m1,
", theta2=",m2,
", diff=", diff, "\n")}
}
x=c(8,5,9,4,7)
EMflipcoin(p=0.5,n=10,theta1=0.6,theta2=0.4,x=x)