Я был бы очень признателен, если бы кто-нибудь мог помочь мне понять, где я иду не так. У меня есть некоторые данные, описывающие распределения вероятностей. Данные предоставляют мне значения для P10, P50 и P90. Я также знаю, что распределение является логнормальным.
Я читал, что для случайной величины X, которая нормально распределена по журналам, тогда Y = ln (X) имеет нормальное распределение - например, Википедия ( https://en.wikipedia.org/wiki/Log-normal_distribution).
Однако, когда я пытаюсь понять это, используя scipystats и numpy, я не могу понять, что это правда. Поскольку я знаю, что это правда, и я знаю, что нет никаких проблем с простыми функциями, которые я использую в этих python библиотеках, я знаю, что где-то есть пробел в моем понимании. Я просто, по жизни, не вижу, что мне не хватает ...
Код, который я использую:
# build a lognormal distribution with scipystats (ss):
# set parameters (based on the standard normal distribution mu=0 and sigma=1:
s, mu, sd, size = 0.5,0,1,100000
# save the distribution:
X = ss.lognorm.rvs(s,loc=mu,scale=sd,size=size)
# convert to normal distribution (i.e. calc the natural log of X):
Y = np.log(X)
# Check if Y is normal using ratio between p90-p50 and p50-p10 - should be 1:
p10,p50,p90 = np.percentile(Y,[10,50,90])
(p90-p50)/(p50-p10)
Выше возвращается 0,9932 - или что-то еще довольно близко к 1. Пока все хорошо. Я могу варьировать s и масштабировать сколько угодно (или пробовал до сих пор), и нормальный тест всегда приближается к 1. Проблема возникает, если я меняю среднее (mu, lo c):
# build a lognormal distribution with scipystats (ss):
# set parameters (normal distribution mu=100 and sigma=10:
s, mu, sd, size = 0.5,100,10,100000
# save the distribution:
X = ss.lognorm.rvs(s,loc=mu,scale=sd,size=size)
# convert to normal distribution (i.e. calc the natural log of X):
Y = np.log(X)
# Check if Y is normal using ratio between p90-p50 and p50-p10 - should be 1:
p10,p50,p90 = np.percentile(Y,[10,50,90])
(p90-p50)/(p50-p10)
В этом случае ответ, который я получаю, составляет около 1,8 - то есть не нормальное распределение. Как я уже сказал, я явно что-то не так понимаю, но я не вижу, что это такое.
В итоге, если я использую ss.lognorm.rvs
, чтобы вычислить серию логарифмически распределенных случайных величин со значением lo c чего-либо, кроме 0, и затем используйте np.log
, чтобы получить натуральный логарифм случайных переменных, тогда это новое распределение обычно не распространяется, что, на первый взгляд, нарушает правило, описанное в верхней части статьи в Википедии. в верхней части этого вопроса!
Я очень благодарен за любую помощь, которую мне может дать любой человек - я просто хочу быть уверен, что понимаю, как связать логнормальные данные с нормальной кривой!