terça-feira, 12 de junho de 2012

Solução do desafio da aula 12

No slide 12-17, lancei para vocês o desafio de construir, usando R, a função distribuição conjunta P(V,C,S,G) a partir das distribuições condicionais dadas no mesmo slide. A distribuição final deveria estar num arranjo 2x2x2x2. Este é um exercício muito bom de construção e manipulação de arranjos em R. Eis a seguir a minha resposta, anotada.

O primeiro passo é inserir os dados do problema nas estruturas de dados que estudamos do R:
Prob_S <- c(.25,.75)
Prob_G <- c(.62,.38)
Prob_CdadoSG <- array(c(.05,.20,.74,.96,.95,.8,.26,.04),
                      c(2,2,2))
Prob_VdadoC <- array(c(.10,.75,.9,.25),c(2,2))
As distribuições da safra (S) e do subsídio governamental (G) estão em vetores simples de dois elementos cada, porque essas variáveis são independentes de qualquer outra na topologia da rede bayesiana que estudamos em sala. A situação é mais complicada com as distribuições condicionais de C e V. Os comandos acima armazenam a distribuição P(C|SG) num arranjo 2x2x2, que pode ser entendido alternativamente como duas matrizes 2x2. A primeira matriz é Prob_CdadoSG[,,1] e ela contém as probabilidades de um valor "baixo" para C (o custo da mercadoria) dadas as quatro combinações possíveis de S e G:

> Prob_CdadoSG[,,1]
     [,1] [,2]
[1,] 0.05 0.74
[2,] 0.20 0.96

Nessa matriz, os valores de S estão nas colunas; os valores de G, nas linhas. Assim, a primeira coluna da matriz contém as probabilidades condicionais dado um valor "baixo" da safra (S). A segunda coluna, as probabilidades condicionais dado um valor "alto" da safra. Olhando agora ortogonalmente: a primeira linha da matriz contém as probabilidades condicionais dado um valor "baixo" do subsídio governamental (G). A segunda linha, as probabilidades condicionais dado um valor "alto" do subsídio. Para testar a sua compreensão, diga: o que contém Prob_CdadoSG[1,2,1]? Resposta: P(C=B|S=A,G=B).

A segunda matriz Prob_CdadoSG[,,2] contém as probabilidades de um valor "alto" para C dadas as quatro combinações de S e G, e a sua estrutura é idêntica à da primeira matriz. Observe que essa segunda matriz é que contém os dados encontrados no slide. Naturalmente, cada elemento da primeira matriz contém a diferença entre o número 1 e o elemento correspondente nesta segunda matriz:

> Prob_CdadoSG[,,2]
     [,1] [,2]
[1,] 0.95 0.26
[2,] 0.80 0.04

Veja agora que a distribuição condicional P(V|C) foi armazenada numa matriz 2x2 onde os valores de V estão estão nas colunas e os de C, nas linhas. Por exemplo, Prob_VdadoC[1,2] contém P(V=A|C=B):

> Prob_VdadoC
     [,1] [,2]
[1,] 0.10 0.90
[2,] 0.75 0.25

Como devia ser, os elementos de cada linha da matriz somam 1. (Por quê?)

Agora começamos a construir, passo a passo, a distribuição conjunta das quatro variáveis do modelo. Primeiro, calculamos a distribuição conjunta de S e G, usando o produto externo de dois vetores:
Prob_SG <- Prob_G %o% Prob_S
O resultado é uma matriz 2x2 onde os valores de S estão nas colunas e os de G, nas linhas. Cada elemento da matriz contém a probabilidade conjunta de se observar a combinação correspondente de valores de S e G:

> Prob_SG
      [,1]  [,2]
[1,] 0.155 0.465
[2,] 0.095 0.285

Podemos então construir a distribuição conjunta de C, S e G. Este é o comando:
Prob_CSG <-
   array(c(Prob_CdadoSG[,,1]*Prob_SG,
           Prob_CdadoSG[,,2]*Prob_SG),
         c(2,2,2))
O comando parece complicado à primeira vista, mas ele é uma aplicação direta da expressão:

P(CSG) = P(C|SG) x P(SG).

A distribuição conjunta P(CSG) é estruturada num arranjo 2x2x2 parecido com o arranjo Prob_CdadoSG que criamos no início. Ele é composto por duas matrizes. A primeira contém as probabilidades de se observar C "baixo" conjuntamente com as quatro combinações possíveis de S e G, onde, novamente, os valores de S estão nas colunas e os de G, nas linhas:

> Prob_CSG[,,1]
        [,1]   [,2]
[1,] 0.00775 0.3441
[2,] 0.01900 0.2736

A segunda matriz contém as probabilidades de se observar C "alto" conjuntamente com as quatro combinações possíveis de S e G:

> Prob_CSG[,,2]
        [,1]   [,2]
[1,] 0.14725 0.1209
[2,] 0.07600 0.0114

O passo final é obter a distribuição conjunta das quatro variáveis. Para isso, usaremos a relação:

P(VCSG) = P(V|CSG) x P(CSG)

a qual simplifica para

P(VCSG) = P(V|C) x P(CSG)

pois V é condicionalmente independente de S e de G, dado C.

Este é o comando em R:
Prob_VCSG <- array(c(Prob_VdadoC[1,1]*Prob_CSG[,,1],
                     Prob_VdadoC[2,1]*Prob_CSG[,,2],
                     Prob_VdadoC[1,2]*Prob_CSG[,,1],
                     Prob_VdadoC[2,2]*Prob_CSG[,,2]),
                   c(2,2,2,2))
O arranjo final pode ser entendido como uma "supermatriz" 2x2 onde cada elemento é uma matriz 2x2. A primeira subrmatriz Prob_VCSG[,,1,1] contém as probabilidades conjuntas para as quatro combinações de S e G, mantendo C "baixo" e V "baixo" também. A segunda submatriz Prob_VCSG[,,2,1] contém as probabilidades conjuntas para as quatro combinações de S e G, mantendo C "alto" e V "baixo"; e assim por diante. Observe que, da forma que construímos o arranjo, os seus índices referem-se às variáveis em ordem inversa daquela em que elas aparecem no nome do arranjo. Isto é, o primeiro índice refere-se a G; o segundo, a S; o terceiro, a C; e o quarto e último, a V.

Este, sem dúvida, foi o desafio mais complexo de todo o nosso curso. Parabéns a todos os alunos que conseguiram resolver pelo menos parte dele!

Nenhum comentário:

Postar um comentário