Você está na página 1de 5

Universidade Federal do Rio de Janeiro

Estatstica Computacional
Lista de Exerccios: Aplica
c
ao do Algoritmo EM
Jes
us Eduardo Gamboa Unsihuay
Professora: Thas C O Fonseca
18 de agosto de 2014

1. Considere Xi iid P ois(i ) e Yi iid P ois(i ), i = 1, ..., n. Suponha que x1 e um dado

faltante. Neste caso, como poderamos obter 1 e ?


Solu
c
ao:
Abordagem te
orica
o de verosimilhanc
Func
a
a:
lc (, ; x, y) = ( + 1)

n
X

i +

i=1

n
X

yi log() +

i=1

n
X

(xi + yi )log(i )

i=1

n
X

xi !

i=1

n
X

yi !

i=1

Paso E:
Q( |0 , x, y)

n
X

(i + (xi + yi )log(i )) +

i=2

n
X

(i + yi log + yi logi ) + 0 log1 1

i=1

Paso M:
Depois de derivar respeito a , 1 e i , e igualar a zero, temos:
Pn
y
(k+1)

= xi +yi , para i = 2, ..., n


b(k+1) = P i=1 i (k)
n
i=2

xi +1

b(k+1) +1

(k+1)

(k)

1 +y1
b(k+1) +1

Implementa
c
ao pr
atica no R
Ja que n
ao temos disponvel um conjunto de dados, precisamos simula-los. Assim, foi
simulada uma amostra aleat
oria (a.a.) de i , logo 99 valores aleatorios da P ois(i ) para
o vector com um dado faltante (X), e 100 valores aleatorios da P ois(2i ) para o vetor
completo de observac
oes (Y ), o qual implica que nossa estimacao de deve estar proxima
de 2.
P
P100
Entao agora temos, para n = 100, 100
as comecamos
i=2 xi = 4764 e
i=1 yi = 9704, e ali
(0)
com o valor inicial 1 = 5. Na Figura 1, podemos enxergar a estabilizacao das estimacoes
1

importante notar que nossa estimacao de


obtidas para 1 , 2 , 100 e ap
os 7 iteracoes. E
ficou proxima de 2 e que as estimacoes de i estao proximas do seu verdadero valor.
(0)

Agora, quando mudamos apenas o valor inicial de 1 = 50, mantendo os mesmos


dados, a convergencia e muito r
apida e as 7 iteracoes sao suficientes para obter resultados
semelhantes ao primeiro caso. Podemos enxergar os resultados na Figura 2 e no Anexo.

Figura 1: Estimac
oes de 1 , 2 , 100 e apos 7 iteracoes, com 10 = 5

Figura 2: Estimac
oes de 1 , 2 , 100 e apos 7 iteracoes, com 10 = 50

Figura 3: Comparac
ao do valor verdadeiro e estimado para c/i para i=2,...,100
DOS DADOS E CODIGO

ANEXO: SIMULAC
AO
DO ALGORITMO EM
> #Simula
c~
ao das vari
aveis aleat
orias X[i] para i=2,...,100
> t = round(runif(99,0,100),3) #Simula
c~
ao de tau[i], para i=2,...,100
> t
[1] 14.959 40.922 96.674 77.570 63.719 15.611 28.850 5.901 82.745 0.094 36.147
[12] 1.272 51.095 22.862 43.033 98.521 96.742 6.417 48.651 41.790 67.354 69.720
[23] 80.290 3.301 63.780 17.601 63.255 35.816 51.447 25.638 85.795 96.223 74.385
[34] 50.312 51.111 16.695 6.283 97.362 35.492 63.185 63.251 79.610 6.642 34.357
[45] 94.261 79.052 71.848 14.229 98.523 88.126 13.465 47.985 31.402 57.067 48.908
[56] 19.370 0.541 23.079 60.577 50.438 15.709 12.571 94.064 88.598 19.759 70.114
[67] 69.386 11.482 7.395 0.825 53.197 34.860 21.420 22.015 79.825 11.154 58.018
[78] 64.828 9.420 13.958 93.569 68.384 34.965 65.792 93.132 7.388 35.867 77.174
[89] 32.172 61.712 91.478 42.827 31.159 14.072 38.780 62.562 10.132 34.274 36.716
> x = NULL
> x[1] = NA #x[1]
e o dado faltante
> for (i in 1:99)
+ {
+ x[i+1] = rpois(1,t[i]) #Simula
c~
ao de x[i], para i=2,...,100
+ }
> x
[1] NA
9 38 94 72 72 22 33
5 84
0 32
1 37 23 53 98 87
4
[21] 47 69 62 79
1 76 21 67 46 49 28 84 89 67 52 47 14
6 81
[41] 66 55 81
3 44 78 72 72 15 117 93 14 47 31 63 58 22
0 14
[61] 49 10 13 88 79 20 90 54 10 14
0 77 35 16 22 79 14 55 71
[81] 14 88 76 42 58 119
9 26 66 36 71 86 39 35 14 48 76
6 31
> #Simula
c~
ao das vari
aveis aleat
orias Y[i] para i=1,...,100
> t1 = round(runif(1,0,100),3)
> t1
[1] 65.947 #Simula
c~
ao de tau[1]. Este valor ser
a usado apenas para gerar y[1]

48
22
75
11
33

>
>
>
+
+
+
>

y = NULL
y[1] = rpois(1,2*t1) #Simula
c~
ao de y[1]
for (i in 1:99)
{
y[i+1] = rpois(1,2*t[i]) #Simula
c~
ao de y[i], para i=2,...,100
}
y
[1] 111 30 83 208 138 126 25 69 11 156
0 85
2 90 40 85 188 204 14 98
[21] 70 127 151 139
8 135 39 136 69 93 45 174 201 157 123 102 38
8 222 66
[41] 123 121 171
8 79 181 149 152 30 198 170 27 86 54 127 96 37
0 40 127
[61] 104 33 38 208 185 38 139 149 29 16
3 111 71 43 42 156 25 107 126 23
[81] 27 191 111 86 136 197 20 60 147 63 124 175 102 60 26 85 148 10 72 69
> EM_ = function(x,y,t1,n)
+ {
+ beta = NULL; tau1 = NULL; Sy = sum(y); Sx = sum(x[2:100])
+ tau2_100 = matrix(c(rep(0,99*n)),nrow=n)
+ beta[1] = Sy / (Sx + t1)
+ tau1[1] = (t1 + y[1])/(beta[1]+1)
+ for (j in 2:100){
+ tau2_100[1,j-1]=(x[j]+y[j])/(beta[1]+1)}
+ for (i in 2:n){
+ beta[i] = Sy / (Sx + tau1[i-1])
+ beta_ = beta[i]
+ tau1[i] = (tau1[i-1] + y[1])/(beta[i]+1)
+ for (j in 2:100){
+ tau2_100[i,j-1]=(x[j]+y[j])/(beta_+1)}} #cada estima
c~
ao numa fila
+ return(list(tau1,tau2_100,beta))}
> vtau1 = EM_(x,y,5,7)[[1]]
> vtau1 #estima
c~
ao de tau[1] nas 7 itera
c~
oes
[1] 38.25576 49.45991 53.25817 54.54848 54.98711 55.13626 55.18698
> vtau2_100 = EM_(x,y,5,7)[[2]][7,]
> round(vtau2_100,3) #estima
c~
oes para tau[2] at
e tau[100] na
ultima itera
c~
ao
[1] 12.955 40.194 100.318 69.758 65.771 15.612 33.882
5.315 79.723
0.000
[11] 38.865
0.997 42.187 20.927 45.841 95.003 96.664
5.979 48.498 38.865
[21] 65.107 70.754 72.415
2.990 70.090 19.931 67.432 38.201 47.169 24.249
[31] 85.702 96.332 74.408 58.131 49.495 17.273
4.651 100.650 29.232 62.782
[41] 58.464 83.709
3.654 40.858 86.034 73.412 74.408 14.948 104.636 87.363
[51] 13.619 44.180 28.235 63.114 51.156 19.599
0.000 17.938 67.100 50.823
[61] 14.284 16.941 98.325 87.695 19.266 76.069 67.432 12.955
9.965
0.997
[71] 62.450 35.211 19.599 21.259 78.062 12.955 53.813 65.439 11.294 13.619
[81] 92.678 62.117 42.519 64.443 104.969
9.633 28.567 70.754 32.886 64.775
[91] 86.699 46.837 31.557 13.287 44.180 74.408
5.315 34.214 33.882
> vbeta = EM_(x,y,5,7)[[3]]
> vbeta #estima
c~
ao de beta nas 7 itera
c~
oes
[1] 2.032223 2.017712 2.012869 2.011233 2.010678 2.010489 2.010425
> par(mfrow=c(2,2))
> plot(EM_(x,y,5,7)[[1]],type="l",lwd=2,col=1,ylab=expression(tau[1]))
> plot(EM_(x,y,5,7)[[2]][,1],type="l",lwd=2,col=1,ylab=expression(tau[2]))
> plot(EM_(x,y,5,7)[[2]][,99],type="l",lwd=2,col=1,ylab=expression(tau[100]))
> plot(EM_(x,y,5,7)[[3]],type="l",lwd=2,col=1,ylab=expression(beta))
> x11()
> vtau1 = EM_(x,y,200,7)[[1]]

> vtau1
[1] 105.42410 72.40624 61.07385 57.20779 55.89163 55.44388 55.29160
> vtau2_100 = EM_(x,y,100,7)[[2]][7,]
> round(vtau2_100,3)
[1] 12.955 40.195 100.320 69.759 65.773 15.613 33.883
5.315 79.725
0.000
[11] 38.866
0.997 42.188 20.928 45.842 95.005 96.666
5.979 48.499 38.866
[21] 65.108 70.756 72.417
2.990 70.091 19.931 67.434 38.201 47.170 24.250
[31] 85.704 96.334 74.410 58.133 49.496 17.274
4.651 100.652 29.232 62.783
[41] 58.465 83.711
3.654 40.859 86.036 73.413 74.410 14.948 104.639 87.365
[51] 13.620 44.181 28.236 63.115 51.157 19.599
0.000 17.938 67.102 50.824
[61] 14.284 16.941 98.327 87.697 19.267 76.071 67.434 12.955
9.966
0.997
[71] 62.451 35.212 19.599 21.260 78.064 12.955 53.814 65.441 11.294 13.620
[81] 92.680 62.119 42.520 64.444 104.971
9.633 28.568 70.756 32.886 64.776
[91] 86.701 46.838 31.558 13.287 44.181 74.410
5.315 34.215 33.883
> vbeta = EM_(x,y,50,7)[[3]]
> vbeta
[1] 2.012637 2.011154 2.010651 2.010480 2.010422 2.010402 2.010395
> par(mfrow=c(2,2))
> plot(EM_(x,y,50,7)[[1]],type="l",lwd=2,col=1,ylab=expression(tau[1]))
> plot(EM_(x,y,50,7)[[2]][,1],type="l",lwd=2,col=1,ylab=expression(tau[2]))
> plot(EM_(x,y,50,7)[[2]][,99],type="l",lwd=2,col=1,ylab=expression(tau[100]))
> plot(EM_(x,y,50,7)[[3]],type="l",lwd=2,col=1,ylab=expression(beta))
#Compara
c~
ao das estat
sticas b
asicas do vetor original tau e sua respectiva estima
c~
ao
> summary(t)
Min. 1st Qu. Median
Mean 3rd Qu.
Max.
0.094 18.490 43.030 46.490 69.550 98.520
> summary(vtau2_100)
Min. 1st Qu. Median
Mean 3rd Qu.
Max.
0.00
18.60
44.18
46.66
70.42 105.00

Você também pode gostar