Valeska Andreozzi 1 Modelo Linear Generalizado Distribuição de Poisson Problema 1 O objetivo desta aula é exemplificar a modelagem de dados de contagem. Vamos ilustrar como os modelos lineares generalizados podem ser utilizados para estimar razões de taxas. Distribuição de Poisson Para dados de contagem assumimos que a variável resposta segue uma distribuição de Poisson com parâmetro µ dada pela fórmula: Pr(y;µ) = µy exp( µ) y! Y = 0,1,, (1) Teoricamente uma variável aleatória com distribuição de Poisson pode assumir qualquer valor inteiro maior ou igual a zero. Da equação 1 temos que a probabilidade de Y ser igual a 5 é igual a: Pr(y;µ) = µ5 exp( µ) 5! = µ5 exp( µ) 120 (2) Observe que a probabilidade de Y = 5 depende do parâmetro µ, que por sua vez pode depender de covariáveis. A distribuição de Poisson tem como características que E(Y) = Var(Y) = µ e é geralmente utilizada para ocorrência de eventos raros. Da teoria estatística temos que a distribuição de Poisson é uma boa aproximação da distribuição binomial para eventos raros (número de ensaios tende para infinito e probabilidade sucesso tende para zero). Considere o exemplo: Estudar a relação entre o risco de doença isquêmica do coração (DIC) e diversos indicadores socioeconômicos (nível ecológico), tendo como unidade de análise os 153 bairros do Rio de Janeiro. Lendo o banco cardiorio.dat > rio <- read.table("cardiorio.dat",header=t) Dicionário das variáveis bairro - nome do bairro do Rio de Janeiro pfave - proporção da população que vive em favelas no bairro prede - proporção de casas ligadas à rede pública de água
Valeska Andreozzi 2 pesgred - proporção de casas ligadas à rede pública de esgotos pcaluga - proporção de casas alugadas plixocol - proporção de casas com coleta regular de lixo pesc1g - proporção de chefes de família com primeiro grau completo palftot - proporção da população que é alfabetizada obt3070 - número de óbitos por doença isquêmica do coração entre 30 e 70 anos pop3070 - população entre 30 e 70 anos rndm2sm - proporção de chefes de família com renda média até 2 salários mínimos rndm15sm - proporção de chefes de família com renda média acima de 15 salários mínimos Listando o número de óbitos e a população dos primeiros 10 bairros podemos observar que o número de casos é pequeno em relação a população, indicando um evento raro e que a distribuição da variável resposta Y pode ser a Poisson. > rio[1:10,c("bairro","obt3070","pop3070")] bairro obt3070 pop3070 1 SAUDE 1 1133 2 GAMBOA 7 4934 3 SANTO CRISTO 9 5737 4 CAJU 6 6935 5 CENTRO 43 26149 6 CATUMBI 13 5587 7 RIO COMPRIDO 16 18518 8 CIDADE NOVA 5 3639 9 ESTACIO 17 8273 10 SAO CRISTOVAO 30 19264 Modelando taxa A distribuição de Poisson também é muito utilizada para modelar taxas. Suponha que a taxa de mortalidade de DIC por tempo de observação seja dada por λ = µ l (3) em que µ é o número de eventos esperados (número de casos de uma determinada doença) e l é a quantidade total de pessoa-tempo (exemplo: tempo total de pessoas em risco de ter a doença) em cada subgrupo de interesse. No exemplo da DIC, temos uma estimativa de risco ao invés de taxa, pois l é igual a população de cada bairro.
Valeska Andreozzi 3 Suponha que os dados do exemplo da DIC tenham sido obtidos através do acompanhamento ao longo de um ano em que, ao invés de população, tivéssemos pessoa-tempo e quiséssemos modelar a taxa de DIC. Neste caso teríamos o seguinte modelo: log(λ i = β 0 +β 1 x i1 +β 2 x i2 ( ) µi log = β 0 +β 1 x i1 +β 2 x i2 l i log(µ i ) log(l i ) = β 0 +β 1 x i1 +β 2 x i2 log(µ i ) = log(l i )+β 0 +β 1 x i1 +β 2 x i2 (4) Tecnicamente, assumindo um processo de Poisson com intensidade λ, tem-se para a contagem Y no intervalo de tempo l uma distribuição de Poisson Y i Poisson(l i λ i ). Consequentemente, a média µ i = l i λ i depende do intervalo de tempo l i. Seja a dependência da intensidade λ em relação as covariáveis da forma log-linear (log(λ i )), então o E(Y i ) = µ i é dado por log(µ i ) = log(l i )+β 0 +β 1 x i1 +β 2 x i2 (5) A equação (4) ilustra a forma de modelar a taxa tendo como dados a contagem e pessoa-tempo (ou população). Este último dado é conhecido como offset, pois não lhe é atribuído nenhum coeficiente a ser estimado. Resumindo, temos: Y i Poisson(µ i ) λ i = µ i l i log(µ i ) = log(l i )+β 0 +β 1 x i1 +β 2 x i2 Faça uma análise exploratória das variáveis do banco. > summary(rio) bairro pfave prede ABOLICAO : 1 Min. :0.00000 Min. :0.0000 ACARI : 1 1st Qu.:0.02504 1st Qu.:0.9706 AGUA SANTA : 1 Median :0.08928 Median :0.9875 ALTO DA BOA VISTA: 1 Mean :0.15992 Mean :0.9594 ANCHIETA : 1 3rd Qu.:0.21715 3rd Qu.:0.9960 ANDARAI : 1 Max. :0.90407 Max. :1.0000 (Other) :147 pesgred pcaluga plixocol Min. :0.00191 Min. :0.0000 Min. :0.1364
Valeska Andreozzi 4 1st Qu.:0.74042 1st Qu.:0.1886 1st Qu.:0.9393 Median :0.89767 Median :0.2483 Median :0.9797 Mean :0.73820 Mean :0.2562 Mean :0.9461 3rd Qu.:0.96575 3rd Qu.:0.3131 3rd Qu.:0.9949 Max. :1.00000 Max. :0.6683 Max. :1.0000 pesc1g palftot obt3070 Min. :0.0909 Min. :0.6837 Min. : 0.00 1st Qu.:0.4114 1st Qu.:0.8873 1st Qu.: 5.00 Median :0.5018 Median :0.9208 Median : 12.00 Mean :0.5307 Mean :0.9115 Mean : 18.07 3rd Qu.:0.6864 3rd Qu.:0.9476 3rd Qu.: 24.00 Max. :0.8935 Max. :0.9772 Max. :125.00 pop3070 rndm2sm rndm15sm Min. : 31 Min. :0.0556 Min. :0.0009 1st Qu.: 5272 1st Qu.:0.2637 1st Qu.:0.0111 Median : 10588 Median :0.4230 Median :0.0312 Mean : 15899 Mean :0.3993 Mean :0.0807 3rd Qu.: 20925 3rd Qu.:0.5220 3rd Qu.:0.0897 Max. :100804 Max. :0.7358 Max. :0.5594 > hist(rio$obt3070,main="óbitos",xlab="óbitos",ylab="frequ^encia")
Valeska Andreozzi 5 Óbitos frequência 0 10 20 30 40 50 60 70 0 20 40 60 80 100 120 óbitos Multicolinearidade Multicolinearidade é o grau de correlação existente entre as covariáveis. Uma correlação forte entre covariáveis produz grande variabilidade nas estimativas dos coeficientes de regressão. Especificamente, os coeficientes podem mudar drasticamente dependendo que termos estão dentro ou fora do modelo ou em que ordem eles foram introduzidos no modelo. Uma forma de avaliar a multicolinearidade é através do gráfico de dispersão ou da matriz de correlação. Uma outra alternativa é calcular o VIF (Variance Inflation factor). O VIF fornece uma medida de quanto a variância da estimativa dos coeficientes é inflacionada comparado quando as covariáveis não estão linearmente dependente. VIF p = 1 1 R 2 p em que Rp 2 é um coeficiente de determinação múltipla da regressão da covariável X p em todas as outras covariáveis. Suponha 3 covariáveis, X 1, X 2, X 3. R1 2 é igual ao coeficiente de determinação da regressão X 1 X 2 +X 3, e assim sucessivamente. Quando VIF p 1, isto é, R 2 p 0, temos que as covariáveis são independentes e quando VIF p é maior que 10 implica que as covariáveis estão linearmente dependente (este ponto de corte é arbitrário). A raiz quadrada de VIF p pode ser interpretada como uma aproximação de quantas
Valeska Andreozzi 6 vezes o erro padrão da covariável X p está aumentado comparado com o seu erro padrão caso não houvesse colinearidade. O que fazer quando multicolinearidade está presente: 1. Ignorar o problema. Quanto o objetivo da análise é predição, os resultado devem ser adequados. 2. Aumentar o tamanho da amostra, principalmente se os dados são poucos. Isto pode reduzir a correlação entre as covariáveis. 3. Não considerar algumas variáveis e ajustar um modelo mais simples. 4. Recodificar a covariável ou usar uma proxy. Avalie a multicolinearidade entre as covariáveis através do diagrama de dispersão > plot(rio[,c(2:8,11:12)]) 0.0 0.8 0.0 0.5 0.2 0.8 0.1 0.6 pfave 0.0 0.6 0.0 0.8 prede pesgred 0.0 0.8 0.0 0.5 pcaluga plixocol 0.2 0.8 0.2 0.8 pesc1g palftot 0.70 0.95 0.1 0.6 rndm2sm rndm15sm 0.0 0.4 0.0 0.6 0.0 0.8 0.2 0.8 0.70 0.95 0.0 0.4 Verifique a correlação entre as covariáveis > correlacao<-cor(rio[,c(2:8,11:12)]) > round(correlacao,digits=2)
Valeska Andreozzi 7 pfave prede pesgred pcaluga plixocol pesc1g palftot pfave 1.00-0.07-0.11-0.29-0.09-0.56-0.65 prede -0.07 1.00 0.40 0.37 0.82 0.34 0.57 pesgred -0.11 0.40 1.00 0.50 0.53 0.42 0.49 pcaluga -0.29 0.37 0.50 1.00 0.41 0.29 0.46 plixocol -0.09 0.82 0.53 0.41 1.00 0.49 0.66 pesc1g -0.56 0.34 0.42 0.29 0.49 1.00 0.85 palftot -0.65 0.57 0.49 0.46 0.66 0.85 1.00 rndm2sm 0.58-0.24-0.35-0.21-0.41-0.97-0.79 rndm15sm -0.25 0.02 0.16-0.08 0.16 0.74 0.40 rndm2sm rndm15sm pfave 0.58-0.25 prede -0.24 0.02 pesgred -0.35 0.16 pcaluga -0.21-0.08 plixocol -0.41 0.16 pesc1g -0.97 0.74 palftot -0.79 0.40 rndm2sm 1.00-0.73 rndm15sm -0.73 1.00 Calcule o VIF para avaliar a multicolinearidade > library(rms) > vif(glm(obt3070~pfave+prede+pesgred+pcaluga+plixocol+ + pesc1g+palftot+rndm2sm+rndm15sm, family=poisson, data=rio)) pfave prede pesgred pcaluga plixocol pesc1g 2.699517 2.055002 1.707209 1.587473 2.576274 38.503206 palftot rndm2sm rndm15sm 10.903771 24.841433 4.293883 > vif(glm(obt3070~pfave+prede+pesgred+pcaluga+plixocol+ + palftot+rndm2sm+rndm15sm, family=poisson, data=rio)) pfave prede pesgred pcaluga plixocol palftot rndm2sm 2.676341 2.062273 1.725117 1.503600 2.612693 8.579149 7.503678 rndm15sm 2.841414 Qual seria sua hipótese para relacionar óbito por DIC e situação socioeconômica? Resp.:Parece que ao retirar a variável escolaridade pesc1g resolve o problema de colinearidade.
Valeska Andreozzi 8 A variável prede (proporção de casas ligadas à rede pública de água) é quase toda acima de 95%. Sugerimos usá-la como covariável categórica > rio$redecat <- ifelse(rio$prede>.95,1,0) Por que devemos modelar a taxa de mortalidade de DIC ao invés do número de óbitos por DIC? Resposta: Devemos modelar a taxa pois a população dos bairros são diferentes, logo 10 óbitos num bairro com 10 mil habitantes é diferente de 10 óbitos ocorridos num bairro com uma população de mil habitantes E vamos ao modelo linear generalizado. Para covariáveis com correlação alta, escolha somente uma delas para incluir no modelo. Sua escolha pode basear-se: na importância epidemiológica das covariáveis, nos resultados dos modelos de regressão bivariados nas estimativas dos coeficientes de regressão (β s) com maior significância estatística no VIF Para modelar a taxa devemos incluir no modelo um offset igual ao logaritmo da população. > rio.glm1 <- glm(obt3070~ pfave + offset(log(pop3070)), + data=rio, family=poisson) Experimente outros modelos com uma só variável explicativa. Olhando a tabela abaixo, qual variável você acrescentaria primeiro no modelo? Pare este efeito será criado uma função que resulta na análise de deviance de cada modelo com uma só covariável comparado com o modelo nulo. Criando uma função para montar esta tabela. A função deviancef tem como argumento o número da coluna da covariável que será acrescentada no modelo referência. > deviancef<-function(x){ + modelref<-glm(obt3070~ offset(log(pop3070)), data=rio, family=poisson) + modelo<-glm(obt3070~rio[,x]+offset(log(pop3070)), data=rio, family=poisson) + teste<-anova(modelref,modelo,test="chisq") + resp<-teste[2,] + resp + } > variaveis<-c(2,4:8,13) > x<-t(sapply(variaveis,deviancef)) > resultado<-data.frame(names(rio[variaveis]),x) > names(resultado)<-c("variável",attributes(x)$dimnames[[2]]) > resultado
Valeska Andreozzi 9 Variável Resid. Df Resid. Dev Df Deviance Pr(>Chi) 1 pfave 151 263.5179 1 26.12927 3.193064e-07 2 pesgred 151 273.0289 1 16.61833 4.570718e-05 3 pcaluga 151 233.0964 1 56.55083 5.476422e-14 4 plixocol 151 286.9938 1 2.653375 0.1033303 5 pesc1g 151 281.6482 1 7.999023 0.00468026 6 palftot 151 265.4407 1 24.20655 8.653754e-07 7 redecat 151 286.6368 1 3.010408 0.08273147 A função seguinte resulta na análise de deviance ao se acrescentar mais uma covariável no modelo que possui somente a covariável pcaluga, pois foi essa variável que na análise anterior reduziu mais a função desvio e de forma significativa. > deviancef<-function(x){ + modelref<- glm(obt3070~pcaluga+ offset(log(pop3070)), data=rio, family=poisson) + modelo<-glm(obt3070~rio[,x]+pcaluga+offset(log(pop3070)), data=rio, family=poisson) + teste<-anova(modelref,modelo,test="chisq") + resp<-teste[2,] + resp + } > > variaveis<-c(2,4,6:8,13) > x<-t(sapply(variaveis,deviancef)) > resultado<-data.frame(paste(names(rio[variaveis]),"+ pcaluga"),x) > names(resultado)<-c("variável",attributes(x)$dimnames[[2]]) > resultado Variável Resid. Df Resid. Dev Df Deviance 1 pfave + pcaluga 150 220.6995 1 12.39685 2 pesgred + pcaluga 150 233.0948 1 0.001559777 3 plixocol + pcaluga 150 231.4248 1 1.671561 4 pesc1g + pcaluga 150 233.0363 1 0.06010507 5 palftot + pcaluga 150 230.2072 1 2.88921 6 redecat + pcaluga 150 232.9191 1 0.177295 Pr(>Chi) 1 0.0004300592 2 0.9684965 3 0.1960495 4 0.8063299 5 0.08917464 6 0.6737083 Na tabela de análise de deviance, temos que a variável pfave é a única que contribui para um aumento do deviance de forma significativa.
Valeska Andreozzi 10 > rio.glm2 <- glm(obt3070~pcaluga+pfave+ offset(log(pop3070)), data=rio, family=poisson > summary(rio.glm2) Call: glm(formula = obt3070 ~ pcaluga + pfave + offset(log(pop3070)), family = poisson, data = rio) Deviance Residuals: Min 1Q Median 3Q Max -3.8229-0.7889-0.0845 0.5906 3.1231 Coefficients: Estimate Std. Error z value Pr(> z ) (Intercept) -7.06331 0.06193-114.053 < 2e-16 *** pcaluga 1.35920 0.20363 6.675 2.47e-11 *** pfave -0.44127 0.12826-3.440 0.000581 *** --- Signif. codes: 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 (Dispersion parameter for poisson family taken to be 1) Null deviance: 289.65 on 152 degrees of freedom Residual deviance: 220.70 on 150 degrees of freedom AIC: 863.72 Number of Fisher Scoring iterations: 4 Vamos agora interprete o modelo acima estimado. As covariáveis pcaluga e pfave são proporções que variam entre 0 e 1. Logo, devemos levar em conta esse domínio da covariável na intrepretação do modelo. Para facilitar o processo de interpretação, vamos escrever a equação do modelo ajustado: Y i = óbitos por DIC Pois(λ i ) E(Y i ) = λ i Var(Y i ) = λ i λ i = µ i pop i ln(λ i ) = 7.06331+1.35920pcaluga i 0.44127pfave i Podemos dizer que para um aumento de 10% na proporção de casas alugas, a taxa de óbito por DIC aumenta 14% (exp(β 1 0.10) = exp(1.35920 0.10) = 1.14).
Valeska Andreozzi 11 Já um aumento na proporção da população que vive em favelas, temos uma redução na taxa de óbito por DIC de 5% (exp(β 2 0.10) = exp( 0.44127.10) = 0.95). Poderíamos continuar selecionando variáveis da forma anterior (análise de deviance) ou utilizar o processo stepwise. Para facilitar a utilização da função step(), criamos um novo objeto (rio2) que não possui o nome do bairro e a variável prede > rio2 <- rio[,c(2,4:13)] > rio.glm <-glm(obt3070~pfave + pesgred + pcaluga + plixocol + pesc1g + + palftot + rndm2sm + rndm15sm + redecat + offset(log(pop3070)), + data=rio2, family=poisson) > rio.glm3 <- step(rio.glm, direction="both") Start: AIC=854.26 obt3070 ~ pfave + pesgred + pcaluga + plixocol + pesc1g + palftot + rndm2sm + rndm15sm + redecat + offset(log(pop3070)) Df Deviance AIC - redecat 1 197.24 852.26 - palftot 1 197.41 852.43 - plixocol 1 198.69 853.70 - pesgred 1 198.69 853.71 <none> 197.24 854.26 - pfave 1 202.14 857.16 - rndm2sm 1 203.59 858.61 - pesc1g 1 205.59 860.61 - rndm15sm 1 207.05 862.07 - pcaluga 1 210.08 865.10 Step: AIC=852.26 obt3070 ~ pfave + pesgred + pcaluga + plixocol + pesc1g + palftot + rndm2sm + rndm15sm + offset(log(pop3070)) Df Deviance AIC - palftot 1 197.41 850.43 - pesgred 1 198.69 851.71 - plixocol 1 198.93 851.95 <none> 197.24 852.26 + redecat 1 197.24 854.26 - pfave 1 202.15 855.17 - rndm2sm 1 203.62 856.64 - pesc1g 1 205.59 858.61 - rndm15sm 1 207.05 860.07
Valeska Andreozzi 12 - pcaluga 1 210.14 863.16 Step: AIC=850.43 obt3070 ~ pfave + pesgred + pcaluga + plixocol + pesc1g + rndm2sm + rndm15sm + offset(log(pop3070)) Df Deviance AIC - pesgred 1 198.71 849.73 <none> 197.41 850.43 - plixocol 1 200.10 851.12 + palftot 1 197.24 852.26 + redecat 1 197.41 852.43 - rndm2sm 1 203.76 854.78 - pfave 1 204.17 855.19 - pesc1g 1 206.08 857.10 - rndm15sm 1 207.80 858.82 - pcaluga 1 210.15 861.17 Step: AIC=849.73 obt3070 ~ pfave + pcaluga + plixocol + pesc1g + rndm2sm + rndm15sm + offset(log(pop3070)) Df Deviance AIC - plixocol 1 200.65 849.67 <none> 198.71 849.73 + pesgred 1 197.41 850.43 + palftot 1 198.69 851.71 + redecat 1 198.71 851.73 - pfave 1 204.25 853.27 - rndm2sm 1 205.31 854.33 - pesc1g 1 208.79 857.81 - rndm15sm 1 210.43 859.45 - pcaluga 1 216.09 865.11 Step: AIC=849.67 obt3070 ~ pfave + pcaluga + pesc1g + rndm2sm + rndm15sm + offset(log(pop3070)) Df Deviance AIC <none> 200.65 849.67 + plixocol 1 198.71 849.73 + palftot 1 200.02 851.04 + pesgred 1 200.10 851.12 + redecat 1 200.13 851.15 - pfave 1 207.29 854.31
Valeska Andreozzi 13 - rndm2sm 1 208.57 855.59 - pesc1g 1 210.88 857.90 - rndm15sm 1 211.11 858.13 - pcaluga 1 216.44 863.45 > summary(rio.glm3) Call: glm(formula = obt3070 ~ pfave + pcaluga + pesc1g + rndm2sm + rndm15sm + offset(log(pop3070)), family = poisson, data = rio2) Deviance Residuals: Min 1Q Median 3Q Max -3.0126-0.7750 0.0102 0.6276 3.2604 Coefficients: Estimate Std. Error z value Pr(> z ) (Intercept) -9.3239 0.7757-12.019 < 2e-16 *** pfave -0.4186 0.1638-2.555 0.01063 * pcaluga 0.9941 0.2446 4.064 4.82e-05 *** pesc1g 2.7908 0.8814 3.166 0.00154 ** rndm2sm 2.3664 0.8459 2.798 0.00515 ** rndm15sm -1.2060 0.3778-3.192 0.00141 ** --- Signif. codes: 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 (Dispersion parameter for poisson family taken to be 1) Null deviance: 289.65 on 152 degrees of freedom Residual deviance: 200.65 on 147 degrees of freedom AIC: 849.67 Number of Fisher Scoring iterations: 4 Você mudaria este modelo? Lembre-se da multicolinearidade? Que tal retirar uma das covariáveis de renda. > library(car) > scatterplotmatrix(rio[,c(2:8,11:12)]) > round(cor(rio[,c(2:8,11:12)]),digits=2) pfave prede pesgred pcaluga plixocol pesc1g palftot pfave 1.00-0.07-0.11-0.29-0.09-0.56-0.65
Valeska Andreozzi 14 prede -0.07 1.00 0.40 0.37 0.82 0.34 0.57 pesgred -0.11 0.40 1.00 0.50 0.53 0.42 0.49 pcaluga -0.29 0.37 0.50 1.00 0.41 0.29 0.46 plixocol -0.09 0.82 0.53 0.41 1.00 0.49 0.66 pesc1g -0.56 0.34 0.42 0.29 0.49 1.00 0.85 palftot -0.65 0.57 0.49 0.46 0.66 0.85 1.00 rndm2sm 0.58-0.24-0.35-0.21-0.41-0.97-0.79 rndm15sm -0.25 0.02 0.16-0.08 0.16 0.74 0.40 rndm2sm rndm15sm pfave 0.58-0.25 prede -0.24 0.02 pesgred -0.35 0.16 pcaluga -0.21-0.08 plixocol -0.41 0.16 pesc1g -0.97 0.74 palftot -0.79 0.40 rndm2sm 1.00-0.73 rndm15sm -0.73 1.00 0.0 0.8 0.0 0.5 0.2 0.8 0.1 0.6 pfave 0.0 0.6 0.0 0.8 prede pesgred 0.0 0.8 0.0 0.5 pcaluga plixocol 0.2 0.8 0.2 0.8 pesc1g palftot 0.70 0.95 0.1 0.6 rndm2sm rndm15sm 0.0 0.4 0.0 0.6 0.0 0.8 0.2 0.8 0.70 0.95 0.0 0.4 Estime o modelo sem a covariável rndm2sm. Faça as mudanças que considerar importantes e compare com o modelo anterior usando análise de deviance (se os modelos se mantiverem encaixados)
Valeska Andreozzi 15 > rio.glm4 <- update(rio.glm3,~.-rndm2sm) > anova(rio.glm4,rio.glm3,test="chisq") Analysis of Deviance Table Model 2: obt3070 ~ pfave + pcaluga + pesc1g + rndm2sm + rndm15sm + offset(log(pop3070)) Model 1: obt3070 ~ pfave + pcaluga + pesc1g + rndm15sm + offset(log(pop3070)) Resid. Df Resid. Dev Df Deviance Pr(>Chi) 1 148 208.57 2 147 200.65 1 7.9203 0.004888 ** --- Signif. codes: 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 Escreva a hipótese nula da análise de deviance. Qual a conclusão do teste? A Hipótese nula do teste é de que o coeficiente da variável rndm2sm é igual a zero. O teste rejeita a H0. Se o objetivo do estudo fosse predição, poderíamos ter optado pelo modelo rio.glm3 que inclui covariáveis colineares. No entanto, como o objetivo é estudar associação, vamos descartar a covariável rndm2sm. Vamos à análise de resíduos. Quando o termo offset está presente no modelo de Poisson, o R estima os preditores lineares e os valores ajustados para µ i ao invés de estimar para λ i, ie, preditor linear = η i = lnpop i +βx i valores ajustados = µ i = exp(η i ) = exp(lnpop i +βx i ) Na verdade o que queremos são os preditores lineares e os valores ajustados de λ i. Por isso temos que fazer algumas alterações no resultado do R. > res<-rstandard(rio.glm4, type = "deviance") > pred.mu<-rio.glm4$linear.predictors #normal, poisson, gamma > pred.lambda<-pred.mu-log(rio2$pop3070) #poisson com offset > plot(pred.lambda,res,ylab = "Resíduo deviance padronizado", + xlab= "Preditor linear") > abline(h=0)
Valeska Andreozzi 16 Resíduo deviance padronizado 3 2 1 0 1 2 3 7.2 7.0 6.8 6.6 6.4 6.2 Preditor linear > fitted.mu<-rio.glm4$fitted.values > fitted.lambda<-fitted.mu/rio2$pop3070 > pred<-2*sqrt(fitted.lambda) #poisson com offset > plot(pred,res,ylab = "Resíduo deviance padronizado", + xlab ="2*sqrt(valores ajustados)") > abline(h=0)
Valeska Andreozzi 17 Resíduo deviance padronizado 3 2 1 0 1 2 3 0.05 0.06 0.07 0.08 0.09 2*sqrt(valores ajustados) > source("glmfunc.r") > plotleverage(rio.glm4)
Valeska Andreozzi 18 Leverage 5 128 Leverage h/(p/n) 0 2 4 6 2 8 25 27 10 20 24 26 41 29 33 51 63 144 141149 151 0 50 100 150 Índice > plotcooks(rio.glm4)
Valeska Andreozzi 19 Cook s Distance 33 128 Cook s distance 0.0 0.1 0.2 0.3 29 51 149 0 50 100 150 Índice Identifique quem são os bairros com maior influência no modelo > rio[c(128,33),] bairro pfave prede pesgred pcaluga 128 BARRA DA TIJUCA 0.01255685 0.9860039 0.6177425 0.2204779 33 TIJUCA 0.10665023 0.9632327 0.9178057 0.2384735 plixocol pesc1g palftot obt3070 pop3070 rndm2sm rndm15sm 128 0.9910596 0.8935 0.9579 15 30496 0.0767 0.5259 33 0.9581690 0.7584 0.9513 125 85542 0.1875 0.2187 redecat 128 1 33 1 Interprete os gráficos dos resíduos Os gráficos dos resíduos sugerem que o modelo apresentado não apresenta heterocedasticidade. O que podemos concluir com este modelo. Ele é útil? Parece ser útil. Observe o teste da saída da função gof(). O modelo se ajusta aos dados? > gof(rio.glm4)
Valeska Andreozzi 20 Hip. nula: Modelo é adequado Deviance = 208.5691 com 148 Graus de Liberdade P-valor 0.00077 Contudo parece que o modelo não se ajusta bem aos dados. Novamente aqui há que levar em conta o objetivo do modelo (predição ou descrição) Acrescente a seguinte covariável ao modelo: proporção da população entre 60 e 70 anos > rio$pidosos <- scan("ppidosos.dat") Ajuste outros modelos agora com esta covariável indicadora da estrutura etária da população > rio.glm5<-glm(obt3070 ~ pfave + pcaluga + pesc1g + rndm15sm + + pidosos + offset(log(pop3070)), + family = poisson, data = rio) > summary(rio.glm5) Call: glm(formula = obt3070 ~ pfave + pcaluga + pesc1g + rndm15sm + pidosos + offset(log(pop3070)), family = poisson, data = rio) Deviance Residuals: Min 1Q Median 3Q Max -3.3120-0.6491-0.0766 0.6003 2.9552 Coefficients: Estimate Std. Error z value Pr(> z ) (Intercept) -7.4716 0.1449-51.547 < 2e-16 *** pfave -0.4743 0.1646-2.882 0.00396 ** pcaluga 0.5802 0.2614 2.219 0.02645 * pesc1g -0.1931 0.3224-0.599 0.54920 rndm15sm -1.0823 0.3912-2.767 0.00566 ** pidosos 5.2057 0.8860 5.876 4.21e-09 *** --- Signif. codes: 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 (Dispersion parameter for poisson family taken to be 1) Null deviance: 289.65 on 152 degrees of freedom Residual deviance: 173.40 on 147 degrees of freedom AIC: 822.42 Number of Fisher Scoring iterations: 4
Valeska Andreozzi 21 Ao incluirmos a estrutura etária da população temos algumas alterações nos efeitos das outras covariáveis presentes no modelo, especialmente na variável pcaluga e pesc1g, apesar desta última não apresentar efeito estatisticamente significativo.