Tabela de conteúdos
CE-225 - Segundo semestre de 2012
No quadro abaixo será anotado o conteúdo dado em cada aula do curso.
É indicado material para leitura correspondente ao conteúdo da aula nas referências bibliográficas básicas do curso:
- T & S: M. Antónia Amaral Turkman & Giovani Loiola Silva
- C & D: Gauss M. Cordeiro & Clarice G. B. Demétrio
- P: Gilberto A. Paula
| T & S | C & D | P | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Data | Local | Conteúdo | Leitura | Exercícios | Leitura | Exercícios | Leitura | Exercícios | |
| Introdução | |||||||||
| 31/10 | PA-03 | Introdução geral à disciplina | |||||||
| 07/11 | PA-03 | Modelo Linear. Método dos mínimos quadrados. Método da máxima verossimilhança. | |||||||
| 09/11 | PA-03 | Propriedades dos estimadores de máxima verossimilhança | |||||||
| 14/11 | PA-03 | Família Exponencial de distribuições | |||||||
| 21/11 | PA-03 | Definição dos Modelos lineares generalizados | |||||||
| 23/11 | LABEST | Modelo linear: aplicação a peso de nascidos vivos em 2010 (script) | |||||||
| 28/11 | PA-03 | Revisão | |||||||
| 30/11 | LABEST | Algoritmo de Fisher e aplicação (script) e contas matriciais em R (|script) | |||||||
| 05/12 | PA-03 | Avaliação 1 | |||||||
| 07/12 | PA-03 | Correção da avaliação 1 | |||||||
| 12/12 | PA-03 | Estimação: Algoritmo IWLS - definições | |||||||
| 14/12 | LABEST | Estimação: Algoritmo IWLS - exemplos (script) | |||||||
| 23/01 | PA-03 | Modelagem estatística: de LM's a GLM's | |||||||
| 25/01 | PA-03 | Comparando modelos e estratégias de modelagem em determinados problemas - em quais aspectos os modelos são diferentes? Modelos lineares, linearizáveis, não lineares, normais e não normais. Avaliação e comparação de ajustes de modelos. | |||||||
| 30/01 | LABEST | Exemplos de problemas sob a forma de GLM's (VER ABAIXO) | |||||||
| 01/02 | LABEST | Interpretações de resultados das análises (VER ABAIXO) | |||||||
| 06/02 | PA-03 | Testes de hipótese em GLM e tipos de resíduos, com ênfase em de Pearson e de Deviance (VER ABAIXO) | |||||||
| 15/02 | LABEST | Análise de tabelas de contingência. Distribuições e modelos alternativos e equivalências em análise via GLM | |||||||
| 20/02 | atividades de estudo | (ver abaixo) | |||||||
| 22/02 | atividades de estudo | (ver abaixo) | |||||||
| 27/02 | PA-03 | Outros GLM's - estendendo GLM usuais - modelos com dispersão, modelagem de média e variância, quasi verosimilhança, superdispersão e efeitos aleatórios | |||||||
| 01/03 | LABEST | exemplos de "outros" GLM's. Ex: Escolha da modelo, modelo binomial negativo e quasipoisson (ver abaixo) | |||||||
30/01 e 01/02
Considere o conjunto de dados "heart" Sobre número de pacientes com e sem ataque cardíaco para diferentes níveis da enzima creatinina kinase no sangue. O objetivo é examinar se os níveis da enzima podem ser utilizados como auxiliares de diagnóstico.
Ataque cardíaco
------------------
CK Sim Nao
-----------------------------------
20 2 88
60 13 26
100 30 8
140 30 5
180 21 0
220 19 1
260 18 1
300 13 1
340 19 1
380 15 0
420 7 0
460 8 0
----------------------------------
Analise os dados. A seguir são dadas algumas (mas não todas!) questões que podem ser consideradas nas análises.
- Qual modelo (GLM) poderia ser adotado?
- Que gráficos exploratórios poderiam ser feitos?
- Como pode-se investigar o efeito da CK ?
- O modelo NULO é suficiente para explicar os dados?
- O modelo COMPLETO superior ao NULO para explicar os dados?
- Como podemos avaliar a qualidade do ajuste do modelo completo?
- Como podemos detarminar se a covariável é realmente relevante?
- Como obter intervalos para os parâmetros?
- Como obter, avaliar e fazer gráficos do modelo predito?
- Como avaliar diferentes opções para função de ligação?
- Como avaliar se a linearidade das covariáveis selecionadas? (por exemplo, uma função quadrática ou cúbica no modelo linear seria melhor?)
infarto <- read.table("clipboard")
infarto
names(infarto) <- c("CK","S","N")
infarto
infarto <- transform(infarto, prop = S/(S+N))
with(infarto, plot(prop ~ CK))
mod0 <- glm(cbind(S,N) ~ 1, family=binomial, data=infarto)
mod0
summary(mod0)
logLik(mod0)
deviance(mod0)
mod1 <- glm(cbind(S,N) ~ CK, family=binomial, data=infarto)
mod1
summary(mod1)
logLik(mod1)
deviance(mod1)
anova(mod1)
anova(mod1, test="Chisq")
-2*(logLik(mod0) - logLik(mod1))
(pred1 <- predict(mod1))
(pl <- with(infarto, coef(mod1)[1] + coef(mod1)[2] * CK))
with(infarto,plot(prop/(1-prop), pred1, asp=1)); abline(0,1)
(pred1p <- predict(mod1, type="response"))
exp(pl)/(1+exp(pl))
with(infarto,plot(prop , pred1p, asp=1)); abline(0,1)
(pred1y <- with(infarto, (S+N)*pred1p))
cbind(infarto$S, pred1y)
plot(infarto$S, pred1y, asp=1); abline(0,1)
with(infarto, plot(prop/(1-prop) ~ CK))
with(infarto, lines(pred1 ~ CK, type="b"))
with(infarto, plot(prop/(1-prop), pred1)); abline(0,1)
with(infarto, plot(prop ~ CK))
with(infarto, lines(pred1y ~ CK, type="b", col=2, pch=19, cex=0.5))
with(infarto, plot(prop, pred1y)); abline(0,1)
mod2 <- glm(cbind(S,N) ~ CK + I(CK^2), family=binomial, data=infarto)
mod3 <- glm(cbind(S,N) ~ CK + I(CK^2) + I(CK^3), family=binomial, data=infarto)
mod12 <- glm(cbind(S,N) ~ as.factor(CK), family=binomial, data=infarto)
(pred12p <- predict(mod12, type="response"))
infarto$prop
c(logLik(mod0), logLik(mod1), logLik(mod2), logLik(mod3), logLik(mod12))
anova(mod0, mod1, mod2, mod3, mod12)
anova(mod0, mod1, mod2, mod3, mod12, test="Chisq")
mod1b <- glm(cbind(S,N) ~ CK, family=binomial(link="probit"), data=infarto)
mod1c <- glm(cbind(S,N) ~ CK, family=binomial(link="cauchit"), data=infarto)
logLik(mod1a)
logLik(mod1b)
logLik(mod1c)
mod3a <- glm(cbind(S,N) ~ poly(CK, 3), family=binomial, data=infarto)
mod3
mod3a
logLik(mod3)
logLik(mod3a)
deviance(mod3)
deviance(mod3a)
summary(mod3)
summary(mod3a)
anova(mod3)
anova(mod3a)
mod3b <- glm(cbind(S,N) ~ poly(CK, 3), family=binomial(link="probit"), data=infarto)
mod3c <- glm(cbind(S,N) ~ poly(CK, 3), family=binomial(link="cauchit"), data=infarto)
logLik(mod3a)
logLik(mod3b)
logLik(mod3c)
deviance(mod0)
-2*(logLik(mod0) - logLik(mod12))
deviance(mod1)
-2*(logLik(mod1) - logLik(mod12))
deviance(mod2)
-2*(logLik(mod2) - logLik(mod12))
deviance(mod3)
-2*(logLik(mod3) - logLik(mod12))
require(mgcv)
modgam <- gam(cbind(S,N) ~ s(CK), family=binomial, data=infarto)
modgam
logLik(modgam)
deviance(modgam)
plot(modgam)
with(infarto, plot(predict(modgam) ~ CK))
with(infarto, points(log(prop/(1-prop)) ~ CK))
## Fazer graficos de ajuste para o modelo 3 !!!
–
Considere o conjunto de dados "gala" com pacote "faraway"
require(faraway) data(gala) head(gala) help(gala)Nosso objetivo é montar um modelo para tentar explicar a variável resposta "número de especies" pelas demais variáveis disponíveis.
Vamos utilizar a função glm() do R, e seguem algumas sugestões (não exaustivas!!!) de tópicos a serem explorados pelas análises.
- Qual modelo (GLM) poderia ser adotado?
- Que gráficos exploratórios poderiam ser feitos?
- O modelo NULO é suficiente para explicar os dados?
- O modelo COMPLETO superior ao NULO para explicar os dados?
- Como podemos avaliar a qualidade do ajuste do modelo completo?
- Como podemos selecionar as covariáveis realmente relevantes?
- Como obter intervalos para os parâmetros?
- Como obter, avaliar e fazer gráficos do modelo predito?
- Como avaliar diferentes opções para função de ligação?
- Como avaliar se a linearidade das covariáveis selecionadas? (por exemplo um modelo com log(Area) seria melhor?)
06/02 e 08/02
Exemplo 1
A tabela abaixo apresenta dados de um estudo sobre "Acreditar em Vida Após a Morte" retirados de Wood (2006).
O interesse aqui é utilizar estes dados para investigar se a crença está associada com o sexo.
Embora várias abordagens e testes estatísticos sejam possíveis, nosso interesse investigar o problema a partir da
especificação de GLM. Procure propor um GLM para o estudo, interpretar o(s) modelo(s) proposto(s), o nulo, o saturado,
interpretando as quantidades de interesse nas análises e ainda comparando com resultados de outro(s) procedimento(s).
Acredita
-------------------
Sexo Sim Não
------------------------------
F 435 147
M 375 134
------------------------------
M <- cbind(c(435, 375), c(147, 134))
dimnames(M) <- list(c("F", "M"), c("S", "N"))
M
chisq.test(M)
addmargins(M)
Mesp <- outer(rowSums(M), colSums(M))/sum(M)
Mesp
(Chi2 <- sum(((M - Mesp)^2)/Mesp))
chisq.test(M, correct=F)
vam <- data.frame(Y=as.vector(M), Sexo = rownames(M), Acredita=rep(colnames(M), each=2))
vam
## Modelo 0
## Modelo 1: (independência)
## E(Y) = mu = n * Sexo * Acredita
## log(mu) = log(n) + log(Sexo) + log(Acredita)
mod1 <- glm(Y ~ Sexo + Acredita, family=poisson(link="log"), data=vam)
model.matrix(mod1)
mod1
fitted(mod1)
Mesp
resid(mod1, type="pearson")
(M - Mesp)/sqrt(Mesp)
sum(resid(mod1, type="pearson")^2)
resid(mod1, type="deviance")
sum(resid(mod1, type="deviance")^2)
## Modelo 2: não independência
mod2 <- glm(Y ~ Sexo * Acredita, family=poisson, data=vam)
model.matrix(mod2)
mod2
fitted(mod2)
M
anova(mod1, mod2, test="Chisq")
## extensível a várias dimensões - modelos log-lineares
# sob link canônico X'y = X'\hat{mu}
# - marginais preditas iguais a observadas em mod1
Exemplo 2
Novos casos de AIDS na Bélgica de 1981 a 1993.
Modelo Epidêmico (Venables & Ripley, MASS).
Interesse: A taxa de novos casos está reduzindo?
aids <- data.frame(
y = c(12,14,33,50,67,74,123,141,165,204,253,246,240),
ano = 1:13
)
aids
with(aids, plot(y ~ I(1980 + ano)))
Considere um modelo em que o número esperado de novos casos por ano seja:
Ajuste o modelo fazendo suposições necessárias e adequadas.
Procure avaliar a qualidade de ajuste e possíveis formas de tentar melhorar o ajuste com os dados disponíveis.
Represente o(s) modelo(s) ajustados graficamente (na escala das observações) procurando incluir no gráfico a incerteza das previsões
# mu_i = a . exp(b*ano_i) # log(mu_i) = log(a) + b*ano_i = \beta_0 + \beta_1 * ano_i m1 <- glm(y ~ ano, family=poisson, data=aids) m1 summary(m1) plot(resid(m1) ~fitted(m1)) lines(lowess(resid(m1) ~fitted(m1))) par(mfrow=c(2,2)) plot(m1) par(mfrow=c(1,1)) ## tentando melhorar o ajuste m2 <- glm(y ~ ano + I(ano^2), family=poisson, data=aids) m2 summary(m2) anova(m1,m2, test="Chisq") # nao faz sentido aqui mas é util com variaveis diferentes drop1(m2) drop1(m2, test="Chisq") ano.seq <- seq(1,13, l=100) ypred <- predict(m2, data.frame(ano=ano.seq), se=TRUE) str(ypred) with(aids, plot(y ~ I(1980 + ano), ylim=c(0,280))) lines(exp(ypred$fit) ~ I(ano.seq+1980)) lines(exp(ypred$fit - 2*ypred$se.fit) ~ I(ano.seq+1980), lty=2) lines(exp(ypred$fit + 2*ypred$se.fit) ~ I(ano.seq+1980), lty=2)
20/02
- Obter as funções de verossimilhança para os quatro modelos discutidos em aula para tabelas de contingência
- proceder as análises com cada um dos modelos usando algum ambiente computacional
- Examinar e justificar a razão pela qual podem ser ajustados com GLM com família Poisson
- Comparar e discutir semelhanças e diferenças entre o ajuste de GLM com outros procedimentos (teste exato de fisher, teste chi-quadrado)
22/02
- Mostrar como quantidades de interesse (predição) podem ser obtidas. Utilizar os exemplos vistos em aula.
- Mostrar como obter as predições na escala da resposta e da função de ligação
- Mostrar como obter os intervalos de predição
- Verificar os resultados com os retornados pela função
predict()do R - Algumas sugestões:
- como calcular os valores da curva de valores ajustados nos exemplos da creatinina vs infarto e no de "novos casos de AIDS na Bélgica". Ainda neste exemplo, como estimar a dose associada a uma certa probabilidade fixada de morte?
- como calcular as contagens esperadas no exemplo de crença vc sexo ?
01/03
Comandos do exemplo discutido em aula
## carregando o conjunto de dados DHF99 do pacote epicalc require(epicalc) data(DHF99) head(DHF99) help(DHF99) summary(DHF99) summary(DHF99) ## a variável village está como numérica mas de fato é um fator DHF99$village <- as.factor(DHF99$village) summary(DHF99) ## ## Ajustando GLM's glm1 <- glm(containers ~ village + education, data=DHF99, family=poisson) glm1 summary(glm1) anova(glm1) ## ## vamos usar agora apenas a informação do tipo de vila glm2 <- glm(containers ~ viltype + education, data=DHF99, family=poisson) glm2 summary(glm1) anova(glm1) ## ## comparando os ajustes anova(glm2, glm1, test="Chisq") ## Portanto a informação individual de cada vila é relevante. ## Entretanto, como exemplo vamos supor que não dispomos da informação individual ## e apenas o tipo de vila. ## Neste caso o ajuste não é bom e vamos tentar alternativas ## 1. Modelo com interação glm3 <- glm(containers ~ viltype * education, data=DHF99, family=poisson) anova(glm2, glm3, test="Chisq") anova(glm2, glm3, test="F") ## 2. Modelo Binomial negativo require(MASS) glm2BN <- glm.nb(containers ~ viltype + education, data=DHF99) glm2BN c(poisson=logLik(glm2), BN=logLik(glm2BN)) c(poisson=deviance(glm2), BN=deviance(glm2BN)) c(poisson=AIC(glm2), BN=AIC(glm2BN)) ## comparando os coeficientes e erros padrão summary(glm2) summary(glm2BN) ## 3. Modelo quasipoisson glm2Q <- glm(containers ~ viltype + education, data=DHF99, family=quasipoisson) ## comparando os coeficientes e erros padrão summary(glm2) summary(glm2Q) ## Note que os ajustes poderiam ser avaliados em mais detalhes par(mfrow=c(2,2)) plot(glm1) plot(glm2) plot(glm3) plot(glm2BN) ## ## As análises poderiam prosseguir de diversas formas. Alguns exemplos: ## - avaliando ainda outros modelos como por exemplo inflacionados de de zeros, hurdle . ## - verificando a relevância das covariáveis (e.g education) ## - Caso as vilas fossem consideradas poderia-se avaliar modelos mistos como vilas como efeito aleatórios