10 Respostas dos exercícios


10.1 Capítulo 3

  • Exercício 1
vetor1 <- c(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
vetor2 <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

soma <- vetor1 + vetor2
subtracao <- vetor1 - vetor2
multiplicacao <- vetor1 * vetor2
  • Exercício 2
matriz1 <- matrix(1:4, nrow = 2, ncol = 2)
matriz2 <- matrix(5:8, nrow = 2, ncol = 2)

soma <- matriz1 + matriz2
subtracao <- matriz1 - matriz2
multiplicacao <- matriz1 %*% matriz2
  • Exercício 3
alunos <- data.frame(
  Nome = c("Letícia", "Mariana", "Ana", "Otávio", "Ricardo"),
  Idade = c(17, 18, 16, 17, 19),
  Nota = c(8.5, 6.2, 4.3, 2.0, 5.5)
)

alunos$Aprovado <- alunos$Nota >= 6
print(alunos)
##      Nome Idade Nota Aprovado
## 1 Letícia    17  8.5     TRUE
## 2 Mariana    18  6.2     TRUE
## 3     Ana    16  4.3    FALSE
## 4  Otávio    17  2.0    FALSE
## 5 Ricardo    19  5.5    FALSE
  • Exercício 4
exponencial <- function(M, b=exp(1)) {
  lc <- dim(M) # vetor com número de linhas e colunas de M
  E <- M # inicializa a matriz E que será retornada pela função
  i <- 1 # Inicializa i que irá percorrer as linhas
  while(i<=lc[1]){
    j <- 1 # inicializa j que irá percorrer as colunas
    while(j<=lc[2]){
      E[i,j] <- b^M[i,j] # calcula os elementos da matriz E
      j <- j + 1 # atualiza j
    }
    i <- i + 1 # atualiza i
  }
  return(E)
}

# Testa a função 'exponencial'
M
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    0    1    4
## [3,]    0    0    1
exponencial(M,2)  
##      [,1] [,2] [,3]
## [1,]    2    4    8
## [2,]    1    2   16
## [3,]    1    1    2
exponencial(M)
##          [,1]     [,2]      [,3]
## [1,] 2.718282 7.389056 20.085537
## [2,] 1.000000 2.718282 54.598150
## [3,] 1.000000 1.000000  2.718282
  • Exercício 5
calcula_area <- function(base, altura) {
  return((base * altura) / 2)
}

# Testa a função 'calcula_area'
calcula_area(15, 3)
## [1] 22.5
  • Exercício 6
conta_pos_neg <- function(vetor) {
  pos <- sum(vetor > 0)
  neg <- sum(vetor < 0)
  return(list(positivos = pos, negativos = neg))
}

# Testa a função 'conta_pos_neg'
vetor <- c(-10, 7, 4, -8, -15, 3, -5, 7, 0, 1, -2)
resultado <- conta_pos_neg(vetor)
print(resultado)
## $positivos
## [1] 5
## 
## $negativos
## [1] 5

10.2 Capítulo 4

  • Exercício 1
library(tidyverse) # Carregue o pacote

mtcars %>% 
  filter(cyl == 6) %>% # Item a
  select(mpg, hp, wt) %>% # Item b
  arrange(desc(mpg)) # Item c
##                 mpg  hp    wt
## Hornet 4 Drive 21.4 110 3.215
## Mazda RX4      21.0 110 2.620
## Mazda RX4 Wag  21.0 110 2.875
## Ferrari Dino   19.7 175 2.770
## Merc 280       19.2 123 3.440
## Valiant        18.1 105 3.460
## Merc 280C      17.8 123 3.440
  • Exercício 2
library(stringr)

nomes <- c("Mariana Silva", "Mateus Souza", "Letícia Dias", "Guilherme Almeida", 
           "Yasmin Santos")

# Separando o nome e sobrenome
nomes_sobrenomes <- str_split(nomes, " ")

print(nomes_sobrenomes)
## [[1]]
## [1] "Mariana" "Silva"  
## 
## [[2]]
## [1] "Mateus" "Souza" 
## 
## [[3]]
## [1] "Letícia" "Dias"   
## 
## [[4]]
## [1] "Guilherme" "Almeida"  
## 
## [[5]]
## [1] "Yasmin" "Santos"
  • Exercício 3:
library(forcats)

# Criando o fator
cores <- factor(c("rosa", "vermelho", "azul", "amarelo", "rosa", "verde", "azul", "rosa"))

# (a) Reordenar os níveis para que a cor mais frequente venha primeiro
cores_reordenadas <- fct_infreq(cores)
levels(cores_reordenadas)
## [1] "rosa"     "azul"     "amarelo"  "verde"    "vermelho"
# (b) Agrupar todas as cores menos frequentes que "azul" em "Outro"
cores_agrupadas <- fct_lump(cores, n = 2, other_level = "Outro")
table(cores_agrupadas)
## cores_agrupadas
##  azul  rosa Outro 
##     2     3     3

10.3 Capítulo 5

  • Exercício 1:

Dada uma amostra de tamanho \(n\), \(x_1,\ldots,x_n\), queremos mostrar que

\[ \sum_{i=1}^n (x_i - \bar{x}) = 0 \]

Onde \(\bar{x}\) é a média amostral, dada por

\[ \bar{x} = \frac{1}{n}\sum_{i=1}^n x_i \]

Primeiro, vamos expandir a soma

\[ \sum_{i=1}^n (x_i - \bar{x}) = \sum_{i=1}^n x_i - \sum_{i=1}^n \bar{x} \]

Como \(\bar{x}\) é uma constante, ou seja, não depende de \(i\), podemos reescrever:

\[ \sum_{i=1}^n \bar{x} = n \bar{x} \]

Mas pela definição de média amostral:

\[ \bar{x} = \frac{1}{n}\sum_{i=1}^n x_i \Rightarrow n \bar{x} = \frac{1}{n}\sum_{i=1}^n nx_i= \sum_{i=1}^n x_i \]

Logo,

\[ \sum_{i=1}^n x_i - \sum_{i=1}^n x_i = 0 \text{ } \blacksquare \]

  • Exercício 2

  • Média:

\[ \bar{x} = \frac{1}{n}\sum_{i=1}^n x_i \]

\[ \bar{x} = \frac{(1 \times 3) + (2 \times 11) + (3 \times 16) + (4 \times 9) + (5 \times 6) + (6 \times 1) + (7 \times 2) + (8 \times 1) + (15 \times 1)}{50} \\ \]

\[ \bar{x} = \frac{182}{50} = 3,64 \]

  • Moda: 3

  • Mediana:

\[ \frac{x_{25} + x_{26}}{2} =\frac{3 + 3}{2} = 3 \] - Quartis \(q(0,25) = x_{13} = 2\) e \(q(0,75) = x_{38} = 4\)


10.4 Capítulo 6

  • Exercício 1:

Item (a)

  • Fisioterapia: variável qualitativa discreta.
  • Sequelas: variável qualitativa nominal.
  • Cirurgia: variável qualitativa ordinal.

Item (b)

tab_fisio <- read.csv("tab_fisio.csv")
  • Para Fisioterapia (em meses):
freq_fisio <- tab_fisio %>%
  count(`Fisioterapia (em meses)`) %>%
  mutate(
    FreqRel = round(n / sum(n), 2)
  ) %>%
  rename(Frequencia = n)

print(freq_fisio)
## # A tibble: 5 × 3
##   `Fisioterapia (em meses)` Frequencia FreqRel
##                       <dbl>      <int>   <dbl>
## 1                         4          2    0.13
## 2                         5          5    0.33
## 3                         6          3    0.2 
## 4                         7          3    0.2 
## 5                         8          2    0.13
ggplot(tab_fisio, aes(x = factor(`Fisioterapia (em meses)`))) +
  geom_bar(fill = "deeppink", color = "black") +
  labs(x = "Meses de Fisioterapia", y = "Frequência") +
  theme_minimal()

  • Para Sequêlas:
freq_sequelas <- tab_fisio %>%
  count(Sequelas) %>%
  mutate(
    FreqRel = round(n / sum(n), 2)
  ) %>%
  rename(Frequencia = n)

print(freq_sequelas)
## # A tibble: 2 × 3
##   Sequelas Frequencia FreqRel
##   <chr>         <int>   <dbl>
## 1 N                 8    0.53
## 2 S                 7    0.47
ggplot(tab_fisio, aes(x = Sequelas)) +
  geom_bar(fill = "deeppink", color = "black") +
  labs(x = "Expectativa de Sequelas", y = "Frequência") +
  theme_minimal()

  • Para Cirurgia:
freq_cirurgia <- tab_fisio %>%
  count(Cirurgia) %>%
  mutate(
    FreqRel = round(n / sum(n), 2)
  ) %>%
  rename(Frequencia = n)

print(freq_cirurgia)
## # A tibble: 3 × 3
##   Cirurgia Frequencia FreqRel
##   <chr>         <int>   <dbl>
## 1 A                 4    0.27
## 2 B                 4    0.27
## 3 M                 7    0.47
ggplot(tab_fisio, aes(x = Cirurgia)) +
  geom_bar(fill = "deeppink", color = "black") +
  labs(x = "Grau de Complexidade da Cirurgia", y = "Frequência") +
  theme_minimal()

Item (c)

n_sequelas <- tab_fisio %>%
  filter(Sequelas == "N")

ggplot(n_sequelas, aes(x = factor(`Fisioterapia (em meses)`))) +
  geom_bar(fill = "deeppink", color = "black") +
  labs(
    title = "Distribuição dos Meses de Fisioterapia (Pacientes sem Sequelas)",
    x = "Meses de Fisioterapia",
    y = "Frequência"
  ) +
  theme_minimal()

  • Exercício 2:
mtcars %>% filter(vs==0) %>% summarise(media = mean(hp), dp = sd(hp))
##      media      dp
## 1 189.7222 60.2815
mtcars %>% filter(vs==1) %>% summarise(media = mean(hp), dp = sd(hp))
##      media       dp
## 1 91.35714 24.42447
hist(
  mtcars$hp[mtcars$vs == 0],
  main = "Histograma de HP (vs == 0)",
  xlab = "HP",
  col = "pink",
  border = "white"
)

hist(
  mtcars$hp[mtcars$vs == 1],
  main = "Histograma de HP (vs == 1)",
  xlab = "HP",
  col = "pink",
  border = "white"
)

  • Exercício 3

  • Exercício 4

item (a)
{2, 3, 4, 7, 7}

item (b)

x FDE
2 0.2
3 0.4
4 0.6
7 1.0

item (c)

dados <- c(3, 7, 4, 2, 7)

fde <- ecdf(dados)

plot(fde, main = "Função de Distribuição Empírica (FDE)", 
     xlab = "x", ylab = "F_n(x)", verticals = TRUE, do.points = TRUE, pch = 19)


10.5 Capítulo 7

  • Exercício 1

Primeiro, interpretando o exercício:

Das 200 pessoas estudadas, 100 pacientes são doentes e 100 não são doentes. No teste, dos 75 resultados positivos, 25 são falsos-positivos, ou seja, temos 50 pacientes positivados e com HIV. Já dos 125 resultados negativos, 50 são falsos-negativos, ou seja, temos 75 pacientes negativados e sem HIV.

item (a)

library(dplyr)
library(gtsummary)

# Criar os dados com data.frame()
dados_hiv <- data.frame(
  Teste = c(rep("Positivo", 75), rep("Negativo", 125)),
  Doenca = c(
    rep("Doente", 50),        # verdadeiros positivos
    rep("Não Doente", 25),    # falsos positivos
    rep("Doente", 50),        # falsos negativos
    rep("Não Doente", 75)     # verdadeiros negativos 
))

dados_hiv %>%
  tbl_cross(
    row = Teste,
    col = Doenca,
    percent = "cell"
  ) %>%
  bold_labels()
Doenca
Total
Doente Não Doente
Teste


    Negativo 50 (25%) 75 (38%) 125 (63%)
    Positivo 50 (25%) 25 (13%) 75 (38%)
Total 100 (50%) 100 (50%) 200 (100%)

item (b)

Seja: vp: verdadeiro positivo (tem HIV e teste foi positivo) fp: falso positivo (não tem HIV, mas teste deu positivo) fn: falso negativo (tem HIV, mas teste deu negativo) vn: verdadeiro negativo (não tem HIV e teste deu negativo)

Sensibilidade: a probabilidade do teste dar positivo, dado que a pessoa está doente.

\[ S = \frac{\text{vp}}{\text{vp + fn}} = \frac{50}{50 + 50} = 0,5 \]

Especificidade: a probabilidade do teste dar negativo, dado que a pessoa não está doente.

\[ E = \frac{\text{vn}}{\text{vn + fp}} = \frac{75}{75+25} = 0,75 \]

Item (c)

Valor Preditivo Positivo: a probabilidade da pessoa estar doente, dado que o teste deu positivo.

\[ VPP = \frac{\text{vp}}{\text{vp + fp}} = \frac{50}{50+25} \approx 0,67 \]

Valor Preditivo Negativo: a probabilidade da ausência de doença quando o teste deu negativo.

\[ VPN = \frac{\text{vn}}{\text{vn + fn}} = \frac{75}{75+50} = 0,6 \]

item (d)

A acúracia é a probabilidade do teste fornecer resultados corretos, ou seja, ser positivo nos doentes e negativo nos não doentes.

\[ AC = \frac{\text{vp + vn}}{\text{total}} = \frac{50 +75}{200} = 0,625 \]


10.6 Capítulo 8

  • Exercício 1
library(ggplot2)

# Carregar o dataset mtcars (já está disponível no R)
data("mtcars")

ggplot(mtcars, aes(x = factor(cyl), y = mpg, fill = factor(cyl))) +
  geom_boxplot() +
  labs(
    title = "Eficiência de Combustível (MPG) por Número de Cilindros",
    x = "Número de Cilindros",
    y = "Milhas por Galão (MPG)",
    fill = "Cilindros" 
  ) +
  theme_minimal() 

O boxplot mostra uma associação negativa entre o número de cilindros e a eficiência de combustível (MPG).

Podemos observar que para carros com 4 cilindros (4-cyl) mediana de MPG mais alta e uma dispersão relativamente grande, indicando maior eficiência. Já em carros com 6 cilindros (6-cyl) a mediana de MPG é menor do que os de 4 cilindros e com menor dispersão. Por fim, carros com 8 cilindros (8-cyl) possuem a mediana de MPG mais baixa, sugerindo que, em média, são os menos eficientes em termos de combustível.

Ou seja, o gráfico sugere que, à medida que o número de cilindros aumenta, a eficiência de combustível tende a diminuir.

  • Exercício 2
# Carregar o pacote ggplot2
library(ggplot2)

# Carregar o dataset iris (já está disponível no R)
data("iris")

# Opcional, definir as cores para cada espécie, similar ao seu modelo
cores_especies <- c("setosa" = "hotpink",
                    "versicolor" = "darkturquoise",  
                    "virginica" = "orchid") 


ggplot(iris, aes(x = Sepal.Width, fill = Species)) +
  geom_histogram(alpha = 0.8, color = "black", binwidth = 0.2) + 
  scale_fill_manual(values = cores_especies) +
  facet_wrap(~Species, ncol = 1) + 
  labs(
    title = "Distribuição da Largura da Sépala por Espécie de Íris",
    x = "Largura da Sépala (cm)",
    y = "Frequência"
  ) +
  theme_bw() + 
  theme(legend.position = "none") 


10.7 Capítulo 9

  • Exercício 1

item (a)

Simular os lançamentos de um dado honesto:

set.seed(123)

n <- 10000

lancamentos <- sample(1:6, size = n, replace = TRUE)

item (b)

Calcular a média acumulada depois de cada lançamento:

somas <- cumsum(lancamentos)

# Divide cada soma pelo número de lançamentos até aquele ponto
medias <- somas / (1:n)

item (c)

plot(medias, type = "l",
     main = "Convergência da Média dos Lançamentos de um Dado",
     xlab = "Número de Lançamentos",
     ylab = "Média Acumulada",
     col = "black")

# Adicionar linha horizontal com o valor esperado (3,5)
abline(h = 3.5, col = "deeppink", lty = 2, lwd = 2)

# Legenda
legend("topright", legend = c("Média acumulada", "Valor esperado (3,5)"),
       col = c("black", "deeppink"), lty = c(1, 2), bty = "n")

  • Exercício 2

item (a)

set.seed(123)

n_simulacoes <- 10000

n_questoes <- 10

# A probabilidade de acerto ao chutar uma questão é 1 em 4 (0,25)
p_acerto <- 1 / 4

acertos <- rbinom(n_simulacoes, size = n_questoes, prob = p_acerto)

item (b)

sucessos <- sum(acertos >= 4)

prob_estimada <- sucessos / n_simulacoes

cat("Estimativa de P(acertar pelo menos 4 questões):", prob_estimada, "\n")
## Estimativa de P(acertar pelo menos 4 questões): 0.2183

item (c)

acertos <- rbinom(n_simulacoes, size = n_questoes, prob = p_acerto)
  • Exercício 3

item (a)

set.seed(123)

n_simulacoes <- 10000

dado1 <- sample(1:6, size = n_simulacoes, replace = TRUE)
dado2 <- sample(1:6, size = n_simulacoes, replace = TRUE)

item (b)

somas <- dado1 + dado2

# Verificar se soma > 8 OU soma == 5
condicao_satisfeita <- (somas > 8) | (somas == 5)

# Contar quantas vezes a condição foi satisfeita
numero_condicao_satisfeita <- sum(condicao_satisfeita)

cat("Número de vezes que a condição foi satisfeita:", numero_condicao_satisfeita, "\n")
## Número de vezes que a condição foi satisfeita: 3812

item (c)

# Estimar a Probabilidade
probabilidade_estimada <- numero_condicao_satisfeita / n_simulacoes

cat("Probabilidade estimada:", probabilidade_estimada, "\n")
## Probabilidade estimada: 0.3812