[R-br] Especificação do modelo em lm e glm
Paulo Justiniano
paulojus em leg.ufpr.br
Segunda Março 21 10:05:35 BRT 2011
Diego
todos os modelos definiem o mesmo subspaco e portanto os ajustes
sao similares
as diferencas que voce notou sao devido a parametrizacao e interpretacao
dos coeficientes do modelo definidos pelos contrastes.
Por exemplo experimente usar
model.matrix(...)
com cada um dos modelos em ... e compare as matrizes.
Os 3 primeiros sao absolutamente identicos e isolam
efeitos principais das interacoes.
O intercepto neste modelo é a média do primeiro novel do primeiro fator.
No 4 modelo os efeitos principais nao sao isolados e o intercepto e
demais coeficientes tem interpretacao diferente
mesmo correspondendo ao mesmo espaco -- ou seja
o resultado de um ajuste pode ser obtido a partir do outro.
Os links a seguir podem ser uteis:
Para especificacao de modelos:
http://leg.ufpr.br/~paulojus/embrapa/Rembrapa/Rembrapase24.html#x26-14800024
Para contrastes:
http://leg.ufpr.br/~paulojus/embrapa/Rembrapa/Rembrapase25.html#x27-15600025
http://leg.ufpr.br/~paulojus/embrapa/Rembrapa/Rembrapase26.html#x28-16300026
On Mon, 21 Mar 2011, Diego Pujoni wrote:
> #Olá pessoal,
>
> #Existem formas diferentes de se especificar um modelo na função
> #"lm" e "glm". Mas obtive os seguintes resultados:
>
> #Criando o data frame#
> X1=c(rep("A",4),rep("B",4))
> X2=c(rep("C",2),rep("D",2),rep("C",2),rep("D",2))
> Y=c(3,5,5,7,11,13,13,15)
> Table=as.data.frame(cbind(X1,X2,as.numeric(Y)))
> Table
>
> #Os quatro modos de se especificar o mesmo modelo fornecem a mesma deviance,#
> #ou seja, são iguais#
>
> glm(Y ~ X1+X2+X1:X2, data=Table, family=poisson())$deviance
> glm(Y ~ (X1+X2)^2, data=Table, family=poisson())$deviance
> glm(Y ~ X1*X2, data=Table, family=poisson())$deviance
> glm(Y ~ X1:X2, data=Table, family=poisson())$deviance
>
> #Mas há um deslocamento de -1.25 nos coeficientes no último modelo
>
> round(glm(Y ~ X1+X2+X1:X2, data=Table,family=poisson())$coefficients,digits=2)
> round(glm(Y ~ (X1+X2)^2,
> data=Table,family=poisson())$coefficients,digits=2)
> round(glm(Y ~ X1*X2, data=Table,family=poisson())$coefficients,digits=2)
> round(glm(Y ~ X1:X2, data=Table,family=poisson())$coefficients,digits=2)
>
> #O coeficiente de X1B:X2D sai como NA#
> #O quarto modo de especificar o modelo está errado?
> #Por que isso acontece?
>
> #Nos modelos abaixo:
>
> #Incluindo mas uma variável preditora em Table#
> X3=c("E","F","E","F","E","F","E","F")
> Table.X3=as.data.frame(cbind(X1,X2,X3,as.numeric(Y)))
> Table.X3
>
> #As deviances e os coeficientes X1A:X3F e X1A:X3E também são iguais
> #além disso alguns coeficientes são deslocados de -1.4
> (X1A:X2C,X1B:X2C,X1A:X1D),
> #mas os outros coeficientes não são iguais#
>
> glm(Y~X1+X2+X3+X1:X2+X1:X3,data=Table.X3,family=poisson())$deviance
> glm(Y~X1:X2+X1:X3,data=Table.X3,family=poisson())$deviance
>
> round(glm(Y~X1+X2+X3+X1:X2+X1:X3,data=Table.X3,family=poisson())$coefficients,digits=2)
> round(glm(Y~X1:X2+X1:X3,data=Table.X3,family=poisson())$coefficients,digits=2)
>
> #Especificando os coeficientes do primeiro modelo
> # Intercept = 1.16
> # X1/X2| C D | X1/X3| E F |
> # A | 0 0.41| A | 0 0.41|
> # B |1.24 -0.25| B |1.24 -0.25|
>
> #Especificando os coeficientes do segundo modelo
> # Intercept = 2.56
> # X1/X2| C D | X1/X3| E F |
> # A |-1.40 -0.99| A | 0 0.41|
> # B |-0.15 NA | B | 0 0.15|
>
> #Os coeficientes X1B:X3E e X1B:X3F mudam.
> #Alguém sabe aonde se encontra o meu erro?
> #Será que sou obrigado a incluir o termo de interação X2:X3?
> #Mas e se essas duas variáveis forem independentes?
>
> #Muito Obrigado
>
> # Diego PJ
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>
Mais detalhes sobre a lista de discussão R-br