Rで正規分布のグラフを書いてビリギャルの偏差値40アップを視覚化

そういえば、偏差値を気にしなくてはいけなかった頃(中高生とか)、私は偏差値の意味を理解してなかったなあ、なんて。

今回の模試は易しい問題が多くて、全受験者の平均点が前回よりも○点高くなった、なんてことはよくある話なので、テストの点数自体は何の指標にもならないですよね。

でも、平均と標準偏差を基準に合わせるように調整すれば、複数回の模試を比較できるじゃん、って発想ですよね。で、偏差値というのは、平均が50、標準偏差が10になるように調整した点数であると。

さて、↓この「学年ビリのギャル」(注:写真は本人ではありません)は、偏差値を40上げたらしいけど、それってどれくらいすごいのか。

学年ビリのギャルが1年で偏差値を40上げて慶應大学に現役合格した話
学年ビリのギャルが1年で偏差値を40上げて慶應大学に現役合格した話

同じ「偏差値40アップ」でも、20→60と、30→70では具合が違います。調べてみると、どうやら約30→約70みたいな感じだったようです。(60じゃ慶應入れませんものね)

偏差値という指標が有効だという発想は、テストの点数が正規分布に近い分布をしているという前提に基づいていますよね。つまり、偏差値に換算したときに、↓こんな感じに分布しているであろうという。

curve( dnorm(x, mean=50, sd=10), from=0, to=100 )



偏差値、30と70のところに線を書いてみます↓


curve( dnorm(x, mean=50, sd=10), from=0, to=100 )
abline( v=30, col="red" )
abline( v=70, col="blue" )


最初、赤線のあたりにいたのが、真ん中の山のあたりにいる有象無象どもを追い抜いて、青線のあたりまで来たという感じです。

横軸が、y = 0 のところにないので、正規分布曲線の下側の領域の面積が分かりにくいですね。ということで、polygon関数でグラフを塗りつぶす方法を理解する - Rプログラミングの小ネタ の方法にしたがって、色をつけてみました↓


n  <- 100
 
xs <- seq(0, 30, length=n)
ys <- dnorm(xs, mean=50, sd=10)
polygon( c(xs,rev(xs)), c(rep(0,n),rev(ys)), col="red")
 
xs <- seq(70, 100, length=n)
ys <- dnorm(xs, mean=50, sd=10)
polygon( c(xs,rev(xs)), c(rep(0,n),rev(ys)), col="blue")


偏差値10以下とか偏差値90以上というのが、ほとんどいない(でも、もちろんゼロでもない)ということが分かりますね。

数値的に知りたい場合は、pnorm関数を使うと分かります。pnormは下側確率を出してくれるので、下の書式では偏差値30以下の割合が分かります。

> pnorm( 30, mean=50, sd=10 )
[1] 0.02275013

つまり、偏差値30以下の人は、全体の2.28%くらいいるということが分かります。

> pnorm( 70, mean=50, sd=10 )
[1] 0.9772499

上記は、偏差値70以下の人が、全体の97.7%くらいを占めるという意味です。

70以上の人の割合が知りたければ、100%から引けばいいので、

> 1 - pnorm( 70, mean=50, sd=10 )
[1] 0.02275013

正規分布は左右対称なので、偏差値30以下の人と、偏差値70以上の人の割合は同じになります。

さて、先述のビリギャルがどのくらい順位をあげたのかというのは、具体的な数字を当てはめると分かりやすいでしょうか。

例えば、全体が10000人だったとして、さきほどのpnormで算出した値を当てはめてみると、最初 9772位だったのが、受験時には228位になった、みたいな感じになります。

コメント

このブログの人気の投稿

Rのグラフで軸の目盛りの刻み幅を変更する方法

Rで繰り返しを含む数列の生成(rep関数、seq関数)

reorderを使ってggplotの棒グラフの並び順を降順にする方法