【问题标题】:Making a custom probability distribution to draw random samples from in SciPy [duplicate]制作自定义概率分布以从 SciPy 中抽取随机样本 [重复]
【发布时间】:2013-04-17 22:30:34
【问题描述】:

我希望使用 montecarlo 类型的模拟来总结任意数量的事物的概率分布。我想随机抽取某物的连续分布并将它们添加到其他连续分布的其他随机样本中,最终得到它们组合的概率分布。分布本身是经验性的 - 它们不是函数,而是 P99 = 2.4、P90 = 7.12、P50 = 24.53、P10 = 82.14 等形式(实际上有很多这些点)。分布或多或少是对数正态分布,因此如果有必要,将它们近似为对数正态分布可能会很好。但是我怎么能把它输入到 SciPy 的lognorm function 中呢?或者在 SciPy 或一般的 python 中以其他方式实现?

我希望很清楚我想要做什么。 非常感谢, 亚历克斯

【问题讨论】:

    标签: python statistics scipy montecarlo


    【解决方案1】:

    看起来你所拥有的本质上是概率密度的直方图。然后您可以做的一件事是将inverse transform sampling 与您的经验分布一起使用。

    作为替代方案,如果您期望某个分布的函数形式(lognorm 或其他某种形式),您可以尝试用相应的函数形式拟合数据。

    【讨论】:

    • 嗯,我确实希望它们接近对数正态,你知道我会如何去拟合数据吗?我对如何通过the description page 的两个给定点拟合对数正态分布感到困惑。如果我有一个为 X 的 P90 和一个为 Y 的 P10,我将如何制作适合两者的对数正态分布?
    • 我不确定你所说的两点。我会做什么,首先检查分布是否真的对数正态的。为此,我会使用这样一个事实,即对于正态分布,矩应该以非常精确的方式相关(参见维基百科或数学世界或其他地方),并且如果 X 是对数正态,那么 log X 通常是分布式:只计算log X的几个第一时刻。
    • 好的,但我不是必须将它加载到 scipy 对象中,以便我可以使用上面 lognorm 函数页面中提到的R = lognorm.rvs(s, size=100) 从中获取随机样本吗?
    • 是的。稍后,当您确信您的分布是对数范数并估计了它的参数时,是的,确实如此。
    • 对,但我不知道该怎么做。假设我确实有 lognorm 数据(有时我肯定会),我如何将它们加载到 scipy 对象中?我是否需要计算一个x 和一个s 来加载它,如果是这样,我应该如何计算那些我所拥有的只是我上面提到的数字集?也许是“两点”的影响——当绘制在半对数图上时,累积概率函数显示为一条直线。我知道那条线上的点足够多,可以通过它来拟合公式。但我如何将其导入 SciPy?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 2020-01-10
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    相关资源
    最近更新 更多