Programa R para Biologia da Conservação
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Manipular variável categórica com muitas classes

2 participantes

Ir para baixo

Manipular variável categórica com muitas classes Empty Manipular variável categórica com muitas classes

Mensagem por Giovanna Barreto Sex Jan 29, 2016 12:38 pm

Qual função ou funções são necessárias para fazer um corte nas classes de variáveis categóricas e trabalhar apenas com as variáveis mais frequentes? A minha pergunta é: existe algum padrão entre o número de lacinhos jogados no mangue e a quantidade de dúzias capturadas nos mangues mais visitados? Não sei se esta é a melhor pergunta, mas a ideia é investigar, por exemplo, qual é o mangue mais produtivo.

Recortei parte dos dados e compartilho em anexo!
Vamos estudar!

Brigadão!
Giggia

p.s: não consegui compartilhar a tabela aqui, vou mandar pro seu e-mail!
Giovanna Barreto
Giovanna Barreto

Mensagens : 49
Data de inscrição : 23/12/2015

Ir para o topo Ir para baixo

Manipular variável categórica com muitas classes Empty Re: Manipular variável categórica com muitas classes

Mensagem por Prof. Marcos Seg Fev 01, 2016 6:56 pm

Cheguei! Very Happy

Desculpe a demora.

Vamos lá, vou aqui por partes, ok? Primeiro, para quem quiser reproduzir o exemplo, basta colar este código para criar os dados:

Código:
dados<-structure(list(ID = 1:101, Comunidade = structure(c(2L, 3L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 2L, 2L, 2L, 4L, 4L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L), .Label = c("Almeida", "Ilha_Rasa", "Ponta_do_Lanco",
"Tromomo"), class = "factor"), Mangue = structure(c(25L, 12L,
10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 23L, 14L, 9L,
9L, 14L, 12L, 14L, 14L, 14L, 5L, 4L, 13L, 7L, 10L, 28L, 25L,
25L, 25L, 25L, 26L, 24L, 6L, 14L, 1L, 1L, 14L, 6L, 14L, 11L,
10L, 7L, 3L, 23L, 10L, 13L, 26L, 10L, 4L, 4L, 13L, 18L, 16L,
10L, 10L, 13L, 17L, 8L, 25L, 8L, 23L, 6L, 14L, 14L, 20L, 20L,
20L, 19L, 19L, 19L, 19L, 9L, 22L, 22L, 12L, 21L, 21L, 21L, 21L,
26L, 26L, 14L, 14L, 25L, 12L, 12L, 27L, 27L, 27L, 2L, 2L, 2L,
2L, 2L, 8L, 27L, 8L, 15L, 12L, 6L), .Label = c("Almeida", "Ararapira",
"Barra_de_Tagacaba", "Cacunda", "Dicunha", "Furado", "Furado_Grande",
"Guanituba", "Guapicum", "Guaraquecaba", "Ilinha", "Laranjeiras",
"Melado", "Pauapique", "PeÁas", "Pocinho", "Pococa", "Rabelo",
"Rio_da_Cacada", "Rio_da_Pimenta", "Rio_do_Santo", "Rio_dos_Patos",
"Serelepe", "Teixeira", "Tibicanga", "Tromomo", "Vila_Fatima",
"Vilheira"), class = "factor"), Como = structure(c(2L, 2L, 1L,
1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L,
3L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 3L, 2L, 1L, 2L, 2L, 2L, 2L, 2L,
1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L,
1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 3L, 3L, 3L, 3L, 2L, 2L, 2L,
2L, 3L, 2L, 2L, 2L, 2L, 2L, 3L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 1L), .Label = c("Andada", "Lacinho", "Outro"), class = "factor"),
    Lacinhos = c(900L, 400L, NA, NA, NA, 1300L, NA, NA, 600L,
    400L, NA, 500L, 600L, 800L, 300L, 300L, 600L, 500L, 700L,
    800L, 300L, NA, NA, 350L, 380L, 300L, NA, 400L, NA, 600L,
    NA, 600L, 1000L, NA, NA, NA, NA, NA, 240L, 300L, NA, 500L,
    NA, NA, 500L, NA, 250L, 400L, 500L, 800L, 200L, NA, 500L,
    500L, NA, NA, NA, 600L, 800L, 1500L, 1000L, 500L, NA, NA,
    NA, 1000L, NA, NA, NA, NA, NA, 600L, 400L, NA, NA, 450L,
    NA, NA, NA, NA, 400L, 375L, 500L, 300L, NA, 400L, 450L, 1000L,
    1000L, 1000L, NA, NA, 400L, NA, NA, 300L, 800L, 300L, 1000L,
    450L, NA), Duzias = c(50L, 17L, 47L, 47L, 47L, 70L, 25L,
    25L, 25L, 15L, 60L, 10L, 24L, 40L, 25L, 25L, 48L, 20L, 46L,
    56L, 21L, 30L, 40L, 14L, 14L, 30L, 40L, NA, 30L, NA, 30L,
    62L, 70L, 108L, 25L, 15L, 50L, 30L, 16L, 21L, 30L, 20L, 20L,
    6L, 21L, 25L, 10L, 20L, 30L, 41L, 8L, 8L, 30L, 25L, 8L, 20L,
    80L, 40L, 40L, 80L, 50L, 21L, 20L, 13L, 70L, 60L, 43L, 45L,
    45L, 40L, 30L, 38L, 25L, 12L, 48L, 19L, 7L, 9L, 5L, 9L, 20L,
    16L, 40L, 25L, 30L, 17L, 20L, 52L, 56L, 53L, 8L, 75L, 22L,
    42L, 42L, 16L, 40L, 16L, 53L, 19L, 12L), Companhia = structure(c(4L,
    17L, 12L, 12L, 12L, 12L, 11L, 11L, 11L, 11L, 11L, 22L, 22L,
    11L, 8L, 8L, 8L, 22L, 21L, 21L, 21L, 16L, 16L, 22L, 22L,
    22L, 22L, 22L, 22L, 3L, 3L, 5L, 13L, 7L, 7L, 22L, 22L, 8L,
    22L, 22L, 16L, 10L, 22L, 22L, 22L, 22L, 22L, 22L, 12L, 23L,
    22L, 22L, 1L, 11L, 12L, 12L, 2L, 11L, 18L, 19L, 18L, 22L,
    22L, 22L, 6L, 21L, 22L, 22L, 8L, 8L, 8L, 8L, 14L, 15L, 15L,
    17L, 22L, 22L, 22L, 22L, 8L, 8L, 22L, 22L, 9L, 20L, 20L,
    5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 20L, 5L), .Label = c("Amos_e_John_Lennon_",
    "Amos_e_John_Lenon", "Azuil", "Brener", "Colega", "Cunhado",
    "Esposa_e_filho", "Filho", "Filho_e_irmao", "Genro", "Irmao",
    "Isaac", "Jeferson", "Keila", "Keila_e_filho", "Luana", "Naldo",
    "Pai", "Pai_e_irmao", "Primo", "Sobrinho", "Sozinho", "Wanderley"
    ), class = "factor"), Parentesco = structure(c(6L, 14L, 9L,
    9L, 9L, 9L, 11L, 11L, 11L, 11L, 11L, NA, NA, 11L, 6L, 6L,
    6L, NA, 15L, 15L, 15L, 5L, 5L, NA, NA, NA, NA, NA, NA, 12L,
    12L, 1L, 1L, 4L, 4L, NA, NA, 6L, NA, NA, 5L, 9L, NA, NA,
    NA, NA, NA, NA, 9L, 1L, NA, NA, 10L, 10L, 8L, 8L, 10L, 11L,
    12L, 13L, 12L, NA, NA, NA, 2L, 15L, NA, NA, 6L, 6L, 6L, 6L,
    3L, 4L, 4L, 14L, NA, NA, NA, NA, 6L, 6L, NA, NA, 7L, 14L,
    14L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 14L,
    1L), .Label = c("Colega", "Cunhado", "esposa", "Esposa_e_filho",
    "Filha", "Filho", "Filho_e_irmao", "genro", "Genro", "irmao",
    "Irmao", "Pai", "Pai_e_irmao", "Primo", "Sobrinho"), class = "factor"),
    N_Pescadores = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
    2L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L,
    1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 1L,
    2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 3L, 2L, 2L,
    2L, 3L, 2L, 2L, 3L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L,
    2L, 2L, 2L, 3L, 3L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 3L,
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
    2L), Atravessador = structure(c(1L, 11L, 16L, 16L, 16L, 7L,
    7L, 7L, 7L, 7L, 7L, 7L, 7L, 17L, 18L, 18L, 17L, 16L, 4L,
    4L, 4L, 8L, 8L, 7L, 7L, 2L, 2L, NA, 3L, 9L, 9L, 11L, 13L,
    13L, 13L, 17L, 17L, 17L, 4L, 4L, 5L, 6L, 7L, 15L, 7L, 7L,
    7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 16L, 16L,
    16L, 7L, 7L, 17L, 17L, 4L, 4L, 4L, 14L, 14L, 14L, 14L, 18L,
    18L, 18L, 11L, NA, 12L, 18L, 18L, 18L, 18L, 3L, 3L, 3L, 11L,
    11L, 10L, 10L, 17L, 10L, 14L, 17L, 17L, 17L, 17L, 17L, 17L,
    17L, 11L, 17L), .Label = c("Aelton", "Anderson", "Elton",
    "Gabriel", "irmao", "Joel", "Joel_Junior", "Joel_Junior_e_Anderson",
    "Josi", "Juico", "Nelson", "Pedrinho", "Saulo_", "Tiao",
    "Turista", "Vanico", "Verci", "Wilson"), class = "factor"),
    Preco = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 5L, 10L,
    NA, 12L, 12L, 12L, 11L, 12L, 10L, 10L, 10L, 7L, 7L, 11L,
    11L, 9L, 6L, NA, 10L, NA, 10L, 12L, 11L, 8L, 8L, 11L, 10L,
    NA, 11L, 11L, 7L, 12L, NA, 12L, 11L, NA, 11L, 11L, NA, 11L,
    11L, 11L, 11L, NA, NA, NA, NA, NA, 12L, 12L, 12L, 11L, NA,
    NA, NA, 10L, NA, NA, 11L, 11L, 11L, 11L, 12L, 10L, NA, 9L,
    NA, 11L, 11L, 11L, 12L, 12L, 12L, 12L, 12L, 10L, 10L, 15L,
    15L, 11L, 15L, 7L, 11L, 10L, 7L, 11L, 11L, 11L, 11L, 10L,
    10L)), .Names = c("ID", "Comunidade", "Mangue", "Como", "Lacinhos",
"Duzias", "Companhia", "Parentesco", "N_Pescadores", "Atravessador",
"Preco"), class = "data.frame", row.names = c(NA, -101L))


E aí, se quiserem espiar os dados:

Código:
summary(dados)

A nossa questão pode ser divididas em três partes:
1 - Identificar os mangues mais selecionados;
2 - Criar uma lista com os nomes destes mangues;
3 - Cortar os dados, criando uma nova planilha para estes mangues.

Um alerta: este é um bom exemplo de situação na qual não devemos usar attach! affraid
Isto vai acontecer porque vamos criar um sub-conjunto dos nossos dados, e os nomes de colunas vão se repetir. Então seria uma enorme bagunção fazer isso...
Na prática, então, vamos neste exemplo usar o formato mais básico do R: dados$variável
Beleza?

Na próxima postagem faço o primeiro passo. Wink
Prof. Marcos
Prof. Marcos

Mensagens : 678
Data de inscrição : 23/12/2015
Idade : 42
Localização : Maceió, AL

https://cantinhodor.wordpress.com/

Ir para o topo Ir para baixo

Manipular variável categórica com muitas classes Empty Re: Manipular variável categórica com muitas classes

Mensagem por Prof. Marcos Seg Fev 01, 2016 6:57 pm

Certo, vamos continuar.
O primeiro passo é identificar os Mangues mais visitados. Não tem muito mistério:

Código:
###Quais os mangues mais visitados?

#Tabulando:
tabela.m<-table(dados$Mangue)

tabela.m

#Colocando na ordem:
tabela.m.ordem<-sort(tabela.m, decreasing=T)

tabela.m.ordem


Na sequência, passo 2. Smile
Prof. Marcos
Prof. Marcos

Mensagens : 678
Data de inscrição : 23/12/2015
Idade : 42
Localização : Maceió, AL

https://cantinhodor.wordpress.com/

Ir para o topo Ir para baixo

Manipular variável categórica com muitas classes Empty Re: Manipular variável categórica com muitas classes

Mensagem por Prof. Marcos Seg Fev 01, 2016 6:58 pm

Segundo passo!
Digamos que a gente queira analisar os dados apenas para os Mangues com mais do que 4 visitas.
Lá vai:

Código:
###Preparando para separar os dados:

#Podemos ver os nomes assim:
names(tabela.m.ordem)

#E podemos "perguntar" quem tem mais visitas que um ponto de corte qualquer assim:
tabela.m.ordem>4  #Neste caso considerando quem tem mais do que 4 visitas

#Podemos listar os nomes dos mangues mais visitados assim:
names(tabela.m.ordem[tabela.m.ordem>4])

#Vamos salvar estes nomes:
mangues.mais<-names(tabela.m.ordem[tabela.m.ordem>4])


Prof. Marcos
Prof. Marcos

Mensagens : 678
Data de inscrição : 23/12/2015
Idade : 42
Localização : Maceió, AL

https://cantinhodor.wordpress.com/

Ir para o topo Ir para baixo

Manipular variável categórica com muitas classes Empty Re: Manipular variável categórica com muitas classes

Mensagem por Prof. Marcos Seg Fev 01, 2016 7:02 pm

Agora o último passo! cheers

Parece que vai ser complicado, né? Mas é só uma linha de comando. bounce

Basta isso:

Código:
dados.selecionados<-subset(dados, dados$Mangue %in% mangues.mais)

A função subset serve pra isso mesmo, criar um "subset" dos dados, um sub-conjunto deles com o critério (ou critérios) que desejarmos.
O nosso critério já estava criado, era a lista de nomes, certo? Aí bastou avisar pro R que o subset deve ser criado com todos os mangues cujos nomes estejam na nossa lista. Dizer para o R selecionar qualquer mangue da lista é feito com aquele %in%. É o mesmo que dizer: considere os Mangues cujo nome seja "A" ou "B" ou "C", etc.

E pronto, dados.selecionados é a nova planilha de dados, que contém apenas os mangues mais do que 4 visitas. Very Happy

Dúvidas? Questões?
Qualquer coisa a gente continua. Wink
Prof. Marcos
Prof. Marcos

Mensagens : 678
Data de inscrição : 23/12/2015
Idade : 42
Localização : Maceió, AL

https://cantinhodor.wordpress.com/

Ir para o topo Ir para baixo

Manipular variável categórica com muitas classes Empty Re: Manipular variável categórica com muitas classes

Mensagem por Giovanna Barreto Qua Fev 03, 2016 4:46 pm

Legal, Marcos. Deu pra acompanhar aqui direitinho! study

Agora eu queria saber qual desses mangues é mais produtivo. Aí inclui todos, pois pode ser que eu tenha mangues que mesmo tendo sido menos visitado tenha um número de captura maior. Eu tenho a variável lacinho (que é quantitativa) e dúzias (também quantitativa).

Como eu posso chegar nesse resultado? Basketball
Giovanna Barreto
Giovanna Barreto

Mensagens : 49
Data de inscrição : 23/12/2015

Ir para o topo Ir para baixo

Manipular variável categórica com muitas classes Empty Re: Manipular variável categórica com muitas classes

Mensagem por Prof. Marcos Seg Fev 08, 2016 9:22 am

Giovanna Barreto escreveu:Legal, Marcos. Deu pra acompanhar aqui direitinho! study

Agora eu queria saber qual desses mangues é mais produtivo. Aí inclui todos, pois pode ser que eu tenha mangues que mesmo tendo sido menos visitado tenha um número de captura maior. Eu tenho a variável lacinho (que é quantitativa) e dúzias (também quantitativa).

Como eu posso chegar nesse resultado? Basketball

Oi, Giovanna!

Bom, em princípio, você tem o mangue como variável explicativa e cada medida de produtividade como variável resposta. Então em cada caso (ou seja, para cada variável resposta) você faria uma ANOVA. Você estaria, então, comparando o valor médio daquela variável entre os mangues. Faz sentido para o que você quer saber?

Mas aí algumas coisas precisam ser pensadas: a anova vai funcionar bem quanto melhor for o balanceamento dos dados. O seja: o cenário ideal seria ter o mesmo esforço amostral para cada mangue. Não é que ela não funcione sem isso, mas o poder do teste diminui, e você vai ficar mais em dúvida no caso de um resultado não significativo.

Aí, como prosseguir vai depender dos seus dados. Pode ser que os mangues com uma quantidade muito pequena de unidades amostrais devam ficar de fora, pois podem comprometer muito o poder estatístico da sua análise. Aqui não vamos ter uma regra clara, e sim o bom senso mesmo.

Ah, sim, e estou aqui pensando em ANOVA, mas é sempre bom lembrar que os pressupostos precisam ser observados. Dependendo de como for, pode ser legal partir para um não paramétrico ou um GLM.

Enfim: tudo assunto do nosso atual módulo 4. Very Happy

Qualquer coisa vamos nos falando mais sobre isso.
Prof. Marcos
Prof. Marcos

Mensagens : 678
Data de inscrição : 23/12/2015
Idade : 42
Localização : Maceió, AL

https://cantinhodor.wordpress.com/

Ir para o topo Ir para baixo

Manipular variável categórica com muitas classes Empty Re: Manipular variável categórica com muitas classes

Mensagem por Giovanna Barreto Qua Fev 10, 2016 1:40 pm

hum, não entendi muito bem. Rolling Eyes

Se na ANOVA eu calculo a variação entre a média de cada variável e a média geral e a variação dentro de cada média, por que e como eu devo fazer uma ANOVA para cada variável resposta?

No caso específico desses meus dados, a quantidade de "lacinho" também influencia minha variável resposta produtividade. Então eu teria 2 variáveis explicativas sendo que uma é categórica e a outra quantitativa e uma variável resposta que é quantitativa. Acho que ainda não vimos um teste nessa situação. Existe algum?

Terminei os exercícios do módulo 4 ontem, mas fiquei com muitas dúvidas na interpretação dos resultados. Aprendemos muita coisa nesse módulo. Penso que seria legal e importante se no nosso próximo Webinário a gente fizesse juntos os exercícios.

Será que dá tempo?
Giovanna Barreto
Giovanna Barreto

Mensagens : 49
Data de inscrição : 23/12/2015

Ir para o topo Ir para baixo

Manipular variável categórica com muitas classes Empty Re: Manipular variável categórica com muitas classes

Mensagem por Giovanna Barreto Qui Fev 11, 2016 10:36 pm

Seria através de modelos lineares mistos ou tô viajando? Li que um tal de GAM pode ser usado quando se espera relações não-lineares entre as variáveis... Rolling Eyes Question
Giovanna Barreto
Giovanna Barreto

Mensagens : 49
Data de inscrição : 23/12/2015

Ir para o topo Ir para baixo

Manipular variável categórica com muitas classes Empty Re: Manipular variável categórica com muitas classes

Mensagem por Prof. Marcos Sáb Fev 13, 2016 9:27 am

Oi, Giovanna

O melhor caminho aqui, para nos direcionarmos para os métodos estatísticos adequados, é delinear claramente as hipóteses, declarando as variáveis e tudo mais - e por um momento esquecer os testes, apenas pensar nas ideias.

Então tente colocar as ideias a serem testadas desta maneira: apresente as suas hipóteses a partir das variáveis, identificando apenas a natureza delas (quantitativa, qualitativa) e sua "posição" (explicativa ou resposta; ou, em alguns casos, nenhum dos dois, pois pode acontecer).

Aí podemos pegar as hipóteses e entender melhor, para aí sim podermos pensar nos testes. Smile
Acho que me perdi um pouco nas ideias a serem testadas, então precisamos voltar atrás e olhar pra isso, ok?

Ah, mas adiantando uma coisa:
"Então eu teria 2 variáveis explicativas sendo que uma é categórica e a outra quantitativa e uma variável resposta que é quantitativa."

Na última parte do módulo 4 eu falo da ANCOVA. Veja lá,s erve exatamente pra isso! Very Happy

Prof. Marcos
Prof. Marcos

Mensagens : 678
Data de inscrição : 23/12/2015
Idade : 42
Localização : Maceió, AL

https://cantinhodor.wordpress.com/

Ir para o topo Ir para baixo

Manipular variável categórica com muitas classes Empty Re: Manipular variável categórica com muitas classes

Mensagem por Giovanna Barreto Dom Fev 14, 2016 4:54 pm

Beleza! Vou refletir e (re)elaborar minhas hipóteses!
study
Giovanna Barreto
Giovanna Barreto

Mensagens : 49
Data de inscrição : 23/12/2015

Ir para o topo Ir para baixo

Manipular variável categórica com muitas classes Empty Re: Manipular variável categórica com muitas classes

Mensagem por Giovanna Barreto Qua Fev 17, 2016 5:06 pm

idem do tópico sobre o TM!
Wink
Giovanna Barreto
Giovanna Barreto

Mensagens : 49
Data de inscrição : 23/12/2015

Ir para o topo Ir para baixo

Manipular variável categórica com muitas classes Empty Re: Manipular variável categórica com muitas classes

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos