Rで学ぶ統計学(相対度数分布表・ヒストグラム)

プログラミング

R言語を用いて、実践的に統計学を解説します。

今回は一つの変数を、視覚的に表現する方法として、度数分布表とヒストグラムについて学びます。

その他の記事はこちらから↓

Rで学ぶ統計学 基本から統計とプログラミングを学ぶ!
はじめての人でもわかるように、Rで統計学を実践的に解説します!

統計の理論

度数分布表

具体的な例を出して説明していきましょう。以下のような30人分の数学のテストのデータがあったとします。

62 51 52 65 77 67 38 49 77 56 58 52 44 65 84 61 71 43 65 63 53 45 53 68 66 38 36 61 78 58

このデータを使って、度数分布表を作成してみると以下のようになります。

階級階級値度数
30以上 40未満353
40以上 50未満454
50以上 60未満558
60以上 70未満6510
70以上 80未満754
80以上 90未満851

階級とか度数とか知らない単語もあるかもしれません。この具体例をもとに解説します。

階級(class interval)とは
データを区切る区間のこと。階級の最小値を下限といい、最大値を上限という。

階級値(midpoint)とは
階級の中間の値。「60以上 70未満」の階級だったら、60と70の平均値である65が階級値となる。

度数(frequency)とは
階級ごとのデータ数のこと。階級が「60以上 70未満」の行の度数は10だが、このとき60点以上70点未満の点数の人が10人いる。

相対度数とは

先程の度数分布表を用いれば、どの階級にどれだけのデータがあるかがすぐにわかります。しかし、30人のAクラスのテストと、50人のCクラスのテスト結果を比べたいときを考えてみましょう。人数がことなるので、このままでは両者を単純に比べることはできません。

資料全体に対する度数の割合のことを相対度数といいます。つまり\(相対度数=\frac{度数の値}{度数の合計値}\)という計算で得られます。

また、相対度数を先程の度数分布表に書き込むことで、相対度数分布表と呼ばれるものを書くことができます。

相対度数分布表を用いれば、人数のことなるクラス同士も比較することが可能です。先程のデータを使って、相対度数分布表を作ると以下のようになります。

階級階級値度数相対度数累積相対度数
30以上 40未満3530.10.1
40以上 50未満4540.133333330.2333333
50以上 60未満5580.266666670.5
60以上 70未満65100.333333330.8333333
70以上 80未満7540.133333330.9666667
80以上 90未満8510.033333331
合計201

累積相対度数という単語が新しく出てきました。累積相対度数とは、小さい方から相対度数を足していった数で、最終的に1になります

ヒストグラム

度数分布表や相対度数分布表だけでもデータの散らばりを分かりやすく表示できています。しかし、ひと目見ただけでもっとデータの分布がわかるグラフがあります。それがヒストグラムです。

先程のデータを用いて、以下のようなヒストグラムを実際に作ってみました。

このように、度数分布表を柱状グラフにして表現したものをヒストグラムといいます

ヒストグラムを描いてみると、どの階級の度数が多いのか、データの散らばりはどのようになっているのか、などのデータの特徴がひと目でわかります。1変数のデータに関しては、上記のようにヒストグラムを描いてみると良いでしょう。

しかし、これでは先程の相対度数の話を活かせていません。相対度数分布表は、データ数が異なる度数分布表同士を比較するために作られたのでした。では、データ数が異なるヒストグラム同士を簡単に比較できるようにするにはどうしたら良いでしょうか?

答えは「ヒストグラムの合計面積が常に1になるようにする」です。実際に先程のグラフを描き替えてみます。

縦軸は度数のかわりに確率となります。ある点数が出現する確率を表しているのです。

上のグラフではそれぞれの長方形の横幅は10あります。それぞれの長方形の面積を足していくとだいたい1になることを上の図を見て確認してください。実は縦の目盛りが変わっただけで、グラフ自体の形は先程のヒストグラムとほとんど変わりません。

このようなグラフを相対度数分布グラフといい、各階級の長方形の面積が相対度数の値に一致します。

実際に30以上40未満の階級について確認してみましょう。長方形の横幅は10、縦の長さは0.010、相対度数は0.1です。計算してみると

\[面積 = 縦(10) \times 横(0.010) = 相対度数(0.1)\]

となり、面積が相対度数の値に一致してることが示されます。

Rで実践

データの準備

まずは今回使うデータを変数に格納しましょう。先ほど統計の理論を解説したときに使ったデータを使います。30人分の数学のテストの点数です。

> math_test <- c(62, 51, 52, 65, 77, 67, 38, 49, 77, 56, 58, 52, 44, 65, 84, 61, 71, 43, 65, 63, 53, 45, 53, 68, 66, 38, 36, 61, 78, 58)
> math_test
 [1] 62 51 52 65 77 67 38 49 77 56 58 52 44 65 84 61 71 43 65 63 53 45 53 68 66
[26] 38 36 61 78 58

ヒストグラム

残念ながら、Rで相対分布表を簡単には表示することはできません。しかし、ヒストグラムならすぐに表示することができます。hist()を使えば、ベクトルを引数に渡すだけで、ヒストグラムを表示してくれるのです。

> hist(math_test)

以上のようにヒストグラムが描画されました。

これだけでは少し味気ないので、少しグラフを変えてみましょう。引数に、col=”blue”を加えるとグラフが青色になります。

> hist(math_test, col="blue")

相対度数分布グラフを描いてみましょう。引数に freq=FALSEを加えると、相対度数分布グラフになります。これは、度数を表すfrequencyを縦軸に使わず、かわりにdensityを使うということです。

> hist(math_test, col="blue", freq=FALSE)

hist()で使える引数のうち、代表的なものをいくつかご紹介します。自分で色々と試してみてください。

オプション説明具体例
xヒストグラムにするためのデータを格納したベクトルhist(x)
freqTRUE(T)かFALSE(F)で値を指定。相対度数分布グラフにしたいならFALSE(F)にする。なにも指定しないとTRUE(T)で表示される。hist(x, freq=F)
colヒストグラムの長方形を何の色で塗るかを指定する。”blue”, “orange”, “white”などで指定したり、”#0000ff”(青色)などのカラーコードで指定したりできる。
デフォルトではNULLの設定。この場合は何の色でも塗らない。
hist(x, col=”blue”)
xlabx軸の名前を変更できる。hist(x, xlab=”test_score”)
ylaby軸の名前を変更できる。hist(x, ylab=”number”)

詳しい説明を知りたいときは help(hist)と入力してみると、英語でのマニュアルが表示されますので、見てみてください!

度数分布表の値を表示する

度数分布表は簡単には表示できないと言いましたが、階級や階級値、度数などの値はhist()関数をうまく使うことで求めることができます。次のようにして求めてみましょう。

> hist(math_test)$breaks #階級の区切りを表示
[1] 30 40 50 60 70 80 90
> hist(math_test)$counts #度数を表示
[1]  3  4  8 10  4  1
> hist(math_test)$density #相対度数分布グラフでの縦軸の値(確率)を表示
[1] 0.010000000 0.013333333 0.026666667 0.033333333 0.013333333 0.003333333
> hist(math_test)$mids #階級値を表示
[1] 35 45 55 65 75 85

ここで「$」というものが何度も登場しています。実は、hist()というのはヒストグラムを表示するだけではなく、階級値や度数などを含んだリストを返します。

リストというのは、複数の値を一つにまとめておくためのものです。今まで扱ってきたベクトルとの違いは、

  • 値に名前を着けられること
  • 文字と数字など、別のデータ型を持つ値を同時に格納できること

などがあります。

今回は、hist(math_test)から出てきたリストに、「break・counts・density・mids」という名前のベクトルが格納されていました。そのベクトルにアクセスするために、「$」という繋ぎの文字を付けたのです。

 

次の記事はこちら↓

Rで学ぶ統計学(共分散・相関係数)
統計学の【共分散・相関係数】について、Rで実践しながら解説!

 

コメント・質問