[R-br] rodar função para cada nível de um fator

Manoel Galdino mcz.fea em gmail.com
Terça Janeiro 29 18:10:32 BRST 2013


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 em 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 em 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/
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20130129/d15b8528/attachment.html>


Mais detalhes sobre a lista de discussão R-br