ラベル 要約 の投稿を表示しています。 すべての投稿を表示
ラベル 要約 の投稿を表示しています。 すべての投稿を表示

2012/09/02

文系のための「数の可視化」(8)

分析の基本は、分析の前にデータの性質を理解することである。
分析対象の性質を理解した上で、適切な分析手法を選択する必要がある。

残念ながら有名な分析手法の名前に踊らされる人は多く、
「○○の研究での実績があるから...」とか、「○○先生が使っていたし...」とか、
不可解かつ非論理的な理由で分析する人まで居る。理解できない。

信じ難いのであるが、そんな話が常識となっている分野も存在する。
まぁ、このブログを読んでいる人には、そのような人は居まい。

さて、そのような愚痴はさておき、
本日は多次元データの要約を可視化する方法について考える。

ケトレーの話にも通じるが、データを観察する上で最も基本となるのは、
データの中心からのバラツキであって、
分散標準偏差共分散相関係数といった指標があった。
また、これらの指標に加えて、四分位ヒンジというのもあった。

さらに、それを可視化する方法として、
ヒストグラム散布図箱ヒゲ図、などがあった。

ところで、分散共分散あるいは相関係数を同時に表現する方法として、
分散共分散行列相関係数行列があった。

そこで、今回は分散共分散行列と相関係数行列を可視化する方法について述べる。

分散共分散行列相関係数行列はどのような構造であったか?

確か、分散共分散行列の場合は、対角成分に分散が入っていて、
その他の成分には共分散が入っているような対象行列であった。

一方、相関係数行列は、対角成分が「1」であり、
その他の成分には、相関係数が入っているような対象行列であった。

つまり、結論から述べると散布図行列というのは、
対角成分にバラツキを表すグラフが入り、
それ以外の成分には、散布図が入るような視覚化方法である。

散布図行列には、様々なバリエーションが存在し得るので、
今回は、基本的な見方基本的な形式のみを紹介する。

では、さっそく、データを読み込んでみる。
今回は、いつもとは異なった方法でデータの読み込みを行なってみる

今回のデータは少し大きいので、Google Spreadsheet にデータを置いてある。
このデータを利用するためには、RCurlというパッケージを必要とする。

インストールした記憶の無い人は、まずは、このパッケージをインストールする。
インストールの説明は、新しい箱ヒゲ図の話でしているので、そちらを参照。

install.packages("RCurl", dep=TRUE)

インストールできたら、とりあえず、ライブラリを読み込む

library(RCurl)

ライブラリを無事に読み込めたら、次は、以下のコマンドを実行する。

# Google Spreadsheet からデータをダウンロードする
data <- getURL("https://docs.google.com/spreadsheet/pub?key=0AtOtIs5BjRVhdHo0c0pjb29OTU9aV3BmQUFJUWJQa0E&single=true&gid=0&range=A1%3AK48&output=csv")

# ダウンロードしたデータを読み込む
X <- read.table(textConnection(data), header=TRUE, row.names=1, sep=",")

エラーが出なければ問題は無いはず。念のために、データの確認を行う。

head(X)

head()関数は、データの先頭6行を読み込んで表示するための関数。
データの中身を確認するために用いる。実行結果は以下の通り。

> head(X)
               HM  ELD   HC  CHR   SC   LI   SP  ENV  DIS   IC
Hokkaido     11.3 35.1 34.1 21.2 44.3 14.4 15.5 24.1  5.4 17.9
Aomori-ken   15.2 21.0 22.4 13.3 55.2  7.9  8.4 19.9  8.3  8.0
Iwate-ken     6.0 26.1 12.5 15.9 33.1 10.6 15.6 16.9 11.8 26.9
Miyagi-ken   22.8 40.6 32.8 20.7 43.4 13.4 14.3 22.6 15.2 40.4
Akita-ken     4.9 19.5 25.1 16.1 41.2  7.4  9.8 12.8 10.4 33.2
Yamagata-ken  7.4 26.5 13.4 15.8 33.3  9.5 11.4 13.0  5.9  8.7

このデータは、総務省統計局からダウンロードしたデータを加工したもので、
都道府県別のボランティア活動に従事した人の年平均従事時間(日/年)のデータ。

書く変数の意味は次の通り。
  • HM:健康や医療サービスに関係した活動
  • ELD:高齢者を対象とした活動
  • HC:障害者を対象とした活動
  • CHR:子供を対象とした活動
  • SC:スポーツ・文化・芸術・学術に関係した活動
  • LI:まちづくりのための活動
  • SP:安全な生活のための活動
  • ENV:自然や環境を守るための活動
  • DIS:災害に関係した活動
  • IC:国際強力に関係した活動
当然、全ての人に聞くことはできないので、サンプル調査の結果であり、
男女を合わせた総数での結果となっている。

さて、まずは、分散共分散行列相関係数行列を確認。
小数点が大きすぎるので、小数点第三位までで丸め込む。

# 分散共分散行列
round(cov(X), 3)

# 相関係数行列
round(cor(X), 3)

実行結果は以下の通り。

> # 分散共分散行列
> round(cov(X), 3)
         HM    ELD      HC    CHR     SC     LI     SP    ENV    DIS      IC
HM   27.370  0.750   5.470 -2.063  7.600  2.305 -5.029  5.586 -1.925 -12.463
ELD   0.750 38.669  22.176 10.859 -2.048  9.253  4.594 16.180 -0.199  44.576
HC    5.470 22.176 103.638 11.745  6.029  9.985  3.673 12.545 -0.205  64.775
CHR  -2.063 10.859  11.745 13.820 -0.021  7.465  8.619 12.185  0.559  11.328
SC    7.600 -2.048   6.029 -0.021 52.300 -2.108  0.040  1.468  1.434   7.519
LI    2.305  9.253   9.985  7.465 -2.108 12.677  5.382 20.473  0.950   0.394
SP   -5.029  4.594   3.673  8.619  0.040  5.382 21.932 12.175  1.550  13.332
ENV   5.586 16.180  12.545 12.185  1.468 20.473 12.175 58.090  0.927  -2.488
DIS  -1.925 -0.199  -0.205  0.559  1.434  0.950  1.550  0.927  7.540  12.452
IC  -12.463 44.576  64.775 11.328  7.519  0.394 13.332 -2.488 12.452 279.265
> # 相関係数行列
> round(cor(X), 3)
        HM    ELD     HC    CHR     SC     LI     SP    ENV    DIS     IC
HM   1.000  0.023  0.103 -0.106  0.201  0.124 -0.205  0.140 -0.134 -0.143
ELD  0.023  1.000  0.350  0.470 -0.046  0.418  0.158  0.341 -0.012  0.429
HC   0.103  0.350  1.000  0.310  0.082  0.275  0.077  0.162 -0.007  0.381
CHR -0.106  0.470  0.310  1.000 -0.001  0.564  0.495  0.430  0.055  0.182
SC   0.201 -0.046  0.082 -0.001  1.000 -0.082  0.001  0.027  0.072  0.062
LI   0.124  0.418  0.275  0.564 -0.082  1.000  0.323  0.754  0.097  0.007
SP  -0.205  0.158  0.077  0.495  0.001  0.323  1.000  0.341  0.121  0.170
ENV  0.140  0.341  0.162  0.430  0.027  0.754  0.341  1.000  0.044 -0.020
DIS -0.134 -0.012 -0.007  0.055  0.072  0.097  0.121  0.044  1.000  0.271
IC  -0.143  0.429  0.381  0.182  0.062  0.007  0.170 -0.020  0.271  1.000

さて、この値のどの部分を注意して観察するべきであったか?
確か、相関係数行列の「1」に近いものと「-1」に近いものに注意するべきであった。
この中では、「0.754」が最も高い。マイナス方向では、最も低いのが「-0.205」である。

では、正負の相関の有無の断定となると色々と手続きが必要であるが、
自然や環境を守るための活動(ENV)」と「まちづくりのための活動(LI)」は、
関係しているように思える。逆に、強い負の関係というのは無さそう。

ふむ。この状況、一つ一つを丁寧に見れば、解らなくは無いのだが、どうも見難い。
そこで、この状況を散布図行列を使って可視化してみる。
pairs(X)

pairs()関数は、散布図行列を作成するための関数であり、
分散共分散行列あるいは相関係数行列の状況を可視化したようなもの。

したがって、相関係数行列の各成分に相当する散布図が、
散布図行列の各要素に相当する散布図になっている。

また、散布図行列の対角を挟んで上側下側散布図は、
x軸とy軸が入れ替わっているだけで、結局は同じ状況を示している。
ここでは、とりあえず、下側にだけ注目してみることにする

まずは、先程の比較的関係が強そうなENVとLIの関係に着目してみる。

ENVと他の変数との相関係数がどこに入っていたかと言うと、
相関係数行列では8行目に入っていた。LIとの関係は、6列目

したがって、散布図行列においても8行目を見てみる。
すると、y軸の目盛りが右側に書いてある。これが、ENVの値

LIとの関係は、相関係数行列における6列目であったので、
そのまま、右方向に進み、6番目の散布図を見てみる。これが、ENVとLIの散布図。
LIの値はというと、6列目に並んでいる散布図の一番上の散布図のx軸に書いてある。

y軸の目盛りは左右交互に、x軸の目盛りは上下交互に書いてあるが、
この見方は、相関係数行列と対比しながら見れば解るであろう。

さて、この8行目の6列目の散布図を見てみると、
他の散布図と比較すると、対角線上に綺麗に点が並んでいるように見える。

LIの値が右側に増えるに従って、ENVの値は上に向かって増加しているので、
この二つの変数は連動している

散布図行列だけを見てみると、LI:CHRSP:CHRも、なんとなく右肩上がり。
この散布図の場所は、それぞれ、6行目4列目7行目4列目なので、
そこに該当する相関係数を見てみると、それぞれ、「0.564」と「0.495」となっていて、
今回のデータで見てみると、相対的に相関係数は高い値となっている。

では、逆に対角線に集まって「なさそうな」ものはどれか?
対角を挟んで下側だけで考えてみる。

SC:CHR(5行目4列目)と、SP:SC(7行目5列目)が、対角線上には並んでいなさそう。
相関係数は、それぞれ、「-0.001」と「0.001」であり、やはり、関連は無さそうである。

この二つは、特に関係してい「なさそうな」組み合わせであるが、
散布図が全体的に散らばっているならば、
散布図に対応する相関係数は±1」よりも「0」に近いハズ。

地域に関する活動は、環境や自然に関わる活動や子供に関する活動と関係していて、
さらに、子供に関する活動と安全な生活に関わる活動が関係している。
直感的に、地域住民の意識として、住環境と子供の安全が重要であるのは納得できる。

逆に、スポーツ・文化・芸術・学術に関係した活動は、健康に関わりそうな話であって、
子供に関する活動や安全な生活に関わる活動とは関係しない、というのも頷ける。

なるほど。直感的に納得できそうな結果である。

さて、散布図行列相関係数行列を可視化したようなものであり、
データの全体を俯瞰する上で、非常に強力なツールではあるが、注意すべき点がある

相関係数行列の場合は、変数が多いと値を見落とす危険性があり、
散布図行列の場合は、目の錯覚で、間違った解釈をする場合がある。

この二つの結果を相互に見比べることが重要!!

今度は、散布図行列をもう少し見やすく整えてみる。
散布図行列には、様々な描き方が存在しているが、
ここでは、psych というパッケージを用いた方法を紹介する。

とりあえず、パッケージのインストールし、ライブラリを読み込む。
既に、インストール済みの場合は、ライブラリの読み込みのみ。

install.packages("psych", dep=TRUE)
library(psych)

psych散布図行列のメソッドは、pairs.panels()関数を用いる。
pairs.panels(X)

psych散布図行列を用いると、対角線にはヒストグラムが配置され、
下側には散布図、上側には相関係数が配置される。

それにしても、色々と煩雑なものが入っていて見難い。
それぞれに意味はあるのだが、必要なもの「のみ」を表示することも重要。
pairs.panels(X, smooth=FALSE, density=FALSE, ellipses=FALSE, scale=TRUE)

パラメータに関しては以下の通り。

  • smooth: 平滑線の描画の有無(今回は表示しない)
  • density: ヒストグラムにカーネルを重ねるかの有無(今回は重ねない)
  • ellipses: 散布図に相関を円で表したものを表示するか否か(今回は表示しない)
  • scale: 上側の相関係数の表示の大きさを相関の強さで変えるか(今回は変える)
このように表示すると、分散共分散行列相関係数行列を見事に可視化できる。
分散に相当するヒストグラムが対角線上に配され、上側には相関係数行列もある。

最初の方法では、相関係数行列散布図行列を見比べる必要があったが、
この方法を用いることで、必要な情報を一目で確認することができる。

今回は、対角線上にヒストグラムを配したが、対角成分に箱ヒゲ図を配する方法もある。
本ブログでは、使用を避けているが、Rコマンダーと呼ばれる、
Rのグラフィカルインタフェースを導入すると、散布図行列の対角は箱ヒゲ図になる。

また、Rの初期状態で利用可能なpairs()関数を拡張することもでき、
その方法は、pairs()関数のヘルプの例に記載されている。
余力のある人は、試してみると良い。それほど、難しくはない。

ところで、相関係数行列を可視化する方法は、散布図行列だけではない。
参考までに、相関プロットも紹介する。


cor.plot(cor(X))



cor.plot()関数を用いると、相関係数行列色分けで表示することができる。
この図において、白色のセルは相関係数が低く、青色のセルは値が高い。
逆に、赤色のセルは赤色で表示されている。

変数の数が多くなると、どうしても、相関係数行列散布図行列が見難くなる。
そのような場合には、この方法で可視化して全体を把握することもできる。

2012/08/30

文系のための「データのバラツキ」(2)

ようやく、データ分析の入り口に辿り着いた。
ここまでの話は、基礎的な話が多かった。

今日の話は、データの「要約」について。

元のデータを分析する前に、データの全容を把握することは重要である。
本来、データの可視化は、全体的な状況を把握してから行うべきであって、
可視化してから考えるのではない。

まず、基本的な情報として考えられるものは何だろうか?
これまでに、やってきた情報を整理すると、
  • 行数=対象の数
  • 列数=属性(変数)の総数
  • 各変数の平均と中央値
  • 各変数の分散と標準偏差
  • 各変数間の共分散と相関係数
と言ったところか。

これだけの情報が得られるだけで、様々なことが解るのだが、
今回は、これらの指標に加えて、「分位数(quantile)」について考えてみる。

分位数は、データのバラツキを、分散とは違った方法で観察する方法とも言える。

とにかく、説明するよりも、手を動かした方が理解しやすい。
とりあえず、いつものように...

# Windows と Linux の人は次のコマンド
X <- read.table("clipboard", sep=",")

# Mac の人は次のコマンド
X <- read.table(pipe("pbpaste") , sep=",")

データを読み込む。

Aji,Saba,Buri,Hirame,Karei,Kasago,Mebaru,Kawahagi,Tai,Isaki,Ika,Tako
Hokkaido,0,2,18,12,1210,7,452,0,0,0,660,3
Aomori,0,0,52,14,111,2,66,0,77,0,25,7
Iwate,0,3,2,0,14,0,230,0,0,0,12,2
Miyagi,1,75,25,33,2140,0,116,0,0,0,1,1
Akita,21,1,33,4,0,1,76,0,55,0,4,5
Yamagata,110,0,19,6,0,0,14,0,24,0,7,0
Fukushima,0,0,0,0,72,0,60,0,0,0,0,0
Iabaraki,14,57,39,45,36,20,112,1,79,0,109,46
Chiba,381,96,92,100,1,29,65,34,154,135,328,2
Tokyo,38,6,0,0,3,1,0,2,1,0,0,2
Kanagawa,683,185,823,1,1,32,56,29,168,21,256,11
Nigata,194,25,56,5,2,1,96,1,161,0,483,0
Toyama,1,0,21,0,0,0,0,0,3,0,9,0
Ishikawa,88,17,25,6,0,5,36,5,32,0,0,0
Fukui,160,5,307,4,0,6,3,23,170,1,157,0
Shizuoka,56,109,58,11,0,65,28,5,28,205,8,0
Aichi,20,67,98,1,1,20,8,3,150,22,5,1
Mie,19,15,106,0,0,18,13,1,210,77,61,0
Kyoto,32,5,81,1,5,15,6,3,91,4,9,0
Osaka,32,0,2,0,0,5,3,0,14,0,4,0
Hyogo,93,23,81,9,0,125,68,3,20,0,15,49
Wakayama,22,80,99,6,0,6,15,4,116,121,59,0
Tottori,16,0,3,0,0,0,2,0,29,14,41,0
Shimane,24,3,15,7,0,11,6,17,25,16,155,0
Okayama,1,0,0,0,0,34,2,0,40,0,1,11
Hiroshima,64,7,1,0,1,45,48,1,17,0,10,24
Yamaguchi,274,27,366,49,3,52,94,66,308,16,1,0
Tokushima,16,10,44,5,0,21,14,1,29,6,96,0
Kagawa,0,0,0,0,0,0,0,0,2,0,0,0
Ehime,58,0,9,0,0,25,9,5,55,2,0,2
Kochi,0,2,1,0,0,0,0,0,2,7,0,0
Fukuoka,0,0,0,0,0,0,0,0,0,48,82,0
Nagasaki,0,0,384,22,0,131,0,0,306,155,0,0
Kumamoto,55,0,3,0,0,53,0,0,123,2,0,0
Oita,544,97,4,17,0,62,2,217,75,12,32,0
Miyazaki,49,27,3,0,0,0,0,1,35,63,0,0
Kagoshima,109,52,130,1,0,56,0,1,140,23,7,25
Okinawa,20,0,21,0,0,0,0,4,7,3,0,0

このデータは、ヒストグラムの話で用いたデータと同じ。
農林水産省の「都道府県別魚種別遊漁採捕量」のデータを編集して作ったデータ。
架空とまでは言わないが、現実の分析には適さない。

では、早速。分位数を出してみる。まずは、鯵の分位数を計算。

quantile(X$Aji, probs=seq(0,1,by=0.25))

ここでは、quantile()関数を用いて分位数を計算している。
quantile は、日本語では「分位数」を意味する。

この何分割するかを決めているのが、probs パラメータである。
四分位の場合には、probs=seq(0,1,by=0.25) となっているということは、
0〜1までを、0.25刻みで「四等分」している。

このように、4つに分ける分位数のことを「四分位(quartiles)」と呼ぶ。

つまり、0.00, 0.25, 0.50, 0.75, 1.00 というベクトルによって指定しているわけである。
ここで、注意するべきは、0番目の値が存在すること。したがって、
四分位の場合は、5つの値が返ってくる

中央値の話でも述べたが、様々な分位数が存在し、それぞれに名前が付いている。
  • 二分位(median)=中央値
  • 三分位(tertiles) 
  • 四分位(quartiles)
  • 五分位(quintiles)
  • 六分位(sextiles)
  • 十分位(deciles) 
  • 十二分位(duo-deciles)
  • 二十分位(vigintiles)
  • 百分位(percentiles)
  • 千分位(permiles)
Rの quantile()関数で、これらを計算することは難しくない。

quantile(X$Aji, probs=seq(0,1,by=0.5))    # 中央値
quantile(X$Aji, probs=seq(0,1,by=0.2))    # 五分位
quantile(X$Aji, probs=seq(0,1,by=0.1))    # 十分位

実行結果は以下の通り。

> quantile(X$Aji, probs=seq(0,1,by=0.5))    # 中央値
  0%  50% 100%
   0   23  683
> quantile(X$Aji, probs=seq(0,1,by=0.2))    # 五分位
   0%   20%   40%   60%   80%  100%
  0.0   0.4  19.8  40.2 102.6 683.0
> quantile(X$Aji, probs=seq(0,1,by=0.1))    # 十分位
   0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100%
  0.0   0.0   0.4  14.2  19.8  23.0  40.2  57.8 102.6 218.0 683.0

色々とあるが、四分位が最も一般的であるので、
quantile()関数既定は四分位。したがって、パラメータ指定も不要

quantile(X$Aji)

パラメータ指定無しで、このようにすると、以下のように四分位が計算される。

> quantile(X$Aji)
  0%  25%  50%  75% 100%
   0    1   23   82  683

ここで、四分位の考え方を整理してみる。
  • 全体の下から0/4(0%)番目の数:第0四分位数(最小値)
  • 全体の下から1/4(25%)番目の数:第1四分位数
  • 全体の下から2/4(50%)番目の数:第2四分位数(中央値)
  • 全体の下から3/4(75%)番目の数:第3四分位数
  • 全体の下から4/4(100%)番目の数:第4四分位数(最大値)
となる。ここで、第1四分位数〜第3四分位数の範囲のことを四分位範囲と呼ぶ。

これは、データの下から25%番目目と75%番目の間の範囲である。
別の言い方をするならば、中央値を中心に全データの50%が収まる範囲である。

英語では、Inter-Quantile Range と呼び、IQRと表記する。
Rには、IQR()関数が存在し、四分位範囲も容易に計算できる。

IQR(X$Aji)

実行結果は、以下の通り。

> IQR(X$Aji)
[1] 81

今回のデータの場合は、1〜82までの範囲なので、
四分位範囲は、「82-1=81」となり、正常に計算されている。

やはり、数理的な話も必要であろう。ここからは、数学的な話。

実は、色々と前提となる知識を必要とするので、
色々と正しくない表記も含まれる。表記方法は変則的。厳密な説明ではない。
Wikipedia の解説では、分位数を関数として定義し、実数空間への投影で説明。

意味の解る人は、Wikipedia へ。
意味の解らない人は、以下の説明へ。

まず、以下のようなベクトルがあったとして、



これを昇順に並べ変えたものを次のように定義する。



総数を「n」とし、求めたい分位数を「q」とすると、
次のように表すことができる。



うん?添字の部分が...何番目?落ち着いて考えてみる。

通常は、1から数えるが、コンピュータでは0番目を基準とする場合が多い。
そこで、「(n-1)q」のところで、一番目を「0」からの順番に書き直している。

少し、混乱するかも。要するに、元のデータが以下のようになっていて、



これを、「0」からの順番で書きなおし、



「1」ずらした分を後で、正しい位置に戻すために「+1」としている
少々、回りくどい表現であるが仕方あるまい。

さて、これで計算できるかと言うと、実は以下のような条件が付随する。
添字部分が、「(n-1)q+1」だと解りにくいので、とりあえず「t」と置く。



見慣れない記号が一杯出てくる。とりあえず、順番に。

まず、」の記号は、ある集合に含まれていることを表す記号で、
逆が、」 の記号。つまり、ある集合に含まれていない状況を表す。

では、一体何の集合なのかというと、 という記号が教えてくれている。
これは、Natural の「N」だから、自然数を表している。自然数は1以上の整数

要するに、上の条件というのは、「整数」だったらそのままで良いけれど、
「小数点」の値が出てきた場合には、再配分し直しましょう、と言っている。

では、早速、この式に当てはめてRで確認する。
仮に、第1四分位を求めたいのであれば、q = 1/4 = 0.25 となる。

# まずは、データをソートする。
x <- sort(X$Aji)

# 第1四分位数を算出する
(t <- (length(x)-1)*0.25+1)

実行結果は以下の通り。

> (t <- (length(x)-1)*0.25+1)
[1] 10.25

なるほど。見事に、自然数では無い。
ということで、厄介な自然数で無い場合の処理

((ceiling(t)-t)*x[floor(t)]+(t-floor(t))*x[ceiling(t)])

そして、その結果は、以下の通り。

> ((ceiling(t)-t)*x[floor(t)]+(t-floor(t))*x[ceiling(t)])
[1] 1

確かに、合っているようだが、「1」というのは特殊すぎて自身が無い。
そこで、第1四分位〜第4四分位を連続して計算してみる。

x <- sort(X$Aji)    # まずは、データをソートし、ベクトルxに格納
n <- length(x)        # ベクトルxの数を数える

# For文による繰り返し処理
for(q in seq(0, 1, by=0.25)){
    # 四分位数を算出する
    t <- (n-1)*q+1

    # 自然数かをチェックする。
    if (t > 0 && identical(round(t),t)==TRUE) {
        # 自然数の場合はそのまま
        print(x[t])
    } else {
        # 自然数で無い場合は調整する
        print((ceiling(t)-t)*x[floor(t)]+(t-floor(t))*x[ceiling(t)])
    }
}

さて、ここでは、length()関数if文identical()関数が初登場である。

まず、length()関数は、ベクトルに含まれるスカラーの個数を返す関数である。
行列のnrow()関数nrow()関数に似ているが、行列に対してlength()関数を使うと、
その行列に含まれる全成分の総数を返す

 identical()関数は、二つの値が同じあるかを確認するための関数であり、
同じ場合には、「TRUE」を返し、異なる場合には「FALSE」を返す。
ここでは、四捨五入した値と元の数字を比較するために用いている。

if文は、for文と同様に、プログラミングの基本となる構文であり、
ある処理の条件分岐を定義する。

ここでは、「t」が自然数であるか、否か、の分岐を示している。
括弧内の処理が、TRUEの場合は、そのままの値を出力し、
それ以外の場合else)の時には、値を調整して出力している。

この分岐処理の内部では、二つの条件が含まれている。
一つ目は、t > 0 という条件(1以上の正の整数であるという条件)
二つ目は、t が小数点を含んでいるか否か?という条件である。

この二つの条件は、「&&」で結ばれている。これをAND演算と呼ぶ。
すなわち、両方の条件が揃った場合を「真」とする条件が与えられている。

さて、この処理の実行結果は以下の通り。

[1] 0
[1] 1
[1] 23
[1] 82
[1] 683

なるほど、Rの quantile()関数 の結果と見事に同じである。
以上が、分位数の算出方法である。

ところで、今回は、分位数の算出方法を、



で説明した。Excel や R の既定(type 7)はこの方法に従っている。

しかしながら、分位数の分割方法は9通りも存在し、
この辺りは実に厄介な話である。実を言うと、良く理解できない。

この四分位に対して、ヒンジという考え方がある。
これは、四分位と異なり、考え方は至ってシンプル。

中央値より上側の中央値を上側ヒンジと呼び、
中央値より下側の中央値を下側ヒンジと呼ぶ。

R では、fivenum()関数によって計算することができる。

fivenum(X$Aji)

実行結果は以下の通り。

> fivenum(X$Aji)
[1]   0   1  23  88 683

この方法は、五数要約と呼ばれ、fivenum()関数は、
最小値下側ヒンジ中央値上側ヒンジ最大値、の5つの値を返す。

実用上は、四分位五数要約を意識することは無いが、
箱ひげ図の場合には、五数要約を用いる。

最後に、今回のデータの四分位をまとめて出力してみる。
これは、summary()関数を用いることで、簡単に計算できる。

summary(X)

行列データから、直接的計算してくれる。非常に楽。
よく見ると、四分位だけではなく、平均値も計算されている。

> summary(X)
      Aji              Saba             Buri           Hirame       
 Min.   :  0.00   Min.   :  0.00   Min.   :  0.0   Min.   :  0.000  
 1st Qu.:  1.00   1st Qu.:  0.00   1st Qu.:  3.0   1st Qu.:  0.000  
 Median : 23.00   Median :  5.00   Median : 23.0   Median :  1.000  
 Mean   : 84.08   Mean   : 26.21   Mean   : 79.5   Mean   :  9.447  
 3rd Qu.: 82.00   3rd Qu.: 27.00   3rd Qu.: 81.0   3rd Qu.:  8.500  
 Max.   :683.00   Max.   :185.00   Max.   :823.0   Max.   :100.000  

     Karei             Kasago           Mebaru          Kawahagi     
 Min.   :   0.00   Min.   :  0.00   Min.   :  0.00   Min.   :  0.00  
 1st Qu.:   0.00   1st Qu.:  0.00   1st Qu.:  0.50   1st Qu.:  0.00  
 Median :   0.00   Median :  6.50   Median : 11.00   Median :  1.00  
 Mean   :  94.74   Mean   : 22.32   Mean   : 44.74   Mean   : 11.24  
 3rd Qu.:   1.75   3rd Qu.: 31.25   3rd Qu.: 63.75   3rd Qu.:  4.00  
 Max.   :2140.00   Max.   :131.00   Max.   :452.00   Max.   :217.00  

      Tai             Isaki             Ika              Tako       
 Min.   :  0.00   Min.   :  0.00   Min.   :  0.00   Min.   : 0.000  
 1st Qu.:  8.75   1st Qu.:  0.00   1st Qu.:  0.25   1st Qu.: 0.000  
 Median : 33.50   Median :  2.00   Median :  8.50   Median : 0.000  
 Mean   : 72.26   Mean   : 25.08   Mean   : 69.39   Mean   : 5.026  
 3rd Qu.:121.25   3rd Qu.: 19.75   3rd Qu.: 60.50   3rd Qu.: 2.000  
 Max.   :308.00   Max.   :205.00   Max.   :660.00   Max.   :49.000  

四分位は、分散と同様にデータ全体のバラツキを観察する上で重要であるが、
この状況を、眺めても、いまいち解りにくい。やはり、標準偏差の方が解かりやすいか?

しかしながら、この状況を可視化することで、非常に重要な参考資料となり得る。
その可視化方法こそが、「箱ひげ図」なのである。この話については、次の話で。