Introdução à Estatística Descritiva

Descrever e Resumir Dados Utilizando Medidas de Tendência Central e Dispersão

Autor

Márcio Nicolau

Data de Publicação

3 de setembro de 2025

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.
DicaQuando usar

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:

  1. Ordene os dados em ordem crescente.
  2. Se o número de observações (\(n\)) for ímpar, a mediana é o valor central.
    • Posição da mediana: \(\frac{n+1}{2}\).
  3. 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.
DicaQuando usar

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.
DicaQuando usar

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.

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;
Figura 1: Diagrama ilustrando a posição das medidas de tendência central em diferentes distribuições. Ass.: Assimetria.

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;
Figura 2: Diagrama ilustrando a relação entre a média e o desvio padrão em distribuições com a mesma média mas dispersões diferentes.

Verificação de Aprendizagem

Resolva os problemas abaixo, calculando as medidas descritivas solicitadas e interpretando os resultados.

  1. Salários de uma Equipe:

    Os salários mensais (em R$) de uma pequena equipe são: [3000, 3500, 3200, 3800, 4000, 3100, 20000].

    1. Calcule a média, mediana e moda dos salários.
    2. Qual medida de tendência central melhor representa o “salário típico” desta equipe e por quê?
    3. 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
  1. 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].

    1. Calcule a média, mediana e moda das pontuações.
    2. Calcule a amplitude e o desvio padrão amostral.
    3. 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.
  1. 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].

    1. Calcule a média e o desvio padrão amostral dos tempos de atendimento.
    2. 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.

  1. 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].

    1. Qual a medida de tendência central mais apropriada para estes dados? Calcule-a.
    2. 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.

Referências Bibliográficas

BUSSAB, Luiz O. de M.; MORETTIN, Pedro A. Estatı́stica Básica. 9. ed. São Paulo: Saraiva, 2017.