Rで対応のあるデータを比較する
例えば↓こんなデータがあったとします。40人のクラスがあって、1度目のテスト実施後に、なんらかの施策をして、その後、2度目のテストを実施したと。で、施策の効果は点数に表れているのか? みたいなのを想像していただけると理解しやすいかと。行名の 1, 2, ... , 40 はその学生の出席番号みたいなイメージで。
> df
first second
1 56 75
2 50 59
3 53 61
4 60 62
5 45 59
6 51 60
7 48 70
8 55 79
9 50 67
10 44 50
11 50 64
12 56 49
13 42 53
14 52 53
15 57 41
16 39 63
17 50 54
18 45 54
19 54 59
20 48 74
21 48 58
22 47 59
23 47 57
24 43 54
25 56 76
26 54 39
27 48 59
28 45 43
29 50 59
30 51 52
31 50 58
32 48 70
33 52 61
34 51 50
35 43 62
36 44 39
37 49 64
38 47 45
39 52 68
40 46 64
で、いろいろな可視化をしてみようと思います。
1つ目は直線の傾きで見る感じです。matplot関数をつかえば直線が右肩上がりか、右肩下がりかで効果を把握できます。加えて、色分けすることで分かりやすくしてみました。
全体的に上がっている人が多そうなことが分かります。また、ばらつきが大きくなっていることも見てとれますね。
t()関数で転置させているのは、first, secondを横軸方向に取るためです。転置させずにmatplotすると、横軸方向は学生番号(1~40)になります↓
これはこれで、ありのような気がしますが、1人の学生に着目しての、上がった/下がったというのは分かりにくいですね。縦方向に照合しにくいとか、差分の距離が分かりにくいとか、そのへんが原因でしょうか。
差分に対してヒストグラムを書いてみるというのも、1つのアプローチですね。
上がった人が多いことや、どの程度上がった/下がったのかという分布が一目で分かりますね。
変り種としては、1回目を横軸に、2回目を縦軸に取って散布図を描いてみるというものです。
y = x の直線(黒の実線)の上に乗っていれば変化なし、上側なら点数UP、下側なら点数DOWNという感じです。直線からの離れ具合が、UP/DOWNの程度に対応しているイメージですね。
「誰が」というところを知りたいなら、該当する学生番号をtext関数でプロットする手もあります。
ごちゃごちゃして見えにくい場合は、字を小さくするなり、画像のサイズを大きくするなりしてください。
出力先をPDFにし、ごく小さい字でプロットして、拡大・縮小しながら見るというのも結構いい感じです。PDFに出力する場合は↓下記が参考になると思います。
Rでshapeを出力するときはPDFファイルにすると便利 - Rプログラミングの小ネタ
shapeに限らず、こまごましたものをプロットするときはPDFがおすすめです。
最後のサンプルは、個々の学生の上がり/下がり、その幅に着目したいような場合の例です。色(colorという変数に格納)は、1つ目のサンプルで設定したものを使いまわしています。
これだと、変化幅が良く分かりますね。
・・・などという感じで、いろいろ紹介してみました。
> df
first second
1 56 75
2 50 59
3 53 61
4 60 62
5 45 59
6 51 60
7 48 70
8 55 79
9 50 67
10 44 50
11 50 64
12 56 49
13 42 53
14 52 53
15 57 41
16 39 63
17 50 54
18 45 54
19 54 59
20 48 74
21 48 58
22 47 59
23 47 57
24 43 54
25 56 76
26 54 39
27 48 59
28 45 43
29 50 59
30 51 52
31 50 58
32 48 70
33 52 61
34 51 50
35 43 62
36 44 39
37 49 64
38 47 45
39 52 68
40 46 64
で、いろいろな可視化をしてみようと思います。
1つ目は直線の傾きで見る感じです。matplot関数をつかえば直線が右肩上がりか、右肩下がりかで効果を把握できます。加えて、色分けすることで分かりやすくしてみました。
![]() |
matplotの例 |
全体的に上がっている人が多そうなことが分かります。また、ばらつきが大きくなっていることも見てとれますね。
t()関数で転置させているのは、first, secondを横軸方向に取るためです。転置させずにmatplotすると、横軸方向は学生番号(1~40)になります↓
![]() |
matplotの例 |
これはこれで、ありのような気がしますが、1人の学生に着目しての、上がった/下がったというのは分かりにくいですね。縦方向に照合しにくいとか、差分の距離が分かりにくいとか、そのへんが原因でしょうか。
差分に対してヒストグラムを書いてみるというのも、1つのアプローチですね。
![]() |
差の値でヒストグラムを描く |
上がった人が多いことや、どの程度上がった/下がったのかという分布が一目で分かりますね。
変り種としては、1回目を横軸に、2回目を縦軸に取って散布図を描いてみるというものです。
plot(df$first, df$second, asp=1, xlim=c(0,100), ylim=c(0,100)) abline( 20, 1, col="blue", lty=1 ) abline( 10, 1, col="blue", lty=2 ) abline( 0, 1 ) abline(-10, 1, col="red" , lty=2 ) abline(-20, 1, col="red" , lty=1 ) legend( "topleft", c("20点UPライン", "10点UPライン", "10点DOWNライン", "20点DOWNライン"), col=c("blue", "blue", "red", "red"), lty=c(1, 2, 2, 1))
![]() |
前をx軸、後をy軸にとって散布図を描く |
y = x の直線(黒の実線)の上に乗っていれば変化なし、上側なら点数UP、下側なら点数DOWNという感じです。直線からの離れ具合が、UP/DOWNの程度に対応しているイメージですね。
「誰が」というところを知りたいなら、該当する学生番号をtext関数でプロットする手もあります。
![]() |
前をx軸、後をy軸にとって散布図を描く(text関数でIDをプロット) |
ごちゃごちゃして見えにくい場合は、字を小さくするなり、画像のサイズを大きくするなりしてください。
出力先をPDFにし、ごく小さい字でプロットして、拡大・縮小しながら見るというのも結構いい感じです。PDFに出力する場合は↓下記が参考になると思います。
Rでshapeを出力するときはPDFファイルにすると便利 - Rプログラミングの小ネタ
shapeに限らず、こまごましたものをプロットするときはPDFがおすすめです。
最後のサンプルは、個々の学生の上がり/下がり、その幅に着目したいような場合の例です。色(colorという変数に格納)は、1つ目のサンプルで設定したものを使いまわしています。
![]() |
増減をarrowsで表現 |
・・・などという感じで、いろいろ紹介してみました。
コメント
コメントを投稿