6

組み込みのコピュラ分布 (Clayton、Frank、Gumbel) とベータ周辺分布を使用して、2 つの従属確率変数の合計の分位数のテーブルを作成しようとしています。さまざまな方法を試しNProbabilityてみましたが、FindRoot十分に高速ではありません。私が調査する必要があるコピュラ周辺の組み合わせの例は次のとおりです。

nProbClayton[t_?NumericQ, c_?NumericQ] := 
        NProbability[  x + y <= t, {x, y}  \[Distributed]    
               CopulaDistribution[{"Clayton", c}, {BetaDistribution[8, 2], 
                                                   BetaDistribution[8, 2]}]]

を使用した数値確率の単一評価の場合

nProbClayton[1.9, 1/10] // Timing // Quiet

私は得る

{4.914, 0.939718}

Vista 64bit Core2 Duo T9600 2.80GHz マシン (MMA 8.0.4) 上

合計の分位数を取得するには、次を使用します

FindRoot[nProbClayton[q, 1/10] == 1/100, {q, 1, 0, 2}// Timing // Quiet

いろいろな方法で

( `Method -> Automatic`, `Method -> "Brent"`, `Method -> "Secant"` ) 

1 つの分位点を見つけるのに約 1 分かかります。タイミングは次のとおりです。

{48.781, {q -> 0.918646}}
{50.045, {q -> 0.918646}}
{65.396, {q -> 0.918646}}

他のコピュラ周辺の組み合わせの場合、タイミングはわずかに良くなります。

必要: タイミングを改善するためのトリック/方法。

4

1 に答える 1

7

パラメータを持つクレイトン・パレート・コピュラのCDFは、次のcように計算できます。

cdf[c_] := Module[{c1 = CDF[BetaDistribution[8, 2]]}, 
   (c1[#1]^(-1/c) + c1[#2]^(-1/c) - 1)^(-c) &]

次に、とcdf[c][t1,t2]の確率です。これは、次の式に従って確率を計算できることを意味します。x<=t1y<=t2x+y<=t

prob[t_?NumericQ, c_?NumericQ] := 
   NIntegrate[Derivative[1, 0][cdf[c]][x, t - x], {x, 0, t}]

私のマシンで得られるタイミングは

prob[1.9, .1] // Timing

(* ==> {0.087518, 0.939825} *)

元の投稿とは異なる確率の値が得られることに注意してください。ただし、実行nProbClayton[1.9,0.1]すると収束が遅いという警告が生成されます。これは、元の投稿の結果がオフになっていることを意味する可能性があります。また、元の定義をに変更x+y<=tして計算すると、(警告なしで) 上記と同じ結果が得られます。x+y>tnProbClayton1-nProbClayton[1.9,0.1]0.939825

私が得る合計の分位点

FindRoot[prob[q, .1] == .01, {q, 1, 0, 2}] // Timing

(* ==> {1.19123, {q -> 0.912486}} *)

繰り返しますが、元の投稿とは異なる結果が得られますが、前と同様に、に変更x+y<=tx+y>tて計算すると、上記FindRoot[nProbClayton[q, 1/10] == 1-1/100, {q, 1, 0, 2}]と同じ値が返さqれます。

于 2011-11-12T16:01:27.917 に答える