Как использовать функцию джиттера в R для диаграмм рассеяния


В этом руководстве объясняется, когда и как использовать функцию дрожания в R для диаграмм рассеяния.

Когда использовать джиттер

Диаграммы рассеяния отлично подходят для визуализации связи между двумя непрерывными переменными. Например, следующая диаграмма рассеивания помогает нам визуализировать взаимосвязь между ростом и весом для 100 спортсменов:

#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') 
Пример джиттера диаграммы рассеяния в R

Однако в некоторых случаях мы можем захотеть визуализировать взаимосвязь между одной непрерывной переменной и другой переменной, которая почти непрерывна.

Например, предположим, что у нас есть следующий набор данных, который показывает количество игр, которые баскетболист начал из первых 10 игр в сезоне, а также их среднее количество очков за игру:

#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

Очки за игру — непрерывная переменная, а начатые игры — дискретная переменная. Если мы попытаемся создать диаграмму рассеяния этих двух переменных, вот как она будет выглядеть:

#create scatterplot of games started vs average points per game
plot(data$games_started, data$points_per_game, pch = 16, col = 'steelblue') 
Диаграмма рассеяния с непрерывной и дискретной переменной в R

Из этой диаграммы рассеяния мы можем сказать, что игра началась , и среднее количество очков за игру имеет положительную связь, но немного сложно увидеть отдельные точки на графике, потому что многие из них пересекаются друг с другом.

Используя функцию джиттера , мы можем добавить немного «шума» к запущенным играм с переменной по оси X, чтобы мы могли более четко видеть отдельные точки на графике:

#add jitter to *games started*plot( jitter (data$games_started), data$points_per_game, pch = 16, col = 'steelblue') 
Пример диаграммы рассеяния джиттера в R

При желании мы можем добавить числовой аргумент к джиттеру, чтобы добавить еще больше шума к данным:

#add jitter to *games started*plot( jitter (data$games_started, 2 ), data$points_per_game, pch = 16, col = 'steelblue') 
Пример диаграммы рассеяния джиттера в R

Однако мы должны быть осторожны, чтобы не добавить слишком много джиттера, так как это может слишком сильно исказить исходные данные:

plot( jitter (data$games_started, 20 ), data$points_per_game, pch = 16, col = 'steelblue') 
Пример слишком большого джиттера на диаграмме рассеяния в R

Колебание обеспечивает лучшее представление данных

Джиттер особенно полезен, когда один из уровней дискретной переменной имеет гораздо больше значений, чем другие уровни.

Например, в следующем наборе данных есть триста баскетболистов, которые начали 2 из первых 5 игр в сезоне, и только 100 игроков, которые начали 1, 3, 4 или 5 игр:

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)

Когда мы визуализируем количество сыгранных игр по сравнению со средним количеством очков за игру, мы можем сказать, что есть больше игроков, которые сыграли 2 игры, но трудно точно сказать, сколько еще сыграло 2 игры:

plot(all_data$games_started, all_data$points_per_game, pch = 16, col = 'steelblue') 
Пример джиттерплота в R

Однако, как только мы добавим дрожание в переменную начатых игр , мы сможем увидеть, сколько еще игроков начали 2 игры:

plot( jitter (all_data$games_started), all_data$points_per_game,
 pch = 16, col = 'steelblue') 
Диаграмма рассеяния джиттера в R с большими значениями

Небольшое увеличение джиттера еще больше выявляет эту разницу:

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

Диаграмма рассеяния джиттера с 1,5 Дрожание только для визуализаций

Как упоминалось ранее, дрожание добавляет к данным некоторый случайный шум, что может быть полезно, когда мы хотим визуализировать данные на диаграмме рассеяния. Используя функцию джиттера, мы можем получить лучшее представление об истинной базовой взаимосвязи между двумя переменными в наборе данных.

Однако при использовании статистического анализа, такого как регрессия, нет смысла добавлять случайный шум к переменным в наборе данных, поскольку это повлияет на результаты анализа.

Таким образом, джиттер предназначен только для визуализации данных, а не для их анализа.

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.