コロモゴロフ-スミルノフ検定の実装 (R版)

Rでコロモゴロフ-スミルノフ検定
(Kolmogrov-Smirnov test)の実装する。


組み込み関数ks.testを使うと

#べき分布乱数の発生
h1c<-1.0/runif(10000)

#べき分布の確率関数の定義
alpha<-1
xmin<-1

f<-function(x){
1-xmin^alpha/(x)^(alpha)
}

test<-ks.test(h1c,"f")

#表示
test
test$statistic
test$p-value

#参考
names(test)

組み込み関数を使わないで真面目に書くと

#検定されるべき分布発生
h1c<-1.0/runif(10000)^(1/1.0)

#べき分布の確率関数の定義
alpha<-1
xmin<-1
f<-function(x){
1-xmin^alpha/(x)^(alpha)
}

#コロモゴロフ-スミルノフ検定
#  統計量の確率関数の定義

pD<-function(x){
i<-1:100000
2*sum(((-1)^(i-1))*exp(-2*i*i*x*x))
}



D<-max(abs(f(sort(h1c))-1:length(h1c)/length(h1c)))


#統計量Dとp値の出力
D
pD(D*sqrt(length(h1c)))

#組み込みとの比較
ks.test(h1c,"f")

p-valueが自作とks.test
で多少ずれる(自作のが微妙に
大きい。)。
理由は、おそらく
ks.testが適当な桁以下を切り捨てて
いるためと思われる。