可以在Mathematica中扩展PDF,CDF,FindDistributionParameters等功能吗?

Jag*_*gra 3 statistics wolfram-mathematica distribution

我开始使用新的Mathematica统计和数据分析功能做越来越多的工作.

我参加了周二的"Mathematica统计与数据分析"在线研讨会(精彩的演讲,我强烈推荐),但我遇到了一些问题,我希望这个论坛上有人可能会有一些时间考虑.

我已经创建了一个相当广泛的笔记本来简化我的数据分析,称之为"AnalysisNotebook".它输出一系列广泛的图表和数据,包括:直方图,PDF以及CDF图,QQ图,图研究尾配合,假设检验数据等

这只要我留的伟大工程与数学的现成的货架分布和可能工作正常进行简单的MixtureDistributions乃至ParameterMixtureDistributionS作为这些Mathematica可以容易弄清楚的时刻,PDF并且CDF,FindDistributionParameters通过打破混合物分解成块,等等.

当我尝试定义和使用一个简单的TransformedDistributionie 时遇到麻烦,

LogNormalNormalDistribution[Gamma_, Sigma_, Delta_] := 
  TransformedDistribution[ u*v + Delta, 
   {Distributed[ u, LogNormalDistribution[ Log[Gamma], Sigma] ],  
    Distributed[ v, NormalDistribution[0, Sqrt[2]]}
   ];
Run Code Online (Sandbox Code Playgroud)

我想在这样的变形分布中做很多事情.我很欣赏这样的挑战(我在这个论坛上学到了一些 - 谢谢大家):

  • 他们可能没有封闭的表格;
  • PDF并且CDF计算可能需要插值,解决方法或自定义方法;
  • FindDistributionParameters并且DistributionFitTest不知道如何处理这种事情.

基本上,人们想要使用的标准事物实际上不会/不能工作,人们不能指望他们这样做.

人们可以编写自定义代码来做这些事情(这个论坛再次帮助了我很多),但是然后将自定义替代品的所有复杂性结合到我的AnalysisNotebook中,看起来很愚蠢.AnalysisNotebook会随着每个新的自定义函数而增长.

这将帮助我极大这项工作,如果我能写的我的自定义版本PDF,CDF,FindDistributionParameters,DistributionFitTest和其他任何我可能需要的是更普遍的内置版本只会无缝调用标准.这样,像我的AnalysisNotebook这样的东西可以保持简单和整洁,这是我工具箱中的标准组件.如果你理解我的意思,我可以把时间花在数学而不是管道上.

为了澄清我的意思,类似于如何定义一个函数的版本来做不同的事情(使用不同数量的参数或其他类型的态势感知),Mathematica必须为使用分布作为参数的函数做类似的事情.知道用于特定内置分发的解决方案.我想补充或扩展的功能的能力PDF[],CDF[],FindDistributionParameters[],DistributionFitTest[]在该级别和相关职能-为自定义分布及其配套所需的代码,内置的功能会/可以无缝调用添加功能.

也许只是一个梦想,但如果有人知道我可以采取任何方式,我非常感谢您的反馈.

编辑 -我遇到的那种问题:

以下代码永远不会完成执行

r1 = RandomVariate[LogNormalNormalDistribution[0.01, 0.4, 0.0003], 1000];
FindDistributionParameters[r1, LogNormalNormalDistribution[gamma, sigma, delta]]
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我编写了以下函数

myLNNFit[data_] := Module[{costFunction, moments}, 
    moments = Moment[EmpiricalDistribution[data], #] & /@ Range[5]; 
    costFunction[gamma_, sigma_, delta_] = 
    Sqrt@Total[((Moment[LogNormalNormalDistribution[gamma, sigma, delta],#]&/@Range[5]) - moments)^2]; 
    NMinimize[{costFunction[gamma, sigma, delta], gamma > 0, sigma > 0}, {gamma, sigma, delta}] ]
Run Code Online (Sandbox Code Playgroud)

这本身就可以正常工作,但是其他一切都不能很好地发挥作用.

joe*_*lte 8

您可以使用它TagSet来指定要将定义关联到的符号.这使您可以定义PDF分布,即使PDFProtected.这是一个简单的例子.请注意,这TriangleWave是一个内置符号,TriangleDistribution是我刚刚编写的.这失败了:

PDF[TriangleDistribution[x_]] := TriangleWave[x]
Run Code Online (Sandbox Code Playgroud)

这有效:

TriangleDistribution /: PDF[TriangleDistribution[x_]] := TriangleWave[x]
Run Code Online (Sandbox Code Playgroud)

现在你可以这样做:

Plot[PDF[TriangleDistribution[x]], {x, 0, 1}]
Run Code Online (Sandbox Code Playgroud)