Duvida sobre como alterar o contraste no options de "contr.poly" para "contr.sum" e entender o que acontece.

Ola caros colegas da lista, eu estava tentando estabelecer a matriz de contrastes para usar na função lm, mas não estou conseguindo entender como as coisas funcionam no R. Eu li um tutorial antigo, esse aqui (http://wwwuser.gwdg.de/~cscherb1/content/Statistics%20Course%20files/Working...). Eu não entendo se as coisas mudaram desde que esse tutorial foi escrito, mas com matriz de soma como no exemplo acima tudo é simples, mas eu não consigo mais replicar o exemplo no R. Mais precisamente o que eu estava tentando era o seguinte: #Dados de exemplo: variavel<-factor(rep(letters[1:3],each=10)) resposta<-rnorm(30,rep(c(1,1,2),each=10)) #Ai eu ajusto um modelo linear #modelo usando opções default modelo<-lm(resposta~variavel) summary(modelo) #Eu imagino que a matriz que deveria fazer os contrastes como acima seria essa no caso de usar soma como no texto cbind(c(-1,1,0),c(-1,0,1)) Mas o default usa outro esquema de matriz de contrastes, logo so colocar isso nos contrastes não funciona #O default não usa esse sistema certo? options("contrasts") #Eu imaginei que essa opção que fosse a que eu precisaria mudar options("contrasts")$contrasts[2] #Mas tentando mudar de forma simples assim eu obtenho um erro #mas não é uma mudança simples assim, quando eu tento isso: options("contrasts")$contrasts[2]<-"contr.sum" #eu tenho essa mensagem de Erro Erro em options("contrasts")$contrasts[2] <- "contr.sum" : destino da atribuição expande para um objeto fora da linguagem Mas como eu faço ao invéz de escrever isso, contrasts(variavel) #Escrever isso, ou algo assim cbind(c(-1,1,0),c(-1,0,1)) #E obter o mesmo resultado que esta no summary(modelo) la em cima, se não me perdi em algum momento mais para cima. #Porque mesmo a opção contr.sum parece que ele trabalha de outra forma do que estou imaginando. contr.sum(3,contrasts=T,sparse=F) Bem é isso, é apenas uma duvida sobre como o R funciona que não estou conseguir entender, se alguém puder dar uma luz eu serei grato. Abraços Augusto Ribas -- Grato Augusto C. A. Ribas Site Pessoal: http://recologia.wordpress.com/ Lattes: http://lattes.cnpq.br/7355685961127056

Esse tipo de atribuição não vai dar certo mesmo options("contrasts")$contrasts[2]<-"contr.sum" Você deve fazer assim options(contrasts=c(unordered="contr.sum", ordered="contr.poly")) Com isso você faz uma alteração global para toda sua sessão R, ou seja, toda lm(), aov(), glm(), lme(), etc, todas funções de ajuste de modelo vão usar o tipo de restrição estabelecido. Eu prefiro por vezes fazer a alteração localmente, ou seja, só dentro da lm() que eu tô rodando, assim, imagine que eu queria blocos com contraste soma mas tratamentos não, ficaria assim m0 <- lm(y~bloco+trat, data=dados, contrasts=list(bloco=contr.sum)) À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

Muito obrigado pela ajuda. Uma ultima curiosidade, o R entende automaticamente no modelo3 que é contrastes pela soma? #exemplo set.seed(123) tratamento<-factor(rep(letters[1:3],each=10)) resposta<-rnorm(30,rep(c(1,1,4),each=10)) #modelo usando opções default modelo1<-lm(resposta~tratamento) summary(modelo1) modelo2<- lm(resposta~variavel,contrasts=list(tratamento=contr.sum)) summary(modelo2) modelo3<- lm(resposta~variavel,contrasts=list(tratamento=cbind(c(1,-1,0),c(1,0,-1)))) summary(modelo3) options("contrasts") Em 7 de fevereiro de 2013 09:58, Walmes Zeviani <walmeszeviani@gmail.com> escreveu:
Esse tipo de atribuição não vai dar certo mesmo
options("contrasts")$contrasts[2]<-"contr.sum"
Você deve fazer assim
options(contrasts=c(unordered="contr.sum", ordered="contr.poly"))
Com isso você faz uma alteração global para toda sua sessão R, ou seja, toda lm(), aov(), glm(), lme(), etc, todas funções de ajuste de modelo vão usar o tipo de restrição estabelecido. Eu prefiro por vezes fazer a alteração localmente, ou seja, só dentro da lm() que eu tô rodando, assim, imagine que eu queria blocos com contraste soma mas tratamentos não, ficaria assim
m0 <- lm(y~bloco+trat, data=dados, contrasts=list(bloco=contr.sum))
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- Grato Augusto C. A. Ribas Site Pessoal: http://recologia.wordpress.com/ Lattes: http://lattes.cnpq.br/7355685961127056

Por favor, perdoe minha falta de atenção, confundi tudo no script anterior. #exemplo set.seed(123) tratamento<-factor(rep(letters[1:3],each=10)) resposta<-rnorm(30,rep(c(1,1,4),each=10)) #modelo usando opções default modelo1<-lm(resposta~tratamento) summary(modelo1) modelo2<- lm(resposta~tratamento,contrasts=list(tratamento=contr.sum)) summary(modelo2) modelo3<- lm(resposta~tratamento,contrasts=list(tratamento=cbind(c(1,-1,0),c(1,0,-1)))) summary(modelo3) Mas então no caso acima, eu não deveria obter o mesmo resultado nos 3 casos? Não entendo porque esse 3 exemplos são diferentes. Em 7 de fevereiro de 2013 10:58, Augusto Ribas <ribas.aca@gmail.com> escreveu:
Muito obrigado pela ajuda.
Uma ultima curiosidade, o R entende automaticamente no modelo3 que é contrastes pela soma?
#exemplo set.seed(123) tratamento<-factor(rep(letters[1:3],each=10)) resposta<-rnorm(30,rep(c(1,1,4),each=10))
#modelo usando opções default modelo1<-lm(resposta~tratamento) summary(modelo1)
modelo2<- lm(resposta~variavel,contrasts=list(tratamento=contr.sum)) summary(modelo2)
modelo3<- lm(resposta~variavel,contrasts=list(tratamento=cbind(c(1,-1,0),c(1,0,-1)))) summary(modelo3)
options("contrasts")
Em 7 de fevereiro de 2013 09:58, Walmes Zeviani <walmeszeviani@gmail.com> escreveu:
Esse tipo de atribuição não vai dar certo mesmo
options("contrasts")$contrasts[2]<-"contr.sum"
Você deve fazer assim
options(contrasts=c(unordered="contr.sum", ordered="contr.poly"))
Com isso você faz uma alteração global para toda sua sessão R, ou seja, toda lm(), aov(), glm(), lme(), etc, todas funções de ajuste de modelo vão usar o tipo de restrição estabelecido. Eu prefiro por vezes fazer a alteração localmente, ou seja, só dentro da lm() que eu tô rodando, assim, imagine que eu queria blocos com contraste soma mas tratamentos não, ficaria assim
m0 <- lm(y~bloco+trat, data=dados, contrasts=list(bloco=contr.sum))
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- Grato Augusto C. A. Ribas
Site Pessoal: http://recologia.wordpress.com/ Lattes: http://lattes.cnpq.br/7355685961127056
-- Grato Augusto C. A. Ribas Site Pessoal: http://recologia.wordpress.com/ Lattes: http://lattes.cnpq.br/7355685961127056

O problema do seu código foi só a ordem das colunas, veja set.seed(123) tratamento <- factor(rep(letters[1:3],each=10)) resposta <- rnorm(30,rep(c(1,1,4),each=10)) modelo1 <- lm(resposta~tratamento) summary(modelo1) modelo2 <- lm(resposta~tratamento, contrasts=list(tratamento=contr.sum)) summary(modelo2) contrasts(tratamento) C(tratamento, contr=contr.sum) modelo3 <- lm(resposta~tratamento, contrasts=list(tratamento=*cbind(c(1,-1,0), c(1,0,-1))*)) summary(modelo3) C(tratamento, contr=contr.sum) # ordem das colunas!!! modelo4 <- lm(resposta~tratamento, contrasts=list(tratamento=*cbind(c(1,0,-1), c(0,1,-1))*)) summary(modelo4) cbind(coef(modelo2), coef(modelo3), coef(modelo4)) À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

Muito obrigado pela explicação, eu que não estou sabendo montar as comparações então, com esses exemplos eu acho que entendi melhor. 2013/2/7 Walmes Zeviani <walmeszeviani@gmail.com>:
O problema do seu código foi só a ordem das colunas, veja
set.seed(123) tratamento <- factor(rep(letters[1:3],each=10)) resposta <- rnorm(30,rep(c(1,1,4),each=10))
modelo1 <- lm(resposta~tratamento) summary(modelo1)
modelo2 <- lm(resposta~tratamento, contrasts=list(tratamento=contr.sum)) summary(modelo2)
contrasts(tratamento) C(tratamento, contr=contr.sum)
modelo3 <- lm(resposta~tratamento, contrasts=list(tratamento=cbind(c(1,-1,0), c(1,0,-1)))) summary(modelo3)
C(tratamento, contr=contr.sum) # ordem das colunas!!!
modelo4 <- lm(resposta~tratamento, contrasts=list(tratamento=cbind(c(1,0,-1), c(0,1,-1)))) summary(modelo4)
cbind(coef(modelo2), coef(modelo3), coef(modelo4))
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br skype: walmeszeviani twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- Grato Augusto C. A. Ribas Site Pessoal: http://recologia.wordpress.com/ Lattes: http://lattes.cnpq.br/7355685961127056
participantes (2)
-
Augusto Ribas
-
Walmes Zeviani