Как использовать функцию jitter в 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')

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

Например, предположим, что у нас есть следующий набор данных, который показывает количество игр, которые баскетболист начал в первых 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')

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

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

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

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

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

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

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

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

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

Например, в следующем наборе данных есть триста баскетболистов, которые начали 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')

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

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

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

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

Джиттер только для визуализаций

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *