Распределение truncexpon
имеет три параметра: форму b
, местоположение loc
и масштаб scale
. Поддержка дистрибутива: [x1, x2]
, где x1 = loc
и x2 = shape*scale + loc
. Решите последнее уравнение для shape
, чтобы получить shape = (x2 - x1)/scale
. Мы выберем параметр scale
, чтобы среднее значение распределения было равно 4. Для этого мы можем использовать scipy.optimize.fsolve
, примененный к функции шкалы, которая равна нулю, когда truncexpon.mean((x2 - x1)/scale, loc, scale)
равно 4 .
Вот короткий сценарий для демонстрации:
import numpy as np
from scipy.optimize import fsolve
from scipy.stats import truncexpon
def func(scale, desired_mean, x1, x2):
return truncexpon.mean((x2 - x1)/scale, loc=x1, scale=scale) - desired_mean
x1 = 1
x2 = 9
desired_mean = 4.0
# Numerically solve for the scale parameter of the truncexpon distribution
# with support [x1, x2] for which the expected mean is desired_mean.
scale_guess = 2.0
scale = fsolve(func, scale_guess, args=(desired_mean, x1, x2))[0]
# This is the shape parameter of the desired truncexpon distribution.
shape = (x2 - x1)/scale
print("Expected mean of the distribution is %6.3f" %
(truncexpon.mean(shape, loc=x1, scale=scale),))
print("Expected standard deviation of the distribution is %6.3f" %
(truncexpon.std(shape, loc=x1, scale=scale),))
# Generate a sample of size 8, and compute its mean.
sample = truncexpon.rvs(shape, loc=x1, scale=scale, size=8)
print("Mean of the sample of size %d is %6.3f" %
(len(sample), sample.mean(),))
bigsample = truncexpon.rvs(shape, loc=x1, scale=scale, size=100000)
print("Mean of the sample of size %d is %6.3f" %
(len(bigsample), bigsample.mean(),))
Типичный вывод:
Expected mean of the distribution is 4.000
Expected standard deviation of the distribution is 2.178
Mean of the sample of size 8 is 4.694
Mean of the sample of size 100000 is 4.002