GET00186 - Estatística Aplicada II
2020/2
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$stanfitInference 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