Tabela de contingência com três variáveis

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Tabela de contingência com três variáveis

Mensagem por Prof. Marcos em Sex Nov 10, 2017 5:08 pm

Oi, pessoal!

Ontem no webnário o Felipe mandou um pergunta sobre a criação de tabelas de contingências para três variáveis.
O normal é termos uma tabela para apenas duas, uma vez que para termos três isto seria equivalente a uma espécie de tabela "3D".

Hoje resolvi pesquisar um pouco, e encontrei uma função que auxilia a pensar na associação entre três variáveis, a função ftable(). Segue um exemplo bem simples de uso:

Código:
#Criando dados de exemplo, três variáveis categóricas:
dados<-structure(list(var1 = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L,
3L, 3L), .Label = c("a", "b", "c"), class = "factor"), var2 = structure(c(1L,
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), .Label = c("f", "g", "h"), class = "factor"),
    var3 = structure(c(2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L), .Label = c("r",
    "z"), class = "factor")), .Names = c("var1", "var2", "var3"
), class = "data.frame", row.names = c(NA, -9L))

#Olhando os dados:
summary(dados)

#Criando a tabela:
tabela<-table(dados$var1, dados$var2, dados$var3)

#A tabela pode ser mostrada assim:
tabela

#Mas a função ftable ajuda a mostrar a tabela com três variáveis:
ftable(tabela)

Abraços!
avatar
Prof. Marcos

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

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Tabela de contingência com três variáveis

Mensagem por lipegui em Seg Nov 13, 2017 3:22 pm

Boa tarde Prof. Marcos e colegas. Era algo assim que estava pensando, quando fiz a pergunta. Vou pegar esse exemplo e estudar ele com mais calma. Mas de antemão, há alguma restrição quanto ao número de variáveis da função ftable e quanto a existência de NA nas colunas da variáveis?
Desde já agradeço.
avatar
lipegui

Mensagens : 12
Data de inscrição : 03/10/2017

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Tabela de contingência com três variáveis

Mensagem por Prof. Marcos em Seg Nov 13, 2017 4:06 pm

Acredito que acumular mais variáveis possa ser bem complexo, pois o número de combinações pode ficar bem grande. Mas acho que é mais um limite da capacidade de interpretação do que um limite da função.

Sobre os NAs, acredito que não seja um problema, a maioria das funções do R consegue lidar com isso.

Qualquer coisa escreva aqui no tópico se sentir dificuldades ao aplicar na prática, ok?

Abraços!
avatar
Prof. Marcos

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

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Tabela de contingência com três variáveis

Mensagem por lipegui em Sex Nov 17, 2017 8:19 pm

Boa noite prof. Marcos.

Dei uma sapiada  no código que vc disponibilizou e, por curiosidade, apliquei ele num conjunto de dados que contempla mais de 3 variáveis qualitativas além de NA's.

Para ficar mais organizado, vou postar primeiro um código referente aos dados, já que ficou um pouco extenso, conforme um procedimento que vc explicou em um outro tópico. Segue abaixo:
Código:
dados2<-structure(list(Área = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), Amostra = c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L), Nome = structure(c(4L, 3L, 26L, 4L,
6L, 8L, 6L, 23L, 27L, 8L, 1L, 6L, 18L, 11L, 18L, 4L, 11L, 19L,
8L, 21L, 8L, 8L, 8L, 24L, 8L, 8L, 13L, 26L, 24L, 6L, 11L, 6L,
8L, 29L, 8L, 8L, 8L, 23L, 10L, 6L, 6L, 8L, 1L, 8L, 8L, 6L, 8L,
18L, 2L, 6L, 2L, 21L, 10L, 1L, 2L, 2L, 21L, 23L, 2L, 8L, 21L,
19L, 19L, 12L, 21L, 3L, 17L, 21L, 8L, 17L, 8L, 16L, 3L, 9L, 3L,
22L, 3L, 19L, 11L, 8L, 13L, 22L, 7L, 13L, 19L, 13L, 7L, 24L,
8L, 13L, 14L, 8L, 26L, 8L, 25L, 11L, 8L, 4L, 5L, 8L, 8L, 11L,
6L, 26L, 6L, 15L, 11L, 20L, 4L, 8L, 5L, 6L, 11L, 11L, 6L, 28L,
11L, 6L, 11L), .Label = c("Algodão_da_praia", "Araticum", "Bordão_de_velho",
"Caboatã", "Cajazeira", "Cupiúba", "Embiriba", "Falha", "Favinha",
"Guanandi", "Ingá", "Ipê_amarelo", "Ipê_branco", "Ipê_roxo",
"Japaranduba", "Jenipapo", "Jitó", "Leiteiro", "Martelo", "Não_identificada",
"Oitizeiro", "Pau_ferro", "Pau_formiga", "Pitanga", "Praíba",
"Quiri", "Salgueiro", "Trapiá", "Visgueiro"), class = "factor"),
    Spp = structure(c(4L, 3L, 26L, 4L, 6L, 8L, 6L, 22L, 27L,
    8L, 1L, 6L, 18L, 13L, 18L, 4L, 13L, 19L, 8L, 21L, 8L, 8L,
    8L, 25L, 8L, 8L, 12L, 26L, 25L, 6L, 13L, 6L, 8L, 29L, 8L,
    8L, 8L, 22L, 10L, 6L, 6L, 8L, 1L, 8L, 8L, 6L, 8L, 18L, 2L,
    6L, 2L, 21L, 10L, 1L, 2L, 2L, 21L, 22L, 2L, 8L, 21L, 19L,
    19L, 11L, 21L, 3L, 16L, 21L, 8L, 16L, 8L, 15L, 3L, 9L, 3L,
    23L, 3L, 19L, 13L, 8L, 12L, 23L, 7L, 12L, 19L, 12L, 7L, 25L,
    8L, 12L, 14L, 8L, 26L, 8L, 24L, 13L, 8L, 4L, 5L, 8L, 8L,
    13L, 6L, 26L, 6L, 17L, 13L, 20L, 4L, 8L, 5L, 6L, 13L, 13L,
    6L, 28L, 13L, 6L, 13L), .Label = c("Al", "Ar", "Bo", "Ca",
    "Cj", "Cu", "Em", "Fa", "Fv", "Ga", "Ia", "Ib", "In", "Ir",
    "Je", "Ji", "Jp", "Le", "Mr", "Ni", "Oi", "Pf", "Pi", "Pr",
    "Pt", "Qu", "Sg", "Tr", "Vi"), class = "factor"), Altura_.m. = c(0.8,
    0.76, 0.9, 0.37, 1, NA, 1.9, 1.05, 1, NA, 0.87, 0.15, 1.5,
    0.6, 0.64, 0.56, 0.45, 1.4, NA, 0.6, NA, NA, NA, 0.45, NA,
    NA, 0.46, 0.54, 0.4, 1.6, 0.4, 1.5, NA, 0.45, NA, NA, NA,
    1.15, 0.55, 0.8, 0.35, NA, 0.25, NA, NA, 0.66, NA, 0.8, 0.9,
    0.17, 0.9, 0.95, 0.42, 1.15, 0.9, 0.95, 1, 0.55, 1, NA, 0.9,
    0.73, 0.72, 1.9, 1.15, 1.6, 0.96, 1.26, NA, 1.08, NA, 0.6,
    1.2, 1, 0.65, 2.6, 1.8, 1.33, 0.88, NA, 0.99, 2.4, 0.44,
    0.88, 1.1, 1.82, 0.49, 0.2, NA, 1.18, 0.38, NA, 1.07, NA,
    0.3, 0.6, NA, 0.48, 0.64, NA, NA, 0.69, 0.69, 0.2, 1.6, 0.4,
    0.4, 1.18, 0.54, NA, 0.6, 1.4, 0.2, 0.67, 1.28, 1.25, 0.6,
    0.68, 0.87), Desenvolvimento = structure(c(3L, 3L, 3L, 4L,
    3L, 1L, 2L, 3L, 3L, 1L, 3L, 4L, 3L, 4L, 4L, 4L, 4L, 3L, 1L,
    4L, 1L, 1L, 1L, 4L, 1L, 1L, 4L, 4L, 4L, 2L, 4L, 3L, 1L, 4L,
    1L, 1L, 1L, 3L, 4L, 3L, 4L, 1L, 4L, 1L, 1L, 4L, 1L, 3L, 3L,
    4L, 3L, 3L, 4L, 3L, 3L, 3L, 3L, 4L, 3L, 1L, 3L, 3L, 3L, 2L,
    3L, 2L, 3L, 3L, 1L, 3L, 1L, 4L, 3L, 3L, 4L, 2L, 2L, 3L, 3L,
    1L, 3L, 2L, 4L, 3L, 3L, 2L, 4L, 4L, 1L, 3L, 4L, 1L, 3L, 1L,
    4L, 4L, 1L, 4L, 4L, 1L, 1L, 4L, 4L, 4L, 2L, 4L, 4L, 3L, 4L,
    1L, 4L, 3L, 4L, 4L, 3L, 3L, 4L, 4L, 3L), .Label = c("", "Bom",
    "Regular", "Ruim"), class = "factor"), Qualidade = structure(c(2L,
    2L, 2L, 4L, 2L, 1L, 3L, 2L, 2L, 1L, 2L, 4L, 2L, 2L, 2L, 2L,
    2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 3L,
    2L, 1L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 2L,
    1L, 2L, 2L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 1L, 2L,
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L,
    2L, 2L, 3L, 1L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 4L, 1L, 2L, 3L,
    1L, 2L, 1L, 3L, 3L, 1L, 2L, 2L, 1L, 1L, 3L, 2L, 3L, 3L, 3L,
    2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 2L), .Label = c("",
    "Boa", "Regular", "Ruim"), class = "factor"), Coroamento = structure(c(1L,
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "Regular", class = "factor"),
    Entrelinha = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
    2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Regular", "Ruim"), class = "factor")), .Names = c("Área",
"Amostra", "Nome", "Spp", "Altura_.m.", "Desenvolvimento", "Qualidade",
"Coroamento", "Entrelinha"), class = "data.frame", row.names = c(NA,
-119L))

Quando importei esses dados para o R, uma coisa que me chamou atenção é que para a coluna que continha dados numéricos, o próprio R colocou NA onde estava em branco. Nas demais colunas, que são categóricas, onde estava em branco o R deixou em branco mesmo. Eu não mexi em nada e rodei a parte do código que trata da confecção da tabela, conforme segue.

Código:
#Aplicando para dados com 5 variáveis

attach(dados2)

#Resumo dos dados
summary(dados2)

#Tabela de "contingência"
tabela2<-table(Spp, Desenvolvimento, Qualidade, Coroamento, Entrelinha)

#"Agregando" as tabelas
tabela3<-ftable(tabela2)
tabela3

O código rodou mas acabou produzindo uma tabela com contagem numérica nas colunas para entrelinhas regular ou ruim em função das espécies e das condições das outras variáveis. Eu esperava que retornasse as espécies na primeira coluna e um valor de contagem nas demais colunas para, quem sabe, eu pudesse medir uma associação. Mas valeu, uma hora e gente acha um jeito rsrsrs.

Obrigado e bom fim de semana.
avatar
lipegui

Mensagens : 12
Data de inscrição : 03/10/2017

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Tabela de contingência com três variáveis

Mensagem por Prof. Marcos em Sab Nov 18, 2017 3:43 pm

Assim que tiver um tempinho darei uma olada com calma, Felipe, para ver se podemos chegar no que você quer. Talvez seja necessário trabalhar com alguma outra função, vamos ver.

Em breve volto aqui, ok? Wink
avatar
Prof. Marcos

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

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Tabela de contingência com três variáveis

Mensagem por Prof. Marcos em Sab Nov 18, 2017 10:28 pm

Felipe, você conseguiria construir um pequeno exemplo do que espera como resultado? Se você puder, vá no excel ou outro gerenciador de planilhas, e escreva um pedaço (com dados inventados, nem precisam ser reais) do que seria a tabela que você esperava como resultado no seu exemplo acima. Assim acho que pode ser mais fácil prosseguirmos em busca de uma solução, ok?
avatar
Prof. Marcos

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

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Tabela de contingência com três variáveis

Mensagem por lipegui em Seg Nov 20, 2017 11:27 pm

Boa noite prof. Marcos.

Então, eu estava esperando encontrar algo conforme e exemplo do código abaixo:
Código:
structure(list(Spp = structure(1:5, .Label = c("Araticum", "Bordão_de_velho",
"Caboatã", "Cajazeira", "Cupiúba"), class = "factor"), Des_bom = c(0L,
2L, 0L, 0L, 3L), Des_reg = c(5L, 2L, 1L, 0L, 5L), Des_ruim = c(0L,
1L, 4L, 2L, 6L), Qual_bom = c(5L, 5L, 4L, 2L, 9L), Qual_reg = c(0L,
0L, 0L, 0L, 4L), Qual_ruim = c(0L, 0L, 1L, 0L, 1L), Cor_bom = c(0L,
0L, 0L, 0L, 0L), Cor_reg = c(5L, 5L, 5L, 2L, 14L), Cor_ruim = c(0L,
0L, 0L, 0L, 0L), Entr_bom = c(0L, 0L, 0L, 0L, 0L), Entr_reg = c(5L,
1L, 3L, 0L, 9L), Entr_ruim = c(0L, 4L, 2L, 2L, 5L)), .Names = c("Spp",
"Des_bom", "Des_reg", "Des_ruim", "Qual_bom", "Qual_reg", "Qual_ruim",
"Cor_bom", "Cor_reg", "Cor_ruim", "Entr_bom", "Entr_reg", "Entr_ruim"
), class = "data.frame", row.names = c(NA, -5L))

Eu peguei as 5 primeiras espécies e contei todas que tinham desenvolvimento bom, depois regular e ruim. Fiz isso para as demais variáveis (qualidade, coroamento e entrelinhas) e fui colocando cada um numa coluna.

Depois disso, será que dá pra usar um qui-quadrado, por exemplo, nesses dados para medir associação (por exemplo, para verificar se há influência do manejo no estabelecimento de um reflorestamento com espécies nativas)?

Um abraço!!
avatar
lipegui

Mensagens : 12
Data de inscrição : 03/10/2017

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Tabela de contingência com três variáveis

Mensagem por Prof. Marcos em Qua Nov 22, 2017 6:32 pm

Opa, de volta aqui.

Bom, o exemplo acima na verdade só envolve duas variáveis, então seria uma tabela de contingência simples:

Código:
table(dados2$Nome, dados2$Desenvolvimento)

Acho que o código acima retorna o que você quer, não?
Mas note que a variável Desenvolvimento tem uma categoria "fantasma", que você poderia substituir por um nome como "desconhecido" (se for este o caso, claro).

Para mu qui-quadrado, possivelmente você teria que fazer um teste por espécie (ou, talvez, se fizer sentido, agregar espécies de um mesmo grupo, aumentando o n amostral), relacionando o estado de desenvolvimento com as variáveis de interesse. Faz sentido?
avatar
Prof. Marcos

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

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Tabela de contingência com três variáveis

Mensagem por lipegui em Qui Nov 23, 2017 8:21 pm

Boa noite prof. Marcos.
Primeiramente obrigado pelas respostas.
Então, dá pra fazer tabelas de contingências simples envolvendo espécies e desenvolvimento, espécies e qualidade, espécies e coroamento e espécies e entrelinha. A minha ideia seria compilar tudo isso numa tabela só, como no exemplo que fiz, em que fiz usando só 5 espécies pq fiz no muque, lá no calc.
Ficaria algo assim:

Um qui-quadrado por espécie não é exatamente o que eu estava imaginando e sim para o reflorestamento. Até porque a ideia é verificar se existe, sob o ponto de vista estatístico, relação entre as espécies que foram plantadas e que estão se desenvolvendo no campo e o manejo empregado (que quase sempre é uma roçada nas entrelinhas, coroa ao redor da muda, adubação de base e vez ou outra, um combate de formigas).
avatar
lipegui

Mensagens : 12
Data de inscrição : 03/10/2017

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Tabela de contingência com três variáveis

Mensagem por lipegui em Qui Nov 23, 2017 8:28 pm

No espaço em branco abaixo de "Ficaria algo assim:" era pra vir a figura abaixo

avatar
lipegui

Mensagens : 12
Data de inscrição : 03/10/2017

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Tabela de contingência com três variáveis

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum