ですから、これは非常にシンプルで愚かな質問です。しかし、私が学校にいたとき、私はクラスでのシミュレーションの概念全体にほとんど注意を払わなかったので、そのプロセスに少し恐怖を感じました。
素人の言葉でシミュレーションプロセスを説明できますか?(データ、回帰係数などを生成するためのものです)
シミュレーションを使用する実際の状況/問題は何ですか?
私はRにあるように与えられた例を好むでしょう
ですから、これは非常にシンプルで愚かな質問です。しかし、私が学校にいたとき、私はクラスでのシミュレーションの概念全体にほとんど注意を払わなかったので、そのプロセスに少し恐怖を感じました。
素人の言葉でシミュレーションプロセスを説明できますか?(データ、回帰係数などを生成するためのものです)
シミュレーションを使用する実際の状況/問題は何ですか?
私はRにあるように与えられた例を好むでしょう
回答:
定量的モデルは()また、目的の特性を表す数値出力を生成するための明確な方法でこれらの数字を組み合わせ、それらの数値的特性及び(B)の一部によってオブジェクトを表すことにより、世界のいくつかの挙動をエミュレートします。
この回路図では、左側の3つの数値入力を組み合わせて、右側の1つの数値出力を生成します。数字の行は、入力および出力の可能な値を示しています。ドットは使用中の特定の値を示します。今日では通常、デジタルコンピューターが計算を実行しますが、それらは必須ではありません。モデルは鉛筆と紙で、または木材、金属、電子回路に「アナログ」デバイスを構築して計算されています。
例として、おそらく上記のモデルは3つの入力を合計します。 R
このモデルのコードは次のようになります
inputs <- c(-1.3, 1.2, 0) # Specify inputs (three numbers)
output <- sum(inputs) # Run the model
print(output) # Display the output (a number)
その出力は単に数値であり、
-0.1
世界を完全に知ることはできません。たとえモデルがたまたま世界とまったく同じように機能したとしても、私たちの情報は不完全であり、世界の状況はさまざまです。(確率的)シミュレーションは、モデル入力のこのような不確実性と変動が、出力の不確実性と変動にどのように変換されるべきかを理解するのに役立ちます。入力をランダムに変化させ、各変化に対してモデルを実行し、集合的な出力を要約することにより、そうします。
「ランダム」とはarbitrarily意的な意味ではありません。 モデラーは、すべての入力の目的の周波数を(明示的または暗黙的に)知っているかどうかにかかわらず、指定する必要があります。出力の頻度は、結果の最も詳細な要約を提供します。
ランダムな入力と結果の(計算された)ランダムな出力で示された同じモデル。
図は、数値の分布を表すヒストグラムで頻度を表示します。意図されている間、入力周波数は、左の入力のために示されている計算されたモデルを何度も実行して得られた出力周波数が、右側に示されています。
決定論的モデルへの入力の各セットは、予測可能な数値出力を生成します。ただし、モデルが確率的シミュレーションで使用される場合、出力は分布です(右に示す長い灰色のものなど)。出力分布の広がりは、入力が変化したときにモデルの出力がどのように変化するかを示しています。
上記のコード例は、次のように変更してシミュレーションに変換できます。
n <- 1e5 # Number of iterations
inputs <- rbind(rgamma(n, 3, 3) - 2,
runif(n, -2, 2),
rnorm(n, 0, 1/2))
output <- apply(inputs, 2, sum)
hist(output, freq=FALSE, col="Gray")
出力は、これらのランダムな入力を使用してモデルを反復することで生成されたすべての数値のヒストグラムで要約されています。
舞台裏を覗いて、このモデルに渡された多くのランダムな入力のいくつかを検査することができます。
rownames(inputs) <- c("First", "Second", "Third")
print(inputs[, 1:5], digits=2)
出力には、回の反復のうち最初の5回が示され、反復ごとに1つの列があります。
[,1] [,2] [,3] [,4] [,5]
First -1.62 -0.72 -1.11 -1.57 -1.25
Second 0.52 0.67 0.92 1.54 0.24
Third -0.39 1.45 0.74 -0.48 0.33
おそらく、2番目の質問に対する答えは、シミュレーションをどこでも使用できるということです。 実際問題として、シミュレーションの実行に予想されるコストは、予想される利益よりも少ないはずです。変動を理解して定量化することの利点は何ですか?これが重要な2つの主要な領域があります。
科学や法律のように、真実を求めています。数値自体は便利ですが、その数値がどれほど正確か、確実であるかを知る方がはるかに便利です。
ビジネスや日常生活のように、意思決定。決定は、リスクと利益のバランスをとります。リスクは、悪い結果の可能性に依存します。確率的シミュレーションは、その可能性を評価するのに役立ちます。
コンピューティングシステムは、現実的で複雑なモデルを繰り返し実行できるほど強力になりました。ソフトウェアは、ランダム値の生成と集計を迅速かつ簡単にサポートするように進化しました(2番目のR
例が示すように)。これらの2つの要素は、過去20年(およびそれ以上)にわたって組み合わされ、シミュレーションが日常的に行われるようになりました。残っているのは、(1)適切な入力の分布を指定し、(2)出力の分布を理解することです。それは人間の思考の領域であり、コンピューターはこれまでほとんど役に立たなかった。
まず、あなたの質問に対する単一の答えはありません。シミュレーションを使用できる(またはする必要がある)場合の例は複数あります。以下にいくつか例を示します。次に、「シミュレーション」を定義する方法は複数あるため、答えは少なくとも部分的には選択した定義に依存することに注意してください。
例:
1.あなたはベイジアン統計学者なので、シミュレーションは統計を行うための選択方法です。ベイジアン統計への非シミュレーションベースのアプローチがありますが、ほとんどの場合、シミュレーションを使用します。詳細については、Gelmanの「Bayesian data analysis」ブック(または他の可能なリソース)を確認してください。
2.統計的手法のパフォーマンスを評価します。経験的データから与えられたパラメーターを推定するために設計された統計的検定を設計したとしましょう。今、あなたはそれが本当にあなたがやりたいことをするかどうかをチェックしたい。あなたは、いくつかのデータサンプルを取り、このデータに、あなたのテストを使用することができます-しかし場合は、あなたが統計的検定を必要と知っているテストデータのみを有する微細に動作するかどうか、そしてどのようにあなたは知っていますか..?もちろん、他の統計的検定の推定値と結果を比較できますが、他の検定が正しく推定しない場合はどうなりますか?この場合、シミュレーションを使用できます。あなたができることはあなたが生成することですパラメーターを与えられたいくつかの偽のデータ。次に、推定値が真の値と同じかどうかを確認します(選択したので事前に知っている)。シミュレーションを使用すると、さまざまなシナリオ(サンプルサイズ、データの分布、データのノイズ量など)も確認できます。
3.データがないか、非常に限られています。核戦争の結果はどうなるか知りたいとしましょう。残念ながら(できれば)以前は核戦争がなかったので、データはありません。この場合、あなたは現実について、いくつかの仮定をした後、核戦争が起こった場所がいくつかのサンプルを持っているので、コンピュータは、並列仮想現実を作成してみましょうコンピュータシミュレーションに使用できる可能性の成果を。
4.統計モデルがソフトウェアに適合しないか、複雑です。このアプローチは、たとえば、「回帰およびマルチレベル/階層モデルを使用したデータ分析」でゲルマンとヒルによって提唱されており、シミュレーションベースのベイジアン推定を回帰モデリングの「次のステップ」として説明しています。
5.複雑なプロセスの可能な結果について学びたい。複雑なプロセスの将来の結果を予測したいと想像してください。ただし、問題はプロセスの振る舞いがカオスであり、異なる入力を与えると異なる出力が得られる一方で、可能な入力の数が非常に多いことです。一般的に、これは、第二次世界大戦中に核爆弾に取り組んでいる物理学者と数学者によってモンテカルロシミュレーション法が発明されたためです。シミュレーションでは、さまざまな入力を試し、サンプルを収集して、考えられる結果に関する一般的なアイデアを取得します。
6.データが統計的手法の基準を満たしていません。たとえば、正規分布であるはずの分布が歪んでいます。場合によってはこれは実際には問題ではありませんが、場合によってはそうであるため、ブートストラップなどのシミュレーションベースの方法が考案されました。
7.現実に対して理論モデルをテストする。ソーシャルネットワークを介した流行の広がりなど、何らかのプロセスを説明する理論モデルがあります。モデルを使用していくつかのデータを生成し、シミュレーションが実際のデータに似ているかどうかを比較できます。Lada Adamicは、Courseraクラスでソーシャルネットワーク分析のこのような使用法の例を複数提供しています(こちらのデモをご覧ください)。
8.「仮説0」データを生成します。実際のデータと比較するために、偽の(ランダムな)データを生成します。データに重大な影響や傾向があった場合、ランダムに生成されたデータとは異なるはずです。このアプローチは、ブジャらによって提唱されています。(2009)彼らの論文「探索的データ分析とモデル診断の統計的推論」では、プロットを使用して探索的データ分析と仮説検定を促進する方法を提案しています(これらのアイデアを実装するnullabor Rパッケージのドキュメントも参照)。
TrynnaDoStatの答えの議論はポイントをよく示していると思います:問題が分析的に解決できない場合(たとえば、階層モデルのパラメータの後方分布)、または単に時間を入れるのが面倒な場合は常にシミュレーションを使用しますソリューションを分析的に解決します。
このウェブサイトで私が観察したことに基づいて、「シミュレートするのに十分なイライラ」のしきい値は統計学者によって大きく異なります。@whuberのような人々は、問題を一目見ただけですぐに解決策を見ることができますが、私のような単なる人間は問題を慎重に検討し、シミュレーションルーチンを書いてからハードワークを行う必要があるかもしれません。
大規模なデータセット、複雑なモデル、またはその両方を使用すると、シミュレーションの推定とチェックに膨大な(コンピューター)時間を費やすため、シミュレーションは必ずしも万能薬ではないことに注意してください。1時間の慎重な検討で同じ目標を達成できれば、努力する価値はありません。
シミュレーション(分布など)の閉じたフォームを取得できない場合、またはその何かを取得するための非常にきびきびした高速な方法が必要な場合、シミュレーションが頻繁に実行されます。
たとえば、変数を使用してを説明するロジスティック回帰を実行しているとします。私は、係数の分布を知るのための MLE理論から漸近的に標準です。しかし、2つの推定確率の差に興味があるとしましょう。この機能の正確な分布を導出することは非常に困難(または不可能)かもしれませんが、私はの分布を知っているので、、私はから値をシミュレートすることができますとに差し込み経験分布を取得します。
シミュレーションは、モデルから有用な推定値を取得できるかどうかを確認する優れた方法です。
これを行うには、モデルが暗示する分布に従う偽データを生成/シミュレートします。次に、モデルをそのデータに適合させます。これは理想的なケースです。実際、モデルは真実です。そのため、近似がノイズを含んでいるか不正確である場合、推定手順またはモデル自体のいずれかに問題があることがわかります。
同様に、「間違った」データ生成プロセスを使用してデータをシミュレートし、その偽データを使用して、モデルの仮定に違反した場合に推定がどのような影響を受けるかを評価できます。これはしばしば感度分析と呼ばれます。
これらのポイントは、Timの回答の項目2と8に似ています。また、whuberの回答の手順のややアドホックなバージョンです。
また、シミュレーションは、Andrew Gelmanなどが提唱する予測モデルチェックの実行にも使用されます。これは、予測データをモデルにプラグインし、暗黙の分布から偽の応答データをシミュレートして、シミュレートしたデータが(使用している基準にかかわらず)本物に十分に近いかどうかを確認することです。
これがあることに注意していないだけで近似値を計算すると同じこと。たとえば、回帰モデルでは、近似値は条件付き平均です。回帰モデルで予測チェックを実行するには、各適合値を中心としたガウス分布から1回描画する必要があります。
シミュレーションの最も単純なケース。ローンのデフォルト数の予測モデルがあり、デフォルトのローンの損失モデルもあるとしましょう。ここで、デフォルトと損失の積がデフォルトを与えた場合の合計損失を予測する必要があります。既定値と既定値の損失を単純に乗算して、合計損失の信頼区間を取得することはできません。
理由は、密度がわかっているランダム変数がある場合、製品密度を簡単に取得できるということではないからです。一方、数値間の相関関係がわかっている場合は、相関関係のある数値を簡単にシミュレートして、損失のシミュレートされた分布を取得できます。X 1 ⋅ X 2
このホワイトペーパーには、オペレーショナルリスクの推定に関するこのユースケースのMBAレベルの説明があり、損失の頻度と金額の分布があり、それらを組み合わせて合計損失分布を取得します。