かずのたしなみ(統計環境Rによる) @Wiki

統計データのばらつき

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集


分散と標準偏差


##成績データについて定義どおりに分散を計算すると以下のようになる。
(sum((seiseki-mean(seiseki))^2))/length(seiseki)
[1] 335.2487
##標準偏差については以下の通り
sqrt((sum((seiseki-mean(seiseki))^2))/length(seiseki))
[1] 18.30980

二乗和は、ベクトルの内積で代替可能である。しかもベクトル演算に優れたRでは、その方が効率的で計算も速い。
二乗和
 sum( (seiseki-mean(seiseki))^2)
[1] 10392.71
ベクトルの内積
 (seiseki-mean(seiseki))%*%(seiseki-mean(seiseki))
   [,1]
[1,] 10392.71
答えは1行×1列の行列になるが(必要なら他の変数型に変換すれば良い)。
よって分散の計算も下のように出来る。
( (seiseki-mean(seiseki))%*%(seiseki-mean(seiseki)))/length(seiseki)
  [,1]
[1,] 335.2487


##Rに組み込みの関数で分散と標準偏差を計算してみよう
var(seiseki)
[1] 346.4237
sd(seiseki)
[1] 18.61246
##微妙に違う。これはRの関数が、それぞれ不偏分散(unbiased variance)と不偏標準偏差(unbiased standard deviation)を計算しているからである。
##上記の定義どおりに計算したものは、標本分散(sample variance)と標本標準偏差(sample standard deviation)である。
##「不偏」と「標本」のどこがどうちがうかは、後ほど。データ数nで割るか(標本)、データ数より1引いたもの(n−1)で割るか(不偏)の違いなのだが、「不偏」の方は、統計的推測で使うものであるため、本書の後半で再論される。

##nで割るか(標本)、(n−1)で割るか(不偏)の違いなれば、(n−1)/nを掛けてやれば、不偏分散(不偏標準偏差)は、標本分散(標本標準偏差)に変換できる。以下では、これをつかって標本分散と標本標準偏差を求める関数を定義している。
sampleVar<-function(x){var(x)*(length(x)-1)/length(x)}
sampleSD<-function(x){sqrt(sampleVar(x))}

##いま定義した関数をつかって、成績についての標本偏差と標本標準偏差を計算しておこう。
sampleVar(seiseki)
[1] 335.2487
sampleSD(seiseki)
[1] 18.30980
##定義通り計算したものと一致した。



偏差値

テストの難易度によって、また科目や問題によって、平均点はちがってくるし、また散らばり具合も異なってくる。たとえば数学のテストは、できる人とできない人の差が大きくつきやすいと言われる(したがって散らばりも大きくなる)。
さて、異なるテストの結果を、互いに比べようとすると、この平均や散らばり具合の違いを、どうにかして揃えるようにしたい。そこで使われるのが、平均点と標準偏差を用いて、得点を変換して、各受験生の得点から導き出された“全体のなかでの学力位置"を示す値を出すのが、いわゆる偏差値である。
具体的には、平均点を中心として、そこからどれだけ離れているかを、標準偏差のものさしにして計るのである。ただし平均点をとったものの偏差値は常に50とする。平均点を0にして、そこからプラス、マイナスで表示しても良さそうだが、学力の分布が左右対称だとすれば、マイナスの偏差値をもらってしまう受験生が全体の半数近く出ることになって、数字信仰の強い国では不満が高まり、革命が起こる(かもしれない)。なので、テストの点に似ている感じがするように、平均点に対応する偏差値は50となっている。あと、偏差値の分だけ平均点よりも高い点だとプラス10として、偏差値は60となる。偏差値の2倍、平均点よりも高い点だと偏差値は70となる。成績の分布が正規分布(これはまた後でやる)だと、75から25までの間に約99%の人が入ることになる。
偏差値の求め方を式で書くと、

偏差値=50+{(得点-平均点)×10}÷標準偏差

seisekiについて計算すると、平均点と標準偏差は次のとおり。
mean(seiseki)
[1] 71.90323
sampleSD(seiseki)
[1] 18.30980

したがってseisekiの偏差値を求める関数は、
Hensa_chi<-function(x){return(50+(x-71.90323)*10/18.30980)}

元の得点と偏差値を対応させよう。
cbind(seiseki,Hensa_chi(seiseki))
       得点 偏差値         
 [1,]      50 38.03743
 [2,]      82 55.51441
 [3,]      70 48.96054
 [4,]      54 40.22205
 [5,]      75 51.69132
 [6,]      72 50.05285
 [7,]      70 48.96054
 [8,]      33 28.75278
 [9,]      80 54.42210
[10,]      52 39.12974
[11,]      98 64.25290
[12,]      73 50.59901
[13,]      62 44.59130
[14,]      73 50.59901
[15,]      43 34.21434
[16,]      86 57.69903
[17,]      93 61.52212
[18,]      85 57.15287
[19,]      61 44.04514
[20,]      89 59.33750
[21,]      98 64.25290
[22,]      28 26.02200
[23,]      87 58.24519
[24,]     100 65.34521
[25,]      50 38.03743
[26,]      87 58.24519
[27,]      66 46.77592
[28,]      82 55.51441
[29,]      85 57.15287
[30,]      70 48.96054
[31,]      75 51.69132



予想変動率


時系列化する前の行列を使って計算する。
shuueki_ritu
    [,1] [,2] [,3] [,4]  [,5]  [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,]  9.2 -4.3 -3.4 17.8 -10.3 -11.8 -5.7  6.7 -7.5  -2.3  10.6   6.2
[2,]  2.3 -3.7  0.7  5.5 -10.3   3.5  2.3 -2.8  2.5  -6.0  -0.6  -4.2
[3,] -6.5  7.0  2.8 -1.9  -7.7   1.9 -4.9  9.3 -0.6  10.6 -11.2   2.1
[4,]  9.0  7.6 -1.4  1.9   6.5  -5.5 -0.8 11.4  1.8   0.0  -3.8   0.6
[5,]  5.3  1.4 17.6  9.0  -0.6  -9.1  8.0  3.0  5.1  -5.7  -5.2   4.7
##apply(dataset,c(1=行,2=列),関数)をつかって平均、標準偏差を計算

apply(shuueki_ritu,1,mean)
[1]  0.4333333 -0.9000000  0.0750000  2.2750000  2.7916667
apply(shuueki_ritu,1,sampleSD)
[1] 8.964405 4.394315 6.573954 5.027943 7.018364 

##年データをつくる
year<-1980:1984

##それぞれのベクトルを束ねて行列をつくる

rbind(year,apply(shuueki_ritu,1,mean),apply(shuueki_ritu,1,sampleSD))
            [,1]        [,2]        [,3]        [,4]        [,5]
year 1980.0000000 1981.000000 1982.000000 1983.000000 1984.000000
       0.4333333   -0.900000    0.075000    2.275000    2.791667
       8.9644049    4.394315    6.573954    5.027943    7.018364


経済時系列データの将来におけるばらつき具合を予想変動率(Implied Volatility)と呼ぶ。
とくに過去のデータに基づいて計算された将来の変動率のことを、ヒストリカル・ボラティリティー(歴史的変動率)という。ここでは単に過去5年間のデータの標準偏差を取ることで計算してみた。

予想変動率(Implied Volatility)の理論値を計算する決まった方法はないが、上場オプションの場合、オプション価格(プレミアム)で取引されているので、ブラック・ショールズ・モデルを使ってプレミアムを計算する事ができる。




分解可能性

分散には、分解可能性と呼ばれる便利な性質がある。
まず統計データをいくつかの組に分けて、そのそれぞれについて分散を計算する。
そして「各組ごとの分散をデータ数で加重平均したもの」に「各組の間の平均についての分散」を加えると「データ全体の分散」になるのである。

さっき求めた、各年の収益率の平均と分散をつかって計算してみよう。
shuueki_ritu
    [,1] [,2] [,3] [,4]  [,5]  [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,]  9.2 -4.3 -3.4 17.8 -10.3 -11.8 -5.7  6.7 -7.5  -2.3  10.6   6.2
[2,]  2.3 -3.7  0.7  5.5 -10.3   3.5  2.3 -2.8  2.5  -6.0  -0.6  -4.2
[3,] -6.5  7.0  2.8 -1.9  -7.7   1.9 -4.9  9.3 -0.6  10.6 -11.2   2.1
[4,]  9.0  7.6 -1.4  1.9   6.5  -5.5 -0.8 11.4  1.8   0.0  -3.8   0.6
[5,]  5.3  1.4 17.6  9.0  -0.6  -9.1  8.0  3.0  5.1  -5.7  -5.2   4.7

sampleVar(as.vector(shuueki_ritu))#行列をベクトル化してデータ全体の分散を求める。
[1] 45.40528

##各年の分散を求める
sampleVar(shuueki_ritu[1,]) #1980
[1] 80.36056
sampleVar(shuueki_ritu[2,]) #1981
[1] 19.31
sampleVar(shuueki_ritu[3,]) #1982
[1] 43.21688
sampleVar(shuueki_ritu[4,]) #1983
[1] 25.28021
sampleVar(shuueki_ritu[5,]) #1984
[1] 49.25743

##各年の平均について、分散を求める
sampleVar(c(0.4333333, -0.9000000,  0.0750000,  2.2750000,  2.7916667))
[1] 1.920261

##各年ごとの分散を加重平均する
sum(c(80.36056,19.31,43.21688,25.28021,49.25743)*(12/60))
[1] 43.48502

「各組の間の平均についての分散」と「各組ごとの分散をデータ数で加重平均したもの」を足し合わせると
「データ全体の分散」と等しくなる。
1.920261+43.48502
[1] 45.40528



タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

目安箱バナー