gpt4 book ai didi

performance - 使用 copula 分布的总和分位数太慢

转载 作者:行者123 更新时间:2023-12-04 14:49:55 24 4
gpt4 key购买 nike

尝试使用带有 Beta 边际的内置 copula 分布(Clayton、Frank、Gumbel)为两个相关随机变量之和的分位数创建一个表。试过 NProbabilityFindRoot用各种方法——不够快。
我需要探索的 copula-marginal 组合的一个例子如下:

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 64 位 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"` ) 

大约需要一分钟才能找到一个分位数:时间是
{48.781, {q -> 0.918646}}
{50.045, {q -> 0.918646}}
{65.396, {q -> 0.918646}}

对于其他 copula-marginal 组合,时序稍微好一些。

需要:任何改善计时的技巧/方法。

最佳答案

具有参数 c 的 Clayton-Pareto copula 的 CDF可以根据

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

然后, cdf[c][t1,t2]x<=t1 的概率和 y<=t2 .这意味着您可以计算出 x+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<=tx+y>tnProbClayton 的原始定义中并计算 1-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 返回相同的值如上。

关于performance - 使用 copula 分布的总和分位数太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8100628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com