R 或 Python - 模拟特定的理论多峰分布

R or Python - simulate specific theoretical multimodal distribution

我有属于生物数据的不同分布。

这些分布应遵循单峰分布 (mean = 0.5)、双峰分布(0.330.66)或三峰分布 (0.25, 0.5, 0.75) .

我想要的是模拟这些 "theoretical" 分布,以便将我从生物数据中获得的分布与 Python 或 R?

进行比较

此外,我想知道将使用哪个参数来比较它们... 形状、标准差、偏度和峰度?

似乎遵循单峰分布的数据通常可以建模为一个或两个高斯分布的混合。同样,似乎遵循双峰分布的数据有时最好建模为两个或三个的混合。如果您仍然拥有创建直方图的原始数据,那么您可以使用 sklearn 的工具来识别数据的 'best' 混合高斯分布。 http://www.astroml.org/book_figures/chapter4/fig_GMM_1D.html 中的代码说明了如何操作。一旦有了这样的模型,就可以使用该代码中显示的技术来生成伪随机样本。

我看到代码是:

gmm = GMM(3, n_iter=1)
gmm.means_ = np.array([[-1], [0], [3]])
gmm.covars_ = np.array([[1.5], [1], [0.5]]) ** 2
gmm.weights_ = np.array([0.3, 0.5, 0.2])

因此,它需要说明混合中高斯分布的数量,以及它们的均值、协方差矩阵和一组权重,这大概是每个高斯分布被采样的相对次数。

编辑: 我试图猜测为什么我投了反对票,以便我可以改进这个答案。可能是因为我包含了一个解释不充分的 link。

想法是多次调用 GMM,一旦参数设置如上,混合中有 1 到(比方说)4 个高斯分布,然后在给定样本的情况下比较这些模型可用的质量度量, 称为 aicbic 以判断最佳数.

如果答案有其他问题,请说出来!