Fundamentos de Probabilidade, Análise Exploratória de Dados e Visualização de Dados com ggplot2

Exercícios das Aulas e Soluções

Autor

Prof. Dr. Washington S. da Silva

Data de Publicação

13/06/2024

Introdução

Conteúdo e Objetivo

Este arquivo contém todos os exercícios e respectivas soluções sobre os tópicos os seguintes módulos da disciplina Introdução à Ciência de Dados:

  • Módulo 4: Fundamentos de Probabilidade;
  • Módulo 5: Análise Exploratória de Dados, e;
  • Módulo 6: Visualização de Dados com ggplot2.

O objetivo é disponibilizar um material organizado para estudo e consulta para a Avaliação 2.

Tópico: Tipos de Variáveis Aleatórias

Exercício 1

Identificando Variáveis Aleatórias em Contextos Empresariais

Para cada uma das situações abaixo, identifique a variável aleatória descrita, classifique-a como discreta ou contínua:

  1. O número mensal de cancelamentos de assinaturas em uma plataforma de streaming

  2. O tempo de entrega (em horas) para pedidos online de uma loja de e-commerce

  3. A variação percentual diária no preço das ações de uma empresa

  4. O número de unidades vendidas de um novo produto no primeiro mês após seu lançamento

Solução do Exercício 1

  1. Variável Aleatória Discreta. O número de cancelamentos só pode assumir valores inteiros não-negativos \((0, 1, 2, 3, ...)\).

  2. Variável Aleatória Contínua. O tempo é uma grandeza que pode assumir qualquer valor real positivo dentro de um intervalo.

  3. Variável Aleatória Contínua. A variação percentual pode assumir qualquer valor real dentro de um intervalo

  4. Variável Aleatória Discreta. O número de unidades vendidas só pode assumir valores inteiros não-negativos \((0, 1, 2, 3, ...)\).

Tópico: Score Padronizado e Análise Relativa

Exercício 2

Aplicação de Score Padronizado

Situação: Após uma avaliação, você deseja fornecer aos alunos uma análise do desempenho relativo de cada um em relação à turma.

Dados da avaliação:

  • Média da turma: 55 pontos (de 100)
  • Desvio padrão: 12 pontos
  • Amplitude: notas de 38 a 85 pontos

Objetivo: Utilizar o score padronizado para:

  1. Mostrar a posição relativa de cada aluno
  2. Calcular o percentil de cada aluno
  3. Facilitar a interpretação do desempenho individual
  • Simula as notas de cada aluno para o exemplo
# Simulando notas de uma turma de 19 alunos
# Fixa a semente para reprodutibilidade
set.seed(2024)

# Simula notas com média 55 e desvio padrão 12
notas_turma <- round(rnorm(19, mean = 55, sd = 12))

# Limita as notas entre 38 e 85
notas_turma <- pmax(38, pmin(85, notas_turma)) 

# Visualiza as notas simuladas
head(notas_turma, 19)
 [1] 67 61 54 52 69 71 61 53 40 42 38 61 65 59 38 53 44 60 38

Solução do Exercício 2

Aplicação de Score Padronizado

  • Cálculo das Notas Relativas
# Cria a data frame analise_relativa
analise_relativa <- data.frame(alunos = 1:19, notas = notas_turma) %>%
  # Calcula o z-score e nota relativa
  mutate(
    z_score = scale(notas),              # calcula o z-score
    z_score_arred = round(z_score, 1),   # arredonda o z-score
    nota_relativa = round(pnorm(z_score) * 100, 1)  # percentil
  ) %>%
  # Remove coluna intermediária
  select(-z_score)
  
# Visualiza os dados
head(analise_relativa, 19)
   alunos notas z_score_arred nota_relativa
1       1    67           1.2          87.9
2       2    61           0.6          73.5
3       3    54           0.0          50.0
4       4    52          -0.2          42.9
5       5    69           1.3          91.1
6       6    71           1.5          93.7
7       7    61           0.6          73.5
8       8    53          -0.1          46.4
9       9    40          -1.3          10.4
10     10    42          -1.1          14.0
11     11    38          -1.4           7.5
12     12    61           0.6          73.5
13     13    65           1.0          83.9
14     14    59           0.4          67.4
15     15    38          -1.4           7.5
16     16    53          -0.1          46.4
17     17    44          -0.9          18.4
18     18    60           0.5          70.5
19     19    38          -1.4           7.5
  • Interpretação da análise relativa

Colunas da tabela:

  • notas: Nota original do aluno (0-100)
  • z_score_arred: Quantos desvios-padrão acima/abaixo da média
    • Valores negativos: abaixo da média da turma
    • Valores positivos: acima da média da turma
  • nota_relativa: Percentil do aluno na turma (0-100)
    • Interpretação: “Este aluno superou X% dos colegas”

Exemplos de interpretação:

  • Aluno 6 (nota 71): z = 1.5, percentil 93.7
    • Está 1.5 desvios-padrão acima da média
    • Nota superior a 93.7% das notas da turma
  • Aluno 11 (nota 38): z = -1.4, percentil 7.5
    • Está 1.4 desvios-padrão abaixo da média
    • Apenas 7.5% dos colegas tiveram nota inferior

Vantagem: A função pnorm() converte automaticamente cada z-score no percentil correspondente

Tópico: Distribuição Normal

Exercício 3

Análise de Investimentos

Cenário: A distribuição dos retornos mensais de uma ação segue aproximadamente uma distribuição normal com média de 1% e desvio-padrão de 3% (\(R \sim N(\mu = 0.01, \sigma = 0.03)\)).

  1. Qual a probabilidade de sofrer uma perda mensal superior a 4%? Ou seja, encontre \(P(R < -0.04)\).

  2. Qual a probabilidade de obter um retorno positivo no próximo mês? Ou seja, encontre \(P(R > 0)\).

  3. Qual a probabilidade de obter um retorno superior a 5%? Ou seja, encontre \(P(R > 0.05)\).

Solução do Exercício 3

Análise de Investimentos

  1. Qual a probabilidade de sofrer uma perda mensal inferior a 4%? Ou seja, encontre \(P(R < - 0.04)\).
# Calcula P(R < - 0.04)
pnorm(-0.04, mean = 0.01, sd = 0.03)
[1] 0.04779
  1. Qual a probabilidade de obter um retorno positivo no próximo mês? Ou seja encontre \(P(R > 0)\).
# Calcula P(R > 0)
1 - pnorm(0, mean = 0.01, sd = 0.03)
[1] 0.63056
  1. Qual a probabilidade de obter um retorno superior a 5%? Ou seja, encontre \(P(R > 0.05)\).
# Calcula P(R > 0.05)
1 - pnorm(0.05, mean = 0.01, sd = 0.03)
[1] 0.091211

Exercício 4

Vendas e Previsão de Estoque

Cenário: As vendas diárias de um produto seguem distribuição normal com média de R$ 12.000 e desvio-padrão de R$ 2.500 (\(V \sim N(\mu = 12000, \sigma = 2500)\)).

  1. Qual a probabilidade de que em um dia as vendas excedam R$ 15.000? Ou seja, encontre \(P(V > 15000)\).

  2. Para garantir estoque em 95% dos dias, qual deveria ser o valor mínimo de vendas para preparação? Encontre \(y\) tal que \(P(V < y) = 0.95\).

  3. Qual o valor mínimo de vendas esperado com 90% de probabilidade? Encontre \(x\) tal que \(P(V > x) = 0.90\).

Solução do Exercício 4

Vendas e Previsão de Estoque

  1. Qual a probabilidade de que em um determinado dia as vendas excedam R$ 15.000? Ou seja, encontre \(P(V > 15000)\).
# Calcula P(V > 15000) = 1 - P(V < 15000)
1 - pnorm(15000, mean = 12000, sd = 2500)
[1] 0.11507
  1. Encontre o valor \(y\) tal que \(P(V < y) = 0.95\).
# Calcula o valor y tal que P(V < y) = 0.95
qnorm(0.95, mean = 12000, sd = 2500)
[1] 16112
  1. Encontre o valor \(x\) tal que \(P(V > x) = 0.90\).
# Calcula o valor x tal que P(V > x) = 0.90
# Isso é equivalente ao percentil 10
qnorm(0.10, mean = 12000, sd = 2500)
[1] 8796.1

Tópico: Valor Esperado

Exercício 5

Aplicação do Valor Esperado em Seguros

Contexto: Seguradora oferece proteção contra incêndios residenciais

Dados históricos:

  • Probabilidade anual de incêndio de uma casa: 1% (0.01)
  • Indenização média por incêndio: R$ 150.000
  • Margem desejada: 25%

Perguntas:

  1. Calcule o valor esperado de indenizações por residência
  2. Determine o prêmio anual a ser cobrado
  3. Implemente a solução em R

Solução do Exercício 5

Aplicação do Valor Esperado em Seguros

# Definir os parâmetros
prob_incendio <- 0.01
valor_indenizacao <- 150000
margem <- 0.25

# a) Valor esperado das indenizações
valor_esperado <- prob_incendio * valor_indenizacao
valor_esperado
[1] 1500
# b) Prêmio anual com margem
premio_anual <- valor_esperado * (1 + margem)
premio_anual
[1] 1875
# c) Simulação para verificar
set.seed(123)
n_casas <- 10000
sinistros <- sample(c(0, valor_indenizacao), n_casas, 
                   prob = c(0.99, 0.01), replace = TRUE)

# Calcula a média dos sinistros
media_sinistros <- mean(sinistros)
media_sinistros
[1] 1515
# Calcula o número de incêndios
num_incendios <- sum(sinistros > 0)
num_incendios
[1] 101

Tópico: Análise de Risco e Coeficiente de Variação

Exercício 6

Análise de Risco de Investimentos

Cenário: Um gestor de investimentos está comparando dois fundos com diferentes perfis de risco.

Dados Calculados:

  • Fundo Conservador: Retorno esperado = 8.6%, Desvio-padrão = 1.9%
  • Fundo Arrojado: Retorno esperado = 10.2%, Desvio-padrão = 6.9%

Perguntas:

  1. Calcule o coeficiente de variação para cada fundo.
  2. Compare o risco relativo dos dois fundos.
  3. Qual fundo você recomendaria para um investidor conservador? Justifique.

Solução do Exercício 6

Análise de Risco de Investimentos

# Cálculo dos Coeficientes de Variação (CV)

cv_fundo_conservador <- (1.9 / 8.6) * 100
cv_fundo_conservador
[1] 22.093
cv_fundo_arrojado <- (6.9 / 10.2) * 100
cv_fundo_arrojado 
[1] 67.647

Interpretação:

Apesar do fundo arrojado ter um retorno esperado maior, seu coeficiente de variação (CV) é significativamente maior, indicando que o risco relativo é muito mais alto, cerca de 3 vezes (\(67/22 \approx 3\)) maior que o risco do fundo conservador.

Exercício 7

Gestão de Estoque

Cenário: Uma loja está comparando a previsibilidade da demanda de dois produtos.

Dados:

  • Produto A: Demanda Esperada = E(D) = \(\mu\) = 100 unidades, \(\sigma\) = 15 unidades
  • Produto B: Demanda Esperada = E(D) = \(\mu\) = 50 unidades, \(\sigma\) = 12 unidades

Perguntas:

  1. Calcule o coeficiente de variação para cada produto.
  2. Qual produto tem maior risco relativo de demanda?
  3. Qual seria mais desafiador para gerenciar estoque?

Solução do Exercício 7

Gestão de Estoque

# Cálculo dos Coeficientes de Variação (CV)

cv_a <- (15 / 100) * 100
cv_a 
[1] 15
cv_b <- (12 / 50) * 100
cv_b 
[1] 24

Interpretação:

Como o coeficiente de variação da demanda do produto b é maior que o do produto a, isso indica que o produto b tem uma maior variabilidade (risco) relativa do que a do produto a,assim, é mais desafiador gerenciar o estoque do produto b.

Tópico: Valor-em-Risco (VaR)

Exercício 8

Valor-em-Risco (VaR)

Você está analisando um portfólio de títulos governamentais com:

  • Retorno médio mensal: 0.8%
  • Volatilidade mensal: 3.2%
  • Valor investido: US$ 250.000

Considerando que os retornos do protfólio seguem aproximadamente uma distribuição normal:

  • Calcule o VaR mensal de 95% (percentual e monetário)
  • Calcule o VaR mensal de 99% (percentual e monetário)
  • Compare os resultados e interprete a diferença

Dica: Use qnorm() no R para obter os quantis da distribuição normal.

Solução do Exercício 8

Valor-em-Risco (VaR)

# Parâmetros do investimento
retorno_medio <- 0.008     # 0.8%
volatilidade <- 0.032      # 3.2%
valor <- 250000            # US$ 250k

# 1. VaR 95% percentual e monetário
var_95_percentual <- retorno_medio + qnorm(0.05) * volatilidade
var_95_percentual
[1] -0.044635
var_95_monetário <- valor * var_95_percentual
var_95_monetário
[1] -11159
# 2. VaR 99% percentual e monetário
var_99_percentual <- retorno_medio + qnorm(0.01) * volatilidade
var_99_percentual
[1] -0.066443
var_99_monetário <- valor * var_99_percentual
var_99_monetário
[1] -16611

Interpretação:

VaR Mensal a 95%:

  • Percentual: -4.46%
    Significa que há 5% de probabilidade de o portfólio perder mais que 4.46% em um mês.

  • Monetário: US$ 11.159
    Representa a perda máxima esperada com 95% de confiança para o investimento de US$ 250.000.

VaR Mensal a 99%:

  • Percentual: -6.64%
    Indica que há apenas 1% de chance de perdas superiores a 6.64% no mês.

  • Monetário: US$ 16.611
    Mostra a perda máxima esperada com 99% de confiança.

Comparação:

  • O VaR a 99% é maior (em valor absoluto) que o VaR a 95%, como esperado
    → Quanto maior o nível de confiança, maior a perda potencial extrema

  • A diferença reflete o trade-off entre:

    • Confiança estatística (99% vs 95%)
    • Magnitude da perda potencial (maior no 99%)
  • O VaR negativo indica perda potencial (retorno abaixo da média)

Observação: Esses cálculos assumem distribuição normal dos retornos, o que pode subestimar riscos em eventos extremos.

Tópico: Covariância e Correlação entre Variáveis Aleatórias

Exercício 9

Covariação entre os retornos de duas ações

Cenário: Um investidor está analisando a correlação entre os retornos de duas ações para construir um portfólio diversificado. Os retornos mensais históricos (em %) das duas ações nos últimos 6 meses foram:

Mês Ação A Ação B
1 2.5 1.8
2 -1.2 3.1
3 4.1 -0.5
4 1.8 2.4
5 -0.8 1.2
6 3.6 -1.0

Perguntas:

  1. Faça um gráfico de dispersão dos retornos das duas ações. Analisando o gráfico, você considera que há alguma correlação entre os retornos das duas ações? Se sim, qual?

  2. Calcule a covariância e o coeficiente de correlação entre as duas ações.

  3. Com base na correlação, essas ações são uma boa opção para diversificação? Explique.

Solução do Exercício 9

Gráfico de Dispersão e Interpretação

Interpretação de Gráfico de Dispersão:

Analisando o gráfico de dispersão, parece haver uma correlação negativa forte entre os retornos das ações A e B, indicando que quando uma ação tem um retorno positivo, a outra tende a ter um retorno negativo, e vice-versa.

Cálculo da Covariância e Correlação

# Cálculo da covariância 
covariancia <- cov(acao_a, acao_b)
covariancia
[1] -2.6353
# Cálculo correlação
correlacao <- cor(acao_a, acao_b)
correlacao
[1] -0.73199

Interpretação dos Resultados:

  • Como indicado pelo gráfico de dispersão, há uma correlação positiva muito forte entre temperatura e vendas, (- 0.73).

  • Se a retorno da ação a aumenta, o retorno da ação b tende a diminuir, e vice-versa.

Tópico: Simulação de Monte Carlo

Exercício 10

Simulacão de Monte Carlo - Análise de Viabilidade de Projeto de Investimento

Cenário: Uma startup de tecnologia está avaliando o lançamento de um novo aplicativo. A receita líquida do primeiro ano depende de fatores como aceitação do mercado e concorrência. Os possíveis cenários são:

  • Fracasso: Receita líquida de -R$ 100.000 (probabilidade 30%)
  • Sucesso Moderado: Receita líquida de R$ 200.000 (probabilidade 50%)
  • Grande Sucesso: Receita líquida de R$ 500.000 (probabilidade 20%)

Perguntas:

  1. Use simulação de Monte Carlo com 10.000 repetições para estimar a receita líquida esperada.

  2. Qual a probabilidade de a empresa ter receita líquida positiva no primeiro ano?

  3. Qual a probabilidade de a receita líquida superar R$ 300.000?

Solução do Exercício 10

# Definir cenários e probabilidades
receitas <- c(-100000, 200000, 500000)
probabilidades <- c(0.30, 0.50, 0.20)

# Função de simulação
simulacao_receita <- function() {
  sample(receitas, size = 1, prob = probabilidades, replace = TRUE)
}

# Simulação de Monte Carlo com 10.000 repetições

# fixa a semente para reprodutibilidade
set.seed(123)
simulacoes <- 10000
receitas_simuladas <- replicate(simulacoes, simulacao_receita())

# 1. Receita liquida esperada
receita_esperada <- mean(receitas_simuladas)
receita_esperada
[1] 168650
# 2. Probabilidade de receita positiva
prob_positiva <- mean(receitas_simuladas > 0)
prob_positiva
[1] 0.7006
# 3. Probabilidade de superar R$ 300.000
prob_300k <- mean(receitas_simuladas > 300000)
prob_300k
[1] 0.1949

Exercício 11

Gestão de Riscos Operacionais

Cenário: Uma transportadora precisa avaliar os custos extras mensais devido a problemas operacionais (acidentes, multas, manutenção não programada). Historicamente, os custos extras seguem este padrão:

  • Mês Tranquilo: Custo extra de R$ 5.000 (probabilidade 40%)
  • Mês Normal: Custo extra de R$ 15.000 (probabilidade 35%)
  • Mês Problemático: Custo extra de R$ 35.000 (probabilidade 20%)
  • Mês Crítico: Custo extra de R$ 60.000 (probabilidade 5%)

Perguntas:

  1. Use simulação de Monte Carlo com 15.000 repetições para estimar o custo extra médio mensal.

  2. Qual a probabilidade de os custos extras mensais excederem R$ 25.000?

  3. Para fins de planejamento orçamentário, qual valor a empresa deveria reservar mensalmente para cobrir custos extras em 90% dos casos?

Solução do Exercício 11

# Definir cenários e probabilidades
custos_extras <- c(5000, 15000, 35000, 60000)
probabilidades <- c(0.40, 0.35, 0.20, 0.05)

# Função de simulação
simulacao_custos <- function() {
  sample(custos_extras, size = 1, prob = probabilidades, replace = TRUE)
}

# 1. Simulação de Monte Carlo com 15.000 repetições
set.seed(456)
simulacoes <- 15000
custos_simulados <- replicate(simulacoes, simulacao_custos())

# Custo extra médio mensal
custo_extra_medio <- mean(custos_simulados)
custo_extra_medio
[1] 17399
# Verificação teórica
custo_teorico <- sum(custos_extras * probabilidades)
custo_teorico
[1] 17250
# 2. Probabilidade de exceder R$ 25.000
prob_25k <- mean(custos_simulados > 25000)
prob_25k
[1] 0.25407
# 3. Valor para cobertura de 90% dos casos
percentil_90 <- quantile(custos_simulados, 0.90)
percentil_90
  90% 
35000 

Tópico: Análise Exploratória de Dados Numérica

Exercício 12

Medidas de Posição

Considere o seguinte conjunto de dados que representa as idades de clientes em uma loja:

idades <- c(23, 25, 28, 28, 32, 35, 36, 38, 40, 42, 45, 47, 50, 52, 55, 60, 65)
  1. Calcule a idade média dos clientes
  2. Determine a idade mediana e compare com a idade média
  3. Encontre o primeiro e terceiro quartis
  4. Identifique o percentil 90
  5. Verifique se há moda nos dados

Discussão: O que as medidas de posição revelam sobre a distribuição das idades?

Solução do Exercício 12

Para resolver este exercício, precisamos da função calcular_moda() elaborada durante a aula:

# Função simples para calcular a moda de um vetor numérico
calcular_moda <- function(x) {
  # 1. Cria tabela de frequências
  tab <- table(x)
  
  # 2. Identifica valor(es) com máxima frequência
  moda <- as.numeric(names(tab)[tab == max(tab)])
  
  # 3. Retorna o resultado
  return(moda)
}

Estimativa da idade média:

mean(idades)
[1] 41.235

Estimativa da idade mediana:

median(idades)
[1] 40

Estimando os quartis:

quantile(idades, probs = c(0.25, 0.5, 0.75))
25% 50% 75% 
 32  40  50 

Estimando os percentis 10, 30, 40, 80 e 90:

quantile(idades, probs = c(0.1, 0.3, 0.4, 0.8, 0.9))
 10%  30%  40%  80%  90% 
26.8 34.4 36.8 51.6 57.0 

Estimando a moda:

# 5. Moda
calcular_moda(idades)
[1] 28

Interpretação:

  • A média (41.23529) e mediana (40) são próximas, sugerindo distribuição simétrica

  • O primeiro quartil (32) indica que 25% dos clientes têm até esta idade

  • O percentil 90 (57) indica que 90% dos clientes têm até esta idade

  • moda = 28 (idade mais frequente entre os clientes)

Exercício 13

Medidas de Variabilidade

Uma empresa de tecnologia está analisando o desempenho (em R$ mil) de duas equipes de vendas em 2023:

# Metodologia tradicional de vendas
equipe_A <- c(85, 92, 78, 110, 95, 105, 115, 98, 102, 250)
equipe_A
 [1]  85  92  78 110  95 105 115  98 102 250
# Nova metodologia de vendas
equipe_B <- c(120, 115, 125, 118, 122, 130, 115, 120, 125, 122) 
equipe_B
 [1] 120 115 125 118 122 130 115 120 125 122
  1. Calcule para cada equipe:

    • Variância e desvio-padrão
    • Amplitude e IQR
    • Coeficiente de variação
  2. Compare os resultados e responda:

    • Qual equipe tem desempenho mais consistente?
    • O outlier na Equipe A afeta quais medidas?
    • Se você fosse o gestor, qual métrica usaria para avaliar a equipe mais estável?

Contexto: A Equipe B utiliza uma nova metodologia de vendas

Solução do Exercício 13

Para resolver este exercício, precisamos da função cv() elabordada durante a aula:

cv <- function(x, na.rm = FALSE) {

  # 1. tratamento de valores ausentes (NAs)
  if(na.rm) x <- x[!is.na(x)]
  
  # 2. Verifica se o vetor está vazio 
  # após a remoção de NAs
  if(length(x) == 0) return(NA)
  
  # 3. Cálculo do desvio padrão:
  desvio <- sd(x, na.rm = na.rm)
  
  # 4. Cálculo da média:
  media <- mean(x, na.rm = na.rm)
  
  # 5. Cálculo final do CV:
  (desvio / media) * 100
}
# cria df para exibir resultados
data.frame(
  Medida = c("Variância", "Desvio-Padrão", "Amplitude", "IQR", "CV"),
  Valor = c(round(var(equipe_A), 2), 
           round(sd(equipe_A), 2),
           diff(range(equipe_A)),
           IQR(equipe_A),
           paste0(round(cv(equipe_A), 2), "%"))
)
         Medida   Valor
1     Variância 2440.67
2 Desvio-Padrão    49.4
3     Amplitude     172
4           IQR      16
5            CV  43.72%
  • Equipe B:
# cria df para exibir resultados
data.frame(
  Medida = c("Variância", "Desvio-Padrão", "Amplitude", "IQR", "CV"),
  Valor = c(round(var(equipe_B), 2), 
           round(sd(equipe_B), 2),
           diff(range(equipe_B)),
           IQR(equipe_B),
           paste0(round(cv(equipe_B), 2), "%"))
)
         Medida Valor
1     Variância 21.96
2 Desvio-Padrão  4.69
3     Amplitude    15
4           IQR  5.75
5            CV 3.87%

Análise Gerencial:

  1. Consistência: Equipe B tem menor CV (3.87% vs 43.72%), indicando maior estabilidade no desempenho.

  2. Impacto do Outlier: Afeta fortemente a variância, o desvio-padrão,
    a amplitude e o cv, tornando essas medidas menos representativas.

  3. Métrica Recomendada: IQR, por ser robusta a valores extremos.

  4. Tomada de Decisão: A nova metodologia (Equipe B) produz resultados mais previsíveis.

Exercício 14

Medidas de Correlação

Uma empresa de consultoria deseja entender a relação entre diferentes métricas de performance de seus consultores. Os dados abaixo representam 12 consultores selecionados aleatoriamente:

# Dados reais de uma empresa de consultoria
dados_consultoria <- data.frame(
  consultor = 1:12,
  horas_treinamento = c(20, 35, 15, 40, 25, 10, 30, 45, 18, 28, 38, 22),
  satisfacao_cliente = c(7.2, 8.5, 6.8, 9.1, 7.8, 6.2, 8.2, 9.3, 7.0, 8.0, 8.8, 7.5),
  faturamento_mensal = c(45, 68, 38, 85, 52, 32, 62, 92, 42, 58, 75, 48)
)

# Exibir primeiras linhas
head(dados_consultoria, 5)
  consultor horas_treinamento satisfacao_cliente faturamento_mensal
1         1                20                7.2                 45
2         2                35                8.5                 68
3         3                15                6.8                 38
4         4                40                9.1                 85
5         5                25                7.8                 52

Tarefas:

  1. Crie uma matriz de gráficos de dispersão (scatterplot matrix) para visualizar todas as relações simultaneamente.

  2. Calcule e interprete a matriz de correlação completa.

  3. Identifique qual relação é mais forte e discuta as implicações gerenciais.

  4. A empresa planeja investir R$ 50.000 em treinamento. Com base na análise, este investimento se justifica? Explique.

  5. Reflexão crítica: Se encontrarmos alta correlação entre treinamento e faturamento, podemos afirmar que treinar mais causará maior faturamento? Justifique.

Solução do Exercício 14

  1. Visualização das Relações
# Matriz de gráficos de dispersão
pairs(dados_consultoria[, -1], 
      main = "Matriz de Dispersão - Métricas de Performance",
      pch = 19, 
      col = "darkblue",
      cex = 1.2)

  1. Matriz de Correlação
# Calcula correlações
matriz_cor <- cor(dados_consultoria[, -1])
round(matriz_cor, 3)
                   horas_treinamento satisfacao_cliente faturamento_mensal
horas_treinamento              1.000              0.995              0.991
satisfacao_cliente             0.995              1.000              0.982
faturamento_mensal             0.991              0.982              1.000
  1. Análise das Relações
# Correlação entre horas de treinamento e faturamento
cor_treinamento_faturamento <- cor(dados_consultoria$horas_treinamento, 
                                   dados_consultoria$faturamento_mensal)
# exibir correlação
cor_treinamento_faturamento
[1] 0.9907
# Correlação entre horas de treinamento e satisfação do cliente
cor_treinamento_satisfacao <- cor(dados_consultoria$horas_treinamento, 
                                  dados_consultoria$satisfacao_cliente)
# exibir correlação
cor_treinamento_satisfacao 
[1] 0.99536

Interpretação:

  • Ambas as correlações são positivas e fortes:

    • 0.991 entre horas de treinamento e faturamento mensal

    • 0.995 entre horas de treinamento e satisfação do cliente

  • Correlação muito forte e positiva: consultores com mais horas de treinamento tendem a gerar maior faturamento

  • A satisfação do cliente também está positivamente correlacionada com ambas as métricas

4. Decisão de Investimento

Com base na correlação de 0.991:

  • Recomendação: O investimento em treinamento se justifica, pois consultores mais treinados tendem a gerar maior faturamento e satisfação do cliente, pelas estimativas dos coeficientes de correlação.

5. Reflexão sobre Causalidade

ATENÇÃO: Correlação \(\neq\) Causalidade!

Possíveis explicações alternativas:

  • Seleção: Consultores mais motivados buscam mais treinamento E trabalham mais

  • Confundimento: Consultores seniores têm acesso a mais treinamento E clientes maiores

  • Causalidade reversa: Alto faturamento permite investir em mais treinamento

Conclusão: Para estabelecer causalidade, seria necessário um experimento controlado ou análise mais sofisticada.

Tópico: Análise Exploratória de Dados Gráfica

Exercício 15

Visualizando a Ditribuição de Variáveis Numéricas

  • Prática com ggplot2 usando a data frame diamonds

Parte 1 - Crie os seguintes gráficos para visualizar a variável price

  • Histograma (use bins = 30)
  • Gráfico de densidade empírica
  • Histograma + densidade sobreposta
  • Boxplot

Parte 2 - Análise descritiva

  • Analise o histograma + densidade da Parte 1
  • Siga as diretrizes apresentadas em aula
  • Comente sobre forma, centro, dispersão e outliers

Parte 3 - Análise comparativa

  • Crie boxplots de price por clarity
  • Aplique transformação log10 para melhor visualização
  • Compare os padrões entre as categorias

Requisitos:

  • Todos os gráficos devem ter títulos e rótulos apropriados
  • Customização visual é opcional (exploratório vs. publicação)

Dica: A distribuição de price é assimétrica. Experimente visualizar também log10(price) para comparar interpretações nas duas escalas.

Solução do Exercício 15

Parte 1 - Visualizando a distribuição da variável price

  1. Histograma
# Histograma com regra de Sturges
ggplot(diamonds, aes(x = price)) +
  geom_histogram(bins = 30) +
  labs(title = "Histograma da Distribuição do Preço dos Diamantes",
       x = "Preço (em dólares)",
       y = "Frequência") +
  theme_minimal()

  1. Gráfico de densidade empírica
# Gráfico de densidade empírica
ggplot(diamonds, aes(x = price)) +
    geom_density(size = 1) +
  labs(title = "Densidade Empírica do Preço dos Diamantes",
       x = "Preço (em dólares)",
       y = "Densidade") +
  theme_minimal()

  1. Histograma + densidade sobreposta
# Histograma + densidade sobreposta
ggplot(diamonds, aes(x = price)) +
  geom_histogram(
    aes(y = after_stat(density)), # normaliza o histograma
    bins = 30,
    fill = "#E6F2FF", # azul muito claro para as barras
    color = "#2E5984" # azul escuro para borda das barras
  ) +
  geom_density(color = "#1B3A57", size = 1) +
  labs(
    title = "Histograma e Densidade do Preço dos Diamantes",
    x = "Preço (em dólares)",
    y = "Densidade"
  ) +
  theme_minimal()

  1. Boxplot
# Boxplot dos preços dos diamantes
ggplot(diamonds, aes(y = price)) +
  geom_boxplot() +
  labs(title = "Boxplot dos Preços dos Diamantes",
       y = "Preço (em dólares)") +
  theme_minimal()

Parte 2 - Análise descritiva do histograma da distribuição de price

Como visto em aula, para analisar variáveis numéricas, devemos combinar as estatísticas descritivas calculadas com a visualização gráfica. Assim, vamos caluclar algumas medidas de posição e de variabilidade do preço dos diamantes, e depois analisar o histograma com densidade sobreposta.

A função summary fornece medidas de posição para a variável price (mínimo, máximo, média, mediana, primeiro e terceiro quartis):

summary(diamonds$price)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    326     950    2401    3933    5324   18823 

Agora, vamos cálcular os coeficientes de assimetria e curtose:

assimetria_preco <- moments::skewness(diamonds$price)
assimetria_preco
[1] 1.6184
curtose_preco <- moments::kurtosis(diamonds$price)
curtose_preco
[1] 5.1774
Análise do histograma com densidade empírica sobreposta
  • A distribuição do preço dos diamantes, em sua escala original, apresenta forte assimetria positiva, com a cauda direita mais longa, indicando que há muitos diamantes com preços mais altos em relação à maioria dos diamantes.

Parte 3 - Análise comparativa de price por clarity

  1. Boxplots de price por clarity
# Boxplot de price por clarity
ggplot(diamonds, aes(x = clarity, y = price)) +
  geom_boxplot() +
  labs(title = "Boxplot do Preço dos Diamantes por Clareza",
       x = "Clareza",
       y = "Preço (em dólares)") +
  theme_minimal()

  1. Aplicando transformação log10 para melhor visualização
# Boxplot de log10(price) por clarity
ggplot(diamonds, aes(x = clarity, y = log10(price))) +
  geom_boxplot() +
  labs(title = "Boxplot do Log10 do Preço dos Diamantes por Clareza",
       x = "Clareza",
       y = "Log10(Preço)") +
  theme_minimal()

Interpretação dos padrões entre as categorias

A transformação logarítmica dos preços reduziu a assimetria da distribuição de price, ao reduzir o peso dos valores extremos (outliers), tornando a distribuicão dos preços por qualidade da clareza mais próximos de uma distribuição simétrica como a normal, facilitando a comparação dos preços medianos, da variabilidade e dos outliers por categoria de clareza.

A análise do boxplot comparativo de price por clarity revela:

Exercício 16

Visualizando a Distribuição de Uma Variável Categórica

Objetivo: Criar um gráfico de barras para visualizar o número de respondentes por estado civil.

Instruções:

  1. Crie uma tabela de frequência ordenada em ordem decrescente da freqüência absoluta dos estados civis (Dica: código do slide 21)

  2. Crie um gráfico de barras horizontais básico:

  3. Melhore o gráfico adicionando:

    • os valores da frequência absoluta nas barras usando geom_text()
    • Título e rótulos apropriados dos eixos com labs(title = "...")
    • Tema minimalista com theme_minimal()

Solução do Exercício 16

  1. Crie uma tabela de frequência ordenada em ordem decrescente da freqüência absoluta dos estados civis (Dica: código do slide 21)
# Preparação dos dados para o gráfico

# Tabela de frequência da variável estado_civil
tabela_estadocivil <- questionario %>% 
  # conta o número de respondentes por estado_civil
  count(estado_civil) %>% 
  # ordena os dados pela frequência em ordem CRESCENTE (menor para maior)
  # vamos usar ordem crescente para compensar o efeito do coord_flip()
  arrange(n) %>%
  # sincroniza os niveis do factor com a ordem atual das linhas
  mutate(estado_civil = factor(estado_civil, levels = estado_civil))

# exibe a tabela (dados em ordem crescente)
tabela_estadocivil
# A tibble: 6 × 2
  estado_civil      n
  <fct>         <int>
1 Sem resposta     17
2 Separado(a)     743
3 Viúvo(a)       1807
4 Divorciado(a)  3383
5 Nunca casou    5416
6 Casado(a)     10117
  1. Crie um gráfico de barras horizontais básico:
ggplot(tabela_estadocivil, aes(x = estado_civil, y = n)) + 
  geom_bar(stat = "identity") +
  coord_flip()

  1. Melhore o gráfico adicionando:

    • os valores da frequência absoluta nas barras usando geom_text()
    • Título e rótulos apropriados dos eixos com labs(title = "...")
    • Tema minimalista com theme_minimal()
# Salva o gráfico em objeto
grafico_estadocivil_freq <- 
# Cria um sistema de coordenadas para o gráfico com x sendo a raça e y sendo a frequência
ggplot(tabela_estadocivil, aes(x = estado_civil, y = n)) + 
  # Cria o gráfico de barras
  # stat="identity" usa os valores exatos de x = 'n' (frequência)
  geom_bar(stat="identity") +
  # Inverte os eixos
  coord_flip() +
  # geom_text() adiciona rótulos (frequência) às barras
  # hjust = -0.1: posiciona o texto um pouco à direita das barras horizontais
  geom_text(aes(label = n), hjust=-0.5) + 
  # Adiciona 15% de espaço extra à direita na margem do arquivo
  # para exibir o gráfico completamente
  scale_y_continuous(expand = expansion(mult = c(0, 0.15))) +
  # Adiciona rótulos aos eixos e título do gráfico
  labs(x = NULL, 
       y = "Número de Respondentes", 
       title  = "Número de Respondentes por Estado Civil") + 
  # Define um tema minimalista para o gráfico
  theme_minimal()

# Exibe o gráfico
grafico_estadocivil_freq

Exercício 17

Gráfico de Dispersão com Análise de Correlação

Objetivo: Baixar dados reais das ações da Petrobras (PETR4) e do Itaú (ITUB4) a partir do dia 2024-01-01, calcular a correlação entre elas e criar um gráfico de dispersão usando os pacotes tidyquant, effectsize e ggplot2.

Instruções:

  1. Baixe os dados das duas empresas de forma compacta usando a função tq_get() do pacote tidyquant

  2. Transforme os dados para análise de correlação usando pivot_wider():

  3. Calcule a correlação entre os preços das duas ações:

  4. Interprete a magnitude da correlação usando as regras de Cohen:

  5. Crie um gráfico de dispersão básico

  6. Melhore o gráfico adicionando título, rótulos, reta de regressão e tema:

  7. Escreva sua interpretação do gráfico de dispersão a partir do coeficiente de correlação de Pearson estimado. Pelo resultado da sua análise, se uma carteira for montada com apenas as ações da Petrobras e do Itaú, seria uma carteira diversificada de investimento em ações?

Solução do Exercício 17

Objetivo: Baixar dados reais das ações da Petrobras (PETR4) e do Itaú (ITUB4) a partir do dia 2024-01-01, calcular a correlação entre elas e criar um gráfico de dispersão usando os pacotes tidyquant, effectsize e ggplot2.

Instruções:

  1. Baixe os dados das duas empresas de forma compacta usando a função tq_get() do pacote tidyquant
# Solução robusta e simples para baixar múltiplas séries
dados_acoes <- c("PETR4.SA", "ITUB4.SA") %>%
  tq_get(from = "2024-01-01") %>%
  select(symbol, date, close) %>%
  rename(
    empresa = symbol,
    data = date,
    preco = close
  )

# Exibe as primeiras linhas do dataframe
head(dados_acoes)
# A tibble: 6 × 3
  empresa  data       preco
  <chr>    <date>     <dbl>
1 PETR4.SA 2024-01-02  37.8
2 PETR4.SA 2024-01-03  39.0
3 PETR4.SA 2024-01-04  38.6
4 PETR4.SA 2024-01-05  38.7
5 PETR4.SA 2024-01-08  38.4
6 PETR4.SA 2024-01-09  38.1
  1. Transforme os dados para análise de correlação usando pivot_wider():
dados_correlacao <- dados_acoes %>%
  pivot_wider(names_from = empresa, values_from = preco) %>%
  rename(petrobras = "PETR4.SA", itau = "ITUB4.SA")

# Exibe os dados transformados
head(dados_correlacao)
# A tibble: 6 × 3
  data       petrobras  itau
  <date>         <dbl> <dbl>
1 2024-01-02      37.8  30.5
2 2024-01-03      39.0  30.1
3 2024-01-04      38.6  29.9
4 2024-01-05      38.7  30.6
5 2024-01-08      38.4  30.3
6 2024-01-09      38.1  30.3
  1. Calcule a correlação entre os preços das duas ações:
correlacao <- cor(dados_correlacao$petrobras, dados_correlacao$itau)
round(correlacao, 3)
[1] -0.606
  1. Interprete a magnitude da correlação usando as regras de Cohen:
interpretacao <- effectsize::interpret_r(correlacao, rules = "cohen1988")
interpretacao
[1] "large"
(Rules: cohen1988)
Interprete a magnitude da correlação usando as regras de Cohen
  1. Crie um gráfico de dispersão básico:
ggplot(dados_correlacao, aes(x = petrobras, y = itau)) +
  geom_point()

  1. Melhore o gráfico adicionando título, rótulos, reta de regressão e tema:
# Salva o gráfico em um objeto
grafico_dispersao <-
ggplot(dados_correlacao, aes(x = petrobras, y = itau)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(title = "Correlação entre Petrobras e Itaú",
       subtitle = "Período de 2024-01-01 até hoje",
       x = "Preço Petrobras (R$)",
       y = "Preço Itaú (R$)",
       caption = "Fonte: Yahoo Finance") +
  theme_minimal()

# Exibe o gráfico
grafico_dispersao

Interpretação do gráfico de dispersão a partir do coeficiente de correlação de Pearson estimado

O gráfico de dispersão mostra uma relação negativa entre os preços das ações da Petrobras e do Itaú, ou seja, quando o preço de uma tende a subir, o da outra tende a cair, e vice-versa. Isso é confirmado pelo coeficiente de correlação de Pearson estimado, que é negativo. Esse tipo de relação sugere que as ações se comportam de forma oposta no mercado.

Do ponto de vista de diversificação de uma carteira de investimentos, essa correlação negativa é uma característica desejável. Ao combinar ativos que se movem em direções opostas, o investidor pode reduzir o risco total da carteira, pois as perdas em um ativo podem ser compensadas por ganhos no outro. Assim, mesmo sendo apenas duas ações, a carteira formada por Petrobras e Itaú apresenta certo grau de diversificação, por causa do comportamento contrário entre elas.

Portanto, sim, com base nesse resultado, pode-se dizer que essa seria uma carteira relativamente diversificada, embora o ideal seja incluir outros ativos para aumentar ainda mais a diversificação.