May 24, 2010
確率や統計にかかわる者が一度は悩む…否、一生悩む問題が 「標準偏差を求めるときって、STDEV を使うのか STDEVP を使うのか?」でしょう(STDEV や STDEVP は Excel の関数です。念のため)。
この2つの関数の違いは、
- STDEVP:((データを2乗したものの平均)-(データの平均の2乗))/ データ数
- STDEV:((データを2乗したものの平均)-(データの平均の2乗))/ (データ数 – 1)
となっていて、教科書には「データ数から1を引くのは、自由度が1つ減ってどうのこうの…」という説明があり、分かったような分からないような…みなさんはこの2つの標準偏差の違いをしっかり理解していますか?
データの分布:STDEVP
こちらがいわゆる普通の標準偏差です。高校まではこちらの標準偏差しか学ばないでしょう。
あるデータが与えられました。データの羅列だけでは特徴はつかめません。そこでデータを集約して特徴をとらえようと考えます。代表的な特徴値としては、
- データの典型的な値は?
- データはどれくらいばらついている?
といったところではないでしょうか。データの典型的な値としては平均や中央値、そしてバラツキ度合いが STDEVP で求められる標準偏差です(定義から明らか)。
このように単に与えられたデータの特徴の1つとしての標準偏差が STDEVP です。
データの背後の真の分布:STDEV
1年後の株価を知りたい!これは人間誰しも持つ欲望でしょう。しかし、残念ながら株価は確率的に変動していて正確に知る方法はなさそうです。
株価は確率的に変動する、そして株価の変動(対数収益率)は正規分布に従うというのが一般的な知見です(最近はいろいろと異論があるようですが)。
時々刻々と記録されていく株価の変動は1つの
正規分布、つまりある平均

とある標準偏差

をもつ正規分布(この2つで正規分布は決定できるというのは常識です)に従っていて、きっと分布の平均

と標準偏差

は神様が決めているんでしょう。
われわれにはその平均

と標準偏差

を正確に知る術はありませんから、なんとかして
推定したいと考えます。
例えば株価の変動を毎日毎日記録していきます。1年ごとにデータをまとめて、それぞれのデータセットの平均

と “標準偏差”

を求めます。
ここで “標準偏差”

は
何らかの方法 (具体的には STDEV で求めた標準偏差か STDEVP で求めた標準偏差)に従ったデータのバラツキ具合を表す値です。
結論から言うと、このときの標準偏差は STDEV で求ます。それの根拠は、、、
過去のある1年のデータから”標準偏差” を求めたとします。これは神様が決めた本当の正規分布(無限の過去から無限の未来まですべての株価のデータの分布)から
たまたま選んだ300個ほどのデータから求めた”標準偏差” です。これを

としましょう。
他の1年のデータから求めた”標準偏差” も
たまたま選んだ300個ほどデータから求めたもので、これを

とします。
当然

となっていることでしょう。どの1年のデータを持ってきても、そこから求められる “標準偏差” はデータセット毎に異なる値になります。
こうして幾つかのバラバラの値の”標準偏差”

が得られました。
まとめると
- 本当の標準偏差
は絶対に知りえない
- 観測から得られた
はばらついている
です。そこで
ばらついている
の平均が本当の標準偏差
になるようにしよう
という指針を採用します。
すると、STDEVP で求めた標準偏差はこの指針に従わないことが示され、STDEV の定義式で求められる標準偏差こそが新の標準偏差の推定値としてふさわしい(この指針を満たしている)ことが分かります!(細かい計算は適当な教科書を見てください)
結論:
- データそのもののバラツキ具合:STDEVP
- データの抽出元の真の標準偏差の推定値:STDEV
ということです。
サンプルエクセルシート
真の分布は 平均 3(セル B1)、標準偏差 2(セル B2) の正規分布です。
そして、この分布から
たまたま選んだ10個(C列からK列)のデータセットが全部で10,000セット(5行目から10004行目)あります。
そして各データセットの STDEVP(L列) と STDEV(M列) が計算されています。
STDEVP の平均(セル C2)と STDEV の平均(セル D2)を比較してみてください。STDEV の方が真の分布の推定値にふさわしいことが分かります(もっともっとデータセットを用意すれば STDEV の平均は真の標準偏差に近づいていきます)。
May 22, 2010
不正な相関行列

が与えられると何が起きるが考えてみましょう。
前回の解説の “事実3” で悲劇が起きます。つまり、
とする時になって、ハッと気が付くのです…「固有値が負だ!」と。
そしてコンピューターは無情にも「負の平方根は計算できません」というメッセージを残して息絶えます。
ちなみに
第1回に載せた不正な相関行列、
の固有値は

となります。
この困難を打破してとにかく答えを出したい!そこでいよいよ特異値分解の登場です。
先ずは特異値分解で任意の行列(なんと正方行列でなくてもいい!)

はどのように分解されるか見てみましょう。
となります。とりあえずここでは

として実対称正方行列であるところの相関行列

だけを対象にして順に説明していきましょう。
行列

から

なる行列を計算します。この行列は自動的に、
となるんです!(もちろんもとの行列が実数の行列ならば

も実数)。最後の特徴に注目してください。簡単に言うと、元の行列(

)2乗することで負だった固有値があったとしてもそれが正になるということです。
というわけで行列

は互いに直交する固有ベクトルを持ち、固有値は全て0以上となります。この固有ベクトルを並べた行列が

です。
次に、

なる行列を作ります。この行列は

の場合と全く同様に
となります。

の固有ベクトルを並べた行列が

です。
最後に

は行列

の固有値の
絶対値を対角に並べた対角行列になります。
ここまでの手順で分かるように、各行列

、

、

は元の行列

がどんなものであれ
安定的に得ることができます(計算は止まらない!)。
前にも述べましたがこれが
最も重要な点です。
とにもかくにも行列

は、
という形に分解されました。次に
とします(対角成分は固有値の絶対値なので安心して平方根がとれる)。すると、
となります。
あと一息です
さてここで行列

が正しい相関行列、つまり半正定値だとどうなるか。その場合は

となって特異値分解は
前回の解説の結果と同じになります。
つまり

とすることで、相関行列は

となって
目標達成です。
しかしそうでない場合はどうでしょう。その場合もやはり同じく

とすることで手をうちませんか?もちろんこの場合は

ではありますが(

だから)…でも、
- 安定的に答えが出る
- 正しい相関行列の場合は正しい答えが出る
という望ましい性質を持ってます。
因みに正しい相関行列ではない場合にも、

の各成分の符号は元の行列

のそれに等しくなります(正の相関が負になることはない)。
再び
を例に計算してみましょう。特異値分解の結果は、
となります(

であることが分かりますか?第1固有ベクトルの符号が逆転しています!こうすることで、固有値の方を正に揃えているという訳です)。そして、
となります。ここから

を計算すると、
となります(うーん、確かに

とはちょっと違うなぁ。残念)。
以上で相関行列の分解に
特異値分解を用いる理由とその方法の解説を終了します。
May 21, 2010
ここで相関行列

が
満たしているはずの性質を今一度列挙してみましょう。
- 成分
は実数
- 対称行列

- 半正定値
- 対角成分

- 対角成分以外

この相関行列

を、
という形に分解するのが目的です(覚えてましたか?)
前回その方法としてコレスキー分解を紹介しましたが、どうも安心して使えなさそうだとわかりました。
次に紹介するのは
固有値分解です。これは半正定値実対称行列を分解してくれます。
ではここからは線形代数の勉強です(証明などの詳細は省きます。教科書に必ず載っていますので調べてみてください)。
事実1
任意の実正方行列

は、ある正方行列

とこれまた正方行列、ただし対角成分のみしか値がない
対角行列 
を使って、
という形に分解される(これを行列の
スペクトル分解といいます)。
ここで行列

は行列

の
固有ベクトルを横に並べたもので、対角行列

の成分は行列

の
固有値です。
事実2
更に行列

が対称行列であった場合、行列の固有ベクトルが
全て直交する。すると、
となる。というわけで
事実3
更に更に行列

が半正定値だとすれば、行列の固有値は全て0以上。つまり行列

は、
と出来るではないか!すると、
となります。ここで

という事実(積の順番が入れ替わる)と、対角行列は転置しても変化しないこと(この場合

)に注意すると、
やった!!

とおけば目標達成じゃないか!
しかし…
実務上(ここがポイント)、相関行列がいつもいつもタチの良い形であるとは限らないのです!もちろん実対称行列であることはどんな場合も間違いないですが(複素数の相関や、

の相関行列を作れるものなら作ってみろ)、
半正定値を満たさない場合は往々にしてありえるのです。例えば…
- データに欠損があって、欠損データを適当に埋める
- 乱数列のうち、いくつかのペアについては相関が(観測とは無関係に)与えられている
- 測定誤差
などの場合、相関係数に矛盾が出ることがあるのです。相関係数が矛盾するとはどういうことか、ひとつ最も大げさな例を示してみましょう。
以下の3変数の相関行列を見てください。
実数であるとか、対称であるとか相関行列の性質は確かに満たしているんですが…何がおかしいか分かりますか?
- 第1変数と第2変数の相関係数
は 1。第1変数と第2変数は完全相関で全く同じ値になる
- 第2変数と第3変数の相関係数
は 1。第2変数と第3変数は完全相関で全く同じ値になる
ってことは必然的に第1変数と第3変数は同じ値になるはずです。しかし与えられた相関係数

は -1 になっている!つまり矛盾しているわけです。
要するに相関係数がありえない組み合わせになっている場合がありえるのです(さすがに例のような大げさなのはないでしょうけど)。このとき、相関行列は半正定値ではなくなってコレスキー分解が機能しなくなります。
実務上、相関行列が与えられたら(それに矛盾があろうとなかろうと)計算がストップしてしまうことは望ましくありません。とにかく安定して何らかの答えを出すことが求められます。
もちろん正しい相関行列(半正定値実対称行列)は正しく分解されることが前提です。
そこで NtRand では相関行列の分解に
特異値分解(Singular Value Decomposition,SVD)という手法を採用しています。
May 20, 2010
互いに相関を持った正規乱数のセット(多変量正規乱数)を生成すること、これが金融工学のモンテカルロシミュレーションにおいて最も重要な技術となります。

系列の正規乱数列を生成する場合を考えます。
これらの乱数列の相関構造を記述するのが
相関行列と呼ばれる

の正方行列

です。
最終的に
という形に分解することが目標となります(ここで t は転置行列です)。分解して得られた行列

を使って
実際に相関乱数を生成する方法については、これも一般的な数値計算の教科書に載っていますのでそちらをご覧ください。
すぐ後で説明するように、この分解には
コレスキー分解を使えと、多くの教科書で教えていますが、実務上コレスキー分解ではうまくいかない場合があります。
NtRand あるいは Numerical Technologies 社の製品では相関行列の分解に
特異値分解という方法を採用しています。
これから3回にわたって、なぜコレスキー分解ではダメなのか、そしてなぜ特異値分解だとうまくいくのかを説明します。
相関行列について
相関行列

は、その ij 成分が確率変数

と

との相関係数

である行列です。
この定義から対角成分

は確率変数

と自分自身との相関、つまり 1 となります。また、

も定義から明らかです。
つまりこの行列は、
正方行列
- 成分は実数
- 対角成分は 1
- 対角成分以外は

- 対称(
)
という性質を持っています。
更に相関係数の定義から、この行列は
半正定値であることが示されます(半正定値って何だ?それは行列の固有値が全て0以上であること。固有値って何かって?それは勉強してください)。
つまり相関行列はその定義から
半正定値実対称行列であるということです。
コレスキー分解 (Cholesky decomposition)
という分解を行う技として、どの教科書にも書いてあるのが
コレスキー分解という方法です。
どの教科書にも載っているので、ここでは説明しません。
この手法は正定値実対称行列を目的の形に分解してくれるので、正定値実対称行列である相関行列に対して使えば目標達成!メデタシ、メデタシとなる筋書きです。
しかし…
実はコレスキー分解は容易に失敗します。その代表的な状況が
観測データが少ない場合です。
確率変数の数が100個で、その観測データの数が100個未満の場合は、
定義に従った正しい相関行列であってもコレスキー分解は失敗します。
なぜなら、この状況で作られる相関行列は必然的に
半正定値行列になるからです。コレスキー分解は
正定値行列専用です。
それでは、少なくとも正しく作られた相関行列では間違いなく
と分解してくれるより強力な方法はないでしょうか?
May 19, 2010
モテモテで我が世の春を謳歌していたあなたは、いよいよ真剣に結婚を考えることにしました。しかし焦って貧乏くじを引きたくない!できるだけいい条件の人と結婚したい!
あなたは勝負はこの1年と決めて、ある結婚相談所に登録することにしました。そこはかなり値段が張るだけはあって「今後1年で100人のお相手の紹介を保証」とのこと。ただし…
- (1) 前もって相手のプロフィールなどは見せられない(条件などは会うまで分からない)
- (2) 1度に1人しか会えない
- (3) 交際を断った場合に次の人を紹介する
- (4) 一度断った相手とは二度と会えない(キープは不可)
- (5) こちらが OK すれば相手は必ず応じる。そしてゴールイン!
という条件付きです。
この人だ!と思ってももしかしたら次にもっといい人が現れるかも…でもそうこうしているうちに1番の人を見逃してしまっているかも…これは綿密なる戦略が必要だ!
そこであなたは先ず勇気を出して最初の何人かを見逃して(観察して)、その後「これまでに見逃した人より高条件の人」が現れたら問答無用でその人をゲットする、という戦略を採用することにしました。
この戦略だと、見逃す人数が少なすぎると、高条件の人を見逃す確率は減るけども低条件の人を選んでしまう確率も増える。見逃す人が多すぎると、最高条件の人を見逃してしまうかもしれない…では何人を見逃すことで最高の相手をゲットする確率が一番高くなるでしょうか?
結論を先に言うと、最初の37人を見逃すのが最良の戦略で、その場合最高の相手をゲットする確率は約37.1%となります。
ここから先は数学の話

人の見合い相手(今の例では

)のうち、見逃す人数を

とする。
本当の No.1 の相手が

番目にいる場合で、しかもその人を選ぶ確率を

と書くとしよう。

を考えてみよう。これは
(j 番目に最高の相手がいる確率)×(そこに達する確率)
と定義される。
前者の確率は

となる(完全にデタラメなので
一様分布)。
後者の確率は、運命の j 番目の相手に至るまでに出会う(j-1)人のうちの最高の人が、最初の s 人に含まれていればいいというのは分かるだろうか?
もし(j-1)人のうちの最高の人が最初の s 人に含まれていなければその人に出会った時点で婚活は終了し、運命の人には出会えないことになるからである。
逆にこの人が最初の s 人に含まれていれば、観察期間が終了して運命の j 番目の相手に出会うまでは見逃した人より高条件の人には出会わないことになる。
というわけで、後者の確率は

である。結局

は、
となる(j が 1 から s までの場合は最高の人を見逃してしまった!ということで出逢う確率は 0)。
最高の相手に出会う確率は

の和、つまり
となる。あとはこれを最大にする

を見つければよいことになる!
ちなみにこの 37% という何ともキレの悪い数字は一体何かというと、
です。何とこんなところに
自然対数の底 
が!!
May 18, 2010
この一様乱数(連続)を利用したゲームは
http://beetama.blog14.fc2.com/blog-date-200807.html
に掲載されていたものを参考にしました。ペコリ。
ルール
1箇所に赤い丸印(基準点)がつけてあるリングがあります。リングの任意の2箇所にボタンを使って切り込みを入れます。その結果リングは2つに分割されますが、そのうち
赤い丸印がない方があなたの取り分、もう一方が闇のオーナーの取り分となります。
- あなたの取り分が大きい場合:あなたの勝利。闇のオーナーとの取り分の差額が手に入る。
- あなたの取り分が小さい場合:あなたの負け。闇のオーナーとの取り分の差額を支払う。
要するに基準点、切り込み1、切り込み2の3点を円周上にランダムに配置しているだけなのです。その位置は
一様分布(連続)に従っていて、範囲は

[度]になっているというわけ。
3点をデタラメにばら撒いているだけなので、どっちに基準点が入るかは5分5分のような気がする。ならば勝敗は5分5分なんでしょうか?

[スタート]ボタンをクリックするとリングが回転します。その後、同じボタン([最初の切り込み]となっている)をクリックすると赤い三角形の箇所に切り込みが入り、更に同じボタン([次の切り込み]となっている)をクリックすると2箇所目に切り込みが入ってリングは停止します。
あなたの取り分が緑色で示されます。あなたは見事勝利することができるでしょうか?勝率や成績を調べてみてくださいね(果たして5分5分?)。
Newer Entries