Detecção de outliers com o R

Outliers são valores atípicos e distantes das demais observações de um determinado conjunto de dados. A depender do tipo de análise que você esteja fazendo, eles podem distorcer os resultados, levando a conclusões nem sempre verdadeiras. Por isso, é sempre importante fazer uma análise exploratória dos dados, se certificando de que o seu conjunto de dados não está contaminado com esse tipo de problema.

De modo a ilustrar como detectar e descartar outliers no R, vou mostrar aqui a parte introdutória de um exercício relacionando a inflação observada com as expectativas de inflação. Os dados estão disponíveis no Banco Central. Para começar, eu carrego alguns pacotes como abaixo.


## Pacotes
library(rbcb)
library(tidyverse)
library(scales)
library(ggrepel)
library(png)
library(grid)
library(gridExtra)
library(sidrar)
library(readxl)
library(xts)
library(grDevices)
library(ggalt)

Com o pacote rbcb, eu importo os dados de inflação e de expectativa de inflação, já fazendo um tratamento dessa última. O objetivo é ter um tibble com dados mensais de ambas as variáveis.


## Importar expectativas de inflação
expinf = get_twelve_months_inflation_expectations('IPCA',
start_date = '2001-11-01')

expectativa = expinf$mean[expinf$smoothed=='N' & expinf$base==0]
dates = expinf$date[expinf$smoothed=='N' & expinf$base==0]

expinf12 = xts(expectativa, order.by = dates)
expinf12 = apply.monthly(expinf12, FUN=mean)
expinf12 = expinf12[-length(expinf12)]

## Importar inflação
inflacao = get_series(13522, start_date='2001-11-01')

## Juntar dados
data = tibble(date=inflacao$date,
expfocus=as.numeric(expinf12),
inflacao=inflacao$`13522`)
colnames(data) = c('date', 'expfocus', 'inflacao')

Com os dados disponíveis, nós podemos gerar um gráfico de correlação já chamando atenção para os outliers presentes no conjunto de dados. O código abaixo implementa.


select.outliers = data[data$inflacao > min(boxplot.stats(data$inflacao)$out) |
data$expfocus > min(boxplot.stats(data$expfocus)$out),]

ggplot(data, aes(x=inflacao, y=expfocus))+
geom_point(stat='identity')+
geom_encircle(aes(x=inflacao, y=expfocus),
data=select.outliers,
color="red",
size=2,
expand=0.08)+
annotate('text', x=14, y=10,
label='Outliers',
colour='darkblue', size=4.5)+
labs(x='Inflação Observada', y='Expectativa de Inflação',
title='Inflação vs. Expectativa de Inflação no Brasil',
caption='Fonte: analisemacro.com.br com dados do BCB.')

Observe que estou usando a função boxplot.stats do pacote grDevices para construir o intervalo onde vou circular os possíveis outliers do conjunto de dados. Com essa função, nós conseguimos definir um outlier como sendo os valores que estão fora do intervalo composto por [(Q1 - 1,5*IQR), (Q3 + 1,5*IQR)] - para quem é iniciante em estatística, talvez seja necessário conhecer nosso Curso de Estatística usando R e Python A seguir colocamos o gráfico.

Uma vez identificadas as observações consideradas outliers, nós podemos nos livrar dela com o código abaixo.


outliers = c(boxplot.stats(data$inflacao)$out,
boxplot.stats(data$expfocus)$out)

data_outliers = data[-c(which(data$inflacao %in% outliers),
which(data$expfocus %in% outliers)),]

Produzimos agora um gráfico de correlação sem os pontos considerados outliers como abaixo.

Bem melhor, não?

__________________________

(*) Isso e muito mais você aprende em nossos Cursos Aplicados de R e Python.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Previsões do Boletim Focus em Anos Eleitorais

Eleições são momentos de incerteza, mas os dados do Boletim Focus mostram que nem toda incerteza é igual. Ao analisar as previsões de inflação, juros e câmbio nos anos que antecederam as eleições de 2014, 2018 e 2022, este post investiga como o mercado revisa cenários macroeconômicos ao longo do tempo.

Como Medir o Ciclo das Concessões de Crédito usando Python

Este exercício apresenta uma análise quantitativa da relação entre o ciclo de concessões de crédito, a atividade econômica e a política monetária no Brasil. Utilizando a linguagem Python, o estudo aplica técnicas de decomposição de séries temporais (X13-ARIMA e Filtro HP) para isolar os componentes cíclicos dos dados. Os resultados da modelagem econométrica confirmam a pró ciclicidade do crédito em relação ao hiato do produto e sua sensibilidade às variações no hiato da taxa de juros real.

Choque de juros e renda em bens duráveis e não duráveis usando Python

Este artigo analisa a dinâmica do consumo no Brasil utilizando Python e modelos de Vetores Autorregressivos (VAR). Ao segregar bens duráveis e não duráveis, o estudo quantifica a sensibilidade a choques de juros e renda. Criamos todo o processo através do ciclo de dados: coleta, tratamento, análise de dados, modelagem e apresentação dos resultados, tudo automatizado usando a linguagem Python.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.