【问题标题】:Can one extend the functionality of PDF, CDF, FindDistributionParameters etc in Mathematica?可以在 Mathematica 中扩展 PDF、CDF、FindDistributionParameters 等的功能吗?
【发布时间】:2011-07-31 19:20:33
【问题描述】:

我已经开始使用新的 Mathematica 统计和数据分析功能进行越来越多的工作。

我参加了周二的“使用 Mathematica 进行统计和数据分析”在线研讨会(很棒的演讲,我强烈推荐它),但我遇到了一些问题,我希望这个论坛上的人可以花点时间考虑一下。

我创建了一个相当广泛的笔记本来简化我的数据分析,称之为“AnalysisNotebook”。它输出一系列广泛的图表和数据,包括:直方图、PDF 和CDF 图、QQ 图、用于研究尾部拟合的图、假设检验数据等。

只要我继续使用 Mathematica 的现成发行版,它就可以很好地工作,并且对于简单的 MixtureDistributions 甚至 ParameterMixtureDistributions 可能工作得很好,因为这些 Mathematica 可能会找出时刻和 PDF 和CDF、FindDistributionParameters 等将混合物分解成碎片。

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

LogNormalNormalDistribution[Gamma_, Sigma_, Delta_] := 
  TransformedDistribution[ u*v + Delta, 
   {Distributed[ u, LogNormalDistribution[ Log[Gamma], Sigma] ],  
    Distributed[ v, NormalDistribution[0, Sqrt[2]]}
   ];

我想按照这种转换分布的方式做很多事情。我很欣赏这样的挑战(其中一些是我在这个论坛上学到的——谢谢大家):

  • 他们可能没有封闭的表格;
  • PDF 和 CDF 计算可能需要插值、变通方法或自定义方法;
  • FindDistributionParameters 和 DistributionFitTest 不知道如何处理这种事情。

基本上,人们想要使用的标准东西真的不/不能工作,而且人们不能公平地期望他们这样做。

可以编写自定义代码来做这些事情(同样,这个论坛对我有很大帮助),但随后将自定义替代方案的所有复杂性合并到我的 AnalysisNotebook 中,这似乎很愚蠢。 AnalysisNotebook 会随着每个新的自定义函数而增长。

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

为了澄清我的意思,类似于如何定义函数的版本来做不同的事情(使用不同数量的参数或其他类型的态势感知),Mathematica 必须为使用分布的函数做类似的事情作为参数来了解将哪种解决方案用于特定的内置发行版。我希望能够在该级别添加或扩展PDF[]、CDF[]、FindDistributionParameters[]、DistributionFitTest[] 和相关函数的功能——为自定义发行版及其所需的支持代码添加功能,其中内置函数可以/可以无缝调用。

也许只是一个梦想,但如果有人知道我可以解决这个问题的任何方法,我将非常感谢您的反馈。

EDIT-我遇到的问题类型:

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

r1 = RandomVariate[LogNormalNormalDistribution[0.01, 0.4, 0.0003], 1000];
FindDistributionParameters[r1, LogNormalNormalDistribution[gamma, sigma, delta]]

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

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

这本身就可以正常工作,但与其他所有内容都不能很好地配合。

【问题讨论】:

  • 您在使用TransformedDistribution 时遇到了哪些问题? (我找到了你以前的问题,也许可以用一个简短的摘要来引用它们......)此外,笔记本中使用的任何特殊符号,如\[Gamma],都会在我写它的时候出现,所以为了更容易阅读你可能希望在您点击帖子之前从任何复制的代码中删除标记。
  • 感谢您清理代码。至于我遇到的那种问题:虽然创建随机变量工作正常: r1 = RandomVariate[LogNormalNormalDistribution[0.01, 0.4, 0.0003], 1000]; ListLinePlot[%, PlotRange -> All] 当尝试 FindDistributionParameters[r1, LogNormalNormalDistribution[gamma, sigma, delta]] 代码永远不会完成执行。
  • 继续...为此我写了(在一些帮助下)myLNNFit[data_] := Module[{costFunction, moment}, moment=Moment[EmpiricalDistribution[data], #] & /@ 范围[5]; costFunction[gamma_, sigma_, delta_] = Sqrt@Total[((Moment[LogNormalNormalDistribution[gamma, sigma, delta], #] & /@ Range[5]) - 矩)^2]; NMinimize[{costFunction[gamma, sigma, delta], gamma > 0, sigma > 0}, {gamma, sigma, delta}] ] 这本身可以正常工作,但不能很好地与其他所有内容一起使用。
  • 你为什么不用信息更新你的问题?它的格式更好。

标签: statistics wolfram-mathematica distribution


【解决方案1】:

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

PDF[TriangleDistribution[x_]] := TriangleWave[x]

这行得通:

TriangleDistribution /: PDF[TriangleDistribution[x_]] := TriangleWave[x]

现在你可以这样做了:

Plot[PDF[TriangleDistribution[x]], {x, 0, 1}]

【讨论】:

  • 这看起来非常有趣和有用,可能会给我我需要的一切。一旦我有机会尝试它,我就会重新认识到这是一个答案。谢谢!
【解决方案2】:

亲爱的 Jarga,Mathematica 文档中的以下 tutorial 现在描述了您将为您的分布启用随机数生成,请查看本文档底部附近的“定义分布生成器”部分。

这与乔的建议非常相似。您需要定义

In[1]:= Random`DistributionVector[
  LogNormalNormalDistribution[gamma_, sigma_, delta_], len_, prec_] ^:=
  RandomVariate[LogNormalDistribution[Log[gamma], sigma], len, 
    WorkingPrecision -> prec]*
   RandomVariate[NormalDistribution[0, Sqrt[2]], len, 
    WorkingPrecision -> prec] + delta

In[2]:= RandomVariate[
 LogNormalNormalDistribution[0.01, 0.4, 0.0003], 5]

Out[2]= {-0.0013684, 0.00400979, 0.00960139, 0.00524952, 0.012049}

我不知道将新分布插入估计框架的任何记录方法。如果为您的发行版定义了 CDF 并且可以正常工作,那么假设检验应该可以工作。

【讨论】:

    猜你喜欢
    • 2012-02-15
    • 2015-02-23
    • 2023-03-28
    • 2023-03-10
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 2013-03-06
    • 2013-01-06
    相关资源
    最近更新 更多