Após a contaminação dos dados, será executada a função para a detecção dos outliers, linha 24 do Algoritmo 1. O detalhamento da função pode ser vista no Algoritmo 2 que recebe como entrada o conjunto de dados pseudo-reais contaminados (V′), retornando como saída o conjunto de dados (V′′) após a aplicação dos métodos para identificação das anomalias (Ψ).
Algoritmo 2: Detecção de outliers
Entrada: V′ – Dados pseudo-reais com outliers
Saída: V′′– Dados pseudo-reais após remoção de outliers
1 início
2 V′′mve← remove(Ψmve(V′, 0, 975));
3 V′′mcd_aq← remove(Ψmcd_aq(V′, 0, 975));
4 V′′mdc_dd← remove(Ψmcd_dd(V′, 0, 975));
5 V′′med← remove(Ψmed(V′));
6 fim
Como é possível observar, no algoritmo 2, todos os métodos para detecção de outliers (Ψ) serão executados para cada conjunto de dados pseudo-reais contaminados (V′
). Este processo foi adotado para facilitar a comparação entre os métodos. Nas simulações, foram utilizadas matrizes multidimensionais para armazenar o resultado da aplicação de cada método empregado, V′′
mve, V
′′
mcd_aq, V′′mcd_dd e V′′med. Os
métodos mve, mcd_aq e mcd_dd utilizam, respectivamente, as funções cov.mve(), aq.plot()e dd.plot(). A primeira função é pertencente ao pacote MASS, já as duas últimas são pertencentes ao pacote mvoutlier [Filzmoser & Gschwandtner, 2012]. Essas funções recebem como entrada o conjunto de dados a ser analisado (V′) e o intervalo de confiança desejado, em nosso caso, 0, 975, e geram como saída um vetor onde são
4.3. Detecção dos outliers 29
marcadas as amostras contaminadas. Não existe uma função específica para o cálculo do MED, então, esta simulação foi realizada por intermédio de manipulações algébricas, conforme descrito no trabalho de Santana Giroldo & Barroso [2008].
As manipulações algébricas utilizadas no cálculo do MED estão descritas no algo- ritmo 3. O algoritmo recebe como entrada o conjunto de dados com outliers (V′) e tem como saída um conjunto de dados que representa o valor do MED para cada amostra. Antes de iniciar o laço da linha 2, serão calculados a média, a matriz de covariância, os autovalores e os autovetores do conjunto V′
, representados, respectivamente por mean, vardata, autoval, e autovet. Para calcular a média aritmética, utilizamos a função colMean, pertencente ao pacote base [R Development Core Team, 2012]. Esta função recebe uma matriz de dados como entrada, e retorna a média aritmética das colunas.
A covariância foi obtida por intermédio da função var, do pacote stats, e recebe como entrada um conjunto de dados, representando por uma matriz, e retorna sua matriz de covariância. A função eigen do pacote base foi utilizada para a extração dos autovalores e autovetores da matriz de covariância. O primeiro autovalor de autoval será copiado para a última posição do vetor AUT OV AL, que tem tamanho n + 1, onde n representa o tamanho da amostra. Na última posição da matriz AUT OV ET , de tamanho p × n + 1, onde p indica o número de variáveis, serão salvos os primeiros autovetores da matriz de covariância dos dados com outliers.
• Linhas 2 – 11: Representa o cálculo da média aritmética, matriz de covariância, dos autovalores e autovetores, do conjunto de dados pseudo-real com outliers (V′
), extraída a amostra atualmente analisada.
• Linha 12: Representa o produto dos autovalores por autovetores do conjunto de dados V′
.
• Linhas 13 – 15: Representa o cálculo do produto dos autovalores por autovetores do conjunto de dados V′, porém, desconsiderando-se cada amostra analisada. • Linhas 16 – 18: Representa o cálculo da diferença do produto dos autovalores e
autovetores de cada amostra em relação aos autovetores e autovalores do conjunto completo.
• Linhas 19 – 25: Representa o cálculo da norma euclidiana para cada amostra de V′.
• Linhas 26 – 40: Representa o cálculo de uma função indicadora, conforme descrito no trabalho de Santana Giroldo & Barroso [2008].
30 Capítulo 4. Processo de simulação
Algoritmo 3: Max-eigen difference (MED)
Entrada: V′ – Dados pseudo-reais com outliers
Saída: outliermed – Vetor indicando o valor de MED para cada amostra
1 início
2 parai ← 1; i ≤ n; i ← i + 1 faça
3 M D ← V′
−i;
4 mean1 ← colM eans(M D);
5 vardata1 ← var(M D);
6 avv.dados1 ← eigen(vardata1);
7 autoval1 ← eigen(vardata, only.values = T RU E$values);
8 autovet1 ← eigen(vardata, only.values = F ALSE$vectors);
9 AU T OV AL[i] ← autoval[1];
10 AU T OV ET [, i] ← autovet[, 1];
11 fim
12 P ROD ← AU T OV AL[n + 1] ∗ AU T OV ET [, n + 1];
13 parai ← 1; i ≤ n; i ← i + 1 faça
14 P ROD ← AU T OV AL[i] ∗ AU T OV ET [, i];
15 fim
16 parai ← 1; i ≤ n; i ← i + 1 faça
17 DIF ← P ROD[, i] − P ROD[, n + 1];
18 fim
19 parai ← 1; i ≤ n; i ← i + 1 faça
20 somadif ← 0;
21 paraj ← 1; i ≤ p; j ← j + 1 faça
22 somadif ← somadif + (DIF [i, j])2;
23 fim
24 norma[i] ← sqrt(somadif );
25 fim
26 parai ← 1; i ≤ n; i ← i + 1 faça
27 paraj ← 1; i ≤ p; j ← j + 1 faça
28 y[i, j] ← (t(V′i− mean) ∗ autovet[, j])2;
29 fim
30 fim
31 parai ← 1; i ≤ n; i ← i + 1 faça
32 paraj ← 1; i ≤ p; j ← j + 1 faça
33 sey[i, j] < autoval[j] então
34 indicador[i, j] ← 1;
35 fim
36 senão sey[i, j] ≥ autoval[j] então
37 indicador[i, j] ← 0; 38 fim 39 fim 40 fim 41 parai ← 1; i ≤ n; i ← i + 1 faça 42 produtorio[i] ← 1; 43 paraj ← 1; i ≤ p; j ← j + 1 faça
44 produtorio ← produtorio ∗ indicador[i, j];
45 fim
46 d[i] ← norma[i] ∗ (1 − produtorio[i]);
47 fim
48 parai ← 1; i ≤ n; i ← i + 1 faça
49 somad← somad+ d[i];
50 fim
51 parai ← 1; i ≤ n; i ← i + 1 faça
52 outlier_med ← d[i]/somad;
53 fim
4.3. Detecção dos outliers 31
• Linhas 41 – 47: Representa o cálculo do MED para cada amostra.
• Linhas 48 – 54: Representa o cálculo do MED padronizado para cada amostra. Esse valor é obtido dividindo-se a distância de cada amostra pelo somatório de todas as distâncias do conjunto.
Assim, as amostras serão definidas como outlier sempre que, seu valor de MED exceder a média ± desvio padrão do conjunto de valores do MED (outlier_med).
Os métodos empregados estavam reportando um elevado número de falsos po- sitivos, i.e., quando os dados normais são erroneamente classificados como outliers. Para reduzir esse número, convencionou-se que, os dados marcados como outliers pelos métodos utilizados, MVE, MCD e MED, só serão definitivamente classificados como outliers, após a passagem por um filtro. Esse, compara a amostra considerada com a mediana ± desvio padrão e, sempre que este valor for excedido, dos dados pré clas- sificados serão definitivamente marcados como outliers. A mediana foi escolhida por sofrer menor interferência das anomalias.
Algoritmo 4: Filtro baseado na mediana
Entrada: Ψ – Candidatos a outliers
Saída: V′′– Dados pseudo-reais após a remoção de outleirs
1 início
2 m ← median(V);
3 σ ← sd(V);
4 para i ← 1; i ≤ n; i ← i + 1 faça
5 seΨnfor candidato a outlier então
6 f lag ← 0;
7 paraj ← 1; j ≤ p; j ← j + 1 faça
8 se V′i,j≥ mj+ σj então
9 f lag ← f lag + 1;
10 fim
11 senão se V′i,j≤ mj− σj então
12 f lag ← f lag + 1; 13 fim 14 fim 15 sef lag > 0 então 16 remover(V′i,j); 17 fim 18 fim 19 fim 20 fim
O algoritmo 4, traz o pseudo-código do filtro aplicado. Esse algoritmo recebe como entrada os dados pré-classificados como outliers, utilizando os métodos MVE, MCD e MED, e retorna o conjunto de dados final, após a remoção dos outliers.
32 Capítulo 4. Processo de simulação
• Linhas 2 e 3: Representa, respectivamente, o cálculo da mediana e do desvio padrão dos dados com outliers. Para isso são utilizadas as funções madian() e sd(), ambas pertencentes ao stats do software R.
• Linha 4: Representa o laço utilizado para percorrer o número de amostras consi- deradas, ou seja, o número de linhas da matriz de entrada (n).
• Linha 5: Representa o processo de verificação para comprovar se a amostra atual foi marcada como candidata a outlier.
• Linha 7: Representa o laço utilizado para percorrer o número de variáveis consi- deradas (p), ou seja, o número de colunas da matriz de entrada.
• Linhas 8 – 13: Realiza a comparação da amostra atualmente analisada com o limite definido pelo filtro (mediana ± desvio padrão).
• Linha 15: Representa o processo de exclusão de uma amostra do conjunto ana- lisado. Esta exclusão é realizada sempre que uma ou mais variáveis de uma amostra estiver fora do padrão definido pelo filtro (mediana ± desvio padrão).