[戻る]

Kruskal-Wallis 検定


Kruskal-Wallis 検定とは、まあ、一元配置分散分析のノンパラメトリック版とお考え下さい。 分散分析と違い、「順序」以上の尺度水準で利用が可能で、また当然ながら正規分布等も仮定しておりませんので、利用範囲のとても広い検定法だと思います。



半角文字列で入力し、ブロックごとに改行を入れて下さい。
最初から表示されている数列は入力例です。

数値の区切り方
カンマ,  タブ,  スペース



ソースコード(Ruby)

# Kruskal-Wallis test
# (C) Copyright 2002, Hisashi SATO 

 def KW_test(array)

# 諸準備
   rank = Array.new()				# 各sampleの順序の記録用行列
   sample_size = 0.0				# 全サンプル数
   for block in 0..array.size-1
   	rank << Array.new(array[block].size , 0.0)
	sample_size += array[block].size
   end

# 各サンプルの順位、各ブロックの順序合計、各順序の重複数を算出
   sum_of_rank = Array.new(array.size, 0.0)	# 各blockの順序合計の記録用行列
   tie = Hash.new				# 各順序の重複数の記録用Hash

   for block1 in 0..array.size-1
   count4 = 0.0
     for n1 in 0..array[block1].size-1
     count1, count2, count3 = 0.0, 0.0, 0.0

	for block2 in 0..array.size-1
	for n2     in 0..array[block2].size-1
	   if array[block1][n1] > array[block2][n2] then count1 += 1
	   elsif array[block1][n1] == array[block2][n2] then count2 += 1
	   end
	end
	end

	for i in count1+1..(count1 + count2)
	   count3 += i
	end
	rank[block1][n1] = count3 / count2		# sample毎に順序を記録
	tie[count3 / count2] = count2		# 順序値毎に重複数を記録
	count4 += count3 / count2

     end
   sum_of_rank[block1] = count4			# block毎に順序合計を記録
   end


# 検定統計量hと重複順位補正項dの算出
   h, d, count5, count6 = 0.0, 0.0, 0.0, 0.0
  
   for block in 0..array.size-1
    count5 += (sum_of_rank[block]**2) / array[block].size
   end
   h = ( 12/( sample_size*(sample_size+1) ) ) * count5 - 3*(sample_size+1)

   tie = tie.values
   tie.delete(1.0)
   tie.each{|i| count6 += i**3 - i }
   d =  1 - count6 / ( sample_size**3 - sample_size )

   return h, d
 end






戻る