FAQ
NtRand FAQへようこそ!
わからーんっと思って我々にメールする前にちょっとこちらのFAQを覗いてみてください。皆様からの反応を見て近々forum も立ち上げようかと検討中。
- ソフトウェアライセンス
- 使い方
- NtRandの裏側
ソフトウェアライセンス刑事ドラマに巻き込まれる危険?
NtRand (以下 “ソフトウェア”) は無料で提供しているソフトウェアであり、使用料やライセンス料などはいただいておりません。したがって、使用許諾条件下の状況でご利用いただく場合には料金の請求やある日突然戸口に警察が立っているなどといったことは起こりませんので、ご安心ください。
ニューメリカルテクノロジーズ株式会社は東京、丸の内にあるITのシステム開発会社です。主に金融リスク管理に取り組み、金融機関大手を顧客に持っています。詳しくは弊社のサイトをご覧ください。
使い方NtRand でコマッタ?
- 方法 1
- 1. .chm ファイルをダブルクリック
- 2. [開いているファイル – セキュリティの警告] ダイアログ ボックスで、[この種類のファイルであれば常に警告する] チェック ボックスをオフ
- 3. [開く] をクリック
- 方法 2
- 1. .chm ファイルを右クリックし、[プロパティ] を選択
- 2. ブロックの解除]ボタンをクリックし、[OK]ボタンをクリック
- 3. chm ファイルをダブルクリック
- NtPCA
- NtOptionBS
- NtOptionBF
- NtOptionGK
- NtMonteCarloLFM
=NTRAND(10000,0,RAND()*2147483647,RAND()*2147483647)
これで大丈夫です。NTRAND 関が10000回あるいは20000回呼ばれるということはありません。Excel関数に対して一度に受け渡し可能なデータの最大数は、配列数式の場合は行または列方向に32,767個以内、一般の数式の場合は行方向32,767個以内、列方向256個以内に制限されています。Windows95環境の場合はこれにさらに16bitの制限が加わります。すなわち一度に受け渡し可能なデータの最大量が64kBytesであるため、Excel標準の数値型 (倍精度浮動小数点数)ならば最大8,192個以上の受渡しはできません。このため、次元数の大きな多変量モンテカルロをNtRand 32bit で行う場合は、Windows NT/2000/XP 環境をお勧めします。これらの制限はExcelおよびWindowsの問題であり、NtRand 32bitの問題ではありません。 Excel 2007, 2010 では 32,767超のデータを取り扱うことが出来ます。
Public Sub Test1() Dim Result As Variant Result = Application.Run("NTRANDMULTINORM", 8, Range(Cells(14, 3), Cells(16, 5)), Range(Cells(12, 3), Cells(12, 5)), 0, 12345, 67890, True, True, True) '... now 'Result' stores 8 x 3 array of multi-dimensional normal ' random number sequence ... ' You can extract an individual value from Result by e.g. Result(5, 2) '... do what you want ... End Subなお、VBA と Visual Basic とは異なる開発言語です。上記 “Application.Run…” のテクニックはVBAでのみ機能します。VBAはExcelの内部データ表現であるXLOPER型を変換することができます。しかし、Visual Basic にはこの機能がありません。Excelアドインの内部関数を Visual Basic から呼ぶことは簡単ではありません。
サンプルシートはダウンロードページから入手できます。 NtRand Excelアドインをインストールした後、NtRand 関数の使い方を学ぶためにサンプルシートを開きます。それぞれのサンプルシートは次のNtRand関数を含んでいます。
- NtRand1.xls – (NTRAND, NTRANDBETA, NTBETAMOM, NTBETAPARAM, NTRANDCHI, NTCHIMOM, NTRANDCHISQ, NTCHISQMOM, NTRANDGAMMA, NTGAMMAMOM, NTGAMMAPARAM, NTRANDF, NTFMOM, NTRANDGUMBEL, NTGUMBELMOM, NTGUMBELPARAM, NTRANDJOHNSONSU, NTJOHNSONSUMOM, NTJOHNSONSUPARAM, NTRANDLOGISTIC, NTLOGISTICMOM, NTLOGISTICPARAM, NTRANDLOGNORM, NTLOGNORMMOM, NTLOGNORMPARAM, NTRANDNORM, NTRANDPOISSON, NTPOISSONMOM, NTRANDT, NTTMOM, NTRANDTRIANGULAR, NTTRIANGULARMOM, NTTRIANGULARPARAM, NTRANDTRUNCNORM, NTTRUNCNORMMOM, NTTRUNCNORMPARAM, NTRANDWEIBULL, NTWEIBULLMOM, NTWEIBULLPARAM, NTRANDMULTINORM)
- NtRand2.xls – (NTBETADIST, NTBETAPARAM, NTCHIDIST, NTCHISQDIST, NTFDIST, NTGAMMADIST, NTGAMMADISTINV, NTGUMBELDIST, NTGUMBELINV, NTGUMBELPARAM, NTJOHNSONSUDIST, NTJOHNSONSUINV, NTJOHNSONSUPARAM, NTLOGISTICDIST, NTLOGISTICINV, NTLOGISTICPARAM, NTLOGNORMDIST, NTLOGNORMINV, NTLOGNORMPARAM, NTNORMDIST, NTPOISSONDIST, NTTDIST, NTTRIANGULARDIST, NTTRIANGULARINV, NTTRIANGULARPARAM, NTTRUNCNORMDIST, NTTRUNCNORMINV, NTTRUNCNORMPARAM, NTWEIBULLDIST, NTWEIBULLINV, NTWEIBULLPARAM)
- NtRand3.xls – (NTCOR2COV, NTCOV2COR, NTMULTICORREL, NTMULTICOVARP)
NtRand に関して最も多く受けるのがこの種の質問です。これはNtRand ではなくExcel の問題です。
詳しくはExcel のヘルプやハウツー本を探してみてください。さらに、“配列数式” や “Excel の仕様上の制限について (NtRand 32bit)”を読むことをお勧めします。
- 準乱数モンテカルロ – 疑似乱数の代わりに規則性を持った数値列を使い、より望ましい確率分布に近づけようとするもの
- モーメントマッチング – 統計的手段により生成する疑似乱数を操作して、より望ましい確率分布に近づけようとするもの
- 準乱数モンテカルロ
単変量または低次元における、特に期待値や分散を求める用途において効果を発揮します。例えば単変量のオプションプライシングには少ない繰り返し計算で絶大な精度向上の効果があり、金融界でも1980年代末から1990年代初め頃に市場の主要プレーヤーの間で流行しました (現在では計算機の性能が上がったため、何でもモーメントマッチングで回数を増せばとりあえず問題が解決するため流行も下火)。 逆に欠点は、高次元下において著しくパフォーマンスが劣化することと、分布のテールにおける準乱数の挙動の問題から、順位数計算 (VaR算出など)に使い難いことです。 準乱数モンテカルロの理論性能 (=計算誤差)は、シミュレーション回数を とすれば、次の数式に示される通り次元数 に支配されており、変量の数が増せば原始的なモンテカルロ法よりもかえって性能が悪化します。
- モーメントマッチング
大半の用途に有効です。高次元あるいは分布のテール (例えば順位数算出)においても安定した性能を求めるには他に有力な代替手段がありません。 しかし、大幅に改善するとはいえ、先の原始的なモンテカルロ法と同じ理論性能限界を持つため、低次元下、特に単変量下での性能は準乱数モンテカルロに比べて見劣りします。 金融界では、リスク計量化、いわゆる Value at Risk (VaR) がテーマとなった1990年代半ばから、高次元モンテカルロを使用する際の標準的手法として定着しています。 今日、モーメントマッチングがこれほど普及した理由は、その扱いやすさ、予測可能性 (見通し)の良さ、もさることながらインフラとしてのコンピューターの性能が向上したところが大でしょう。 「今や10,000回以上のシミュレーションも手軽に1秒以下で可能なほど計算機の性能が向上したのだから準乱数モンテカルロの役割は終わった」と思われる方も多いかもしれません。 そうした考え方もある面では説得力がありますが、非常に計算負荷のかかる特殊なオプション計算を行うケースなどで、シミュレーション回数が重荷となったならば、モーメントマッチングではなく準乱数モンテカルロの採用を考えた方が良いでしょう。
- 入力データ
次の統計値を持ったドリフトのある多変量正規乱数を発生させたいとします。 以下の比較では、これらの数値に近い結果になればなるほど、優れた効果を持つと考えられます。1 2 3 4 5 6 7 8 9 10 A B C D Data Data Data Description 1st.series 2nd.series 3rd.series Description 0.01 0.02 0.03 means 0.29833 0.24083 0.21213 stdevs 0 0 0 skewness 0 0 0 kurtosis Data Data Data Description 1 0.54843 0.50011 crrel.matrix 0.54843 1 0.68817 crrel.matrix 0.50011 0.68817 1 crrel.matrix - 計算1:原始的なモンテカルロ法 – モーメントマッチングを全く使用しないケース
わずか100回程度の計算試行では、求めた多変量乱数から得た統計量は、入力データの統計量と著しく乖離してしまいます。1 2 3 4 5 6 7 8 9 10 A B C D Data Data Data Description 1st.series 2nd.series 3rd.series Description 0.05210 0.02710 0.03757 means 0.29159 0.22906 0.19863 stdevs -0.06096 0.39699 0.41137 skewness -0.30666 0.17643 0.55905 kurtosis Data Data Data Description 1 0.47414 0.45856 crrel.matrix 0.47414 1 0.71127 crrel.matrix 0.45856 0.71127 1 crrel.matrix - 計算2:対称変量法のみ使用 (奇数次モーメントのモーメントマッチング)
奇数次モーメントである、平均と歪度が入力データと完全に一致するように調整されます。この表には記していませんが、より高次の奇数次モーメントもゼロに調整されます。1 2 3 4 5 6 7 8 9 10 A B C D Data Data Data Description 1st.series 2nd.series 3rd.series Description 0.01000 0.02000 0.03000 means 0.28964 0.23389 0.21311 stdevs 0 0 0 skewness -0.13148 -0.21078 -0.04597 kurtosis Data Data Data Description 1 0.58045 0.52405 crrel.matrix 0.58045 1 0.74021 crrel.matrix 0.52405 0.74021 1 crrel.matrix - 計算3:2次サンプリング法のみ使用 (1~2次モーメントのモーメントマッチング)
平均、標準偏差、相関係数が入力データと一致するように調整されます。なお、非常に高次元のケースでは、計算機の表現精度上の誤差限界 (逆行列計算と三角分解の過程で発生)が制約要因となるため、微小のずれが生ずる場合があります。1 2 3 4 5 6 7 8 9 10 A B C D Data Data Data Description 1st.series 2nd.series 3rd.series Description 0.01000 0.02000 0.03000 means 0.29833 0.24083 0.21213 stdevs 0.00470 0.40025 0.57564 skewness 0.43710 1.71197 0.72973 kurtosis Data Data Data Description 1 0.54843 0.50011 crrel.matrix 0.54843 1 0.68817 crrel.matrix 0.50011 0.68817 1 crrel.matrix - 計算4:対称変量法と2次サンプリング法の同時使用 (奇数次+2次モーメントのモーメントマッチング)
尖度を除くすべての数値が入力データと一致します。なお、非常に高次元のケースでは、計算機の表現精度上の誤差限界 (逆行列計算と三角分解の過程で発生)が制約要因となるため、微小のずれが生ずる場合があります。1 2 3 4 5 6 7 8 9 10 A B C D Data Data Data Description 1st.series 2nd.series 3rd.series Description 0.01000 0.02000 0.03000 means 0.29833 0.24083 0.21213 stdevs 0 0 0 skewness -0.73001 1.19494 0.15166 kurtosis Data Data Data Description 1 0.54843 0.50011 crrel.matrix 0.54843 1 0.68817 crrel.matrix 0.50011 0.68817 1 crrel.matrix
ちなみにシミュレーション回数 を10000回にした場合です。他の統計量は当然ながら変化しませんが、次のように尖度は改善します。
1 2 3 4 5 6 7 8 9 10 A B C D Data Data Data Description 1st.series 2nd.series 3rd.series Description 0.01000 0.02000 0.03000 means 0.29833 0.24083 0.21213 stdevs 0.00470 0.40025 0.57564 skewness -0.03774 0.11285 0.00159 kurtosis Data Data Data Description 1 0.54843 0.50011 crrel.matrix 0.54843 1 0.68817 crrel.matrix 0.50011 0.68817 1 crrel.matrix
と表記されます。ここでは標準正規分布の累積分布関数です。
パラメータとは分布の平均、標準偏差ではありません。
右辺からわかるように、対数正規分布に従う確率変数 の対数が正規分布に従います。ここからは の対数をとったものの平均、は の対数をとったものの標準偏差と説明できます。
では、そのものの平均と標準偏差はどうなるでしょうか?
の平均がだから、の平均は ?(同様にの標準偏差は?残念ながらそんな簡単な話ではありません。
平均と標準偏差を定義式にしたがって丁寧に計算すると、、、
となります。ここからわかるように、だけでの平均を表したり、で標準偏差を表すことはできません。平均も標準偏差もとの組み合わせになります。
NtRand はもちろんこの計算をあなたの代わりにやってくれます。
この計算の逆、つまりとからとを求めるには?これもNtRandにお任せください。
ちなみに計算結果は、
となります。
詳しくはサンプルシートをご覧ください。
もし○○分布の累積分布関数 とその逆関数 が手元にあるならば、一様乱数u を用いて“切断”○○分布に従う乱数を生成できます。
○○分布の乱数の範囲の切断法によって以下の3通りのパターンが考えられます。
- 両裾を切断(範囲はとなる)
- 下位の裾を切断(範囲はとなる)
- 上位の裾を切断(範囲はとなる)
こうして定義された を用いて とすれば切断○○分布に従う乱数が得られます。 ダウンロード:切断Weibull分布の例
NtRand の裏側パンドラの箱かも
実際には適当に選択した整数(例えばシミュレーション番号)を与えるしかありません。しかし、乱数シードを気にする必要がない、あるいは Excel の RAND() 関数のように勝手に乱数シードが選ばれるようにしたいのであれば、「Excel RAND() の振る舞いに似せて、ワークシートを再計算するたびに乱数を自動的に更新する方法」に記述してある方法があります。
本来ならば、異なる乱数シードから生成された乱数系列間の独立性を注意深くテストした後にそれらをシミュレーションに用いるべきでしょうが、実際にはそのようなテストを行わずに乱数系列は互いに独立であるとしてシミュレーションなどを行っている場合がほとんどです(しかも、NtRand で生成される乱数系列は事実上独立としても問題ない)。
もしこの辺りの事情をより深く知りたいのであれば以下のサイトを参照してください。
Dynamic Creator Home Page