如何使用r中的jitter函数处理点云
本教程解释了何时以及如何使用 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')
抖动提供了更好的数据视图
当离散变量的某个级别的值比其他级别多得多时,不稳定性特别有用。
例如,在以下数据集中,有 300 名篮球运动员在本赛季的前 5 场比赛中首发了 2 场,但只有大约 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')
然而,一旦我们将抖动添加到游戏开始变量中,我们就可以看到有多少其他玩家开始了 2 场游戏:
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')
仅用于可视化的抖动
如前所述,抖动会向数据添加随机噪声,当我们想要在点云中可视化数据时,这会很有用。通过使用抖动函数,我们可以更好地了解数据集中两个变量之间的真实潜在关系。
然而,当使用回归等统计分析时,向数据集中的变量添加随机噪声是没有意义的,因为这会影响分析结果。
所以抖动仅用于数据可视化,而不用于数据分析。