############## ####FUNÇÃO#### ############## les<- function (x, atr,K , r, destaque) { ##Fazendo uma análise exploratória nos argumentos if(missing(K) & missing(r)) #Analisando se o usuário colocou o arg r ou K { return("Necessário informar o argumento K ou r") #Retornando uma msg caso o arg r ou K esteja faltando } if(missing(x)) #Analisando se o usuário colocou o arg x { return("Necessário informar o data.frame de entrada no argumento x")#Retornando uma msg caso o arg x esteja faltando } if(missing(atr)) #Analisando se o usuário colocou o arg atr { return("Necessário informar quais são os atributos a serem analisados no argumento atr") ##Retornando uma msg caso o argumento atr esteja faltando } ##Criando objeto que será trabalhado dentro da função atr.df<- data.frame(x[atr]) #Transpondo os atributos do data.frame x para o data.frame atr.df ##Analisando qual será o tamanho da janela gráfica que será necessária para plotar as relações entre os atributos tam <- length(atr) #Guardando a quantidade de atributos que o usuário irá anlisar lado<- sqrt(tam) #Tirando a raiz da quantidade de atributos para montar a janela gráfica hor <- ceiling(lado) #A quantidade de gráficos na horizontal sempre será o valor da raiz arredondado para cima ver <- round(lado) #A quantidade de gráficos na vertical sempre será o valor da raiz arredondada segundo a regra de arredondamento x11() #Abrindo janela gráfica par(mfrow = c(hor,ver), bty = "l") #Essa relação vai ajustar os gráficos da forma mais próximo do ótimo para que eles não fiquem pequenos e ao mesmo tempo não sobrem "janelas vazias" ##Vendo quais atributos estão correlacionados com o K, e conversão dos valores dos atributos para o índice if(!missing(K)) #Vendo se o usuário usou o arg K para indicar alguma estratégia { indice= data.frame(rep(NA,length(atr.df[,1]))) #Criando um data.frame para guardar os valores do índice do ciclo for (i in 1:tam) #Iniciando o ciclo que irá fazer os teste entre os atr´s e o atr K { mod <- lm(K~atr.df[,i]) #Criando o modelo suppressWarnings(teste <- anova(mod)) #Testando se o modelo é significativo, coloquei o comando suppressWarnings, pois um dos modelos irá analisar a relação entre a mesma coluna do data.frame de entrada, e nessa situação há a saída de uma warning message que não é necessária nome.y <- colnames(atr.df)[i] #Criando o nome que será atribuido ao eixo y no plot do modelo titulo<- c("Valor do teste" , round(teste$`Pr(>F)`, 3)) #Criando o nome que será atribuido ao título no plot do modelo que é o valor de p no teste anova plot(atr.df[,i]~K, ylab = as.graphicsAnnot(nome.y), main = as.graphicsAnnot(titulo)) #Plotando a relação entre os atr´s if(teste$`Pr(>F)`[1]<0.05) #Vendo se o modelo é significativo { if(mod$coefficients[2]>0) #Vendo se a relação entre os atributos é positiva { indice[i]= (atr.df[i]-min(atr.df[i]))/(max(atr.df[i])-min(atr.df[i])) #Calculando o indice para os atributos positivamente relacionados ao atr. K } else #Caso a relação entre os atributos seja negativa em relação a K { indice[i]= abs((atr.df[i]-min(atr.df[i]))/(max(atr.df[i])-min(atr.df[i]))-1) #Calculando o indice para os atributos negativamente relacionados ao atr. K } } else #Caso a relação entre os atr não seja significativa { indice[i]<- rep(NA, length(atr.df[i])) #Atribuindo NA´s ao data.frame pois a relação não é siginificativa } } } ##Vendo quais atributos estão correlacionados com o r, e conversão dos valores dos atributos para o índice, essa parte é muito parecida com a do K, só invertendo alguns sinais else #Caso o usuário tenha usado o arg. r para indicar alguma estratégia { indice= data.frame(rep(NA,length(atr.df[,1]))) #Criando um data.frame para guardar os valores do índice do ciclo for (i in 1:tam) #Iniciando o ciclo que irá fazer os teste entre os atr´s e o atr r { mod <- lm(r~atr.df[,i]) #Criando o modelo suppressWarnings(teste <- anova(mod)) #Testando se o modelo é significativo, coloquei o comando suppressWarnings, pois um dos modelos irá analisar a relação entre a mesma coluna do data.frame de entrada, e nessa situação há a saída de uma warning message que não é necessária nome.y <- colnames(atr.df)[i] #Criando o nome que será atribuido ao eixo y no plot do modelo titulo<- c("Valor do teste" , round(teste$`Pr(>F)`, 3)) #Criando o nome que será atribuido ao título no plot do modelo que é o valor de p no teste anova plot(atr.df[,i]~r, ylab = as.graphicsAnnot(nome.y), main = as.graphicsAnnot(titulo)) #Plotando a relação entre os atr´s if(teste$`Pr(>F)`[1]<0.05) #Vendo se o modelo é significativo { if(mod$coefficients[2]<0) #Vendo se a relação entre os atributos é negativa { indice[i]= (atr.df[i]-min(atr.df[i]))/(max(atr.df[i])-min(atr.df[i])) ##Calculando o indice para os atributos negativamente relacionados ao atr. r } else #Caso a relação entre os atributos seja positiva em relação a r { indice[i]= abs((atr.df[i]-min(atr.df[i]))/(max(atr.df[i])-min(atr.df[i]))-1) #Calculando o indice para os atributos positivamente relacionados ao atr. r } } else #Caso a relação entre os atributos não seja significativa { indice[i]<- rep(NA, length(atr.df[i])) #Atribuindo NA´s ao data.frame pois a relação não é siginificativa } } } indice <- indice[,colSums(is.na(indice))