[DATA SCIENCE] DAY: 025 - Usando Spearman e Qui-Quadrado
🌎 Bom dia, boa tarde e boa noite pessoal, tudo bem?
🛀 Hoje iremos falar sobre Spearman e Qui-Quadrado
Spearman é um coeficiente de correlação estatística utilizado para medir a relação monotônica entre duas variáveis ordinais. Ele varia entre -1 e 1, onde -1 indica uma relação negativa perfeita, 1 indica uma relação positiva perfeita e 0 indica ausência de relação.
Significado da web
O teste Qui-Quadrado, também conhecido como teste de independência, é usado para verificar se há uma associação entre duas variáveis categóricas. Ele compara as frequências observadas de uma categoria em relação às frequências esperadas se as variáveis fossem independentes.
Significado da web
📝 Obs: Irei utilizar o jupyter notebook para a fácil visualização dos gráficos, mas fique a vontade para escolher outro ambiente de sua preferência. Uma sugestão caso não conheça nenhum, tem o colab do google.
1 - Primeiro, podemos usar a notação as
para abreviar o nome das bibliotecas e métodos que vamos importar, vamos aplicar a configuração de visualização de alguns gráficos, ler um arquivo CSV e renomear as colunas:
🔍 Para baixar o arquivo que está sendo usado, clique aqui.
💻
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import rcParams
import seaborn as sns
%matplotlib inline
rcParams['figure.figsize'] = 6, 3
sns.set_style('whitegrid')
caminho = 'O-caminho-do-seu-arquivo/mtcars.csv'
carros = pd.read_csv(caminho)
carros.columns = ['nomes','mpg','cyl','disp', 'hp', 'drat', 'wt', 'qsec', 'vs', 'am', 'qtd_marchas', 'carb']
📝 Obs: O que esse código faz???
- Importação de bibliotecas: O código importa as bibliotecas pandas, matplotlib, seaborn e algumas configurações de matplotlib.
- Configuração de visualização: O tamanho do gráfico é definido e o estilo de visualização é configurado como
whitegrid
. - Carregamento do dataset: O arquivo csv "mtcars" é carregado usando a função
read_csv
do pandas e atribuído à variávelcarros
. - Renomeação de colunas: As colunas do dataset são renomeadas de acordo com a lista fornecida.
Vamos importar a função spearmanr
da biblioteca scipy.stats.
É usada para calcular o coeficiente de correlação de Spearman entre duas séries de dados.
💻
from scipy.stats import spearmanr
Obs: Ela retorna dois valores: o primeiro é o valor do coeficiente de correlação de Spearman, e o segundo é o p-valor, que é usado para testar a hipótese nula de que não há relação entre as duas séries de dados.
Lembre-se de escolher variáveis que seguem os pressupostos:
- Não apresentar distribuição normal
- Variáveis ordinais
- Variáveis não linearmente relacionadas
2 - Seguindo após as configurações iniciais, vamos criar um gráfico de dispersão conhecido como pairplot
para visualizar a relação entre as variáveis do conjunto de dados carros
.
💻
X = carros[['cyl', 'vs', 'am', 'qtd_marchas']]
sns.pairplot(X)
📝 Obs: O que esse código faz???
- Seleção de dados: O conjunto de dados
carros
é selecionado com base nas colunascyl
,vs
,am
eqtd_marchas
. Essas colunas são armazenadas na variávelX
.__ - Importação de pacote: A linha de código importa o pacote
seaborn
(sns) que fornece uma variedade de ferramentas estatísticas e gráficos para análise de dados. - Gráfico de dispersão: A função
pairplot()
é usada para criar um gráfico de dispersão para cada par de variáveis presentes na variável X. Esse gráfico mostra a relação entre essas duas variáveis e ajuda a identificar padrões e tendências nos dados. - Visualização: A função
pairplot()
é uma maneira fácil de visualizar a relação entre várias variáveis e pode ser útil para identificar padrões e tendências nos dados.
Gráfico gerado:
3 - Agora iremos selecionar algumas colunas do conjunto de dados de carros
e ver na prática como funciona o coeficiente de correlação de Spearman:
💻
cyl = carros['cyl']
vs = carros['vs']
am = carros['am']
marchas = carros['qtd_marchas']
coeficiente_spearmanr, p_valor = spearmanr(cyl, vs)
print('Spearman Rank Correlation Coefficient {:0.3}'.format(coeficiente_spearmanr))
Saída do código:
Spearman Rank Correlation Coefficient -0.814
📝 Obs: O que esse código faz???
- Variáveis: O código está definindo quatro variáveis,
cyl
,vs
,am
emarchas
, que estão buscando dados de um conjunto de dados chamadocarros
. Correlação de Rank de Spearman
: O código está usando a funçãospearmanr
para calcular o coeficiente de correlação de rank de Spearman entre as variáveiscyl
evs
.- Saída: O código então imprime o coeficiente calculado com uma string formatada que inclui o coeficiente arredondado para três casas decimais.
- Interpretação: O coeficiente de correlação de rank de Spearman é uma medida estatística que calcula a força e a direção da associação monotônica entre duas variáveis. Neste caso, está sendo usado para determinar a relação entre as variáveis
cyl
evs
no conjunto de dados carros.
Podemos dizer que as variáveis cyl
(quantidade de cilindros) e vs
(formato do motor) tem forte correlacão, já as outras duas variáveis tem uma correlacão apenas moderada:
Utilizando a variável
am
💻
coeficiente_spearmanr, p_valor = spearmanr(cyl, am)
print('Spearman Rank Correlation Coefficient {:0.3}'.format(coeficiente_spearmanr))
Saída do código:
Spearman Rank Correlation Coefficient -0.522
Utilizando a variável
qtl_marchas
💻
coeficiente_spearmanr, p_valor = spearmanr(cyl, marchas)
print('Spearman Rank Correlation Coefficient {:0.3}'.format(coeficiente_spearmanr))
Saída do código:
Spearman Rank Correlation Coefficient -0.564
4 - Por último, vamos entender como funciona o Qui-quadrado na prática, mas para calcular o Qui-quadrado precisamos montar um crosstab, assunto abordado no post do dia 24:
💻
table = pd.crosstab(cyl, am)
from scipy.stats import chi2_contingency
chi2, p, dof, expected = chi2_contingency(table.values)
print('Chi-square Statistic {:0.3} p_value {:0.3}'.format(chi2, p))
Saída do código:
Chi-square Statistic 8.74 p_value 0.0126
📝 Obs: O que esse código faz???
-
Crosstab: O código está criando uma tabela cruzada das variáveis
cyl
eam
do conjunto de dados carros, usando o métodopd.crosstab()
. -
Chi-Square Test: O código está importando a função
chi2_contingency
do pacotescipy.stats
e usando-a para calcular o teste de qui-quadrado para verificar a dependência estatística entre as variáveiscyl
eam
na tabela cruzada. -
Saída: O código então imprime o valor estatístico do teste de qui-quadrado e o
valor p
correspondente, arredondado para três casas decimais. -
Interpretation: O teste de qui-quadrado é uma ferramenta estatística usada para verificar se duas variáveis categóricas são independentes ou dependentes. Neste caso, ele está sendo usado para verificar se existe dependência estatística entre as variáveis
cyl
eam
no conjunto de dados carros. Ovalor p
menor que0.05
indica que as variáveis são dependentes.
Podemos aplicar esses mesmos conceitos nas outras variáveis/colunas para verificarmos se são dependentes ou independentes:
Utilizando a variável vs
:
💻
table = pd.crosstab(cyl, vs)
chi2, p, dof, expected = chi2_contingency(table.values)
print('Chi-square Statistic {:0.3} p_value {:0.1}'.format(chi2, p))
Saída do código:
Chi-square Statistic 21.3 p_value 2e-05
Com base no resultado do teste de qui-quadrado, parece que as variáveis
cyl
evs
são dependentes. O valor p é2e-05
, que é menor que o nível de significância comumente utilizado de0,05
. Isso significa que podemos rejeitar a hipótese nula de independência entre as variáveis e concluir que elas são dependentes.
Utilizando a variável marchas
:
💻
table = pd.crosstab(cyl, marchas)
chi2, p, dof, expected = chi2_contingency(table.values)
print('Chi-square Statistic {:0.3} p_value {:0.1}'.format(chi2, p))
Saída do código:
Chi-square Statistic 18.0 p_value 0.001
De acordo com a mesma lógica apresentada acima após o resultado, estas variáveis também são dependentes.