【发布时间】:2018-09-07 04:20:45
【问题描述】:
是否可以在 python 中生成具有给定期望值的截断正态分布?我知道 scipy.stats.truncnorm 可以给出一个截断的正态分布,它将 original 正态分布的平均值作为参数,但我想创建一个截断的正态分布,使得截断分布是一个特定的值。这可能吗?
【问题讨论】:
标签: python scipy statistics probability distribution
是否可以在 python 中生成具有给定期望值的截断正态分布?我知道 scipy.stats.truncnorm 可以给出一个截断的正态分布,它将 original 正态分布的平均值作为参数,但我想创建一个截断的正态分布,使得截断分布是一个特定的值。这可能吗?
【问题讨论】:
标签: python scipy statistics probability distribution
您可以在 mu 和均值之间进行转换,有关详细信息,请参阅 https://en.wikipedia.org/wiki/Truncated_normal_distribution,
意思是有简单的表达,要得到mu,你必须解决非线性方程
import scipy
from scipy.stats import norm
def get_mean(mu, sigma, a, b):
alpha = (a - mu)/sigma
beta = (b - mu)/sigma
Z = norm.cdf(beta) - norm.cdf(alpha)
return mu + (norm.pdf(alpha) - norm.pdf(beta)) / Z
def f(x, mean, sigma, a, b):
return mean - get_mean(x, sigma, a, b)
def get_mu(mean, sigma, a, b):
mu = scipy.optimize.brentq(f, a, b, args=(mean, sigma, a, b))
return mu
a = -2.0
b = 3.0
sigma = 1.0
mu = 0.0
mean = get_mean(mu, sigma, a, b)
print(mean)
mu = get_mu(mean, sigma, a, b)
print(mu)
从期望的平均值中得到mu 后,您可以将其放入采样程序中
【讨论】: