Eu tenho um conjunto de dados supondo que os vizinhos mais próximos são os melhores preditores. Apenas um exemplo perfeito de gradiente bidirecional visualizado-
Suponha que tenhamos um caso em que faltam poucos valores, podemos prever facilmente com base em vizinhos e tendências.
Matriz de dados correspondente em R (exemplo fictício para treino):
miss.mat <- matrix (c(5:11, 6:10, NA,12, 7:13, 8:14, 9:12, NA, 14:15, 10:16),ncol=7, byrow = TRUE)
miss.mat
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 5 6 7 8 9 10 11
[2,] 6 7 8 9 10 NA 12
[3,] 7 8 9 10 11 12 13
[4,] 8 9 10 11 12 13 14
[5,] 9 10 11 12 NA 14 15
[6,] 10 11 12 13 14 15 16
Notas: (1) A propriedade de valores ausentes é assumida como aleatória , isso pode acontecer em qualquer lugar.
(2) Todos os pontos de dados são de variável única, mas seu valor é considerado influenciado pela neighbors
linha e coluna adjacentes a eles. Portanto, a posição na matriz é importante e pode ser considerada como outra variável.
Minha esperança em algumas situações é de prever alguns valores fora do normal (pode haver erros) e corrigir o viés (apenas exemplo, vamos gerar esse erro nos dados fictícios):
> mat2 <- matrix (c(4:10, 5, 16, 7, 11, 9:11, 6:12, 7:13, 8:14, 9:13, 4,15, 10:11, 2, 13:16),ncol=7, byrow = TRUE)
> mat2
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 4 5 6 7 8 9 10
[2,] 5 16 7 11 9 10 11
[3,] 6 7 8 9 10 11 12
[4,] 7 8 9 10 11 12 13
[5,] 8 9 10 11 12 13 14
[6,] 9 10 11 12 13 4 15
[7,] 10 11 2 13 14 15 16
Os exemplos acima são apenas ilustrativos (podem ser respondidos visualmente), mas o exemplo real pode ser mais confuso. Estou procurando se existe um método robusto para fazer essa análise. Eu acho que isso deveria ser possível. Qual seria o método adequado para realizar esse tipo de análise? alguma sugestão de programa / pacote R para fazer esse tipo de análise?
fonte
Respostas:
A questão pede maneiras de usar vizinhos mais próximos em uma robusta forma de identificar e valores atípicos localizados corretos. Por que não fazer exatamente isso?
O procedimento é calcular um bom local robusto, avaliar os resíduos e zerar qualquer que seja muito grande. Isso satisfaz todos os requisitos diretamente e é flexível o suficiente para se ajustar a diferentes aplicativos, porque é possível variar o tamanho da vizinhança local e o limite para a identificação de valores extremos.
(Por que a flexibilidade é tão importante? Como qualquer procedimento desse tipo tem uma boa chance de identificar certos comportamentos localizados como sendo "periféricos". Como tal, todos esses procedimentos podem ser considerados " smoothers" . Eles eliminam alguns detalhes juntamente com os aparentemente estranhos. precisa de algum controle sobre o compromisso entre reter os detalhes e não detectar os outliers locais.)
Outra vantagem desse procedimento é que ele não requer uma matriz retangular de valores. De fato, ele pode ser aplicado a dados irregulares usando um local mais adequado para esses dados.
R
, assim como a maioria dos pacotes de estatísticas com todos os recursos, possui vários smoothers locais robustos incorporados, comoloess
. O exemplo a seguir foi processado usando-o. A matriz possui linhas e 49 colunas - quase 4000 entradas. Representa uma função complicada com vários extremos locais, bem como uma linha inteira de pontos onde não é diferenciável (um "vinco"). Para um pouco mais do que 5 % dos pontos - uma proporção muito elevada para ser considerada "periféricas" - foram adicionados erros Gaussianas cujo desvio padrão é de apenas 1 / 20 do desvio padrão dos dados originais. Este conjunto de dados sintético apresenta, portanto, muitos dos recursos desafiadores de dados realistas.Observe que (conforme
R
convenções) as linhas da matriz são desenhadas como faixas verticais. Todas as imagens, exceto os resíduos, são sombreadas para ajudar a exibir pequenas variações em seus valores. Sem isso, quase todos os outliers locais seriam invisíveis!As manchas na trama "Residuais" mostram os óbvios outliers locais isolados. Esse gráfico também exibe outra estrutura (como a faixa diagonal) atribuível aos dados subjacentes. Alguém poderia melhorar esse procedimento usando um modelo espacial dos dados ( por métodos geoestatísticos), mas descrever isso e ilustrá-lo nos levaria muito longe aqui.
fonte
Eu recomendo que você dê uma olhada neste artigo [0]. O problema que ele pretende resolver parece se encaixar bem na sua descrição, exceto que o método proposto pelo autor é um pouco mais refinado do que a entrada NN (embora use algo semelhante como ponto de partida).
A primeira etapa de cada iteração é a etapa de imputação de dados. Isso é feito como no algoritmo EM: as células ausentes são preenchidas pelo valor que se espera que elas tenham (esta é a etapa E).
Para resumir o artigo, aqui está o algoritmo geral que eles propõem:
Então, faça até convergência:
Não conheço uma implementação R pronta para essa abordagem, mas é possível produzir facilmente a partir dos subcomponentes (principalmente um algoritmo PCA robusto), e eles estão bem implementados no R; consulte o pacote rrcov (o artigo é informativo tranquilo sobre este assunto).
fonte