Análise de Probabilidade Condicional - Engenharia

Author

Marcelo Ribeiro

Introdução

Este relatório apresenta uma análise de probabilidade condicional aplicada a um conjunto de dados relacionado à engenharia de automação. O objetivo é calcular e interpretar probabilidades condicionais e verificar a independência entre variáveis.

Geração do Conjunto de Dados

Code
# Instalar pacotes necessários (se ainda não tiver instalado)
if (!require("dplyr")) install.packages("dplyr")
Loading required package: dplyr

Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
Code
if (!require("ggplot2")) install.packages("ggplot2")
Loading required package: ggplot2
Code
# Carregar pacotes
library(dplyr)
library(ggplot2)

# Gerar conjunto de dados fictício
set.seed(123)
dados <- data.frame(
  Tipo_Falha = sample(c("Elétrica", "Mecânica", "Software"), 20, replace = TRUE, prob = c(0.4, 0.35, 0.25)),
  Turno = sample(c("Manhã", "Tarde", "Noite"), 20, replace = TRUE, prob = c(0.3, 0.4, 0.3)),
  Sistema_Afetado = sample(c("Transporte", "Embalagem", "Controle_Temperatura"), 20, replace = TRUE, prob = c(0.5, 0.3, 0.2)),
  Gravidade = sample(c("Baixa", "Média", "Alta"), 20, replace = TRUE, prob = c(0.5, 0.3, 0.2))
)

# Visualizar uma amostra do conjunto de dados
print(dados)
   Tipo_Falha Turno      Sistema_Afetado Gravidade
1    Elétrica Manhã           Transporte     Média
2    Software Noite           Transporte     Baixa
3    Mecânica Noite           Transporte     Baixa
4    Software Manhã           Transporte     Baixa
5    Software Noite           Transporte      Alta
6    Elétrica Manhã           Transporte     Baixa
7    Mecânica Noite           Transporte      Alta
8    Software Noite           Transporte      Alta
9    Mecânica Tarde           Transporte     Média
10   Mecânica Tarde Controle_Temperatura     Baixa
11   Software Manhã           Transporte     Média
12   Mecânica Manhã           Transporte     Média
13   Mecânica Noite            Embalagem     Média
14   Mecânica Manhã           Transporte     Baixa
15   Elétrica Tarde            Embalagem     Baixa
16   Software Noite           Transporte     Baixa
17   Elétrica Manhã           Transporte     Baixa
18   Elétrica Tarde            Embalagem     Média
19   Elétrica Tarde Controle_Temperatura     Baixa
20   Software Tarde           Transporte     Baixa

Questões e Resoluções

1. Probabilidade condicional: Falha mecânica dado que ocorreu no turno da noite

Code
total_noite <- nrow(filter(dados, Turno == "Noite"))
falhas_mecanicas_noite <- nrow(filter(dados, Turno == "Noite", Tipo_Falha == "Mecânica"))

prob_cond_mecanica_noite <- falhas_mecanicas_noite / total_noite
cat("P(Falha Mecânica | Turno Noite) =", round(prob_cond_mecanica_noite, 2), "\n")
P(Falha Mecânica | Turno Noite) = 0.43 

2. Probabilidade condicional: Falha de software dado que a gravidade é alta

Code
total_alta_gravidade <- nrow(filter(dados, Gravidade == "Alta"))
falhas_software_alta <- nrow(filter(dados, Gravidade == "Alta", Tipo_Falha == "Software"))

prob_cond_software_alta <- falhas_software_alta / total_alta_gravidade
cat("P(Falha Software | Alta Gravidade) =", round(prob_cond_software_alta, 2), "\n")
P(Falha Software | Alta Gravidade) = 0.67 

3. Probabilidade conjunta: Falha elétrica e no sistema de transporte

Code
total_falha_transporte <- nrow(filter(dados, Tipo_Falha == "Elétrica", Sistema_Afetado == "Transporte"))
prob_conjunta <- total_falha_transporte / nrow(dados)
cat("P(Falha Elétrica e Sistema Transporte) =", round(prob_conjunta, 2), "\n")
P(Falha Elétrica e Sistema Transporte) = 0.15 

4. Probabilidade condicional: Baixa gravidade no sistema de controle de temperatura

Code
total_controle_temp <- nrow(filter(dados, Sistema_Afetado == "Controle_Temperatura"))
baixa_gravidade_temp <- nrow(filter(dados, Sistema_Afetado == "Controle_Temperatura", Gravidade == "Baixa"))

prob_cond_baixa_gravidade_temp <- baixa_gravidade_temp / total_controle_temp
cat("P(Baixa Gravidade | Controle Temperatura) =", round(prob_cond_baixa_gravidade_temp, 2), "\n")
P(Baixa Gravidade | Controle Temperatura) = 1 

5. Verificação de independência entre tipo de falha e turno

Code
prob_falha_eletrica <- nrow(filter(dados, Tipo_Falha == "Elétrica")) / nrow(dados)
prob_falha_eletrica_turno_manha <- nrow(filter(dados, Tipo_Falha == "Elétrica", Turno == "Manhã")) / nrow(filter(dados, Turno == "Manhã"))

cat("P(Falha Elétrica) =", round(prob_falha_eletrica, 2), "\n")
P(Falha Elétrica) = 0.3 
Code
cat("P(Falha Elétrica | Turno Manhã) =", round(prob_falha_eletrica_turno_manha, 2), "\n")
P(Falha Elétrica | Turno Manhã) = 0.43 
Code
if (abs(prob_falha_eletrica - prob_falha_eletrica_turno_manha) < 0.05) {
  cat("As variáveis Tipo de Falha e Turno são aproximadamente independentes.\n")
} else {
  cat("As variáveis Tipo de Falha e Turno não são independentes.\n")
}
As variáveis Tipo de Falha e Turno não são independentes.

Visualizações Gráficas

Gráfico 1: Distribuição das Falhas por Tipo

Code
ggplot(dados, aes(x = Tipo_Falha)) +
  geom_bar(fill = "steelblue") +
  labs(title = "Distribuição das Falhas por Tipo", x = "Tipo de Falha", y = "Frequência") +
  theme_minimal()

Gráfico 2: Distribuição das Falhas por Sistema Afetado

Code
ggplot(dados, aes(x = Sistema_Afetado)) +
  geom_bar(fill = "steelblue") +
  labs(title = "Distribuição das Falhas por Sistema Afetado", x = "Sistema Afetado", y = "Frequência") +
  theme_minimal()

Gráfico 3: Gravidade das Falhas por Sistema Afetado

Code
ggplot(dados, aes(x = Sistema_Afetado, fill = Gravidade)) +
  geom_bar(position = "dodge") +
  labs(title = "Gravidade das Falhas por Sistema Afetado", x = "Sistema Afetado", y = "Frequência") +
  theme_minimal()

Teorema dae Bayes

A partir daqui, aplicaremos o Teorema da Probabilidade Total e o Teorema de Bayes no contexto de um conjunto de dados anterior.

Representação Gráfica: Diagrama de Venn

O diagrama de Venn a seguir representa a partição do espaço amostral considerando as variáveis Tipo de Falha, Turno e Sistema Afetado. Cada conjunto representa uma categoria distinta das variáveis, evidenciando as interseções entre elas.

Code
# Instalar e carregar o pacote necessário
if (!require("VennDiagram")) install.packages("VennDiagram")
Loading required package: VennDiagram
Loading required package: grid
Loading required package: futile.logger
Code
library(VennDiagram)

# Preparação dos dados para o diagrama
set.seed(123)
venn_data <- list(
  Tipo_Falha = unique(dados$Tipo_Falha),
  Turno = unique(dados$Turno),
  Sistema_Afetado = unique(dados$Sistema_Afetado)
)

# Criar o diagrama de Venn
venn.plot <- venn.diagram(
  x = venn_data,
  category.names = c("Tipo de Falha", "Turno", "Sistema Afetado"),
  filename = NULL,
  output = TRUE,
  fill = c("red", "green", "blue"),
  alpha = 0.5,
  cex = 1.5,
  cat.cex = 1.2,
  cat.col = c("red", "green", "blue"),
  main = "Diagrama de Venn: Partição do Espaço Amostral"
)

# Exibir o diagrama
grid::grid.draw(venn.plot)

O diagrama de Venn mostra que algumas interseções entre as variáveis Tipo de Falha, Turno e Sistema Afetado são relevantes para a análise, enquanto outras são mais raras ou inexistentes, destacando a distribuição das observações entre diferentes categorias.

Questões e Resoluções

Nível Fácil: Partição do Espaço Amostral

Questão 1: Qual a probabilidade de ocorrer uma falha no sistema de transporte?

Resolução:

Code
total_falhas <- nrow(dados)
falhas_transporte <- nrow(filter(dados, Sistema_Afetado == "Transporte"))
prob_transporte <- falhas_transporte / total_falhas
cat("P(Falha no Sistema de Transporte) =", round(prob_transporte, 2), "\n")
P(Falha no Sistema de Transporte) = 0.75 

Questão 2: Qual a probabilidade de uma falha ocorrer durante o turno da manhã?
Resolução:

Code
falhas_manha <- nrow(filter(dados, Turno == "Manhã"))
prob_manha <- falhas_manha / total_falhas
cat("P(Falha no Turno da Manhã) =", round(prob_manha, 2), "\n")
P(Falha no Turno da Manhã) = 0.35 

Nível Médio: Teorema da Probabilidade Total

Questão 1: Qual a probabilidade de a gravidade ser alta, considerando os diferentes tipos de falha como partições do espaço amostral?

Resolução:

Code
p_alta_dado_eletrica <- nrow(filter(dados, Gravidade == "Alta", Tipo_Falha == "Elétrica")) / nrow(filter(dados, Tipo_Falha == "Elétrica"))
p_alta_dado_mecanica <- nrow(filter(dados, Gravidade == "Alta", Tipo_Falha == "Mecânica")) / nrow(filter(dados, Tipo_Falha == "Mecânica"))
p_alta_dado_software <- nrow(filter(dados, Gravidade == "Alta", Tipo_Falha == "Software")) / nrow(filter(dados, Tipo_Falha == "Software"))

prob_total_alta <- (p_alta_dado_eletrica * 0.30) + (p_alta_dado_mecanica * 0.35) + (p_alta_dado_software * 0.35)
cat("P(Gravidade Alta) =", round(prob_total_alta, 2), "\n")
P(Gravidade Alta) = 0.15 

Questão 2: Qual a probabilidade de uma falha ocorrer no sistema de embalagem, considerando que o turno pode ser manhã, tarde ou noite? Resolução:

Code
p_emb_manha <- nrow(filter(dados, Sistema_Afetado == "Embalagem", Turno == "Manhã")) / nrow(filter(dados, Turno == "Manhã"))
p_emb_tarde <- nrow(filter(dados, Sistema_Afetado == "Embalagem", Turno == "Tarde")) / nrow(filter(dados, Turno == "Tarde"))
p_emb_noite <- nrow(filter(dados, Sistema_Afetado == "Embalagem", Turno == "Noite")) / nrow(filter(dados, Turno == "Noite"))

prob_total_emb <- (p_emb_manha * 0.3) + (p_emb_tarde * 0.4) + (p_emb_noite * 0.3)
cat("P(Falha no Sistema de Embalagem) =", round(prob_total_emb, 2), "\n")
P(Falha no Sistema de Embalagem) = 0.18 

Nível Difícil: Teorema de Bayes

Questão: Se sabemos que a gravidade foi alta, qual a probabilidade de a falha ser do tipo software?

Resolução:

Code
p_software <- 0.35
p_alta <- prob_total_alta
p_alta_dado_software <- nrow(filter(dados, Gravidade == "Alta", Tipo_Falha == "Software")) / nrow(filter(dados, Tipo_Falha == "Software"))

prob_bayes <- (p_alta_dado_software * p_software) / p_alta
cat("P(Tipo de Falha = Software | Gravidade = Alta) =", round(prob_bayes, 2), "\n")
P(Tipo de Falha = Software | Gravidade = Alta) = 0.67 

Questão 2: Sabendo que a falha ocorreu no turno da noite, qual a probabilidade de a gravidade ser baixa? Resolução:

Code
p_noite <- nrow(filter(dados, Turno == "Noite")) / total_falhas
p_baixa_noite <- nrow(filter(dados, Gravidade == "Baixa", Turno == "Noite")) / nrow(filter(dados, Turno == "Noite"))

prob_baixa_dado_noite <- (p_baixa_noite * p_noite) / (nrow(filter(dados, Gravidade == "Baixa")) / total_falhas)
cat("P(Gravidade Baixa | Turno = Noite) =", round(prob_baixa_dado_noite, 2), "\n")
P(Gravidade Baixa | Turno = Noite) = 0.27 

Conclusão

Este relatório demonstrou como calcular probabilidades condicionais no contexto da engenharia, exploramos também a partição do espaço amostral, o Teorema da Probabilidade Total e o Teorema de Bayes aplicados nesses dados.As visualizações gráficas ajudaram a entender melhor a distribuição e a relação entre os diferentes tipos de falha, turnos e sistemas afetados.