The decimal point is 1 digit(s) to the right of the |
1 | 112334
1 | 558
2 | 01334
2 | 7
3 | 13
3 | 5
Baseado nos Capítulos 3 e 4 - Montgomery, D. C. (2017)
DE-UFPB - Bacharelado em Estatística e Ciência de Dados
maio, 2026
“Sem dados, você é apenas mais uma pessoa com uma opinião.”
— W. Edwards Deming
Exemplo: Um servidor da UFPB registra tempos de resposta (ms). Visualizar a distribuição sem perder a informação individual de cada registro.
Leitura: Cada linha representa um ramo. As folhas são os últimos dígitos. O símbolo | separa ramo de folhas.
1 | 112334 e 1 | 558 → valores: 11, 11, 12, 13, 13, 14, 15, 15, 182 | 01334 e 2 | 7 → valores: 20, 21, 23, 23, 24, 273 | 13 e 3 | 5 → valores: 31, 33, 35O diagrama revela imediatamente:
Para amostras maiores, usa-se o parâmetro
scalepara aumentar ou reduzir o número de linhas.
Regra de Sturges:
\[k \approx \sqrt{n} \qquad \text{ou} \qquad k \approx 1 + 3{,}322\,\log_{10}(n)\]
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)\[\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.
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)Além de centro e dispersão, a forma da distribuição é essencial para o CEP:
\[\gamma_1 = \frac{\frac{1}{n}\sum(x_i-\bar{x})^3}{s^3}\]
\[\gamma_2 = \frac{\frac{1}{n}\sum(x_i-\bar{x})^4}{s^4}\]
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)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: 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}\).
Para uma variável aleatória discreta \(X\):
Para uma variável aleatória contínua \(X\):
\[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)\]
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\).
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
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\[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}\]
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?
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\[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.
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)\))?
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\[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(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| 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: 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)\).
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\)
\[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)}\]
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?
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\[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)\]
Exemplo: Tempos de reparo com \(\mu_{\ln} = 1\), \(\sigma_{\ln} = 0{,}5\). Qual a chance do reparo exceder 5 horas?
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 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?
Z_LIE = -2.00 | Z_LSE = 2.00
P(LIE < X < LSE) = 0.9545 (95.45%)
Frac. fora da especificacao: 0.0455 (4.55%)
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\[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?
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\[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\))?
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\[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 |
Exemplo: Vida útil (meses) com \(\beta = 2\), \(\theta = 10\). Qual a chance de falhar antes de 5 meses?
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| 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: 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?
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)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)Complementam o Q-Q Plot com um teste de hipótese formal:
=== Dados Normais ===
Shapiro-Wilk normality test
data: dados_norm
W = 0.98021, p-value = 0.5611
=== Dados Exponenciais ===
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.
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.
Distribuições Amostrais
TCL
→
Testes \(Z\), \(t\), \(\chi^2\)
1 amostra
→
Testes \(t\), \(F\)
2 amostras
→
ANOVA
\(k\) grupos
→
Regressão
Linear
\[\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)| 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 |
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\[n = \left(\frac{(Z_{\alpha/2} + Z_{\beta})\,\sigma}{\delta}\right)^2\]
\[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%.
Z0=1.5492 | p=0.1213 | IC 95%: [9.9470; 10.4530]
Nao rejeita H0
O valor-p é o menor nível \(\alpha\) no qual rejeitaríamos \(H_0\) com os dados observados.
⚠️ Não confundir: “não rejeitar \(H_0\)” não é o mesmo que “provar \(H_0\) verdadeira” — é simplesmente insuficiência de evidência.
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)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)\[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.
\[\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]
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)\[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: 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\)?
\[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.
t=5.8000 | GL=8 | p=0.000405
IC 95%: [0.3494; 0.8106]
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")\[\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.
[Welch] GL_ef=17.64 | p=0.9476
Pareado: Mesma peça antes e após calibração.
Teste F: Máquina A vs Máquina B — verificar se variâncias são iguais. \(H_0: \sigma_1^2 = \sigma_2^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?
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.
\(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)
Modelo:
\[y_{ij} = \mu + \tau_i + \epsilon_{ij}, \quad \epsilon_{ij} \sim N(0,\sigma^2)\]
Decomposição: \(SQT = SQTrat + SQE\), onde:
| Fonte | GL | SQ | MQ | \(F_0\) |
|---|---|---|---|---|
| Tratamentos | \(a-1\) | \(SQTrat\) | \(MQTrat\) | \(MQTrat/MQE\) |
| Erro | \(N-a\) | \(SQE\) | \(MQE\) | — |
| Total | \(N-1\) | \(SQT\) | — | — |
Exemplo: Resistência mecânica de corpos de prova em 3 tipos de forno (\(n = 5\) cada).
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
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")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 + p2Levene'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.
Quando a ANOVA rejeita \(H_0\), queremos saber quais grupos diferem. Métodos clássicos:
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
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).
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).
Bartlett test of homogeneity of variances
data: resist by forno
Bartlett's K-squared = 1.503, df = 2, p-value = 0.4717
| 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: 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”?
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\]
Suposições (obrigatórias para inferência válida):
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\]
Exemplo: Concentração do solvente \(X\) (%) vs força de adesão \(Y\) (MPa). Modelo: \(Y = \beta_0 + \beta_1 X + \epsilon\).
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
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)| 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 |
\[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.
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\).
(Intercept) temp dens
-12.3 2.6 1.5
R2=0.9825 | R2_adj=0.9651
\[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}\]
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)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)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+p2library(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+p2library(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)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 (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)?
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 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.
| 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}\) |
—
Cap. 3
Distribuições
Q-Q · Histograma
Cap. 4
Testes · ANOVA
Regressão
—
—
Os capítulos 3 e 4 fornecem o arsenal analítico das fases Medir e Analisar do DMAMC.
\[\bar{x}\text{-}R \qquad \bar{x}\text{-}S \qquad p \qquad np \qquad c \qquad u\]
\[C_p = \frac{LSE - LIE}{6\sigma} \qquad C_{pk} = \min\!\left(\frac{LSE-\mu}{3\sigma},\;\frac{\mu-LIE}{3\sigma}\right)\]
Obrigado!
Controle Estatístico de Processos · UFPB
Bacharelado em Estatística e Ciência de Dados
Prof. Marcelo R.P. Ferreira · DE-UFPB
CEP - DE-UFPB - Estatística e Ciência de Dados