Wolfram mathematica 拟合自定义累积分布

Wolfram mathematica 拟合自定义累积分布,wolfram-mathematica,distribution,curve-fitting,Wolfram Mathematica,Distribution,Curve Fitting,我正在尝试创建和调整以下CDF: nlDist /: CDF[nlDist[a_, b_, c_, d_], x_] :=(Exp[-a Exp[-x/b] - c Exp[-x/d]]); FindDistributionParameters[{31, 46, 70, 87, 87, 93, 114, 128, 133, 134, 143, 155, 161, 161, 163, 177, 181, 207, 207, 226, 302, 315,319, 347, 347, 362, 3

我正在尝试创建和调整以下CDF:

nlDist /: CDF[nlDist[a_, b_, c_, d_], x_] :=(Exp[-a Exp[-x/b] - c Exp[-x/d]]);

FindDistributionParameters[{31, 46, 70, 87, 87, 93, 114, 128, 133,  134, 143, 155, 161, 161, 163, 177, 181, 207, 207, 226, 302, 315,319, 347, 347, 362, 375, 377, 413, 440, 447, 461, 464, 511, 524,556, 800, 860, 880, 954, 5200, 12000}, nlDist[a, b, c, d]] 
但是我得到了nlDist。。。不是公认的发行版

有人可以修改我的代码来调整CDF吗? 谢谢。

从不抛出错误的意义上说,这个“有效”

dist = ProbabilityDistribution[{"CDF", 
        Exp[-a Exp[-x/b] - c Exp[-x/d]]}, {x, -Infinity, Infinity}, 
        Assumptions -> Element[{a, b, c, d}, Reals]]
 res = FindDistributionParameters[{31, 46, 70, 87, 87, 93, 114,
                                   128, 133, 134, 143, 155, 161, 161,
                                   163, 177, 181, 207, 207, 226, 302, 
                                   315, 319, 347, 347, 362, 375, 377,
                                   413, 440, 447, 461, 464, 511, 524,
                                   556, 800, 860, 880, 954, 5200, 12000}, dist]
请注意,
ProbabilityDistribution
默认情况下需要PDF

最终的拟合基本上失败了。我的直觉是,你没有足够的数据来有意义地拟合这么多的参数

下面是一个简单的工作示例:

指定形式的已知数据分布:

 d0 = ProbabilityDistribution[{"CDF", 
       Exp[- 3 Exp[-x/2]]}, {x, -Infinity, Infinity}];
 data = RandomVariate[d0, 50];
表单的双参数版本:

 dist = ProbabilityDistribution[{"CDF", 
        Exp[-a Exp[-x/b]]}, {x, -Infinity, Infinity},
           Assumptions -> {Element[{a, b}, Reals]}];
找到合适的参数,注意,给出参数的起始值有很大帮助:

 res = FindDistributionParameters[data, dist , {{a, 1}, {b, 1}}]
拟合度接近我们输入的值(3,2):

{a->2.70431,b->2.09066}


可能是我必须传递一些初始值或起始值。事实上,我用来验证结果的程序(AFINS2.0)已经找到了。它首先生成初始参数(“Parameteros iniciales”按钮),然后可以调整最终参数值


我会使用这个程序,但它可以显示信心或预测范围。此外,我还想获得反函数以获得任何分位数值,但我也发现了一些问题。

我发现AFINS 2.0与文章中TCEV的原始函数之间有一个重要区别,二分量极值分布也是在软极值(Geostru)中实现的: 这是原件: Exp[-a Exp[-x/b]-c Exp[-x/d]]

但这是一个非常适合的:

Exp[-a Exp[-x*b]-c Exp[-x*d]]

如果事实上使用概率分布(至少在视觉上),Mathematica会更好地拟合这一点


我没有解释这种差异?

尝试使用概率分布来定义您的地区。如果您无法访问mathematica.stackexchange.com,请访问该网站。这只是因为我正在使用DIST=ProbabilityDistribution[Exp[-a Exp[-x/b]-c Exp[-x/d],[FormalX],assemptions->Element[{a,b,c,d},Reals]],但随后我得到了以下消息:“概率分布。。。当应用FindDistributionParameters[{31,46…},DIST[a,b,c,d]]时,不是一个可识别的分布。乔治,回答得很好。它可以帮助我。然后,我看到在AFINS2.0中,初始值会自动生成。我认为如果Mathematica有一个functino来做这件事,那么参数可以作为初始参数传递给拟合分布。你知道吗,或者有人知道这在Mathematica中是否可行?
 Show[{
      ListPlot[ MapIndexed[ {# , First@#2/Length[data]} &, Sort@data ] ],
      Plot[ CDF[dist /. res]@x , {x, -2, 10} , PlotRange -> All]  }]