[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