ケンドールの順位相関係数の有意性の検定のための数表は,以下のようにして比較的簡単に作れたが,スピアマンの順位相関係数のそれがうまく行かぬ。
# kendall.awk
BEGIN {
N = 19 # 19以上は精度に問題あり
t[0] = t[1] = 1
for (n = 3; n <= N; n++) {
n_prev = n-1
max_prev = n_prev*(n_prev-1)/2
for (i = max_prev; i >= 0; i--) {
for (j = n-1; j > 0; j--) {
t[i+j] += t[i]
}
}
denom = max_now = n*(n-1)/2
cum = sum = 0
for (i = 0; i <= max_now; i++) {
sum += t[i]
}
printf "\n\n Kendall Rank Correlation Coefficient N = %i\n\n", n
printf "%5s: %12s %13s %17s\n", "S", "τ", "累積確率", "度数"
for (i = 0; i <= max_now; i++) {
kendall = 1-2*i/denom
cum += t[i]
if (kendall >= 0.0) {
printf "%5i: %#12.7f %#13.10f %17.17g\n",
denom-i*2, kendall, cum/sum, t[i]
}
else {
break
}
}
}
}