Fwd: Enc: model.matrix()

Assunto: model.matrix()
Bom tarde pessoal,
gostaria de saber se é possível transformar um nível de um fator em numérico no próprio vetor, de forma que ele não seja codificado na função model.matrix().
Segue abaixo um CMR:
k = rep(0:3,each=3) k = factor(k) k = model.matrix(~-1+k)
# Essa é a matriz gerada.
k0 k1 k2 k3 1 1 0 0 0 2 1 0 0 0 3 1 0 0 0 4 0 1 0 0 5 0 1 0 0 6 0 1 0 0 7 0 0 1 0 8 0 0 1 0 9 0 0 1 0 10 0 0 0 1 11 0 0 0 1 12 0 0 0 1
# Entretanto gostaria de obter a seguinte matriz sem a necessidade de eliminar as colunas posteriormente. k0 k3 1 1 0 2 1 0 3 1 0 4 0 0 5 0 0 6 0 0 7 0 0 8 0 0 9 0 0 10 0 1 11 0 1 12 0 1
Att.
Tiago.
#################################################################
Tiago de Souza Marçal - Graduando em Agronomia pelo CCA-UFES
Bolsista de Iniciação Científica da área de Genética e Melhoramento de Plantas
#################################################################

Até onde sei, a partir de um fator não tem como você dizer para a model.matrix() que você quer remover colunas durante a construção. O mais fácil parece ser construir a matriz e remover o não desejado. Como as colunas tem nomes fica fácil remover a partir deles. À disposição. Walmes.

Bom dia Pessoal, Continuando a discussão sobre a função model.matrix() eu gostaria de tentar utilizar o objeto criado por model.matrix() (Treat.ortho <- model.matrix(~-1+dados$avaliacao)) no CRM abaixo para criar contrastes entre os três níveis de um tratamento, mas a função contrasts() não funciona diretamente e não quero que ter que especificar via cbind(c(0,1,0),c(0,0,1)), ou seja, gostaria de criar um método que operacionalizasse todos os contrastes em função dos níveis informados sendo: #Dados artificiais colony<-as.factor(sort(rep(c("colony1", "colony2","colony3"), 100))) y1 <- c(rnorm(100,1,0.1),rnorm(100,5,0.1),rnorm(100,3.5,0.1)) y2 <- c(rnorm(100,10,0.3),rnorm(100,11,0.6),rnorm(100,5,0.6)) y3 <- c(rnorm(100,10,2.3),rnorm(100,11,2.6),rnorm(100,11,2.5)) y4 <- c(rnorm(100,5,0.5),rnorm(100,7,0.5),rnorm(100,22,0.5)) y5 <- c(rnorm(100,11,0.1),rnorm(100,11,0.1),rnorm(100,11,0.1)) #Cria o data frame avaliacao <- as.factor(colony) espectro <- cbind(y1,y2,y3,y4,y5) dados <- data.frame(avaliacao = I(as.matrix(avaliacao)), bands = I(as.matrix(espectro))) ## Cria uma matriz de contraste ##Niveis levels(avaliacao) Treat.ortho <- model.matrix(~-1+dados$avaliacao) ## Cria um fator para cada contraste col1vs2 <- col1vs3 <- Aqui não sei como fazer isso? Obrigado, -- ====================================================================== Alexandre dos Santos Proteção Florestal IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso Campus Cáceres Caixa Postal 244 Avenida dos Ramires, s/n Bairro: Distrito Industrial Cáceres - MT CEP: 78.200-000 Fone: (+55) 65 8132-8112 (TIM) (+55) 65 9686-6970 (VIVO) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 ====================================================================== On 24/02/2015 15:02, walmes . wrote:
Até onde sei, a partir de um fator não tem como você dizer para a model.matrix() que você quer remover colunas durante a construção. O mais fácil parece ser construir a matriz e remover o não desejado. Como as colunas tem nomes fica fácil remover a partir deles.
À disposição. Walmes.
_______________________________________________ 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.
--- Este email foi escaneado pelo Avast antivírus. http://www.avast.com

Considere o CMR abaixo. da <- data.frame(col=gl(3,100, labels=c("A","B","C"))) da$y <- with(da, rnorm(length(col), mean=as.numeric(col), sd=1)) ## Modelo com a restrição de não haver nível de referência, aqui estima ## a média de cada nível. m0 <- lm(y~0+col, data=da) summary(m0) require(multcomp) ## Matriz de contrastes (lembrar de ter o 0 na formula!). Xcontr <- contrMat(n=1:nlevels(da$col), type="Tukey") str(Xcontr) ## Estimativa e erro padrão. Xcontr%*%coef(m0) sqrt(diag(Xcontr%*%vcov(m0)%*%t(Xcontr))) ## Via glht(). summary(glht(m0, linfct=mcp(col="Tukey"))) À disposição. Walmes.

Muito obrigado Walmes, Era exatamente isto o que eu queria, fazendo o contraste manualmente e extrair a estimativa da média de cada nível sem usar a função glht() do pacote multicomp, Redobrados agradecimentos, -- ====================================================================== Alexandre dos Santos Proteção Florestal IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso Campus Cáceres Caixa Postal 244 Avenida dos Ramires, s/n Bairro: Distrito Industrial Cáceres - MT CEP: 78.200-000 Fone: (+55) 65 8132-8112 (TIM) (+55) 65 9686-6970 (VIVO) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 ====================================================================== On 25/02/2015 13:09, walmes . wrote:
Considere o CMR abaixo.
da <- data.frame(col=gl(3,100, labels=c("A","B","C"))) da$y <- with(da, rnorm(length(col), mean=as.numeric(col), sd=1))
## Modelo com a restrição de não haver nível de referência, aqui estima ## a média de cada nível. m0 <- lm(y~0+col, data=da) summary(m0)
require(multcomp)
## Matriz de contrastes (lembrar de ter o 0 na formula!). Xcontr <- contrMat(n=1:nlevels(da$col), type="Tukey") str(Xcontr)
## Estimativa e erro padrão. Xcontr%*%coef(m0) sqrt(diag(Xcontr%*%vcov(m0)%*%t(Xcontr)))
## Via glht(). summary(glht(m0, linfct=mcp(col="Tukey")))
À disposição. Walmes.
_______________________________________________ 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.
--- Este email foi escaneado pelo Avast antivírus. http://www.avast.com

Caros Listeiros, Gostaria de criar uma matriz de contraste com vários níveis dentro de um fator, conforme o CRM abaixo, quando utilizo 3 níveis, funciona corretamente a função contrasts(), porém quando utilizo 4 ou mais níveis não funciona, alguém poderia me sugerir uma solução, Obrigado, #Dados artificiais colony<-as.factor(sort(rep(c("colony1", "colony2","colony3", "colony4"), 100))) y1 <- c(rnorm(100,1,0.1),rnorm(100,5,0.1),rnorm(100,3.5,0.1)) y2 <- c(rnorm(100,10,0.3),rnorm(100,11,0.6),rnorm(100,5,0.6)) y3 <- c(rnorm(100,10,2.3),rnorm(100,11,2.6),rnorm(100,11,2.5)) y4 <- c(rnorm(100,5,0.5),rnorm(100,7,0.5),rnorm(100,22,0.5)) y5 <- c(rnorm(100,11,0.1),rnorm(100,11,0.1),rnorm(100,11,0.1)) #Cria o data frame avaliacao <- as.factor(colony) espectro <- cbind(y1,y2,y3,y4,y5) dados <- data.frame(avaliacao = I(as.matrix(avaliacao)), bands = I(as.matrix(espectro))) ## Cria uma matriz de contraste ##Niveis levels(avaliacao) Xcontr <- contrMat(n=1:nlevels(avaliacao), type="Tukey") contrasts(avaliacao) <- Xcontr On 25/02/2015 13:09, walmes . wrote:
Considere o CMR abaixo.
da <- data.frame(col=gl(3,100, labels=c("A","B","C"))) da$y <- with(da, rnorm(length(col), mean=as.numeric(col), sd=1))
## Modelo com a restrição de não haver nível de referência, aqui estima ## a média de cada nível. m0 <- lm(y~0+col, data=da) summary(m0)
require(multcomp)
## Matriz de contrastes (lembrar de ter o 0 na formula!). Xcontr <- contrMat(n=1:nlevels(da$col), type="Tukey") str(Xcontr)
## Estimativa e erro padrão. Xcontr%*%coef(m0) sqrt(diag(Xcontr%*%vcov(m0)%*%t(Xcontr)))
## Via glht(). summary(glht(m0, linfct=mcp(col="Tukey")))
À disposição. Walmes.
_______________________________________________ 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.
-- ====================================================================== Alexandre dos Santos Proteção Florestal IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso Campus Cáceres Caixa Postal 244 Avenida dos Ramires, s/n Bairro: Distrito Industrial Cáceres - MT CEP: 78.200-000 Fone: (+55) 65 8132-8112 (TIM) (+55) 65 9686-6970 (VIVO) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 ====================================================================== --- Este email foi escaneado pelo Avast antivírus. http://www.avast.com

Uma matriz de contraste tem que ter no máximo k-1 funções e essas devem ser linearmente independentes. Os contrastes de Tukey formam uma matriz com k*(k-1)/2 hipóteses (ou funções) lineares. Além do mais, as funções não são linearmente independentes, o posto é sempre k-1. É por isso que você não consegue usar os contrastes de Tukey como definição de restrições na estimação. Abaixo segue CMR para esclarecer e como montar seus próprios contrastes. ## Fator de 4 níveis. trat <- gl(4, 3) levels(trat) ## k níveis => k-1 funções/combinações lineares independentes. contrasts(trat) contrasts(C(trat, contr="contr.sum")) contrasts(C(trat, contr="contr.helmert")) Xcontr <- multcomp::contrMat(n=1:nlevels(trat), type="Tukey") dim(Xcontr) ## Posto das matrizes (número de autovalores não nulos). eigen(crossprod(Xcontr))$values eigen(crossprod(contrasts(trat)))$values ## Como implementar contrastes próprios? ## Ex: Contrastes entre pares na sequência (1-2, 2-3, 3-4, etc). ## Se \beta = C\mu então \mu = C^{-1}\beta. C <- rbind("mu"=c(1,1,1,1)/4, "1vs2"=c(1,-1,0,0), "2vs3"=c(0,1,-1,0), "3vs4"=c(0,0,1,-1)) K <- solve(C) ## K = C^{-1}. contrasts(trat) <- K[,-1] ## Retira o col do intercepto, deixa k-1. y <- rnorm(trat, as.numeric(trat), sd=0.01) tapply(y, trat, mean) mean(y) diff(tapply(y, trat, mean)) m0 <- lm(y~trat) coef(m0) anova(m0) summary(m0) À disposição. Walmes.

Muito Obrigado Walmes!!! Problema e compreensão da lógica resolvidos, -- ====================================================================== Alexandre dos Santos Proteção Florestal IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso Campus Cáceres Caixa Postal 244 Avenida dos Ramires, s/n Bairro: Distrito Industrial Cáceres - MT CEP: 78.200-000 Fone: (+55) 65 8132-8112 (TIM) (+55) 65 9686-6970 (VIVO) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 ====================================================================== On 22/03/2015 11:48, walmes . wrote:
contrasts(trat) <- K[,-1] ##
--- Este email foi escaneado pelo Avast antivírus. http://www.avast.com

Prezados colegas, Estou tentando excluir NA's de um vetor. Quando uso os comandos abaixo, consigo sem problemas. Mas basta eu mudar apenas o nome do vetor e dá o erro abaixo: c <- c(1,2,NA,NA,4,NA,5,NA,NA,12);c bad <- is.na(c);bad miss <- c[bad];miss int <- c[!bad];int ### Apenas mudando nome dos vetores rm(list=ls()) vetor <- c(1,2,NA,NA,4,NA,5,NA,NA,12);vetor bad <- is.na(vetor);bad miss <- c[bad];miss Erro em c[bad] : objeto de tipo 'builtin' não possível dividir em subconjuntos int <- c[!bad];int Erro em c[!bad] : objeto de tipo 'builtin' não possível dividir em subconjuntos Alguém sabe porque deste erro?

Depois do comando rm(list=ls()), toda instância do vetor "c" deve ser substituída pelo nome "vetor". Por exemplo, miss <- vetor[bad];miss int <- vetor[!bad];int 2015-03-22 18:43 GMT-03:00 Felipe <felipe.e.barletta@gmail.com>:
Prezados colegas,
Estou tentando excluir NA's de um vetor. Quando uso os comandos abaixo, consigo sem problemas. Mas basta eu mudar apenas o nome do vetor e dá o erro abaixo:
c <- c(1,2,NA,NA,4,NA,5,NA,NA,12);c bad <- is.na(c);bad miss <- c[bad];miss int <- c[!bad];int
### Apenas mudando nome dos vetores rm(list=ls()) vetor <- c(1,2,NA,NA,4,NA,5,NA,NA,12);vetor bad <- is.na(vetor);bad miss <- c[bad];miss Erro em c[bad] : objeto de tipo 'builtin' não possível dividir em subconjuntos int <- c[!bad];int Erro em c[!bad] : objeto de tipo 'builtin' não possível dividir em subconjuntos
Alguém sabe porque deste erro? _______________________________________________ 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.
-- Marcus Nunes http://marcusnunes.me/

Felipe, c, é uma função do R. Eu não usaria o mesmo nome da função como nome da variável. Lembrar que isso mascara a função. Quando vc usa o rm(list=ls()) acaba removendo o vetor que esconde a função e , c, "volta" a ser função. Ao acessar c com [ ], o interpretador não aceita e gera erro, pois não pode operar subset em função. Marcus está certo em dizer que houve falha na substituição da variável, mas eu reitero que não é boa prática usar o mesmo nome, a não ser que sua intenção seja a de alterar o comportamento como uma espécie de "polimorfismo". Em 22 de março de 2015 18:43, Felipe <felipe.e.barletta@gmail.com> escreveu:
rm(list=ls()) vetor <- c(1,2,NA,NA,4,NA,5,NA,NA,12);vetor bad <- is.na(vetor);bad miss <- c[bad];miss
Atenciosamente, David F.

Prezados David e Marcus, Obrigado pelas respostas. Entendo que "c" é uma função do R, acredito que não seja este o problema pois mesmo o problema persiste quando dou qualquer nome ao objeto que guarda os valores do vetor. Usei o rm() apenas para limpar a memória do R. Sem usar "c" e "rm(list=ls())" vetorqualquer <- c(1,2,NA,NA,4,NA,5,NA,NA,12,14,15,NA,21,22) bad <- is.na(vetorqualquer) miss <- c[bad];miss Erro em c[bad] : objeto de tipo 'builtin' não possível dividir em subconjuntos On 22-03-2015 19:15, David Feitosa wrote:
Felipe, c, é uma função do R. Eu não usaria o mesmo nome da função como nome da variável. Lembrar que isso mascara a função.
Quando vc usa o rm(list=ls()) acaba removendo o vetor que esconde a função e , c, "volta" a ser função. Ao acessar c com [ ], o interpretador não aceita e gera erro, pois não pode operar subset em função.
Marcus está certo em dizer que houve falha na substituição da variável, mas eu reitero que não é boa prática usar o mesmo nome, a não ser que sua intenção seja a de alterar o comportamento como uma espécie de "polimorfismo".
Em 22 de março de 2015 18:43, Felipe <felipe.e.barletta@gmail.com <mailto:felipe.e.barletta@gmail.com>> escreveu:
rm(list=ls()) vetor <- c(1,2,NA,NA,4,NA,5,NA,NA,12);vetor bad <- is.na <http://is.na>(vetor);bad miss <- c[bad];miss
Atenciosamente,
David F.
_______________________________________________ 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.

Felipe, conforme comentei em meu primeiro email e o David reiterou depois, "Depois do comando rm(list=ls()), toda instância do vetor "c" deve ser substituída pelo nome "vetor". Por exemplo, miss <- vetor[bad];miss int <- vetor[!bad];int" O que deve ser feito agora é substituir as instâncias do vetor "c" por "vetorqualquer". O comando miss <- c[bad];miss não faz sentido para o R. Tu está pedindo para o programa retornar as posições bad do vetor c, mas o vetor c não existe mais. Tente executar miss <- vetorqualquer[bad];miss e tudo vai se ajeitar. 2015-03-22 19:26 GMT-03:00 Felipe <felipe.e.barletta@gmail.com>:
Prezados David e Marcus,
Obrigado pelas respostas.
Entendo que "c" é uma função do R, acredito que não seja este o problema pois mesmo o problema persiste quando dou qualquer nome ao objeto que guarda os valores do vetor. Usei o rm() apenas para limpar a memória do R. Sem usar "c" e "rm(list=ls())"
vetorqualquer <- c(1,2,NA,NA,4,NA,5,NA,NA,12,14,15,NA,21,22) bad <- is.na(vetorqualquer) miss <- c[bad];miss Erro em c[bad] : objeto de tipo 'builtin' não possível dividir em subconjuntos
On 22-03-2015 19:15, David Feitosa wrote:
Felipe, c, é uma função do R. Eu não usaria o mesmo nome da função como nome da variável. Lembrar que isso mascara a função.
Quando vc usa o rm(list=ls()) acaba removendo o vetor que esconde a função e , c, "volta" a ser função. Ao acessar c com [ ], o interpretador não aceita e gera erro, pois não pode operar subset em função.
Marcus está certo em dizer que houve falha na substituição da variável, mas eu reitero que não é boa prática usar o mesmo nome, a não ser que sua intenção seja a de alterar o comportamento como uma espécie de "polimorfismo".
Em 22 de março de 2015 18:43, Felipe <felipe.e.barletta@gmail.com> escreveu:
rm(list=ls()) vetor <- c(1,2,NA,NA,4,NA,5,NA,NA,12);vetor bad <- is.na(vetor);bad miss <- c[bad];miss
Atenciosamente,
David F.
_______________________________________________ R-br mailing listR-br@listas.c3sl.ufpr.brhttps://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.
_______________________________________________ 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.
-- Marcus Nunes http://marcusnunes.me/

Perfeito Marcus, O erro estava realmente comigo. O que ambos comentaram está perfeito. Obrigado On 22-03-2015 19:37, Marcus Nunes wrote:
Felipe,
conforme comentei em meu primeiro email e o David reiterou depois, "Depois do comando rm(list=ls()), toda instância do vetor "c" deve ser substituída pelo nome "vetor". Por exemplo,
miss <- vetor[bad];miss int <- vetor[!bad];int"
O que deve ser feito agora é substituir as instâncias do vetor "c" por "vetorqualquer". O comando
miss <- c[bad];miss
não faz sentido para o R. Tu está pedindo para o programa retornar as posições bad do vetor c, mas o vetor c não existe mais. Tente executar
miss <- vetorqualquer[bad];miss
e tudo vai se ajeitar.
2015-03-22 19:26 GMT-03:00 Felipe <felipe.e.barletta@gmail.com <mailto:felipe.e.barletta@gmail.com>>:
Prezados David e Marcus,
Obrigado pelas respostas.
Entendo que "c" é uma função do R, acredito que não seja este o problema pois mesmo o problema persiste quando dou qualquer nome ao objeto que guarda os valores do vetor. Usei o rm() apenas para limpar a memória do R. Sem usar "c" e "rm(list=ls())"
vetorqualquer <- c(1,2,NA,NA,4,NA,5,NA,NA,12,14,15,NA,21,22) bad <- is.na <http://is.na>(vetorqualquer) miss <- c[bad];miss Erro em c[bad] : objeto de tipo 'builtin' não possível dividir em subconjuntos
On 22-03-2015 19:15, David Feitosa wrote:
Felipe, c, é uma função do R. Eu não usaria o mesmo nome da função como nome da variável. Lembrar que isso mascara a função.
Quando vc usa o rm(list=ls()) acaba removendo o vetor que esconde a função e , c, "volta" a ser função. Ao acessar c com [ ], o interpretador não aceita e gera erro, pois não pode operar subset em função.
Marcus está certo em dizer que houve falha na substituição da variável, mas eu reitero que não é boa prática usar o mesmo nome, a não ser que sua intenção seja a de alterar o comportamento como uma espécie de "polimorfismo".
Em 22 de março de 2015 18:43, Felipe <felipe.e.barletta@gmail.com <mailto:felipe.e.barletta@gmail.com>> escreveu:
rm(list=ls()) vetor <- c(1,2,NA,NA,4,NA,5,NA,NA,12);vetor bad <- is.na <http://is.na>(vetor);bad miss <- c[bad];miss
Atenciosamente,
David F.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br <mailto: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.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br <mailto: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.
-- Marcus Nunes http://marcusnunes.me/
_______________________________________________ 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.

Pode ser útil também y <- na.omit(x) À disposição. Walmes.

Walmes, Conhece alguma função para automatizar a formação dos contrastes abaixo: ## Se \beta = C\mu então \mu = C^{-1}\beta. C <- rbind("mu"=c(1,1,1,1)/4, "1vs2"=c(1,-1,0,0), "2vs3"=c(0,1,-1,0), "3vs4"=c(0,0,1,-1)) Pois em um fator com 4 níveis, tudo bem é bem razoável fazer "na mão", porém e se eu tivesse um fator com 40 níveis como em trat <-gl(40, 30), fica um pouco complicado, então eu gostaria de achar um jeito de criar os vetores das comparações com maior facilidade, Obrigado, -- ====================================================================== Alexandre dos Santos Proteção Florestal IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso Campus Cáceres Caixa Postal 244 Avenida dos Ramires, s/n Bairro: Distrito Industrial Cáceres - MT CEP: 78.200-000 Fone: (+55) 65 8132-8112 (TIM) (+55) 65 9686-6970 (VIVO) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 =================================================================== On 22/03/2015 11:48, walmes . wrote:
Uma matriz de contraste tem que ter no máximo k-1 funções e essas devem ser linearmente independentes. Os contrastes de Tukey formam uma matriz com k*(k-1)/2 hipóteses (ou funções) lineares. Além do mais, as funções não são linearmente independentes, o posto é sempre k-1. É por isso que você não consegue usar os contrastes de Tukey como definição de restrições na estimação. Abaixo segue CMR para esclarecer e como montar seus próprios contrastes.
## Fator de 4 níveis. trat <- gl(4, 3) levels(trat)
## k níveis => k-1 funções/combinações lineares independentes. contrasts(trat) contrasts(C(trat, contr="contr.sum")) contrasts(C(trat, contr="contr.helmert"))
Xcontr <- multcomp::contrMat(n=1:nlevels(trat), type="Tukey") dim(Xcontr)
## Posto das matrizes (número de autovalores não nulos). eigen(crossprod(Xcontr))$values eigen(crossprod(contrasts(trat)))$values
## Como implementar contrastes próprios? ## Ex: Contrastes entre pares na sequência (1-2, 2-3, 3-4, etc). ## Se \beta = C\mu então \mu = C^{-1}\beta. C <- rbind("mu"=c(1,1,1,1)/4, "1vs2"=c(1,-1,0,0), "2vs3"=c(0,1,-1,0), "3vs4"=c(0,0,1,-1)) K <- solve(C) ## K = C^{-1}.
contrasts(trat) <- K[,-1] ## Retira o col do intercepto, deixa k-1.
y <- rnorm(trat, as.numeric(trat), sd=0.01) tapply(y, trat, mean) mean(y) diff(tapply(y, trat, mean))
m0 <- lm(y~trat) coef(m0) anova(m0) summary(m0)
À disposição. Walmes.
_______________________________________________ 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.
=== --- Este email foi escaneado pelo Avast antivírus. http://www.avast.com

Alexandre, Daria para fazer com um for(), mas aí percebi a estrutura diagonal de 1's positivo e 1's negativos e achei mais fácil somar matrizes diagonais. O CMR esclarece melhor o ponto. ## Número de níveis do fator. k <- 5 ## Row 1. r1 <- rep(1/k, k) ## Matriz diagonal. D <- diag(k-1) ## Positive ones. po <- cbind(D, 0) ## Negative ones. no <- cbind(0, -D) ## Matriz de contrastes "diferenças em sequência". C <- rbind(r1, po+no) rownames(C) <- c("mu", paste0(1:(k-1), "-", 2:k)) C À disposição. Walmes.

Genial Walmes!!!!!! Muito obrigado, era exatamente isso que eu a duas semanas venho tentando fazer, Redobrados agradecimentos, -- ====================================================================== Alexandre dos Santos Proteção Florestal IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso Campus Cáceres Caixa Postal 244 Avenida dos Ramires, s/n Bairro: Distrito Industrial Cáceres - MT CEP: 78.200-000 Fone: (+55) 65 8132-8112 (TIM) (+55) 65 9686-6970 (VIVO) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 ====================================================================== On 30/03/2015 15:59, walmes . wrote:
Alexandre,
Daria para fazer com um for(), mas aí percebi a estrutura diagonal de 1's positivo e 1's negativos e achei mais fácil somar matrizes diagonais. O CMR esclarece melhor o ponto.
## Número de níveis do fator. k <- 5
## Row 1. r1 <- rep(1/k, k)
## Matriz diagonal. D <- diag(k-1)
## Positive ones. po <- cbind(D, 0)
## Negative ones. no <- cbind(0, -D)
## Matriz de contrastes "diferenças em sequência". C <- rbind(r1, po+no) rownames(C) <- c("mu", paste0(1:(k-1), "-", 2:k)) C
À disposição. Walmes.
_______________________________________________ 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.
--- Este email foi escaneado pelo Avast antivírus. http://www.avast.com

Prezados, Estou plotando o gráfico, segundo os comandos abaixo, e desejo que no título do gráfico as expressões 1/x e 1/x^2 apareçam em itálico, assim como no corpo do gráfico usando text(). x <- seq(0, 10,length = 1000) y <- 1/x matplot(x, y, axes=F, type="n", xlim=c(1, 7), ylim=c(0, 1), xlab="x", ylab="f (x)",cex.main=0.85,font.main=1,font.axis=1, cex.lab=0.75, font.lab=1, mgp=c(2,1,0), main=expression(Gráfico~das~funções:~1/x~~e~~1/x^2)) # Traçando o gráfico da função: 1/x x <- x[x >= 1 & x <= 7] fx <- 1/x matplot(x, fx, type = "l", lty=1, add=T) # Adicionando texto no corpo do gráfico da função f(x0 = 1/x text(5, 0.26, expression(1/x), cex=0.7) # Traçando o gráfico das funções: 1/x e 1/x^2 gx = 1/x^2 matplot(x, gx, type = "l", lty=2, add=T) # Adicionando texto no corpo do gráfico: funções text(3.5, 0.16, expression(1/x^2), cex=0.7) # Plotando o beta abline(v = 6, lty = 3) # Definindo os eixos axis(1, at=seq(1,7,1), cex.axis=0.7, labels = expression(1,2,3,4,5,beta,"")) axis(2, at=seq(0,1,0.5), cex.axis=0.7) abline (v=0, h=0) abline (v=1, lty = 2) Alguém sabe como fazer? Desde já agradeço a ajuda.

Um exemplo: main = substitute ( paste ( italic ( 'p value' ), " = 0.01" ))) Lucas F. de Souza Eng. Agrícola - CONAB M.Sc. Produção Vegetal - UENF Doutor em Agrometeorologia - ESALQ/USP tel: (19) 98160-7068 ----- Mensagem original -----
De: "Felipe" <felipe.e.barletta@gmail.com> Para: r-br@listas.c3sl.ufpr.br Enviadas: Terça-feira, 31 de Março de 2015 0:27:34 Assunto: [R-br] Expressão em Itálico no Gráfico
Prezados,
Estou plotando o gráfico, segundo os comandos abaixo, e desejo que no título do gráfico as expressões 1/x e 1/x^2 apareçam em itálico, assim como no corpo do gráfico usando text().
x <- seq(0, 10,length = 1000) y <- 1/x matplot(x, y, axes=F, type="n", xlim=c(1, 7), ylim=c(0, 1), xlab="x", ylab="f (x)",cex.main=0.85,font.main=1,font.axis=1, cex.lab=0.75, font.lab=1, mgp=c(2,1,0), main=expression(Gráfico~das~funções:~1/x~~e~~1/x^2))
# Traçando o gráfico da função: 1/x x <- x[x >= 1 & x <= 7] fx <- 1/x matplot(x, fx, type = "l", lty=1, add=T) # Adicionando texto no corpo do gráfico da função f(x0 = 1/x text(5, 0.26, expression(1/x), cex=0.7)
# Traçando o gráfico das funções: 1/x e 1/x^2 gx = 1/x^2 matplot(x, gx, type = "l", lty=2, add=T) # Adicionando texto no corpo do gráfico: funções text(3.5, 0.16, expression(1/x^2), cex=0.7) # Plotando o beta abline(v = 6, lty = 3)
# Definindo os eixos axis(1, at=seq(1,7,1), cex.axis=0.7, labels = expression(1,2,3,4,5,beta,"")) axis(2, at=seq(0,1,0.5), cex.axis=0.7) abline (v=0, h=0) abline (v=1, lty = 2)
Alguém sabe como fazer? Desde já agradeço a ajuda. _______________________________________________ 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.

Walmes, Tenho mais uma questão sobre o problema ainda, pois no caso de eu ter 30 níveis com 10 repetições e emprego a estrutura diagonal proposta por você, eu sempre estou comparando 1com 2, 2 com 3 ate a enésima comparação, teria como eu fazer algo para comparar o nível 1 com todos os outros, o nível 2 com todos os outros assim sucessivamente, pois no meu exemplo proposto tenho: ## Criando 30 níveis com 10 repetições trat<-gl(30,10) ## Se \beta = C\mu então \mu = C^{-1}\beta. ## Número de níveis do fator. k <- 75 ## Row 1. r1 <- rep(1/k, k) ## Matriz diagonal. D <- diag(k-1) ## Positive ones. po <- cbind(D, 0) ## Negative ones. no <- cbind(0, -D) ## Matriz de contrastes "diferenças em sequência". C <- rbind(r1, po+no) rownames(C) <- c("mu", paste0(1:(k-1), "-", 2:k)) C contrasts(trat)<-t(C[-1,]) ## Retira o col do intercepto, deixa k-1. trat.ortho <- model.matrix(~trat)[, -1] head(trat.ortho) Que não equivale a uma comparação completa entre todos os níveis, poderia me ajudar a conseguir a fazer isso? Obrigado, -- ====================================================================== Alexandre dos Santos Proteção Florestal IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso Campus Cáceres Caixa Postal 244 Avenida dos Ramires, s/n Bairro: Distrito Industrial Cáceres - MT CEP: 78.200-000 Fone: (+55) 65 8132-8112 (TIM) (+55) 65 9686-6970 (VIVO) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 ====================================================================== On 30/03/2015 15:59, walmes . wrote:
Alexandre,
Daria para fazer com um for(), mas aí percebi a estrutura diagonal de 1's positivo e 1's negativos e achei mais fácil somar matrizes diagonais. O CMR esclarece melhor o ponto.
## Número de níveis do fator. k <- 5
## Row 1. r1 <- rep(1/k, k)
## Matriz diagonal. D <- diag(k-1)
## Positive ones. po <- cbind(D, 0)
## Negative ones. no <- cbind(0, -D)
## Matriz de contrastes "diferenças em sequência". C <- rbind(r1, po+no) rownames(C) <- c("mu", paste0(1:(k-1), "-", 2:k)) C
À disposição. Walmes.
_______________________________________________ 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.

Alexandre, A matriz de contrastes deve apresentar no máximo k-1 funções lineares independentes. Os contrastes do tipo "contrastes de um nível de referência com cada um dos demais" (no R o de referência é o primeiro, contr.treatment), "contrastes entre níveis em sequência" (que foi o que fiz), "contrastes do tipo soma dos efeitos igual a zero" (contr.sum), todos eles geram combinações lineares com rank k-1. Se eu entendi correto, você quer todas as comparações duas a duas entre os níveis dos fatores e isso supera k-1, isso dá choose(k, 2), esses contrastes são os pairwise ou constrastes de Tukey. Então isso não pode ser feito, esses contrastes não podem ser usados como matriz de contrastes para um fator. Tais comparações múltiplas podem ser feitas depois da estimação dos efeitos com a ghlt() por exemplo. À disposição. Walmes.
participantes (7)
-
ASANTOS
-
David Feitosa
-
Felipe
-
luc.souza@usp.br
-
Marcus Nunes
-
walmes .
-
Ze Henrique