0% found this document useful (0 votes)
8 views

samp_doc

Em algorithm .

Uploaded by

Venu Parvathi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views

samp_doc

Em algorithm .

Uploaded by

Venu Parvathi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

EM Algorithm

# This is the beginning of the script

# This module loads the data


> rm(list=ls(all=TRUE))
> x = c(161, 175, 182, 178, 163, 170, 175, 185, 181, 158)
> pi = 0.6
> mu1 = 175
> mu2 = 165
> sd1 = sd2 = 10
> c(pi, mu1, mu2, sd1, sd2)
[1] 0.6 175.0 165.0 10.0 10.0

# develop a user define function to estimate the parameters of EM -algorithm

> EM_Normal = function(pi,mu1,mu2,sd1,sd2,x,maxiter = 1000,tol=1e-5)


+{
+ diff = 1
+ iter = 0
+ while(diff>tol & iter<maxiter)
+{
+ d1 = dnorm(x, mean = mu1, sd = sd1)
+ d2 = dnorm(x, mean = mu2, sd = sd2)
+ lamda = d1 * pi/(d1 * pi+d2*(1-pi))
+ pi.new = mean(lamda)
+ mu1.new = sum(x*lamda)/sum(lamda)
+ mu2.new = sum(x*(1-lamda))/sum(1-lamda)
+ resid1 = x - mu1
+ resid2 = x - mu2
+ sd1.new = sqrt(sum(resid1*resid1*lamda)/sum(lamda))
+ sd2.new = sqrt(sum(resid2*resid2*(1-lamda))/sum(1-lamda))
+ diff = sqrt(sum((mu1.new - mu1)^2+(mu2.new-mu2)^2+(sd1.new-sd1)^2+(sd2.new - sd2)^2))
+ pi=pi.new
+ mu1 = mu1.new
+ mu2 = mu2.new
+ sd1 = sd1.new
+ sd2 = sd2.new
+ iter = iter+1
+cat("Iter",iter,"mu1=",mu1.new,"mu2=",mu2.new,"sd1=",sd1.new,"sd2=",sd2.new,"pi=",pi.new,
"diff=",diff,"\n")
+}
+}

# 2.b)

> EM_Normal(pi,mu1,mu2,sd1,sd2,x)

Iter 1 mu1= 175.4721 mu2= 167.9825 sd1= 7.934043 sd2= 9.156684 pi= 0.6432232 diff= 3.754686
Iter 2 mu1= 175.6864 mu2= 167.7038 sd1= 7.657365 sd2= 8.779998 pi= 0.6384146 diff= 0.5848632
Iter 3 mu1= 176.0697 mu2= 167.1968 sd1= 7.408799 sd2= 8.585692 pi= 0.6314989 diff= 0.7095383
Iter 4 mu1= 176.5456 mu2= 166.6028 sd1= 7.046232 sd2= 8.319842 pi= 0.6232878 diff= 0.8840383
Iter 5 mu1= 177.1389 mu2= 165.9048 sd1= 6.523861 sd2= 7.935927 pi= 0.6137759 diff= 1.122232
Iter 6 mu1= 177.8301 mu2= 165.1159 sd1= 5.797357 sd2= 7.377131 pi= 0.604372 diff= 1.392889
Iter 7 mu1= 178.476 mu2= 164.3124 sd1= 4.962929 sd2= 6.614415 pi= 0.5992531 diff= 1.530004
Iter 8 mu1= 178.8557 mu2= 163.6391 sd1= 4.382337 sd2= 5.757036 pi= 0.6020353 diff= 1.29214
Iter 9 mu1= 178.9673 mu2= 163.1516 sd1= 4.166211 sd2= 5.055634 pi= 0.610053 diff= 0.8881517
Iter 10 mu1= 178.9212 mu2= 162.7686 sd1= 4.142341 sd2= 4.581897 pi= 0.6210379 diff= 0.6113878
Iter 11 mu1= 178.7993 mu2= 162.4372 sd1= 4.212721 sd2= 4.242827 pi= 0.6333426 diff= 0.4945906
Iter 12 mu1= 178.6359 mu2= 162.1038 sd1= 4.327484 sd2= 3.939462 pi= 0.6469955 diff= 0.4929824
Iter 13 mu1= 178.4444 mu2= 161.7246 sd1= 4.461299 sd2= 3.583366 pi= 0.6624136 diff= 0.5702833
Iter 14 mu1= 178.2357 mu2= 161.2805 sd1= 4.599166 sd2= 3.092393 pi= 0.6794092 diff= 0.707674
Iter 15 mu1= 178.0525 mu2= 160.8497 sd1= 4.712186 sd2= 2.459213 pi= 0.6946722 diff= 0.7955035
Iter 16 mu1= 177.9767 mu2= 160.6697 sd1= 4.759426 sd2= 2.085942 pi= 0.7008889 diff= 0.4239404
Iter 17 mu1= 177.9663 mu2= 160.6569 sd1= 4.770448 sd2= 2.055219 pi= 0.7015343 diff= 0.03658953
Iter 18 mu1= 177.9648 mu2= 160.6563 sd1= 4.77243 sd2= 2.054794 pi= 0.7016016 diff= 0.002538059
Iter 19 mu1= 177.9647 mu2= 160.6562 sd1= 4.772711 sd2= 2.054783 pi= 0.7016104 diff= 0.0003458346
Iter 20 mu1= 177.9646 mu2= 160.6562 sd1= 4.77275 sd2= 2.054782 pi= 0.7016116 diff= 4.761372e-05
Iter 21 mu1= 177.9646 mu2= 160.6562 sd1= 4.772756 sd2= 2.054782 pi= 0.7016118 diff= 6.555444e-06

Interpretation:

# This is end of problem number 2

# This is problem number 3


> rm(list=ls(all=TRUE))
> library(Renext)
Loading required package: evd
> x = c(10.06, 136.75, 10.96, 112.04,53.08, 49.89, 20.18, 73.06,145.46, 340.82, 46.00, 10.75,
+ 12.56, 184.63, 10.38, 13.13, 14.96, 81.84, 15.70, 410.14, 29.38, 18.08, 11.69,12.01);

> ini.mixexp2(x, plot = FALSE)


$estimate
prob1 rate1 rate2
0.06170328 0.00448598 0.01507872
$method
[1] "Hreg"

> result = EM.mixexp(x)


> result$estimate
prob1 prob2 rate1 rate2
0.46456563 0.53543437 0.00735670 0.04172453

> result$Theta
[,1] [,2]
[1,] 249.1324 61.64406
[2,] 257.3151 56.89329
[3,] 254.3138 52.47442
[4,] 245.2734 48.80948
[5,] 233.8544 46.00448
[6,] 222.5131 43.85015
[7,] 212.3577 42.10167
[8,] 203.6053 40.60063
[9,] 196.1201 39.26102
[10,] 189.6881 38.03697
[11,] 184.1119 36.90304
[12,] 179.2314 35.84439
[13,] 174.9222 34.85208
[14,] 171.0882 33.92064
[15,] 167.6555 33.04672
[16,] 164.5664 32.22822
[17,] 161.7756 31.46375
[18,] 159.2469 30.75225
[19,] 156.9514 30.09265
[20,] 154.8652 29.48372
[21,] 152.9683 28.92395
[22,] 151.2438 28.41151
[23,] 149.6769 27.94424
[24,] 148.2545 27.51971
[25,] 146.9648 27.13530
[26,] 145.7969 26.78825
[27,] 144.7409 26.47573
[28,] 143.7874 26.19494
[29,] 142.9276 25.94315
[30,] 142.1534 25.71772
[31,] 141.4573 25.51617
[32,] 140.8320 25.33619
[33,] 140.2711 25.17560
[34,] 139.7683 25.03244
[35,] 139.3182 24.90490
[36,] 138.9154 24.79132
[37,] 138.5554 24.69023
[38,] 138.2338 24.60029
[39,] 137.9467 24.52028
[40,] 137.6905 24.44913
[41,] 137.4620 24.38587
[42,] 137.2584 24.32963
[43,] 137.0768 24.27964
[44,] 136.9152 24.23521
[45,] 136.7712 24.19572
[46,] 136.6430 24.16063
[47,] 136.5289 24.12945
[48,] 136.4274 24.10174
[49,] 136.3370 24.07712
[50,] 136.2567 24.05525
[51,] 136.1852 24.03582
[52,] 136.1217 24.01855
[53,] 136.0651 24.00321
[54,] 136.0149 23.98958
[55,] 135.9702 23.97748
[56,] 135.9305 23.96672

> result$logL

[1] -127.1617 -126.9102 -126.6660 -126.4637 -126.3090


[6] -126.1899 -126.0949 -126.0167 -125.9507 -125.8941
[11] -125.8447 -125.8014 -125.7630 -125.7290 -125.6987
[16] -125.6719 -125.6482 -125.6274 -125.6091 -125.5933
[21] -125.5796 -125.5678 -125.5578 -125.5494 -125.5423
[26] -125.5363 -125.5314 -125.5274 -125.5240 -125.5213
[31] -125.5191 -125.5173 -125.5158 -125.5146 -125.5137
[36] -125.5129 -125.5123 -125.5118 -125.5114 -125.5111
[41] -125.5108 -125.5107 -125.5105 -125.5104 -125.5103
[46] -125.5102 -125.5101 -125.5101 -125.5100 -125.5100
[51] -125.5100 -125.5100 -125.5099 -125.5099 -125.5099
[56] -125.5099

# This is the end of problem number 3


# This is the end of the script

You might also like