基本的に昔書いたコロモゴロフ検定の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 sumend
############## 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";
################################################