Como usar a função jitter em r para nuvens de pontos


Este tutorial explica quando e como usar a função jitter em R para nuvens de pontos.

Quando usar o jitter

Os gráficos de dispersão são excelentes para visualizar a relação entre duas variáveis contínuas. Por exemplo, o gráfico de dispersão a seguir nos ajuda a visualizar a relação entre altura e peso para 100 atletas:

 #define vectors of heights and weights
weights <- runif(100, 160, 240) 
heights <- (weights/3) + rnorm(100)

#create data frame of heights and weights
data <- as.data.frame(cbind(weights, heights))

#view first six rows of data frame
head(data)

# weights heights
#1 170.8859 57.20745
#2 183.2481 62.01162
#3 235.6884 77.93126
#4 231.9864 77.12520
#5 200.8562 67.93486
#6 169.6987 57.54977
#create scatterplot of heights vs weights
plot(data$weights, data$heights, pch = 16, col = 'steelblue')

No entanto, às vezes podemos querer visualizar a relação entre uma variável contínua e outra variável quase contínua.

Por exemplo, suponha que temos o seguinte conjunto de dados que mostra o número de jogos que um jogador de basquete iniciou nos primeiros 10 jogos de uma temporada, juntamente com sua média de pontos por jogo:

 #create data frame
games_started <- sample(1:10, 300, TRUE)
points_per_game <- 3*games_started + rnorm(300)
data <- as.data.frame(cbind(games_started, points_per_game))

#view first six rows of data frame
head(data)

# games_started points_per_game
#1 9 25.831554
#2 9 26.673983
#3 10 29.850948
#4 4 12.024353
#5 4 11.534192
#6 1 4.383127

Os pontos por jogo são uma variável contínua, mas os jogos iniciados são uma variável discreta. Se tentarmos criar um gráfico de dispersão dessas duas variáveis, ficaria assim:

 #create scatterplot of games started vs average points per game
plot(data$games_started, data$points_per_game, pch = 16, col = 'steelblue')

A partir deste gráfico de dispersão podemos dizer que os jogos iniciados e a média de pontos por jogo têm uma relação positiva, mas é um pouco difícil ver os pontos individuais no gráfico porque muitos deles se sobrepõem.

Usando a função Jitter , podemos adicionar algum “ruído” aos conjuntos de variáveis do eixo X lançados para que possamos ver os pontos individuais no gráfico com mais clareza:

 #add jitter to games started
plot( jitter (data$games_started), data$points_per_game, pch = 16, col = 'steelblue')

Opcionalmente, podemos adicionar um argumento numérico ao jitter para adicionar ainda mais ruído aos dados:

 #add jitter to games started
plot( jitter (data$games_started, 2 ), data$points_per_game, pch = 16, col = 'steelblue')

Devemos ter cuidado para não adicionar muito jitter, pois isso poderia distorcer demais os dados originais:

 plot( jitter (data$games_started, 20 ), data$points_per_game, pch = 16, col = 'steelblue')

Jittering fornece uma melhor visualização dos dados

A instabilidade é particularmente útil quando um dos níveis da variável discreta tem muito mais valores que os outros níveis.

Por exemplo, no conjunto de dados a seguir, há trezentos jogadores de basquete que iniciaram 2 dos primeiros 5 jogos da temporada, mas apenas cerca de 100 jogadores que iniciaram 1, 3, 4 ou 5 jogos:

 games_started <- sample(1:5, 100, TRUE)
points_per_game <- 3*games_started + rnorm(100)
data <- as.data.frame(cbind(games_started, points_per_game))

games_twos <- rep(2, 200)
points_twos <- 3*games_twos + rnorm(200)
data_twos <- as.data.frame(cbind(games_twos, points_twos))
names(data_twos) <- c('games_started', 'points_per_game')

all_data <- rbind(data, data_twos)

Quando visualizamos o número de partidas disputadas em relação à média de pontos por partida, podemos dizer que há mais jogadores que disputaram 2 partidas, mas é difícil dizer exatamente quantos outros disputaram 2 partidas:

 plot(all_data$games_started, all_data$points_per_game, pch = 16, col = 'steelblue')

No entanto, uma vez que adicionamos jitter à variável de início do jogo , podemos ver quantos jogadores adicionais iniciaram 2 jogos:

 plot( jitter (all_data$games_started), all_data$points_per_game,
     pch=16, col='steelblue')

Aumentar ligeiramente a quantidade de jitter revela ainda mais essa diferença:

 plot( jitter (all_data$games_started, 1.5 ), all_data$points_per_game,
     pch=16, col='steelblue')

Jitter apenas para visualizações

Conforme mencionado anteriormente, a tremulação adiciona ruído aleatório aos dados, o que pode ser benéfico quando queremos visualizar dados em uma nuvem de pontos. Ao usar a função jitter, podemos obter uma imagem melhor do verdadeiro relacionamento subjacente entre duas variáveis em um conjunto de dados.

No entanto, ao utilizar análises estatísticas como a regressão, não faz sentido adicionar ruído aleatório às variáveis num conjunto de dados, pois isso teria impacto nos resultados de uma análise.

Portanto, o jitter deve ser usado apenas para visualização de dados, não para análise de dados.

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *