如何在 MATLAB 中创建自定义 "Probability Distribution Object"

How to create custom "Probability Distribution Object" in MATLAB

我想在 MATLAB(使用统计工具箱)中加入一些简单的方法来从现有的概率分布中创建新的概率分布。例如:有限混合或复合分布。我的目标是实现与现有概率分布及其周围环境的无缝集成。是否有一些文档或示例应该如何完成?

该文档仅包含对预定义发行版的描述。我找不到关于 "Probability Distribution Object" 的 class 结构或如何编写自定义 "makedist" 函数的任何信息。

注意:如 Mathworks 所示,ProbDist superclass 似乎即将淘汰,将来将完全通过 makedist[=18 处理=]

我知道这是一个老问题,但我需要实施统计工具箱中缺少的一些分布,并努力找到适合我的目的的解决方案,并决定在此处分享。

什么有效:

您可以定义一个从 ProbDist or TruncatableDistribution 继承的 class 并实现这些需要的方法。

这些对象,例如一个模拟偏斜正态分布的对象或者你有什么,然后可以像任何其他对象一样被实例化,并输入到接受 probDist 对象作为参数的 matlab 函数中

pd=SkewNormal('xi',0,'omega',1.0,'alpha',4)
pdf(pd,linspace(0,2,20))
cdf(pd,1)

并且考虑到 truncate() 方法也已实现

truncate(pd,[0,2])

什么不起作用

即使玩了一会儿,我也没有设法让这些自定义发行版 classes 出现在 makedist 的发行版列表中,尽管它允许有路径搜索了其他 classes 实现 ProbDist with

makedist -reset

虽然我没有测试它,但我认为它也不会出现在分布装配器 GUI 的列表中。鉴于您的 class 实现了 fit 函数,它应该能够以编程方式适应分布。