R で点群に対して jitter 関数を使用する方法
このチュートリアルでは、R で点群に対してジッター関数をいつどのように使用するかを説明します。
ジッターを使用する場合
散布図は、 2 つの連続変数間の関係を視覚化するのに最適です。たとえば、次の散布図は、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 試合で先発出場した試合数と、1 試合あたりの平均得点を示す次のデータセットがあるとします。
#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
ゲームごとのポイントは連続変数ですが、開始されたゲームは離散変数です。これら 2 つの変数の散布図を作成しようとすると、次のようになります。
#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')
オプションで数値引数を jitter に追加して、データにさらにノイズを追加できます。
#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')
ジッタリングによりデータをより適切に表示できる
不安定性は、離散変数のレベルの 1 つが他のレベルよりも多くの値を持つ場合に特に役立ちます。
たとえば、次のデータセットには、シーズンの最初の 5 試合のうち 2 試合に先発したバスケットボール選手が 300 人いますが、1、3、4、または 5 試合に先発した選手は約 100 人だけです。
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)
プレイしたゲーム数を 1 試合あたりの平均ポイントと比較して視覚化すると、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')
視覚化のみのジッター
前述したように、ジッタリングはデータにランダム ノイズを追加します。これは、データを点群で視覚化する場合に有益です。ジッター関数を使用すると、データセット内の 2 つの変数間の真の根本的な関係をより正確に把握できます。
ただし、回帰などの統計分析を使用する場合、データセット内の変数にランダム ノイズを追加することは、分析の結果に影響を与えるため意味がありません。
したがって、ジッターはデータの視覚化のみに使用されることを目的としており、データ分析には使用されません。