我试图创建并调整以下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吗? 感谢。
答案 0 :(得分:0)
这"工作"在不抛出错误的意义上
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}
Show[{
ListPlot[ MapIndexed[ {# , First@#2/Length[data]} &, Sort@data ] ],
Plot[ CDF[dist /. res]@x , {x, -2, 10} , PlotRange -> All] }]
答案 1 :(得分:0)
可能是我必须传递一些初始值或起始值。事实上,我用来验证我的结果的程序(AFINS 2.0)here。它首先生成初始参数(“Parametros iniciales”按钮),然后可以调整最终参数值。
我会使用该程序但它可以显示置信度或预测带。另外我想获得反函数来获得任何分位数值,但我也发现了一些问题。
答案 2 :(得分:0)
我在AFINS 2.0和文章双组分极值分布的TCEV的原始功能之间存在重要区别,这也是在软Extreme(Geostru)中实现的: 这是原作: Exp [-a Exp [-x / b] - c Exp [-x / d]]
但这是合适的:
Exp [-a Exp [-x * b] - c Exp [-x * d]]
如果实际使用ProbabilityDistribution(至少在视觉上),Mathematica可以更好地拟合。
我没有解释这种差异¿?