Path: blob/master/site/pt-br/probability/examples/Linear_Mixed_Effects_Models.ipynb
25118 views
Copyright 2018 The TensorFlow Probability Authors.
Licensed under the Apache License, Version 2.0 (the "License");
Modelos lineares de efeitos mistos
Um modelo linear de efeitos mistos é uma estratégia simples para modelar relações lineares estruturadas (Harville, 1997; Laird e Ware, 1982). Cada ponto de dados consiste de entradas de tipo variado, categorizadas em grupos, e uma saída com valor real. Um modelo linear de efeitos mistos é um modelo hierárquico: ele compartilha a força estatística entre os grupos para melhorar as inferências sobre qualquer ponto de dados específico.
Neste tutorial, vamos demonstrar os modelos lineares de efeitos mistos com um exemplo do mundo real no TensorFlow Probability. Usaremos os módulos JointDistributionCoroutine e Monte Carlo via Cadeias de Markov (tfp.mcmc
).
Dependências e pré-requisitos
Vamos acelerar as coisas!
Antes de prosseguirmos, vamos usar uma GPU para a demonstração.
Para fazer isso, selecione "Runtime" -> "Change runtime type" (Alterar tipo de runtime) -> "Hardware accelerator" (Acelerador de hardware) -> "GPU".
O seguinte trecho de código verificará se temos acesso a uma GPU.
Observação: se, por algum motivo, você não conseguir acessar uma GPU, este Colab ainda funcionará (mas o treinamento levará mais tempo).
Dados
Vamos usar o dataset InstEval
do pacote lme4
popular do R (Bates et al., 2015). É um dataset de cursos e suas notas de avaliação. Cada curso inclui metadados, como students
(alunos), instructors
(professores) e departments
(departamentos), e a variável de resposta de interesse é a nota de avaliação.
Vamos carregar e pré-processar o dataset. Reservamos 20% dos dados para podermos avaliar o modelo ajustado com pontos de dados ainda não vistos. Abaixo, visualizamos as primeiras linhas.
Vamos configurar o dataset em termos de um dicionário de entradas de features
e uma saída de labels
correspondente às notas. Cada característica é codificada como inteiro, e cada rótulo (nota de avaliação) é codificado como número de ponto flutuante.
Modelo
Um modelo linear típico pressupõe independência, em que qualquer par de pontos de dados têm uma relação linear constante. No dataset InstEval
, as observações surgem em grupos, e cada uma pode ter declives e interceptos variáveis. Os modelos lineares de efeitos mistos, também conhecidos como modelos lineares hierárquicos ou modelos lineares multiníveis, capturam esse fenômeno (Gelman & Hill, 2006).
Veja alguns exemplos desse fenômeno:
Alunos. As observações de um aluno não são independentes: alguns alunos podem dar notas sistematicamente baixas (ou altas) ao curso.
Professores. As observações de um professor não são independentes: esperamos que bons professores geralmente tenham notas boas e que professores ruins geralmente tenham notas ruins.
Departamentos. As observações de um departamento não são independentes: determinados departamentos geralmente podem ter materiais explícitos ou avaliações mais rígidas e, portanto, ter notas menores do que outros.
Para capturar esses fenômenos, lembre-se de que, para um dataset de características e rótulos , a regressão linear postula o modelo:
em que existe um vetor de declive , intercepto e ruído aleatório . Digamos que e sejam "efeitos fixos": são efeitos mantidos constantes entre a população de pontos de dados . Uma formulação equivalente da equação como verossimilhança é . Essa verossimilhança é maximizada durante a inferência para encontrar estimativas de pontos de e ajustados para os dados.
Um modelo linear de efeitos mistos estende a regressão linear como:
em que há um vetor de declive , intercepto e ruído aleatório . Além disso, há um termo , em que é uma matriz de características, e é um vetor de declives aleatórios; geralmente, tem distribuição normal com parâmetro de componente de variância . é formado particionando a matriz de características original em termos de uma nova matriz e matriz , em que : esta partição permite modelar as características separadamente usando os efeitos fixos e a variável latente , respectivamente.
Digamos que as variáveis latentes sejam "efeitos aleatórios": são efeitos que variam entre a população (embora possam ser constantes entre subpopulações). Especificamente, como os efeitos aleatórios têm média igual a 0, a média dos rótulos de dados é capturada por . O componente de efeitos aleatórios captura as variações nos dados. Por exemplo: "Instructor #54 is rated 1.4 points higher than the mean." (A nota do professor 54 está 1,4 ponto acima da média).
Neste tutorial, postulamos os seguintes efeitos:
Efeitos fixos:
service
.service
é uma covariável binária correspondente ao fato de o curso pertencer ou não ao departamento principal do professor. Não importa quantos dados adicionais coletarmos, ela só pode assumir os valores e .Efeitos aleatórios:
students
,instructors
edepartments
. Dadas mais observações da população de notas de avaliação dos cursos, podemos ter novos alunos, professores ou departamentos.
Na sintaxe do pacote lme4 do R (Bates et al., 2015), o modelo pode ser resumido como:
em que x
denota um efeito fixo, (1|x)
denota um efeito aleatório para x
, e 1
denota um termo de intercepto.
Implementamos esse modelo abaixo como uma JointDistribution. Para ter um suporte melhor ao rastreamento de parâmetros (por exemplo: queremos rastrear todas as tf.Variable
s em model.trainable_variables
), implementamos o template do modelo como tf.Module
.
Como um programa gráfico probabilístico, também podemos visualizar a estrutura do modelo quanto ao seu grafo computacional. Esse grafo codifica o fluxo de dados entre as variáveis aleatórias do programa, explicitando suas relações em relação a um modelo gráfico (Jordan, 2003).
Como ferramenta estatística, podemos avaliar o grafo para ver melhor, por exemplo, que intercept
e effect_service
são condicionalmente dependentes dadas as notas ratings
. Pode ser mais difícil ver isso a partir do código-fonte se o programa tiver sido escrito com classes, referências cruzadas entre módulos e/ou subrotinas. Como ferramenta computacional, também podemos observar o fluxo de variáveis latentes para a variável ratings
pela operação tf.gather
. Isso pode ser um gargalo em determinados aceleradores de hardware se a indexação de Tensor
s for cara do ponto de vista computacional; visualizar o grafo deixa isso aparente.
Estimativa de parâmetros
Fornecidos os dados, o objetivo da inferência é ajustar os efeitos fixos do modelo, declive , intercepto e parâmetro de componente de variância . O princípio da máxima verossimilhança formaliza essa tarefa como:
Neste tutorial, usamos o algoritmo de maximização de expectativa (EM) de Monte Carlo para maximizar essa densidade marginal (Dempster et al., 1977; Wei e Tanner, 1990).¹ Usamos o Monte Carlo via Cadeias de Markov para computar a expectativa da verossimilhança condicional com relação aos efeitos aleatórios ("passo E") e usamos o método do gradiente para maximizar a expectativa com relação aos parâmetros ("passo M"):
Para o passo E, configuramos o Monte Carlo Hamiltoniano (HMC), que recebe um estado atual (os efeitos de aluno, professor e departamento) e retorna um novo estado. Atribuímos o novo estado a variáveis do TensorFlow, que denotarão o estado da cadeia do HMC.
Para o passo M, usamos a amostra posterior do HMC para calcular uma estimativa da verossimilhança marginal sem bias como uma constante. Em seguida, aplicamos seu gradiente com relação aos parâmetros de interesse, o que gera um passo de método estocástico sem bias na verossimilhança marginal. Implementamos isso com o otimizador Adam do TensorFlow e minimizamos o negativo da distribuição marginal.
Fazemos uma etapa de preparação, que executa uma cadeia de MCMC com um determinado número de iterações para que o treinamento possa ser inicializado dentro da massa de probabilidade da distribuição posterior. Em seguida, executamos um loop de treinamento. Os passos E e M são executados conjuntamente, e os valores são registrados durante o treinamento.
Você também pode escrever o loop for de preparação em um tf.while_loop
, e o passo de treinamento em um tf.scan
ou tf.while_loop
, para obter uma inferência ainda mais rápida. Por exemplo:
Acima, não executamos o algoritmo até um limiar de convergência ser detectado. Para conferir se o treinamento foi sensível, verificamos se a perda de função tende à convergência ao longo das iterações de treinamento.
Também usamos um gráfico de traçado, que mostra a trajetória do algoritmo de Monte Carlo via Cadeias de Markov entre as dimensões latentes específicas. Podemos ver abaixo que os efeitos específicos de professor são transicionados do estado inicial de forma significativa e exploram o espaço de estados. O gráfico de traçado também indica que os efeitos diferem entre os professores, mas com comportamento de mistura similar.
Crítica
Acima, fizemos o ajuste do modelo. Agora, vamos criticar o ajuste usando os dados, que nos permite explorar e entender melhor o modelo. Essa técnica é um gráfico residual, que plota a diferença entre as previsões do modelo e a verdade fundamental para cada ponto de dados. Se o modelo estivesse correto, então a diferença deveria ter uma distribuição normal padrão; qualquer desvio desse padrão no gráfico indica um modelo mal ajustado.
Criamos o gráfico residual primeiro formando a distribuição preditiva posterior para as notas, que substitui a distribuição anterior para os efeitos aleatórios pela distribuição posterior após o fornecimento dos dados de treinamento. Especificamente, executamos o modelo para a frente e interceptamos sua dependência dos efeitos aleatórios anteriores com as médias posteriores inferidas².
Após uma inspeção visual, os residuais parecem ter uma distribuição normal padrão. Entretanto, o ajuste não está perfeito: há uma massa de probabilidade maior nas caudas do que em uma distribuição normal, indicando que o modelo pode melhorar seu ajuste ao abrandar as suposições de normalidade.
Especificamente, embora seja mais comum usar uma distribuição normal para modelar as notas no dataset InstEval
, uma análise mais detalhada dos dados revela que as notas de avaliação dos cursos são, na verdade, valores ordinais de 1 a 5, o que indica que devemos usar uma distribuição ordinal ou até mesmo de categoria se tivermos dados suficientes para descartar a ordenação relativa. É necessário alterar somente uma linha do modelo acima; o mesmo código de inferência é aplicável.
Para ver como o modelo faz previsões específicas, avaliamos o histograma dos efeitos para alunos, professores e departamentos, o que nos permite compreender como os elementos individuais em um vetor de características de um ponto de dados tendem a influenciar o resultado.
Sem surpresa nenhuma, podemos ver abaixo que, tipicamente, cada aluno tem pouco efeito na nota de avaliação de um professor. É interessante notar que o departamento do professor tem um grande efeito.
Notas de rodapé
¹ Os modelos lineares de efeitos mistos são um caso especial em que podemos computar analiticamente sua densidade marginal. Para a finalidade deste tutorial, demonstramos o EM de Monte Carlo, que se aplica melhor a densidades marginais não analíticas se a verossimilhança for estendida para ser de categoria em vez de normal, por exemplo.
² Por questões de simplicidade, formamos a média da distribuição preditiva usando somente um passo para frente do modelo, o que é feito por meio do condicionamento da média posterior e é válido para modelos lineares de efeitos mistos. Porém, isso não é válido de forma geral: a média da distribuição preditiva posterior é tipicamente intratável e requer o cálculo da média empírica entre diversos passos para frente do modelo dadas amostras posteriores.
Agradecimentos
Este tutorial foi escrito originalmente em Edward 1.0 (fonte). Agradecemos a todos os contribuidores por escreverem e revisarem essa versão.
Referências
Douglas Bates e Martin Machler, Ben Bolker e Steve Walker. Fitting Linear Mixed-Effects Models Using lme4 (Ajuste de modelos lineares de efeitos mistos usando o lme4). Journal of Statistical Software, 67(1):1-48, 2015.
Arthur P. Dempster, Nan M. Laird e Donald B. Rubin. Maximum likelihood from incomplete data via the EM algorithm (Máxima verossimilhança a partir de dados incompletos pelo algoritmo de EM). Journal of the Royal Statistical Society, Series B (Methodological), 1-38, 1977.
Andrew Gelman e Jennifer Hill. Data analysis using regression and multilevel/hierarchical models (Análise de dados usando modelos de regressão e hierárquicos/multiníveis). Cambridge University Press, 2006.
David A. Harville. Maximum likelihood approaches to variance component estimation and to related problems (Estratégias de máxima verossimilhança para estimativa de componente de variância e problemas relacionados). Journal of the American Statistical Association, 72(358):320-338, 1977.
Michael I. Jordan. An Introduction to Graphical Models (Introdução a modelos gráficos). Technical Report, 2003.
Nan M. Laird e James Ware. Random-effects models for longitudinal data (Modelos de efeitos aleatórios para dados longitudinais). Biometrics, 963-974, 1982.
Greg Wei e Martin A. Tanner. A Monte Carlo implementation of the EM algorithm and the poor man's data augmentation algorithms (Implementação de Monte Carlo do algoritmo de EM e algoritmos de dados com restrição de recursos). Journal of the American Statistical Association, 699-704, 1990.