度数分布とヒストグラム

実験や調査によって得られたデータを分析するとき、データ全体の様子をつかむために、表や図を用いることがあります。

【例】次の数値は、あるクラスの40人の生徒について1分間あたりの脈拍数を測定し、番号順に記録したものです。

60  75  70  72  52  68  65  71  56  56  56  82  63  66  55  67  73  65  77  75  

54  69  67  86  70  81  76  61  64  80  77  61  62  63  68  73  80  67  68  69

【出典:新訂「確率統計」(大日本図書)】

これらの量を変量といいます。変量の値の範囲をいくつかの区間に分けるとき、それぞれの区間を階級といいます。各階級に入るデータの個数を度数といい、度数をデータ全体の個数で割ったものを相対度数といいます。各階級の度数を表にしたものが度数分布表です。

各階級を代表する値を階級値という。階級値は階級の中央の値を用います。この例、脈拍数は整数なので、ある階級を50以上55未満とするとこの階級に属する値は 50,51,52,53,54 ですから、階級値は52となります。各階級以下の階級の度数の総和を累積度数といい、相対度数の総和を累積相対度数といいます。

度数分布表を作ったり、それを柱状グラフにしたヒストグラムを描くのによく使われるのは表計算ソフトでしょう。たとえばLibreOffceのCalcを用いて次のような度数分布表とヒストグラムを作ることができます。

では、CindyScriptを用いて、度数分布表とヒストグラムを作成すると、次のようなものができます。

スクリプトは、次のような構成になっています。

------- Initialization スロット:度数分布表とヒストグラムを作成する関数の定義 --------

hist(data,rangeleft,rangeright,classno):=(

  hlen=length(data);

  hrange=rangeright-rangeleft;

//階級の区切り値を設定

  hbreaks=apply(1..(classno+1),rangeleft+(#-1)*hrange/classno);

  ( 以下 略 )

------- Draw スロット データと階級についての設定をしてhist 関数を呼び出す -----------

// dataにデータのリストを書く

data=[60,75,70,72,52,68,65,71,56,56,56,82,63,66,55,67,73,65,77,75,54,69,67,86,70,81,76,61,64,80,77,61,62,63,68,73,80,67,68,69];

rangeleft=50;   // 階級の下限と上限

rangeright=90;

classno=8;     // 階級の数

hist(data,rangeleft,rangeright,classno);

--------------------------------------------------------------------------

しかし、ここでInitialization スロットの関数定義について説明するにはかなりの分量を要します。ここは、「CindyScriptでこのようにできる」というところでとどめておきます。

表計算ソフトでもCindyScriptでも、度数分布表を作成してヒストグラムを作るのは結構な手間です。(表計算ソフトに分析ツールが用意されていれば比較的簡単にできます)

その点、Rを使えば次のように簡単にできます。

実際に入力しているのは、左の青文字の部分だけ。データを data に代入し、hist()関数でヒストグラムを表示しています。breaks= というのは階級の区切りの値です。

よく見ると、CalcやCindyScriptのものと少し違います。これは、CalcやCindyScriptで作ったときに、「○以上△未満」でカウントしましたが、Rでは、「○より大、△以下」でカウントするためです。これを「○以上△未満」にするには、right=FALSE というオプションをつけて

hist(x,breaks=c(50,55,60,65,70,75,80,85,90),right=FALSE)

とします。

戻る