いいえ、漸近的に有効な分布からのp値は、正確なp値より常に小さいとは限りません。従来の「ノンパラメトリック」テストの2つの例を考えてみます。
サイズと 2つの独立したサンプルの位置シフト(中央値など)のウィルコクソン順位和検定は、次のように検定統計量を計算します。ん1ん2
- すべての観測値をサイズ 1つの大きなサンプルに入れますN=ん1+ん2
- これらの値をからランク付けする1 、… 、N
- 最初のグループのランクを合計するには、これをと呼びます。多くの場合、検定統計量はとして定義され(この検定統計量は、マンホイットニーのUと同じです。 )、しかし、これは分布形状には関係ありません。L+NW=L+N−ん1(ん1+ 1 )2
固定との正確な分布は、最初のグループのランクの可能な組み合わせをすべて生成し、その合計を計算することで見つかりいずれの場合にも。漸近近似は、つまり、変換された検定統計量の標準正規近似。L+Nん1ん2(Nん1)z:=L+ん−ん1(N+ 1 )/ 2(ん1ん2(N+ 1 ))/ 12√〜N(0 、1 )z
同様に、独立したサンプルの位置シフト(中央値など)のクラスカル-ワリス-H検定では、各グループのランク合計に基づく検定統計量を使用します:。繰り返しになりますが、Hの正確な分布は、グループのランクのすべての組み合わせを生成することによって見つかります。3つのグループの場合、ような組み合わせがあります。漸近近似は分布を使用します。pR+ jjH:=12N(N+ 1 )Σj = 1p1んj(R+ j−んjN+ 12)2(Nん1)(N−ん1ん2)χ2p − 1
これで、特定のグループサイズの累積分布関数に関して分布形状を比較できます。test-statisticの特定の値の(右側の)p値は、連続分布の等しくなります。離散的なケースでは、のp値(検定統計量の番目の可能な値)はです。この図は、H検定で正確な分布がときどき大きいp値と小さいp値を生成することを示しています(可能な36のH値の32番目)の場合、正確なp値は0.075です(以下のコードを使用) )、おおよそのp値は0.082085()です。用F()t1 − F(t )tメートルメートル1 − F(tm − 1)H= 5sum(dKWH_08[names(dKWH_08) >= 5])
1-pchisq(5, P-1)
H= 2(15番目の可能な値)、正確なp値は0.425(sum(dKWH_08[names(dKWH_08) >= 2])
)、近似値は0.3678794(1-pchisq(2, P-1)
)です。
#### Wilcoxon-Rank-Sum-Test: exact distribution
n1 <- 5 # group size 1
n2 <- 4 # group size 2
N <- n1 + n2 # total sample size
ranks <- t(combn(1:N, n1)) # all possible ranks for group 1
LnPl <- apply(ranks, 1, sum) # all possible rank sums for group 1 (Ln+)
dWRS_9 <- table(LnPl) / choose(N, n1) # exact probability function for Ln+
pWRS_9 <- cumsum(dWRS_9) # exact cumulative distribution function for Ln+
muLnPl <- (n1 * (N+1)) / 2 # normal approximation: theoretical mean
varLnPl <- (n1*n2 * (N+1)) / 12 # normal approximation: theoretical variance
#### Kruskal-Wallis-H-Test: exact distribution
P <- 3 # number of groups
Nj <- c(3, 3, 2) # group sizes
N <- sum(Nj) # total sample size
IV <- rep(1:P, Nj) # factor group membership
library(e1071) # for permutations()
permMat <- permutations(N) # all permutations of total sample
getH <- function(rankAll) { # function to calc H for one permutation
Rj <- tapply(rankAll, IV, sum)
H <- (12 / (N*(N+1))) * sum((1/Nj) * (Rj-(Nj*(N+1) / 2))^2)
}
Hscores <- apply(permMat, 1, getH) # all possible H values for given group sizes
dKWH_08 <- table(round(Hscores, 4)) / factorial(N) # exact probability function
pKWH_08 <- cumsum(dKWH_08) # exact cumulative distribution function
すべての組み合わせではなく、すべての順列を生成することで、Hの正確な分布を計算していることに注意してください。これは不必要であり、計算的にはるかに高価ですが、一般的なケースでは書き留める方が簡単です...次に、関数の形状を比較してプロットを行います。
dev.new(width=12, height=6.5)
par(mfrow=c(1, 2), cex.main=1.2, cex.lab=1.2)
plot(names(pWRS_9), pWRS_9, main="Wilcoxon RST, N=(5, 4): exact vs. asymptotic",
type="n", xlab="ln+", ylab="P(Ln+ <= ln+)", cex.lab=1.4)
curve(pnorm(x, mean=muLnPl, sd=sqrt(varLnPl)), lwd=2, n=200, add=TRUE)
points(names(pWRS_9), pWRS_9, pch=16, col="red")
abline(h=0.95, col="blue")
legend(x="bottomright", legend=c("exact", "asymptotic"),
pch=c(16, NA), col=c("red", "black"), lty=c(NA, 1), lwd=c(NA, 2))
plot(names(pKWH_08), pKWH_08, type="n", main="Kruskal-Wallis-H, N=(3, 3, 2):
exact vs. asymptotic", xlab="h", ylab="P(H <= h)", cex.lab=1.4)
curve(pchisq(x, P-1), lwd=2, n=200, add=TRUE)
points(names(pKWH_08), pKWH_08, pch=16, col="red")
abline(h=0.95, col="blue")
legend(x="bottomright", legend=c("exakt", "asymptotic"),
pch=c(16, NA), col=c("red", "black"), lty=c(NA, 1), lwd=c(NA, 2))
これらのテストでは、分布が各グループで同じ形状である必要があることに注意してください。それ以外の場合は、場所のみのテストではありません。