rodar função para cada nível de um fator

Prezados membros, Peço a ajuda de vocês para o seguinte problema: Eu tenho uma planilha com dois fatores (“espécie” e “sexo”) e uma variável contínua (“tamanho”). Quero analisar se existe diferença no tamanho de machos e fêmeas para cada espécie. Assim, preciso fazer um teste T para cada espécie. O problema é que eu tenho 288 espécies (uma planilha de 6638 linhas) e, portanto, fazer um subset para cada espécie não me parece uma solução muito boa (e provavelmente não é!). Eu queria fazer um teste T para cada nível do fator "especie".Alguém tem alguma ideia de como eu poderia fazer isso sem precisar fazer um subset para cada espécie? A princípio eu achei que isso seria fácil (e provavelmente seja), no entanto o meu pouco conhecimento sobre o R não está me ajudando. Eu estou enviando um exemplo hipotético do formato da minha planilha: especie<-rep(c("a","b","c"),each=6) sexo<-rep(c("f","m"), each = 3, len = 18) tamanho<-c(1.5,1.6,1.8,1.3,1.1,1.2,2.5,2.7,2.6,2.1,2.2,2.1,3.5,3.6,3.7,3.1,3.3,3.2) data<-data.frame(especie,sexo,tamanho) Um abraço a todos e obrigado pela atenção. Marcelo Costa

Você pode usar o pacote plyr. Ele permite dividir um banco em subsets e rodar uma função para cada subset e retornar um data.frame, ou vetor, ou lista, com o resultado da função em cada subset. Mas você tem um problema estatístico de múltiplas comparações e um teste t não é o mais recomendado. Basicamente, se um p-valor de 0,05 quer dizer a probabilidade de se obter dados tão ou mais extremos do que o encontrado assumindo que a hipótese nula (de nenhuma diferença) é verdadeira, então 1 em cada 20 testes vai dar significativo, mesmo com a hipótese nula sendo verdadeira. Há várias formas de corrigir isso e se você googlar por "multiple comparisons" vai achar algo. De toda forma, o jeito mais simples de fazer o que você pediu é simplesmente: reg <- lm(tamanho ~ sexo*especie) summary(reg) Você terá uma regressão com um termo de interação entre sexo e espécie e testará o efeito de sexo para cada espécie. No exemplo que você deu, a linha abaixo faz isso: (summary(lm(tamanho ~ sexo*especie)) Nesse exemplo, sexo é significativo, bem como espécies b e c (e mrelação ao baseline de sexo feminino e espécie a). Porém, não há diferença no tamanho por sexo/espécie. abç Manoel 2013/1/29 marcelo costa <marcelokosta@yahoo.com.br>
Prezados membros,
Peço a ajuda de vocês para o seguinte problema: Eu tenho uma planilha com dois fatores (“espécie” e “sexo”) e uma variável contínua (“tamanho”). Quero analisar se existe diferença no tamanho de machos e fêmeas para cada espécie. Assim, preciso fazer um teste T para cada espécie. O problema é que eu tenho 288 espécies (uma planilha de 6638 linhas) e, portanto, fazer um subset para cada espécie não me parece uma solução muito boa (e provavelmente não é!).
Eu queria fazer um teste T para cada nível do fator "especie". Alguém tem alguma ideia de como eu poderia fazer isso sem precisar fazer um subset para cada espécie?
A princípio eu achei que isso seria fácil (e provavelmente seja), no entanto o meu pouco conhecimento sobre o R não está me ajudando.
Eu estou enviando um exemplo hipotético do formato da minha planilha:
especie<-rep(c("a","b","c"),each=6) sexo<-rep(c("f","m"), each = 3, len = 18)
tamanho<-c(1.5,1.6,1.8,1.3,1.1,1.2,2.5,2.7,2.6,2.1,2.2,2.1,3.5,3.6,3.7,3.1,3.3,3.2) data<-data.frame(especie,sexo,tamanho)
Um abraço a todos e obrigado pela atenção.
Marcelo Costa
_______________________________________________ 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.
-- Manoel Galdino https://sites.google.com/site/galdinomcz/

Algo assim não seria uma solução? y<-split(data,factor(data[,"especie"])) model<-function(x) x<-summary.aov(lm(x[,3]~x[,2])) lapply(y,model) Abraços Em 29 de janeiro de 2013 18:10, Manoel Galdino <mcz.fea@gmail.com> escreveu:
Você pode usar o pacote plyr. Ele permite dividir um banco em subsets e rodar uma função para cada subset e retornar um data.frame, ou vetor, ou lista, com o resultado da função em cada subset.
Mas você tem um problema estatístico de múltiplas comparações e um teste t não é o mais recomendado. Basicamente, se um p-valor de 0,05 quer dizer a probabilidade de se obter dados tão ou mais extremos do que o encontrado assumindo que a hipótese nula (de nenhuma diferença) é verdadeira, então 1 em cada 20 testes vai dar significativo, mesmo com a hipótese nula sendo verdadeira.
Há várias formas de corrigir isso e se você googlar por "multiple comparisons" vai achar algo.
De toda forma, o jeito mais simples de fazer o que você pediu é simplesmente:
reg <- lm(tamanho ~ sexo*especie) summary(reg)
Você terá uma regressão com um termo de interação entre sexo e espécie e testará o efeito de sexo para cada espécie.
No exemplo que você deu, a linha abaixo faz isso: (summary(lm(tamanho ~ sexo*especie))
Nesse exemplo, sexo é significativo, bem como espécies b e c (e mrelação ao baseline de sexo feminino e espécie a). Porém, não há diferença no tamanho por sexo/espécie.
abç Manoel
2013/1/29 marcelo costa <marcelokosta@yahoo.com.br>
Prezados membros,
Peço a ajuda de vocês para o seguinte problema: Eu tenho uma planilha com dois fatores (“espécie” e “sexo”) e uma variável contínua (“tamanho”). Quero analisar se existe diferença no tamanho de machos e fêmeas para cada espécie. Assim, preciso fazer um teste T para cada espécie. O problema é que eu tenho 288 espécies (uma planilha de 6638 linhas) e, portanto, fazer um subset para cada espécie não me parece uma solução muito boa (e provavelmente não é!).
Eu queria fazer um teste T para cada nível do fator "especie". Alguém tem alguma ideia de como eu poderia fazer isso sem precisar fazer um subset para cada espécie?
A princípio eu achei que isso seria fácil (e provavelmente seja), no entanto o meu pouco conhecimento sobre o R não está me ajudando.
Eu estou enviando um exemplo hipotético do formato da minha planilha:
especie<-rep(c("a","b","c"),each=6) sexo<-rep(c("f","m"), each = 3, len = 18)
tamanho<-c(1.5,1.6,1.8,1.3,1.1,1.2,2.5,2.7,2.6,2.1,2.2,2.1,3.5,3.6,3.7,3.1,3.3,3.2) data<-data.frame(especie,sexo,tamanho)
Um abraço a todos e obrigado pela atenção.
Marcelo Costa
_______________________________________________ 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.
-- Manoel Galdino https://sites.google.com/site/galdinomcz/
_______________________________________________ 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.
-- *Luciano F. Sgarbi* Mestrando em Ecologia e Evolução Laboratório de Ecologia de Insetos (sl. 222) Departamento de Ecologia Instituto de Ciências Biológicas - ICB 1 Universidade Federal de Goiás, campus II Goiânia-GO 74001-970 Brazil

Obrigado Manoel, Consegui resolver o problema com as funções do pacote plyr que você indicou. Obrigado pelas observações em relação às comparações múltiplas (vou cuidar disso). Abraço. Marcelo Costa ________________________________ Laboratório de Dinâmicas Ecológicas Programa de Pós-graduação em Entomologia - Doutorado Departamento de Zoologia Universidade Federal do Paraná - UFPR Jardim das Américas, Curitiba, Paraná - Brasil Caixa Postal 19020, CEP 81.531-980 ________________________________
________________________________ De: Manoel Galdino <mcz.fea@gmail.com> Para: r-br@listas.c3sl.ufpr.br; marcelo costa <marcelokosta@yahoo.com.br> Enviadas: Terça-feira, 29 de Janeiro de 2013 18:10 Assunto: Re: [R-br] rodar função para cada nível de um fator
Você pode usar o pacote plyr. Ele permite dividir um banco em subsets e rodar uma função para cada subset e retornar um data.frame, ou vetor, ou lista, com o resultado da função em cada subset.
Mas você tem um problema estatístico de múltiplas comparações e um teste t não é o mais recomendado. Basicamente, se um p-valor de 0,05 quer dizer a probabilidade de se obter dados tão ou mais extremos do que o encontrado assumindo que a hipótese nula (de nenhuma diferença) é verdadeira, então 1 em cada 20 testes vai dar significativo, mesmo com a hipótese nula sendo verdadeira.
Há várias formas de corrigir isso e se você googlar por "multiple comparisons" vai achar algo.
De toda forma, o jeito mais simples de fazer o que você pediu é simplesmente:
reg <- lm(tamanho ~ sexo*especie) summary(reg)
Você terá uma regressão com um termo de interação entre sexo e espécie e testará o efeito de sexo para cada espécie.
No exemplo que você deu, a linha abaixo faz isso: (summary(lm(tamanho ~ sexo*especie))
Nesse exemplo, sexo é significativo, bem como espécies b e c (e mrelação ao baseline de sexo feminino e espécie a). Porém, não há diferença no tamanho por sexo/espécie.
abç Manoel
2013/1/29 marcelo costa <marcelokosta@yahoo.com.br>
Prezados membros,
Peço a ajuda de vocês para o seguinte problema: Eu tenho uma planilha
com dois fatores (“espécie” e “sexo”) e uma variável contínua (“tamanho”). Quero analisar se existe diferença no tamanho de machos e fêmeas para cada espécie. Assim, preciso fazer um teste T para cada espécie. O problema é que eu tenho 288 espécies (uma planilha de 6638 linhas) e, portanto, fazer um subset para cada espécie não me parece uma solução muito boa (e provavelmente não é!).
Eu queria fazer um teste T para cada nível do fator "especie".Alguém tem alguma
ideia de como eu poderia fazer isso sem precisar fazer um subset para cada espécie?
A princípio eu achei que isso seria fácil (e provavelmente seja), no entanto o meu pouco conhecimento sobre o R não está me ajudando.
Eu estou enviando um exemplo hipotético do formato da minha
planilha:
especie<-rep(c("a","b","c"),each=6) sexo<-rep(c("f","m"),
each = 3, len = 18)
tamanho<-c(1.5,1.6,1.8,1.3,1.1,1.2,2.5,2.7,2.6,2.1,2.2,2.1,3.5,3.6,3.7,3.1,3.3,3.2) data<-data.frame(especie,sexo,tamanho) Um abraço a todos e obrigado pela atenção. Marcelo Costa
_______________________________________________ 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.
-- Manoel Galdino https://sites.google.com/site/galdinomcz/

Salve... Uma dúvida... sua pergunta está relacionada a cada espécie separadamente, ou você quer saber se em média os machos são maiores/menores que as fêmeas independentemente da espécie? Se for a segunda opção, você poderia fazer un modelo misto (pacote nlme, função lme). Ele vai comprar o tamanho de machos e fêmeas levando em conta a variação entre as espécies. Uma outra sugestão (pra reduzir o problema das comparações múltiplas) seria, ao invés de comparar espécie por espécie, dividir as espécies em grupos funcionais ou famílias, o que for mais interessante/fizer mais sentido, e rodar um modelo misto para cada grupo. Só uma sugestão. ;) Abs... - Pavel ------- Pavel Dodonov Biologist, PhD student in Ecology and Natural Resources, São Carlos Federal University (UFSCar), SP, Brazil http://ufscar-br.academia.edu/pdodonov *"The highest function of ecology is understanding consequences." - Frank Herbert, Dune, 1965* 2013/1/29 marcelo costa <marcelokosta@yahoo.com.br>
Prezados membros,
Peço a ajuda de vocês para o seguinte problema: Eu tenho uma planilha com dois fatores (“espécie” e “sexo”) e uma variável contínua (“tamanho”). Quero analisar se existe diferença no tamanho de machos e fêmeas para cada espécie. Assim, preciso fazer um teste T para cada espécie. O problema é que eu tenho 288 espécies (uma planilha de 6638 linhas) e, portanto, fazer um subset para cada espécie não me parece uma solução muito boa (e provavelmente não é!).
Eu queria fazer um teste T para cada nível do fator "especie". Alguém tem alguma ideia de como eu poderia fazer isso sem precisar fazer um subset para cada espécie?
A princípio eu achei que isso seria fácil (e provavelmente seja), no entanto o meu pouco conhecimento sobre o R não está me ajudando.
Eu estou enviando um exemplo hipotético do formato da minha planilha:
especie<-rep(c("a","b","c"),each=6) sexo<-rep(c("f","m"), each = 3, len = 18)
tamanho<-c(1.5,1.6,1.8,1.3,1.1,1.2,2.5,2.7,2.6,2.1,2.2,2.1,3.5,3.6,3.7,3.1,3.3,3.2) data<-data.frame(especie,sexo,tamanho)
Um abraço a todos e obrigado pela atenção.
Marcelo Costa
_______________________________________________ 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.

Olá Pavel, Inicialmente a minha pergunta está relacionada com cada espécie separadamente (tem ou não tem dimorfismo). Vou utilizar essa informação para analisar a evolução do dimorfismo na família. Consegui resolver o meu problema com o pacote "plyr". Mas obrigado pelas sugestões, vou levar em consideração outras abordagens também. abraço. Marcelo Costa Laboratório de Dinâmicas Ecológicas Programa de Pós-graduação em Entomologia - Doutorado Departamento de Zoologia - Universidade Federal do Paraná - UFPR Jardim das Américas, Curitiba, Paraná - Brasil Caixa Postal 19020, CEP 81.531-980
________________________________ De: Pavel Dodonov <pdodonov@gmail.com> Para: r-br@listas.c3sl.ufpr.br; marcelo costa <marcelokosta@yahoo.com.br> Enviadas: Quarta-feira, 30 de Janeiro de 2013 8:31 Assunto: Re: [R-br] rodar função para cada nível de um fator
Salve... Uma dúvida... sua pergunta está relacionada a cada espécie separadamente, ou você quer saber se em média os machos são maiores/menores que as fêmeas independentemente da espécie? Se for a segunda opção, você poderia fazer un modelo misto (pacote nlme, função lme). Ele vai comprar o tamanho de machos e fêmeas levando em conta a variação entre as espécies. Uma outra sugestão (pra reduzir o problema das comparações múltiplas) seria, ao invés de comparar espécie por espécie, dividir as espécies em grupos funcionais ou famílias, o que for mais interessante/fizer mais sentido, e rodar um modelo misto para cada grupo. Só uma sugestão. ;) Abs... - Pavel
-------Pavel Dodonov Biologist, PhD student in Ecology and Natural Resources, São Carlos Federal University (UFSCar), SP, Brazil http://ufscar-br.academia.edu/pdodonov
"The highest function of ecology is understanding consequences." - Frank Herbert, Dune, 1965
2013/1/29 marcelo costa <marcelokosta@yahoo.com.br>
Prezados membros,
Peço a ajuda de vocês para o seguinte problema: Eu tenho uma planilha
com dois fatores (“espécie” e “sexo”) e uma variável contínua (“tamanho”). Quero analisar se existe diferença no tamanho de machos e fêmeas para cada espécie. Assim, preciso fazer um teste T para cada espécie. O problema é que eu tenho 288 espécies (uma planilha de 6638 linhas) e, portanto, fazer um subset para cada espécie não me parece uma solução muito boa (e provavelmente não é!).
Eu queria fazer um teste T para cada nível do fator "especie".Alguém tem alguma
ideia de como eu poderia fazer isso sem precisar fazer um subset para cada espécie?
A princípio eu achei que isso seria fácil (e provavelmente seja), no entanto o meu pouco conhecimento sobre o R não está me ajudando.
Eu estou enviando um exemplo hipotético do formato da minha
planilha:
especie<-rep(c("a","b","c"),each=6) sexo<-rep(c("f","m"),
each = 3, len = 18)
tamanho<-c(1.5,1.6,1.8,1.3,1.1,1.2,2.5,2.7,2.6,2.1,2.2,2.1,3.5,3.6,3.7,3.1,3.3,3.2) data<-data.frame(especie,sexo,tamanho) Um abraço a todos e obrigado pela atenção. Marcelo Costa
_______________________________________________ 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.

Uma alternativa, talvez ajude. Veja a rotina abaixo: require(agricolae) ?kruskal comparison<-kruskal(tamanho,especie,group=TRUE, main="dada") comparison<-kruskal(tamanho,sexo,group=TRUE, main="data") Edson Lira Estatístico Manaus-Amazonas ________________________________ De: Pavel Dodonov <pdodonov@gmail.com> Para: r-br@listas.c3sl.ufpr.br; marcelo costa <marcelokosta@yahoo.com.br> Enviadas: Quarta-feira, 30 de Janeiro de 2013 6:31 Assunto: Re: [R-br] rodar função para cada nível de um fator Salve... Uma dúvida... sua pergunta está relacionada a cada espécie separadamente, ou você quer saber se em média os machos são maiores/menores que as fêmeas independentemente da espécie? Se for a segunda opção, você poderia fazer un modelo misto (pacote nlme, função lme). Ele vai comprar o tamanho de machos e fêmeas levando em conta a variação entre as espécies. Uma outra sugestão (pra reduzir o problema das comparações múltiplas) seria, ao invés de comparar espécie por espécie, dividir as espécies em grupos funcionais ou famílias, o que for mais interessante/fizer mais sentido, e rodar um modelo misto para cada grupo. Só uma sugestão. ;) Abs... - Pavel -------Pavel Dodonov Biologist, PhD student in Ecology and Natural Resources, São Carlos Federal University (UFSCar), SP, Brazil http://ufscar-br.academia.edu/pdodonov "The highest function of ecology is understanding consequences." - Frank Herbert, Dune, 1965 2013/1/29 marcelo costa <marcelokosta@yahoo.com.br> Prezados membros,
Peço a ajuda de vocês para o seguinte problema: Eu tenho uma planilha
com dois fatores (“espécie” e “sexo”) e uma variável contínua (“tamanho”). Quero analisar se existe diferença no tamanho de machos e fêmeas para cada espécie. Assim, preciso fazer um teste T para cada espécie. O problema é que eu tenho 288 espécies (uma planilha de 6638 linhas) e, portanto, fazer um subset para cada espécie não me parece uma solução muito boa (e provavelmente não é!).
Eu queria fazer um teste T para cada nível do fator "especie".Alguém tem alguma
ideia de como eu poderia fazer isso sem precisar fazer um subset para cada espécie?
A princípio eu achei que isso seria fácil (e provavelmente seja), no entanto o meu pouco conhecimento sobre o R não está me ajudando.
Eu estou enviando um exemplo hipotético do formato da minha
planilha:
especie<-rep(c("a","b","c"),each=6) sexo<-rep(c("f","m"),
each = 3, len = 18)
tamanho<-c(1.5,1.6,1.8,1.3,1.1,1.2,2.5,2.7,2.6,2.1,2.2,2.1,3.5,3.6,3.7,3.1,3.3,3.2) data<-data.frame(especie,sexo,tamanho) Um abraço a todos e obrigado pela atenção. Marcelo Costa
_______________________________________________ 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.
_______________________________________________ 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.
participantes (5)
-
Edson Lira
-
Luciano F. Sgarbi
-
Manoel Galdino
-
marcelo costa
-
Pavel Dodonov