gpt4 book ai didi

python - 在 Python 中计算分布中随机变量的概率

转载 作者:太空狗 更新时间:2023-10-29 21:38:02 25 4
gpt4 key购买 nike

给定一个定义 normal distribution 的均值和标准差,你将如何计算纯 Python 中的以下概率(即没有 Numpy/Scipy 或其他不在标准库中的包)?

  1. 随机变量 r 的概率,其中 r < x 或 r <= x。
  2. 随机变量 r 的概率,其中 r > x 或 r >= x。
  3. 随机变量 r 的概率,其中 x > r > y。

我找到了一些库,比如 Pgnumerics ,它提供了计算这些函数的函数,但我不清楚底层的数学原理。

编辑:为了表明这不是家庭作业,下面发布的是我的 Python<=2.6 工作代码,尽管我不确定它是否正确处理了边界条件。

from math import *
import unittest

def erfcc(x):
"""
Complementary error function.
"""
z = abs(x)
t = 1. / (1. + 0.5*z)
r = t * exp(-z*z-1.26551223+t*(1.00002368+t*(.37409196+
t*(.09678418+t*(-.18628806+t*(.27886807+
t*(-1.13520398+t*(1.48851587+t*(-.82215223+
t*.17087277)))))))))
if (x >= 0.):
return r
else:
return 2. - r

def normcdf(x, mu, sigma):
t = x-mu;
y = 0.5*erfcc(-t/(sigma*sqrt(2.0)));
if y>1.0:
y = 1.0;
return y

def normpdf(x, mu, sigma):
u = (x-mu)/abs(sigma)
y = (1/(sqrt(2*pi)*abs(sigma)))*exp(-u*u/2)
return y

def normdist(x, mu, sigma, f):
if f:
y = normcdf(x,mu,sigma)
else:
y = normpdf(x,mu,sigma)
return y

def normrange(x1, x2, mu, sigma, f=True):
"""
Calculates probability of random variable falling between two points.
"""
p1 = normdist(x1, mu, sigma, f)
p2 = normdist(x2, mu, sigma, f)
return abs(p1-p2)

最佳答案

所有这些都非常相似:如果您可以使用函数 cdf(x) 计算 #1,那么 #2 的解决方案就是 1 - cdf(x),对于 #3,它是 cdf(x) - cdf(y)

由于 Python 包含自 2.7 版以来内置的 (gauss) 误差函数,您可以使用 the article you linked to 中的方程计算正态分布的 cdf 来实现此目的:

import math
print 0.5 * (1 + math.erf((x - mean)/math.sqrt(2 * standard_dev**2)))

其中 mean 是平均值,standard_dev 是标准差。

鉴于文章中的信息,您提出的问题似乎相对简单,因此有些注释:

  • 随机变量(例如 X)的 CDF 是 X 位于无穷大和某个极限(例如 x(小写))之间的概率。 CDF 是连续分布的 pdf 的积分。 cdf 正是您为 #1 描述的内容,您希望一些正态分布的 RV 介于 -infinity 和 x (<= x) 之间。
  • < 和 <= 以及 > 和 >= 对于连续随机变量是相同的,因为 rv 是任何单点的概率是 0。所以是否包含 x 本身并不重要计算连续分布的概率。
  • 概率总和为 1,如果它不是 < x 则它 >= x 所以如果您有 cdf(x)。那么 1 - cdf(x) 就是随机变量 X >= x 的概率。由于 >= 对于连续随机变量等价于 >,这也是概率 X > x。

关于python - 在 Python 中计算分布中随机变量的概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9448246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com