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

コロモゴロフ-スミルノフ検定のrubyでの実装。



基本的に昔書いたコロモゴロフ検定のR版
http://d.hatena.ne.jp/arupaka-_-arupaka/20090819/1250660276
rubyへの翻訳。



検定する分布はべき分布


今回は、rubyのNArray(数値計算用配列)
を利用する。

そのため実行する前に一度
プロンプト上で、

gem install narray

とし、NAarrayをインストールが必要。


新しい知識は

  • rubyでの乱数発生

#乱数の初期化
srand(100)
#乱数の発生
rand()

  • rubyでの関数?(正確にいうと関数ではないらしい)の定義

def f()
処理内容
  return output 
end

  • Narray を利用した、連続する1から100までのfloat型の数列の発生

NArray[1..10000].to_f

など。



以下は実装例:

  • Kolmogrov Smirnov testの実質は下から

6行だけ。

  • 関数fを変えれば、検定する関数(棄無仮説)を変えられる。
  • また、dataSourceに実データを

代入すれば、実データと比較できる。



(Kolomogrov Smirnov test ruby版)

require 'rubygems'
require 'narray'
include NMath


####### Power law disrtibution #######################
def f(x=a[],alpha=1,xmin=1)


z=1-(xmin**alpha)/*1*exp(-2.0*i*i*x*x)).sum


return sum

end

############## Generation of random varibales obeys the power law dist. ###

srand(100);
alpha=1.0;
xmin=2.0;

dataSource=NArray[1..1000].to_f

for i in 0..(dataSource.length-1) do

dataSource[i]=xmin*(1.0/rand())**(1.0/alpha);

end


############ Kolmogrov Smirnov test ################


sortDate=f(dataSource.sort(),1.0,2.0);
k=NArray[1..(dataSource.length())].to_f


d=*2;

print "D=",d," p_value=",p_value,"\n";


################################################

*1:x)**alpha) end ########## Kolmogrov distribution ############ def pD(x=1.0) sum=0; i=NArray[1..10000].to_f sum=2.0*(((-1)**(i-1

*2:sortDate-k/k.max).abs).max p_value=pD(d*sqrt(dataSource.length