R: Distribuições de Probabilidade em R

Última atualização: 2026-08-26

Na aula anterior, aprendemos sobre “análise de dados” — estatística descritiva. Nesta aula, aprenderemos sobre “análise da aleatoriedade” — distribuições de probabilidade. Toda inferência estatística no R (testes t, regressão, teste de hipóteses) se baseia em distribuições de probabilidade. Nesta aula, abordaremos as d/p/q/r quatro principais famílias de funções do R + quatro distribuições comumente utilizadas.

Ao concluir esta aula, você será capaz de usar o R para simular qualquer fenômeno aleatório, realizar cálculos de probabilidade e estabelecer as bases para futuros testes de hipóteses.

1. O que você vai aprender



2. Uma história sobre a inspeção de qualidade

(1) Desafio: Qual é a taxa de aprovação normal de um produto?

Alice é uma inspetora de controle de qualidade que descobriu que o peso médio dos produtos em uma determinada linha de produção é de 100 g, com um desvio padrão de 2 g. Seu gerente perguntou: “Qual é a proporção de produtos com peso inferior a 95 g?

Consultar a tabela de distribuição normal em um livro? Usar uma fórmula do Excel? Ou apenas uma linha de código em R—

(2) Solução utilizando R

R
# Weight < 95g the probability
pnorm(95, mean = 100, sd = 2)
# [1] 0.00621  ← 0.6%

# Extract 1000 Product Simulation Testing
set.seed(42)
samples <- rnorm(1000, mean = 100, sd = 2)
mean(samples < 95)  # 0.6%  ← Verification

2 linhas de código → Resposta + Verificação por simulação.



3. As quatro principais famílias de funções de distribuição de probabilidade no R

(1) Comparação das quatro principais funções

Prefixo de função Significado Finalidade
d densidade função de densidade de probabilidade (FDP)
p probabilidade Função de Distribuição Cumulativa (CDF)
q quantil função inversa (determinar um quantil a partir de uma probabilidade)
r aleatório Gerar um número aleatório

Todas as distribuições possuem estas quatro funções: dnorm pnorm qnorm rnorm (normal); dbinom pbinom... (binomial), e assim por diante.

(2) Frases mnemônicas

100%
graph LR
    A[d Density] -->|Find the probability| B[p Cumulative]
    B -->|Inverse Quantile| C[q quantile]
    A -->|Simulation| D[r Random]
    
    style A fill:#cce5ff
    style B fill:#d4edda
    style C fill:#f8d7da
    style D fill:#fff3cd

(3) Uma explicação detalhada das quatro funções principais

R
# Take the normal distribution as an example (Mean 0, Standard Deviation 1)
dnorm(0)             # 0.3989  ← Probability Density
pnorm(0)             # 0.5     ← Cumulative Probability
qnorm(0.975)         # 1.96    ← Given that 97.5% Find the percentile
rnorm(5)             # 5 A random number

# Custom Parameters (Mean 100, Standard Deviation 2)
dnorm(95, 100, 2)    # 95 Density at that point
pnorm(95, 100, 2)    # 95 Left-sided cumulative probability
qnorm(0.975, 100, 2) # Given that 97.5% Find the percentile
rnorm(5, 100, 2)     # 5 Per capita average 100 Random Number


4. Distribuição normal (a mais utilizada)

(1) O que é uma distribuição normal?

100%
graph TB
    A[Normal Distribution N mu sigma] --> B[Bell-shaped symmetry]
    A --> C[68-95-99.7 Principles]
    A --> D[Central Limit Theorem]
    A --> E[Widely found in nature/Social Phenomena]
    
    style A fill:#fff3cd
    style B fill:#cce5ff
    style C fill:#d4edda
    style D fill:#f8d7da
    style E fill:#e1d4ff

Distribuição Normal = Em forma de sino, simétrica e a distribuição mais comum encontrada na natureza.

(2) A regra 68-95-99,7

TEXT 📖 Somente leitura
μ ± 1σ → 68.27% Data
μ ± 2σ → 95.45% Data
μ ± 3σ → 99.73% Data

(3) As 4 funções normais padrão

R
# Standard Normal N(0, 1)
dnorm(0)              # 0.3989
pnorm(1.96)           # 0.975  ← 1.96 On the left 97.5%
qnorm(0.975)          # 1.96   ← 97.5% quantile = 1.96
rnorm(5)              # 5 A standard normal random number

# General Normal N(μ, σ)
mu <- 100
sigma <- 2

# P(X < 95) = ?
pnorm(95, mean = mu, sd = sigma)  # 0.00621

# P(95 < X < 105) = ?
pnorm(105, mu, sigma) - pnorm(95, mu, sigma)  # 0.9876

# 99% Data Range
qnorm(0.005, mu, sigma)  # The Lower World
qnorm(0.995, mu, sigma)  # Upper Realm

(4) Teste de normalidade

R
# 1. Visual: QQ plot
qqnorm(x)
qqline(x, col = "red")

# 2. Statistical Tests
shapiro.test(x)       # Shapiro-Wilk (n < 5000)
# p < 0.05 Indicates non-normal distribution


5. Distribuição binomial (sucesso/fracasso)

(1) O que é uma distribuição binomial?

A distribuição do número de sucessos em n ensaios de Bernoulli independentes. A probabilidade de sucesso em cada ensaio é p, e a probabilidade de fracasso é 1-p.

TEXT 📖 Somente leitura
Example: Toss 10 coins, number of times facing up X ~ Binomial(10, 0.5)

(2) As quatro principais funções binárias

R
# Toss 10 coins, number of heads
dbinom(5, size = 10, prob = 0.5)    # 0.246  <- P(5 heads)
pbinom(5, size = 10, prob = 0.5)    # 0.623  <- P(<= 5 heads)
qbinom(0.5, size = 10, prob = 0.5)   # 5      ← Median
rbinom(1000, size = 10, prob = 0.5) # 1000 sets of 10 trials, number of successes each

# Example: 100 shots, hit rate 80%, probability of at least 90 hits
1 - pbinom(89, size = 100, prob = 0.8)
# [1] 0.0227  ← 2.3%

(3) Visualização binomial

R
n <- 10
p <- 0.5
x <- 0:n

# Probability Mass Function
plot(x, dbinom(x, n, p), type = "h",
     main = paste0("Binomial(", n, ",", p, ")"),
     xlab = "Number of Successes", ylab = "Probability",
     col = "blue", lwd = 2)
points(x, dbinom(x, n, p), pch = 19, col = "red")


6. Distribuição de Poisson (Número de Eventos)

(1) O que é a distribuição de Poisson?

A distribuição do número de eventos que ocorrem dentro de um intervalo de tempo ou espaço determinado. Comumente utilizada para:

Parâmetro λ = número médio de eventos por unidade de tempo.

(2) As quatro funções de Poisson

R
# Example: Average 10 customers per hour
dpois(8, lambda = 10)    # P(X = 8) = 0.1126
ppois(8, lambda = 10)    # P(X ≤ 8) = 0.3328
qpois(0.5, lambda = 10)  # Median = 10
rpois(100, lambda = 10)  # 100 Number of customers visiting the store per hour

# Example: 5 complaints per day, probability of more than 10
1 - ppois(10, lambda = 5)  # 0.0137  ← 1.4%

(3) A relação entre as distribuições de Poisson e normal

Quando λ é grande, a distribuição de Poisson se aproxima da distribuição normal N(λ, √λ):

R
# λ = 100
lambda <- 100
# Poisson P(90 ≤ X ≤ 110)
ppois(110, lambda) - ppois(89, lambda)  # ≈ 0.728

# Equivalent Normal Approximation
pnorm(110, 100, 10) - pnorm(90, 100, 10)  # ≈ 0.683
# Approximate but not exactly equal


7. Distribuição t / Distribuição F / Distribuição qui-quadrado

(1) Referência rápida às três principais distribuições amostrais

Distribuição Finalidade Função R
Distribuição t Inferência da média em amostras pequenas dt/pt/qt/rt
Distribuição F Análise de variância (ANOVA) df/pf/qf/rf
Distribuição qui-quadrado Variáveis categóricas, adequação do modelo dchisq/pchisq/qchisq/rchisq

(2) Uma explicação detalhada da distribuição t

R
# Degrees of freedom df = 10
qt(0.975, df = 10)   # 2.228  <- t threshold (larger than the normal distribution's 1.96)
pt(2.228, df = 10)    # 0.975

# As df -> inf, t distribution -> standard normal
qt(0.975, df = 1000)  # 1.962  ← Approach 1.96
qt(0.975, df = 10000) # 1.960
💡 Dica: Quando n > 30, a distribuição t é quase idêntica à distribuição normal; portanto, você pode usar a aproximação normal. Quando n < 30, use estritamente a distribuição t.

(3) Distribuição do qui-quadrado

R
# Degrees of freedom df = 5
dchisq(3, df = 5)   # Density
pchisq(11.07, df = 5)  # 0.95  <- Chi-square critical value (95%)
qchisq(0.95, df = 5)   # 11.07

# Example: Observed 8 events, expected 5, p-value
1 - pchisq(8, df = 5)  # 0.846

(4) Distribuição F

R
# Degrees of freedom df1 = 5, df2 = 10
qf(0.95, df1 = 5, df2 = 10)  # 3.326  ← F Threshold
pf(3.326, df1 = 5, df2 = 10) # 0.95


8. set.seed: Semente aleatória

(1) Por que as sementes são necessárias?

Os “números aleatórios” do R são, na verdade, pseudoaleatórios — quando se define uma semente, os resultados são reproduzíveis:

R
# No seeded players
rnorm(3)  # The results are different every time

# Let $s$ be a seed
set.seed(42)
rnorm(3)  # The First Time
set.seed(42)
rnorm(3)  # Exactly the same
💡 Dica: Não se esqueça de incluir set.seed() em sua pesquisa/relatório — para garantir que os resultados sejam reproduzíveis.

(2) Aplicações práticas

R
# 1. Simulate Preset Seeds
set.seed(42)
sim_data <- rnorm(1000, 100, 15)

# 2. Set a seed before training the model
set.seed(123)
model <- lm(y ~ x, data)

# 3. Set a seed before cross-validation
set.seed(2024)
folds <- createFolds(data$y, k = 5)


9. Amostragem e simulação

(1) sample() Amostragem

R
# 1. Simple Random Sampling
sample(1:100, 10)            # Draw 10 from 1-100 (no duplicates)
sample(1:100, 10, replace = TRUE)  # Sampling with replacement

# 2. Data Frame Sampling
sample_n(df, 10)              # Draw 10 rows (old)
slice_sample(df, n = 10)      # Draw 10 rows (dplyr 1.0+)

# 3. Stratified Sampling
df |>
  group_by(class) |>
  slice_sample(n = 5)         # Draw one from each group 5 row

# 4. Set Up Probability Sampling
sample(c("A", "B", "C"), 100, replace = TRUE,
       prob = c(0.5, 0.3, 0.2))

(2) Simulação de Monte Carlo

R
# Example: Estimate pi
set.seed(42)
n_sim <- 100000
x <- runif(n_sim, -1, 1)
y <- runif(n_sim, -1, 1)
inside <- sqrt(x^2 + y^2) <= 1
pi_est <- 4 * mean(inside)
# [1] 3.14116  ← Approach π = 3.14159


10. Exemplo completo: Simulação de inspeção de qualidade

A seguir, apresentamos um exemplo de um fluxo de trabalho completo que reúne todos os conceitos de distribuição de probabilidade abordados nesta aula.

▶ Exemplo: Simulação de inspeção de qualidade em uma linha de produção

R 📖 Somente leitura
# ============================================
# Production Line Quality Inspection Simulation
# Features: Comprehensive Application of 4 Distributions
# ============================================

set.seed(42)

# 1. Product Weight Inspection (Normal Distribution)
# Specifications: Mean 100g, Standard Deviation 2g
n_products <- 10000
weights <- rnorm(n_products, mean = 100, sd = 2)

cat("=== Weight Inspection (Normal Distribution N(100, 2)) ===\n")
cat("Sample size:", length(weights), "\n")
cat("Actual Mean:", round(mean(weights), 4), "\n")
cat("Actual standard deviation:", round(sd(weights), 4), "\n")
cat("Theory < 95g Ratio:", round(pnorm(95, 100, 2), 4), "\n")
cat("Actual < 95g Ratio:", round(mean(weights < 95), 4), "\n")
cat("Theory < 105g Ratio:", round(pnorm(105, 100, 2), 4), "\n")
cat("Actual < 105g Ratio:", round(mean(weights < 105), 4), "\n\n")

# 2. Inspection of Nonconforming Products (Binomial Distribution)
# Sample 100 items, probability of at least 95 passing
n_sample <- 100
p_pass <- 0.95
prob_at_least_95 <- 1 - pbinom(94, n_sample, p_pass)
cat("=== Random Sampling Inspection (Binomial(100, 0.95)) ===\n")
cat("P(95 Qualified) =", round(prob_at_least_95, 4), "\n\n")

# 3. Customers Visit the Store (Poisson Distribution)
# Average 10 customers per hour
n_hours <- 1000
customers <- rpois(n_hours, lambda = 10)
cat("=== Customers Visit the Store (Poisson(10)) ===\n")
cat("Theoretical mean: 10\n")
cat("Actual Mean:", round(mean(customers), 2), "\n")
cat("Theory P(>15):", round(1 - ppois(15, 10), 4), "\n")
cat("Actual P(>15):", round(mean(customers > 15), 4), "\n\n")

# 4. Sample Survey (t Distribution)
# Sample 30 products, estimate mean
sample_size <- 30
sample_data <- sample(weights, sample_size)
cat("=== Sample Survey (t Distribution) ===\n")
cat("Sample size:", sample_size, "\n")
cat("Sample mean:", round(mean(sample_data), 2), "\n")
cat("95% Confidence Interval: [\n")
ci <- t.test(sample_data)$conf.int
cat("  ", round(ci[1], 2), ",", round(ci[2], 2), "]\n\n")

# 5. Hypothesis Testing (use qnorm)
# I want to know if the weight deviates significantly 100g
z_score <- (mean(sample_data) - 100) / (sd(sample_data) / sqrt(sample_size))
p_value <- 2 * (1 - pnorm(abs(z_score)))
cat("=== Hypothesis Testing (Z Test) ===\n")
cat("Z score:", round(z_score, 4), "\n")
cat("P value:", round(p_value, 4), "\n")
cat("Conclusion:", ifelse(p_value < 0.05, "Significant deviation from 100g", "No significant difference"), "\n\n")

# 6. Outlier Detection (The Concept of the Chi-Square Distribution)
# Use 3-sigma principle
outliers <- weights[abs(weights - 100) > 3 * 2]
cat("=== Outlier Detection (3-sigma Principle) ===\n")
cat("Theoretical Anomaly Ratio:", round(2 * pnorm(-3), 6), "(i.e. 0.27%)\n")
cat("Actual Number of Exceptions:", length(outliers), "/", n_products, "\n")
cat("Actual Exception Rate:", round(length(outliers) / n_products, 6), "\n")

# 7. Sampling Design (Stratified Sampling)
cat("\n=== Stratified Sampling ===\n")
# Simulate 3 production lines (Different Pass Rates)
production <- tibble::tibble(
  line = rep(c("Line A", "Line B", "Line C"), each = 1000),
  weight = c(rnorm(1000, 100, 2),
             rnorm(1000, 101, 2),
             rnorm(1000, 99, 2))
)

# Draw 50 from each line
library(dplyr)
sampled <- production |>
  group_by(line) |>
  slice_sample(n = 50)

cat("Draw 50 per line, Estimated Overall Mean:\n")
cat("Overall Sample Mean:", round(mean(sampled$weight), 2), "\n")
cat("Total True Mean:", round(mean(production$weight), 2), "\n")
56 linhas de lógica (limite de 40, somente leitura)

Resultado esperado (trecho):

TEXT 📖 Somente leitura
=== Weight Inspection (Normal Distribution N(100, 2)) ===
Sample size: 10000
Actual Mean: 99.9898
Actual standard deviation: 1.9973
Theory < 95g Ratio: 0.0062
Actual < 95g Ratio: 0.0063

=== Random Sampling Inspection (Binomial(100, 0.95)) ===
P(95 Qualified) = 0.5647

❓ Perguntas Frequentes

P: Como distinguir entre d, p, q e r? R: d significa densidade, p significa cumulativa, q significa quantil e r significa aleatória. Use p quando x for conhecido e você quiser calcular a probabilidade; use q quando a probabilidade for conhecida e você quiser calcular x; use r para simulação.

P: Quando se deve usar a distribuição t em vez da distribuição normal? R: Use a distribuição normal (Teorema do Limite Central) quando n ≥ 30 e a distribuição t (amostra pequena) quando n < 30. Quando a variância for desconhecida, dê preferência à distribuição t.**

P: Qual é a diferença entre a distribuição de Poisson e a distribuição binomial? R: A distribuição binomial conta o número de sucessos em n tentativas (onde n é fixo), enquanto a distribuição de Poisson conta o número de eventos por unidade de tempo (onde n não é fixo). A distribuição de Poisson é uma aproximação da distribuição binomial para casos em que n é grande e p é pequeno.

P: Como escolho uma semente aleatória? R: Qualquer número inteiro serve — set.seed(42) é um “número mágico” comum. O importante é que o código seja reproduzível após a definição da semente.**

P: Como se interpreta um gráfico da norma QQ? R: Os pontos próximos à linha vermelha indicam uma distribuição normal. Uma curva em forma de S indica uma distribuição assimétrica, e uma curva em forma de U indica uma distribuição com caudas pesadas ou caudas leves.

P: Para que serve a distribuição qui-quadrado? R: ① Teste de adequação ② Teste de independência (tabela de contingência) ③ Intervalos de confiança para variâncias estimadas. Não entraremos em detalhes nesta aula, mas ela será utilizada na próxima aula sobre teste de hipóteses.


📖 Resumo


📝 Exercícios

  1. Problema básico: Use pnorm para calcular o seguinte para uma distribuição N(100, 2): ① P(X < 95), ② P(X > 105), ③ P(95 < X < 105) e ④ o intervalo de confiança de 99%. Verifique os resultados.

  2. Problema básico: Use rbinom(1000, 10, 0.5) para simular 1.000 ensaios de “lançar uma moeda 10 vezes” e calcule a média, a variância e o desvio padrão da amostra. Compare esses valores com os valores teóricos (5, 2,5, 1,58).

  3. Problema básico: Use rpois(1000, 5) para simular 1.000 instâncias do “número de chamadas recebidas em 5 minutos”, trace um histograma e a função de densidade de probabilidade (PDF) teórica de Poisson e compare as distribuições.

  4. Problema avançado: Simule 10.000 pesos de produtos (distribuídos normalmente N(100, 2)), utilize a regra dos 3σ para identificar o número de valores atípicos e compare-o com o valor teórico de 0,27% para verificar o Teorema do Limite Central (TLC).

  5. Desafio: Estime π usando a simulação de Monte Carlo: ① Lance um dado 10.000 vezes; ② Calcule a proporção de lançamentos que caem dentro de um quarto de círculo; ③ Estime 4 × essa proporção = π; ④ Varie o número de lançamentos (100, 1.000, 10.000, 100.000) para observar as mudanças na precisão. Faça capturas de tela dos resultados para os quatro níveis de precisão.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%