Bioestatística I
Fazer uma análise estatística completa usando Python pode ser um processo complexo e abrangente. No entanto, vou fornecer uma visão geral dos passos básicos envolvidos na realização de uma análise estatística completa usando algumas bibliotecas populares, como NumPy, Pandas, Matplotlib e SciPy.
A análise estatística é um campo vasto, com muitas técnicas e métodos diferentes disponíveis. A escolha das técnicas corretas dependerá do seu conjunto de dados, das perguntas de pesquisa e dos objetivos da análise. Consultar a documentação das bibliotecas e recursos adicionais de estatística pode ser útil para aprofundar-se em análises mais avançadas. Na parte I, focaremos na estatística descritiva dos dados.
Importando e Processando dados
Para fazer uma análise estatística é necessário um pouco dos conhecimentos dos conteúdos publicados anteriormente, como importação de dados, exploração manipulação e limpeza de dados. Nesse módulo, vamos importar um dataset chamado ‘titanic’ diretamente da biblioteca ‘seaborn’.
# Importando bibliotecas
import seaborn as sns
import pandas as pd
import numpy as np
from scipy import stats
# Importar o conjunto de dados Titanic
titanic = sns.load_dataset('titanic')
# Visualizar as primeiras linhas do conjunto de dados
print(titanic.head())
Análise Descritiva
A análise descritiva é uma etapa fundamental da estatística que fornece uma visão geral e resumida dos dados. Isso permite que os pesquisadores tenham uma compreensão inicial de suas características antes de realizar análises mais avançadas ou inferências estatísticas. Ela é frequentemente usada como uma etapa inicial na análise de dados para explorar e descrever as principais características do conjunto de dados antes de prosseguir com análises mais avançadas.
As medidas usadas na análise descritiva podem ser medidas de tendência central e medidas de dispersão.
Medidas de tendência central:
As medidas de tendência central ou posição são ferramentas que resumem um conjunto de dados observados em um único valor representativo da variável em análise. Geralmente, uma das seguintes medidas de tendência central é usada: média, mediana ou moda.
- Média Aritmética: é a média dos valores do conjunto de dados. É calculada somando todos os valores e dividindo pelo número total de observações.
- Média Ponderada: A média ponderada leva em consideração pesos atribuídos a cada valor no conjunto de dados. É calculada multiplicando cada valor pelo seu peso correspondente, somando esses produtos e dividindo pelo somatório dos pesos.
- Média Geométrica: A média geométrica é usada principalmente para calcular a média de taxas de crescimento ou quando os dados estão em escala logarítmica. É calculada pela raiz enésima do produto de todos os valores.
- Mediana: É o valor que divide o conjunto de dados ao meio, de forma que 50% dos valores estejam abaixo e 50% estejam acima dele. É útil quando os dados têm valores extremos ou quando a distribuição é assimétrica. A mediana não é afetada por valores extremos, ao contrário da média.
- Moda: É o valor que ocorre com maior frequência no conjunto de dados. Pode haver uma moda (unimodal) ou várias modas (multimodal) em um conjunto de dados. A moda é especialmente útil em dados categóricos ou discretos.
- Quartis: Os quartis dividem um conjunto de dados ordenados em quatro partes iguais. Existem três quartis principais:
- Primeiro Quartil (Q1): É o valor que separa os 25% inferiores dos dados. Também é chamado de quartil 25 (Q25).
- Segundo Quartil (Q2): É a mediana, que divide os dados ao meio, separando os 50% inferiores dos 50% superiores. Também é chamado de quartil 50 (Q50).
- Terceiro Quartil (Q3): É o valor que separa os 25% superiores dos dados. Também é chamado de quartil 75 (Q75).
O intervalo interquartil (IQR) é a diferença entre Q3 e Q1, e é uma medida de variabilidade que captura a faixa central dos dados.
Medidas de dispersão:
Medidas de dispersão ajudam os analistas de dados a entender a variabilidade intrínseca nos dados, identificar valores atípicos e avaliar a consistência ou a dispersão dos dados em relação à média.
- Amplitude: é a diferença entre o maior e o menor valor em um conjunto de dados. É uma medida simples de variabilidade.
- Variância: Mede a dispersão dos valores em relação à média. É a média dos quadrados das diferenças entre cada valor e a média. A variância amostral divide por (N – 1) em vez de N para fornecer uma estimativa não tendenciosa da variância populacional.
- Desvio padrão: É a raiz quadrada da variância. Indica a dispersão dos valores em relação à média. Ele fornece uma medida da dispersão em termos da unidade original dos dados. Quanto maior o desvio padrão, maior a dispersão.
- Intervalo interquartil (IQR): É a diferença entre o terceiro quartil (Q3) e o primeiro quartil (Q1). Representa a variação do conjunto de dados no meio. O IQR é útil para avaliar a dispersão dos valores centrais e é menos afetado por valores extremos. É uma medida descritiva geralmente usada com a mediana.
- Coeficiente de Variação (CV): O CV é a relação entre o desvio padrão e a média, expressa como uma porcentagem. É usado para comparar a variabilidade relativa entre conjuntos de dados com médias diferentes.
Medidas de Tendência Central
# Média Aritmética
media_aritmetica_idade = titanic['age'].mean()
# Média Ponderada (supondo pesos)
pesos = np.random.rand(len(titanic))
media_ponderada_idade = np.average(titanic['age'], weights=pesos)
# Média Geométrica (usando log para cálculo)
media_geometrica_idade = np.exp(np.mean(np.log(titanic['age'])))
# Mediana
mediana_idade = titanic['age'].median()
# Moda
moda_embarked = titanic['embarked'].mode()[0]
# Quartis
quartil_25_idade = titanic['age'].quantile(0.25)
quartil_75_idade = titanic['age'].quantile(0.75)
# Imprimindo resultados
print("\nMedidas de Tendência Central:")
print(f"Média Idade: {media_aritmetica_idade}")
print(f"Média Ponderada Idade: {media_ponderada_idade}")
print(f"Média Geométrica Idade: {media_geometrica_idade}")
print(f"Mediana Idade: {mediana_idade}")
print(f"Moda Embarked: {moda_embarked}")
print(f"Primeiro Quartil Idade: {quartil_25_idade}")
print(f"Terceiro Quartil Idade: {quartil_75_idade}")
Output:
Medidas de Tendência Central:
Média Idade: 29.69911764705882
Média Ponderada Idade: nan
Média Geométrica Idade: 24.42988031292707
Mediana Idade: 28.0
Moda Embarked: S
Primeiro Quartil Idade: 20.125
Terceiro Quartil Idade: 38.0
Interpretações da média e mediana
Quando a média é significativamente diferente da mediana, isso geralmente indica que a distribuição dos dados está inclinada ou assimétrica. Aqui estão algumas interpretações comuns:
Média maior do que a mediana: Isso sugere que a distribuição dos dados é assimétrica positiva (à direita). Isso significa que existem valores extremamente altos que estão puxando a média para cima, enquanto a mediana permanece mais próxima dos valores centrais. Exemplos disso podem ser encontrados em distribuições de renda, onde algumas pessoas têm rendas muito altas, distorcendo a média.
Média menor do que a mediana: Nesse caso, a distribuição dos dados é assimétrica negativa (à esquerda). Valores extremamente baixos puxam a média para baixo, enquanto a mediana permanece mais próxima dos valores centrais. Um exemplo pode ser uma classe de estudantes, onde a maioria das notas é alta, mas alguns alunos obtiveram pontuações muito baixas.
A mediana é menos sensível a valores extremos porque não leva em consideração o valor exato desses extremos, apenas sua posição no conjunto ordenado de dados. Em contraste, a média considera todos os valores, o que a torna mais sensível a valores extremos.
Quanto à média truncada, o uso do argumento trim na função mean permite calcular a média excluindo uma porcentagem especificada dos valores extremos, ajudando a reduzir o impacto desses valores na média. Isso pode ser útil quando você deseja obter uma medida mais robusta da tendência central, especialmente em dados com valores atípicos ou extremos.
Medidas de Dispersão
# Amplitude
amplitude_idade = titanic['age'].max() - titanic['age'].min()
# Variância
variancia_idade = titanic['age'].var()
# Desvio padrão
desvio_padrao_idade = titanic['age'].std()
# Intervalo interquartil (IQR)
iqr_idade = quartil_75_idade - quartil_25_idade
# Coeficiente de Variação
coeficiente_variacao_idade = (desvio_padrao_idade / media_aritmetica_idade) * 100
# Imprimindo resultados
print("\nMedidas de Dispersão:")
print(f"Amplitude Idade: {amplitude_idade}")
print(f"Variância Idade: {variancia_idade}")
print(f"Desvio Padrão Idade: {desvio_padrao_idade}")
print(f"IQR Idade: {iqr_idade}")
print(f"Coeficiente de Variação Idade: {coeficiente_variacao_idade}%")
Output
Medidas de Dispersão:
Amplitude Idade: 79.58
Variância Idade: 211.01912474630802
Desvio Padrão Idade: 14.526497332334042
IQR Idade: 17.875
Coeficiente de Variação Idade: 48.91221855465675%
Normalidade
A normalidade refere-se à distribuição dos dados. A suposição de normalidade implica que os dados sigam uma distribuição normal ou gaussiana. Uma distribuição normal é simétrica, em forma de sino, onde a média, mediana e moda estão no mesmo ponto central. Muitas técnicas estatísticas, como testes de hipóteses paramétricas, regressão linear, análise de variância (ANOVA) e muitos outros, assumem normalidade dos dados.
Verificar a normalidade dos dados é importante para garantir que as técnicas estatísticas aplicadas sejam apropriadas. Existem vários métodos e testes estatísticos para verificar a normalidade, como o teste de Shapiro-Wilk, teste de Kolmogorov-Smirnov, gráficos Q-Q, histogramas e outros. Se os dados não seguirem uma distribuição normal, podem ser necessárias técnicas estatísticas não paramétricas ou transformações dos dados para atender às suposições necessárias.
# Teste de Normalidade (usando o teste Shapiro-Wilk)
stat_shapiro_idade, p_valor_shapiro_idade = stats.shapiro(titanic['age'])
# Imprimindo resultados
print("\nTeste de Normalidade:")
if p_valor_shapiro_idade > 0.05:
print("Idade parece seguir uma distribuição normal.")
else:
print("Idade não segue uma distribuição normal.")
Teste de Normalidade:
Idade parece seguir uma distribuição normal.
Homogeneidade de Variância
A homogeneidade de variância refere-se à igualdade das variâncias entre grupos ou categorias de dados. Também é conhecida como homocedasticidade. A suposição de homogeneidade de variância é importante em técnicas estatísticas, como testes de hipóteses, análise de variância (ANOVA), regressão linear e outros.
A falta de homogeneidade de variância pode afetar a precisão e a validade dos resultados estatísticos. A homogeneidade de variância pode ser verificada graficamente, por meio de gráficos de dispersão ou gráficos de resíduos, ou estatisticamente, usando testes estatísticos, como o teste de Levene ou teste de Bartlett. Se a homogeneidade de variância não for atendida, podem ser necessárias técnicas estatísticas alternativas, como testes não paramétricos ou modelos estatísticos que levem em consideração a heterogeneidade de variância, como a análise de covariância (ANCOVA) ou regressão ponderada.
# Teste de Homogeneidade (usando o teste de Levene)
grupo_1 = titanic[titanic['class'] == 'First']['age'].dropna()
grupo_2 = titanic[titanic['class'] == 'Second']['age'].dropna()
grupo_3 = titanic[titanic['class'] == 'Third']['age'].dropna()
stat_levene, p_valor_levene = stats.levene(grupo_1, grupo_2, grupo_3)
# Imprimindo resultados
print("\nTeste de Homogeneidade (Levene):")
if p_valor_levene > 0.05:
print("As variabilidades dos grupos são homogêneas.")
else:
print("As variabilidades dos grupos não são homogêneas.")
Teste de Homogeneidade (Levene):
As variabilidades dos grupos não são homogêneas.
Exercícios
1. Calcule a média aritmética, ponderada e geométrica das tarifas pagas pelos passageiros do Titanic.
2. Calcule a mediana das tarifas pagas pelos passageiros do Titanic.
3. Encontre a moda da classe dos passageiros (coluna ‘class’).
4. Calcule o primeiro quartil das tarifas pagas pelos passageiros do Titanic.
5. Calcule a amplitude, variância e desvio padrão das tarifa paga pelos passageiros.
6. Calcule o intervalo interquartil e o coeficiente de variação das tarifa paga pelos passageiros.
7. Realize um teste de normalidade (por exemplo, teste Shapiro-Wilk) na coluna ‘fare’ para verificar se as idades seguem uma distribuição normal.