Как рассчитать cdf линейного преобразования нормального распределения в python?

У меня есть PDF-файл, который представляет собой линейное преобразование нормального распределения:

T = 0.5A + 0.5B

Mean_A = 276

Standard Deviation_A = 6.5

Mean_B = 293

Standard Deviation_A = 6

Как рассчитать вероятность того, что T находится между 281 и 291 в Python?

Я пробовал следующий код:

mu1 = 276

sigma1 = 6.5

mu2 = 293

sigma2 = 6

normalized = 0.5 * scipy.stats.norm.pdf(x, loc = mu1, scale = sigma1) + 0.5 * scipy.stats.norm.pdf(x, loc = mu2, scale = sigma2)

print(normalized.cdf(291) - normalized.cdf(281))

Но это привело к ошибке.

Я также пытался рассчитать CDF T ~ N(284.5, 19.5625) и

print(norm.cdf(291 - 284.5/4.422952)) и т. д., но это привело к неправильному ответу.

Любая помощь приветствуется!


person b3llegsd    schedule 23.11.2019    source источник
comment
Вы предполагаете, что две нормальные случайные переменные A и B независимы? В общем случае ответ будет зависеть от ковариации двух случайных величин.   -  person Lucas Roberts    schedule 24.11.2019
comment
Возможно, я ошибаюсь, называя это линейным преобразованием, но нам в основном дали, что распределение следует приведенной выше формуле, а именно: 0,5 * scipy.stats.norm.pdf(x, loc = mu1, scale = sigma1) + 0,5 * scipy.stats.norm.pdf(x, loc = mu2, масштаб = sigma2). Я также пытался рассчитать вероятность, используя T ~ N, где E (T) = 276 (0,5) + 293 (0,5) и Var (T) = (0,5 ^ 2) (6,5 ^ 2) + (0,5 ^ 2) (6^2) и это тоже был неверный ответ   -  person b3llegsd    schedule 24.11.2019
comment
Предполагая независимость, последний подход хорош (см. ответ ниже), но вы не можете работать с PDF-файлами так, как предлагает ваш псевдокод.   -  person fuglede    schedule 24.11.2019


Ответы (1)


Ваш комментарий предполагает, что вы предполагаете, что переменные независимы, поскольку в этом случае среднее значение и дисперсия суммы указаны так, как вы дали.

Затем вы можете определить сумму через

normalized = scipy.stats.norm(0.5*mu1 + 0.5*mu2, np.sqrt((0.5*sigma1)**2 + (0.5*sigma2)**2))

и, в частности, получите желаемое, вероятно, используя cdf, как вы это сделали:

In [27]: normalized.cdf(291) - normalized.cdf(281)                                              
Out[27]: 0.7147892127602181

Чтобы убедиться, что этот результат соответствует ожиданиям, мы можем запустить быструю симуляцию:

In [31]: N = 10**7                                                                               

In [32]: rvs = 0.5*np.random.normal(mu1, sigma1, size=N) + 0.5*np.random.normal(mu2, sigma2, size=N)     

In [33]: ((rvs > 281) & (rvs < 291)).mean()                                                              
Out[33]: 0.7148597

Действительно, это разумное приближение к точному результату выше.

Изменить: согласно комментарию к этому ответу, ОП на самом деле интересует случайная величина, PDF-файл которой

PX(x)=[1/(√2πVar1)^e^−(x−µ1)^2/2Var1]∗0,5+[1/(√2πVar2)^e^−(x−µ1)^2/2Var2] *0,5

Примечательно, что это не линейная комбинация нормально распределенных переменных (и сама по себе она не является нормально распределенной переменной, если на то пошло), поэтому, если она формулируется как таковая в любом заданном вам упражнении, то они ве неправильно сформулировал.

Однако этот случай еще проще: интегрирование PDF от 281 до 291 может быть выполнено путем интегрирования каждого слагаемого, которое, в свою очередь, представляет собой не что иное, как PDF нормального распределения, так что вы можете действовать, как указано выше:

In [43]: n1 = scipy.stats.norm(mu1, sigma1)                                                                       

In [44]: n2 = scipy.stats.norm(mu2, sigma2)                                                                       

In [45]: .5*(n1.cdf(291) - n1.cdf(281) + n2.cdf(291) - n2.cdf(281))                                      
Out[45]: 0.2785306219161424
person fuglede    schedule 24.11.2019
comment
Оба этих ответа были помечены как неправильные :(. Я попробовал второй ответ во время моего первого раза, и он также был помечен как неверный. В частности, приведенный PDF был PX (x) = [1 / (√ 2πVar1) ^ e ^- (x−µ1)^2/2Var1]∗0,5+[1/(√2πVar2)^e^−(x−µ1)^2/2Var2]∗0,5 ,µ1=276,σ1=6,5,µ2=293, σ2 = 6K. Извините, если это трудно прочитать, но мне кажется, что нормальное распределение Гаусса умножается на 0,5 два раза. Не знаю, что я делаю неправильно, заранее спасибо! - person b3llegsd; 24.11.2019
comment
Достаточно справедливо, но тогда это не 0,5A + 0,5B. Если вы интегрируете этот PDF, вы просто получите сумму интегралов для каждого отдельного гауссиана, то есть около 0,2785306219161424. - person fuglede; 24.11.2019
comment
Спасибо!! Как вы это делаете в Python? - person b3llegsd; 25.11.2019
comment
@b3llegsd b3llegsd Я также обновил ответ. - person fuglede; 25.11.2019
comment
Большой; если вы нашли ответ полезным, вы можете отметить его как принятый. - person fuglede; 26.11.2019