8月28日(木)午前
「Rではじめる統計」で統計手法(推定、検定)に関する知識の整理を行った。
まだまだ不安な部分は多いが、最低限度の理解は得られたかと思う。
適応度検定の再考
昨日先生から頂いたコメントをもとに、適応度検定について再考を行った。
p値について全く誤解をしていたようで、p値とは、
「帰無仮説が成立すると仮定した場合に、標本から得られた統計量よりも外れた数値の統計量が母集団から得られる確率」
らしい。
昨日の適応度検定の結果の「p値が非常に小さい」というのは、僕が作った関数によって10000回取り出したシミュレーションよりも外れた数値になることは帰無仮説下においてほとんど考えられない、という意味になるので、すなわちとても偏った結果になっていたということになる。
原因はすぐに判明した。
chisq.test()は、引数のベクトルの数字の大きさのばらつきを見る関数だったらしい。
要素の個数のばらつきを見てくれるのかと思っていた。
また、ベクトルの要素の個数を出す上では、table()という便利な関数があることも分かった。
というわけで、やり直してみた。
myfunc01<-function(){ if (runif(1)>3/4)return(4) else if (runif(1)>2/4)return(3) else if (runif(1)>1/4)return(2) else return(1) }#1~4を同様に確からしく抽出する関数 myfunc02<-function(){ if (runif(1)>2/3)return(3) else if (runif(1)>1/3)return(2) else return(1) }#1~3を同様に確からしく抽出する関数 myfunc03<-function(){ x<-c(1,2,3,4) y<-x[c(-myfunc01())] z<-y[c(-myfunc02())] return(z) } myfunc04<-function(){ z<-c() for(i in 1:2)z<-c(z,10^(2-i)*myfunc03()[i]) return(sum(z)) } w<-c() for(i in 1:10000)w<-c(w,myfunc04()) w,t<-table(w) chisq.test(w,t) > chisq.test(w.t) Chi-squared test for given probabilities data: w.t X-squared = 8645.703, df = 8, p-value < 2.2e-16
というわけで、一様ではないことが判明した。
実際に、wの最初のほうの要素を見てみると、
> w [1] 22 13 13 13 33 33 13 14 32 13 14 14 14 24 33 13 14 14 24 13 34 14 14 [24] 33 14 13 13 12 14 24 13 14 14 14 12 14 13 14 14 12 13 14 13 13 13 12 [47] 33 13 24 12 32 13 14 12 14 24 24 14 34 12 14 12 14 12 24 14 13 14 13 [70] 13 12 22 24 34 12 24 14 12 13 14 14 24 13 13 13 23 14 13 14 12 14 14 [93] 13 12 22 13 23 12 14 23 14 13 14 14 12 14 14 12 12 13 24 14 13 24 14 [116] 22 24 14 13 34 14 23 14 13 13 14 24 13 23 13 14 12 14 12 32 13 24 12 [139] 24 14 13 12 14 14 14 14 12 14 13 14 22 13 24 14 14 23 12 13 14 14 14 [162] 13 14 33 13 12 24 34 14 33 12 34 14 12 22 14 14 32 22 13 14 12 12 14 [185] 13 14 34 24 14 34 24 12 14 14 14 33 14 14 12 23 22 13 34 13 14 12 24
やたら13、14あたりが多いことが分かる。
原因はサッパリわからない。
午後に検証してみることにする。
以上