2016-08-04 2 views
3

Рассмотрите сумму n Квадратные нормальные случайные переменные S = sum (Z^2(mu, sig^2)). Согласно this question, S/sig^2 имеет noncentral chi-squared distribution со степенями свободы = n и параметр нецентральности = n*mu^2.Scipy Non-central Chi-Squared Случайная переменная

Однако сравнение генерации N этих переменных S путем суммирования в квадрат нормалей с генерируя N нецентральные хи-квадрат случайных величин непосредственно с помощью scipy.ncx2:

import numpy as np 
from scipy.stats import ncx2, chi2 
import matplotlib.pyplot as plt 

n = 1000 # number of normals in sum 
N_MC = 100000 # number of trials 

mu = 0.05 
sig = 0.3 

### Generate sums of squared normals ### 
Z = np.random.normal(loc=mu, scale=sig, size=(N_MC, n)) 
S = np.sum(Z**2, axis=1) 

### Generate non-central chi2 RVs directly ### 
dof = n 
non_centrality = n*mu**2 
NCX2 = sig**2 * ncx2.rvs(dof, non_centrality, size=N_MC) 
# NCX2 = sig**2 * chi2.rvs(dof, size=N_MC) # for mu = 0.0 

### Plot histos ### 
fig, ax = plt.subplots() 
ax.hist(S, bins=50, label='S') 
ax.hist(NCX2, bins=50, label='NCX2', alpha=0.7) 
ax.legend() 
plt.show() 

Это приводит к гистограмм comparison of distros

Я считаю, математика правильная; может ли расхождение быть ошибкой в ​​реализации ncx2? Установка mu = 0 и использование scipy.chi2 выглядит намного лучше: distros good

ответ

2

Проблема заключается во втором предложении вопроса: "S/sig^2 имеет нецентральное хи-квадрат распределение с степенями свободы = n и параметра нецентральности = n*mu^2. " Этот параметр нецентральности неверен. Это должно быть n*(mu/sig)^2.

Стандартное определение нецентрального хи-квадратного распределения состоит в том, что оно представляет собой сумму квадратов нормальных вариаций, имеющих среднее значение mu и стандартное отклонение . Вы вычисляете S, используя обычные варианты со стандартным отклонением sig. Давайте напишем это распределение как N(mu, sig**2). Используя местоположение масштаб свойства нормального распределения, мы имеем

N(mu, sig**2) = mu + sig*N(0, 1) = sig*(mu/sig + N(0,1)) = sig*N(mu/sig, 1) 

Так суммирование квадратов случайных величин из N(mu, sig**2) эквивалентно суммирования квадратов sig*N(mu/sig, 1). Это дает sig**2 раз нецентральную хи-квадратную вариацию с нецентральностью mu/sig.

Если вы измените строку, где non_centrality вычисляется в

non_centrality = n*(mu/sig)**2 

гистограммы выстраиваются, как вы ожидаете.

+0

Это похоже на помощь. Не могли бы вы немного разобраться? – bcf

+0

Я добавил некоторые уточнения. –

Смежные вопросы