Wolfram mathematica 拟合自定义累积分布
我正在尝试创建和调整以下CDF: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
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] }]