Este documento refere-se a lista 4 de exercícios proposta pelo professor Gustavo Rocha, da cadeira de Estatística Computacional 2, como cômputo de ensino da disciplina.
Para efetuar o algoritmo EM, precisamos primeiro avaliar o valor esperado das variáveis latentes em função das variáveis conhecidas, isto é:
\(Q(\theta,\theta^*) = E_{z|x,\theta}\bigg[ln(f(X,Z|\theta))\bigg]=E_{z|x,\theta}\bigg[ln\bigg(\cfrac{197}{z_1!z_2!18!20!34!}\bigg(\cfrac{1}{2}\bigg)^{z_1}\bigg(\cfrac{\theta}{4}\bigg)^{z_2}\bigg(\cfrac{1}{4}-\cfrac{\theta}{4}\bigg)^{18}\bigg(\cfrac{1}{4}-\cfrac{\theta}{4}\bigg)^{20}\bigg(\cfrac{1}{2}\bigg)^{34} \bigg) \bigg]\)
\(\propto\)
\(E_{z|x,\theta}\bigg[z_1ln(\cfrac{1}{2}) + z_2ln(\cfrac{\theta}{4}) + 18ln(\cfrac{1}{4}-\cfrac{\theta}{4}) +20ln(\cfrac{1}{4}-\cfrac{\theta}{4}) + 34ln(\cfrac{\theta}{4})\bigg]\)
=
\(E_{z|x,\theta}[z_1]ln(\cfrac{1}{2}) + E_{z|x,\theta}[z_2]ln(\cfrac{\theta}{4}) + 18ln(\cfrac{1}{4}-\cfrac{\theta}{4}) +20ln(\cfrac{1}{4}-\cfrac{\theta}{4}) + 34ln(\cfrac{\theta}{4})\)
Faz-se necessário definir as esperanças descritas acima. Sabe-se que \(Z_2|X_2,X_3,X_4 \sim bin(125,\cfrac{\theta^*}{2+\theta^*})\)
Logo, para efetuar a segunda etapa, devemos maximizar.
\(\cfrac{\partial Q(\theta,\theta^*)}{\partial \theta} = \cfrac{a}{\theta} - \cfrac{18}{1-\theta} - \cfrac{20}{1-\theta} + \cfrac{34}{\theta} = 0\)
\(=>\)
\(\hat{\theta} = \cfrac{34+a}{a+72}\), onde \(a = 125\bigg(\cfrac{\theta^*}{2+\theta^*}\bigg)\)
theta <- vector()
theta[1] <- 0.5
theta[2] <- (125*theta[1]/(2+theta[1]) + 34)/(125*theta[1]/(2+theta[1])+72)
i <- 2
while (abs(theta[i]-theta[(i-1)])>10^(-20)) {
theta[i+1] <- (125*theta[1]/(2+theta[1]) + 34)/(125*theta[1]/(2+theta[1])+72)
i <- i + 1
}
theta## [1] 0.5000000 0.6082474 0.6082474
dados_lista4_questao2 <- read.table("C:/Users/Rafael/Desktop/dados_lista4_questao2.txt", quote="\"", comment.char="")
x = dados_lista4_questao2$V1
beta1 = function(x){
196/mean(x)
}
beta2 = function(x){
mean(x)/var(x)
}
b1 = mean(length(x)*196/mean(x)-(length(x)-1)*jackknife(x,beta1)$jack.values)
b2 = mean(length(x)*mean(x)/var(x)-(length(x)-1)*jackknife(x,beta2)$jack.values)
varb1 = jackknife(x,beta1)$jack.se
varb2 = jackknife(x,beta2)$jack.se
b1;b2;varb1;varb2## [1] 28.03468
## [1] 28.36977
## [1] 0.06289077
## [1] 1.230796
O estimador \(b_1\) possui vício e variância menor, por conseguinte, também deterá um menor Erro Quadrático Médio, sendo, portanto, um estimador mais preciso.
b1 = mean(bootstrap(x,10000,beta1)$thetastar)
b2 = mean(bootstrap(x,10000,beta2)$thetastar)
intervalob1 = quantile(bootstrap(x,10000,beta1)$thetastar,c(.025,0.975))
intervalob2 = quantile(bootstrap(x,10000,beta2)$thetastar,c(.025,0.975))
varb1 = var(bootstrap(x,10000,beta1)$thetastar)
varb2 = var(bootstrap(x,10000,beta2)$thetastar)
b1;varb1;intervalob1;## [1] 28.03367
## [1] 0.003942984
## 2.5% 97.5%
## 27.9099 28.1594
b2;varb2;intervalob2;## [1] 28.52873
## [1] 1.540794
## 2.5% 97.5%
## 26.19652 31.06150
beta = 196/mean(x)
amostra = rgamma(10000,196,beta)
b1 = mean(bootstrap(amostra,10000,beta1)$thetastar)
b2 = mean(bootstrap(amostra,10000,beta2)$thetastar)
intervalob1 = quantile(bootstrap(amostra,10000,beta1)$thetastar,c(.025,0.975))
intervalob2 = quantile(bootstrap(amostra,10000,beta2)$thetastar,c(.025,0.975))
b1;intervalob1;## [1] 28.06338
## 2.5% 97.5%
## 28.02467 28.10442
b2;intervalob2## [1] 27.77029
## 2.5% 97.5%
## 27.00520 28.54997
hist(amostra,breaks=50,probability = T)
curve(dgamma(x,196,b1),0,10,add=T,col="red")
curve(dgamma(x,196,b2),0,10,add=T,col="blue")A curva em vermelho é a obtida com a estimativa de b1, a em azul, com a estimativa de b2. Como é possível observar visualmente, a curva da densidade Gama com o parâmetro obtido atráves do estimador b1 é a que mais se aproxima dos dados reais.
Parar estimar o \(p\), faremos \(p^j = \sum_{i=1}^{1000}\cfrac{w(x_i)p^{j-1}}{w(x_i)p^{j-1} + g(x_i)(1-p)^{j-1}}\)
Onde,
\(w(x)\) é a densidade de uma distribuição Gama com parâmetros (4,\(\beta_1\)) e \(g(x)\) é a densidade de uma distribuição Gama com parâmetros (196,\(\beta_2\))
No entanto, será necessário estimar \(\theta=(p,\beta_1,\beta_2)\).
Para estimação de \(\beta_1\), faça:
\(\beta_1^{(j)} = \cfrac{4\sum_{i=1}^{1000}a_i^{(j)}}{\sum_{i=1}^{1000}a_i^{(j)}x_i}\)
E para estimação de \(\beta_2\), faça:
\(\beta_2^{(j)} = \cfrac{196\sum_{i=1}^{1000}(1-a_i^{(j)})}{\sum_{i=1}^{1000}(1-a_i^{(j)}) x_i}\)
x <- read.table("C:/Users/Rafael/Desktop/dados_lista4_questao3.txt", quote="\"", comment.char="")
x <- x[,1]
a=c()
theta0=c(0.5,1,30)
theta=c()
j=0
norma_r=Inf
while(norma_r>10^(-20)){
for(i in 1:length(x)){
pw=theta0[1]*dgamma(x[i],4,theta0[2])
a[i]=pw/(pw+(1-theta0[1])*dgamma(x[i],196,theta0[3]))}
theta[1]=sum(a)/length(x)
theta[2]=(4*sum(a))/(sum(a*x))
theta[3]=196*(sum(1-a)/sum(x*(1-a)))
j=j+1
r=theta-theta0
norma_r=sqrt(sum(r^2))
theta0=theta}
print(theta)## [1] 0.7251579 1.9975157 28.1315973
print(j)## [1] 20
hist(x,breaks=50,probability = T)
curve(theta[1]*dgamma(x,4,theta[2])+(1-theta[1])*dgamma(x,196,theta[3]),0,10,add=T)Como a curva obtida através através da densidade com os parâmetros estimados se aproxima do histograma da amostra, pode-se concluir que a qualidade da estimativa é boa.