################################################################################## # # Programa: CPSMULTI # Programa para Cálculo de Índices de Capacidade Multivariados # # Versão: 1.0 # Ano: 2004 # Autores: # Míriam Márcia Carvalho da Conceição (Bacharel de Estatística -UFMG) Sueli Aparecida Mingoti (Orientadora: Profa. Adjunta - UFMG) # # # # UNIVERSIDADE FEDERAL DE MINAS GERAIS # DEPARTAMENTO DE ESTATÍSTICA - ICEx # # # Este programa implementa o cálculo dos índices de capacidade para processos # multivariados de Chen modificados por Mingoti e Glória, Cp e Cpk, # o índice modificado de Chen por Mingoti e Conceição, Cpm e os # índices de capacidade propostos por Niverthi & Dey # # # # Este programa foi desenvolvido como projeto de monografia da bacharelanda supra # citada e apresentada ao Departamento de Estatística da Universidade Federal de # de Minas Gerais em 2004 # # ################################################################################## gmacro # template CPSMULTI # corpo da macro # inicializando variáveis let k1=0 let k2=0 let k3=0 let k4=0 let k5=0 let k6=0 let k7=0 let k8=0 let k9=0 let k10=0 let k11=0 let k12=0 let k13=0 let k14=0 let k15=0 let k16=0 let k17=0 let k18=0 let k19=0 let k20=0 let k21=0 let k22=0 let k23=0 let k24=0 let k25=0 let k26=0 let k27=0 let k28=0 let k29=0 let k30=0 let k31=0 let k32=0 let k33=0 let k34=0 let k35=0 let k36=0 let k37=0 let k45=0 let k46=0 let k47=0 let k48=0 let k49=0 let k50=0 let k51=0 let k52=0 let k53=0 let k54=0 let k55=0 let k56=0 let k57=0 let k58=0 let k59=0 let k60=0 let k61=0 let k62=0 let k63=0 let k64=0 let k65=0 let k66=0 let k67=0 let k68=0 let k69=0 let k70=0 let k71=0 let k72=0 let k73=0 let k74=0 let k75=0 let k76=0 let k77=0 let k78=0 let k79=0 let k80=0 let k81=0 let k82=0 let k83=0 let k84=0 let k85=0 let k86=0 let k87=0 let k88=0 let k89=0 let k90=0 let k91=0 let k92=0 let k93=0 let k94=0 let k95=0 let k96=0 let k97=0 let k98=0 let k99=0 let k100=0 let k101=0 # Nomeando variaveis mais importantes name k4 'p' name k8 'alfa' name k27 'Cralfa' name k29 'Cp_Mingoti' name k32 'Cpk_Mingoti' name k33 'Cpm_Mingoti' note *************************************************************************** note note Programa: CPSMULTI note Programa para Cálculo de Índices de Capacidade Multivariados # note Versão: 1.0 note Ano: 2004 note Autores: Míriam Márcia Carvalho da Conceição (Bacharel de Estatística -UFMG) note Sueli Aparecida Mingoti (Orientadora: Profa. Adjunta - UFMG) # note note note UNIVERSIDADE FEDERAL DE MINAS GERAIS note DEPARTAMENTO DE ESTATÍSTICA - ICEx note note note Este programa implementa o cálculo dos índices de capacidade para processos note multivariados de Chen modificados por Mingoti e Glória, Cp e Cpk, note o índice modificado de Chen por Mingoti e Conceição, Cpm e os note índices de capacidade propostos por Niverthi & Dey note note note note Este programa foi desenvolvido como projeto de monografia da bacharelanda supra note citada e apresentada ao Departamento de Estatística da Universidade Federal de note de Minas Gerais em 2004 note note ************************************************************************* # entrada de dados pelo usuário note Atenção: Este programa trabalha com processos de até 100 variáveis note Atenção: O usuário deve entrar com os dados mantendo sempre a mesma ordem das note variáveis envolvidas no processo. note Atenção: Caso você deseje fornecer as amostras elas tem de ser colocadas a partir da coluna C1 note Atenção: As colunas com os dados da amostra devem estar em sequência, ou seja, note não deve haver interrupção entre a primeira e a última colunas de dados amostrais. note Atenção: Você deve manter as variáveis na mesma ordem durante a entrada dos dados. note note Qual é o número da coluna que contém os valores nominais de especificação do processo? read c200; file 'terminal'; nobs 1. let k1 = c200(1) note Qual é o número da coluna que contém os limites inferiores de especificação do processo? read c201; file 'terminal'; nobs 1. let k2 = c201(1) note Qual é o número da coluna que contém os limites superiores de especificação do processo? read c203; file 'terminal'; nobs 1. let k3 = c203(1) note Qual é o número de características de qualidade do processo? read c205; file 'terminal'; nobs 1. let k4 = c205(1) # k4 => quantidade de variáveis 'p' let c202 = ck1 - ck2 let c204 = ck3 - ck1 name c202 'r1' name c204 'r2' name c205 'Num_Variaveis' let k5 = count(ck1) let k6 = count(ck2) let k7 = count(ck3) note Para determinação dos índices de capacidade será utilizado um valor de note significância alfa tanto para o cálculo da constante Cralfa quanto no note caso da determinação de intervalos de confiança para estes índices. note Qual é o valor de alfa desejado? (Entre com o valor entre 0 e 100) read c206; file 'terminal'; nobs 1. let k8 = c206(1) name c206 'alfa' note Você pode entrar com a amostra e neste caso a média e variâncias amostrais e note as matrizes de covariâncias e correlação serão estimadas, ou pode entrar diretamente note com a média, a variância e a matriz de covariâncias ou de correlação. note Você deseja fornecer a amostra (Y/N) ? yesno k9 # Ler vetor de médias e matriz de covariância digitadas pelo usuário if k9 = 0 note Entre com o número da coluna que contém as médias do processo. note Atenção: você deve manter a ordem das variáveis. read c207; file 'terminal'; nobs 1. let k10 = c207(1) # vetor de médias => coluna ck10 note Entre com o número da coluna que contém as variâncias do processo. note Atenção: você deve manter a ordem das variáveis. read c208; file 'terminal'; nobs 1. let k11 = c208(1) # vetor de variâncias do processo let c211= sqrt(ck11) # coluna dos desvios padrão let k12 = count(ck10) let k13 = count(ck11) note Você pode fornecer uma das matrizes: note 1. Matriz de covariâncias do processo note 2. Matriz de correlações do processo note Digite 1 ou 2: read c209; file 'terminal'; nobs 1. let k14 = c209(1) if k14 = 1 note Entre com o número da primeira coluna de dados da matriz de covariâncias read c210; file 'terminal'; nobs 1. let k15 = c210(1) # primeira coluna da matriz de covariância let k16 = k15 + (k4-1) # última coluna da matriz de covariância copy ck15 - ck16 m1 # m1 é a matriz de covariância name m1 'COVA1' let c212= 1/c211 diagonal c212 m2 # m2 é a matriz diagonal de 1/stdev Multiply m2 m1 m3 Multiply m3 m2 m4 # m4 é a matriz de correlação name m4 "CORR1' else k14 = 2 note Entre com o número da primeira coluna de dados da matriz de correlação read c210; file 'terminal'; nobs 1. let k15 = c210(1) # primeira coluna da matriz de correlação let k16 = k15 + (k4-1) # última coluna da matriz de correlação copy ck15 - ck16 m4 # m4 é a matriz de correlação diagonal c211 m2 # m2 é a matriz diagonal de stdev Multiply m2 m4 m3 Multiply m3 m2 m1 # m4 é a matriz de covariância # else k14~=1 & k14~= 2 # note Número inválido # colocar comando para voltar para o início deste if endif else # a primeira coluna de dados da amostra é a coluna c1 let k17 = 1 + (k4-1) # número da última coluna de dados da amostra do k18 = 1 : k17 Mean ck18 k28 let c207(k18) = k28 # coluna com as médias amostrais enddo let k10 = 207 covariance c1-ck18 m1 # matriz de covariâncias amostral correlation c1-ck18 m4 # matriz de correlação amostral diagonal m1 c208 # coluna com as variâncias amostrais let k11 = 208 let c211= sqrt(c208) # coluna com os desvios padrão amostrais endif name c207 'Medias' name c208 'Variancias' name c211 'Desvios_Pad' ################################################################################################ # Cálculo do Cralfa # gerar 10.000 amostra de normal p-variada com vetor de médias zero # e a matriz de covariância estimada (ou fornecida) note Para o cálculo do Cralfa é adequado que a simulação seja feita com amostras de tamanho note igual ou superior a 10.000 amostras da distribuição normal multivariada. note Neste programa 10.000 é o valor assumido por default. note Você deseja usar valor superior a 10.000? (Y/N) yesno k19 if k19 = 0 let k20 = 10000 # k20 é o número de amostras para cálculo do Cralfa else note Qual número de amostras da distribuição normal multivariada deseja usar? read c214; file 'terminal'; nobs 1. let k20 = c214(1) endif do k21 = 1:k4 let c215(k21) = 0 # c215 contem o vetor de médias igual a zero enddo let k22 = 300 + (k4 - 1) # k22 última coluna ocupada com amostra das NMultiv random k20 c300-ck22; Mnormal c215 m4. # Tomar o módulo de cada vetor do k23 = 300 : k22 let Ck23 = abso(Ck23) enddo # Calcular a estatística M: max |X| para cada vetor let k24 = k22 + 1 Rmaximum c300-ck22 ck24 # Encontrar o percentil (1-alfa) das estatisticas M tal que Prob( M <= Cralfa) = 1-alfa Sort ck24 ck24; by ck24. let k25 = k20*(1-(k8/100)) let k26 = ROUND(k25,0) let k27 = ck24(k26) note O valor de Cralfa é: print k27 ############################################################################################## # Cálculo do Cp multivariado por Sueli let c216 = (c202+c204)/(2*c211*k27) let k29 = Min(c216) # k29 = Cp Sueli name c216 'Cp_Mingoti' # Cálculo do Cpk multivariado por Sueli let c217 = (ck10-(ck1-c202))/(c211*k27) let c218 = ((ck1+c204)-ck10)/(c211*k27) RMin c217-c218 c221 let k32 = Min(c221) # k32 = Cpk Sueli name c221 'Cpk_Mingoti' # Cálculo do Cpm multivariado por Sueli let c219 = (c202+c204)/(2*(sqrt(ck11+((ck1-ck10)**2)))*k27) let k33 = Min (c219) # k33 = Cpm Sueli name c219 'Cpm_Mingoti' # Cálculo do Cp multivariado por Niverthi and Dey let k35 = 400 + (k4-1) Eigen M1 c220 m5 # cálculo dos autovalores e autovetores Copy M5 c400 - ck35 # c400 - ck35 = colunas formadas pela matriz de autovetores de M1 name c200 'AUTOV_CpND' name m5 'AUTOV1' let c399 = 1/(sqrt(c220)) define 0 k4 k4 m6 do k36 = 400:k35 let k37 = k36 - 399 copy ck36 m7 Transpose m7 m8 Multiply m7 m8 m9 let k38 = c399(k37) Multiply k38 m9 m10 Add m10 m6 m6 enddo let c222 = (ck3-ck2)/6 Copy c222 m11 Multiply m6 m11 m12 Copy m12 c223 # c223 = Cp ND name c222 '(LSE-LIE)/6' name c223 'Cp_ND' # Cálculo do Cpk multivariado por Niverthi and Dey let c224 = Ck3-ck10 let c225 = ck10-ck2 let c226 = Rmin(c224,c225) let c240 = c226/3 copy c240 m13 multiply m6 m13 m14 copy m14 c227 # c227 = Cpk ND name c227 'Cpk_ND' # Cálculo do Cpm multivariado por Niverthi and Dey let c228 = ck1-ck10 let k39 = 500 + (k4-1) Copy c228 m15 Transpose M15 m16 Multiply M15 M16 m17 # m12 = matriz A = (d-mi)(d-mi)' name m17 'Matriz_A' Add m1 m17 m18 # m13 = matriz covariancia + matriz A name m18 'COVA_A' Eigen m18 c499 m19 # cálculo dos autovalores e autovetores Copy m19 c500 - ck39 name m19 'AUTOV2' let c230 = 1/sqrt(c499) define 0 k4 k4 m20 do k40 = 500:k39 let k41 = k40 - 499 copy ck40 m21 Transpose m21 m22 Multiply m21 m22 m23 let k42 = c230(k41) Multiply k42 m23 m24 Add m24 m20 m20 enddo Copy c222 m25 Multiply m20 m25 m26 Copy m26 c232 # c232 = Cpm ND name c232 'Cpm_ND' # Saída dos valores calculados print "O valor de Cp multivariado por Mingoti é:" k29 print "O valor de Cpk multivariado por Mingoti é:" k32 print "O valor de Cpm multivariado por Mingoti é:" k33 print "O valor de Cp multivariado por Niverthi and Dey é:" c223 print "O valor de Cpk multivariado por Niverthi and Dey é:" c227 print "O valor de Cpm multivariado por Niverthi and Dey é:" c232 ################################################################################################# # Perguntar ao usuário se deseja calcular o IC via bootstrap if k9 = 1 note Utilizando a técnica de Bootstrap podemos determinar intervalos de confiança note para os índices calculados. Este cálculo poderá ser um pouco demorado, dependendo note da capacidade de hardware e do número de variáveis do processo. note Você deseja calcular o intervalor de confiança para algum dos índices (Y/N) ? yesno k43 if k43 = 0 note Encerrando programa. exit else note Para o cálculo do intervalo de confiança via Método de Bootstrap é adequado que note a simulação seja feita com amostras de tamanho igual ou superior a 500 reamostras note das amostras fornecidas. note Neste programa calcula os intervalos utilizando 500 reamostras. let k45 = 500 endif endif do k46 = 1:k45 # primeira coluna das reamostras é a 1001 let k48 = 1001 + (k4-1) Sample k45 c1 - ck18 c1001-ck48; Replace. let k49 = k48 + 1 do k47 = 1001 : k48 let k54 = k47 - 1000 let ck49(k54) = Mean(ck47) #Mean ck47 k53 #let ck49(k54) = k53 # coluna com as médias amostrais enddo Covariance c1001-ck48 m27 # matriz de covariâncias amostral Correlation c1001-ck48 m28 # matriz de correlação amostral let k50 = k49 + 1 diagonal m27 ck50 # coluna com as variâncias amostrais let k51 = k50 + 1 let ck51= sqrt(ck50) # coluna com os desvios padrão amostrais name m27 'COVA_B' name m28 'CORR_B' # Cálculo do Cp multivariado por Sueli let k52 = k51 + 1 let ck52 = (c202+c204)/(2*ck51*k27) let c233(k46) = Min(ck52) # c233 = coluna com os Cp Sueli # Cálculo do Cpk multivariado por Sueli let k55 = k52 + 1 let k56 = k55 + 1 let ck55 = (ck49-(ck1-c202))/(ck51*k27) let ck56 = ((ck1+c204)-ck49)/(ck51*k27) let k57 = k56 + 1 RMin ck55-ck56 ck57 let c234(k46) = Min(ck57) # c234 = coluna com os Cpk Sueli # Cálculo do Cpm multivariado por Sueli let k58 = k57 + 1 let ck58 = (c202+c204)/(2*(sqrt(ck50+((ck1-ck49)**2)))*k27) let c235(k46) = Min(ck58) # c235 = coluna com os Cpm Sueli # Cálculo do Cp multivariado por Niverthi and Dey # a coluna 1700 contem a primeira coluna da matriz de autovetores da matriz de covariâncias let k59 = 1700 + (k4-1) let k60 = k58 + 1 Eigen M27 ck60 m29 # cálculo dos autovalores e autovetores Copy M29 c1700 - ck59 # c1700 - ck59 = colunas formadas pela matriz de autovetores de M1 let k61 = k60 + 1 let ck61 = 1/(sqrt(ck60)) define 0 k4 k4 m30 do k62 = 1700:k59 let k63 = k62 - 1699 copy ck62 m31 Transpose m31 m32 Multiply m31 m32 m33 let k64 = ck61(k63) Multiply k64 m33 m34 Add m34 m30 m30 enddo let k65 = k46 + 1999 Multiply m30 m11 m35 Copy m35 ck65 # c2000 a c2499 = Cp's ND # Cálculo do Cpk multivariado por Niverthi and Dey let k66 = k61 + 1 let ck66 = Ck3-ck49 let k67 = k66 + 1 let ck67 = ck49-ck2 let k68 = k67 + 1 let ck68 = Rmin(ck66,ck67) let k69 = k68 + 1 let ck69 = ck68/3 copy ck69 m36 multiply m30 m36 m37 let k70 = k46 + 2499 copy m37 ck70 # c2500 a c2999 = Cpk ND # Cálculo do Cpm multivariado por Niverthi and Dey let k71 = k69 + 1 let ck71 = ck1-ck49 #excluir let k72 = 1800 + (k4 - 1) #excluir let k73 = k71 + 1 let ck73 = ck1 - ck49 Copy ck73 m38 Transpose M38 m39 Multiply M38 M39 m40 # m40 = matriz A = (d-mi)(d-mi)' Add m27 m40 m41 # m41 = matriz covariancia + matriz A let k74 = k73 + 1 let k75 = 1800 + (k4 - 1) Eigen m41 ck74 m42 # cálculo dos autovalores e autovetores Copy m42 c1800 - ck75 let k76 = k74 + 1 let ck76 = 1/(sqrt(ck74)) define 0 k4 k4 m43 do k77 = 1800:k75 let k78 = k77 - 1799 copy ck77 m44 Transpose m44 m45 Multiply m44 m45 m46 let k79 = ck76(k78) Multiply k79 m46 m47 Add m47 m43 m43 enddo Multiply m43 m25 m48 let k80 = k46 + 2999 copy m48 ck80 # c3000 a c3499 = Cpm ND enddo let k81 = k45*(k8/200) let k82 = ROUND(k81,0) # ponto de corte inferior do IC let k83 = k45*(1-(k8/200)) let k84 = ROUND(k83,0) # ponto de corte superior do IC # Intervalo de confiança do Cp Mingoti Sort c233 c233; by c233. let k85 = c233(k82) let k86 = c233(k84) print "Os limites inferior e superior do intervalo de confiança do Cp modificado para o nível de confiança pedido são respectivamente:" k85 k86 # Intervalo de confiança do Cpk Mingoti Sort c234 c234; by c234. let k87 = c234(k82) let k88 = c234(k84) print "Os limites inferior e superior do intervalo de confiança do Cpk modificado para o nível de confiança pedido são respectivamente:" k87 k88 # Intervalo de confiança do Cpm Mingoti Sort c235 c235; by c235. let k89 = c235(k82) let k90 = c235(k84) print "Os limites inferior e superior intervalo de confiança do Cpm modificado para o nível de confiança pedido são respectivamente:" k89 k90 # Intervalo de conficança do Cp de Niverthi & Dey Transpose c2000-c2499; After. # as colunas sao 3500 a 3500 + (k4-1) let k91 = 3501 + (k4 - 1) do k92 = 3501: k91 let k93 = k92 - 3500 Sort ck92 ck92; by ck92. let c236(k93) = ck92(k82) let c237(k93) = ck92(k84) enddo print "Os valores inferiores e superiores do intervalo de confiança para o Cp por Niverthi & Dey" print "para cada variável no nível de confiança pedido são respectivamente:" c236 c237 # Intervalo de conficança do Cpk de Niverthi & Dey Transpose c2500-c2999; After. # as colunas sao k91 a [k91+(k4-1)] let k94 = 3502 + ((2*k4) - 1) let k95 = k91 + 2 do k96 = k95 : k94 let k97 = k95 - (3502+(k4-1)) Sort ck96 ck96; by ck96. let c238(k97) = ck96(k82) let c239(k97) = ck96(k84) enddo print "Os valores inferiores e superiores do intervalo de confiança para o Cpk por Niverthi & Dey" print "para cada variável no nível de confiança pedido são respectivamente:" c238 c239 # Intervalo de conficança do Cpm de Niverthi & Dey Transpose c3000-c3499; After. # as colunas sao k94 a [k91+((3*k4)-1)] let k98 = k94 + 2 let k99 = 3503 + ((3*k4) - 1) do k100 = k98 : k99 let k101 = k98 - (3503+((2*k4)-1)) Sort ck100 ck100; by ck100. let c241(k101) = ck100(k82) let c242(k101) = ck100(k84) enddo print "Os valores inferiores e superiores do intervalo de confiança para o Cpm por Niverthi & Dey" print "para cada variável no nível de confiança pedido são respectivamente:" c241 c242 endmacro