Inkscapeのマニュアル本を出版しました。

散布度の基本とRで散布度を計算する方法

散布度はデータの特徴を示す数値の中で、データがどの程度バラけた値をとっているかを示す指標です。

イメージとしてはヒストグラムを描いたときにどの範囲にどの程度データがあるかを見ることと捉えると分かりやすです。

散布度を表すにはいろいろな表し方がありますが、基本的には代表値を基準にしてどれくらい離れたところまでデータが有るかを考えることだと思って下さい。

では順番に進めていきます。

PR

分散を表す指標とRの関数

はじめに、分散の指標にはどんなものがあるのか?、Rではどんな関数で操作するのか?をまとめておきます。

分散 $latex V_x$・不偏分散 $latex U_x$

データの各成分 $latex x_i$ と平均値 $latex \bar{x}$ の差を2乗して全て足した値をデータの個数 $latex n$ で割ると求められます。

$latex V_x=\frac{1}{n}\sum^n_{i=1}(x_i-\bar{x})^2&s=1$

不偏分散は分散を求める式の  $latex n s=1$ を $latex n-1&s=1$ にすることで求められます。

$latex U_x=\frac{1}{n-1}\sum^{n}_{i=1}(x_i-\bar{x})^2&s=1$

Rでは不偏分散を求める関数だけが用意されています。
分散を求める方法は記事後半で説明します。

var()

 

標準偏差 $latex s_x$・不偏標準偏差 $latex \sigma_x$

分散の平方根を求めることが標準偏差を求めることと同じ意味です。

$latex s_x =\sqrt{V_x} =\sqrt{\frac{1}{n}\sum^{n}_{i=1}(x_i-\bar{x})^2}&s=1$

不偏標準偏差については不偏分散の平方根を求めることで知ることができます。

$latex \sigma_x =\sqrt{U_x} =\sqrt{\frac{1}{n-1}\sum^{n}_{i=1}(x_i-\bar{x})^2}&s=1$

Rでは不偏標準偏差を求める関数のみが用意されています。

sd()

 

最大値・最小値

最大値はデータの一番大きな値。最小値はデータの一番小さな値。

Rでは最大値・最小値を瞬時に見つける関数が用意されています。

max()    #最大値
min()    #最小値

 

範囲(レンジ)

データの最大値と最小値の差を「範囲(レンジ)」と言います。

Rでは数値の羅列からそのレンジを求めることができます。

range()

 

四分位数(しぶんいすう・しぶいすう・クォンタイル)

データを小さい順に並べたとき、小さい方から1/4、2/4、3/4の位置にある値のことを「四分位数」といいます。

小さい方から順に第1四分位数(1Q)、第2四分位数(2Q)、第3四分位数(3Q)といいます。

第2四分位数は中央値のことで、第1四分位数と第3四分位数がきりよく1つのデータを指さない場合は中央値と同じように2つの値の平均値を求めれば良いです。

Rではこれらを1つの関数で求めることができます。

quantile()

 

散布度の補足とRでの実行例

ここから先で使えるように、はじめにデータを作成しておきます。

x <- rnorm(300, mean=20, sd=5)
y <- sample(1:9, 12, rep=T)

 

分散と標準偏差を求める

分散と標準編差を求めるには次の式を使います。

$latex V_x =\frac{(x_1-\bar{x})^2+(x_2-\bar{x})^2+\dots+(x_n-\bar{x})^2}{n} =\frac{1}{n}\sum^n_{i=1}(x_i-\bar{x})^2&s=1$

数式の意味は「平均値からのズレ」の平均値でした。

まず、単純に分散を求めるには、力技ですが

Vx <- (1/length(x)) * sum((x-mean(x))^2)

とします。

length関数はデータの個数、ここでは $latex n$ を求める関数です。

分散を求めるには表の式に当てはめて計算を行なって求めることもできますが、不偏分散を求める var関数が用意されているのでこれを使って求めたほうが楽です。

分散と不偏分散の式の差は $latex n$ で割るか $latex n-1$ で割るかの差なので、不偏分散を分散に直すには $latex n-1/n$ をかければOKです。

これと同じことを行うには(length(x)-1)/length(x)を掛ける必要があります。

Vx <- var(x) * (length(x)-1) / length(x)

次に標準偏差ですが、求めた分散を元に求めてもいいのですが、標準偏差にも sd関数が用意されているのでまずはこれを使います。

sx <- sd(x) * sqrt((length(x)-1) / length(x))

分散のときと同様に標準偏差を求める sd関数は不偏標準偏差を求める関数なので、単に標準偏差を求めるためには $latex \sqrt{\frac{n-1}{n}}$ を掛ける必要があります。

原理的には不偏分散を分散に変換するときと同じですが、標準偏差は分散の平方根なので $latex \frac{n-1}{n}$ の平方根である $latex \sqrt{\frac{n-1}{n}}$ を使います。

Rで平方根を求める関数は sqrt(スクエア・ルート)関数なので、 (length(x)-1)/length(x)部分を sqrt()に入れ子にして掛ければいいことになります。

最大値・最小値と範囲を求める

最大値はデータのうち一番大きな値、最小値はデータのうち一番小さな値、範囲は最大値と最小値の差です。

最大値・最小値はデータが少なければ目視で確認できますが、データ数が多くなってくるとそれは難しいです。

そこで、最大値を知りたいときは max関数を使い、最小値を知りたいときは min関数を使います。

先ほどのデータxにこれらを使うと

max(x)
min(x)

となります。

最大値・最小値がわかったので、この値から範囲を求めることができます。

範囲は最大値と最小値の差で、最もお手軽な散布度と言えます。

Rではただ単に引き算すれば求められます。

max(x) - min(x)

これがデータxの範囲で、一番簡単に散布度を表している値となります。

Rの range関数で範囲を求めると、これとは違った結果が返ってきます。

range(x)

結果は単に最大値と最小値が表示されています。

range関数は統計学的な範囲を示すのではなく、データ自体の幅を2つの数値で表現する関数ですので注意して下さい。

四分位数を求める

四分位数を求めるにはquantile関数を使います。

四分位数を用いるのは離散型のデータが多いように思うので、準備したデータyを使います。

Rではこの作業を quantile関数を使うことで求められます。

quantile(y)

0%は最小値を示していて、100%は最大値を示しています。

25%が第1四分位数で、50%・75%がそれぞれ第2四分位数・第3四分位数になります。

それぞれ手計算で求めた場合と数値は変わりません。

 

PR
最新情報をチェックしよう!