适合自定义累积分布

时间:2014-07-22 19:16:46

标签: 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, 375, 377, 413, 440, 447, 461, 464, 511, 524,556, 800, 860, 880, 954, 5200, 12000}, nlDist[a, b, c, d]] 

但我得到那个nlDist ......不是公认的发行版。

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

3 个答案:

答案 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]  }]

enter image description here

答案 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可以更好地拟合。

我没有解释这种差异¿?