AHPmediaD_function(r, n, m, dados){ # cat("************************************************************************************************************************", fill=T) cat("Analise Hierarquica (Saaty,1977, 1991) para mais de um julgador", fill=T) cat("Macro: AHPmediaD", fill=T) cat("Versao: 1.0 ",fill=T) cat("Ano: 2005", fill=T) cat("Autores: Giselle Silva de Carvalho (Bacharelanda em Estatistica)", fill=T) cat(" Sueli Aparecida Mingoti (Profa. Adjunta- UFMG - Depto. de Estatistica - orientadora)", fill=T) cat( , fill=T) cat("Descricao do programa: Este programa implementa a analise hierarquica de acordo com o proposto por Saaty (1991). ") cat("Permite que o usuario faca a analise hierarquica para varios julgadores. A analise hierarquica e efetuada para cada ") cat("julgador separadamente assim como a analise de consistencia e a estimacao dos pesos dos atributos e ") cat("a classificacao dos objetos em avaliacao. No final, calcula-se a media das classificacoes tendo-se uma solucao final.", fill=T) cat( , fill=T) cat("Nota: Este programa funciona em S-Plus versoes 2000 ou superior.", fill=T) cat( , fill=T) cat("Referencias Bibliograficas:", fill=T) cat( , fill=T) cat("Saaty, T. L. (1977) A scaling method for priorities in hierarchical structures. Journal of Mathematical Psychology 15,234-281.", fill=T) cat( , fill=T) cat("Saaty, T. L. (1991) Metodo de analise hierarquica. MacGraw-Hill, Sao Paulo.", fill=T) cat("************************************************************************************************************************", fill=T) cat( , fill=T) cat( , fill=T) #r e o numero de repeticoes, ou seja, o tamanho da amostra de julgadores. # #Esta funcao devolve a media da ordenacao final dos itens que estao sendo comparados!! # cat( , fill=T) cont_0 soma_array(data=0, dim=c(n, 1)) if (r==1){ cat("************************************************************************************************************************", fill=T) AnaHier(n, m, dados) cat("************************************************************************************************************************", fill=T) } else if (r<1){ cat("!!!!!! NUMERO DE JULGADORES INVALIDO!!!!!!", fill=T) } else { numMatriz_0 for (k in seq(1, r*m, by=m)){ dadosN_dados[k:(k+(m-1)), 1:(m+(n*m))] numMatriz_numMatriz+1 # #A Analise Hierarquica: # #n é o número de itens e m é o números de atributos. W_c() TN_c() v_c() X_c() XN_array(dim=c(n, m)) RC_0 R_c() S_0 nm_m+(n*m) dados1_dadosN[1:m,1:m] dados2_dadosN[1:n,(m+1):nm] #indice de consistencia randomico: CR_c(0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45) #Cálculo do autovetor TN (normalizado): for (i in 1:m){ W[i]_(prod(dados1[i,]))^(1/m) } TN_W/(sum(W)) #cálculo do autovalor Lâmbda: for (i in 1:m){ v[i]_sum(dados1[,i]) } lambda_TN%*%v #Cálculo do Índice de consistência: IC_(lambda-m)/(m-1) #cáculo da razão de consistência: if (m==1||m==2) { RC_IC/CR[1] } else if (m==3) { RC_IC/CR[3] } else if (m==4) { RC_IC/CR[4] } else if (m==5) { RC_IC/CR[5] } else if (m==6) { RC_IC/CR[6] } else if (m==7) { RC_IC/CR[7] } else if (m==8) { RC_IC/CR[8] } else if (m==9) { RC_IC/CR[9] } else { cat("PARA A MATRIZ DO JULGADOR: ", numMatriz, fill=T) cat("NAO E POSSIVEL CALCULAR A RAZAO DE CONSISTENCIA, POIS m > 9!!!", fill=T) cat( , fill=T) R_NA } #testando a consistencia da matriz: if (RC==0) { if (IC>=0.10){ cat("A MATRIZ DE COMPARACAO DOS ATRIBUTOS DO JULGADOR: ", numMatriz, fill=T) cat("NAO E CONSISTENTE, POIS O INDICE DE CONSISTENCIA É MAIOR QUE 0.10!!!", fill=T) cat( , fill=T) R_NA } else { #A matriz e consistente! #Análise dos ítens em relação a cada atributo: #calculo dos autovetores (normalizados): for (j in 1:m){ for (i in seq(1, (n*m), by=n)){ for (k in i:(i+(n-1))) { X[k]_(prod(dados2[k,]))^(1/n) } S_S+1 XN[,S]_X[i:(i+(n-1))]/(sum(X[i:(i+(n-1))])) } } R_TN%*%XN } } else if (RC>0.10) { cat("A MATRIZ DE COMPARACAO DOS ATRIBUTOS DO JULGADOR: ", numMatriz, fill=T) cat("NAO E CONSISTENTE, POIS A RAZAO DE CONSISTENCIA E MAIOR QUE 0.10!", fill=T) cat( , fill=T) R_NA } else { #A matriz e consistente! #Análise dos ítens em relação aos atributos: #calculo dos autovetores (normalizados): for (j in 1:m){ S_0 for (i in seq(1, (n*m), by=n)){ c_i p_i+(n-1) for (k in 1:3) { X[k]_(prod(dados2[k,c:p]))^(1/n) } S_S+1 XN[,S]_X/(sum(X)) } } R_XN%*%TN } testeR_is.na(R) #Calculo da media apenas para as matrizes consistentes!! if (testeR == F){ #Calculo da media das ordenacoes dos itens: # soma_soma+R cont_cont+1 } } mediafinal_soma/cont cat("************************************************************************************************************************", fill=T) cat("Vetor da media das ordenacoes finais dos itens: ", mediafinal, fill=T) if (cont == 0){ cat("Nenhuma das matrizes de comparacao dos atributos e consistente!", fill=T) } cat("************************************************************************************************************************", fill=T) } }