旧バージョン
ファイルダウンロード
下記の項目をクリックして、次の自己解凍型ファイルを適当なディレクトリにダウンロードしてください。
概要
Numerical Technologies Random Generator for Excel (NtRand) とは、モンテカルロ法に用いる標準正規乱数などを、Microsoft Excel から使える関数アドインとして実装したソフトウェアです。 シミュレーション分野で注目を集めている超長周期 ・高次元均等分布 を特徴とする擬似乱数 Mersenne Twister を使用しています。 また多変量モンテカルロにおいては対称変量法 (antithetic)、2次サンプリング (quadratic resampling) などの精度改善手法を採用しています。 詳しくは「モーメントマッチングによるモンテカルロ法の改善効果」 をご覧ください。
リスク管理で使われるVaRなどの計算においては、大規模なモンテカルロシミュレーションがしばしば必要となります。 そうした際、システム組込みの乱数では十分な精度を確保できません。物理乱数 を使う解決方法もありますが、追試で重要な再現性がない上に特殊なハードウェアが必要であるため、実用性に乏しいものです。 Mersenne Twister は、そんな場合の現実的なソリューションを与えてくれる方法の一つであり、弊社のリスク管理システムCreditBrowser® / PortfolioBrowser® の中でも大規模に使用しております。
NtRand は非常に高速かつ高機能です。 数十次元程度であれば実用レベルのモンテカルロVaR (Value at Risk) システムや、デリバティブのプライシングモデルを、パソコン上のExcel を使って構築可能です。 すなわち、大方の比較的小規模なVaR 管理ならば NtRand を用いれば実現できるはずです。 デリバティブのプライシングやリスク管理の研究、高額なシステムの企画・発注の前の叩き台、あるいは論文ネタとして、ぜひご活用ください。
ライセンス
本ソフトウェアはフリーウェアです。 個人としての使用または非営利の目的(学術研究など)の使用に限定するとの条件の下に、使用料、ライセンス料は頂いてはおりません。 第三者への再配布は、非営利の目的に限り自由に行って結構です。
本ソフトウェアの使用は自己責任で行ってください。 本ソフトウェアによって得た計算結果、および本ソフトウェアをインストールすることによって起きた障害などに関しては、弊社は責任を一切負いません。 バグやご意見は弊社宛てにEメールでレポート頂ければ幸いです。
本ソフトウェアの著作権はニューメリカルテクノロジーズ株式会社に帰属します。 無断で本ソフトウェアを営利目的で使用することを禁じます。 ただし、乱数生成法自体は純粋数学であり、オープンな存在です。 詳しくはMersenne Twisterのホームページをご覧下さい。
フリーウェア以上のサポートをご希望の場合、営利目的での本ソフトウェア利用をご希望の場合、あるいは本ソフトウェアの内部ロジックの正当性に関する監査法人宛て文書説明などの支援をご希望の場合には、弊社宛てにご相談下さい。
インストール / アンインストール
インストール方法
-
以前のバージョンのNtRand をインストール済みの場合は、後述する手順に従ってNtRand をアンインストールしてください。 Excel はAddin ソフトウェアをキャッシュするため、上書きインストールはできません。 またリリースノートをお読みになり、以前のバージョンからの変更点を確認してください。
- 上記ダウンロードファイルをダブルクリックして実行すると解凍が行われ、次のファイルが出来あがります。
- Readme.txt – パッキングリスト
- NtRand.xll – NtRand 本体
- NtRand1.xls – 一様乱数のサンプルExcel シート
- NtRand2.xls – 標準正規乱数のサンプルExcel シート
- NtRand3.xls – 多変量相関乱数のサンプルExcel シート
- NtRand4.xls – 多変量統計関数のサンプルExcel シート
- NtRand5.xls – ポワソン分布、ベータ分布、正規分布、対数正規分布、切断正規分布、三角分布、ガンベル分布、ロジスティック分布、ワイブル分布に従う乱数のサンプルExcel シート
- NtRand6.xls – 2変量正規分布関数のサンプルExcel シート
- NtRand7.xls – 主成分分析のサンプルExce lシート
- NtRand8.xls – オプション計算式のサンプルExcel シート
- NtRand.xll を所定のディレクトリに置いてください。 どこでも構いません。 新しいバージョンのExcel ではAddin ディレクトリをデフォルトで指定してきます。
- 次に、Excel を起動します。
- メニューの「ツール」->「アドイン」->「参照」とダイアログボックスを開き、先ほど置いた NtRand.xll をファイル指定して「OK」をクリックします。
- すると、「アドイン」ダイアログボックスに”NtRand Addin” の項目が現れます。 これをチェックして、「OK 」を押せば完了です。
- アドインが指定されている限り、添付のサンプルシート以外でも Numerical Technologies Random Generator for Excel の機能をお使いになれます。
アンインストール方法
- NtRand がインストールされており、かつExcelメニューの「ツール」->「アドイン」ダイアログボックスで”NtRand Addin” の項目のチェックがはずされている場合には、これをチェックして「OK」を押しておきます。
- Excel を終了します。
- NtRand.xll を削除します。 インストールしたディレクトリがわからなくなった場合は、Windows 画面左下の「スタート」ボタンをクリックすると現れる「検索」メニューの機能を使うと便利です。
- Excel を起動します。 エラーが表示される場合がありますが、気にしないで「OK 」をクリックしてください。
- 起動したら、メニューの「ツール」->「アドイン」とダイアログボックスを開きます。
- “NtRand Addin” の項目のチェックをはずそうとすると、「リストから削除しますか」とダイアログボックスが応答を求めます。 ここで「OK 」を選び、リストから削除すれば完了です。
NtRand の使用
次の関数がExcel に追加されます。 使用例については各サンプルシートを、使用方法についてはマニュアルをご参照下さい。
Function Name | Functionality | Sample Sheet |
---|---|---|
NtRand | Generate uniform randomnumbers (Note 11). | NtRand1.xls |
NtRandNorm | Generate normal (Gaussian)random numbers (Note 1). | NtRand2.xls |
NtRandMultiNorm | Generate multivariatecorrelationrandom numbers (Note 12). | NtRand3.xls |
NtCorToCov | Convert standard deviationvector and correlation matrixto covariance matrix. | NtRand4.xls |
NtCovToCor | Convert covariance matrix tostandard deviation vectorand correlation matrix. | NtRand4.xls |
NtMultiCorrel | Create correlation matrix. | NtRand4.xls |
NtMultiCovarp | Create correlation matrix. | NtRand4.xls |
NtRandPoisson, NtRandBeta,NtRandBeta2, NtRandLogNorm,NtRandLogNorm2,NtRandTruncNorm, NtRandTruncNorm2,NtRandTriangular, NtRandGumbel, NtRandLogistic, NtRandWeibull |
Compute various randomnumber sequence.See sample Excel sheet. | NtRand5.xls |
NtBiNormDist | Compute standard bivariatenormal distribution function. | NtRand6.xls |
NtPCA | Compute principalcomponentanalysis (PCA). | NtRand7.xls |
NtOptionBS, NtOptionBF, NtOptionGK | Option formula demo(Black=Scholes,Black Futures Option, andGarman=Kohlhagen FXOption) | NtRand8.xls |
リリースノート
バージョン 2.01 (1/6/2003)
- 乱数生成関数の引数が変更されました。Algorithmという引数が2番目になりました。
- 1) Mersenne Twister 2002、2)Mersenne Twister 1998、3)Numerical Recipies’s ran2という3種の一様乱数生成アルゴリズムが実装されました。乱数アルゴリズムの選択をご覧ください。(NtRand バージョン 1.x では Mersenne Twister 1998 のみでした)。
- NtPCA関数(主成分分析)が追加されました。
- NtOptionBS、NtOptionBF、NtOptionGK という3種のオプション価格公式関数が追加されました。
- NtBiNormDist 関数において、相関係数(第3引数 Corr)が 1 または -1の場合にも対応しました。
バージョン 1.37 (6/18/2001)
- 様々な乱数生成関数が追加されました。
バージョン 1.19 (5/21/2000)
- 標準2変数正規分布の分布関数が追加されました。
バージョン 1.17 (2/20/2000)
- 乱数初期値がすべて0の場合に乱数が正しく生成されない問題を修正しました。
バージョン 1.11 (3/1/1999)
- NtCorToCov() と NtCovToCor() の2つの関数を追加。
バージョン 1.00 (12/22/1998)
マニュアル
NtBiNormDist
関数名
NtBiNormDist – 2変量標準正規分布関数
引数リスト
型 | 説明 | |
第1引数 (X1) | 数値型 | 第1の確率変数の値 |
第2引数 (X2) | 数値型 | 第2の確率変数の値 |
第3引数 (Corr) | 数値型 | 2つの確率変数の相関係数。 -1以上、1以下の数値を与えてください。 |
第4引数 (PDF/CDF) | 論理型 | TRUEならば累積確率、FALSEまたは省略すれば確率密度になります。 |
戻り値
2変量標準正規分布とは、平均0、標準偏差1の2変量正規分布のことです。 累積確率密度は次の式から計算されます。
最初の2つの引数には任意の実数値を与えてください。 第3引数には区間[-1, 1]の実数値を与えてください。 このアドイン関数は、第4引数がTRUEならば2変量標準正規分布の累積確率密度、FALSEまたは省略すれば確率密度を与えます。
使用例
サンプルシート NtRand6.xls をご覧ください。
NtCorToCov
関数名
NtCorToCov – {標準偏差, 相関係数行列}→共分散行列 変換 (サンプルシート NtRand4.xls を参照下さい)
引数リスト
型 | 説明 | |
第1引数 (Stdev. vector) | 1行×N列 または N行×1列 の範囲、数値型 | 標準偏差 |
第2引数 (Correlation matrix) | N行×N列 の範囲、数値型 | 相関係数行列 |
戻り値
長さNの標準偏差ベクトルとN×Nの相関係数行列を、N×Nの共分散行列に変換します。 結果はN行×N列の配列数式 となります。 指定可能な範囲の上限値については、「Excelの仕様上の制限について 」をご覧ください。
使用例
3次元の変換例。
=NtCorToCov(D30:F30,D31:F33)
C30:F30の内容 (標準偏差ベクトル)。
系列1 | 系列2 | 系列3 |
0.179524636 | 0.243855327 | 0.075912421 |
D31:F33の内容 (相関係数行列)。
系列1 | 系列2 | 系列3 | |
系列1 | 1 | 0.617785268 | -0.475767708 |
系列2 | 0.617785268 | 1 | 0.063640637 |
系列3 | -0.475767708 | 0.063640637 | 1 |
その結果。
系列1 | 系列2 | 系列3 | |
系列1 | 0.032229095 | 0.027045428 | -0.006483834 |
系列2 | 0.027045428 | 0.059465421 | 0.001178093 |
系列3 | -0.006483834 | 0.001178093 | 0.005762696 |
NtCovToCor
関数名
NtCovToCor – 共分散行列→{標準偏差, 相関係数行列} 変換 (サンプルシート NtRand4.xls を参照下さい)
引数リスト
型 | 説明 | |
第1引数 (Covariance matrix) | N行×N列 の範囲、数値型 | 共分散行列 |
第2引数 (Show stdev.) | 論理型 | TRUEの時は標準偏差も出力 (省略時 FALSE) |
戻り値
N×Nの共分散行列を、長さNの標準偏差ベクトルとN×Nの相関係数行列に変換します。 指定可能な範囲の上限値については、「Excelの仕様上の制限について 」をご覧ください。
第2引数がTRUEの時、結果はN+1行×N列の配列数式 となり、1行目が標準偏差ベクトル、それ以降の行が相関係数行列になります。 第2引数がFALSEの時は、結果はN行×N列の配列数式 となり、相関係数行列になります。
使用例
3次元の変換例。
=NtCovToCor(D22:F24,TRUE)
D22:F24の内容 (共分散行列)。
系列1 | 系列2 | 系列3 | |
系列1 | 0.032229095 | 0.027045428 | -0.006483834 |
系列2 | 0.027045428 | 0.059465421 | 0.001178093 |
系列3 | -0.006483834 | 0.001178093 | 0.005762696 |
その結果。
系列1 | 系列2 | 系列3 | |
標準偏差→ | 0.179524636 | 0.243855327 | 0.075912421 |
相関係数行列→系列1 | 1 | 0.617785268 | -0.475767708 |
系列2 | 0.617785268 | 1 | 0.063640637 |
系列3 | -0.475767708 | 0.063640637 | 1 |
NtMultiCorrel
関数名
NtMultiCorrel – 相関係数行列の作成 (サンプルシート NtRand4.xls を参照下さい)
引数リスト
型 | 説明 | |
第1引数 (Data set) | M行×N列 の範囲、数値型 | 系列データ |
第2引数 (Show mean) | 論理型 | TRUEの時は平均値(期待値)も出力 (省略時 FALSE) |
第3引数 (Show stdev.) | 論理型 | TRUEの時は標準偏差も出力 (省略時 FALSE) |
戻り値
各系列がM個からなるN系列のデータから、長さNの平均値 (期待値)ベクトル、長さNの標準偏差ベクトル、およびN×Nの相関係数行列を計算します。 指定可能な範囲の上限値については、「Excelの仕様上の制限について 」をご覧ください。
第2引数がTRUEの時は、結果はN+2行×N列 (第3引数がTRUEの時)またはN+1行×N列 (第3引数がFALSEの時)の配列数式 となり、1行目が平均値 (期待値)ベクトルとなります。
第3引数がTRUEの時は、結果はN+2行×N列 (第2引数がTRUEの時)またはN+1行×N列 (第2引数がFALSEの時)の配列数式 となり、それぞれ2行目または1行目が標準偏差ベクトルとなります。 それ以降の行は相関係数行列になります。
使用例
3次元の計算例。
=NtMultiCorrel(D7:F16,TRUE,TRUE)
D7:F16の内容 (10個からなる3系列のデータ)。
系列1 | 系列2 | 系列3 |
0.070589221 | 0.311566054 | 0.136754076 |
-0.050589221 | -0.271566054 | -0.076754076 |
-0.012264864 | 0.311828795 | 0.017479674 |
0.032264864 | -0.271828795 | 0.042520326 |
0.204493265 | 0.306616582 | -0.001825474 |
-0.184493265 | -0.266616582 | 0.061825474 |
-0.331349375 | -0.187062368 | 0.111930734 |
0.351349375 | 0.227062368 | -0.051930734 |
0.061299816 | -0.026134643 | -0.067646202 |
-0.041299816 | 0.066134643 | 0.127646202 |
その結果。
系列1 | 系列2 | 系列3 | |
平均→ | 0.01 | 0.02 | 0.03 |
標準偏差→ | 0.179524636 | 0.243855327 | 0.075912421 |
相関係数行列→系列1 | 1 | 0.617785268 | -0.475767708 |
系列2 | 0.617785268 | 1 | 0.063640637 |
系列3 | -0.475767708 | 0.063640637 | 1 |
NtMultiCovarp
関数名
NtMultiCovarp – 共分散行列の作成 (サンプルシート NtRand4.xls を参照下さい)
引数リスト
型 | 説明 | |
第1引数 (Data set) | M行×N列 の範囲、数値型 | 系列データ |
第2引数 (Show mean) | 論理型 | TRUEの時は平均値 (期待値)も出力 (省略時FALSE) |
戻り値
各系列がM個からなるN系列のデータから、長さNの平均値 (期待値)ベクトルとN×Nの共分散行列を計算します。 指定可能な範囲の上限値については、「Excelの仕様上の制限について 」をご覧ください。
第2引数がTRUEの時は、結果はN+1行×N列の配列数式 となり、1行目が平均値 (期待値)ベクトル、それ以降の行が共分散行列になります。 第2引数がFALSEの時は、結果はN行×N列の配列数式 となり、共分散行列になります。
使用例
3次元の変換例。
=NtMultiCovarp(D7:F16,TRUE)
D7:F16の内容 (10個からなる3系列のデータ)。
系列1 | 系列2 | 系列3 |
0.070589221 | 0.311566054 | 0.136754076 |
-0.050589221 | -0.271566054 | -0.076754076 |
-0.012264864 | 0.311828795 | 0.017479674 |
0.032264864 | -0.271828795 | 0.042520326 |
0.204493265 | 0.306616582 | -0.001825474 |
-0.184493265 | -0.266616582 | 0.061825474 |
-0.331349375 | -0.187062368 | 0.111930734 |
0.351349375 | 0.227062368 | -0.051930734 |
0.061299816 | -0.026134643 | -0.067646202 |
-0.041299816 | 0.066134643 | 0.127646202 |
その結果。
系列1 | 系列2 | 系列3 | |
平均→ | 0.01 | 0.02 | 0.03 |
共分散行列→系列1 | 0.032229095 | 0.027045428 | -0.006483834 |
系列2 | 0.027045428 | 0.059465421 | 0.001178093 |
系列3 | -0.006483834 | 0.001178093 | 0.005762696 |
NtRand
関数名
NtRand – 一様乱数 (サンプルシート NtRand1.xls を参照下さい)
引数リスト
型 | 説明 | |
第1引数 (Size) | 整数型 | 欲しい一様乱数 の個数 (最大32,767個) |
第2引数 (Algorithm) | 整数型 | 乱数アルゴリズム の選択 (0から2の値) |
第3引数 (Random seed1) | 長整数型 | 乱数の種数1 |
第4引数 (Random seed2) | 長整数型 | 乱数の種数2 |
第5引数 (Show Horizontal) | 論理型 | TRUEでは結果を列(水平)方向、FALSEでは行(垂直)方向に出力 (省略時 FALSE) |
戻り値
一様乱数を、第1引数で指定した個数の配列数式 として返します。 出力形式は第5引数の指定で変更できます。 省略時のデフォルトはFALSE、すなわち行 (垂直)方向です。 この関数の内部では、超長周期 ・高次元均等分布を特徴とする擬似乱数 Mersenne Twister を使用しています。
なお、一度に生成できる乱数の最大数については、「Excelの仕様上の制限について 」をご覧ください。 これ以上の乱数が必要な場合には、乱数の種数を変えて再度関数を呼んでください。 全く異なる乱数系列が得られます。
使用例
3個の一様乱数を生成する式。Excelでは引数を省略するとFALSEになるので、次の2つは同じ意味を持つ。
=NtRand(3,0,12345,67890,FALSE)
=NtRand(3,0,12345,67890)
その結果。
0.317261528 |
0.276234094 |
0.631565334 |
水平方向の配列数式 として出力したければ、最後の引数をTRUEに変更して数式をExcelのセルに入力する。
=NtRand(3,0,12345,67890,TRUE)
その結果。
0.317261528 | 0.276234094 | 0.631565334 |
ここで、最後の引数をTRUEに変更するのを忘れたりすると、次のように「同じ数字ばかりで乱数ではない」などということになる。 これはExcelの仕様であり、本ソフトウェアの問題ではありません。 詳しくは配列数式 に関するExcelのヘルプをご覧ください。
0.317261528 | 0.317261528 | 0.317261528 |
NtRandMultiNorm
関数名
NtRandMultiNorm – 多変量相関乱数 (サンプルシート NtRand3.xls を参照下さい)
引数リスト
型 | 説明 | |
第1引数 (Size) | 整数型 | 欲しい多変量相関乱数セットの個数 (最大32,767個) |
第2引数 (Algorithm) | 整数型 | 乱数アルゴリズム の選択 (0から2の値) |
第3引数 (Random seed1) | 長整数型 | 乱数の種数1 |
第4引数 (Random seed2) | 長整数型 | 乱数の種数2 |
第5引数 (Use invert func) | 論理型 | TRUEでは逆関数法、FALSEでは極座標法 を使用 |
第6引数 (Use antithetic) | 論理型 | TRUEにすると対称変量法 を使用 |
第7引数 (Use resampling) | 論理型 | TRUEにすると2次サンプリング法を使用 |
第8引数 (Cov) | N行×N列 の範囲、数値型 | 共分散行列 |
第9引数 (Mean) | 1行×N列 または N行×1列 の範囲、数値型 | 平均値 (ドリフト) |
入力パラメータとして共分散行列が必要です。 共分散行列の代わりに、個別系列毎の標準偏差と、相関係数行列を使っても多変量相関乱数を求めることができます。 その方法については、サンプルシート NtRand3.xls を参照して下さい。
戻り値
多変量相関乱数を、第1引数で指定した個数 (行=垂直方向)×N (列=水平方向)の配列数式 として返します。 この関数の内部では、超円周期・高次元均等分布 を特徴とする擬似乱数Mersenne Twister、および三角分解にSVD (Singular Value Decomposition) 法を使用しています。
なお、一度に生成できる乱数の最大数については、「Excelの仕様上の制限について 」をご覧ください。
使用例
8個の3次元相関乱数を、逆関数法、対称変量法 、2次サンプリング法を全て使用して生成する式。
=NtRandMultiNorm(8,0,12345,67890,TRUE,TRUE,TRUE,C14:E16,C12:E12)
C14:E16の内容 (共分散行列)。
系列1 | 系列2 | 系列3 | |
系列1 | 0.0890 | 0.0394 | 0.0316 |
系列2 | 0.0394 | 0.0580 | 0.0352 |
系列3 | 0.0316 | 0.0352 | 0.0450 |
C12:E12の内容 (平均値)。
系列1 | 系列2 | 系列3 |
0.0100 | 0.0200 | 0.0300 |
その結果。
系列1 | 系列2 | 系列3 |
0.074129780 | 0.136097267 | 0.387567712 |
-0.054129780 | -0.096097267 | -0.327567712 |
0.152940454 | 0.434545396 | 0.181028394 |
-0.132940454 | -0.394545396 | -0.121028394 |
0.343481610 | 0.231652509 | 0.189956940 |
-0.323481610 | -0.191652509 | -0.129956940 |
-0.459303115 | -0.023321529 | -0.031233432 |
0.479303115 | 0.063321529 | 0.091233432 |
NtRandNorm
関数名
NtRandNorm – 標準正規乱数 (サンプルシート NtRand2.xls を参照下さい)
引数リスト
型 | 説明 | |
第1引数 (Size) | 整数型 | 欲しい標準正規乱数 の個数 (最大32,767個) |
第2引数 (Algorithm) | 整数型 | 乱数アルゴリズム の選択 (0から2の値) |
第3引数 (Random seed1) | 長整数型 | 乱数の種数1 |
第4引数 (Random seed2) | 長整数型 | 乱数の種数2 |
第5引数 (Use invert func) | 論理型 | TRUEでは逆関数法、FALSEでは極座標法 を使用 (省略時 FALSE) |
第6引数 (Use antithetic) | 論理型 | TRUEにすると対称変量法 (antithetic) を使用 (省略時 FALSE) |
第7引数 (Use resampling) | 論理型 | TRUEにすると2次サンプリング法を使用 (省略時 FALSE) |
第8引数 (Show Horizontal) | 論理型 | TRUEでは結果を列 (水平)方向、FALSEでは行 (垂直)方向に出力 (省略時 FALSE) |
戻り値
標準正規乱数 を、第1引数で指定した個数の配列数式 として返します。 出力形式は第8引数の指定で変更できます。 省略時のデフォルトはFALSE、すなわち行 (垂直)方向です。 この関数の内部では、超円周期・高次元均等分布 を特徴とする擬似乱数Mersenne Twisterを使用しています。
なお、一度に生成できる乱数の最大数については、「Excelの仕様上の制限について 」をご覧ください。 これ以上の乱数が必要な場合には、乱数の種数を変えて再度関数を呼んでください。 全く異なる乱数系列が得られます。
使用例
3個の標準正規乱数 を、逆関数法、2次サンプリング法を使用して生成する式。 Excelでは引数を省略するとFALSEになるので、次の2つは同じ意味を持つ。
=NtRandNorm(3,0,12345,67890,TRUE,FALSE,TRUE,FALSE)
=NtRandNorm(3,0,12345,67890,TRUE,FALSE,TRUE)
その結果。
-0.159823763 |
-0.308014543 |
0.853171973 |
水平方向の配列数式 として出力したければ、最後の引数をTRUEに変更して数式をExcelのセルに入力する。
=NtRandNorm(3,0,12345,67890,TRUE,FALSE,TRUE,TRUE)
その結果。
-0.159823763 | -0.308014543 | 0.853171973 |
ここで、最後の引数をTRUEに変更するのを忘れたりすると、次のように「同じ数字ばかりで乱数ではない」などということになる。 これはExcelの仕様であり、本ソフトウェアの問題ではありません。 詳しくは配列数式 に関するExcelのヘルプをご覧ください。
-0.159823763 | -0.159823763 | -0.159823763 |