Contoh 1 : Menduga nilai data hilang
# Fungsi EM
emrancob <- function(ftn, x,yij,i, j, tol = 1e-9, max.iter = 100) {
yold <- yij
ynew <- ftn(x,yold,i,j)
iter <- 1
cat("At iteration 1 value of x is:", ynew, "\n")
while ((abs(ynew-yold) > tol) && (iter < max.iter)) {
yold <- ynew;
ynew <- ftn(x,yold,i,j);
iter <- iter + 1
cat("At iteration", iter, "value of y is:", ynew, "\n")
}
if (abs(ynew-yold) > tol) {
cat("Algorithm failed to converge\n")
return(NULL)
} else {
cat("Algorithm converged\n")
return(ynew)
}
}
# Misal data hilang : y23
ftn <- function(x,yij,i,j){
x <- matrix(c(10,15,17,22,23,yij),ncol=3,byrow=TRUE)
mu <- mean(x)
alfai <- mean(x[i,])- mu
betaj <- mean(x[,j])- mu
yij <- mu + alfai + betaj
return(yij)
}
# Menduga nilai y23
emrancob(ftn, x,0,2,3, tol = 1e-4, max.iter = 100) #tetapkan nilai awal y23, misal = 0 ## At iteration 1 value of x is: 9
## At iteration 2 value of y is: 15
## At iteration 3 value of y is: 19
## At iteration 4 value of y is: 21.66667
## At iteration 5 value of y is: 23.44444
## At iteration 6 value of y is: 24.62963
## At iteration 7 value of y is: 25.41975
## At iteration 8 value of y is: 25.9465
## At iteration 9 value of y is: 26.29767
## At iteration 10 value of y is: 26.53178
## At iteration 11 value of y is: 26.68785
## At iteration 12 value of y is: 26.7919
## At iteration 13 value of y is: 26.86127
## At iteration 14 value of y is: 26.90751
## At iteration 15 value of y is: 26.93834
## At iteration 16 value of y is: 26.95889
## At iteration 17 value of y is: 26.9726
## At iteration 18 value of y is: 26.98173
## At iteration 19 value of y is: 26.98782
## At iteration 20 value of y is: 26.99188
## At iteration 21 value of y is: 26.99459
## At iteration 22 value of y is: 26.99639
## At iteration 23 value of y is: 26.99759
## At iteration 24 value of y is: 26.9984
## At iteration 25 value of y is: 26.99893
## At iteration 26 value of y is: 26.99929
## At iteration 27 value of y is: 26.99952
## At iteration 28 value of y is: 26.99968
## At iteration 29 value of y is: 26.99979
## At iteration 30 value of y is: 26.99986
## Algorithm converged
## [1] 26.99986
Diperoleh nilai dugaan y23 = 26.99986 = 27
Contoh 1 : Menduga data hilang dengan rumus Anstat
Yij = (rBj+tTi-G)/(r-1)(t-1)
Akan dicari y23, dengan data sama seperti sebelumnya
t = 2
r = 3
B3 = 17
T2 = 22 + 23
G = 10 + 15 + 17 + 22 + 23
# Menduga nilai y23
y23 = (r*B3 + t*T2 - G)/((r-1)*(t-1))
y23## [1] 27
Diperoleh nilai dugaan y23 dengan rumus anstat = 27
Contoh 2 : Menduga data hilang (y12)
ftn <- function(x,yij,i,j){
x <- matrix(c(12,yij,18,22,23,24),ncol=3,byrow=TRUE)
mu <- mean(x)
alfai <- mean(x[i,])- mu
betaj <- mean(x[,j])- mu
yij <- mu + alfai + betaj
return(yij)
}
emrancob(ftn, x,16.5,1,2, tol = 1e-4, max.iter = 100) # tetapkan nilai awal y12, misal = 16.5## At iteration 1 value of x is: 16
## At iteration 2 value of y is: 15.66667
## At iteration 3 value of y is: 15.44444
## At iteration 4 value of y is: 15.2963
## At iteration 5 value of y is: 15.19753
## At iteration 6 value of y is: 15.13169
## At iteration 7 value of y is: 15.08779
## At iteration 8 value of y is: 15.05853
## At iteration 9 value of y is: 15.03902
## At iteration 10 value of y is: 15.02601
## At iteration 11 value of y is: 15.01734
## At iteration 12 value of y is: 15.01156
## At iteration 13 value of y is: 15.00771
## At iteration 14 value of y is: 15.00514
## At iteration 15 value of y is: 15.00343
## At iteration 16 value of y is: 15.00228
## At iteration 17 value of y is: 15.00152
## At iteration 18 value of y is: 15.00101
## At iteration 19 value of y is: 15.00068
## At iteration 20 value of y is: 15.00045
## At iteration 21 value of y is: 15.0003
## At iteration 22 value of y is: 15.0002
## At iteration 23 value of y is: 15.00013
## Algorithm converged
## [1] 15.00013
Contoh 3 : Pendugaan data sebaran multinomial
# pendugaan data tersembunyi (sebaran multinomial)
x3<- 18
x4<- 20
x5<- 34
x2d1<- 0
x2d2<- 0
theta0<- 2 #ambil theta0 sembarang
err<- 10
iterasi<- 1
while(err>10^-4){
theta1<- (x2d1+x5)/(x2d1+x3+x4+x5)
x1d2<- 125*(0.5/(0.5+0.25*theta1))
x2d2<- 125*((0.25*theta1)/(0.5+0.25*theta1))
err<- abs(theta1-theta0)
theta0<- theta1
x2d1<-x2d2
iterasi<- iterasi + 1
}
x1d2 # x1## [1] 95.17232
## [1] 29.82768
## [1] 0.6268142
## [1] 7