フリーソフトによるデータ解析・マイニング
Rと基本統計量
データには、身長、体重、成績などのように量的計測できるデータと性別、血液型などのように性質を表すデータがある。前者を量的データと呼び、後者を質的データ、あるいはカテゴリカルデータと呼ぶ。
統計量(statistic)とは、統計データから計算、要約した数量のことである。基本統計量とは、通常広く使用されている合計、比率、平均、中央値、最頻値、分散、四分位数などを指す。
1.
計と比率
1.1 合計
量的データを分析する際には、データを加え合わせる作業が頻繁に行われる。
|
|
|
|
で表す。 |
表1 10人の年売上(単位は百万)

10人A、B、C、・・・、I、Jの売上を
にし、それぞれ識別できるようにするため、
にA、B、C、・・・、I、Jの順に添字1、2、3、・・・9、10をつけたものが
とする。Aの売上
は12、Bの売上
は6のように対応関係をつけると、10人の売上の合計は次のようになる。

Rではsum関数を用いてデータの合計を求めることができる。
>uriage<-c(12,6,13,7,8,11,12,9,10,7)
> sum(uriage)
[1] 95
1..2 比率
表1のA氏の売上は12となっている。この値12が持っている意味は相対的なもので、単純に12の値が大きいか、小さいかは議論できない。この12が相対的に大きいか、小さいかは全体のなかで占める比率、あるいは割合を求めて議論をしなければならない。
ある値
が全体のなかで占める比率は、
を総数
で割って求める。これをΣ記号で表すと次のようになる。
|
比 率: 百分率: |
漢字がわからない人は、
は理解できないが、どの国の人でも若干の数学教養をもっていれば、式
![]()
の意味は簡単に理解できる。このような数式表記は一種の国際言語であるとも言える。上記のAの人のことを例にすると、 A氏の売上の比率は(下記の記号≒は近似を意味する)

で、これをパーセンテージ(percentage、百分率、百分比)で表すと次のとおりになる。

Rでは、次のように比率の定義とおりに演算を行うことで、簡単に比率と割合を求めることができる。入力した売り上げのデータuriageを用いて説明する。
> uriage/sum(uriage)
[1] 0.12631579 0.06315789 0.13684211 0.07368421 0.08421053
0.11578947
[7] 0.12631579 0.09473684 0.10526316 0.07368421
> 100*(uriage/sum(uriage))
[1] 12.631579
6.315789 13.684211
7.368421 8.421053 11.578947
12.631579
[8] 9.473684
10.526316 7.368421
パッケージscaの中には比率データをパーセンテージに変換し、%記号を付けたデータを返す関数percentがある。引数dで小数点右の何桁まで出力するかを指定することができる。デフォルトはd=0になっているので、dを指定しない場合、小数点以下は返さない。
> library(sca)
> percent(uriage/sum(uriage))
[1] "13 %" "6 %" "14 %" "7 %" "8 %" "12 %" "13 %" "9 %" "11 %" "7 %"
> noquote(percent(uriage/sum(uriage)))
[1] 13 % 6 % 14 % 7 % 8 % 12 % 13 % 9 % 11 % 7 %
>
noquote(percent(uriage/sum(uriage),d=1))
[1] 12.6 % 6.3 % 13.7 % 7.4 % 8.4 % 11.6 % 12.6 % 9.5 % 10.5 % 7.4 %
2.
中心を表す統計量
統計量にはそのデータの中心の位置を表す代表値として平均、中央値、最頻値が多く用いられている。
2.1 平均
ここでいうデータの平均(average、 またはmean)は、データの合計をデータの個数で割った算術平均である。表1のデータを用いて説明することにする。

このデータから一人当たりの平均売上を考えて見ましょう。一人あたりの平均売上は合計値95を人数10で割ることで求める。
![]()
値9.5がこの10個のデータの平均値である。この具体的な計算過程を定義すると次のようになる。
|
|
|
|
一般的に平均値は
の上に横線を引いた
(エックスバーと呼ぶ)で表す。
を求める式は一見煩雑にみえるが、合計をデータの数で割る単純な算術計算である。
Rでは、算術平均を求める関数meanが用意されている。データuriageを用いてその使用例を示す。
> mean(uriage)
[1] 9.5
2.2 最頻値(mode)
データのなかでもっとも頻繁に現れている値を最頻値、あるいはモード(mode)と呼ぶ。例えば、データ
|
1 |
3 |
5 |
4 |
3 |
では、3が2回現れ、それ以外は1回であるので、最も頻繁に現れている値は3となる。つまり、このデータの最頻値(モード)は3である。最頻値は出現頻度が最も高いデータであるので、データの中に必ず最頻値が存在するとは限らない。
Rでは最頻値を求める関数が用意されていないので、他の関数を用いて間接に求めることができる。例えば、ベクトルデータについては関数tableを用いると、各要素の出現頻度が集計される。返された結果からわかるように、3が2回現れていると集計されている。
> table(c(1,5,4,3,3))
1 3 4 5
1 2 1 1
2.3 中央値(median)
データを大きさの順に並べた場合、中央に位置する値を中央値、あるいはメディアン(median)と呼ぶ。例えば、データ
|
2 |
3 |
5 |
3 |
4 |
があったとしよう。5個のデータを大きさの順に並べると
|
2 |
3 |
3 |
4 |
5 |
↑
ここが中央
となり、中央に位置する値は矢印上の3であるので、このデータセットの中央値は3である。これはデータの数が奇数の場合であるが、データの数が次のように偶数の場合は、中央の両値を足して2で割った値を中央値とする。この例では、(3+4)/2=3.5が中央値となる。
Rでは最頻値(メジアン)を求める関数medianである。
|
2 |
3 |
3 |
4 |
5 |
7 |
↑
ここが中央
> median(c(2、3、3、4、5、7))
[1] 3.5
3 バラツキの特性値
データがどのような値を中心としているかはデータの特徴を知る上で重要な情報であるが、データがどの程度散らばっているかという情報も、データの特徴を把握する上で重要である。
3.1 範囲(range)
データの中で最も大きい値を最大(maximum)値と呼び、最も小さい値を最小(minimum)値と呼ぶ。データの範囲は、データの最小値から最大値までの区間を指す。
Rでの最大値、最小値、範囲を求める関数はそれぞれ関数max、min、rangeである。次にuriageデータセットを用いた例を示す。
> max(uriage)
[1] 13
> min(uriage)
[1] 6
> range(uriage)
[1] 6 13
3.2 分散と標準偏差
分散と標準偏差はデータの散らばり(バラツキ)の状況を表す統計量である。分散と標準偏差の定義に関する説明の前に、まず次の表2のA、B両氏の携帯電話料金のデータをみよう。両氏の6ヶ月間の電話料金の総額および平均は同じである。何が違うであろうか?
表2 A、B両氏の電話料金
|
|
1月 |
2月 |
3月 |
4月 |
5月 |
6月 |
合計 |
平均 |
|
A氏 |
7206 |
6358 |
9809 |
8915 |
7850 |
8965 |
49103 |
8183.833 |
|
B氏 |
5550 |
4880 |
15914 |
4856 |
13013 |
4890 |
49103 |
8183.833 |
両氏のデータをそれぞれ散布図で表すと図1のとなる。横軸が月で、縦軸が料金で、図のなかの横線は平均値である。図からわかるようにA氏の月別の料金は平均値の周辺に集中しているが、B氏の月別料金はA氏より散らばっている。
このようにデータが平均値からどの程度散らばっているかでデータの特徴を説明することができる。データが平均値からどの程度散らばっているかを示す量として分散(variance)と標準偏差(standard deviation)と呼ばれている統計量がある。


図1 電話料金の散布図
|
|
|
|
|
また、標準偏差 |
|
|
Rでは分散を求める関数var、標準偏差を求める関数sdがある。次にA、B両氏の電話料金の分散、標準偏差を求めるコマンドを次示す。それぞれの分散は1637453、24570507でB氏の分散がA氏よりはるかに大きいことがわかる。この結果を散布図と見比べると、バラツキが大きいデータの分散値が大きいことがわかる。この例のように、用いたデータの桁数と比べて分散の値の桁数がかなり大きい。データの桁数が多いと扱うのに不便であるので、場合によっては分散値の正の平方根を用いる。分散値の正の平方根を標準偏差(standard deviation)と呼ぶ。
>Ashi<-c(7206,6358,9809,8915,7850,8965)
>Bshi<-c(5550,4880,15914,4856,13013,4890)
> var(Ashi)
[1] 1637453
> var(Bshi)
[1] 24570507
> sd(Ashi)
[1] 1279.630
> sd(Bshi)
[1] 4956.865
注:図1の散布図は次のコマンドで作成することができる。
> plot(1:6,Ash,pch=21,bg=2,col=2,cex=2,ylim=range(Bshi))
> abline(mean(Bshi),0,lw=2,col=3)
> plot(1:6,Bshi,pch=21,bg=2,col=2,cex=2,ylim=range(Bshi))
> abline(mean(Bshi),0,lw=2,col=3)
3.3 四分位数(しぶんいすう)
データを大きさの順にならべて、データを4等分したとき、各等分の境の値を四分位数と呼ぶ。例えば、データ
|
3 |
5 |
6 |
8 |
9 |
11 |
12 |
15 |
16 |
があるとする。データの数が奇数であるので、中央値は9となる。データ9を含むその左辺、右辺のデータの中央値はそれぞれ6、12である。その値6、9、12をそれぞれ第1四分位数(25%点)、第2四分位数(50%点)、第3四分位数(75%点)と呼ぶ。
|
3 |
5 |
6 |
8 |
9 |
11 |
12 |
15 |
16 |
|
↑ |
|
↑ |
|
↑ |
|
↑ |
|
↑ |
|
0%点 25%点 |
50%点 |
75% 100%点 |
||||||
また下記の式
![]()
で得られた値を四分位偏差と呼ぶ。よって、上記のデータの四分位偏差は
![]()
となる。この四分位偏差もデータのバラツキを示す一つの指標である。
Rで四分位数を求める関数はquantileである。四分位偏差は関数IQRを2で割ることで、求めることが可能である。
> quantile(c(3,5,6,8,9,11,12,15,16))
0% 25% 50% 75% 100%
3 6 9
12 16
> IQR(c(3,5,6,8,9,11,12,15,16))
[1] 6