Follow @data_no_memo

メモ

個人的なメモです。他者にわかりやすく書くよりも未来の自分にわかりやすく書いています。なお、記事内容の正確さは保証できません。勉強中の身ですので、間違い等ご指摘頂けたら幸いです。

正規分布からカイ二乗分布導く

よく知られる確率分布は互いに関連しており、ある分布からある分布を導出することができる。

 

今回は標準正規分布からカイ二乗分布を導いてみる。

カイ二乗分布は標準正規分布からランダムに得られた数値の2乗値の合計の分布である。

カイ二乗分布は自由度によって異なるが、ここでの自由度kは、標準正規分布の数と一致する。

すなわち、3つの標準正規分布からそれぞれn個の数値をランダムに取り出し、その二乗値の合計値の分布は、自由度3のカイ二乗分布となる。

なお、ここで合計というのは、例えば、3つの標準正規分布、A、B、Cがあり、それぞれランダムに1回(n=1)ずつ取り出した時、標準正規分布Aから取り出した数値の二乗をX^2A、標準正規分布Bから取り出した数値の二乗をX^2B、標準正規分布Cから取り出した数値の二乗をX^2Cとした時の、これらの合計のことである(=X^2A+X^2B+X^2C)。

よって、「3つの標準正規分布からn個の数値をランダムに取り出し、その二乗値の合計値」というのはn個の値が手元に得られることを意味する。

よって、自由度kのカイ二乗分布に従うn個の変数は、以下のように表現できる。なお、ここで、X^2は標準正規分布kからランダムに得られる値を2乗したものである。

 

 

実際にRで実験してみた。

なお、n=100,000で、自由度は1~9のカイ二乗分布を図示することを目的とした。

その結果とコードは以下の通り。

f:id:abcxyzonetwothree:20180923163343p:plain

 


n<-100000 #n個
z<-matrix(nrow=n,ncol=9) #収納スペース
for(i in 1:9){
	x<-rnorm(n) #標準正規分布からn個の乱数発生
	x<-x^2 #n個の乱数をそれぞれ2乗
	z[,i]<-x #収納
}

library(ggplot2)
g<-list() #収納

for(i in 1:9){
	data<-data.frame(z) 
  data<-data[,1:i]  #1~i列の乱数の2乗値を抽出

	if(i == 1){ #以下のapply関数では列が1の時エラーとなるのでi=1の時は別にした
	x2<-data
	g[[i]]<-ggplot()
  g[[i]]<-g[[i]]+geom_histogram(mapping=aes_string(x=x2),binwidth=0.1)
  g[[i]]<-g[[i]]+xlim(0,30)+ylim(0,4000)
    g[[i]]<-g[[i]]+labs(x="chi.square")

	}
	else{
	x2<-apply(data,1,sum) ##1~i列の乱数の2乗値を合計

  g[[i]]<-ggplot()
  g[[i]]<-g[[i]]+geom_histogram(mapping=aes_string(x=x2),binwidth=0.1)
  g[[i]]<-g[[i]]+xlim(0,30)+ylim(0,4000)
    g[[i]]<-g[[i]]+labs(x="chi.square")
	}
}

library(gridExtra)
g<-grid.arrange(g[[1]],g[[2]],g[[3]],g[[4]],g[[5]],g[[6]],g[[7]],g[[8]],g[[9]])

いい感じに図示できた。

同じ条件で直接カイ二乗分布から乱数を発生させて、それをヒストグラムにした場合も出してみる。

その結果とコードは以下の通り。

f:id:abcxyzonetwothree:20180923163920p:plain

 


n<-100000
chi.x<-matrix(nrow=n,ncol=9)
for(i in 1:9){
	chi.x[,i]<-rchisq(n=n,df=i) #自由度iのカイ二乗分布からn個の乱数発生させる
}

library(ggplot2)
g<-list()
for(i in 1:9){
	data<-data.frame(chi.x)
  x2<-data[,i]

  g[[i]]<-ggplot()
  g[[i]]<-g[[i]]+geom_histogram(mapping=aes_string(x=x2),binwidth=0.1)
  g[[i]]<-g[[i]]+xlim(0,30)+ylim(0,4000)
    g[[i]]<-g[[i]]+labs(x="chi.square")
}

library(gridExtra)
g<-grid.arrange(g[[1]],g[[2]],g[[3]],g[[4]],g[[5]],g[[6]],g[[7]],g[[8]],g[[9]])

予想通りほとんど同じ結果になった。

以上から、カイ二乗分布は標準正規分布からランダムに得られた数値の2乗値の合計の分布であることが確かめられた。