Come utilizzare la funzione jitter in r per le nuvole di punti


Questo tutorial spiega quando e come utilizzare la funzione jitter in R per le nuvole di punti.

Quando utilizzare il jitter

I grafici a dispersione sono eccellenti per visualizzare la relazione tra due variabili continue. Ad esempio, il seguente grafico a dispersione ci aiuta a visualizzare la relazione tra altezza e peso per 100 atleti:

 #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')

Tuttavia, a volte potremmo voler visualizzare la relazione tra una variabile continua e un’altra variabile quasi continua.

Ad esempio, supponiamo di avere il seguente set di dati che mostra il numero di partite iniziate da un giocatore di basket nelle prime 10 partite di una stagione insieme alla media dei suoi punti per partita:

 #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

I punti per partita sono una variabile continua, ma le partite iniziate sono una variabile discreta. Se proviamo a creare un grafico a dispersione di queste due variabili, ecco come apparirebbe:

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

Da questo grafico a dispersione possiamo dire che le partite iniziate e la media dei punti per partita hanno una relazione positiva, ma è un po’ difficile vedere i singoli punti nella trama perché molti di essi si sovrappongono.

Usando la funzione Jitter , possiamo aggiungere un po’ di “rumore” ai set di variabili dell’asse X generati in modo da poter vedere più chiaramente i singoli punti sulla trama:

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

Facoltativamente possiamo aggiungere un argomento numerico al jitter per aggiungere ancora più rumore ai dati:

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

Dobbiamo fare attenzione a non aggiungere troppo jitter, perché questo potrebbe distorcere troppo i dati originali:

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

Il jittering fornisce una migliore visualizzazione dei dati

L’instabilità è particolarmente utile quando uno dei livelli della variabile discreta ha molti più valori rispetto agli altri livelli.

Ad esempio, nel seguente set di dati, ci sono trecento giocatori di basket che hanno iniziato 2 delle prime 5 partite della stagione, ma solo circa 100 giocatori che hanno iniziato 1, 3, 4 o 5 partite:

 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 visualizziamo il numero di partite giocate rispetto alla media dei punti per partita, possiamo dire che ci sono più giocatori che hanno giocato 2 partite, ma è difficile dire esattamente quanti altri hanno giocato 2 partite:

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

Tuttavia, una volta aggiunto il jitter alla variabile di inizio gioco , possiamo vedere quanti giocatori aggiuntivi hanno iniziato 2 partite:

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

Aumentando leggermente la quantità di jitter si rivela ancora di più questa differenza:

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

Jitter solo per visualizzazioni

Come accennato in precedenza, il jitter aggiunge rumore casuale ai dati, il che può essere utile quando si desidera visualizzare i dati in una nuvola di punti. Utilizzando la funzione jitter, possiamo ottenere un quadro migliore della vera relazione sottostante tra due variabili in un set di dati.

Tuttavia, quando si utilizza un’analisi statistica come la regressione, non ha senso aggiungere rumore casuale alle variabili in un set di dati, poiché ciò influirebbe sui risultati di un’analisi.

Pertanto il jitter deve essere utilizzato solo per la visualizzazione dei dati, non per l’analisi dei dati.

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *