Eu tenho alguns dados multivariados de beleza versus idades. As idades variam de 20 a 40 anos em intervalos de 2 (20, 22, 24 ... 40) e, para cada registro de dados, recebem uma idade e uma classificação de beleza de 1 a 5. Quando faço boxplots desses dados (idades no eixo X, classificações de beleza no eixo Y), há alguns valores discrepantes plotados fora dos bigodes de cada caixa.
Quero remover esses outliers do próprio quadro de dados, mas não tenho certeza de como R calcula outliers para seus gráficos de caixa. Abaixo está um exemplo de como meus dados podem ser.
r
statistics
outliers
Dan Q
fonte
fonte
boxplot
função retorna os outliers (entre outras estatísticas) de forma invisível. Tentefoo <- boxplot(...); foo
ler?boxplot
para entender a saída.Respostas:
OK, você deve aplicar algo assim ao seu conjunto de dados. Não substitua e salve ou você destruirá seus dados! E, aliás, você (quase) nunca deve remover outliers de seus dados:
Para vê-lo em ação:
E, mais uma vez, você nunca deve fazer isso sozinho, os outliers foram feitos para ser! =)
EDIT: Eu adicionei
na.rm = TRUE
como padrão.EDIT2:
quantile
Função removida , adição de subscritos, tornando a função mais rápida! =)fonte
boxplot
. Isso é administrável e você deve marcar a resposta de @Prasad então, pois respondeu à sua pergunta. Se você deseja excluir outliers usando "regra de outlier"q +/- (1.5 * H)
, portanto, execute algumas análises, então use esta função. Aliás, eu fiz isso do zero, sem pesquisar no Google, então há uma chance de eu ter reinventado a roda com essa minha função ...Ninguém postou a resposta mais simples:
Veja também: http://www.r-statistics.com/2011/01/how-to-label-all-the-outliers-in-a-boxplot/
fonte
result = x[!x %in% boxplot.stats(x)$out]
Use
outline = FALSE
como uma opção ao fazer o boxplot (leia a ajuda!).fonte
out
egroup
na lista).A função boxplot retorna os valores usados para fazer a plotagem (que na verdade é feita por bxp ():
De propósito, não respondi à pergunta específica porque considero uma má prática estatística remover "outliers". Eu considero uma prática aceitável não representá-los em um boxplot, mas removê-los apenas porque excedem algum número de desvios-padrão ou algum número de larguras interquartis é uma mutilação sistemática e não científica do registro observacional.
fonte
Pesquisei pacotes relacionados à remoção de outliers e encontrei este pacote (surpreendentemente chamado de "outliers"!): Https://cran.r-project.org/web/packages/outliers/outliers.pdf
se você ler, veja diferentes formas de remoção de outliers e entre elas achei a
rm.outlier
mais conveniente de usar e como diz no link acima: "Se o outlier for detectado e confirmado por testes estatísticos, esta função pode removê-lo ou substituí-lo pela média ou mediana da amostra" e também aqui está a parte de uso da mesma fonte:" Uso
Argumentos
x um conjunto de dados, mais frequentemente um vetor. Se o argumento for um dataframe, o outlier será removido de cada coluna por sapply. O mesmo comportamento é aplicado por apply quando a matriz é fornecida.
preencher Se definido como TRUE, a mediana ou média é colocada em vez de outlier. Caso contrário, o (s) outlier (s) é / são simplesmente removidos.
mediana Se definido como TRUE, a mediana é usada em vez da média na substituição de outlier. oposto se definido como TRUE, dá o valor oposto (se o maior valor tem diferença máxima da média, ele dá o menor e vice-versa) "
fonte
Acho muito fácil remover outliers. No exemplo acima, estou apenas extraindo 2 percentis a 98 percentis dos valores de atributo.
fonte
Não:
realizar essa tarefa com bastante facilidade?
fonte
Somando-se a sugestão de @sefarkas e usando quantis como pontos de corte, pode-se explorar a seguinte opção:
Isso removerá os pontos pontos além do 99º quantil. Cuidado deve ser tomado como o que aL3Xa estava dizendo sobre como manter valores discrepantes. Deve ser removido apenas para obter uma visão conservadora alternativa dos dados.
fonte
0.91
ou0.99
? como emmydata$var < quantile(mydata$var, probs=c(.01, .91))[1])
oumydata$var < quantile(mydata$var, probs=c(.01, .99))[1])
Uma maneira de fazer isso é
ou
fonte
Os valores discrepantes são bastante semelhantes aos picos, então um detector de pico pode ser útil para identificar valores discrepantes. O método descrito aqui tem um desempenho muito bom usando z-scores. A animação na parte inferior da página ilustra o método de sinalização em outliers, ou picos.
Os picos nem sempre são iguais aos outliers, mas são semelhantes com frequência.
Um exemplo é mostrado aqui: Este conjunto de dados é lido de um sensor por meio de comunicações seriais. Erros ocasionais de comunicação serial, erro do sensor ou ambos levam a pontos de dados repetidos e claramente errados. Não há valor estatístico neste ponto. Eles são indiscutivelmente não outliers, são erros. O detector de pico de pontuação z foi capaz de sinalizar pontos de dados espúrios e gerou um conjunto de dados limpo resultante:
fonte
Experimente isso. Alimente sua variável na função e salve o / p na variável que conteria os outliers removidos
fonte