機械学習を先に学んでしまうと、カイ二乗分布が良く出てくる理由が分からないかもしれません。そこで、機械学習(ベイズ統計)では良く使うガンマ分布の一つとして定式化しておいて、カイ二乗分布の大事さ、特に標準正規分布との関係を見ていきます。
参考文献は一応2冊あります。
モーメント母関数と特性関数
初めに、話をスムーズにするためにモーメント母関数と特性関数を定義しておきます。
Xが確率変数で、どの確率分布を考えているか明らかな時、
モーメント母関数の名前の由来は、モーメント母関数から全ての次数のモーメントが得られる事から来ています。1
例えば、正規分布
です。一般に、モーメント母関数は存在するとは限りませんが、以下で定義する、特性関数はいつも存在します。
フーリエ変換、逆変換の関係から、特性関数と確率分布は1対1に対応します。また、存在すれば、特性関数とモーメント母関数の間には以下の関係があるので、モーメント母関数からも確率分布は確定します。
このことから、確率分布の性質を議論する上で、楽が出来る事があります。例えば、正規分布では
が成り立ちますが、モーメント母関数を使うと楽になります。
独立な確率変数を
これは、正規分布
ガンマ分布とカイ二乗分布
ガンマ分布とカイ二乗分布について簡単な性質を計算してみます。ガンマ分布は、以下のような分布でした。色々な計算をまとめた記事があるので、計算はそちらを見てください。

ガンマ分布のモーメントと母関数や、期待値、分散を書いておきます。
モーメント母関数の形から分かるように、独立なガンマ分布にも、ある種の再生性があります。
一応計算しておきましょう。
最後の式は、
ガンマ分布の特別な場合をカイ二乗分布と呼びます。

カイ二乗分布の確率分布や、モーメント母関数などを表すと、以下のようになります。
ガンマ分布なので、カイ二乗分布の間でも再生性があります。
わざわざ名前が付いている分布なので、大事な分布なのですが、そのことを見ていきます。
標準正規分布とカイ二乗分布
カイ二乗分布が登場するシチュエーションを見てみます。
標準正規分布があれば、カイ二乗分布があるのです。一応計算しておきます。
モーメント母関数を計算して、
途中で、
最後の式は
上の主張と、自由度の足し算が出来るということから、次の事が分かります。
実際に標準正規分布からのサンプルを二乗して足したものをヒストグラムに描いてみると、カイ二乗分布とほぼ一致することが確かめられます。
np.random.seed(0)
z=np.zeros([10,100])
for i in range(10):
z[i]=np.random.randn(100)
chi_ = np.sum(z**2, axis=0)
chi = np.random.chisquare(10,100)
sns.distplot(chi_,label="10個の標準正規分布から")
sns.distplot(chi,label="自由度10カイ二乗分布から")
plt.title("分布の比較")
plt.legend()
plt.savefig("chi_from_norms.png")

さらに大事な事として、正規分布からサンプリングして、不偏分散を考えるとカイ二乗分布が出てくるという話があります。
不偏分散とカイ二乗分布
このとき、
が成り立つ。2
さらに、
上の主張のキモは、自由度がnでなくて、n-1 になるという事です。
正確な証明は、参考文献を読んでください。
[証明の概略]
これが作れると、
となる。
最後に、
なので、
実際に、統計量
を作ってヒストグラムにしてみると、カイ二乗分布とほぼ一致することが確認できます。
#データの準備 10種類の正規分布から100組のデータを集める
sample=10
size=100
sig=2
mu=1
x=np.zeros((size,sample))
for i in range(sample):
np.random.seed(i)
x[:,i]=np.random.normal(loc=mu,scale=sig,size=size)
#統計量の計算とカイ二乗分布の準備
chi_=[]
for j in range(size):
v=np.sum( (x[j,:] - np.mean(x[j,:]))**2)/(sample-1)
V = (sample-1)*v/sig**2
chi_.append(V)
chi = np.random.chisquare(9,100)
#グラフを描く
sns.distplot(chi_,label="10個の正規分布から")
sns.distplot(chi,label="自由度9カイ二乗分布から")
plt.title("分布の比較")
plt.legend()
plt.savefig("chi_from_norms2.png")

このような背景があるので、色々な場所でカイ二乗分布が出てくるわけです。
しかし、いきなり正規分布が得られている事は少ないので、近似的に正規分布が得られて、その結果カイ二乗分布が出てくる、という状況の方が多いかもしれません。
そのような状況の記事は別に書きたいと思います。
多変量正規分布とカイ二乗分布
標準正規分布に従う確率変数
これらを、確率変数からなるベクトルだと思うと、以下のように書き直すことが出来ます。
多変量正規分布の話では、確率変数ベクトルの成分の共分散が0なら、成分は独立です。
つまり、
という事です。
一変数の場合のように、標準多変量正規分布からカイ二乗分布が出て来ます。
これを証明するには、以下の事実を使います。5
上の事実を認めると、
です。なので、
となるような
正規分布に使われる共分散行列が、正定値かつ対称としましょう。6
そうすると、
ただし、
であり、
となります。これで、主張が示せました。
python で主張を確かめてみます。
#データの生成
np.random.seed(2)
sig=np.random.randint(1,10,5)
Sigma = np.dot(sig.reshape(-1,1), sig.reshape(1,-1)) + 1*np.eye(5)
mu =np.ones(5)
y=np.random.multivariate_normal(mean=mu ,cov=Sigma, size=100)
#
Y=np.array([])
for i in range(len(y)):
chi_ = (y-mu)[i].reshape(-1,5)@ np.linalg.inv(Sigma)@(y-mu)[i].reshape(5,-1)
Y=np.append(Y,chi_ )
chi = np.random.chisquare(5,100)
#グラフを描く
sns.distplot(Y,label="5次元正規分布から")
sns.distplot(chi,label="自由度5カイ二乗分布から")
plt.title("分布の比較")
plt.legend()
plt.savefig("chi_from_norm.png")

上の主張
は、変量正規分布を標準化するとカイ二乗分布が出てくるという意味ですが、一方で正規分布の肩に載っている量がカイ二乗分布になるという事でもあります。
この量を使って、異常検知のシステムを作る事が出来ます。
このことは別の記事で解説します。
まとめ
- 計算するためにモーメント母関数などを定義した
- ガンマ分布の一つとしてカイ二乗分布を定義した
- 標準正規分布からカイ二乗分布を作った
- 分散からカイ二乗分布を作った
- 多変量正規分布からカイ二乗分布を作った。
を、1次,2次 のモーメントと呼びますが、モーメント母関数を でn階微分すれば、n次モーメントが得られます。-
という事です。 - Z=HY かつ、
となるHを作ります。Helmert 行列というらしいです。 - nは、ベクトルの成分の数です。
- 多変量正規分布の記事で証明してます。
- 正定値は、全ての固有値が0より大きいという事です。
- マハラノビス距離と呼ばれます。