graph TD subgraph "Simétrica (Normal)" A[Média = Mediana = Moda] end subgraph "Ass. à Direita (Positiva)" B[Moda < Mediana < Média] end subgraph "Ass. à Esquerda (Negativa)" C[Média < Mediana < Moda] end style A fill:#a7e9ff,stroke:#3b82f6; style B fill:#ffd1a7,stroke:#f59e0b; style C fill:#a7ffd1,stroke:#10b981;
Introdução à Estatística Descritiva
Descrever e Resumir Dados Utilizando Medidas de Tendência Central e Dispersão
Introdução e Objetivos
Após explorarmos os fundamentos da análise combinatória e da probabilidade, estamos prontos para mergulhar no mundo da Estatística Descritiva. Esta área da estatística tem como objetivo principal organizar, resumir e apresentar dados de forma que suas características essenciais possam ser facilmente compreendidas. Em vez de lidar com a incerteza de eventos futuros, a estatística descritiva nos ajuda a entender o que já aconteceu, transformando grandes volumes de dados brutos em informações concisas e significativas.
Para qualquer cientista de dados ou analista, a estatística descritiva é a primeira linha de defesa ao abordar um novo conjunto de dados. Ela nos permite identificar padrões, detectar anomalias e formular perguntas importantes para análises mais aprofundadas. Nesta aula, focaremos nas medidas numéricas que nos permitem descrever o “centro” e a “dispersão” de um conjunto de dados.
Objetivos de Aprendizagem
Ao final desta aula, você será capaz de:
- Distinguir entre diferentes tipos de dados e sua relevância para as medidas descritivas.
- Calcular e interpretar as principais medidas de tendência central: média, mediana e moda.
- Calcular e interpretar as principais medidas de dispersão: amplitude, variância e desvio padrão.
- Identificar qual medida de tendência central e dispersão é mais apropriada para diferentes tipos de dados e distribuições.
- Utilizar Python e R para calcular e visualizar essas medidas descritivas.
Tipos de Dados
Antes de mergulharmos nas medidas, é crucial relembrar e entender os tipos de dados, pois a escolha da medida descritiva mais adequada depende diretamente da natureza da variável que está sendo analisada.
Dados Qualitativos (ou Categóricos)
Representam categorias ou qualidades e não podem ser medidos numericamente de forma significativa.
Nominais: Não há ordem intrínseca entre as categorias.
- Exemplos: Cor dos olhos (azul, castanho, verde), sexo (masculino, feminino), estado civil (solteiro, casado, divorciado).
Ordinais: Há uma ordem intrínseca, mas as diferenças entre as categorias não são quantificáveis ou consistentes.
- Exemplos: Grau de escolaridade (fundamental, médio, superior), nível de satisfação (muito insatisfeito, insatisfeito, neutro, satisfeito, muito satisfeito).
Dados Quantitativos (ou Numéricos)
Representam quantidades e são medidos em uma escala numérica.
Discretos: Resultam de contagens e assumem valores inteiros, geralmente com lacunas entre eles.
- Exemplos: Número de filhos, número de carros em uma casa, número de defeitos em um produto.
Contínuos: Resultam de medições e podem assumir qualquer valor dentro de um intervalo.
- Exemplos: Altura, peso, tempo, temperatura, renda.
Medidas de Tendência Central
As medidas de tendência central nos fornecem um valor que busca representar o “centro” de um conjunto de dados, um ponto em torno do qual os dados se agrupam. (Bussab; Morettin, 2017, p. 19–24)
Média Aritmética (\(\bar{x}\) ou \(\mu\))
A média aritmética é a soma de todos os valores de um conjunto de dados dividida pelo número de valores. É a medida de tendência central mais comum.
Fórmula (Amostra): \(\bar{x} = \frac{\sum_{i=1}^{n} x_i}{n}\)
Fórmula (População): \(\mu = \frac{\sum_{i=1}^{N} x_i}{N}\)
Onde:
- \(x_i\) representa cada valor individual no conjunto de dados.
- \(n\) é o número de observações na amostra.
- \(N\) é o número de observações na população.
Características:
- É sensível a valores extremos (outliers).
- A soma dos desvios de cada valor em relação à média é sempre zero.
- É o “centro de gravidade” dos dados.
Para dados quantitativos sem outliers significativos e com distribuição aproximadamente simétrica.
Mediana (\(\tilde{x}\) ou \(Md\))
A mediana é o valor do meio em um conjunto de dados ordenado. Divide os dados em duas metades iguais, com 50% dos valores abaixo dela e 50% acima.
Como calcular:
- Ordene os dados em ordem crescente.
- Se o número de observações (\(n\)) for ímpar, a mediana é o valor central.
- Posição da mediana: \(\frac{n+1}{2}\).
- Se o número de observações (\(n\)) for par, a mediana é a média dos dois valores centrais.
- Posições da mediana: \(\frac{n}{2}\) e \(\frac{n}{2} + 1\).
Características:
- É robusta a valores extremos (outliers), ou seja, não é significativamente afetada por eles.
Para dados quantitativos com outliers, distribuições assimétricas (enviesadas), ou quando você precisa do ponto médio exato. Também pode ser usada para dados ordinais.
Moda (\(Mo\))
A moda é o valor ou valores que aparecem com maior frequência em um conjunto de dados.
Características:
- Pode não existir (todos os valores aparecem com a mesma frequência).
- Pode haver uma moda (unimodal), duas modas (bimodal) ou múltiplas modas (multimodal).
- É a única medida de tendência central que pode ser usada com dados nominais.
Para qualquer tipo de dado, mas é especialmente útil para dados nominais e para identificar picos em distribuições.
Exemplo de Cálculo Manual
Considere o conjunto de dados: \(\{10, 12, 12, 15, 18, 20, 22\}\)
- Média: \((10+12+12+15+18+20+22) / 7 = 109 / 7 \approx 15.57\)
- Mediana: Os dados já estão ordenados. \(n=7\) (ímpar). Posição: \((7+1)/2 = 4\). O 4º valor é 15. Mediana = 15.
- Moda: O valor 12 aparece duas vezes, que é a maior frequência. Moda = 12.
Código para Medidas de Tendência Central
import numpy as np
import pandas as pd
from scipy import stats
data = [10, 12, 12, 15, 18, 20, 22]
# Usando NumPy
mean_np = np.mean(data)
median_np = np.median(data)
# NumPy não tem uma moda direta, mas scipy.stats tem
mode_np_scipy = stats.mode(data, keepdims=False) # keepdims=False para compatibilidade futura
print(f"Dados: {data}")
print(f"Média (NumPy): {mean_np:.2f}")
print(f"Mediana (NumPy): {median_np:.2f}")
print(f"Moda (SciPy): {mode_np_scipy:.2f}")
# Usando Pandas Series
s_data = pd.Series(data)
mean_pd = s_data.mean()
median_pd = s_data.median()
mode_pd = s_data.mode() # Retorna uma série, pode ter múltiplas modas
print("\n--- Usando Pandas ---")
print(f"Média (Pandas): {mean_pd:.2f}")
print(f"Mediana (Pandas): {median_pd:.2f}")
print(f"Moda (Pandas): {list(mode_pd.values)}") # Converte para lista se houver múltiplos
data <- c(10, 12, 12, 15, 18, 20, 22)
# Média
mean_r <- mean(data)
# Mediana
median_r <- median(data)
# Moda (R base não tem uma função direta para moda, precisamos criar uma ou usar um pacote)
# Função simples para calcular a moda
get_mode <- function(v) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}
mode_r <- get_mode(data)
# Se houver múltiplas modas, a função acima retornará apenas a primeira.
# Para retornar todas as modas, é um pouco mais complexo:
get_all_modes <- function(v) {
t <- table(v)
max_freq <- max(t)
modes <- as.numeric(names(t[t == max_freq]))
return(modes)
}
all_modes_r <- get_all_modes(data)
cat(sprintf("Dados: %s\n", paste(data, collapse = ", ")))
cat(sprintf("Média (R): %.2f\n", mean_r))
cat(sprintf("Mediana (R): %.2f\n", median_r))
cat(sprintf("Moda (R, simples): %.2f\n", mode_r))
cat(sprintf("Moda (R, todas as modas): %s\n", paste(all_modes_r, collapse = ", ")))
Comparação e Distribuição
A escolha da medida de tendência central depende da forma da distribuição dos dados.
Medidas de Dispersão
As medidas de dispersão nos informam sobre a variabilidade ou o espalhamento dos dados em torno da medida de tendência central. Um conjunto de dados com pouca dispersão é mais homogêneo, enquanto um com muita dispersão é mais heterogêneo. (Bussab; Morettin, 2017, p. 25–32)
Amplitude (Range)
A amplitude é a diferença entre o valor máximo e o valor mínimo em um conjunto de dados.
- Fórmula: Amplitude = Valor Máximo - Valor Mínimo
Características:
- É a medida de dispersão mais simples.
- Extremamente sensível a outliers, pois utiliza apenas os dois valores extremos.
- Não considera a distribuição dos dados entre o mínimo e o máximo.
Variância (\(s^2\) ou \(\sigma^2\))
A variância mede a dispersão média dos dados em torno da média, calculando a média dos quadrados dos desvios de cada observação em relação à média.
- Fórmula (Amostra): \(s^2 = \frac{\sum_{i=1}^{n} (x_i - \bar{x})^2}{n-1}\)
- (O denominador \(n-1\) é usado para amostras para fornecer uma estimativa não viciada da variância populacional.)
- Fórmula (População): \(\sigma^2 = \frac{\sum_{i=1}^{N} (x_i - \mu)^2}{N}\)
Características:
- Sua unidade de medida é o quadrado da unidade original dos dados, o que dificulta a interpretação direta.
- É fundamental para o cálculo do desvio padrão.
Desvio Padrão (\(s\) ou \(\sigma\))
O desvio padrão é a raiz quadrada da variância. É a medida de dispersão mais utilizada, pois retorna a dispersão à unidade de medida original dos dados, tornando-a mais interpretável.
- Fórmula (Amostra): \(s = \sqrt{s^2} = \sqrt{\frac{\sum_{i=1}^{n} (x_i - \bar{x})^2}{n-1}}\)
- Fórmula (População): \(\sigma = \sqrt{\sigma^2} = \sqrt{\frac{\sum_{i=1}^{N} (x_i - \mu)^2}{N}}\)
Características:
- Indica a dispersão típica dos valores em relação à média.
- Um desvio padrão baixo indica que os pontos de dados tendem a estar próximos da média; um desvio padrão alto indica que os pontos de dados estão espalhados por uma ampla gama de valores.
- Também é sensível a outliers.
Código para Medidas de Dispersão
import numpy as np
import pandas as pd
from scipy import stats
data = [10, 12, 12, 15, 18, 20, 22]
# Usando NumPy
range_np = np.max(data) - np.min(data)
variance_np = np.var(data, ddof=1) # ddof=1 para variância amostral (n-1)
std_dev_np = np.std(data, ddof=1) # ddof=1 para desvio padrão amostral (n-1)
mean_np = np.mean(data) # Recalculando a média para o CV
print(f"Dados: {data}")
print(f"Amplitude (NumPy): {range_np:.2f}")
print(f"Variância Amostral (NumPy): {variance_np:.2f}")
print(f"Desvio Padrão Amostral (NumPy): {std_dev_np:.2f}")
# Usando Pandas Series
s_data = pd.Series(data)
range_pd = s_data.max() - s_data.min()
variance_pd = s_data.var() # Por padrão, Pandas usa ddof=1 para var()
std_dev_pd = s_data.std() # Por padrão, Pandas usa ddof=1 para std()
mean_pd = s_data.mean()
print("\n--- Usando Pandas ---")
print(f"Amplitude (Pandas): {range_pd:.2f}")
print(f"Variância Amostral (Pandas): {variance_pd:.2f}")
print(f"Desvio Padrão Amostral (Pandas): {std_dev_pd:.2f}")
data <- c(10, 12, 12, 15, 18, 20, 22)
# Amplitude
range_r <- max(data) - min(data)
# Variância Amostral (R usa n-1 por padrão)
variance_r <- var(data)
# Desvio Padrão Amostral (R usa n-1 por padrão)
std_dev_r <- sd(data)
# Média (para CV)
mean_r <- mean(data)
cat(sprintf("Dados: %s\n", paste(data, collapse = ", ")))
cat(sprintf("Amplitude (R): %.2f\n", range_r))
cat(sprintf("Variância Amostral (R): %.2f\n", variance_r))
cat(sprintf("Desvio Padrão Amostral (R): %.2f\n", std_dev_r))
Relação entre Medidas de Tendência Central e Dispersão
As medidas de tendência central nos dizem onde o centro dos dados está, enquanto as medidas de dispersão nos informam o quão “espalhados” os dados estão em torno desse centro. Juntas, elas fornecem uma imagem mais completa da distribuição de um conjunto de dados.
Um conjunto de dados pode ter a mesma média, mas dispersões muito diferentes.
- Exemplo 1: \(\{10, 10, 10, 10, 10\}\) (\(\bar{x}=10, s=0\)) - Sem dispersão.
- Exemplo 2: \(\{5, 10, 15, 10, 10\}\) (\(\bar{x}=10, s \approx 3.54\)) - Alguma dispersão.
- Exemplo 3: \(\{1, 10, 19, 10, 10\}\) (\(\bar{x}=10, s \approx 6.93\)) - Maior dispersão.
graph TD subgraph "Data Set 1 (Baixa)" M1[Média = 50] --> SD1[Desvio Padrão = 2] end subgraph "Data Set 2 (Média)" M2[Média = 50] --> SD2[Desvio Padrão = 10] end subgraph "Data Set 3 (Alta)" M3[Média = 50] --> SD3[Desvio Padrão = 25] end style M1 fill:#e0f7fa,stroke:#00bcd4; style SD1 fill:#b2ebf2,stroke:#0097a7; style M2 fill:#fff8e1,stroke:#ffc107; style SD2 fill:#ffecb3,stroke:#ffa000; style M3 fill:#fbe9e7,stroke:#ff5722; style SD3 fill:#ffccbc,stroke:#e64a19; subgraph "Implicação" I[Mesma Tendência Central, Diferentes Dispersões] end SD1 --> I; SD2 --> I; SD3 --> I;
Verificação de Aprendizagem
Resolva os problemas abaixo, calculando as medidas descritivas solicitadas e interpretando os resultados.
Salários de uma Equipe:
Os salários mensais (em R$) de uma pequena equipe são:
[3000, 3500, 3200, 3800, 4000, 3100, 20000]
.- Calcule a média, mediana e moda dos salários.
- Qual medida de tendência central melhor representa o “salário típico” desta equipe e por quê?
- Calcule a amplitude, variância amostral e desvio padrão amostral.
import numpy as np
import pandas as pd
from scipy import stats
salarios = np.array([3000, 3500, 3200, 3800, 4000, 3100, 20000])
# a) Média, Mediana, Moda
media_salarios = np.mean(salarios)
mediana_salarios = np.median(salarios)
# Modas (pode haver múltiplas, stats.mode retorna uma array de modas)
moda_salarios = stats.mode(salarios, keepdims=True) # keepdims=True para arrays
print(f"Média dos salários: R$ {media_salarios:.2f}")
print(f"Mediana dos salários: R$ {mediana_salarios:.2f}")
print(f"Moda dos salários: R$ {moda_salarios}") # Se houver múltiplas, serão listadas
# b) Qual medida melhor representa o "salário típico"?
print("\nA mediana (R$ 3500.00) representa melhor o 'salário típico'.")
print("A média (R$ 5800.00) é fortemente influenciada pelo outlier de R$ 20000.00, puxando-a para cima.")
print("A moda (R$ 3000, R$ 3100, R$ 3200, R$ 3500, R$ 3800, R$ 4000, R$ 20000) não existe, ou todos são moda, pois todos os valores aparecem uma vez, exceto se considerarmos as repetições implícitas nos valores.")
# Re-avaliando a moda para este dataset específico: cada valor aparece uma vez, então não há moda neste caso, ou todos os valores são a moda.
# stats.mode retorna o primeiro valor na ordem crescente se todos têm a mesma frequência.
# Para este conjunto de dados, todos os valores aparecem uma vez, então não há uma moda "clara".
# c) Amplitude, Variância e Desvio Padrão
amplitude_salarios = np.max(salarios) - np.min(salarios)
variancia_salarios = np.var(salarios, ddof=1) # ddof=1 para amostra
desvio_padrao_salarios = np.std(salarios, ddof=1) # ddof=1 para amostra
print(f"\nAmplitude dos salários: R$ {amplitude_salarios:.2f}")
print(f"Variância amostral dos salários: R$ {variancia_salarios:.2f}")
print(f"Desvio Padrão amostral dos salários: R$ {desvio_padrao_salarios:.2f}")
salarios <- c(3000, 3500, 3200, 3800, 4000, 3100, 20000)
# a) Média, Mediana, Moda
media_salarios <- mean(salarios)
mediana_salarios <- median(salarios)
# Função para moda (já definida em aula ou podemos definir novamente)
get_all_modes <- function(v) {
t <- table(v)
max_freq <- max(t)
modes <- as.numeric(names(t[t == max_freq]))
return(modes)
}
moda_salarios <- get_all_modes(salarios)
cat(sprintf("Média dos salários: R$ %.2f\n", media_salarios))
cat(sprintf("Mediana dos salários: R$ %.2f\n", mediana_salarios))
cat(sprintf("Moda dos salários: R$ %s\n", paste(moda_salarios, collapse = ", ")))
# b) Qual medida melhor representa o "salário típico"?
cat("\nA mediana (R$ 3500.00) representa melhor o 'salário típico'.\n")
cat("A média (R$ 5800.00) é fortemente influenciada pelo outlier de R$ 20000.00, puxando-a para cima.\n")
cat("Neste caso, a moda não é útil pois todos os valores ocorrem uma única vez (ou a maioria com a mesma baixa frequência).\n")
# c) Amplitude, Variância e Desvio Padrão
amplitude_salarios <- max(salarios) - min(salarios)
variancia_salarios <- var(salarios) # R por padrão usa n-1
desvio_padrao_salarios <- sd(salarios) # R por padrão usa n-1
cat(sprintf("\nAmplitude dos salários: R$ %.2f\n", amplitude_salarios))
cat(sprintf("Variância amostral dos salários: R$ %.2f\n", variancia_salarios))
cat(sprintf("Desvio Padrão amostral dos salários: R$ %.2f\n", desvio_padrao_salarios))
Análise:
- Média: R$ 5800.00
- Mediana: R$ 3500.00
- Moda: Não há moda clara, todos os valores aparecem uma vez.
- Melhor medida de tendência central: A mediana (R$ 3500.00) é a melhor medida neste caso. A presença do salário de R$ 20000.00 (um outlier) puxa a média para cima, não a tornando representativa da maioria dos salários. A mediana, por ser resistente a outliers, reflete melhor o valor central dos salários da equipe.
- Amplitude: R$ 17000.00
- Variância Amostral: R$ 73800000.00
- Desvio Padrão Amostral: R$ 8590.69
Pontuações em um Teste:
Um professor aplicou um teste e as pontuações (de 0 a 10) de 10 alunos foram:
[7, 8, 5, 9, 7, 6, 8, 7, 10, 4]
.- Calcule a média, mediana e moda das pontuações.
- Calcule a amplitude e o desvio padrão amostral.
- Se um aluno tivesse tirado 0 em vez de 4, como isso afetaria a média e a mediana? E o desvio padrão?
import numpy as np
from scipy import stats
pontuacoes = np.array([7, 8, 5, 9, 7, 6, 8, 7, 10, 4])
# a) Média, Mediana, Moda
media_pontuacoes = np.mean(pontuacoes)
mediana_pontuacoes = np.median(pontuacoes)
moda_pontuacoes = stats.mode(pontuacoes, keepdims=True)
print(f"Média das pontuações: {media_pontuacoes:.2f}")
print(f"Mediana das pontuações: {mediana_pontuacoes:.2f}")
print(f"Moda das pontuações: {moda_pontuacoes}")
# b) Amplitude e Desvio Padrão
amplitude_pontuacoes = np.max(pontuacoes) - np.min(pontuacoes)
desvio_padrao_pontuacoes = np.std(pontuacoes, ddof=1)
print(f"\nAmplitude das pontuações: {amplitude_pontuacoes:.2f}")
print(f"Desvio Padrão amostral das pontuações: {desvio_padrao_pontuacoes:.2f}")
# c) Efeito de um outlier (0 em vez de 4)
pontuacoes_com_outlier = np.array()
media_outlier = np.mean(pontuacoes_com_outlier)
mediana_outlier = np.median(pontuacoes_com_outlier)
desvio_padrao_outlier = np.std(pontuacoes_com_outlier, ddof=1)
print(f"\nCom um 0 no lugar do 4:")
print(f"Nova Média: {media_outlier:.2f}")
print(f"Nova Mediana: {mediana_outlier:.2f}")
print(f"Novo Desvio Padrão: {desvio_padrao_outlier:.2f}")
print("\nAnálise da mudança:")
print(f"- A média diminui de {media_pontuacoes:.2f} para {media_outlier:.2f}, pois é sensível ao valor extremo.")
print(f"- A mediana diminui de {mediana_pontuacoes:.2f} para {mediana_outlier:.2f}, mas menos drasticamente que a média, pois é mais robusta.")
print(f"- O desvio padrão aumenta de {desvio_padrao_pontuacoes:.2f} para {desvio_padrao_outlier:.2f}, indicando maior dispersão causada pelo valor extremo de 0.")
pontuacoes <- c(7, 8, 5, 9, 7, 6, 8, 7, 10, 4)
# a) Média, Mediana, Moda
media_pontuacoes <- mean(pontuacoes)
mediana_pontuacoes <- median(pontuacoes)
moda_pontuacoes <- get_all_modes(pontuacoes)
cat(sprintf("Média das pontuações: %.2f\n", media_pontuacoes))
cat(sprintf("Mediana das pontuações: %.2f\n", mediana_pontuacoes))
cat(sprintf("Moda das pontuações: %s\n", paste(moda_pontuacoes, collapse = ", ")))
# b) Amplitude e Desvio Padrão
amplitude_pontuacoes <- max(pontuacoes) - min(pontuacoes)
desvio_padrao_pontuacoes <- sd(pontuacoes)
cat(sprintf("\nAmplitude das pontuações: %.2f\n", amplitude_pontuacoes))
cat(sprintf("Desvio Padrão amostral das pontuações: %.2f\n", desvio_padrao_pontuacoes))
# c) Efeito de um outlier (0 em vez de 4)
pontuacoes_com_outlier <- c(7, 8, 5, 9, 7, 6, 8, 7, 10, 0)
media_outlier <- mean(pontuacoes_com_outlier)
mediana_outlier <- median(pontuacoes_com_outlier)
desvio_padrao_outlier <- sd(pontuacoes_com_outlier)
cat("\nCom um 0 no lugar do 4:\n")
cat(sprintf("Nova Média: %.2f\n", media_outlier))
cat(sprintf("Nova Mediana: %.2f\n", mediana_outlier))
cat(sprintf("Novo Desvio Padrão: %.2f\n", desvio_padrao_outlier))
cat("\nAnálise da mudança:\n")
cat(sprintf("- A média diminui de %.2f para %.2f, pois é sensível ao valor extremo.\n", media_pontuacoes, media_outlier))
cat(sprintf("- A mediana diminui de %.2f para %.2f, mas menos drasticamente que a média, pois é mais robusta.\n", mediana_pontuacoes, mediana_outlier))
cat(sprintf("- O desvio padrão aumenta de %.2f para %.2f, indicando maior dispersão causada pelo valor extremo de 0.\n", desvio_padrao_pontuacoes, desvio_padrao_outlier))
Análise:
a) Média, Mediana, Moda:
- Média: 7.10
- Mediana: 7.00
- Moda: 7.00 (aparece 3 vezes)
b) Amplitude e Desvio Padrão Amostral:
- Amplitude: \(10 - 4 = 6\)
- Desvio Padrão: \(\approx 1.85\)
c) Efeito do outlier (0 em vez de 4):
- Média original: 7.10; Nova Média: 6.70 (diminuiu significativamente)
- Mediana original: 7.00; Nova Mediana: 7.00 (permanece a mesma, ou dependendo da regra de desempate, poderia ser ligeiramente diferente, mas seria menos afetada que a média) (Re-ordenando [0, 5, 6, 7, 7, 7, 8, 8, 9, 10], a mediana seria (7+7)/2 = 7)
- Desvio Padrão original: \(\approx 1.85\); Novo Desvio Padrão: \(\approx 2.75\) (aumentou, indicando maior dispersão)
- Conclusão: A média e o desvio padrão são mais sensíveis a outliers, enquanto a mediana é mais robusta.
Tempo de Atendimento:
Os tempos de atendimento (em minutos) em um call center em uma hora foram:
[2.5, 3.1, 2.8, 3.5, 2.9, 3.0, 2.7, 3.2, 2.8, 3.0]
.- Calcule a média e o desvio padrão amostral dos tempos de atendimento.
- Se o objetivo é que o tempo médio de atendimento seja no máximo 3.0 minutos com pouca variação, o que os resultados indicam?
import numpy as np
tempos = np.array([2.5, 3.1, 2.8, 3.5, 2.9, 3.0, 2.7, 3.2, 2.8, 3.0])
# a) Média e Desvio Padrão
media_tempos = np.mean(tempos)
desvio_padrao_tempos = np.std(tempos, ddof=1)
print(f"Média dos tempos de atendimento: {media_tempos:.2f} minutos")
print(f"Desvio Padrão amostral dos tempos de atendimento: {desvio_padrao_tempos:.2f} minutos")
# b) Interpretação
print("\nAnálise dos resultados:")
if media_tempos <= 3.0:
print(f"- A média de {media_tempos:.2f} minutos atinge o objetivo de tempo médio de atendimento (<= 3.0 min).")
else:
print(f"- A média de {media_tempos:.2f} minutos NÃO atinge o objetivo de tempo médio de atendimento (<= 3.0 min).")
print(f"- O desvio padrão de {desvio_padrao_tempos:.2f} minutos indica a variabilidade típica. Um valor baixo indica consistência.")
print("Para uma avaliação completa, a empresa precisaria definir o que 'pouca variação' significa (ex: desvio padrão máximo de X).")
tempos <- c(2.5, 3.1, 2.8, 3.5, 2.9, 3.0, 2.7, 3.2, 2.8, 3.0)
# a) Média e Desvio Padrão
media_tempos <- mean(tempos)
desvio_padrao_tempos <- sd(tempos)
cat(sprintf("Média dos tempos de atendimento: %.2f minutos\n", media_tempos))
cat(sprintf("Desvio Padrão amostral dos tempos de atendimento: %.2f minutos\n", desvio_padrao_tempos))
# b) Interpretação
cat("\nAnálise dos resultados:\n")
if (media_tempos <= 3.0) {
cat(sprintf("- A média de %.2f minutos atinge o objetivo de tempo médio de atendimento (<= 3.0 min).\n", media_tempos))
} else {
cat(sprintf("- A média de %.2f minutos NÃO atinge o objetivo de tempo médio de atendimento (<= 3.0 min).\n", media_tempos))
}
cat(sprintf("- O desvio padrão de %.2f minutos indica a variabilidade típica. Um valor baixo indica consistência.\n", desvio_padrao_tempos))
cat("Para uma avaliação completa, a empresa precisaria definir o que 'pouca variação' significa (ex: desvio padrão máximo de X).\n")
Análise:
a) Média e Desvio Padrão:
- Média: 2.95 minutos
- Desvio Padrão: \(\approx 0.28\) minutos
b) Interpretação: A média de 2.95 minutos atinge o objetivo de tempo médio de atendimento (no máximo 3.0 minutos). O desvio padrão de aproximadamente 0.28 minutos indica que os tempos de atendimento são razoavelmente consistentes e não muito dispersos em relação à média. Para saber se é “pouca variação”, a empresa precisaria de um critério de variabilidade aceitável, mas o valor é relativamente baixo.
Cores Favoritas (Dados Categóricos):
Em uma pesquisa, as cores favoritas de 15 pessoas foram:
[Azul, Verde, Azul, Vermelho, Amarelo, Azul, Verde, Azul, Vermelho, Azul, Amarelo, Verde, Azul, Vermelho, Azul]
.- Qual a medida de tendência central mais apropriada para estes dados? Calcule-a.
- Faz sentido calcular o desvio padrão ou a média para estes dados? Justifique.
from collections import Counter
cores = ["Azul", "Verde", "Azul", "Vermelho", "Amarelo", "Azul", "Verde", "Azul", "Vermelho", "Azul", "Amarelo", "Verde", "Azul", "Vermelho", "Azul"]
# a) Medida mais apropriada e cálculo
# Para dados categóricos nominais, a moda é a medida mais apropriada.
contagem_cores = Counter(cores)
# A moda é o(s) elemento(s) com a maior frequência.
# Counter.most_common(1) retorna uma lista de tuplas (elemento, contagem)
moda_cores = [item for item, count in contagem_cores.most_common() if count == contagem_cores.most_common(1)]
print(f"Dados (Cores Favoritas): {cores}")
print(f"\nA medida de tendência central mais apropriada para dados nominais é a Moda.")
print(f"Moda das cores: {moda_cores} (Frequência: {contagem_cores.most_common(1)})")
# b) Desvio padrão ou média para estes dados?
print("\nNão faz sentido calcular o desvio padrão ou a média para estes dados.")
print("Justificativa: Cores são dados qualitativos nominais. Eles não possuem um valor numérico inerente ou uma ordem lógica que permita operações aritméticas como soma ou diferença. Média e desvio padrão são medidas para dados quantitativos.")
cores <- c("Azul", "Verde", "Azul", "Vermelho", "Amarelo", "Azul", "Verde", "Azul", "Vermelho", "Azul", "Amarelo", "Verde", "Azul", "Vermelho", "Azul")
# a) Medida mais apropriada e cálculo
# Para dados categóricos nominais, a moda é a medida mais apropriada.
tabela_frequencia <- table(cores)
max_frequencia <- max(tabela_frequencia)
moda_cores <- names(tabela_frequencia[tabela_frequencia == max_frequencia])
cat(sprintf("Dados (Cores Favoritas): %s\n", paste(cores, collapse = ", ")))
cat("\nA medida de tendência central mais apropriada para dados nominais é a Moda.\n")
cat(sprintf("Moda das cores: %s (Frequência: %d)\n", paste(moda_cores, collapse = ", "), max_frequencia))
# b) Desvio padrão ou média para estes dados?
cat("\nNão faz sentido calcular o desvio padrão ou a média para estes dados.\n")
cat("Justificativa: Cores são dados qualitativos nominais. Eles não possuem um valor numérico inerente ou uma ordem lógica que permita operações aritméticas como soma ou diferença. Média e desvio padrão são medidas para dados quantitativos.\n")
Análise:
a) Medida mais apropriada e cálculo:
- Os dados são qualitativos nominais (cores). A única medida de tendência central apropriada é a Moda.
- Contagem: Azul (7), Verde (3), Vermelho (3), Amarelo (2).
- Moda: Azul.
b) Desvio padrão ou média? Não faz sentido calcular o desvio padrão ou a média para estes dados. A média e o desvio padrão requerem que os dados sejam numéricos e permitam operações aritméticas de soma e subtração, o que não é o caso para categorias nominais como cores.