【问题标题】:Sample from tail of normal distribution in PythonPython中正态分布尾部的样本
【发布时间】:2015-03-04 14:56:16
【问题描述】:

我正在编写一些模拟,我发现我需要对正态分布的尾部进行过采样,以便为特定变量获得足够低值的样本。还有比这更好的吗?

from scipy.stats import norm, uniform
tail_high = .01
n_samples = 1000
tail_rvs = norm.ppf(uniform.rvs(0, tail_high, n_samples))

【问题讨论】:

  • 理想情况下,最好的方法是从截断的正态分布en.wikipedia.org/wiki/Truncated_normal_distribution 中进行采样,该分布在 scipy 中实现。我不知道它当前的实现是否针对尾部采样进行了优化。另一种可能性是您“做错了”,并且您实际上想从信息量较少的分布中进行采样(可能像柯西分布或具有更多方差的正态分布)。

标签: python scipy simulation


【解决方案1】:

假设您确实需要从正态分布中采样,您可能可以 DIY http://en.m.wikipedia.org/wiki/Marsaglia_polar_methodhttp://en.m.wikipedia.org/wiki/Box–Muller_transform

目前在 scipy 中实现的 truncnorm 存在一个未解决的问题 https://github.com/scipy/scipy/issues/2477。原始票证提供了几个替代实现的链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 2018-05-22
    • 2021-07-25
    相关资源
    最近更新 更多