Controle Estatístico de Processos: Gráficos para Variáveis

Baseado no Capítulo 6 — Montgomery, D. C. (2017)

Prof. Marcelo R.P. Ferreira

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

junho, 2026

Controle Estatístico de Processos

Estabilizar a dispersão é sempre o primeiro passo — só depois disso a média tem um referencial confiável para ser julgada.

Mapa do Capítulo 6

Capítulo 6 — Variáveis x̄-R / x̄-s Fase I e Fase II Indivíduos (I-MR) s² · valores de referência Capacidade Cp · Cpk · Cpm Curva OC · ARL · ATS Decisão: qual gráfico usar?

Agenda

  • Por que controlar média e dispersão simultaneamente
  • O par \(\bar x\)-R: base estatística, Fase I, Fase II, subgrupos racionais
  • Padrões não aleatórios específicos de variáveis e o efeito da não normalidade
  • Capacidade do processo: \(C_p\), \(C_{pk}\), \(C_{pm}\)
  • Curva OC, ARL e ATS para o gráfico \(\bar x\)
  • O par \(\bar x\)-s, o gráfico \(s^2\), tamanho de amostra variável
  • O gráfico de Indivíduos (I-MR)
  • Um exemplo real do livro-texto, do início ao fim

Configuração do Ambiente em R

library(ggplot2)
library(qcc)
library(patchwork)

pal <- c(azul   = "#7ecff7",
         verde  = "#4f9d6e",
         ambar  = "#f7c87e",
         roxo   = "#c87ef7",
         coral  = "#f07050",
         neutro = "#aab4c8")

tema_cep <- function(base_size = 13) {
  theme_minimal(base_size = base_size) +
    theme(plot.title = element_text(face = "bold"),
          panel.grid.minor = element_blank())
}

plot_carta <- function(stat, center, lic, lsc, titulo, ylab = "Estatística") {
  df <- data.frame(t = seq_along(stat), y = stat)
  df$fora <- df$y > lsc | df$y < lic
  ggplot(df, aes(t, y)) +
    geom_line(color = pal["neutro"], linewidth = .6) +
    geom_point(aes(color = fora), size = 2.6) +
    scale_color_manual(values = c(`FALSE` = unname(pal["azul"]),
                                   `TRUE`  = unname(pal["coral"])), guide = "none") +
    geom_hline(yintercept = c(lsc, center, lic),
               color = c(pal["coral"], pal["verde"], pal["coral"]),
               linetype = c("dashed", "solid", "dashed"), linewidth = .8) +
    labs(title = titulo, x = "Amostra", y = ylab) +
    tema_cep()
}

Por que Gráficos para Variáveis?

  • Características de qualidade mensuráveis numericamente: massa, tempo, temperatura, tensão, diâmetro
  • Maior densidade de informação por unidade amostrada do que uma simples classificação passa/falha
  • Permitem tamanhos amostrais reduzidos (\(n=4,5\) ou \(6\)) e ainda detectam deslocamentos moderados a grandes (\(\ge 2\sigma\))
  • Hipótese de base de Shewhart: a característica de qualidade segue, ao menos aproximadamente, uma distribuição Normal

A Necessidade de Controle Duplo

  • Uma característica \(x \sim N(\mu,\sigma^2)\) é descrita por dois parâmetros: localização e dispersão
  • Controlar só a média não detecta um processo cuja variância aumentou (processo que “alarga”)
  • Controlar só a dispersão não detecta um processo cujo centro se deslocou (processo que “desliza” do alvo)
  • Por isso aplicamos sempre um par simultâneo de gráficos: \(\bar{x}\) e \(R\) (ou \(s\))

Visualizando os Dois Modos de Falha

Clique para ver o código
set.seed(1)
mu0 <- 50; sigma0 <- 2
d_alvo    <- data.frame(x = rnorm(2000, mu0,   sigma0),   g = "No alvo")
d_desloc  <- data.frame(x = rnorm(2000, mu0+5, sigma0),   g = "Média deslocada")
d_var     <- data.frame(x = rnorm(2000, mu0,   sigma0*2), g = "Variância inflada")

p1 <- ggplot(rbind(d_alvo, d_desloc), aes(x, fill = g)) +
  geom_density(alpha = .55) +
  scale_fill_manual(values = c("No alvo" = unname(pal["azul"]),
                                "Média deslocada" = unname(pal["coral"]))) +
  labs(title = "Deslocamento da média", x = "x", y = "", fill = "") + tema_cep(11)

p2 <- ggplot(rbind(d_alvo, d_var), aes(x, fill = g)) +
  geom_density(alpha = .55) +
  scale_fill_manual(values = c("No alvo" = unname(pal["azul"]),
                                "Variância inflada" = unname(pal["ambar"]))) +
  labs(title = "Aumento da variância", x = "x", y = "", fill = "") + tema_cep(11)

p1 + p2

Base Estatística dos Gráficos \(\bar{X}\) e \(R\)

  • Seja \(x\) a característica de qualidade, com \(x \sim N(\mu,\sigma^2)\)
  • Extrai-se um subgrupo de tamanho \(n\) a cada instante (lote, hora, turno)
  • Para cada subgrupo calculam-se a média \(\bar{x}\) e a amplitude \(R\)
  • A média amostral é um estimador não viesado de \(\mu\), com variância inversamente proporcional a \(n\)

\[\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i \qquad \sigma_{\bar{x}} = \frac{\sigma}{\sqrt{n}}\]

O TCL Como Alicerce — Revisitando a Aula 2

  • Na Aula 2 (Cap. 3-4) já formalizamos o Teorema Central do Limite e vimos sua demonstração via simulação
  • Aqui ele cumpre um papel específico: garante que \(\bar{x}\) se aproxima da Normal mesmo quando \(x\) não é exatamente normal
  • Para \(n \ge 4\) ou \(5\), a aproximação já é satisfatória mesmo com distribuições moderadamente assimétricas
  • Essa robustez é o que permite usar limites \(3\sigma\) no gráfico \(\bar x\) com confiança, mesmo sem normalidade perfeita dos dados individuais

Notação e Convenções do Capítulo

Símbolo Significado
\(n\) Tamanho do subgrupo
\(m\) Número de subgrupos coletados na Fase I
\(\bar{x}_i\), \(R_i\), \(s_i\) Média, amplitude e desvio-padrão do subgrupo \(i\)
\(\bar{\bar{x}}\), \(\bar{R}\), \(\bar{s}\) Médias globais ao longo dos \(m\) subgrupos
\(\hat{\sigma}\) Estimativa do desvio-padrão do processo

Esta notação será usada de forma consistente em todo o capítulo.

Limites de Controle com Parâmetros Conhecidos (Parte 1)

  • Quando \(\mu\) e \(\sigma\) são conhecidos (valores de projeto, padrão histórico ou especificação)
  • Sob normalidade, \(P(LIC \le \bar{x} \le LSC) = 1-\alpha\) define uma faixa de variação natural do processo
  • Os limites de probabilidade usam o quantil \(Z_{\alpha/2}\) da Normal padrão

\[LIC,\ LSC = \mu \pm Z_{\alpha/2}\,\frac{\sigma}{\sqrt{n}}\]

Limites de Controle com Parâmetros Conhecidos (Parte 2)

  • Shewhart padronizou a prática americana adotando \(L=3\) no lugar do quantil \(Z_{\alpha/2}\) — os limites “três-sigma”
  • Sob normalidade, isso corresponde a \(\alpha \approx 0{,}0027\)
  • Em média, 2,7 alarmes falsos ocorrem a cada 1.000 amostras de um processo perfeitamente sob controle

\[LSC = \mu + 3\frac{\sigma}{\sqrt{n}} \qquad LIC = \mu - 3\frac{\sigma}{\sqrt{n}}\]

Cálculo de Limites Conhecidos no R

Exemplo: uma máquina opera com \(\mu=50\) e \(\sigma=2\) (valores de projeto), com subgrupos de \(n=4\). Qual o LSC do gráfico \(\bar{x}\)?

mu <- 50; sigma <- 2; n <- 4
s_xb <- sigma / sqrt(n)
LSC <- mu + 3 * s_xb
LIC <- mu - 3 * s_xb
cat(sprintf("sigma_xbar = %.3f\nLIC = %.3f | LM = %.1f | LSC = %.3f\n", s_xb, LIC, mu, LSC))
sigma_xbar = 1.000
LIC = 47.000 | LM = 50.0 | LSC = 53.000

Por que Não Usar Sempre Parâmetros Conhecidos?

  • Na prática industrial, \(\mu\) e \(\sigma\) raramente são conhecidos a priori com confiabilidade suficiente
  • Padrões de projeto podem não refletir o que o processo realmente é capaz de entregar
  • Por isso a maior parte da prática real do CEP começa pela Fase I: estimar os parâmetros a partir do próprio histórico do processo

Parâmetros Desconhecidos: a Fase I

  • Inicia-se uma Fase I: análise retrospectiva de \(m\) subgrupos históricos (recomenda-se \(m=20\) a \(25\))
  • Os limites calculados nesta fase são tentativos: servem para depurar o histórico, não para monitorar o futuro
  • A média global estima o centro do processo

\[\bar{\bar{x}} = \frac{1}{m}\sum_{i=1}^{m} \bar{x}_i\]

O Método da Amplitude (\(R\))

  • Antes da computação barata, estimar \(\sigma\) via desvio-padrão amostral era custoso; a amplitude é mais simples de calcular manualmente
  • A amplitude usa apenas os valores extremos do subgrupo, por isso é eficiente para amostras pequenas (\(n \le 10\))

\[R = x_{max} - x_{min}\]

Estimador de \(\sigma\) Baseado em \(R\) (Parte 1)

  • A variável relativa \(W = R/\sigma\) tem distribuição que depende apenas de \(n\) — a “amplitude relativa”
  • \(E(W) = d_2\), uma constante tabelada (Apêndice VI de Montgomery) que depende só de \(n\)

Estimador de σ Baseado em \(R\) (Parte 2)

  • Usa-se a média das amplitudes dos \(m\) subgrupos, \(\bar{R}\), para estimar \(\sigma\)esta é a direção que realmente importa na prática: a partir do que foi observado, estimamos o parâmetro desconhecido

\[\hat{\sigma} = \frac{\bar{R}}{d_2}\]

Calculando \(\hat{\sigma}\) Empírico no R

Exemplo: 25 lotes de tamanho \(n=5\) produziram \(\bar{R}=2{,}5\). Usando \(d_2=2{,}326\) (tabela de constantes para \(n=5\)), qual o desvio-padrão nativo do processo?

R_barra <- 2.5
d2 <- 2.326
sigma_est <- R_barra / d2
cat(sprintf("Sigma estimado: %.4f\n", sigma_est))
Sigma estimado: 1.0748

A Tabela de Constantes (Apêndice VI)

\(n\) \(d_2\) \(D_3\) \(D_4\) \(A_2\)
2 1,128 0 3,267 1,880
3 1,693 0 2,574 1,023
4 2,059 0 2,282 0,729
5 2,326 0 2,114 0,577
6 2,534 0 2,004 0,483
7 2,704 0,076 1,924 0,419

Tabela completa no Apêndice VI de Montgomery — consulte sempre que precisar de outro \(n\).

Desenvolvimento do Gráfico R

  • É preciso estabilizar a dispersão antes de avaliar a locação: sem isso, \(\hat\sigma\) não é confiável
  • O desvio-padrão da amplitude é \(\hat\sigma_R = d_3\hat\sigma\), com \(d_3\) tabelado junto a \(d_2\)
  • Substituindo \(\hat\sigma=\bar{R}/d_2\) na expressão \(\bar{R}\pm 3\hat\sigma_R\), agrupam-se as constantes em \(D_3\) e \(D_4\)

\[LSC_R = D_4\bar{R} \qquad LIC_R = D_3\bar{R} \qquad LM_R = \bar{R}\]

Por que \(D_3=0\) é tão Comum

  • Para \(n \le 6\), a tabela mostra \(D_3=0\): o limite inferior do gráfico R é truncado em zero
  • Isso ocorre porque, para subgrupos pequenos, a distribuição de \(R\) é suficientemente assimétrica e próxima de zero que o limite inferior teórico seria negativo
  • Só a partir de \(n=7\) a tabela passa a fornecer um \(D_3\) positivo, permitindo detectar dispersão anormalmente baixa

Gráfico \(R\) no R via qcc

Clique para ver o código
set.seed(42)
dados <- matrix(rnorm(100, 10, 1), ncol = 5)   # 20 subgrupos, n = 5

g_R <- qcc(dados, type = "R", plot = FALSE)
plot_carta(g_R$statistics, g_R$center, g_R$limits[1,"LCL"], g_R$limits[1,"UCL"],
           "Gráfico R — amplitudes amostrais", ylab = "R")

Interpretando o Gráfico \(R\) Antes de Seguir

  • Se o gráfico \(R\) mostra causas atribuíveis (pontos fora dos limites), a dispersão do processo não está estável
  • Investigar e, se confirmada a causa, expurgar antes de avançar para o gráfico \(\bar x\)
  • Só com o gráfico \(R\) aprovado é que \(\bar R\) se torna um estimador confiável de \(\sigma\) para o próximo passo

Fechando os Limites do Gráfico \(\bar{X}\) (Parte 1)

  • Com o gráfico R aprovado (sem causas atribuíveis na dispersão), seguimos para o gráfico de médias
  • Substitui-se \(\sigma\) pela estimativa empírica \(\bar{R}/d_2\) na fórmula dos limites três-sigma

\[LSC,\ LIC = \bar{\bar{x}} \pm 3\,\frac{\bar{R}}{d_2\sqrt{n}}\]

Fechando os Limites do Gráfico \(\bar{X}\) (Parte 2)

  • Para simplificar o uso em planilhas e no chão de fábrica, agrupa-se o termo numa única constante tabelada \(A_2\)

\[A_2 = \frac{3}{d_2\sqrt{n}}\]

\[LSC_{\bar{x}} = \bar{\bar{x}} + A_2\bar{R} \qquad LIC_{\bar{x}} = \bar{\bar{x}} - A_2\bar{R}\]

Exemplo de Referência: Anéis de Pistão (Montgomery)

Anéis de pistão para motores de automóveis são fabricados por um processo cujo diâmetro interno precisa de controle estatístico. 25 amostras (\(m\)) de tamanho 5 (\(n\)) foram extraídas quando o processo estava sob controle. Este é o mesmo exemplo de referência usado na Aula 3, e usaremos os mesmos dados — o dataset pistonrings já vem embutido no pacote qcc.

library(qcc)
data(pistonrings)
diameter <- qcc.groups(pistonrings$diameter, pistonrings$sample)
dim(diameter)
[1] 40  5

Gráfico \(R\) — Anéis de Pistão

Clique para ver o código
g_R_pist <- qcc(diameter[1:25, ], type = "R", plot = FALSE)
plot_carta(g_R_pist$statistics, g_R_pist$center,
           g_R_pist$limits[1,"LCL"], g_R_pist$limits[1,"UCL"],
           "Gráfico R — Anéis de Pistão (Fase I)", ylab = "R")
Clique para ver o código
cat(sprintf("R_bar = %.5f | LSC = %.5f | LIC = %.5f\n",
            g_R_pist$center, g_R_pist$limits[1,"UCL"], g_R_pist$limits[1,"LCL"]))
R_bar = 0.02276 | LSC = 0.04813 | LIC = 0.00000

Nenhum ponto fora dos limites, nenhum padrão não aleatório — a dispersão está sob controle.

Gráfico \(\bar{X}\) — Anéis de Pistão

Clique para ver o código
g_x_pist <- qcc(diameter[1:25, ], type = "xbar", plot = FALSE)
plot_carta(g_x_pist$statistics, g_x_pist$center,
           g_x_pist$limits[1,"LCL"], g_x_pist$limits[1,"UCL"],
           "Gráfico x̄ — Anéis de Pistão (Fase I)", ylab = expression(bar(x)))
Clique para ver o código
cat(sprintf("x_bar_bar = %.5f | LSC = %.5f | LIC = %.5f\n",
            g_x_pist$center, g_x_pist$limits[1,"UCL"], g_x_pist$limits[1,"LCL"]))
x_bar_bar = 74.00118 | LSC = 74.01430 | LIC = 73.98805

Ambos os gráficos sob controle: estes limites tentativos tornam-se a referência da Fase II.

Fase II na Prática: Validando Novos Dados com qcc

O dataset pistonrings traz 40 amostras no total — as 15 últimas representam produção após a Fase I, usadas aqui para simular o monitoramento em Fase II com newdata=:

Clique para ver o código
q_fase2 <- qcc(diameter[1:25, ], type = "xbar", newdata = diameter[26:40, ], plot = FALSE)
cat("Amostras da Fase II fora de controle:", q_fase2$violations$beyond.limits, "\n")
Amostras da Fase II fora de controle: 37 38 39 
  • Os limites permanecem congelados nos valores estimados pela Fase I — exatamente a definição de Fase II que vimos antes
  • qcc reaproveita a mesma linha central e os mesmos limites para avaliar cada novo ponto, sem recalcular nada

Limites 2-Sigma e Limites de Alerta

O argumento nsigmas permite comparar limites mais “apertados” (2-sigma) com os usuais (3-sigma); a função limits.xbar() calcula limites de alerta para sobrepor ao gráfico sem alterar os limites de ação:

Clique para ver o código
q_2s <- qcc(diameter[1:25, ], type = "xbar", newdata = diameter[26:40, ],
            nsigmas = 2, plot = FALSE)
limites_alerta <- limits.xbar(q_fase2$center, q_fase2$std.dev, q_fase2$sizes, 2)
cat(sprintf("Limites 3-sigma: [%.4f; %.4f]\n", q_fase2$limits[1,"LCL"], q_fase2$limits[1,"UCL"]))
Limites 3-sigma: [73.9880; 74.0143]
Clique para ver o código
cat(sprintf("Limites 2-sigma: [%.4f; %.4f]\n", q_2s$limits[1,"LCL"], q_2s$limits[1,"UCL"]))
Limites 2-sigma: [73.9924; 74.0099]

Limites 2-sigma sinalizam mais cedo, mas multiplicam falsos alarmes — por isso costumam ser usados como alerta (zona intermediária), não como limite de ação.

O Par Completo: Leitura Conjunta

  • \(\bar x\) e \(R\) não são dois gráficos independentes — são uma leitura conjunta do mesmo processo
  • Um gráfico \(\bar x\) “limpo” não significa nada se o gráfico \(R\) associado estiver fora de controle: os limites de \(\bar x\) teriam sido calculados sobre uma base instável
  • Rotina padrão: sempre revisar o gráfico \(R\) (ou \(s\)) primeiro, a cada novo ciclo de monitoramento

Expurgo Analítico na Fase I

  • A Fase I depura os dados históricos: limites obtidos com dados “sujos” são apenas tentativos
  • Procuram-se pontos fora de controle e investigam-se causas atribuíveis documentadas
  • Confirmada a causa, o subgrupo contaminado é excluído e os limites são recalculados
  • O processo se repete até que todos os subgrupos restantes estejam sob controle

Simulação de Expurgo no qcc

Clique para ver o código
set.seed(8)
matriz <- matrix(rnorm(50, 50, 2), ncol = 5)
matriz[5, ] <- matriz[5, ] + 10   # causa atribuível grave no subgrupo 5

q_fase1 <- qcc(matriz, type = "xbar", plot = FALSE)
cat("Subgrupo(s) expurgado(s):", q_fase1$violations$beyond.limits, "\n")
Subgrupo(s) expurgado(s): 5 
Clique para ver o código
plot_carta(q_fase1$statistics, q_fase1$center, q_fase1$limits[1,"LCL"], q_fase1$limits[1,"UCL"],
           "Fase I: detecção de causa atribuível", ylab = expression(bar(x)))

Quantos Ciclos de Expurgo São Necessários?

  • Não há um número fixo — o expurgo continua até que nenhum ponto restante sinalize fora de controle
  • Cada exclusão deve ter justificativa documentada; expurgar sem causa identificada é manipulação dos dados, não depuração legítima
  • Se muitos subgrupos forem excluídos, isso é um sinal de que o processo, como um todo, é instável — talvez a Fase I precise recomeçar com mais dados

Transição para a Fase II

  • Encerrado o expurgo retrospectivo, os parâmetros estimados são “congelados”
  • O CEP migra para o monitoramento prospectivo: a Fase II
  • Os limites deixam de se adaptar; servem como referência fixa para avaliar dados futuros em tempo real

Subgrupos Racionais (Conceito-Chave de Shewhart)

  • A eficácia do gráfico de controle depende de como os subgrupos são formados, não só do seu tamanho
  • Abordagem 1 (mais comum): maximizar a chance de uma mudança aparecer entre subgrupos, minimizando a variação dentro de cada subgrupo (ex.: 5 peças consecutivas)
  • O gráfico \(\bar{x}\) monitora a variabilidade entre amostras; o gráfico \(R\) mede a variabilidade dentro de cada amostra

O Problema do Subgrupo Misto

  • Misturar produção de turnos, máquinas ou operadores diferentes no mesmo subgrupo mascara causas atribuíveis reais
  • Se cada subgrupo já contém a variação entre turnos, o gráfico \(R\) “absorve” essa variação como se fosse normal — e o gráfico \(\bar x\) fica artificialmente insensível a mudanças reais de nível
set.seed(5)
turno_A <- rnorm(15, 50, 1); turno_B <- rnorm(15, 53, 1)
subgrupo_misto <- matrix(c(turno_A, turno_B), ncol = 5)
cat(sprintf("Amplitude media (misto): %.3f\n",
            mean(apply(subgrupo_misto, 1, function(x) diff(range(x))))))
Amplitude media (misto): 4.355

Abordagem 2: Subgrupos ao Longo do Tempo

  • Em vez de 5 peças consecutivas, às vezes amostra-se 1 peça por hora, repetida 5 vezes ao longo do turno
  • Essa abordagem é útil quando o interesse é detectar deriva lenta ao longo do tempo, não diferenças instantâneas entre peças vizinhas
  • Trade-off: o gráfico \(R\) passa a incluir variação real entre os horários — limites ficam mais largos, mas a leitura é mais representativa do turno inteiro

Gráficos Baseados em Valores de Referência

  • Quando contratos, normas ou auditorias já fornecem \(\mu\) e \(\sigma\) como padrão (em vez de estimados na Fase I)
  • O processo é avaliado diretamente contra esse padrão externo, sem etapa exploratória
  • Usa-se a constante tabelada \(A\) no lugar de \(A_2\) (que depende de \(\bar{R}\)), e \(D_1\), \(D_2\) no lugar de \(D_3\), \(D_4\)

\[LSC_{\bar{x}} = \mu + A\sigma \qquad LSC_R = D_2\sigma \qquad LIC_R = D_1\sigma\]

Convertendo Parâmetros de Referência no R

Exemplo: a norma exige \(\mu=100\), \(\sigma=8\). Para \(n=4\), a tabela dá \(A=1{,}50\), \(D_2=4{,}698\), \(D_1=0\). Quais os limites?

mu <- 100; sigma <- 8; A <- 1.50; D1 <- 0; D2 <- 4.698
LSC_x <- mu + A * sigma
LSC_R <- D2 * sigma
cat(sprintf("LSC (x-barra) = %.1f\nLSC (R) = %.3f | LIC (R) = %.3f\n", LSC_x, LSC_R, D1*sigma))
LSC (x-barra) = 112.0
LSC (R) = 37.584 | LIC (R) = 0.000

Quando Usar Valor de Referência em Vez de Fase I

  • Use valor de referência quando: o cliente exige conformidade a um padrão fixo, há histórico extenso e já validado de outra linha idêntica, ou normas regulatórias definem o alvo
  • Use Fase I quando: o processo é novo, está sendo otimizado, ou não há nenhum padrão externo confiável
  • Um erro comum é usar valores de referência “estimados de memória” sem validação — isso é diferente de um padrão verdadeiramente externo e auditado

Identificando Assimetria Oculta: o Padrão “Cone”

  • Padrão tipo cone: à medida que \(\bar{x}\) aumenta, a amplitude \(R\) também cresce
  • Indica que média e dispersão não são independentes — assinatura típica de dados não normais (ex.: lognormal)
  • Sob normalidade verdadeira, média e variância amostrais são estatisticamente independentes

O Efeito Oculto da Não Normalidade

  • O gráfico \(\bar{x}\) é relativamente robusto a desvios de normalidade, graças ao próprio Teorema Central do Limite
  • O gráfico \(R\) é mais sensível: depende diretamente das caudas (\(x_{max}-x_{min}\)), que o TCL não suaviza
  • Distribuições assimétricas (lognormal, exponencial) inflam a taxa de falsos alarmes do gráfico \(R\) mais do que do gráfico \(\bar x\)

Validando a Suposição na Fase I

  • Antes de confiar nos limites \(3\sigma\), é prática padrão validar a normalidade dos dados individuais da Fase I
  • O Q-Q plot e os testes formais (Shapiro-Wilk) já foram apresentados na Aula 2 — aqui o uso é específico: validar os dados antes de calcular os limites, não depois
Clique para ver o código
set.seed(33)
df_qq <- data.frame(x = rnorm(50, 0, 1))
ggplot(df_qq, aes(sample = x)) +
  stat_qq(color = pal["azul"], size = 1.8) +
  stat_qq_line(color = pal["coral"], linewidth = 1) +
  labs(title = "Q-Q Plot: avaliação visual de normalidade") +
  tema_cep()

E se os Dados Não Forem Normais?

  • Transformações (Box-Cox, log) podem aproximar os dados de uma Normal antes de calcular os limites
  • Alternativa: usar limites baseados na distribuição real (mais raro em variáveis, comum em atributos — veremos no Capítulo 7)
  • Documentar a não normalidade é importante mesmo se a decisão final for “seguir com os limites \(3\sigma\) aproximados” — a robustez do \(\bar x\) ajuda, mas não é absoluta

Outros Padrões Não Aleatórios em Variáveis

  • Tendência: deriva contínua e gradual, tipicamente associada a desgaste de ferramenta ou de matriz
  • Ciclo: oscilação periódica, frequentemente ligada a variações sazonais, de turno ou de tensão de rede elétrica
  • Mistura: os pontos evitam a linha central e se concentram perto dos limites — sintoma de dois processos sobrepostos (duas máquinas, dois operadores)
  • Esses padrões se aplicam tanto a \(\bar x\) quanto a \(R\)/\(s\), e devem ser lidos nos dois gráficos simultaneamente

Limites de Controle vs. Limites de Especificação

  • Nunca plote os limites de especificação do cliente (LIE/LSE) sobre o gráfico de médias
  • Especificações descrevem peças individuais; limites de controle descrevem a variabilidade de médias amostrais
  • Um processo “sob controle estatístico” pode, ainda assim, gerar 100% de peças fora de especificação — controle e capacidade são perguntas diferentes

Limites Naturais de Tolerância (LNT)

  • Métrica que descreve a dispersão natural dos itens individuais, não das médias
  • Sob normalidade, cerca de 99,73% da produção individual cai dentro dessa faixa
  • É a ponte conceitual entre o gráfico de controle (que fala de médias amostrais) e a capacidade do processo (que fala de peças individuais)

\[LNT = \bar{\bar{x}} \pm 3\hat{\sigma}\]

Estimando a Fração Não-Conforme

O próprio gráfico de controle já permite estimar a fração de peças fora de especificação, mesmo antes de qualquer índice de capacidade — basta usar \(\hat\mu\) e \(\hat\sigma\) na Normal.

Exemplo (anéis de pistão): especificação \(74 \pm 0{,}05\) mm; \(\hat\mu=74{,}001\), \(\hat\sigma=0{,}0099\) (estimados via \(\bar{R}/d_2\) no exemplo anterior).

mu_hat <- 74.001; sigma_hat <- 0.0099
LIE <- 73.95; LSE <- 74.05
p_nc <- pnorm(LIE, mu_hat, sigma_hat) + pnorm(LSE, mu_hat, sigma_hat, lower.tail = FALSE)
cat(sprintf("Fracao nao-conforme estimada: %.5f (%.0f ppm)\n", p_nc, p_nc * 1e6))
Fracao nao-conforme estimada: 0.00000 (1 ppm)

Cerca de 20 partes por milhão de anéis fora da especificação — uma fração muito pequena, sinal de que o processo é bem mais “apertado” do que a especificação exige.

Razão de Capacidade do Processo \(C_p\)

  • Compara a largura de especificação exigida pelo cliente com a variação natural do processo (6 desvios-padrão)
  • \(C_p > 1\) sugere que o processo é capaz, desde que esteja centrado

\[C_p = \frac{LSE-LIE}{6\hat{\sigma}}\]

O Índice Corrigido \(C_{pk}\)

  • \(C_p\) ignora se a média está deslocada do centro da especificação
  • \(C_{pk}\) usa a distância da média ao limite mais próximo, penalizando processos descentrados

\[C_{pk} = \min\left(\frac{LSE-\hat\mu}{3\hat{\sigma}},\ \frac{\hat\mu-LIE}{3\hat{\sigma}}\right)\]

  • \(C_{pk} \ge 1{,}33\): meta mínima usual; \(C_{pk} \ge 2{,}00\): meta Seis Sigma

O Índice \(C_{pm}\): Penalizando o Desvio do Alvo

  • \(C_p\) e \(C_{pk}\) usam apenas \(LIE\)/\(LSE\) — não diferenciam um processo centrado no meio da faixa de um processo centrado em qualquer outro ponto dentro dela
  • \(C_{pm}\) (índice de Taguchi) penaliza explicitamente o desvio em relação ao valor-alvo \(T\), não apenas em relação aos limites

\[C_{pm} = \frac{LSE-LIE}{6\sqrt{\hat\sigma^2 + (\hat\mu-T)^2}}\]

  • Quando \(\hat\mu = T\), \(C_{pm} = C_p\); quanto mais o processo se afasta do alvo, mais \(C_{pm}\) cai em relação a \(C_p\)

Capacidade do Processo no R

Continuando o exemplo dos anéis de pistão: especificação \(74 \pm 0{,}05\) mm.

Clique para ver o código
cp_pist <- process.capability(g_x_pist, spec.limits = c(73.95, 74.05))

Process Capability Analysis

Call:
process.capability(object = g_x_pist, spec.limits = c(73.95,     74.05))

Number of obs = 125          Target = 74
       Center = 74              LSL = 73.95
       StdDev = 0.009785        USL = 74.05

Capability indices:

      Value   2.5%  97.5%
Cp    1.703  1.491  1.915
Cp_l  1.743  1.555  1.932
Cp_u  1.663  1.483  1.844
Cp_k  1.663  1.448  1.878
Cpm   1.691  1.480  1.902

Exp<LSL 0%   Obs<LSL 0%
Exp>USL 0%   Obs>USL 0%
Clique para ver o código
print(round(cp_pist$indices, 3))
     Value  2.5% 97.5%
Cp   1.703 1.491 1.915
Cp_l 1.743 1.555 1.932
Cp_u 1.663 1.483 1.844
Cp_k 1.663 1.448 1.878
Cpm  1.691 1.480 1.902
Clique para ver o código
cat(sprintf("\nP-hat (%% da faixa usada): %.1f%%\n", 100 / cp_pist$indices["Cp", "Value"]))

P-hat (% da faixa usada): 58.7%

\(\hat{C}_p \approx 1{,}68\) e \(\hat P \approx 59{,}5\%\) — o processo usa pouco mais da metade da faixa de especificação permitida, exatamente como no cálculo manual.

Intervalos de Confiança para \(C_p\) e \(C_{pk}\)

  • \(\hat{C}_p\) e \(\hat{C}_{pk}\) são estimativas, calculadas a partir de uma amostra finita — têm incerteza, assim como qualquer outra estatística
  • Reportar apenas o ponto estimado pode induzir decisões equivocadas quando a amostra é pequena
  • process.capability() já fornece os limites de confiança junto com os índices — o print() do slide anterior mostra essa informação por padrão
cat(sprintf("IC 95%% para Cp: [%.3f; %.3f]\n", cp_pist$indices["Cp","2.5%"], cp_pist$indices["Cp","97.5%"]))
IC 95% para Cp: [1.491; 1.915]

Lendo \(C_p\) e \(C_{pk}\) na Prática

  • \(C_p\) alto e \(C_{pk}\) baixo é um padrão de alerta clássico: o processo poderia ser capaz, mas está descentrado — geralmente um problema de ajuste, não de variabilidade
  • \(C_{pk}\) negativo significa que a média já passou de um dos limites de especificação
  • Nenhum índice de capacidade substitui o gráfico de controle: capacidade só tem significado depois de confirmar que o processo está sob controle estatístico

Função Característica de Operação (Curva OC)

  • A curva OC mapeia o risco \(\beta\) (erro Tipo II): o processo se deslocou, mas o gráfico não alarmou
  • Quanto menor o deslocamento real \(k\sigma\), maior a chance de não detectá-lo na primeira amostra

\[\beta = \Phi(L-k\sqrt{n}) - \Phi(-L-k\sqrt{n})\]

O Risco de Cegueira em Subgrupos Pequenos

  • Subgrupos de \(n=4\) ou \(5\) são vulneráveis a deslocamentos pequenos da média
  • Um deslocamento de apenas \(1\sigma\) pode passar despercebido na maioria das amostras
  • Para detectar pequenos deslocamentos com mais eficiência, usa-se \(n\) maior ou gráficos CUSUM/MMEP (Capítulo 9)

Computando o Risco \(\beta\) no R

Exemplo: o processo se deslocou \(k=2\sigma\). Qual o risco de não detectar esse deslocamento na primeira amostra, com \(n=5\) e \(L=3\)?

k <- 2; n <- 5; L <- 3
beta_risco <- pnorm(L - k*sqrt(n)) - pnorm(-L - k*sqrt(n))
cat(sprintf("Risco de não detecção (beta): %.4f\n", beta_risco))
Risco de não detecção (beta): 0.0705
cat(sprintf("Probabilidade de detectar na 1a amostra: %.4f\n", 1 - beta_risco))
Probabilidade de detectar na 1a amostra: 0.9295

Com um deslocamento de \(2\sigma\), o risco de não detectar cai para apenas 7%: a probabilidade de detecção já na primeira amostra é de 92,9%.

Visualizando a Curva OC no R

Clique para ver o código
n <- 5; L <- 3
ks <- seq(0, 4, by = 0.05)
betas <- pnorm(L - ks*sqrt(n)) - pnorm(-L - ks*sqrt(n))

ggplot(data.frame(k = ks, beta = betas), aes(k, beta)) +
  geom_line(color = pal["roxo"], linewidth = 1.2) +
  labs(title = bquote("Curva OC do gráfico" ~ bar(X) ~ "(n =" ~ .(n) * ")"),
       x = expression(paste("Deslocamento (", k, sigma, ")")),
       y = expression(beta)) +
  tema_cep()

O Efeito de \(n\) na Curva OC

Clique para ver o código
L <- 3
ks <- seq(0, 4, by = 0.05)
df_n <- do.call(rbind, lapply(c(3, 5, 10), function(n) {
  data.frame(k = ks, beta = pnorm(L - ks*sqrt(n)) - pnorm(-L - ks*sqrt(n)), n = factor(n))
}))
ggplot(df_n, aes(k, beta, color = n)) +
  geom_line(linewidth = 1.1) +
  scale_color_manual(values = c(unname(pal["azul"]), unname(pal["ambar"]), unname(pal["coral"]))) +
  labs(title = "Curvas OC para diferentes tamanhos de subgrupo",
       x = expression(paste("Deslocamento (", k, sigma, ")")), y = expression(beta), color = "n") +
  tema_cep()

Subgrupos maiores deslocam a curva para a esquerda — detectam o mesmo desvio com menos risco.

Detecção em Amostras Sucessivas

Por independência entre amostras, a probabilidade de detectar o deslocamento até a \(r\)-ésima amostra é simplesmente \(1-\beta^r\):

beta_risco <- 0.0708
r <- 1:4
prob_detec <- 1 - beta_risco^r
cat(sprintf("Detecção até a amostra %d: %.4f\n", r, prob_detec))
Detecção até a amostra 1: 0.9292
 Detecção até a amostra 2: 0.9950
 Detecção até a amostra 3: 0.9996
 Detecção até a amostra 4: 1.0000

Mesmo com \(\beta=0{,}0708\) relativamente pequeno, a chance de detecção até a 4ª amostra já é praticamente certa.

A Curva OC Pronta no qcc

O pacote já oferece a função oc.curves.xbar(), que constrói o painel de curvas OC diretamente a partir de um objeto qcc ajustado — sem que seja preciso programar a fórmula manualmente:

# Usando o objeto da Fase II dos anéis de pistão
oc.curves.xbar(q_fase2, n = c(1, 3, 5, 10, 15, 20), c = seq(0, 5, length.out = 100), nsigmas = 3)
  • Recebe o objeto qcc já ajustado, uma lista de tamanhos de subgrupo para comparar, e a faixa de deslocamentos \(k\) a avaliar
  • Produz o mesmo painel de curvas que construímos manualmente, mas reaproveitando os parâmetros já estimados

Comprimento Médio da Sequência (ARL)

  • O ARL traduz a probabilidade em uma contagem prática: quantas amostras, em média, até o gráfico alarmar
  • Sob controle, o \(ARL_0\) mede a frequência de falsos alarmes

\[ARL_0 = \frac{1}{\alpha}\]

  • Com \(\alpha=0{,}0027\) (limites \(3\sigma\)), \(ARL_0 \approx 370\) amostras entre falsos alarmes

ARL Fora de Controle e Tempo Até o Alarme

  • O \(ARL_1\) estima o número de amostras até a detecção de um deslocamento real

\[ARL_1 = \frac{1}{1-\beta}\]

  • Multiplicando pelo intervalo \(h\) entre amostras obtém-se o Tempo Médio até o Alarme (ATS)

\[ATS = ARL_1 \times h\]

ARL e ATS no R

Exemplo: com \(\beta=0{,}0708\) (deslocamento de \(2\sigma\), do slide de risco \(\beta\)) e amostragem a cada \(h=1\) hora, quanto tempo até o alarme, em média?

beta <- 0.0708; h <- 1
ARL1 <- 1 / (1 - beta)
ATS  <- ARL1 * h
cat(sprintf("ARL1 = %.2f amostras | ATS = %.2f horas\n", ARL1, ATS))
ARL1 = 1.08 amostras | ATS = 1.08 horas

Com risco baixo de não detecção, o alarme chega quase imediatamente — bem diferente de um deslocamento pequeno (\(k=1\)), em que \(\beta\) alto levaria a um \(ARL_1\) muito maior.

Comparando ARL para Diferentes Escolhas de L

Clique para ver o código
Ls <- seq(2, 4, by = 0.1)
alfas <- 2 * pnorm(-Ls)
ARL0s <- 1 / alfas
ggplot(data.frame(L = Ls, ARL0 = ARL0s), aes(L, ARL0)) +
  geom_line(color = pal["coral"], linewidth = 1.2) +
  geom_vline(xintercept = 3, color = pal["verde"], linetype = "dashed") +
  scale_y_log10() +
  labs(title = "ARL0 em função de L (escala log)", x = "L", y = expression(ARL[0])) +
  tema_cep()

\(L=3\) não é arbitrário: equilibra \(ARL_0\) alto (poucos falsos alarmes) contra a perda de sensibilidade a pequenos deslocamentos.

Outras Medidas do Run Length

O comprimento da sequência (run length) segue uma distribuição Geométrica com parâmetro \(p\) (\(p=\alpha\) sob controle, \(p=1-\beta\) fora de controle). Além do ARL (\(=1/p\)), outras duas medidas complementam a análise:

\[\text{Mediana} = \frac{\ln(0{,}5)}{\ln(1-p)} \qquad \text{Desvio padrão} = \sqrt{\frac{1-p}{p^2}}\]

p <- 1 - 0.0708   # processo fora de controle, k=2
mediana_rl <- log(0.5) / log(1 - p)
dp_rl <- sqrt((1 - p) / p^2)
cat(sprintf("Mediana do RL: %.2f | Desvio padrão do RL: %.2f\n", mediana_rl, dp_rl))
Mediana do RL: 0.26 | Desvio padrão do RL: 0.29

A mediana é uma medida de locação robusta a outliers — útil quando a distribuição do run length é muito assimétrica, o que é frequente.

ARL Como Linguagem de Negócio

  • “O gráfico detecta esse problema em cerca de 2 horas” é mais persuasivo para a gerência do que “\(\beta=0{,}12\)
  • Decisões de investimento (amostrar mais frequentemente? aumentar \(n\)?) são, no fundo, decisões sobre o ATS aceitável para cada tipo de falha
  • O papel do estatístico é traduzir entre a métrica estatística (\(\alpha\), \(\beta\)) e a métrica de negócio (tempo, custo)

O Avanço Computacional: Gráfico \(\bar{X}\) - \(s\)

  • O método da amplitude \(\bar{R}\) perde eficiência rapidamente para \(n>10\) ou \(12\)
  • A amplitude usa só os extremos; o desvio-padrão amostral aproveita toda a informação da amostra
  • Para subgrupos maiores, o gráfico \(s\) é preferível ao gráfico \(R\)

Estimando a Variância no Gráfico \(s\)

  • Calcula-se o desvio-padrão de cada subgrupo e toma-se a média, \(\bar{s}\)
  • Como estimador de raiz não linear, \(s\) é viesado; a correção usa a constante tabelada \(c_4\)

\[\hat{\sigma} = \frac{\bar{s}}{c_4}\]

Extraindo o Parâmetro Puro no R

Exemplo: \(\bar{s}=0{,}5\) para subgrupos de \(n=5\) (\(c_4=0{,}94\)). Qual o \(\hat\sigma\)?

s_barra <- 0.5
c4 <- 0.94
sigma_puro <- s_barra / c4
cat(sprintf("Sigma estimado via s: %.3f\n", sigma_puro))
Sigma estimado via s: 0.532

Limites de Controle do Gráfico \(s\)

  • A faixa \(\bar{s}\pm 3\sigma_s\) é reescrita com constantes tabeladas \(B_3\) e \(B_4\), análogas a \(D_3\) e \(D_4\) do gráfico R

\[LSC_s = B_4\bar{s} \qquad LIC_s = B_3\bar{s}\]

Limites do Gráfico \(s\) no R

Exemplo: \(\bar{s}=0{,}5\), \(B_4=2{,}089\) (tabela para \(n=5\); \(B_3=0\) para \(n\le5\)).

s_bar <- 0.5; B4 <- 2.089
LSC_s <- B4 * s_bar
cat(sprintf("LSC do gráfico s: %.4f\n", LSC_s))
LSC do gráfico s: 1.0445

O Retorno à Média \(\bar{X}\) Apoiado em \(s\)

  • Com o gráfico \(s\) estável, calculam-se os limites do gráfico \(\bar{x}\) usando a constante \(A_3\) (análoga a \(A_2\), mas baseada em \(\bar{s}\) em vez de \(\bar{R}\))

\[LSC_{\bar{x}} = \bar{\bar{x}} + A_3\bar{s} \qquad LIC_{\bar{x}} = \bar{\bar{x}} - A_3\bar{s}\]

Implementação \(\bar{X}\) - \(s\) no R

Clique para ver o código
set.seed(44)
m_s <- matrix(rnorm(200, 50, 2), ncol = 10)  # 20 subgrupos, n = 10

g_s <- qcc(m_s, type = "S", plot = FALSE)
plot_carta(g_s$statistics, g_s$center, g_s$limits[1,"LCL"], g_s$limits[1,"UCL"],
           "Gráfico s — desvios-padrão amostrais", ylab = "s")

Gráfico \(s\) — Anéis de Pistão (Mesmos Dados, Outra Base)

Embora o gráfico \(s\) seja recomendado para \(n>10\), o mesmo conjunto dos anéis de pistão (\(n=5\)) ilustra bem que \(R\) e \(s\) levam a conclusões equivalentes:

g_s_pist <- qcc(diameter[1:25, ], type = "S", plot = FALSE)
plot_carta(g_s_pist$statistics, g_s_pist$center,
           g_s_pist$limits[1,"LCL"], g_s_pist$limits[1,"UCL"],
           "Gráfico s — Anéis de Pistão", ylab = "s")
cat(sprintf("S_bar = %.4f | LSC = %.4f | LIC = %.4f\n",
            g_s_pist$center, g_s_pist$limits[1,"UCL"], g_s_pist$limits[1,"LCL"]))
S_bar = 0.0092 | LSC = 0.0193 | LIC = 0.0000

\(\bar s \approx 0{,}0094\), \(LSC_s \approx 0{,}0196\) — os limites de \(\bar x\) resultantes (via \(A_3\)) também coincidem, a menos de arredondamento, com os obtidos pelo gráfico \(R\).

Gráfico \(s\) — Anéis de Pistão (Mesmos Dados, Outra Base)

\(R\) ou \(s\)? Critério de Decisão

Critério Use R Use s
Tamanho do subgrupo \(n \le 10\) \(n > 10\) ou \(12\)
Cálculo manual Mais simples Exige calculadora/software
Eficiência estatística Menor para \(n\) grande Sempre maior ou igual
Tradição/legado Chão de fábrica tradicional Sistemas computadorizados

Com qcc, o custo computacional de usar \(s\) é zero — a única razão prática para preferir \(R\) hoje é tradição ou \(n\) pequeno.

Desafio do Tamanho de Amostra Variável

  • Em operações logísticas ou de serviços, o tamanho do subgrupo pode mudar de um dia para outro
  • Limites fixos não funcionam: o denominador \(\sqrt{n_i}\) varia a cada novo subgrupo
  • Solução: recalcular os limites para o \(n_i\) de cada amostra (limites “em degrau”), usando a média global ponderada

\[\bar{\bar{x}} = \frac{\sum n_i\bar{x}_i}{\sum n_i}\]

Limites Variáveis no R: Anéis de Pistão Modificados

Removendo algumas observações específicas do dataset original, criamos subgrupos de tamanho variável (3 ou 5) — exatamente a mesma estratégia usada para gerar o exemplo “anéis modificados”:

Clique para ver o código
idx_remover  <- c(1, 2, 12, 50, 52, 100, 199)
diam_mod     <- pistonrings$diameter[-idx_remover]
amostra_mod  <- pistonrings$sample[-idx_remover]
grupos_mod   <- qcc.groups(diam_mod, amostra_mod)

g_s_mod <- qcc(grupos_mod[1:25, ], type = "S", plot = FALSE)
cat(sprintf("S_bar = %.4f | LSC_S = %.3f | LIC_S = %.3f\n",
            g_s_mod$center, g_s_mod$limits[1,"UCL"], g_s_mod$limits[1,"LCL"]))
S_bar = 0.0091 | LSC_S = 0.023 | LIC_S = 0.000

\(\bar s \approx 0{,}0098\) — ligeiramente diferente do exemplo original (\(0{,}0094\)), refletindo a perda de algumas observações em cada subgrupo afetado.

Limites do Gráfico \(\bar{X}\) com \(n\) Variável

Clique para ver o código
g_x_mod <- qcc(grupos_mod[1:25, ], type = "xbar", plot = FALSE)
df_mod <- data.frame(t = seq_along(g_x_mod$statistics),
                      xb = g_x_mod$statistics,
                      lcl = g_x_mod$limits[,"LCL"], ucl = g_x_mod$limits[,"UCL"])
ggplot(df_mod, aes(t, xb)) +
  geom_step(aes(y = ucl), color = pal["coral"], linetype = "dashed") +
  geom_step(aes(y = lcl), color = pal["coral"], linetype = "dashed") +
  geom_hline(yintercept = g_x_mod$center, color = pal["verde"]) +
  geom_line(color = pal["neutro"], linewidth = .6) + geom_point(color = pal["azul"], size = 2.6) +
  labs(title = "Gráfico x̄ — Anéis de Pistão com n Variável (limites em degrau)",
       x = "Amostra", y = expression(bar(x))) +
  tema_cep()

Observe o “degrau” nos limites cada vez que \(n_i\) muda entre 5 e 3 — exatamente o efeito visual que a Abordagem 3 (gráfico \(Z\)) elimina.

O Gráfico \(Z\) Padronizado

  • Para evitar o visual “em degrau” no painel, cada média é padronizada em escore \(Z\), com LSC fixo em \(+3\)

\[Z_i = \frac{\bar{x}_i - \bar{\bar{x}}}{\hat{\sigma}/\sqrt{n_i}}\]

  • Vantagem: um único par de limites fixos, independente de quantos \(n_i\) diferentes existirem no histórico

\(Z\) Padronizado: Quando Vale o Custo

  • O gráfico \(Z\) é mais difícil de interpretar para operadores não treinados — perde a escala original da característica de qualidade
  • Vale o custo quando o número de tamanhos de subgrupo diferentes é grande (dezenas de valores possíveis de \(n\)), tornando os limites “em degrau” visualmente inviáveis
  • Para poucos tamanhos distintos (2 ou 3), os limites variáveis em degrau geralmente são preferíveis — mais intuitivos

O Gráfico da Variância \(s^2\)

  • Útil em contextos de inferência multivariada ou ANOVA, em que a variância em si é o objeto de interesse
  • Os limites usam diretamente a distribuição Qui-Quadrado, com \(n-1\) graus de liberdade, em vez das constantes \(B_3\)/\(B_4\)

\[LSC = \frac{\bar{s}^2}{n-1}\,\chi^2_{\alpha/2,\,n-1} \qquad LIC = \frac{\bar{s}^2}{n-1}\,\chi^2_{1-\alpha/2,\,n-1}\]

Por que Limites Exatos em Vez de Aproximados

  • O gráfico \(s\) usa \(B_3\)/\(B_4\), que vêm de uma aproximação Normal à distribuição de \(s\)
  • O gráfico \(s^2\) usa os quantis exatos da Qui-Quadrado — mais preciso, especialmente para \(n\) pequeno, onde a aproximação Normal é mais grosseira

Extraindo o Limite via Qui-Quadrado no R

Exemplo: \(n=5\), \(\alpha=0{,}0027\), \(\bar{s}^2=0{,}01\).

s2_b <- 0.01; n <- 5; alfa <- 0.0027
LSC_qui <- (s2_b / (n-1)) * qchisq(1 - alfa/2, n-1)
LIC_qui <- (s2_b / (n-1)) * qchisq(alfa/2, n-1)
cat(sprintf("LIC do grafico s^2: %.5f\nLSC do grafico s^2: %.4f\n", LIC_qui, LSC_qui))
LIC do grafico s^2: 0.00026
LSC do grafico s^2: 0.0445

Gráficos de Medidas Individuais (I - MR)

  • Quando cada unidade é cara, rara ou só uma é produzida por período (ex.: uma turbina por semana), não há como formar um subgrupo
  • Sem subgrupo, não existe “variação dentro da amostra” — cada observação é, ela mesma, o ponto monitorado

A Amplitude Móvel (MR)

  • Para estimar a dispersão sem subgrupos, compara-se cada observação com a anterior
  • A amplitude móvel assume, no gráfico Individual, o papel que \(R\) tinha no gráfico \(\bar{x}\)-R

\[MR_i = |x_i - x_{i-1}|\]

Limites do Gráfico Individual

  • A amplitude móvel média (\(\overline{MR}\)) ancora os limites, usando \(d_2=1{,}128\) — a constante tabelada para \(n=2\), já que cada \(MR_i\) compara apenas 2 valores

\[LSC_x = \bar{x} + 3\frac{\overline{MR}}{1{,}128} \qquad LIC_x = \bar{x} - 3\frac{\overline{MR}}{1{,}128}\]

Exemplo Real: Viscosidade de Tinta de Base para Aviões

Dados reais do livro-texto: 15 lotes sucessivos de tinta de base, com viscosidade medida individualmente — uma observação por lote, sem subgrupos.

viscosidade <- c(33.75, 33.05, 34.00, 33.81, 33.46, 34.02, 33.68, 33.27,
                  33.49, 33.20, 33.62, 33.00, 33.54, 33.12, 33.84)
mean(viscosidade)
[1] 33.52333

Construindo I - MR no R com qcc

g_IMR <- qcc(viscosidade, type = "xbar.one", plot = FALSE)
plot_carta(g_IMR$statistics, g_IMR$center, g_IMR$limits[1,"LCL"], g_IMR$limits[1,"UCL"],
           "Gráfico de Indivíduos — Viscosidade da Tinta", ylab = "Viscosidade")
cat(sprintf("x_bar = %.3f | LSC = %.3f | LIC = %.3f\n",
            g_IMR$center, g_IMR$limits[1,"UCL"], g_IMR$limits[1,"LCL"]))
x_bar = 33.523 | LSC = 34.802 | LIC = 32.245

\(\bar x = 33{,}523\), \(LSC=34{,}802\), \(LIC=32{,}245\) — nenhum ponto fora dos limites, nenhum padrão não aleatório identificado.

Construindo I - MR no R com qcc

Ameaças aos Gráficos Individuais

  • Sem subgrupos, perde-se a proteção que o TCL dava ao gráfico \(\bar{x}\): distribuições assimétricas afetam o gráfico I diretamente
  • A transformação de Box-Cox é frequentemente necessária antes de usar I-MR em dados não normais
  • Observações vizinhas correlacionadas no tempo (autocorrelação) distorcem \(\overline{MR}\), estreitando os limites de forma artificial

Autocorrelação em Séries de Processo

  • Quando uma observação influencia diretamente a próxima (ex.: inércia térmica em reatores), \(\overline{MR}\) subestima a variabilidade real
  • Os limites resultantes ficam artificialmente estreitos, gerando alarmes falsos em excesso
  • Modelos de séries temporais (ex.: ARIMA) podem filtrar a autocorrelação antes de se aplicar o CEP sobre os resíduos — tema que ultrapassa o escopo deste capítulo, mas que deve estar no radar

Exemplo Real: Largura do Fluxo em Fotolitografia (Montgomery, Exemplo 6.1)

Dados reais do livro-texto (Tabela 6.1): processo de cozimento de fotorresistente na fabricação de semicondutores. 25 amostras de 5 placas, medindo a largura do fluxo (mícrons).

fluxo <- matrix(c(
  1.3235,1.4128,1.6744,1.4573,1.6914,
  1.4314,1.3592,1.6075,1.4666,1.6109,
  1.4284,1.4871,1.4932,1.4324,1.5674,
  1.5028,1.6352,1.3841,1.2831,1.5507,
  1.5604,1.2735,1.5265,1.4363,1.6441,
  1.5955,1.5451,1.3574,1.3281,1.4198,
  1.6274,1.5064,1.8366,1.4177,1.5144,
  1.4190,1.4303,1.6637,1.6067,1.5519,
  1.3884,1.7277,1.5355,1.5176,1.3688,
  1.4039,1.6697,1.5089,1.4627,1.5220,
  1.4158,1.7667,1.4278,1.5928,1.4181,
  1.5821,1.3355,1.5777,1.3908,1.7559,
  1.2856,1.4106,1.4447,1.6398,1.1928,
  1.4951,1.4036,1.5893,1.6458,1.4969,
  1.3589,1.2863,1.5996,1.2497,1.5471,
  1.5747,1.5301,1.5171,1.1839,1.8662,
  1.3680,1.7269,1.3957,1.5014,1.4449,
  1.4163,1.3864,1.3057,1.6210,1.5573,
  1.5796,1.4185,1.6541,1.5116,1.7247,
  1.7106,1.4412,1.2361,1.3820,1.7601,
  1.4371,1.5051,1.3485,1.5670,1.4880,
  1.4738,1.5936,1.6583,1.4973,1.4720,
  1.5917,1.4333,1.5551,1.5295,1.6866,
  1.6399,1.5243,1.5705,1.5563,1.5530,
  1.5797,1.3663,1.6240,1.3732,1.6887),
  nrow = 25, ncol = 5, byrow = TRUE)
cat(sprintf("Dimensao: %d amostras x %d placas\n", nrow(fluxo), ncol(fluxo)))
Dimensao: 25 amostras x 5 placas

Largura do Fluxo — Gráfico R Primeiro

g_R_fluxo <- qcc(fluxo, type = "R", plot = FALSE)
plot_carta(g_R_fluxo$statistics, g_R_fluxo$center,
           g_R_fluxo$limits[1,"LCL"], g_R_fluxo$limits[1,"UCL"],
           "Gráfico R - Largura do Fluxo (Exemplo 6.1)", ylab = "Amplitude (mícrons)")
cat(sprintf("R_bar = %.5f | LSC = %.5f\n", g_R_fluxo$center, g_R_fluxo$limits[1,"UCL"]))
R_bar = 0.32521 | LSC = 0.68764

Largura do Fluxo — Gráfico \(\bar{X}\) e Capacidade

Clique para ver o código
g_xbar_fluxo <- qcc(fluxo, type = "xbar", plot = FALSE)
plot_carta(g_xbar_fluxo$statistics, g_xbar_fluxo$center,
           g_xbar_fluxo$limits[1,"LCL"], g_xbar_fluxo$limits[1,"UCL"],
           "Gráfico x̄ - Largura do Fluxo (Exemplo 6.1)", ylab = "Média amostral (mícrons)")
cat(sprintf("x_bar_bar = %.4f | LIC = %.4f | LSC = %.4f\n",
            g_xbar_fluxo$center, g_xbar_fluxo$limits[1,"LCL"], g_xbar_fluxo$limits[1,"UCL"]))
x_bar_bar = 1.5056 | LIC = 1.3180 | LSC = 1.6932

Ambos os gráficos confirmam ausência de causas atribuíveis — o processo de cozimento está sob controle estatístico, e estes limites tornam-se a referência para a Fase II.

Exercício de Fixação: Mancais

Os dados a seguir correspondem a \(\bar x\) e \(R\) para 24 subgrupos de tamanho \(n=5\) de um processo que produz mancais (diâmetro interno). Suponha normalidade.

(a) Construa os gráficos \(\bar x\) e \(R\). O processo parece estar sob controle? Se necessário, revise os limites. (b) Se a especificação é \(30{,}0 \pm 10\), qual a fração de mancais não conformes? (c) Se a média se deslocar para 36, qual a probabilidade de não detectar esse deslocamento na amostra subsequente? E a probabilidade de detectar até a 4ª amostra?

xbar_mancais <- c(34.5,34.2,31.6,31.5,35.0,34.1,32.6,33.8,34.8,33.6,31.9,38.6,
                   35.4,34.0,37.1,34.9,33.5,31.7,34.0,35.1,33.7,32.8,33.5,34.2)
R_mancais    <- c(3,4,4,4,5,6,4,3,7,8,3,9, 8,6,5,7,4,3,8,4,2,1,3,2)
cat(sprintf("m = %d subgrupos | x_bar_bar = %.3f | R_bar = %.3f\n",
            length(xbar_mancais), mean(xbar_mancais), mean(R_mancais)))
m = 24 subgrupos | x_bar_bar = 34.004 | R_bar = 4.708

Síntese do Capítulo 6

  • O CEP de variáveis monitora simultaneamente a locação (\(\bar{x}\) ou indivíduos) e a dispersão (\(R\), \(s\) ou \(s^2\)) — sempre revisando a dispersão primeiro
  • A Fase I depura o histórico com rigor: nenhum subgrupo é removido sem causa atribuível documentada; a Fase II congela os limites para monitoramento contínuo
  • Capacidade (\(C_p\), \(C_{pk}\), \(C_{pm}\)) e curvas OC/ARL/ATS traduzem o desempenho estatístico em linguagem de decisão gerencial
  • \(\bar x\)-R serve subgrupos pequenos; \(\bar x\)-s é preferível para \(n>10\); I-MR cobre o caso \(n=1\)

Referências

  • Montgomery, D. C. Introdução ao Controle Estatístico da Qualidade. 7ª ed. LTC, 2017. Cap. 6.
  • Shewhart, W. A. Economic Control of Quality of Manufactured Product. Van Nostrand, 1931.
  • Scrucca, L. Pacote qcc: Quality Control Charts. CRAN, 2023.

Obrigado!

Controle Estatístico de Processos: Variáveis · UFPB

Bacharelado em Estatística e Ciência de Dados

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