alt text

GET00186 - Estatística Aplicada II

2020/2

Jony Arrais Pinto Junior

Conteúdo da aula

  • Modelo de regressão logística.
  • Inferência Bayesiana.

1 - Regressão logística.

Vamos considerar o problema de modelar variáveis que são mensuradas em uma escala binária.

Este contexto, como podemos imaginar, não seria contemplado pela classe dos modelos de regressão linear. Sendo assim, precisaríamos de uma outra ferramenta que fosse capaz de modelar um cenário como este.

Vamos discutir o problema acima, considerando a seguinte situação: suponha que um pesquisador está interessado em entender como determinadas características dos pacientes podem interferir ou não na morte destes pacientes.

Notem que a nossa variável de interesse é uma variável binária com dois possíveis resultados (morreu ou não morreu). Podemos então pensar na variável resposta como \[ Z = \left\{ \begin{array}{rl} 1,&\mbox{se o resultado é um sucesso (morreu),}\\ 0,&\mbox{se o resultado é um fracasso (não morreu).}\\ \end{array} \right. \] em que sucesso é morreu e fracasso é não morreu.

Podemos perceber claramente que \(Z \sim\) Bernoulli(\(P\)). Suponha que observamos uma amostra aleatória simples de tamanho \(n\), isto é, \(Z_1, \ldots, Z_n\). Além disso, foram observadas \(p\) variáveis explicativas, para facilitar o entendimento, suponha que \(p = 2\) (sexo e estado civil). Além disso, suponha ainda que foram observadas pessoas dos sexos masculino (M) e feminino (F) e pessoas solteiras (S), casadas (C) e viúvas (Vi). Dentre as possibilidades de cruzamentos das variáveis explicativas, temos as seguites possíveis configurações que podem ser observadas \[V = \{(M,S);(M,C);(M,Vi);(F,S);(F,C);(F,Vi)\}.\]

\(V\) representa o conjunto com todas as configurações observadas, com cardinalidade \(J\). Podemos dividir a nossa amostra em \(J\) grupos (pois temos \(J\) configurações) e definir em cada sub-amostra a variável \(Z^{j}_i\), \(j = 1, \ldots, J\) e \(i = 1, \ldots, n_j\), \(n_1 + \ldots + n_J = n\). Sendo assim, podemos redefinir nossas variáveis da seguinte forma \[ Z^{j}_i = \left\{ \begin{array}{rl} 1,&\mbox{se o indivíduo } i \mbox{ do grupo } j \mbox{ morreu},\\ 0,&\mbox{se o indivíduo } i \mbox{ do grupo } j \mbox{ não morreu}.\\ \end{array} \right. \]

Podemos perceber claramente que \(Z^{j}_j \sim\) Bernoulli(\(p_j\)). Vamos definir a variável \[Y_j = \sum_{i=1}^{n_j}Z^{j}_i, j = 1, \ldots, J.\]

Podemos notar que a variável \(Y_j\) é a soma de variáves aleatórias Bernoulli(\(p_j\)) independentes e identicamente distribuídas. Logo, \[Y_j \sim \mbox{Binomial}(n_j,p_j), j = 1, \ldots, J.\]

Na literatura, o modelo de regressão logística é um dos mais utilizados para se modelar o cenário descrito acima. Neste caso, estamos interessado em modelar \(p_j\) - a probabilidade de vir a óbito com configuração \(j\), \(j = 1, \ldots, J\).

Deste modo, para definirmos o modelo, supomos que foram observadas \(J\) configurações associadas a \(p\) covariáveis explicativas, isto é, \(\boldsymbol X_j = (1, x_{1j}, \ldots, x_{pj})^T\), e que foi observada uma amostra de tamanho \(n\), com \(n_j\) indivíduos na configuração \(j\). Deste modo, \[ \begin{align} Y_j &\sim \mbox{Binomial}(n_j,p_j), \\ log \left( \frac{p_j}{1-p_j} \right) &= \boldsymbol X_j^T \boldsymbol \beta \end{align} \]

A função de verossimilhança associada ao modelo é dada por \[ \begin{align} L(\beta_0, \ldots, \beta_p; y_1, \ldots, y_J) &= \prod_{j=1}^{J} P(Y_j = y_j) \\ &= \prod_{j=1}^{J} \left( \begin{array}{c} n_j \\ y_j \end{array} \right) p_j^{y_j} (1-p_j)^{n_j-y_j} \end{align} \]

Do modelo definido anteriormente, podemos ver que \[p_j = \frac{e^{\boldsymbol X_j^T \boldsymbol \beta}}{1 + e^{\boldsymbol X_j^T \boldsymbol \beta}}\] e assim podemos reescrever a função de verossimilhança da seguinte forma \[ \begin{align} L(\beta_0, \ldots, \beta_p; y_1, \ldots, y_J) &= \prod_{j=1}^{J} P(Y_j = y_j) \\ &= \prod_{j=1}^{J} \left( \begin{array}{c} n_j \\ y_j \end{array} \right) \left(\frac{e^{\boldsymbol X_j^T \boldsymbol \beta}}{1 + e^{\boldsymbol X_j^T \boldsymbol \beta}}\right)^{y_j} \left(1-\frac{e^{\boldsymbol X_j^T \boldsymbol \beta}}{1 + e^{\boldsymbol X_j^T \boldsymbol \beta}} \right)^{n_j-y_j}\\ &= \prod_{j=1}^{J} \left( \begin{array}{c} n_j \\ y_j \end{array} \right) \left(\frac{e^{\boldsymbol X_j^T \boldsymbol \beta}}{1 + e^{\boldsymbol X_j^T \boldsymbol \beta}} \right)^{y_j} \left(\frac{1}{1 + e^{\boldsymbol X_j^T \boldsymbol \beta}} \right)^{n_j-y_j}\\ &= \prod_{j=1}^{J} \left( \begin{array}{c} n_j \\ y_j \end{array} \right) \frac{e^{y_j{\boldsymbol X_j^T \boldsymbol \beta}}}{(1 + e^{\boldsymbol X_j^T \boldsymbol \beta})^n} \end{align} \]

Com o modelo especificado e a sua função de verossimilhança definida, podemos partir para fazer inferência sobre o mesmo, isto é, fazer afirmações sobre as quantidades desconhecidas no mesmo, isto é, sob os parâmteros do modelo.

Esta análise poderia ocorrer sob a perspectiva frequentista, mas aqui optaremos por realizar a análise sob a perspectiva Bayesiana.

2 - Inferência Bayesiana no modelo de regressão logística.

Para realizarmos a inferência no modelo sob a perspectiva Bayesiana, precisamos completar a definição do mesmo. Visto que sob a ótica Bayesiana, os parâmetros são variáveis aleatórias, precisamos atribuir distribuições a priori para eles. É preciso pensar um pouco sobre o problema para se fazer escolhas apropriadas. Por exemplo, se possuímos um parâmetro no modelo que tem que ser positivo (por exemplo uma variância), não podemos atribuir uma distribuição a priori que tenha massa de probabilidade em valores negativos. Outro ponto importante da realização da inferência sob a perspectiva Bayesiana é a possibilidade de se incorporar uma informação prévia sob o parâmetro.

Aqui, iremos atribuir distribuições a priori relativamente vagas para os parâmetros envolvidos. Iremos assumir independência a priori entre os coeficientes da regressão, levando-nos a uma distribuição a priori conjunta dada por \[ \begin{align} \pi(\beta_0, \ldots, \beta_p) &= \pi(\beta_0) \pi(\beta_1) \ldots \pi(\beta_p) \\ &= N(a_0,b_0)N(a_1,b_1)\ldots N(a_p,b_p), \end{align} \]

em que \(a_l\) e \(b_l\) são constantes conhecidas, \(l = 0, 1, \ldots, p\).

Por meio do Teorema de Bayes é possível combinar a informação prévia advinda da distribuição a priori conjunta, com a informação contida nos dados proveniente da função de verossimilhança, para obtermos a distribuição de probabilidade a posteriori conjunta \[ P(\beta_0, \ldots, \beta_p| y_1, \ldots, y_J) \propto L(\beta_0, \ldots, \beta_p| y_1; \ldots, y_J) \times \pi(\beta_0, \ldots, \beta_p).\]

No nosso problema, a distribuição de probabilidade a posteriori conjunta será dada por \[ \begin{align} P(\beta_0, \ldots, \beta_p| y_1, \ldots, y_J) \propto & \prod_{j=1}^{J} \frac{e^{y_j{\boldsymbol X_j^T \boldsymbol \beta}}}{(1 + e^{\boldsymbol X_j^T \boldsymbol \beta})^n} \times \mbox{exp}\left\{ -\frac{1}{2}\sum_{l=1}^{p} \left( \frac{\beta_l - a_l}{b_l} \right)^2 \right\}. \end{align} \]

A distribuição acima é conhecida?

Facilmente percebemos que não conseguimos identificar o núcleo desta distribuição. Uma primeira tentativa de simplificarmos o problema, é fazer particionar o problema todo (a distribuição a posteriori conjunta) em distribuições marginais, conhecidas na literatura como distribuições condicionais completas a posteriori, que consistem na distribuição de cada parâmetro envolvido no problema. Deste modo, as distribuições condicionais completas no nosso problema serão dadas por \[ \begin{align} P(\beta_l| \cdot) & \propto \prod_{j=1}^{J} \frac{e^{y_j{ X_{lj}^T \boldsymbol \beta}}}{(1 + e^{\boldsymbol X_j^T \boldsymbol \beta})^n} \times \mbox{exp}\left\{ -\frac{1}{2} \left( \frac{\beta_l - a_l}{b_l} \right)^2 \right\}. \end{align} \]

Simplificando o problema, conseguimos uma distribuição conhecida para \(\beta_l\)?

Método de Monte Carlo via Cadeia de Markov

Uma maneira de obtermos uma amostra da distribuição acima é utilizar os Métodos de Monte Carlo via Cadeia de Markov. Estes são algoritmos interativos que geral cadeias de Markov para cada parâmetro, usando como núcleo de transição as distribuições condicionais completas. A ideia do algoritmo é realizar interações até que a cadeia alcance a convergência da distribuição de equilíbrio, a distribuição a posteriori. Os dois principais algoritmos são: o amostrador de Gibbs e o algoritmo de Metropolis-Hasting.

#Visualizando a base
base
# A tibble: 115 × 6
   obito tabagismo mora_fumantes hist_cancer  sexo idade
   <dbl>     <dbl>         <dbl>       <dbl> <dbl> <dbl>
 1     0         0             0           0     1    37
 2     1         1             1           1     1    58
 3     1         0             1           1     1    20
 4     1         0             1           1     1    39
 5     0         0             1           1     1    42
 6     1         1             1           1     1    47
 7     0         1             1           0     0    50
 8     0         0             0           1     0    51
 9     1         1             0           0     0    37
10     1         1             1           1     0    23
# … with 105 more rows
#Tratando a base de dados
base = base |> 
    mutate(obito = factor(obito, labels = c("Não","Sim")),
           tabagismo = factor(tabagismo, labels = c("Não","Sim")),
           mora_fumantes = factor(mora_fumantes, labels = c("Não","Sim")),
           hist_cancer = factor(hist_cancer, labels = c("Não","Sim")),
           sexo = factor(sexo, labels = c("Feminino","Masculino")))

#Visualizando a base
base
# A tibble: 115 × 6
   obito tabagismo mora_fumantes hist_cancer sexo      idade
   <fct> <fct>     <fct>         <fct>       <fct>     <dbl>
 1 Não   Não       Não           Não         Masculino    37
 2 Sim   Sim       Sim           Sim         Masculino    58
 3 Sim   Não       Sim           Sim         Masculino    20
 4 Sim   Não       Sim           Sim         Masculino    39
 5 Não   Não       Sim           Sim         Masculino    42
 6 Sim   Sim       Sim           Sim         Masculino    47
 7 Não   Sim       Sim           Não         Feminino     50
 8 Não   Não       Não           Sim         Feminino     51
 9 Sim   Sim       Não           Não         Feminino     37
10 Sim   Sim       Sim           Sim         Feminino     23
# … with 105 more rows
#Carregando pacote
library(rstanarm)

#Ajustando o modelo
ajuste = stan_glm(formula = obito ~ tabagismo + mora_fumantes + hist_cancer + sexo + idade,
                  data = base,
                  family = binomial(link = "logit"),
                  prior_intercept = normal(0,10),
                  refresh = 0,
                  chain = 2,
                  iter = 10000,
                  warmup = 2000,
                  thin = 4)

#Visualizando o ajuste
ajuste$stanfit
Inference for Stan model: bernoulli.
2 chains, each with iter=10000; warmup=2000; thin=4; 
post-warmup draws per chain=2000, total post-warmup draws=4000.

                   mean se_mean   sd   2.5%    25%    50%    75%  97.5% n_eff
(Intercept)       -0.44    0.01 0.90  -2.25  -1.04  -0.41   0.15   1.39  3806
tabagismoSim       1.98    0.01 0.55   0.94   1.61   1.96   2.33   3.09  3915
mora_fumantesSim   0.58    0.01 0.49  -0.34   0.25   0.58   0.92   1.57  3901
hist_cancerSim     0.77    0.01 0.51  -0.20   0.43   0.75   1.10   1.80  3869
sexoMasculino     -0.17    0.01 0.48  -1.16  -0.49  -0.16   0.16   0.74  3889
idade              0.01    0.00 0.02  -0.03  -0.01   0.01   0.02   0.04  3923
mean_PPD           0.76    0.00 0.05   0.65   0.72   0.76   0.79   0.85  4018
                 Rhat
(Intercept)         1
tabagismoSim        1
mora_fumantesSim    1
hist_cancerSim      1
sexoMasculino       1
idade               1
mean_PPD            1
 [ reached getOption("max.print") -- omitted 1 row ]

Samples were drawn using NUTS(diag_e) at Tue Jan 25 15:54:28 2022.
For each parameter, n_eff is a crude measure of effective sample size,
and Rhat is the potential scale reduction factor on split chains (at 
convergence, Rhat=1).
#Plotando os intervalos de credibilidade
plot(ajuste, prob = 0.9)

#Calculando intervalo de credibilidade
posterior_interval(object = ajuste, 
                   regex_pars = "tabagismo", 
                   prob = 0.8)
                  10%      90%
tabagismoSim 1.291971 2.698994
#Visualizando convergência
plot(ajuste, 
     plotfun = "combo", 
     regex_pars = "tabagismo")

#Entendo as prioris utilizadas
prior_summary(ajuste)
Priors for model 'ajuste' 
------
Intercept (after predictors centered)
 ~ normal(location = 0, scale = 10)

Coefficients
  Specified prior:
    ~ normal(location = [0,0,0,...], scale = [2.5,2.5,2.5,...])
  Adjusted prior:
    ~ normal(location = [0,0,0,...], scale = [4.98,4.98,5.02,...])
------
See help('prior_summary.stanreg') for more details