Date: Mar 18, 2013 7:58 AM
Author: Luis A. Afonso
Subject: Krukal-Wallis by Fisher´s random shuffling
Krukal-Wallis by Fisher´s random shuffling

Data copied from

www.sussex.ac.uk/Users/.../KruskalWallis%20Handoout2011.pdf

The statistics, for k samples

__H= 12/(N*(N+1))* [T(i)*T(i)/n(i)] - 3*(N+1)

_Where

__N= total of values, T( ) sample i, n( ) size, total of ranks

The K-W follows approximately a Chi Square with k-1 degrees of freedom. The symbol [ ] represents the sum of values from i=1 to k.

The algorithm

Each pseudo-Table is obtained distributing at random without replacement our observed ranks among the samples with regard to their sizes. This Table provides a generic H´. Repeating a huge number of times we get a set of values from which the 0.025 and 0.975 quantiles are calculated.

Results

The test (prior to Fisher´s simulations) get H0= 7.271 which p-value, Chi-square, 2 degrees of freedom, is 2.64%.

The pseudo Tables show that with 400´000 of them, 3 times, there are 2.03%, 2.06%, 2.09% H´ values greater than H0, well in accordance with the former.

Luis A. Afonso

REM "GRAHMIX"

CLS

DEFDBL A-Z

DIM ri(24), ribis(24)

DATA 1,2,3,4

DATA 5.5,5.5

DATA 7,8,9,10,11,12

DATA 14,14,14

DATA 16

DATA 17.5,17.5

DATA 19,20,21,22,23,24

REM

FOR i = 1 TO 24: READ ri(i): totr = totr + ri(i)

ribis(i) = ri(i): NEXT i

REM

N = 24: C = 12 / (N * (N + 1))

INPUT " HOW MANY TABLES "; many

REM

FOR tb = 1 TO many

REM

LOCATE 10, 50: PRINT USING "########"; many - tb

RANDOMIZE TIMER

FOR t = 1 TO N: ribis(t) = ri(t): NEXT t

SUM(1) = 0: SUM(2) = 0: SUM(3) = 0

FOR ix = 1 TO 8

1 gg = INT(24 * RND) + 1

IF ribis(gg) = 2013 THEN GOTO 1

SUM(1) = SUM(1) + ribis(gg)

ribis(gg) = 2013

NEXT ix

FOR iy = 1 TO 8

2 gg = INT(24 * RND) + 1

IF ribis(gg) = 2013 THEN GOTO 2

SUM(2) = SUM(2) + ribis(gg)

ribis(gg) = 2013

NEXT iy

SUM(3) = totr - (SUM(1) + SUM(2))

aa = SUM(1) * SUM(1) / 8

bb = SUM(2) * SUM(2) / 8

cc = SUM(3) * SUM(3) / 8

tsum = aa + bb + cc

hh = C * tsum - 3 * (N + 1)

IF hh > 7.271 THEN sgni = sgni + 1 / many

NEXT tb

LOCATE 10, 50

PRINT USING "sgnif.% = ##.## "; sgni * 100

END