我已经开始做越来越多的工作,新的数学统计和数据分析功能。
我参加了周二的“数理统计与数据分析”在线研讨会(我非常推荐),但我遇到了一些问题,我希望这个论坛上的人能有一些时间来考虑。
我创造了一个相当广泛的笔记本来简化我的数据分析,称之为"AnalysisNotebook“。它输出一系列广泛的图表和数据,包括:直方图、PDF和CDF图、Q-Q图、研究尾拟合的图、假设检验数据等。
只要我继续使用数学的现成分布,并且可能对简单的MixtureDistributions甚至ParameterMixtureDistributions都能很好地工作,那么这个方法就能很好地工作,因为对于这些数学来说,它很可能通过分解混合物来计算出矩和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[]和相关函数的功能--为自定义发行版及其所需的支持代码添加功能,内置函数将/可以无缝地调用这些功能。
也许只是一个梦,但如果有人知道我有什么办法可以做到这一点,我将非常感谢你的反馈。
编辑-我遇到的问题:
以下代码永远不会完成执行
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}] ]这本身就工作得很好,但并不能很好地处理其他事情。
发布于 2011-04-07 15:40:47
可以使用TagSet指定要与定义关联的符号。这允许您定义发行版的PDF,即使PDF是Protected。下面是一个微不足道的例子。请注意,TriangleWave是一个内置的符号,而TriangleDistribution是我刚刚编造的东西。这是失败的:
PDF[TriangleDistribution[x_]] := TriangleWave[x]这样做是可行的:
TriangleDistribution /: PDF[TriangleDistribution[x_]] := TriangleWave[x]现在你可以:
Plot[PDF[TriangleDistribution[x]], {x, 0, 1}]发布于 2011-04-08 13:14:37
亲爱的Jarga,数学文档中的以下教程描述了现在您将为您的分发启用随机数生成,查看本文档底部附近的“定义分布式生成器”一节。
这与乔的建议很相似。你需要定义
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}我不知道有任何有记录的方式在估计框架中插入一个新的发行版。假设检验应该是有效的,如果if是为您的分布定义的,并且工作正常。
https://stackoverflow.com/questions/5583456
复制相似问题