Subsections

27 Gráficos de controle para variáveis

Objetivos

O objetivo desta seção é construir e interpretar gráficos de controle para variáveis. Procure entender os comandos do R e interpretar os resultados.

Gráficos de controle para $ \bar{x}$ e R

Utilizaremos os dados do exemplo sobre 'anéis de pistão' (Montgomery, 1997), disponível no pacote qcc.

> require(qcc)
> data(pistonrings)
> attach(pistonrings)
> pistonrings

Esse conjunto de dados corresponde a avaliação dos diâmetros dos anéis, obtidos de 40 amostras de tamanho n=5.

As primeiras 25 amostras (trial=TRUE) foram utilizadas para a obtenção do gráfico de controle e as amostras subseqüentes (trial=FALSE) foram utilizadas para monitoramento do processo.

Inicialmente pode-se fazer uma análise exploratória dos dados para conhecer o comportamento da variável resposta.

> summary(pistonrings)
> boxplot(diameter ~ sample)
> plot(sample[trial==TRUE], diameter[trial==TRUE], cex=0.7)
> plot(sample, diameter, cex=0.7)
> lines(tapply(diameter,sample,mean))

Para utilizar a função qcc, é necessário que o objeto a ser analisado esteja no formato exigido pela função. Por isso, utiliza-se a outra função chamada de qcc.groups para formatar os dados.

> diametro<-qcc.groups(diameter,sample)
> diametro
> class(diametro)

Observe que o objeto diametro é uma matriz. A função qcc reconhece, automaticamente, que o número de colunas é o tamanho de cada amostra.

Gráfico $ \bar{x}$

Para fazer o gráfico de controle para $ \bar{x}$ utilizando as primeiras 25 amostras utilizamos os seguintes comandos:

> qcc(diametro[1:25,],type='xbar')

Observe que, para esse conjunto de dados, não há violação de nenhuma regra. Ou seja, nesse caso, diz-se que o processo está sob controle.

Uma vez construído o gráfico de controle para o processo, pode-se monitorar novas amostras, apenas acrescentado os novos dados no gráfico já construído.

> qcc(diametro[1:25,],type='xbar',newdata=diametro[26:40,])

Observa-se, agora, que algumas observações estão acima do limite de controle superior, indicando que o processo deve estar fora de controle.

Causas especiais de variação devem estar ocorrendo nesse processo, fazendo com que o diâmetro esteja muito acima da média. Nesse caso, ações corretivas devem ser tomadas para corrigir o problema.

Ainda, é possível que pontos discrepantes causem esse comportamento dos dados. Para verificar essa possibilidade, é recomendável analisar as amostras individualmente para saber se existe alguma observação que possa ter originado tal problema. Para um tamanho de amostra pequeno ($ n<10$) pode-se utilizar um gráfico de dispersão e para amostras maiores, pode-se fazer um boxplot, como preferir.

> plot(sample[126:200],diametro[126:200])

Observando o gráfico, podemos ver que não há indícios de que alguma observação seja considerada um dados discrepante.

Se for de interesse, limites de aviso ou alerta podem ser inseridos no gráfico. Por exemplo, pode-se inserir uma linha com dois desvios.

> qcc(diametro[1:25,],type='xbar',newdata=diametro[26:40,])
> names(qcc.xbar)
> qcc.xbar<-qcc(diametro[1:25,],type='xbar',
  newdata=diametro[26:40,],nsigmas=2,plot=FALSE)

> abline(h=qcc.xbar$lim[1],col="red",lty=2)
> abline(h=qcc.xbar$lim[2],col="red",lty=2)

Gráfico R

Para construir o gráfico de controle R, basta definir o argumento type como R.

> qcc(diametro[1:25,], type="R")
> qcc(diametro[1:25,], type="R", newdata=diametro[26:40,])

Observe que na primeira parte do gráfico, há um ponto em destaque que representa uma seqüência de observações abaixo da amplitude média. O R identificou essa observação como um possível ponto fora de controle.

Se for de interesse, pode-se obter a amplitude média utilizando os seguintes comandos:

> dm.25<-diametro[1:25,]
> R<-numeric()
> for(i in 1:25){R[i]<-diff(range(dm.25[i,]))}
> mean(R)

Desenvolvimento de $ d_2$, $ D_3$ e $ D_4$

Como visto na teoria, para construir os limites de controle dos gráficos de controle são utilizadas algumas constantes. Essas constantes podem ser obtidas por simulação computacional.

Inicialmente, vamos obter o valor da constante $ d_2$. Para tanto, consideraremos o valor de $ n=4$. Assim, deve-se gerar 4 amostras da distribuição Normal padrão. Depois de geradas, tomam-se amostras de 4 observações e calcula-se a amplitude de cada amostra. A amplitude média dessas amostras é que vai originar a constante $ d_2$.

> N1<-rnorm(1000)
> N2<-rnorm(1000)
> N3<-rnorm(1000)
> N4<-rnorm(1000)
> N<-cbind(N1,N2,N3,N4)
> d<-numeric()
> for(i in 1:1000)
          {
           d[i]<- diff(range(N[i,]))
          }
mean(d)

Esta simulação deve ser realizada com um $ n$ grande. Para um valor de n=4, o valor tabelado para $ d_2$ é 2,059.

Para obter o valor de $ d_3$, basta calcular o desvio padrão de $ d_2$. Os valores de $ D_3$ e $ D_4$ são obtidos calculando-se as expressões desenvolvidas na parte teórica.

> d2<-mean(d);d2
> d3<-sd(d2);d3

> D4<-1+(3*d3/d2);D4
> D3<-1-(3*d3/d2);D3

Como $ D_3$ é um valor negativo (e não existe amplitude negativa!) ele é substituído por zero. Para $ n=4$, $ d_4=2,282$

Os valores de $ d_2, A_2, D_3$ e $ D_4$ são tabelados para diferentes valores de $ n$ (1).


Tabela: Constantes par o gráfico $ \bar{x} e R$.
n 2 3 4 5 6 7
$ d_2$ 1,128 1,693 2,059 2,326 2,534 2,704
$ A_2$ 1,880 1,023 0,729 0,577 0,483 0,419
$ D_3$ 0 0 0 0 0 0,076
$ D_4$ 3,267 2,574 2,282 2,114 2,004 1,924

Gráficos de controle para S

Para construir o gráfico de controle S, basta definir o argumento type como S.

> qcc(diametro[1:25,], type="S")
> qcc(diametro[1:25,], type="S", newdata=diametro[26:40,])

Observe que, os limites do gráfico de $ \bar{x}$ baseado no desvio padrão é idêntico ao gráfico de $ \bar{x}$ baseado em R. Para amostrs pequenas isso é esperado.

Exercícios

  1. Calcule os limites de controle para o gráfico $ \bar{x}$ dos anéis de pistão utilizando os valores tabelados;
  2. Calcule os limites de controle para o gráfico R dos anéis de pistão utilizando os valores tabelados;
  3. Construa e interprete os gráficos de controle $ \bar{x}$ e R para os seguintes conjuntos de dados:
    1. Gere os dados com os seguintes comandos do R:

      > set.seed(1) # semente para simulação
      > a1<-rnorm(30,25,.5);a1 #30 obs. média 25; DP 0.5
      > set.seed(2) # semente para simulação
      > a2<-rnorm(30,25,.5);a2
      > set.seed(3) # semente para simulação
      > a3<-rnorm(30,25,.5);a3
      > dados<-cbind(a1,a2,a3);dados
      

      Experimente eliminar uma observação da segunda amostra ou alterar um valor:

      > dados[2,2]<-NA # ou
      > dados[2,2]<-50
      
      Refaça os gráficos.

      Mude a semente e os parâmetros da Normal e analise os dados. Experimente também variar o tamanho das amostras do processo.

    2. Analise os dados desse processo.

Exercícios opcionais

  1. Explore a função qcc modificando argumentos e estude as opções de construção de um gráfico de controle para $ \bar{x}$ e R;

  2. O pacote qAnalyst também possui algumas funções aplicadas ao controle estatístico de qualidade. Experimente fazer alguns gráficos de controle e compare-os com os gráficos do pacote qcc.

    Veja alguns exemplos

    require(qAnalyst)
    
    data(cranks)
    
    xbarchart=spc(x=cranks$crankshaft, sg=cranks$workingDay, 
     type="xbar", name="crankshaft")
    
    rbarchart=spc(x=cranks$crankshaft, sg=cranks$workingDay,
     type="r", name="crankshaft")
    
    plot(xbarchart)
    plot(rbarchart)
    

    Veja a aplicação nos dados dos anéis de pistão (pistonrings):

    #pistonrings
    
    xbarchart.piston=spc(x=pistonrings$diameter, sg=pistonrings$sample,
     type="xbar", name="pistonrings")
    
    rbarchart.piston=spc(x=pistonrings$diameter, sg=pistonrings$sample, 
     type="r", name="pistonrings")
    
    plot(xbarchart.piston)
    plot(rbarchart.piston)
    

    Outro exemplo:

    data(brakeCap)
    x=brakeCap$hardness
    sg=brakeCap$subgroup
    go=spc(x=x,sg=sg,type="xbar")
    plot(go)
    

    E o gráfico de Pareto:

    require(MASS)
    
    data(Cars93)
    paretoData=Cars93$Manufacturer[1:45]
    paretoChart(x=paretoData,mergeThr=.8)
    

adilson dos anjos 2008-09-18