Controle Estatístico de Processos - Modelagem e Inferência

Baseado nos Capítulos 3 e 4 - Montgomery, D. C. (2017)

Prof. Marcelo R.P. Ferreira

DE-UFPB - Bacharelado em Estatística e Ciência de Dados

maio, 2026

Controle Estatístico de Processos

“Sem dados, você é apenas mais uma pessoa com uma opinião.”

— W. Edwards Deming

Mapa dos Capítulos 3 e 4

Capítulo 3 · Modelagem Descritiva · Distribuições · Q-Q Plot Capítulo 4 · Inferência Testes Z, t, F, χ² · ANOVA · Regressão Estatística Descritiva Distribuições Discretas e Contínuas Testes de Hipótese ANOVA e Regressão CEP · DMAMC Gráficos de Controle · Capacidade

Visão Geral do Capítulo 3

  • Aborda a “Modelagem da Qualidade do Processo”
  • Apresenta métodos descritivos para quantificar e visualizar a variação em dados amostrais
  • Introduz as distribuições de probabilidade discretas e contínuas essenciais
  • Explica como verificar a adequação de modelos com gráficos de probabilidade
  • Fornece aproximações estatísticas úteis para simplificar cálculos de controle
Ramo-e-Folhas
Preserva os dados originais
Histograma
Forma da distribuição
Boxplot
Resumo dos cinco números

O Diagrama de Ramo-e-Folhas

  • Divide cada valor em “ramo” (dígitos principais) e “folha” (dígito final)
  • Mantém a precisão dos dados originais — diferente do histograma
  • Facilita a observação de assimetrias e valores extremos
  • Excelente para amostras pequenas a médias (\(n < 100\))

Exemplo: Um servidor da UFPB registra tempos de resposta (ms). Visualizar a distribuição sem perder a informação individual de cada registro.

# Dados simulados de tempo de resposta (ms)
tempos <- c(11, 11, 12, 13, 13, 14, 15, 15, 18, 20, 21, 23, 23, 24, 27, 31, 33, 35)
stem(tempos)

  The decimal point is 1 digit(s) to the right of the |

  1 | 112334
  1 | 558
  2 | 01334
  2 | 7
  3 | 13
  3 | 5

Ramo-e-Folhas — Lendo o Diagrama

Leitura: Cada linha representa um ramo. As folhas são os últimos dígitos. O símbolo | separa ramo de folhas.

  • Linhas 1 | 112334 e 1 | 558 → valores: 11, 11, 12, 13, 13, 14, 15, 15, 18
  • Linhas 2 | 01334 e 2 | 7 → valores: 20, 21, 23, 23, 24, 27
  • Linhas 3 | 13 e 3 | 5 → valores: 31, 33, 35

O diagrama revela imediatamente:

  • Concentração dos dados em torno dos 11–18 ms
  • Assimetria leve à direita (cauda mais longa em 31–35 ms)
  • Nenhum outlier extremo visível

Ramo-e-Folhas — Lendo o Diagrama

Para amostras maiores, usa-se o parâmetro scale para aumentar ou reduzir o número de linhas.

# scale controla o número de ramos — útil para n maior
stem(tempos, scale = .5)

  The decimal point is 1 digit(s) to the right of the |

  1 | 112334558
  2 | 013347
  3 | 135

O Histograma — Conceito e Regra de Sturges

  • Gráfico de barras que agrupa dados contínuos em intervalos de classe
  • Revela tendência central, dispersão e forma geral (sino, bimodal, assimétrica)

Regra de Sturges:

\[k \approx \sqrt{n} \qquad \text{ou} \qquad k \approx 1 + 3{,}322\,\log_{10}(n)\]

Variável Contínua Frequência

O Histograma em R

Exemplo: Espessura de 100 peças fabricadas em linha contínua (\(\mu = 10\) mm, \(\sigma = 0{,}5\) mm).

library(ggplot2)
set.seed(1)
dados <- data.frame(espessura = rnorm(100, mean = 10, sd = 0.5))
ggplot(dados, aes(x = espessura)) +
  geom_histogram(bins = 10, fill = "steelblue", color = "black") +
  labs(title = "Histograma de Espessura de Peças",
       x = "Espessura (mm)", y = "Frequência") +
  theme_minimal(base_size = 14)

Resumo Numérico: Tendência Central e Dispersão

  • Média amostral (\(\bar{x}\)): centro de gravidade — suscetível a outliers
  • Mediana (\(\tilde{x}\)): valor central após ordenação — robusta a outliers
  • Variância amostral (\(s^2\)): média dos desvios quadráticos
  • Amplitude (\(R\)): diferença entre máximo e mínimo — sensível a outliers

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

Exemplo: Calcular métricas descritivas para 5 amostras de diâmetros de peças.

diametros <- c(10.1, 9.9, 10.2, 10.0, 9.8)
round(c(Media = mean(diametros), Mediana = median(diametros),
        Variancia = var(diametros), Desvio = sd(diametros),
        Amplitude = diff(range(diametros))), 4)
    Media   Mediana Variancia    Desvio Amplitude 
  10.0000   10.0000    0.0250    0.1581    0.4000 

Medidas de Posição: Percentis e IIQ

  • Percentil \(p\): valor abaixo do qual cai \(p\%\) das observações. Q1 = P25, Q2 = P50 (mediana), Q3 = P75
  • Intervalo interquartil: \(AIQ = Q3 - Q1\) — mede a dispersão central de forma robusta a outliers
library(ggplot2)
set.seed(12)
dados_p <- rnorm(200, 50, 8)
q1 <- quantile(dados_p, 0.25)
q3 <- quantile(dados_p, 0.75)
df_p <- data.frame(x=dados_p)
ggplot(df_p, aes(x)) +
  geom_histogram(bins=25, fill="steelblue", color="black", alpha=.8) +
  geom_vline(xintercept=c(q1, median(dados_p), q3),
             color=c("#f7c87e","#f07050","#7ecff7"),
             linetype="dashed", linewidth=1.2) +
  annotate("text",x=q1-1,y=18,label="Q1",color="#f7c87e",size=4,hjust=1) +
  annotate("text",x=median(dados_p)+1,y=18,label="Mediana",color="#f07050",size=4) +
  annotate("text",x=q3+1,y=18,label="Q3",color="#7ecff7",size=4) +
  labs(title="Percentis no Histograma",x="Medida",y="Frequência") +
  theme_minimal(base_size=14)

Medidas de Posição: Percentis e IIQ

Assimetria, Curtose e o Papel da Forma

Além de centro e dispersão, a forma da distribuição é essencial para o CEP:

  • Assimetria (\(\gamma_1\)): mede o desvio da simetria. \(\gamma_1 = 0\) indica distribuição simétrica.

\[\gamma_1 = \frac{\frac{1}{n}\sum(x_i-\bar{x})^3}{s^3}\]

  • Curtose (\(\gamma_2\)): mede a “pesanidade” das caudas em relação à Normal (\(\gamma_2 = 3\)).

\[\gamma_2 = \frac{\frac{1}{n}\sum(x_i-\bar{x})^4}{s^4}\]

Assimetria, Curtose e o Papel da Forma

library(ggplot2)
set.seed(3)
df <- data.frame(
  x = c(rnorm(200,10,1), rexp(200,1)+8),
  tipo = rep(c("Simetrica","Assimetrica Direita"), each=200)
)
ggplot(df, aes(x=x, fill=tipo)) +
  geom_histogram(bins=25, alpha=.7, position="identity", color="black") +
  scale_fill_manual(values=c("#7ecff7","#f7c87e")) +
  labs(title="Simetria vs Assimetria em Processos",
       x="Medida", y="Frequência", fill="") +
  theme_minimal(base_size=13)

O Diagrama de Caixa (Boxplot) — Conceito

  • Representa o resumo dos cinco números: Mín, Q1, Mediana, Q3, Máx
  • Caixa central: 50% dos dados (\(AIQ = Q3 - Q1\))
  • Hastes: até \(1{,}5 \times AIQ\) · Pontos além: outliers
Valor G1 (baixa var.) outlier G2 (alta var.) G3 (assimétrico)

O Diagrama de Caixa (Boxplot) — Exemplo em R

Exemplo: Comparar o volume de envase de M1 (estável) e M2 (maior variabilidade).

library(ggplot2)
set.seed(7)
dados <- data.frame(
  Maquina = rep(c("M1", "M2"), each = 50),
  Volume  = c(rnorm(50, 500, 5), rnorm(50, 510, 15))
)
ggplot(dados, aes(x = Maquina, y = Volume, fill = Maquina)) +
  geom_boxplot(alpha = .75) +
  scale_fill_manual(values = c("#7ecff7", "#f7c87e")) +
  labs(title = "Boxplot Comparativo: Volume de Envase", y = "Volume (mL)") +
  theme_minimal(base_size = 14) + theme(legend.position = "none")

Exercício 1 — Estatística Descritiva

Exercício 1: Um inspetor coletou medições de resistência elétrica (Ω):

47.2, 48.5, 46.9, 50.1, 47.8, 49.3, 48.0, 47.5, 50.8, 48.2

(a) Calcule \(\bar{x}\), \(\tilde{x}\), \(s^2\), \(s\) e \(R\).

(b) A resistência especificada é \(48{,}5 \pm 2{,}0\) Ω. Quantas peças estão fora da especificação?

(c) Construa um histograma com a regra de Sturges. O perfil lembra uma curva normal?

(d) Construa um boxplot. Há outliers? Interprete a diferença entre \(\bar{x}\) e \(\tilde{x}\).

Funções de Probabilidade, Densidade e Distribuição

Para uma variável aleatória discreta \(X\):

  • Função de probabilidade (fp): \(p(x) = P(X = x) \geq 0\), com \(\sum_x p(x) = 1\)
  • Função de distribuição acumulada (fda): \(F(x) = P(X \leq x) = \sum_{t \leq x} p(t)\)
  • \(\mu = E[X] = \sum_i x_ip(x_i), \qquad \sigma^2 = E[(X-\mu)^2] = E[X^2] - \mu^2\)

Para uma variável aleatória contínua \(X\):

  • Função densidade de probabilidade (fdp): \(f(x) \geq 0\), com \(\int_{-\infty}^{\infty} f(x)\,dx = 1\); note que \(P(X = x) = 0\)
  • Função de distribuição acumulada (fda): \(F(x) = P(X \leq x) = \int_{-\infty}^{x} f(t)\,dt\)
  • Probabilidade em intervalo: \(P(a < X \leq b) = F(b) - F(a)\)
  • \(\mu = E[X] = \int_{-\infty}^{+\infty}xf(x)dx, \qquad \sigma^2 = E[(X-\mu)^2] = E[X^2] - \mu^2\)

Distribuições Discretas — Panorama

Hipergeométrica
Sem reposição · lote finito
Binomial
Com reposição · p constante
Poisson
Eventos raros · intervalo
Geométrica
Ensaios até 1.º sucesso
  • A função de probabilidade \(p(x)\) define a chance exata de observar \(x\) eventos
  • A fda \(F(x)\) acumula essas probabilidades: \(F(x) = P(X \leq x)\)

A Distribuição Hipergeométrica — Teoria

  • Modela amostragem sem reposição de população finita de tamanho \(N\)
  • \(D\): número de itens da classe de interesse; \(n\): tamanho da amostra

\[p(x) = \frac{\dbinom{D}{x}\dbinom{N-D}{n-x}}{\dbinom{N}{n}}, \quad \mu = \frac{nD}{N}, \quad \sigma^2 = n\frac{D}{N}\cdot\frac{N-D}{N}\cdot\frac{N-n}{N-1},\]

\[F(x) = P(X \leq x) = \sum_{t=0}^{x} p(t)\]

  • Base matemática primária da Amostragem de Aceitação em Lotes

A Distribuição Hipergeométrica — Código em R

Exemplo: Lote de \(N = 100\) placas eletrônicas com \(D = 5\) defeituosas. Amostra aleatória de \(n = 10\). Calcular \(p(x)\) e \(F(x)\) para \(x = 0, 1, \ldots, 5\).

N <- 100; D <- 5; n <- 10; xs <- 0:5
fp  <- dhyper(xs, m = D, n = N - D, k = n)
fda <- phyper(xs, m = D, n = N - D, k = n)
tabela <- data.frame(x = xs, "p(x)" = round(fp,4), "F(x)" = round(fda,4),
                     check.names = FALSE)
print(tabela)
  x   p(x)   F(x)
1 0 0.5838 0.5838
2 1 0.3394 0.9231
3 2 0.0702 0.9934
4 3 0.0064 0.9997
5 4 0.0003 1.0000
6 5 0.0000 1.0000

A Distribuição Hipergeométrica — Gráfico

library(ggplot2); library(patchwork)
N <- 100; D <- 5; n <- 10; xs <- 0:5
df <- data.frame(x=xs,
                 px  = dhyper(xs, D, N-D, n),
                 Fx  = phyper(xs, D, N-D, n))
p1 <- ggplot(df, aes(factor(x), px)) +
  geom_col(fill="#7ecff7", color="black", width=.7) +
  labs(title="Hipergeom. — f.p.", x="x", y="p(x)") +
  theme_minimal(base_size=13)
p2 <- ggplot(df, aes(x, Fx)) +
  geom_step(color="#f7c87e", linewidth=1.4) +
  geom_point(color="#f7c87e", size=3) +
  labs(title="Hipergeom. — f.d.a.", x="x", y="F(x)") +
  theme_minimal(base_size=13)
p1 + p2

A Distribuição Binomial — Teoria

  • Modela \(n\) ensaios de Bernoulli com probabilidade de sucesso \(p\) constante
  • Aplicável em amostragens com reposição ou populações infinitas
  • Usada nos Gráficos de controle p (fração não conforme)

\[p(x) = \binom{n}{x} p^x (1-p)^{n-x}, \qquad \mu = np \qquad \sigma^2 = np(1-p),\]

\[F(x) = P(X \leq x) = \sum_{t=0}^{x}\binom{n}{t}p^t(1-p)^{n-t}\]

A Distribuição Binomial — Código em R

Exemplo: Chance de erro num código \(p = 0{,}05\). Em 20 linhas, qual a chance de nenhum erro (\(x = 0\))? E de no máximo 2 erros?

n <- 20; p <- 0.05
cat(sprintf("P(X = 0) = %.4f\n", dbinom(0, n, p)))
P(X = 0) = 0.3585
cat(sprintf("P(X <= 2) = F(2) = %.4f\n", pbinom(2, n, p)))
P(X <= 2) = F(2) = 0.9245

A Distribuição Binomial — Gráfico

library(ggplot2); library(patchwork)
n <- 20; p <- 0.05; xs <- 0:8
df <- data.frame(x=xs, px=dbinom(xs,n,p), Fx=pbinom(xs,n,p))
p1 <- ggplot(df, aes(factor(x), px)) +
  geom_col(fill="#7ecff7", color="black", width=.7) +
  labs(title="Binomial (n=20, p=0.05) — f.p.", x="x", y="p(x)") +
  theme_minimal(base_size=13)
p2 <- ggplot(df, aes(x, Fx)) +
  geom_step(color="#f7c87e", linewidth=1.4) +
  geom_point(color="#f7c87e", size=3) +
  labs(title="Binomial — f.d.a.", x="x", y="F(x)") +
  theme_minimal(base_size=13)
p1 + p2

A Distribuição de Poisson — Teoria

  • Modela contagens de eventos raros em intervalos contínuos (tempo, área, volume)
  • Média e Variância são estritamente iguais: \(\mu = \sigma^2 = \lambda\)
  • Base teórica dos Gráficos c e u de não conformidades

\[p(x) = \frac{e^{-\lambda} \lambda^x}{x!}, \qquad F(x) = e^{-\lambda}\sum_{t=0}^{x}\frac{\lambda^t}{t!}\]

Limite da Binomial quando \(n \to \infty\) e \(p \to 0\) com \(\lambda = np\) fixo.

A Distribuição de Poisson — Código em R

Exemplo: Chapa de aço com em média \(\lambda = 2\) defeitos/m². Qual a chance de achar mais de 1 defeito (\(P(X \geq 2)\))?

lambda <- 2
cat(sprintf("P(X >= 2) = 1 - F(1) = %.4f\n",
            1 - ppois(1, lambda)))
P(X >= 2) = 1 - F(1) = 0.5940
cat(sprintf("P(X = 0)  = %.4f\n", dpois(0, lambda)))
P(X = 0)  = 0.1353
cat(sprintf("P(X = 1)  = %.4f\n", dpois(1, lambda)))
P(X = 1)  = 0.2707

A Distribuição de Poisson — Gráfico

library(ggplot2); library(patchwork)
xs <- 0:9
df <- data.frame(x=xs, px=dpois(xs,2), Fx=ppois(xs,2))
p1 <- ggplot(df, aes(factor(x), px)) +
  geom_col(fill="#a8f77e", color="black", width=.7) +
  labs(title="Poisson (lambda=2) — f.p.", x="x", y="p(x)") +
  theme_minimal(base_size=13)
p2 <- ggplot(df, aes(x, Fx)) +
  geom_step(color="#f7c87e", linewidth=1.4) +
  geom_point(color="#f7c87e", size=3) +
  labs(title="Poisson — f.d.a.", x="x", y="F(x)") +
  theme_minimal(base_size=13)
p1 + p2

Distribuição Geométrica e Binomial Negativa

  • Geométrica: número de tentativas até o primeiro sucesso (defeito)
  • Binomial Negativa: número de tentativas até o r-ésimo sucesso

\[p(x) = p\,(1-p)^{x-1}, \quad x=1,2,\ldots \qquad F(x)=1-(1-p)^x,\]

\[\mu = \frac{1}{p}, \qquad \sigma^2 = \frac{1-p}{p^2}\]

Exemplo: \(p = 0{,}1\). Qual a probabilidade do primeiro defeito aparecer exatamente na 5ª peça? E até a 5ª peça?

p <- 0.1
cat(sprintf("P(X = 5)  = p(5) = %.4f\n", dgeom(4, p)))   # 4 fracassos antes
P(X = 5)  = p(5) = 0.0656
cat(sprintf("P(X <= 5) = F(5) = %.4f\n", pgeom(4, p)))
P(X <= 5) = F(5) = 0.4095

Binomial Negativa — Teoria e Gráfico

  • Binomial Negativa: número de ensaios até o \(r\)-ésimo sucesso (defeito)

\[p(x) = \binom{x-1}{r-1}p^r(1-p)^{x-r}, \quad x = r, r+1, \ldots \qquad \mu = \frac{r}{p}, \qquad \sigma^2 = \frac{r(1-p)}{p^2}\]

library(ggplot2); library(patchwork)
p <- 0.3; r <- 3; xs <- r:(r+15)
# dnbinom em R modela nº de fracassos antes de r sucessos
fp  <- dnbinom(xs-r, size=r, prob=p)
fda <- pnbinom(xs-r, size=r, prob=p)
df  <- data.frame(x=xs, fp=fp, fda=fda)
p1  <- ggplot(df, aes(factor(x),fp)) +
  geom_col(fill="#c87ef7",color="black",width=.7) +
  labs(title="Binomial Negativa (r=3, p=0.3) — f.p.",
       x="x (num. ensaios)", y="p(x)") +
  theme_minimal(base_size=12)
p2  <- ggplot(df, aes(x,fda)) +
  geom_step(color="#f7c87e",linewidth=1.3) +
  geom_point(color="#f7c87e",size=2.5) +
  labs(title="Binomial Negativa — f.d.a.",
       x="x", y="F(x)") +
  theme_minimal(base_size=12)
p1+p2

Binomial Negativa — Teoria e Gráfico

Comparação das Distribuições Discretas

Distribuição Parâmetros \(\mu\) \(\sigma^2\) Contexto CEP
Hipergeométrica \(N, D, n\) \(nD/N\) (ver fórmula) Amostragem de aceitação
Binomial \(n, p\) \(np\) \(np(1-p)\) Gráfico p (fração defeituosa)
Poisson \(\lambda\) \(\lambda\) \(\lambda\) Gráfico c/u (contagem defeitos)
Geométrica \(p\) \(1/p\) \((1-p)/p^2\) Amostragem contínua

Regra prática: use Hipergeométrica quando \(n/N > 0{,}1\); Binomial quando \(p\) é estável e o processo é infinito/com reposição; Poisson quando os eventos são raros (\(p < 0{,}1\), \(n\) grande).

Exercício 2 — Distribuições Discretas

Exercício 2: Em uma linha de fabricação, a probabilidade de uma peça ser defeituosa é \(p = 0{,}03\).

(a) Num lote de \(n = 50\) peças, qual \(P(X > 2)\)? Use a Binomial e calcule também \(F(2)\).

(b) Se o lote fosse finito (\(N = 200\), \(D = 6\)) com \(n = 50\), recalcule com a Hipergeométrica. A diferença é grande? Por quê (\(n/N = ?\))?

(c) Aproxime o item (a) com a Poisson (\(\lambda = np\)). Compare os resultados.

(d) Qual a probabilidade da primeira defeituosa aparecer antes da 10ª inspeção? Use a Geométrica e calcule \(F(9)\).

Distribuições Contínuas — Panorama

Normal

Curva em sino, \(\mu\), \(\sigma^2\)

Lognormal

Assimétrica dir., \(\mu_Y\), \(\sigma_Y^2\)

Exponencial

Taxa falha const., \(\lambda\)

Gama

Generaliza Exp., \(r\), \(\lambda\)

Weibull

Mais flexível, \(\beta\), \(\theta\)

  • Para variáveis contínuas: \(P(X = x) = 0\); probabilidades são áreas sob a fdp
  • A fda acumula: \(F(x) = P(X \leq x) = \int_{-\infty}^{x} f(t)\,dt\)

A Distribuição Normal — Teoria

  • A principal distribuição da engenharia da qualidade — curva em sino, simétrica em \(\mu\)
  • Completamente descrita por média \(\mu\) e variância \(\sigma^2\); notação: \(X \sim N(\mu, \sigma^2)\)
  • O TCL justifica que médias amostrais convergem para a Normal — base do Gráfico \(\bar{x}\)

\[f(x) = \frac{1}{\sigma\sqrt{2\pi}}\, \exp\!\left[-\frac{(x-\mu)^2}{2\sigma^2}\right], \qquad F(x) = \Phi\!\left(\frac{x-\mu}{\sigma}\right),\]

\[Z = \frac{x - \mu}{\sigma} \sim N(0,1) \quad \text{(Padronização)}\]

A Distribuição Normal — Código em R

Exemplo: Diâmetro com \(\mu = 6{,}37\) mm e \(\sigma = 0{,}01\) mm. Qual a chance de uma peça ter diâmetro \(< 6{,}35\) mm?

prob <- pnorm(6.35, mean = 6.37, sd = 0.01)
cat(sprintf("F(6.35) = P(X < 6.35) = %.4f  (%.2f%%)\n", prob, prob*100))
F(6.35) = P(X < 6.35) = 0.0228  (2.28%)

A Distribuição Normal — Gráfico

library(ggplot2)
mu <- 6.37; sigma <- 0.01
x  <- seq(mu - 4*sigma, mu + 4*sigma, length.out = 500)
df <- data.frame(x=x, fx=dnorm(x,mu,sigma), Fx=pnorm(x,mu,sigma))
p1 <- ggplot(df, aes(x,fx)) +
  geom_line(color="white", linewidth=1.3) +
  geom_area(data=subset(df, x<6.35), fill="#f07050", alpha=.7) +
  geom_vline(xintercept=c(6.35,mu), color=c("#f07050","#a8f77e"),
             linetype=c("dashed","solid"), linewidth=1.1) +
  annotate("text",x=6.348,y=20,label="2.28%",color="#f07050",size=4) +
  labs(title="Normal — f.d.p.", x="x (mm)", y="f(x)") +
  theme_minimal(base_size=13)
p2 <- ggplot(df, aes(x,Fx)) +
  geom_line(color="#7ecff7", linewidth=1.3) +
  geom_vline(xintercept=6.35, color="#f07050", linetype="dashed", linewidth=1) +
  labs(title="Normal — f.d.a.", x="x (mm)", y="F(x)") +
  theme_minimal(base_size=13)
library(patchwork)
p1 + p2

A Distribuição Normal — Gráfico

A Distribuição Lognormal

  • Se \(Y = \ln(X)\) segue \(N(\mu_Y, \sigma_Y^2)\), então \(X\) segue Lognormal — assimétrica positiva
  • Modela vidas de fadiga, concentração química, tempos de reparo

\[f(x) = \frac{1}{x\,\sigma_Y\sqrt{2\pi}}\exp\!\left[-\frac{(\ln x - \mu_Y)^2}{2\sigma_Y^2}\right], \quad x > 0, \qquad F(x) = \Phi\!\left(\frac{\ln x - \mu_Y}{\sigma_Y}\right)\]

x (valores positivos) f(x) Moda Media cauda pesada a direita

A Distribuição Lognormal

Exemplo: Tempos de reparo com \(\mu_{\ln} = 1\), \(\sigma_{\ln} = 0{,}5\). Qual a chance do reparo exceder 5 horas?

prob <- plnorm(5, meanlog=1, sdlog=0.5, lower.tail=FALSE)
cat(sprintf("P(X > 5h) = 1 - F(5) = %.4f  (%.2f%%)\n", prob, prob*100))
P(X > 5h) = 1 - F(5) = 0.1114  (11.14%)

A Regra Empírica 68–95–99,7

Para qualquer \(X \sim N(\mu, \sigma^2)\):

\[P(\mu - \sigma < X < \mu + \sigma) \approx 68{,}27\%\]

\[P(\mu - 2\sigma < X < \mu + 2\sigma) \approx 95{,}45\%\]

\[P(\mu - 3\sigma < X < \mu + 3\sigma) \approx 99{,}73\%\]

library(ggplot2)
x  <- seq(-4,4,length.out=500)
df <- data.frame(x=x, y=dnorm(x))
ggplot(df,aes(x,y)) +
  geom_line(color="white",linewidth=1.3) +
  geom_area(data=subset(df,x>=-1&x<=1),fill="#7ecff7",alpha=.5) +
  geom_area(data=subset(df,(x>=-2&x< -1)|(x>1&x<=2)),fill="#a8f77e",alpha=.5) +
  geom_area(data=subset(df,(x>=-3&x< -2)|(x>2&x<=3)),fill="#f7c87e",alpha=.5) +
  annotate("text",x=0,   y=.18,label="68.27%",size=4,color="black") +
  annotate("text",x=1.5, y=.05,label="13.59%",size=3.5,color="black") +
  annotate("text",x=-1.5,y=.05,label="13.59%",size=3.5,color="black") +
  annotate("text",x=2.5, y=.015,label="2.14%",size=3,color="black") +
  labs(title="Regra 68-95-99.7 (Normal Padrao)",
       x="Z (desvios-padrao)",y="f(Z)") +
  theme_minimal(base_size=14)

A Regra Empírica 68–95–99,7

Padronização e Uso da Tabela Normal

A padronização \(Z = (x-\mu)/\sigma\) permite calcular qualquer probabilidade Normal usando a tabela \(\Phi(z)\):

Exemplo: Diâmetro \(X \sim N(6{,}37;\; 0{,}0001)\). LIE \(= 6{,}35\), LSE \(= 6{,}39\). Qual a fração de peças dentro da especificação?

mu <- 6.37; sigma <- 0.01
LIE <- 6.35; LSE <- 6.39
z_lie <- (LIE - mu)/sigma
z_lse <- (LSE - mu)/sigma
cat(sprintf("Z_LIE = %.2f  |  Z_LSE = %.2f\n", z_lie, z_lse))
Z_LIE = -2.00  |  Z_LSE = 2.00
p_dentro <- pnorm(z_lse) - pnorm(z_lie)
cat(sprintf("P(LIE < X < LSE) = %.4f  (%.2f%%)\n",
            p_dentro, p_dentro*100))
P(LIE < X < LSE) = 0.9545  (95.45%)
cat(sprintf("Frac. fora da especificacao: %.4f  (%.2f%%)\n",
            1-p_dentro, (1-p_dentro)*100))
Frac. fora da especificacao: 0.0455  (4.55%)

A Distribuição Lognormal — Gráfico em R

library(ggplot2); library(patchwork)
x  <- seq(0.01, 20, length.out=500)
df <- data.frame(x=x,
                 fx = dlnorm(x, meanlog=1, sdlog=0.5),
                 Fx = plnorm(x, meanlog=1, sdlog=0.5))
p1 <- ggplot(df, aes(x,fx)) +
  geom_line(color="#a8f77e", linewidth=1.4) +
  geom_area(data=subset(df,x>5), fill="#f07050", alpha=.4) +
  annotate("text",x=10,y=.06,
           label="P(X>5) = 11.14%",color="#f07050",size=4) +
  labs(title="Lognormal (mu_ln=1, sigma_ln=0.5) — f.d.p.",
       x="Horas", y="f(x)") +
  theme_minimal(base_size=13)
p2 <- ggplot(df, aes(x,Fx)) +
  geom_line(color="#7ecff7", linewidth=1.4) +
  geom_vline(xintercept=5, color="#f07050", linetype="dashed", linewidth=1) +
  labs(title="Lognormal — f.d.a.", x="Horas", y="F(x)") +
  theme_minimal(base_size=13)
p1+p2

A Distribuição Lognormal — Gráfico em R

A Distribuição Exponencial — Teoria e Código

  • Modela o tempo de vida de componentes com taxa de falha constante \(\lambda\)sem memória

\[f(x) = \lambda\, e^{-\lambda x},\; x \geq 0, \qquad F(x) = 1 - e^{-\lambda x}, \qquad \mu = \sigma = \frac{1}{\lambda}\]

Propriedade da falta de memória: \(P(X > s+t \mid X > s) = P(X > t)\)

Exemplo: Servidor da UFPB com \(\lambda = 0{,}01\) falha/dia. Chance de operar mais de 50 dias sem falha?

lambda <- 0.01
cat(sprintf("P(X > 50) = 1 - F(50) = %.4f  (%.2f%%)\n",
            pexp(50, lambda, lower.tail=FALSE),
            pexp(50, lambda, lower.tail=FALSE)*100))
P(X > 50) = 1 - F(50) = 0.6065  (60.65%)

A Distribuição Exponencial — Gráfico

library(ggplot2); library(patchwork)
x  <- seq(0, 400, length.out=500)
df <- data.frame(x=x, fx=dexp(x,.01), Fx=pexp(x,.01))
p1 <- ggplot(df, aes(x,fx)) +
  geom_line(color="#f7c87e", linewidth=1.4) +
  geom_area(data=subset(df,x>50), fill="#f07050", alpha=.4) +
  labs(title="Exponencial (lambda=0.01) — f.d.p.",
       x="Dias", y="f(x)") +
  annotate("text",x=150,y=.004,label="P(X>50) = 60.65%",
           color="#f07050",size=4) +
  theme_minimal(base_size=13)
p2 <- ggplot(df, aes(x,Fx)) +
  geom_line(color="#7ecff7", linewidth=1.4) +
  geom_vline(xintercept=50, color="#f07050", linetype="dashed", linewidth=1) +
  labs(title="Exponencial — f.d.a.", x="Dias", y="F(x)") +
  theme_minimal(base_size=13)
p1 + p2

A Distribuição Exponencial — Gráfico

A Relação Poisson–Exponencial

Poisson (lambda) Numero de eventos num intervalo Discreto · Contagem Exponencial (lambda) Tempo entre eventos Continuo · Intervalo mesmo lambda complementares
  • Se o número de eventos segue Poisson(\(\lambda\)), então o tempo entre eventos segue Exponencial(\(\lambda\))
  • Modelos perfeitamente complementares em teoria de filas e processos industriais contínuos

A Distribuição Gama — Teoria e Código

  • Generaliza a Exponencial: \(X = \sum_{i=1}^{r} X_i\) com \(X_i \sim \text{Exp}(\lambda)\) independentes

\[f(x) = \frac{\lambda^r}{\Gamma(r)} x^{r-1} e^{-\lambda x},\; x>0, \qquad \mu = \frac{r}{\lambda}, \qquad \sigma^2 = \frac{r}{\lambda^2},\]

\[F(x) = \frac{\gamma(r, \lambda x)}{\Gamma(r)} \quad \text{(função gama incompleta regularizada)}\]

Exemplo: Tempo entre defeitos Exponencial(\(\lambda = 2\)). Chance de aguardar no máximo 3 horas para ver 4 defeitos (\(r = 4\))?

prob <- pgamma(3, shape=4, rate=2)
cat(sprintf("P(T_4 <= 3h) = F(3) = %.4f  (%.2f%%)\n", prob, prob*100))
P(T_4 <= 3h) = F(3) = 0.8488  (84.88%)

A Distribuição Gama — Gráfico

library(ggplot2); library(patchwork)
x  <- seq(0, 8, length.out=400)
df <- data.frame(x=x, fx=dgamma(x,4,2), Fx=pgamma(x,4,2))
p1 <- ggplot(df, aes(x,fx)) +
  geom_line(color="#f07050", linewidth=1.4) +
  geom_area(data=subset(df,x<=3), fill="#f07050", alpha=.4) +
  labs(title="Gama (r=4, lambda=2) — f.d.p.",
       x="Horas", y="f(x)") +
  annotate("text",x=5,y=.3,label="P(T4<=3) = 84.88%",
           color="#f07050",size=4) +
  theme_minimal(base_size=13)
p2 <- ggplot(df, aes(x,Fx)) +
  geom_line(color="#7ecff7", linewidth=1.4) +
  geom_vline(xintercept=3, color="#f07050", linetype="dashed", linewidth=1) +
  labs(title="Gama — f.d.a.", x="Horas", y="F(x)") +
  theme_minimal(base_size=13)
p1 + p2

A Distribuição Gama — Gráfico

A Distribuição de Weibull — Teoria

  • O modelo probabilístico mais flexível em Confiabilidade e Fadiga
  • \(\theta > 0\): parâmetro de escala; \(\beta > 0\): parâmetro de forma

\[f(x)=\frac{\beta}{\theta}\left(\frac{x}{\theta}\right)^{\beta-1}\!\exp\!\left[-\left(\frac{x}{\theta}\right)^\beta\right], \qquad F(x)=1-\exp\!\left[-\left(\frac{x}{\theta}\right)^\beta\right]\]

\[\mu = \theta\,\Gamma\!\left(1+\frac{1}{\beta}\right), \qquad \sigma^2 = \theta^2\!\left[\Gamma\!\left(1+\frac{2}{\beta}\right)-\Gamma^2\!\left(1+\frac{1}{\beta}\right)\right]\]

\(\beta\) Taxa de falha Interpretação
\(\beta < 1\) Decrescente Falhas prematuras
\(\beta = 1\) Constante Equivale à Exponencial
\(\beta > 1\) Crescente Desgaste por uso

A Distribuição de Weibull — Código em R

Exemplo: Vida útil (meses) com \(\beta = 2\), \(\theta = 10\). Qual a chance de falhar antes de 5 meses?

prob <- pweibull(5, shape=2, scale=10)
cat(sprintf("P(X < 5) = F(5) = %.4f  (%.2f%%)\n", prob, prob*100))
P(X < 5) = F(5) = 0.2212  (22.12%)
mu_wei <- 10 * gamma(1 + 1/2)
cat(sprintf("Vida media teorica: mu = %.4f meses\n", mu_wei))
Vida media teorica: mu = 8.8623 meses

A Distribuição de Weibull — Gráfico

library(ggplot2); library(patchwork)
x <- seq(0.01, 30, length.out=400)
betas <- c(0.5, 1, 2, 5)
cores <- c("#f07050","#f7c87e","#7ecff7","#a8f77e")
df_f <- do.call(rbind, lapply(seq_along(betas), function(i)
  data.frame(x=x, y=dweibull(x,betas[i],10),
             Fx=pweibull(x,betas[i],10),
             beta=paste0("beta=",betas[i]))))
p1 <- ggplot(df_f, aes(x,y,color=beta)) +
  geom_line(linewidth=1.3) +
  scale_color_manual(values=cores) +
  labs(title="Weibull (theta=10) — f.d.p.",
       x="Meses", y="f(x)", color="") +
  theme_minimal(base_size=12)
p2 <- ggplot(df_f, aes(x,Fx,color=beta)) +
  geom_line(linewidth=1.3) +
  scale_color_manual(values=cores) +
  labs(title="Weibull — f.d.a.",
       x="Meses", y="F(x)", color="") +
  theme_minimal(base_size=12)
p1 + p2

A Distribuição de Weibull — Gráfico

Comparação das Distribuições Contínuas

Distribuição Parâmetros \(\mu\) \(\sigma^2\) Aplicação
Normal \(\mu, \sigma^2\) \(\mu\) \(\sigma^2\) Gráfico \(\bar{x}\), capacidade
Lognormal \(\mu_Y, \sigma_Y^2\) \(e^{\mu_Y+\sigma_Y^2/2}\) Fadiga, tempos de reparo
Exponencial \(\lambda\) \(1/\lambda\) \(1/\lambda^2\) Tempo entre falhas
Gama \(r, \lambda\) \(r/\lambda\) \(r/\lambda^2\) Tempo até \(r\) falhas
Weibull \(\beta, \theta\) \(\theta\,\Gamma(1+1/\beta)\) Confiabilidade geral

Quando \(\beta=1\), Weibull \(\equiv\) Exponencial. Quando \(r=1\), Gama \(\equiv\) Exponencial.

Exercício 3 — Distribuições Contínuas

Exercício 3: Um rolamento tem vida útil (milhares de horas) com Weibull: \(\beta = 2{,}5\), \(\theta = 8\).

(a) Calcule \(P(X < 4)\) — chance de falhar antes de 4.000 horas.

(b) Calcule \(P(X > 10)\) — chance de sobreviver mais de 10.000 horas.

(c) Calcule \(\mu = \theta\,\Gamma(1 + 1/\beta)\) usando gamma() no R.

(d) Se a taxa de falha fosse constante (Exponencial com mesma \(\mu\)), como \(P(X < 4)\) e \(P(X > 10)\) mudariam? O que isso implica para a estratégia de manutenção preventiva?

Gráficos de Probabilidade (Q-Q Plot)

  • Fórmulas paramétricas perdem validade se a população não segue a distribuição pressuposta
  • O Q-Q Plot compara quantis empíricos com quantis teóricos esperados
  • Bom ajuste → pontos alinhados na reta de referência
Quantis Teoricos Quantis Amostrais Referencia

Q-Q Plot Normal em R — Código

Exemplo: Validar normalidade para 60 medições de espessura antes de calcular \(C_p\) e \(C_{pk}\).

library(ggplot2)
set.seed(42)
dados <- data.frame(espessura = rnorm(60, 50, 2))
ggplot(dados, aes(sample = espessura)) +
  stat_qq(color = "#7ecff7", size = 2.5) +
  stat_qq_line(color = "#f07050", linewidth = 1.3) +
  labs(title = "Q-Q Plot: Validação da Normalidade",
       x = "Quantis Teóricos", y = "Quantis Amostrais") +
  theme_minimal(base_size = 14)

Desvios no Q-Q Plot: Interpretação

library(ggplot2); library(patchwork)
set.seed(10)
d1 <- data.frame(v=rnorm(80,50,3),                    tipo="Normal")
d2 <- data.frame(v=rexp(80,0.1)+20,                   tipo="Assimetrica Direita")
d3 <- data.frame(v=c(rnorm(40,45,1),rnorm(40,55,1)), tipo="Bimodal")
todos <- rbind(d1,d2,d3)
ggplot(todos, aes(sample=v)) +
  stat_qq(color="#7ecff7", size=1.8) +
  stat_qq_line(color="#f07050", linewidth=1.1) +
  facet_wrap(~tipo, scales="free") +
  labs(title="Q-Q Plots: Diferentes Padrões de Distribuição",
       x="Quantis Teóricos", y="Quantis Amostrais") +
  theme_minimal(base_size=12)

Testes Formais de Normalidade

Complementam o Q-Q Plot com um teste de hipótese formal:

  • \(H_0\): os dados seguem distribuição Normal
  • \(H_1\): os dados não seguem distribuição Normal
set.seed(42)
dados_norm  <- rnorm(50, 50, 2)
dados_exp   <- rexp(50, 0.1) + 30

# Shapiro-Wilk: recomendado para n <= 50
cat("=== Dados Normais ===\n")
=== Dados Normais ===
print(shapiro.test(dados_norm))

    Shapiro-Wilk normality test

data:  dados_norm
W = 0.98021, p-value = 0.5611
cat("\n=== Dados Exponenciais ===\n")

=== Dados Exponenciais ===
print(shapiro.test(dados_exp))

    Shapiro-Wilk normality test

data:  dados_exp
W = 0.69391, p-value = 6.446e-09

Valor-p grande → não há evidência contra a normalidade. Valor-p pequeno (\(< 0{,}05\)) → rejeita normalidade.

⚠️ Para \(n > 50\), use o teste de Anderson-Darling (pacote nortest), pois o Shapiro-Wilk perde precisão.

Aproximações Estatísticas Úteis

Binomial → Hipergeométrica

quando \(n/N \leq 0{,}1\), usar \(p = D/N\)

Poisson → Binomial

\(n\) grande, \(p < 0{,}1\), \(\lambda = np\)

Normal → Binomial

\(np > 10\), \(\mu=np\), \(\sigma^2=np(1-p)\)

A aproximação Normal para a Binomial é a base dos limites 3σ para os Gráficos P.

Visão Geral do Capítulo 4

Distribuições Amostrais

TCL

Testes \(Z\), \(t\), \(\chi^2\)

1 amostra

Testes \(t\), \(F\)

2 amostras

ANOVA

\(k\) grupos

Regressão

Linear

  • Realiza a transição da descritiva para testes decisórios com risco quantificado
  • Os resultados sustentam as fases Medir e Analisar do DMAMC

Distribuições Amostrais e o TCL

\[\mu_{\bar{x}} = \mu, \qquad \sigma_{\bar{x}} = \frac{\sigma}{\sqrt{n}}\]

TCL: Para qualquer população com \(\mu\) e \(\sigma^2\) finitas, a média amostral \(\bar{x}\) converge para Normal conforme \(n \to \infty\).

library(ggplot2)
set.seed(5)
medias <- replicate(5000, mean(rexp(30, rate=0.5)))
ggplot(data.frame(x=medias), aes(x)) +
  geom_histogram(aes(y=after_stat(density)), bins=40,
                 fill="#7ecff7", color="black", alpha=.8) +
  stat_function(fun=dnorm, args=list(mean=mean(medias),sd=sd(medias)),
                color="#f07050", linewidth=1.6) +
  labs(title="TCL: Medias (n=30) de uma Exponencial converge para Normal",
       x=expression(bar(x)), y="Densidade") +
  theme_minimal(base_size=14)

Distribuições Amostrais e o TCL

Distribuições Amostrais — Resumo

Estatística Distribuição amostral Pressuposto
\(\bar{x}\) \(N(\mu,\,\sigma^2/n)\) Normalidade ou \(n\) grande (TCL)
\(\chi^2 = (n-1)s^2/\sigma^2\) \(\chi^2_{n-1}\) Normalidade estrita
\(t = (\bar{x}-\mu)/(s/\sqrt{n})\) \(t_{n-1}\) Normalidade
\(F = s_1^2/s_2^2\) \(F_{n_1-1,\,n_2-1}\) Normalidade em ambas as amostras
  • \(\chi^2\): assimétrica positiva; descreve a variabilidade amostral de \(s^2\)
  • \(t\): caudas mais pesadas que a Normal; converge para \(N(0,1)\) com \(n \to \infty\)
  • \(F\): razão de qui-quadrados independentes; fundamental para comparar variâncias e na ANOVA

Visualizando as Distribuições Amostrais

library(ggplot2); library(patchwork)
x <- seq(0,20,length.out=400)
xt <- seq(-5,5,length.out=400)
df_chi <- data.frame(x=x, y=dchisq(x,df=9))
df_t   <- rbind(
  data.frame(x=xt, y=dt(xt,3),    gl="t (GL=3)"),
  data.frame(x=xt, y=dt(xt,10),   gl="t (GL=10)"),
  data.frame(x=xt, y=dnorm(xt),   gl="Normal"))
p1 <- ggplot(df_chi, aes(x,y)) +
  geom_line(color="#f7c87e", linewidth=1.4) +
  geom_area(data=subset(df_chi,x>qchisq(0.95,9)),
            fill="#f07050", alpha=.5) +
  labs(title="chi² (GL=9) — região de rejeição 5%",
       x="chi²", y="f(x)") +
  theme_minimal(base_size=12)
p2 <- ggplot(df_t, aes(x,y,color=gl)) +
  geom_line(linewidth=1.3) +
  scale_color_manual(values=c("#7ecff7","#a8f77e","#f07050")) +
  labs(title="Distribuição t vs Normal",
       x="t", y="f(t)", color="") +
  theme_minimal(base_size=12)
p1+p2

Visualizando as Distribuições Amostrais

Estrutura dos Testes de Hipótese

Erro Tipo I (α)
Processo bom falsamente reprovado
"Alarme Falso"
Erro Tipo II (β)
Processo ruim acobertado e aceito
"Falha na Detecção"
  • Poder do teste \(= 1 - \beta\): probabilidade de detectar que o processo mudou
  • Tamanho amostral mínimo para detectar deslocamento \(\delta\) com poder \(1-\beta\):

\[n = \left(\frac{(Z_{\alpha/2} + Z_{\beta})\,\sigma}{\delta}\right)^2\]

Teste-Z e IC para a Média (σ Conhecido)

\[Z_0 = \frac{\bar{x} - \mu_0}{\sigma / \sqrt{n}} \sim N(0,1) \quad \text{sob } H_0 \qquad IC_{1-\alpha}\!(\mu) = \bar{x} \pm Z_{\alpha/2}\,\frac{\sigma}{\sqrt{n}}\]

Exemplo: \(\sigma = 0{,}5\) (histórico), \(n = 15\), \(\bar{x} = 10{,}2\). Testar \(H_0: \mu = 10\) com \(\alpha = 0{,}05\) e construir o IC 95%.

x_bar <- 10.2; mu_0 <- 10; sigma <- 0.5; n <- 15
z0    <- (x_bar - mu_0)/(sigma/sqrt(n))
pval  <- 2*pnorm(-abs(z0))
ic    <- x_bar + c(-1,1)*qnorm(0.975)*sigma/sqrt(n)
cat(sprintf("Z0=%.4f | p=%.4f | IC 95%%: [%.4f; %.4f]\n",
            z0, pval, ic[1], ic[2]))
Z0=1.5492 | p=0.1213 | IC 95%: [9.9470; 10.4530]
cat(ifelse(pval<0.05, "Rejeita H0","Nao rejeita H0"),"\n")
Nao rejeita H0 

O Valor-P: Interpretação Correta

O valor-p é o menor nível \(\alpha\) no qual rejeitaríamos \(H_0\) com os dados observados.

p < 0,01
Evidência muito forte contra H₀
0,01 ≤ p < 0,05
Evidência significativa
p ≥ 0,05
Evidência insuficiente contra H₀

⚠️ Não confundir: “não rejeitar \(H_0\)não é o mesmo que “provar \(H_0\) verdadeira” — é simplesmente insuficiência de evidência.

O Valor-P: Interpretação Correta

library(ggplot2)
x   <- seq(-4, 4, length.out = 500)
df  <- data.frame(x = x, y = dnorm(x))
z0  <- (10.2 - 10) / (0.5 / sqrt(15))

ggplot(df, aes(x, y)) +
  geom_area(fill = "#7ecff7", alpha = .20) +                          # fundo suave na curva toda
  geom_area(data = subset(df, x < -1.96), fill = "#f07050", alpha = .6) +
  geom_area(data = subset(df, x >  1.96), fill = "#f07050", alpha = .6) +
  geom_line(color = "white", linewidth = 1.3) +
  geom_vline(xintercept = c(-z0, z0), color = "#7ecff7",
             linetype = "dashed", linewidth = 1.2) +
  geom_vline(xintercept = c(-1.96, 1.96), color = "#f07050",
             linetype = "solid", linewidth = .8) +
  annotate("text", x =  z0 + .3, y = .22,
           label = paste0("Z[0]==", round(z0, 2)),
           parse = TRUE, color = "#7ecff7", size = 4, hjust = 0) +
  annotate("text", x = -z0 - .3, y = .22,
           label = paste0("Z[0]==-", round(z0, 2)),
           parse = TRUE, color = "#7ecff7", size = 4, hjust = 1) +
  annotate("text", x =  2.5, y = .04,
           label = "alpha/2==0.025",
           parse = TRUE, color = "#f07050", size = 3.5) +
  annotate("text", x = -2.5, y = .04,
           label = "alpha/2==0.025",
           parse = TRUE, color = "#f07050", size = 3.5) +
  annotate("text", x = 0, y = .1,
           label = "Nao rejeita H\u2080",
           parse = FALSE, color = "#a8f77e", size = 4) +
  labs(title = "Regiao de rejeicao bilateral (alpha = 0.05): Z0 nao cai na cauda",
       x = "Z", y = "f(Z)") +
  theme_minimal(base_size = 14)

O Valor-P: Interpretação Correta

Intervalo de Confiança: Interpretação Correta

Interpretação: Um IC de 95% significa que, se repetíssemos o experimento muitas vezes e construíssemos um IC para cada amostra, 95% desses intervalos conteriam o verdadeiro parâmetro \(\mu\).

Não significa que há 95% de probabilidade de \(\mu\) estar no intervalo calculado — \(\mu\) é fixo, não aleatório!

library(ggplot2)
set.seed(1)
mu_real <- 10; sigma <- 2; n <- 20; B <- 50
simula <- replicate(B, {
  x <- rnorm(n, mu_real, sigma)
  c(mean(x), mean(x) - 1.96*sigma/sqrt(n),
    mean(x) + 1.96*sigma/sqrt(n))
})
df_ic <- data.frame(t(simula), rep=1:B)
names(df_ic) <- c("med","inf","sup","rep")
df_ic$cobre <- df_ic$inf <= mu_real & df_ic$sup >= mu_real
ggplot(df_ic, aes(x=rep, y=med, ymin=inf, ymax=sup, color=cobre)) +
  geom_errorbar(linewidth=.8) + geom_point(size=1.5) +
  geom_hline(yintercept=mu_real, color="white", linewidth=1.2) +
  scale_color_manual(values=c("#f07050","#7ecff7"),
                     labels=c("Nao cobre","Cobre mu")) +
  labs(title="50 ICs 95%: a maioria cobre o verdadeiro mu",
       x="Amostra", y="Estimativa de mu", color="") +
  coord_flip() + theme_minimal(base_size=12)

Intervalo de Confiança: Interpretação Correta

Teste-t e IC para a Média (σ Desconhecido)

\[t_0 = \frac{\bar{x} - \mu_0}{s / \sqrt{n}} \sim t_{n-1} \quad \text{sob } H_0 \qquad IC = \bar{x} \pm t_{\alpha/2,\,n-1}\,\frac{s}{\sqrt{n}}\]

Exemplo: 10 amostras de tensões de molas. Testar se a tensão média difere de 50 kPa.

tensoes <- c(51,49,52,48,55,47,51,53,49,50)
teste   <- t.test(tensoes, mu=50)
cat(sprintf("t=%.4f | GL=%.0f | p=%.4f\nIC 95%%: [%.4f; %.4f]\n",
            teste$statistic, teste$parameter, teste$p.value,
            teste$conf.int[1], teste$conf.int[2]))
t=0.6547 | GL=9 | p=0.5291
IC 95%: [48.7722; 52.2278]

Inferência para a Variância (\(\chi^2\))

\[\chi_0^2 = \frac{(n-1)s^2}{\sigma_0^2} \sim \chi^2_{n-1} \quad \text{sob } H_0\]

Intervalo de Confiança para \(\sigma^2\):

\[\frac{(n-1)s^2}{\chi^2_{\alpha/2,\,n-1}} \leq \sigma^2 \leq \frac{(n-1)s^2}{\chi^2_{1-\alpha/2,\,n-1}}\]

Exemplo: Testar \(H_0: \sigma^2 = 4\) com as 10 amostras de tensões e construir IC 95%.

tensoes <- c(51,49,52,48,55,47,51,53,49,50)
n <- length(tensoes); s2 <- var(tensoes); s20 <- 4
chi0   <- (n-1)*s2/s20
pval   <- 2*min(pchisq(chi0,n-1), 1-pchisq(chi0,n-1))
ic_inf <- (n-1)*s2/qchisq(0.975,n-1)
ic_sup <- (n-1)*s2/qchisq(0.025,n-1)
cat(sprintf("s2=%.3f | chi2=%.3f | p=%.4f\nIC 95%% sigma2: [%.3f; %.3f]\n",
            s2, chi0, pval, ic_inf, ic_sup))
s2=5.833 | chi2=13.125 | p=0.3141
IC 95% sigma2: [2.760; 19.442]

Poder do Teste e Cálculo de n

library(ggplot2)
# Curvas de poder para diferentes n
delta_vals <- seq(0, 3, length.out=100)
sigma <- 1; alpha <- 0.05
ns <- c(5, 15, 30)
cores <- c("#f07050","#7ecff7","#a8f77e")
df_pow <- do.call(rbind, lapply(seq_along(ns), function(i){
  n <- ns[i]
  z_alpha <- qnorm(1-alpha/2)
  poder <- pnorm(-z_alpha + delta_vals*sqrt(n)/sigma) +
           pnorm(-z_alpha - delta_vals*sqrt(n)/sigma, lower.tail=FALSE)
  data.frame(delta=delta_vals, poder=poder, n=paste0("n=",n))
}))
ggplot(df_pow, aes(delta, poder, color=n)) +
  geom_line(linewidth=1.4) +
  scale_color_manual(values=cores) +
  geom_hline(yintercept=0.8,linetype="dashed",color="#f7c87e") +
  annotate("text",x=2.5,y=0.82,label="Poder = 80%",
           color="#f7c87e",size=4) +
  labs(title="Curva de Poder: detectar deslocamento delta (sigma=1)",
       x="Deslocamento delta", y="Poder (1 - beta)", color="") +
  theme_minimal(base_size=14)

Poder do Teste e Cálculo de n

Inferência para a Proporção

\[Z_0 = \frac{\hat{p} - p_0}{\sqrt{p_0(1-p_0)/n}} \sim N(0,1) \quad \text{sob } H_0 \qquad IC = \hat{p} \pm Z_{\alpha/2}\sqrt{\frac{\hat{p}(1-\hat{p})}{n}}\]

Exemplo: Fornecedor alega taxa de defeito de 5%. Inspeção de \(n = 500\) encontra \(x = 35\) falhas. O defeito excedeu 5%?

n <- 500; x <- 35; p0 <- 0.05; phat <- x/n
z0    <- (phat-p0)/sqrt(p0*(1-p0)/n)
pval  <- prop.test(x,n,p=p0,alternative="greater",correct=FALSE)$p.value
ic    <- phat + c(-1,1)*qnorm(0.975)*sqrt(phat*(1-phat)/n)
cat(sprintf("phat=%.4f | Z0=%.4f | p=%.4f\nIC 95%%: [%.4f; %.4f]\n",
            phat, z0, pval, ic[1], ic[2]))
phat=0.0700 | Z0=2.0520 | p=0.0201
IC 95%: [0.0476; 0.0924]

Exercício 4 — Inferência para Uma Amostra

Exercício 4: Um processo de envase especifica \(\mu_0 = 500\) mL com \(\sigma = 8\) mL (histórico). Uma auditoria coletou 20 garrafas com \(\bar{x} = 496{,}5\) mL.

(a) Realize o Teste-Z bilateral com \(\alpha = 0{,}05\). O processo está fora do alvo?

(b) Construa o IC 95% para \(\mu\). O valor 500 mL está no intervalo?

(c) Se \(\sigma\) fosse desconhecido e \(s = 7{,}8\) mL, qual seria o Teste-t? Como o p-valor muda?

(d) Qual o \(n\) mínimo para detectar \(\delta = 3\) mL com poder \(= 0{,}90\) e \(\alpha = 0{,}05\)?

Teste-t de Duas Amostras — Variâncias Iguais

\[S_p^2 = \frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1+n_2-2} \qquad t_0 = \frac{\bar{x}_1-\bar{x}_2}{S_p\sqrt{1/n_1+1/n_2}} \sim t_{n_1+n_2-2}\]

Exemplo: Espessura de moldagem de duas fabricantes competindo para ser fornecedora.

m1 <- c(12.5,12.3,12.8,12.6,12.4)
m2 <- c(11.9,11.8,12.1,12.0,11.9)
teste <- t.test(m1,m2,var.equal=TRUE)
cat(sprintf("t=%.4f | GL=%.0f | p=%.6f\nIC 95%%: [%.4f; %.4f]\n",
            teste$statistic, teste$parameter, teste$p.value,
            teste$conf.int[1], teste$conf.int[2]))
t=5.8000 | GL=8 | p=0.000405
IC 95%: [0.3494; 0.8106]

Visualizando a Diferença entre Grupos

library(ggplot2)
set.seed(9)
df_viz <- data.frame(
  grupo  = rep(c("Fabricante 1","Fabricante 2"), each=5),
  espess = c(12.5,12.3,12.8,12.6,12.4, 11.9,11.8,12.1,12.0,11.9)
)
ggplot(df_viz, aes(x=grupo, y=espess, fill=grupo)) +
  geom_boxplot(alpha=.7, width=.4) +
  geom_jitter(width=.08, size=3, alpha=.8) +
  scale_fill_manual(values=c("#7ecff7","#f7c87e")) +
  labs(title="Espessura de Moldagem: Fabricante 1 vs Fabricante 2",
       x="", y="Espessura (mm)") +
  theme_minimal(base_size=14) +
  theme(legend.position="none")

Teste de Welch (Variâncias Diferentes) e Teste Pareado

\[\nu \approx \frac{(s_1^2/n_1 + s_2^2/n_2)^2}{\dfrac{(s_1^2/n_1)^2}{n_1-1} + \dfrac{(s_2^2/n_2)^2}{n_2-1}} \quad \text{(Welch-Satterthwaite)}\]

Welch: Dois fornecedores com materiais distintos — variâncias potencialmente diferentes.

set.seed(21)
fa <- rnorm(12,50,1.5); fb <- rnorm(12,50,4.0)
tw <- t.test(fa,fb,var.equal=FALSE)
cat(sprintf("[Welch] GL_ef=%.2f | p=%.4f\n", tw$parameter, tw$p.value))
[Welch] GL_ef=17.64 | p=0.9476

Pareado: Mesma peça antes e após calibração.

antes <- c(45,48,47,44,46); apos <- c(43,44,45,42,44)
tp <- t.test(antes,apos,paired=TRUE)
cat(sprintf("[Pareado] d_bar=%.2f | p=%.5f\n",
            mean(antes-apos), tp$p.value))
[Pareado] d_bar=2.40 | p=0.00388

Teste F para Variâncias e Comparação de Proporções

Teste F: Máquina A vs Máquina B — verificar se variâncias são iguais. \(H_0: \sigma_1^2 = \sigma_2^2\)

set.seed(42)
ma <- rnorm(20,10,0.5); mb <- rnorm(20,10,1.2)
tf <- var.test(ma,mb)
cat(sprintf("[F-test] F=%.4f | p=%.5f | IC:[%.3f; %.3f]\n",
            tf$statistic, tf$p.value,
            tf$conf.int[1], tf$conf.int[2]))
[F-test] F=0.2429 | p=0.00338 | IC:[0.096; 0.614]

Proporções: Em março 18/400 defeitos, em abril 10/400. A melhoria é significativa?

t2p <- prop.test(c(18,10),c(400,400),correct=FALSE)
cat(sprintf("[Proporções] chi2=%.4f | p=%.4f\n",
            t2p$statistic, t2p$p.value))
[Proporções] chi2=2.3686 | p=0.1238

Exercício 5 — Inferência para Duas Amostras

Exercício 5: Dois operários produzem peças em máquinas distintas. Resistência de tração (MPa):

Operário 1: 98.2, 100.1, 99.5, 101.3, 98.8, 100.6, 99.0, 100.8

Operário 2: 101.5, 97.2, 103.0, 96.8, 102.1, 97.5, 104.0, 96.2

(a) Antes de comparar médias, teste se as variâncias são iguais (Teste F, \(\alpha = 0{,}05\)).

(b) Com base no resultado, aplique o Teste-t apropriado (pooled ou Welch).

(c) Qual operário produz com menor variabilidade? Que conclusão operacional você tira?

(d) Calcule o IC 95% para a diferença de médias e interprete no contexto de qualidade.

Por que ANOVA? Inflação do Erro Tipo I

\(k=3\) grupos

\(3\) testes · \(\alpha^* \approx 14\%\)

\(k=5\) grupos

\(10\) testes · \(\alpha^* \approx 40\%\)

ANOVA

\(1\) teste · \(\alpha = 5\%\) garantido

Solução exata e unificada: Análise de Variância (ANOVA)

ANOVA — Modelo e Tabela

Modelo:

\[y_{ij} = \mu + \tau_i + \epsilon_{ij}, \quad \epsilon_{ij} \sim N(0,\sigma^2)\]

  • \(y_{ij}\): \(j\)-ésima observação do grupo \(i\)
  • \(\mu\): média geral do processo
  • \(\tau_i\): efeito do \(i\)-ésimo tratamento; testa-se \(H_0: \tau_1 = \cdots = \tau_a = 0\)
  • \(\epsilon_{ij}\): erro aleatório — independente, Normal, variância constante \(\sigma^2\)
  • \(a\): número de grupos; \(n_i\): tamanho do grupo \(i\); \(N = \sum n_i\): total de observações

ANOVA — Modelo e Tabela

Decomposição: \(SQT = SQTrat + SQE\), onde:

  • \(SQT = \sum_{i,j}(y_{ij} - \bar{y}_{..})^2\): variação total em torno da média geral
  • \(SQTrat = \sum_{i} n_i(\bar{y}_{i.} - \bar{y}_{..})^2\): variação entre grupos (atribuída aos tratamentos)
  • \(SQE = \sum_{i,j}(y_{ij} - \bar{y}_{i.})^2\): variação dentro dos grupos (erro puro)
  • \(MQTrat = SQTrat/(a-1)\): média quadrática dos tratamentos
  • \(MQE = SQE/(N-a)\): estimativa de \(\sigma^2\) (variância do erro)
Fonte GL SQ MQ \(F_0\)
Tratamentos \(a-1\) \(SQTrat\) \(MQTrat\) \(MQTrat/MQE\)
Erro \(N-a\) \(SQE\) \(MQE\)
Total \(N-1\) \(SQT\)

ANOVA em R — Código

Exemplo: Resistência mecânica de corpos de prova em 3 tipos de forno (\(n = 5\) cada).

dados <- data.frame(
  forno  = factor(rep(c("F1","F2","F3"),each=5)),
  resist = c(5,6,4,5,5, 12,14,13,12,15, 8,9,8,7,9)
)
modelo <- aov(resist ~ forno, data=dados)
summary(modelo)
            Df Sum Sq Mean Sq F value   Pr(>F)    
forno        2  170.8   85.40   88.34 6.62e-08 ***
Residuals   12   11.6    0.97                     
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

ANOVA — Visualização dos Grupos

library(ggplot2)
ggplot(dados, aes(x=forno, y=resist, fill=forno)) +
  geom_boxplot(alpha=.75, width=.5) +
  geom_jitter(width=.08, size=3, alpha=.8) +
  scale_fill_manual(values=c("#7ecff7","#f7c87e","#a8f77e")) +
  labs(title="Resistencia por Tipo de Forno",
       x="Forno", y="Resistencia (MPa)") +
  theme_minimal(base_size=14) +
  theme(legend.position="none")

ANOVA — Diagnóstico dos Resíduos

library(ggplot2); library(patchwork)
df_res <- data.frame(ajust=fitted(modelo), resid=residuals(modelo))
p1 <- ggplot(df_res, aes(sample=resid)) +
  stat_qq(color="#7ecff7",size=2.2) +
  stat_qq_line(color="#f07050",linewidth=1.2) +
  labs(title="Q-Q dos Residuos",
       x="Quantis Teoricos",y="Residuos") +
  theme_minimal(base_size=13)
p2 <- ggplot(df_res, aes(x=ajust,y=resid)) +
  geom_point(color="#7ecff7",size=2.5) +
  geom_hline(yintercept=0,color="#f07050",linewidth=1.2) +
  labs(title="Residuos vs Ajustados",
       x=expression(hat(y)),y="Residuos") +
  theme_minimal(base_size=13)
p1 + p2

ANOVA — Diagnóstico dos Resíduos

Testes de Homocedasticidade: Bartlett vs Levene

  • Bartlett: muito sensível à não-normalidade — use apenas quando a normalidade for confirmada
  • Levene: robusto à não-normalidade — recomendado em situações práticas
# Levene requer o pacote car
# install.packages("car")
library(car)
leveneTest(resist ~ forno, data=dados)
Levene's Test for Homogeneity of Variance (center = median)
      Df F value Pr(>F)
group  2  1.2727 0.3153
      12               

Se o valor-p do Teste de Levene for \(> 0{,}05\), não há evidência de variâncias diferentes — a ANOVA é válida.

Comparações Múltiplas Pós-ANOVA

Quando a ANOVA rejeita \(H_0\), queremos saber quais grupos diferem. Métodos clássicos:

  • Tukey HSD: controla o erro familiar (\(\alpha\) global) — recomendado quando todos os pares são comparados
  • Bonferroni: divide \(\alpha\) pelo número de testes — mais conservador
# Tukey HSD
tk <- TukeyHSD(modelo, conf.level=0.95)
print(tk)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = resist ~ forno, data = dados)

$forno
      diff       lwr       upr     p adj
F2-F1  8.2  6.541055  9.858945 0.0000000
F3-F1  3.2  1.541055  4.858945 0.0006558
F3-F2 -5.0 -6.658945 -3.341055 0.0000099

ANOVA como Caso Particular da Regressão

A ANOVA de um fator com \(a\) grupos é equivalente a uma regressão linear com variáveis indicadoras (dummies):

\[y_{ij} = \beta_0 + \beta_1 D_{1ij} + \beta_2 D_{2ij} + \cdots + \beta_{a-1}D_{(a-1)ij} + \epsilon_{ij}\]

onde \(D_{kij} = 1\) se a observação pertence ao grupo \(k\), e 0 caso contrário. O grupo \(a\) é a referência (nível base).

# ANOVA via lm() — resultados equivalentes
mod_lm <- lm(resist ~ forno, data=dados)
summary(mod_lm)

Call:
lm(formula = resist ~ forno, data = dados)

Residuals:
   Min     1Q Median     3Q    Max 
  -1.2   -0.6    0.0    0.8    1.8 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   5.0000     0.4397  11.371 8.79e-08 ***
fornoF2       8.2000     0.6218  13.187 1.68e-08 ***
fornoF3       3.2000     0.6218   5.146 0.000243 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.9832 on 12 degrees of freedom
Multiple R-squared:  0.9364,    Adjusted R-squared:  0.9258 
F-statistic: 88.34 on 2 and 12 DF,  p-value: 6.616e-08

Os coeficientes \(\hat{\beta}_k\) estimam a diferença entre a média do grupo \(k\) e a média do grupo de referência (F1).

Homocedasticidade e Transformações

# Teste de Bartlett para homocedasticidade
bartlett.test(resist ~ forno, data=dados)

    Bartlett test of homogeneity of variances

data:  resist by forno
Bartlett's K-squared = 1.503, df = 2, p-value = 0.4717
  • Padrão em funil nos resíduos destrói a premissa de variância constante
  • Solução: Transformação Box-Cox antes de reajustar o modelo
Transformação Quando usar
\(\sqrt{y}\) Variância proporcional à média
\(\ln(y)\) Dados positivos com assimetria severa
\(1/y\) Variância proporcional ao quadrado da média

Exercício 6 — ANOVA

Exercício 6: Quatro fornecedores de matéria-prima avaliados quanto à dureza (HRC), \(n=4\) por fornecedor:

F1: 62, 60, 63, 61 · F2: 58, 57, 59, 60 · F3: 65, 64, 66, 63 · F4: 61, 62, 60, 61

(a) Formule \(H_0\) e \(H_1\). Execute a ANOVA com \(\alpha = 0{,}05\) e interprete a tabela completa.

(b) Verifique os pressupostos: Q-Q dos resíduos e Teste de Bartlett.

(c) Se \(H_0\) for rejeitada, construa um boxplot comparativo e identifique qual fornecedor difere.

(d) Calcule o \(R^2\) da ANOVA (\(SQTrat/SQT\)). Que percentual da variação total é explicado pelo fator “fornecedor”?

Regressão Linear: Modelo, Variáveis e Suposições

Modelo de Regressão Linear Múltipla:

\[y_i = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2} + \cdots + \beta_k x_{ik} + \epsilon_i, \quad i = 1,\ldots,n\]

  • \(y_i\): variável resposta (saída do processo) da \(i\)-ésima observação
  • \(x_{i1},\ldots,x_{ik}\): variáveis preditoras (entradas controláveis, medidas, tempo, etc.)
  • \(\beta_0\): intercepto — valor médio de \(y\) quando todos os \(x_j = 0\)
  • \(\beta_j\): efeito marginal de \(x_j\) sobre \(y\), mantendo os demais preditores fixos
  • \(\epsilon_i\): erro aleatório — variação não explicada pelo modelo

Regressão Linear: Modelo, Variáveis e Suposições

Suposições (obrigatórias para inferência válida):

  1. \(E[\epsilon_i] = 0\) — erros com média zero
  2. \(\text{Var}(\epsilon_i) = \sigma^2\) — homocedasticidade (variância constante)
  3. \(\epsilon_i \sim N(0, \sigma^2)\) — normalidade dos erros
  4. \(\epsilon_i\) independentes entre si

Estimação por Mínimos Quadrados Ordinários (MQO):

\[\hat{\boldsymbol{\beta}} = (\mathbf{X}'\mathbf{X})^{-1}\mathbf{X}'\mathbf{y} \qquad \text{minimiza} \quad SQE = \sum_{i=1}^n \epsilon_i^2\]

Regressão Linear Simples — Código

Exemplo: Concentração do solvente \(X\) (%) vs força de adesão \(Y\) (MPa). Modelo: \(Y = \beta_0 + \beta_1 X + \epsilon\).

x <- c(10,15,20,25,30)
y <- c(12,18,25,33,40)
mod <- lm(y ~ x)
summary(mod)

Call:
lm(formula = y ~ x)

Residuals:
   1    2    3    4    5 
 0.6 -0.5 -0.6  0.3  0.2 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -2.8000     0.8124  -3.447    0.041 *  
x             1.4200     0.0383  37.079 4.31e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.6055 on 3 degrees of freedom
Multiple R-squared:  0.9978,    Adjusted R-squared:  0.9971 
F-statistic:  1375 on 1 and 3 DF,  p-value: 4.315e-05

Regressão Simples — Gráfico

library(ggplot2)
df_lm <- data.frame(x=x,y=y)
ggplot(df_lm, aes(x,y)) +
  geom_point(color="#f7c87e",size=4) +
  geom_smooth(method="lm",color="#7ecff7",
              fill="#7ecff7",linewidth=1.4,alpha=.2) +
  labs(title=sprintf("Regressao Linear  |  R2 = %.4f  |  Yhat = %.2f + %.2f*X",
                     summary(mod)$r.squared,
                     coef(mod)[1], coef(mod)[2]),
       x="Concentracao do Solvente (%)",
       y="Forca de Adesao (MPa)") +
  theme_minimal(base_size=14)

Seleção de Variáveis e Multicolinearidade

  • Multicolinearidade: quando dois preditores \(x_j\) e \(x_k\) são fortemente correlacionados entre si
    • Infla os \(se(\hat{\beta}_j)\) → testes \(t\) perdem poder
    • Diagnóstico: VIF (Variance Inflation Factor); VIF \(> 5\) é sinal de alerta
  • Critérios de seleção de modelos:
Critério Fórmula Preferência
\(R^2_{adj}\) \(1-(n-1)(1-R^2)/(n-p)\) Maior
AIC \(n\ln(SQE/n)+2p\) Menor
BIC \(n\ln(SQE/n)+p\ln(n)\) Menor
# AIC e BIC do modelo de adesao
x <- c(10,15,20,25,30); y <- c(12,18,25,33,40)
mod <- lm(y~x)
cat(sprintf("AIC = %.4f  |  BIC = %.4f\n", AIC(mod), BIC(mod)))
AIC = 12.6187  |  BIC = 11.4471

\(R^2\), \(R^2_{adj}\), Teste F e ICs dos Coeficientes

\[R^2 = \frac{SQR}{SQT} = 1-\frac{SQE}{SQT} \qquad R^2_{adj} = 1-\frac{n-1}{n-p}(1-R^2)\]

\[IC(\beta_j) = \hat{\beta}_j \pm t_{\alpha/2,\,n-p}\cdot se(\hat{\beta}_j)\]

Exemplo: Exibir \(R^2\), \(R^2_{adj}\) e ICs para o modelo de adesão.

cat(sprintf("R2 = %.4f  |  R2_adj = %.4f\n",
            summary(mod)$r.squared,
            summary(mod)$adj.r.squared))
R2 = 0.9978  |  R2_adj = 0.9971
print(confint(mod, level=0.95))
                2.5 %     97.5 %
(Intercept) -5.385432 -0.2145684
x            1.298122  1.5418784

Regressão Múltipla — Código

Exemplo: \(Y\) = custo produtivo (R$), \(X_1\) = temperatura (°C), \(X_2\) = densidade (g/cm³). Modelo: \(Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \epsilon\).

set.seed(11)
df2  <- data.frame(temp=10:14, dens=c(5,6,6,8,8),
                   custo=c(22,25,27,33,37))
mod2 <- lm(custo ~ temp + dens, data=df2)
print(round(coef(mod2),3))
(Intercept)        temp        dens 
      -12.3         2.6         1.5 
cat(sprintf("R2=%.4f  |  R2_adj=%.4f\n",
            summary(mod2)$r.squared,
            summary(mod2)$adj.r.squared))
R2=0.9825  |  R2_adj=0.9651

IC para a Média vs Intervalo de Predição

\[IC_{\mu|\mathbf{x}_0} = \hat{y}_0 \pm t_{\alpha/2,\,n-p}\cdot se_{\hat{\mu}} \qquad IP_{y_0} = \hat{y}_0 \pm t_{\alpha/2,\,n-p}\cdot se_{\hat{y}_0}\]

  • IC para a média (\(\hat{\mu}\)): incerteza sobre o valor médio de \(y\) em \(x_0\) — mais estreito
  • Intervalo de predição (\(y_0\)): incerteza sobre uma nova observação em \(x_0\) — mais largo (inclui \(\sigma^2\))
library(ggplot2)
x <- c(10,15,20,25,30); y <- c(12,18,25,33,40)
mod <- lm(y~x)
xnew <- data.frame(x=seq(8,33,length.out=100))
ic   <- predict(mod, xnew, interval="confidence")
ip   <- predict(mod, xnew, interval="prediction")
df_b <- data.frame(x=xnew$x,
                   fit=ic[,1],
                   ic_inf=ic[,2],ic_sup=ic[,3],
                   ip_inf=ip[,2],ip_sup=ip[,3])
ggplot(df_b, aes(x)) +
  geom_ribbon(aes(ymin=ip_inf,ymax=ip_sup),fill="#f07050",alpha=.25) +
  geom_ribbon(aes(ymin=ic_inf,ymax=ic_sup),fill="#7ecff7",alpha=.45) +
  geom_line(aes(y=fit),color="white",linewidth=1.3) +
  geom_point(data=data.frame(x=x,y=y),aes(x,y),
             color="#f7c87e",size=4) +
  labs(title="IC (azul) vs Intervalo de Predicao (vermelho)",
       x="X",y="Y") +
  theme_minimal(base_size=14)

IC para a Média vs Intervalo de Predição

Regressão Múltipla — Predição

novo <- data.frame(temp=15, dens=9)
pred <- predict(mod2, novo, interval="prediction", level=0.95)
cat(sprintf("Predicao: %.2f  |  IP 95%%: [%.2f; %.2f]\n",
            pred[1], pred[2], pred[3]))
Predicao: 40.20  |  IP 95%: [33.09; 47.31]
library(ggplot2)
df_obs <- data.frame(obs=df2$custo, ajust=fitted(mod2),
                     label=paste0("(",df2$temp,",",df2$dens,")"))
ggplot(df_obs, aes(ajust,obs)) +
  geom_point(color="#f7c87e",size=4) +
  geom_abline(slope=1,intercept=0,color="#7ecff7",linewidth=1.2) +
  geom_label(aes(label=label),size=3,nudge_y=.5,fill="grey") +
  labs(title="Custo Observado vs Ajustado",
       x="Ajustado",y="Observado") +
  theme_minimal(base_size=13)

Regressão Múltipla — Predição

Diagnóstico de Resíduos na Regressão

library(ggplot2); library(patchwork)
set.seed(5)
xd <- 1:50; yd <- 5+1.2*xd+rnorm(50,0,5); mld <- lm(yd~xd)
df_d <- data.frame(x=xd, fit=fitted(mld), rst=rstudent(mld))
p1 <- ggplot(df_d, aes(fit,rst)) +
  geom_point(color="#7ecff7",size=2) +
  geom_hline(yintercept=c(-2,0,2),
             linetype=c("dashed","solid","dashed"),
             color=c("#f07050","#a8f77e","#f07050"),linewidth=.9) +
  labs(title="Residuo Studentizado vs Y-hat",
       x=expression(hat(y)),y="Res. Student.") +
  theme_minimal(base_size=12)
p2 <- ggplot(df_d, aes(sample=rst)) +
  stat_qq(color="#7ecff7",size=1.8) +
  stat_qq_line(color="#f07050",linewidth=1) +
  labs(title="Q-Q dos Residuos Studentizados",
       x="Quantis Teoricos",y="Res. Student.") +
  theme_minimal(base_size=12)
p1+p2

Diagnóstico de Resíduos na Regressão

Verificação das Suposições da Regressão em R

library(ggplot2); library(patchwork)
set.seed(5)
xd <- 1:50; yd <- 5+1.2*xd+rnorm(50,0,5); mld <- lm(yd~xd)
df_d <- data.frame(ordem=1:50, fit=fitted(mld),
                   rst=rstudent(mld), res=residuals(mld))
p1 <- ggplot(df_d, aes(sample=rst)) +
  stat_qq(color="#7ecff7",size=2) +
  stat_qq_line(color="#f07050",linewidth=1.1) +
  labs(title="Q-Q: Normalidade dos Erros",
       x="Quantis Teo.",y="Res. Student.") +
  theme_minimal(base_size=12)
p2 <- ggplot(df_d, aes(x=ordem, y=rst)) +
  geom_point(color="#a8f77e",size=2) +
  geom_line(color="#a8f77e",alpha=.4) +
  geom_hline(yintercept=c(-2,0,2),
             linetype=c("dashed","solid","dashed"),
             color=c("#f07050","white","#f07050"),linewidth=.9) +
  labs(title="Res. vs Ordem (Independencia)",
       x="Observacao",y="Res. Student.") +
  theme_minimal(base_size=12)
p1+p2

Verificação das Suposições da Regressão em R

Distância de Cook e Gráfico de Influência

library(ggplot2)
set.seed(5)
xd <- c(1:49, 80)   # ponto 50 é alavancagem extrema
yd <- 5 + 1.2*xd + c(rnorm(49,0,5), 5)
mld2 <- lm(yd ~ xd)
cook  <- cooks.distance(mld2)
lev   <- hatvalues(mld2)
df_infl <- data.frame(obs=1:50, cook=cook, lev=lev,
                       flag=cook > 4/50)
ggplot(df_infl, aes(x=lev, y=cook, color=flag, size=cook)) +
  geom_point(alpha=.8) +
  scale_color_manual(values=c("#7ecff7","#f07050"),
                     labels=c("Normal","Influente")) +
  geom_hline(yintercept=4/50, linetype="dashed",
             color="#f7c87e", linewidth=1) +
  annotate("text", x=max(lev)*.9, y=4/50+.02,
           label="Cook D = 4/n", color="#f7c87e", size=4) +
  labs(title="Influência: Distância de Cook vs Alavancagem",
       x="Alavancagem (hat values)",
       y="Distância de Cook", color="", size="Cook D") +
  theme_minimal(base_size=13)

Distância de Cook e Gráfico de Influência

Pontos de Alavancagem e Influência

X Y Reta sem alavancagem Alavanca! Reta distorcida
  • Pontos com alta alavancagem não geram resíduos altos — enganam exames simplórios
  • Diagnosticar via distância de Cook (\(D_i > 4/n\) é regra prática de alerta)
cook <- cooks.distance(mld)
cat("Top-3 pontos de maior influencia (Cook's D):\n")
Top-3 pontos de maior influencia (Cook's D):
print(round(sort(cook, decreasing=TRUE)[1:3], 5))
      5      44       2 
0.08746 0.07852 0.07258 

Exercício 7 — Regressão Linear

Exercício 7: Pressão de injeção (\(X\), bar) e porosidade de peças (\(Y\), %):

\(X\) 80 90 100 110 120 130 140
\(Y\) 12.1 10.8 9.2 7.5 6.3 5.8 4.9

(a) Ajuste um modelo de Regressão Linear Simples. Interprete \(\hat{\beta}_0\) e \(\hat{\beta}_1\).

(b) Calcule e interprete \(R^2\) e \(R^2_{adj}\).

(c) Construa o Q-Q dos resíduos e o gráfico Resíduo Studentizado vs \(\hat{Y}\). Os pressupostos são atendidos?

(d) Preveja a porosidade para \(X = 115\) bar com IP de predição de 95%.

Exercício 8 — Análise Completa

Exercício 8 (Integrador): Um processo de fabricação de vidro é monitorado. Coletou-se a espessura (mm) de 12 peças em cada um de 3 turnos:

Turno A: 4.82, 4.95, 5.01, 4.88, 5.10, 4.79, 4.93, 5.05, 4.86, 4.97, 5.02, 4.91

Turno B: 5.12, 4.98, 5.25, 5.08, 5.31, 4.95, 5.18, 5.22, 5.04, 5.15, 5.28, 5.09

Turno C: 4.91, 4.88, 4.95, 4.84, 5.02, 4.79, 4.93, 4.86, 5.05, 4.90, 4.97, 4.83

(a) Construa boxplots comparativos. Os turnos parecem diferentes?

(b) Valide a normalidade dos dados de cada turno com Q-Q Plot e Shapiro-Wilk.

(c) Realize a ANOVA (\(\alpha = 0{,}05\)). Os turnos diferem significativamente?

(d) Compare os Turnos A e C com um Teste-t bilateral. Há diferença na média? E na variância (Teste F)?

Alternativas Não Paramétricas

Quando os pressupostos de normalidade não são atendidos e \(n\) é pequeno:

Situação Teste Paramétrico Alternativa Não Paramétrica
1 amostra vs mediana Teste-t Wilcoxon Signed-Rank
2 amostras independentes Teste-t Mann-Whitney (Wilcoxon)
2 amostras pareadas Teste-t Pareado Wilcoxon Signed-Rank
k amostras independentes ANOVA Kruskal-Wallis
# Kruskal-Wallis: alternativa não paramétrica à ANOVA
kruskal.test(resist ~ forno, data=dados)

    Kruskal-Wallis rank sum test

data:  resist by forno
Kruskal-Wallis chi-squared = 12.658, df = 2, p-value = 0.001784

Testes não paramétricos têm menor poder que os paramétricos quando a normalidade é válida — use-os apenas quando os pressupostos são violados e \(n\) não é grande.

Resumo dos Testes Estatísticos

Objetivo Teste Estatística Distribuição
Média (\(\sigma\) conhecido) Z \((\bar{x}-\mu_0)/(\sigma/\sqrt{n})\) \(N(0,1)\)
Média (\(\sigma\) desconhecido) t \((\bar{x}-\mu_0)/(s/\sqrt{n})\) \(t_{n-1}\)
Variância \(\chi^2\) \((n-1)s^2/\sigma_0^2\) \(\chi^2_{n-1}\)
Proporção Z \((\hat{p}-p_0)/\sqrt{p_0(1-p_0)/n}\) \(N(0,1)\)
2 médias (var. iguais) t pooled \((\bar{x}_1-\bar{x}_2)/(S_p\sqrt{1/n_1+1/n_2})\) \(t_{n_1+n_2-2}\)
2 médias (var. dif.) Welch idem, GL efetivos \(t_\nu\)
2 variâncias F \(s_1^2/s_2^2\) \(F_{n_1-1,n_2-1}\)
k médias ANOVA \(MQTrat/MQE\) \(F_{a-1,N-a}\)

Da Inferência ao CEP: A Ponte

  • Toda a inferência dos capítulos 3 e 4 fundamenta diretamente o Controle Estatístico do Processo
  • Os limites de controle \(\mu \pm 3\sigma\) do Gráfico \(\bar{x}\) são um intervalo de predição com \(\alpha \approx 0{,}27\%\)
  • A detecção de causas especiais equivale a rejeitar \(H_0\): “o processo está sob controle”
  • Os índices de capacidade \(C_p\) e \(C_{pk}\) são funções diretas dos parâmetros estimados \(\hat{\mu}\) e \(\hat{\sigma}\)
Distribuição Normal
Fundamenta os limites
3-sigma do CEP
Teste-t e ANOVA
Detectam mudanças
de processo (causas especiais)
Regressão
Modela Y = f(X) para
otimizar o processo

Os Capítulos 3 e 4 no DMAMC

🎯
Definir

📏
Medir

Cap. 3
Distribuições
Q-Q · Histograma

🔍
Analisar

Cap. 4
Testes · ANOVA
Regressão

⚙️
Melhorar

🔒
Controlar

Os capítulos 3 e 4 fornecem o arsenal analítico das fases Medir e Analisar do DMAMC.

Conclusão Geral

  • As distribuições padronizam o mundo produtivo — de Bernoulli a Weibull, cada uma com fp/fdp e fda definidas
  • O TCL blinda os testes quando as populações apresentam anomalias, garantindo o CEP operante no eixo \(\bar{x}\)
  • Os testes Z, t, F, \(\chi^2\) e ANOVA estruturam auditorias que removem as suposições enganosas
  • A Regressão Linear quantifica as alavancas preditivas usadas para intervir no processo
  • Todo resultado repousa em suposições verificáveis — sem diagnóstico de resíduos, a conclusão não tem validade estatística

Próximos Passos

  • “Métodos Básicos de CEP e Análise de Capacidade”
  • Uso massificado dos Gráficos de Controle em tempo real

\[\bar{x}\text{-}R \qquad \bar{x}\text{-}S \qquad p \qquad np \qquad c \qquad u\]

  • Consolidação da Capacidade de Processo:

\[C_p = \frac{LSE - LIE}{6\sigma} \qquad C_{pk} = \min\!\left(\frac{LSE-\mu}{3\sigma},\;\frac{\mu-LIE}{3\sigma}\right)\]

Referências

  • Montgomery, D. C. Introduction to Statistical Quality Control. 7ª ed. Wiley, 2017.
  • Casella, G.; Berger, R. L. Statistical Inference. 2ª ed. Duxbury, 2002.
  • Faraway, J. J. Linear Models with R. 2ª ed. CRC Press, 2014.
  • Wickham, H.; Grolemund, G. R for Data Science. O’Reilly, 2017.
  • Ryan, T. P. Statistical Methods for Quality Improvement. 3ª ed. Wiley, 2011.

Obrigado!

Controle Estatístico de Processos · UFPB

Bacharelado em Estatística e Ciência de Dados

Prof. Marcelo R.P. Ferreira · DE-UFPB