Jak korzystać z funkcji jitter w r dla chmur punktów


W tym samouczku wyjaśniono, kiedy i jak używać funkcji jitter w R dla chmur punktów.

Kiedy stosować jitter

Wykresy punktowe doskonale nadają się do wizualizacji związku między dwiema zmiennymi ciągłymi. Na przykład następujący wykres rozrzutu pomaga nam zwizualizować związek między wzrostem i masą ciała dla 100 sportowców:

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

Czasami jednak możemy chcieć wizualizować związek pomiędzy zmienną ciągłą a inną zmienną prawie ciągłą.

Załóżmy na przykład, że mamy następujący zbiór danych pokazujący liczbę meczów rozpoczętych przez koszykarza w ciągu pierwszych 10 meczów w sezonie wraz ze średnią jego punktów na mecz:

 #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

Liczba punktów na mecz jest zmienną ciągłą, ale rozpoczęte gry to zmienna dyskretna. Jeśli spróbujemy utworzyć wykres rozrzutu tych dwóch zmiennych, będzie to wyglądać tak:

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

Na podstawie tego wykresu rozrzutu możemy stwierdzić, że rozpoczęte gry i średnia punktów na mecz mają dodatnią zależność, ale trochę trudno jest dostrzec poszczególne punkty na wykresie, ponieważ wiele z nich się pokrywa.

Korzystając z funkcji Jitter , możemy dodać trochę „szumu” do rzucanych zbiorów zmiennych osi X, dzięki czemu będziemy mogli wyraźniej zobaczyć poszczególne punkty na wykresie:

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

Opcjonalnie możemy dodać argument numeryczny do jitter, aby dodać jeszcze więcej szumu do danych:

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

Musimy jednak uważać, aby nie dodać zbyt dużego jittera, ponieważ może to zbytnio zniekształcić oryginalne dane:

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

Jittering zapewnia lepszy widok danych

Niestabilność jest szczególnie przydatna, gdy jeden z poziomów zmiennej dyskretnej ma znacznie więcej wartości niż pozostałe poziomy.

Na przykład w poniższym zbiorze danych znajduje się trzystu koszykarzy, którzy rozpoczęli 2 z pierwszych 5 meczów w sezonie, ale tylko około 100 graczy, którzy rozpoczęli 1, 3, 4 lub 5 meczów:

 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)

Gdy porównamy liczbę rozegranych gier do średniej liczby punktów na mecz, możemy powiedzieć, że jest więcej graczy, którzy rozegrali 2 mecze, ale trudno dokładnie powiedzieć , ilu innych rozegrało 2 mecze:

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

Jednakże, gdy dodamy jitter do zmiennej początku gry , możemy zobaczyć, ilu dodatkowych graczy rozpoczęło 2 gry:

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

Nieznaczne zwiększenie poziomu jittera jeszcze bardziej ujawnia tę różnicę:

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

Jitter tylko dla wizualizacji

Jak wspomniano wcześniej, drgania dodają do danych losowy szum, co może być korzystne, gdy chcemy wizualizować dane w chmurze punktów. Używając funkcji jitter, możemy uzyskać lepszy obraz prawdziwej zależności pomiędzy dwiema zmiennymi w zbiorze danych.

Jednakże w przypadku stosowania analizy statystycznej, takiej jak regresja, nie ma sensu dodawanie szumu losowego do zmiennych w zbiorze danych, ponieważ miałoby to wpływ na wyniki analizy.

Zatem jitter jest przeznaczony wyłącznie do wizualizacji danych, a nie do analizy danych.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *