Enc. 4: Qui-quadrado e V de Cramér
scipy.stats.chi2_contingency · cálculo manual de V
📊 Slides
🍊 Metáfora
Imagine isso…
Um professor de programação observa os logs de um chatbot educacional e separa os estudantes em três grupos, conforme o quanto usam a ferramenta: pouco, médio e muito. Ele também classifica cada pergunta feita ao chatbot em um de três tipos: conceitual (dúvidas sobre o que um comando ou estrutura significa), depuração (pedidos de ajuda para encontrar um erro no código) ou trecho de código (pedidos por um exemplo ou solução pronta). Se o quanto um estudante usa o chatbot não tivesse nenhuma relação com o tipo de pergunta que ele faz, esperaríamos que os três tipos de pergunta aparecessem na mesma proporção dentro de cada grupo, refletindo apenas a popularidade geral de cada tipo entre todos os estudantes. O qui-quadrado (χ²) compara essa distribuição esperada (sem relação alguma) com o que foi de fato observado nos registros de conversa.
Quanto maior a diferença entre o observado e o esperado, maior o χ², e mais evidência de que o quanto o estudante usa o chatbot está associado ao tipo de pergunta que ele costuma fazer. O V de Cramér entra depois, para dizer o quão forte é essa associação, de um jeito que não depende de quantos estudantes foram observados.
Por que não basta olhar o χ²? O valor de χ² cresce junto com o tamanho da amostra: com muitas observações, até uma associação fraquíssima pode gerar um χ² grande e um p pequeno. Por isso χ² responde apenas existe associação? (significância), enquanto o V de Cramér responde quão forte é essa associação? (tamanho do efeito), de forma comparável entre estudos com amostras diferentes.
🎯 Para que serve
Testa se duas variáveis categóricas nominais (categorias sem ordem natural, como o tipo de pergunta ou o perfil de uso) são independentes uma da outra. O resultado é organizado numa tabela de contingência: cada linha é uma categoria da primeira variável, cada coluna é uma categoria da segunda, e cada célula conta quantos estudantes caem naquela combinação.
O que é uma variável categórica nominal? É uma variável cujos valores são rótulos, sem ordem ou distância numérica entre eles: “conceitual”, “depuração” e “trecho de código” não têm um “maior que” natural entre si, ao contrário de uma escala Likert (ordinal) ou de uma contagem de mensagens (contínua). Qui-quadrado foi feito exatamente para esse tipo de dado.
Em termos de hipótese:
| H₀ | As duas variáveis são independentes (não há associação na população). |
| H₁ | As duas variáveis são associadas (a distribuição de uma varia conforme a categoria da outra). |
Em dados conversacionais, um exemplo típico cruza o tipo de pergunta feita ao chatbot (conceitual, depuração, trecho de código), extraído dos logs de um chatbot baseado em LLM, com o quanto o estudante usa a ferramenta (pouco, médio, muito), também derivado da frequência de interação. A pergunta é: o tipo de pergunta que o estudante faz varia conforme o quanto ele usa o chatbot? O qui-quadrado responde se essas duas categorias estão associadas, não qual delas “causa” a outra.
Por que agrupar em faixas de uso, e não usar o número de mensagens direto? Quando o objetivo é comparar categorias (por exemplo, “quem usa pouco” versus “quem usa muito”), é comum transformar uma variável contínua em faixas nominais ou ordinais. Isso simplifica a leitura da tabela de contingência, mas descarta informação: sempre que a variável original for contínua e a pergunta permitir, prefira Pearson ou Spearman, que aproveitam melhor essa informação.
🧮 Fórmula
O χ² soma, célula a célula da tabela de contingência, o quanto o valor observado (O) se afasta do valor esperado (E) caso as duas variáveis fossem realmente independentes, como no exemplo do professor de programação: quanto mais os registros reais se afastam do que seria esperado sem nenhuma relação entre o quanto o estudante usa o chatbot e o tipo de pergunta que ele faz, maior o χ².
| χ² = | Σ (Oᵢ − Eᵢ)² |
| Eᵢ |
Lendo a fórmula: Oᵢ é a frequência observada em cada célula da tabela de contingência; Eᵢ é a frequência esperada naquela mesma célula, caso as variáveis fossem independentes; Σ soma o resultado para todas as células. A frequência esperada de uma célula é calculada por Eᵢ = (total da linha × total da coluna) / total geral.
Como χ² é calculado, passo a passo:
- Monte a tabela de contingência com as frequências observadas (O) em cada célula.
- Calcule os totais de cada linha, de cada coluna, e o total geral (n).
- Para cada célula, calcule a frequência esperada: E = (total da linha × total da coluna) / n.
- Para cada célula, calcule (O − E)² / E.
- Some o resultado de todas as células → χ².
Aplicação simples: aplicando os passos a 40 estudantes
Para ver os passos acima em ação, seguem 40 estudantes fictícios, cruzando o tipo de pergunta (conceitual ou depuração) com o nível do estudante (iniciante ou avançado), o mesmo tipo de cruzamento usado no exemplo Python mais abaixo, só que numa tabela 2×2 menor, para facilitar a conta à mão:
| Conceitual (O) | Depuração (O) | Total da linha | |
|---|---|---|---|
| Iniciante | 15 | 5 | 20 |
| Avançado | 5 | 15 | 20 |
| Total da coluna | 20 | 20 | n = 40 |
- Totais (passos 1–2): linhas = 20 e 20; colunas = 20 e 20; n = 40.
- Esperadas (passo 3): como as duas linhas e as duas colunas têm o mesmo total, todas as células esperam E = (20 × 20) / 40 = 10.
- (O − E)² / E (passo 4): (15−10)²/10 = 2,5 · (5−10)²/10 = 2,5 · (5−10)²/10 = 2,5 · (15−10)²/10 = 2,5.
- Resultado (passo 5): χ² = 2,5 + 2,5 + 2,5 + 2,5 = 10,00, com 1 grau de liberdade.
Interpretação: χ² = 10,00 nesses 40 estudantes fictícios é grande o suficiente para rejeitar H₀ (para 1 grau de liberdade, valores de χ² acima de 3,84 já levam a p < .05): iniciantes e avançados parecem, sim, preferir tipos diferentes de pergunta. No exemplo Python mais abaixo,
scipy.stats.chi2_contingencyfaz exatamente essa conta, só que para uma tabela 3×3 com os 3 tipos de pergunta e as 3 faixas de uso do conjunto de dados completo.
🎥 Sugestão de vídeo
Vídeo sugerido sobre qui-quadrado
📐 V de Cramér
O χ² diz apenas se a associação existe (significância). Para saber quão forte ela é, de um jeito que não infla sozinho conforme n cresce, usamos o V de Cramér, que reescala o χ² pelo tamanho da amostra e pelo formato da tabela:
| V = √ | χ² |
| n · k |
Lendo a fórmula: n é o total de estudantes na tabela; k é o menor entre (número de linhas − 1) e (número de colunas − 1). Dividir χ² por n remove o efeito do tamanho da amostra; dividir por k ajusta para tabelas maiores que 2×2, onde χ² tende naturalmente a crescer com mais categorias. O resultado, √, fica sempre entre 0 (nenhuma associação) e 1 (associação perfeita).
Aplicando aos 40 estudantes do exemplo acima: a tabela é 2×2, logo k = min(2−1, 2−1) = 1. V = √(10 / (40 × 1)) = √0,25 = 0,50.
Interpretação: V = 0,50 indica uma associação grande entre o nível do estudante e o tipo de pergunta feito, segundo a convenção de Cohen abaixo. Sozinho, χ² = 10,00 e p < .05 já indicam que a associação existe; V = 0,50 mostra que, além de existir, ela é forte.
🔢 O que significa V?
| Valor de V | Força da associação |
|---|---|
| ≈ 0,10 | pequena |
| ≈ 0,30 | média |
| ≈ 0,50 | grande |
Convenção de Cohen (1988) para o tamanho do efeito: essas referências valem para tabelas com k = 1 (ex.: 2×2). Para tabelas maiores, os limiares de Cohen são um pouco diferentes por linha de k, mas a leitura prática, quanto maior o V, mais forte a associação, permanece a mesma.
📋 Quando usar
Use qui-quadrado e V de Cramér quando:
- ✅ Ambas as variáveis são categóricas nominais (sem ordem natural entre as categorias).
- ✅ As observações são independentes entre si: cada estudante contribui para uma única célula da tabela.
- ✅ A frequência esperada é maior ou igual a 5 em pelo menos 80% das células, e nenhuma célula tem frequência esperada abaixo de 1.
Por que a frequência esperada importa? O χ² é uma aproximação estatística que só funciona bem quando as células têm frequência esperada suficiente. Com células muito pequenas, essa aproximação fica pouco confiável, e o teste tende a errar tanto para mais quanto para menos. Nesses casos, prefira o teste exato de Fisher, explicado na próxima seção.
Exemplos em logs educacionais (learning analytics):
- Tipo de pergunta (conceitual, depuração, trecho de código) × quanto o estudante usa o chatbot (pouco, médio, muito): o tipo de pergunta que o estudante faz varia conforme o quanto ele usa o chatbot?
- Turno do dia em que o estudante mais usa o chatbot (manhã, tarde, noite) × modalidade da disciplina (presencial, híbrida, remota): o horário de uso está associado à modalidade do curso?
- Categoria do erro mais comum (sintaxe, lógica, interpretação) × turma: turmas diferentes cometem tipos diferentes de erro com mais frequência?
- Uso ou não de um recurso opcional do chatbot (sim/não) × aprovação na disciplina (sim/não): estudantes que usam o recurso têm uma proporção de aprovação diferente?
Evite qui-quadrado quando:
- ❌ Uma das variáveis é ordinal, como uma escala Likert → use Spearman, que aproveita a ordem das categorias.
- ❌ As observações não são independentes, como o mesmo estudante contribuindo várias vezes para a mesma célula.
- ❌ Muitas células têm frequência esperada abaixo de 5, especialmente em tabelas pequenas (tipicamente 2×2) → use o teste exato de Fisher.
- ❌ Você quer afirmar causalidade: associação entre categorias não prova que uma categoria causa a outra.
Quando evitar em logs educacionais (learning analytics):
- Satisfação com o chatbot (Likert 1 a 5) × quanto o estudante usa o chatbot: a satisfação é ordinal → considere Spearman em vez de agrupá-la em categorias nominais.
- Um mesmo estudante contando várias vezes na mesma célula, por exemplo, uma linha por mensagem enviada em vez de uma linha por estudante: viola a independência das observações e infla artificialmente o χ².
- Tabela 2×2 com poucos estudantes em um grupo raro (ex.: apenas 3 estudantes usam uma modalidade pouco comum): frequência esperada baixa → prefira o teste exato de Fisher.
- Tipo de pergunta × nota final para inferir causalidade: uma associação entre o tipo de pergunta e o desempenho não prova que perguntar de um certo jeito melhora (ou piora) a nota.
🔍 Perguntas de pesquisa em Informática na Educação
Em pesquisas de Informática na Educação que analisam conversas de estudantes com chatbots, qui-quadrado e V de Cramér servem para responder perguntas em que as duas variáveis são categóricas nominais, extraídas dos logs de conversa ou de metadados da turma:
- A intenção da mensagem (pedir explicação conceitual, pedir depuração, pedir código pronto) está associada à disciplina (Programação I, Estruturas de Dados, Banco de Dados)?
- O nível de dependência do chatbot (baixo/médio/alto, medido pela frequência de uso) está associado ao desempenho final (aprovado/reprovado)?
- O tom da interação (cordial, neutro, frustrado) varia conforme o momento do semestre (início, meio, período de provas)?
- Estudantes que colam o erro literal vs. os que descrevem o problema com as próprias palavras diferem quanto à turma?
- A aceitação da resposta do chatbot sem questionar (sim/não) está associada ao tipo de pergunta feita (conceitual/depuração/trecho de código)?
Fluxo de análise sugerido: (1) colete os logs de conversa com seus metadados (disciplina, turma, timestamp); (2) codifique cada mensagem numa categoria (manual, por rubrica, ou com apoio de um classificador); (3) cruze as duas variáveis numa tabela de contingência; (4) calcule χ² e V de Cramér com
chi2_contingency; (5) interprete à luz da prática pedagógica, sempre lembrando que χ² indica se existe associação e V indica quão forte ela é.
📐 Teste exato de Fisher
O teste exato de Fisher é uma alternativa ao qui-quadrado quando as frequências esperadas são baixas, o cenário mais comum em tabelas 2×2 com amostras pequenas ou com grupos bem desbalanceados. Em vez de uma aproximação estatística, ele calcula exatamente a probabilidade de observar uma tabela tão ou mais extrema que a observada, assumindo H₀ verdadeira.
Em termos de hipótese, as mesmas do qui-quadrado:
| H₀ | As duas variáveis são independentes (não há associação na população). |
| H₁ | As duas variáveis são associadas. |
Como decidir entre χ² e Fisher:
- Frequência esperada ≥ 5 em pelo menos 80% das células → o qui-quadrado é uma boa aproximação, use
chi2_contingency. - Alguma célula com frequência esperada abaixo de 5, sobretudo em tabelas 2×2 → prefira o teste exato de Fisher,
scipy.stats.fisher_exact, que não depende dessa aproximação.
Fisher também funciona com frequências altas. A exigência de frequência esperada ≥ 5 é um requisito do qui-quadrado, não do teste de Fisher. Fisher é exato em qualquer tamanho de amostra, mas seu cálculo fica computacionalmente mais caro em tabelas grandes, por isso, na prática, ele é reservado para os casos em que o χ² não é confiável.
🪜 Passo a passo na prática
- Visualize: monte a tabela de contingência entre as duas variáveis categóricas.
- Verifique pressupostos: as observações são independentes? A frequência esperada é suficiente em cada célula (ou é hora de usar Fisher)?
- Calcule:
stats.chi2_contingency(tabela)para χ², p e as frequências esperadas; depoisV = np.sqrt(chi2 / (n * k))para o tamanho do efeito. - Interprete: leia p (evidência contra H₀) e V (força da associação), nunca apenas um dos dois.
- Reporte: informe χ², graus de liberdade, p, n, V de Cramér e, se possível, a tabela de contingência no artigo ou relatório.
📖 Como ler o resultado
Suponha que o código abaixo retorne χ² = 18.203, gl = 4, p = 0.0011 e V = 0.301 com n = 138 estudantes:
- χ² = 18,203, p = 0,0011 → rejeitamos H₀: é pouco provável observar uma tabela tão desigual quanto essa se o tipo de pergunta e o quanto o estudante usa o chatbot fossem realmente independentes.
- V = 0,301 → segundo Cohen, um efeito médio a grande (perto do limiar de 0,30): a associação existe e tem magnitude relevante, não é apenas um resultado estatisticamente significativo por causa do tamanho da amostra.
- Conjunto → o tipo de pergunta que o estudante faz ao chatbot varia de forma perceptível conforme o quanto ele usa a ferramenta.
Associação ≠ causalidade. Um uso mais intenso do chatbot pode levar o estudante a fazer perguntas mais elaboradas, ou estudantes que já fazem perguntas mais elaboradas podem se engajar mais e, por isso, usar mais o chatbot. Outras variáveis (interesse pela disciplina, familiaridade prévia com o tema) podem explicar ambos.
🐍 Exemplo Python: Qui-quadrado e V de Cramér
Contexto: verificar se o tipo de pergunta feito ao chatbot (conceitual, depuração, trecho de código) varia conforme o quanto o estudante usa a ferramenta (pouco, médio, muito).
O código monta a tabela de contingência, calcula χ² e p, e em seguida calcula o V de Cramér a partir do mesmo χ².
📚 Referências · Biblioteca Digital IFRS
Disponíveis para consulta/e-book em ifrs.pergamum.com.br.
| e-book | Giolo, S. R. (2017). Introdução à análise de dados categóricos com aplicações. São Paulo: Blucher. |
| e-book | Balbino, F. O., & Rosa, J. M. C. da. (2023). Análise de dados categorizados e longitudinais. Curitiba: InterSaberes. |
| e-book | Martinez, E. Z. (2023). Bioestatística para os cursos de graduação da área da saúde (2ª ed.). São Paulo: Blucher. Cap. sobre teste qui-quadrado de associação. |
| e-book | Costa, G. G. de O. (2012). Curso de Estatística inferencial e probabilidades: teoria e prática. Rio de Janeiro: Atlas. |
🌐 Referências · Recursos na Web
| web (PT) | Estatística Fácil. Tamanho de Efeito Para Qui-Quadrado. V de Cramér e coeficiente Phi, quando usar cada um. |
| web (PT) | Estatística Fácil. O que é: Coeficiente de Cramer. Definição e fórmula do V de Cramér. |
| web (PT) | Tesify. Teste Qui-Quadrado no SPSS: Guia Completo e APA 7. Quando usar, teste de Fisher, V de Cramér e formato de redação. |
| web (EN) | OpenStax, Introductory Statistics 2e: cap. 11.3. Teste de independência qui-quadrado, gratuito, com exemplos passo a passo. |
| crítico | Kim, H. Y. (2017). Chi-squared test and Fisher’s exact test. Restorative Dentistry & Endodontics, 42(2), 152 a 155. |
| simulador | Art of Stat: Chi-Square Test for Association. Monte tabelas de contingência, ajuste frequências e observe o efeito no χ² e no p-valor. |

CC BY 4.0 DEED