順列仮説検定手順

Sep 14 2020

私は統計が苦手で、助けを求めています。私は不動産データを使用しており、地区「A」と地区「B」の2つの地区のアパートの価格を比較したいと思います。

データの説明:

配列「A」:

$mean_A$ = 368.52

$std_A$ = 256.02

$n_A$ = 2040

配列 "B":

$mean_B$ = 340.02

$std_B$ = 284.02

$n_B$ = 2741

データを見ると、地区Aは地区Bよりも高いようです。それを確認して実験したいと思います。

観測された統計: $mean_A - mean_B$ = 28.5

$H_0$: $mean_A - mean_B$ = 0

$H_a$: $mean_A - mean_B$ > 0

私がしたこと:

  1. 配列Aを28.5(観測された統計)だけ中央にシフトしました $mean_A - mean_B$ 0で右。

  2. 配列Aと配列B(置換を伴うサンプリング)の10000のランダムサンプルをシミュレートし、10000の平均差を取得して保存しました。

  3. 次に、元の観測値(28.5)がその分布の平均差にあることを確認し、p値を計算します。

p値=(> = 28.5である値の数)/ 10000

そして0.001に等しい。

だから違いは重要で、私は拒否することができます $H_0$。

教えてください、この手順は大丈夫ですか、それとも私は間違いを犯しました。

何かアドバイスをいただければ幸いです。お手数をおかけしますが、よろしくお願いいたします。

回答

2 BruceET Sep 14 2020 at 16:39

あなたがしていることは、並べ替え検定というよりもブートストラップ手順のように見えます。私はあなたのデータやその説明を持っていないので、なぜあなたがウェルチの2標本t検定または2標本のウィルコクソン順位和検定を使用していないのかわかりません。

Rでサンプリングされた、以下のようなデータがあるとします。サンプルサイズは非常に大きいですが、このようなひどく歪んだデータを使用したテストでは信頼したくありません。

summary(a);  length(a);  sd(a)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  112.2   188.8   285.1   368.7   463.2  1904.2 
[1] 2040
[1] 254.4081
summary(b);  length(b);  sd(b)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  56.03  141.93  256.71  347.55  461.82 2611.67 
[1] 2741
[1] 292.5565
x = c(a,b);  gp = rep(1:2, c(2040,2741))
boxplot(x ~ gp, col="skyblue2", pch=20)

t統計量がt分布であるとは信頼できないため、テストでは使用しません。ただし、t統計量は、グループAとBの値の差を表す合理的な方法であると感じているため、プールされた2標本のt検定統計量を並べ替え検定の「メトリック」として使用します。

t.obs = t.test(x ~ g, var.eq=T)$stat;  t.obs
       t 
2.613055 

次に、を使用sample(gp)して、1のsと2sをランダムに並べ替えgpます。すべての$ 2040 + 2741 $は、グループ1と2に再割り当てされ、グループ1では$ n_1 = 2040 $、残りはグループ2に割り当てられます。以下のコードは、ベクトルの1つの順列を示していますc(1,1,1,2,2,2,2)。

sample(c(1,1,1,2,2,2,2))
[1] 2 2 2 1 1 2 1

の$ 10 \、000 $順列を実行しgp、t.prm各順列を検索します。その場合、並べ替え検定のP値は、元の並べ替えられていないデータt.prmよりも絶対値​​が大きい値の比率になりますt.obs。

set.seed(2020)
t.prm = replicate(10^4, t.test(x~sample(gp),var.eq=T)$stat)
mean(abs(t.prm) > abs(t.obs))
[1] 0.0079

P値は約 $0.008$ したがって、2つのグループの平均が同じであるという帰無仮説を棄却します。

hist(t.prm, prob=T, br=30, col="skyblue2", 
     main="Simulated Permutation Dist'n")
  abline(v = c(-t.obs, t.obs), col="red", lwd=2, lty="dotted")

注:(1)ウィルコクソン順位和検定は、2つのグループの場所が大幅に異なることを示しています。

wilcox.test(x ~ gp)

        Wilcoxon rank sum test with continuity correction

data:  x by gp
W = 3138800, p-value = 3.737e-13
alternative hypothesis: true location shift is not equal to 0

(2)片側検定の場合、質問のように、P値のRコードの最後の行は次のようになります。

mean(t.prm > t.obs)
[1] 0.0042

(3)私はあなたが行ったテストに精通していません。これはブートストラップテストのようです(置換によるリサンプリングのため)。私はあなたのテストが間違っていると言っているのではありません。妥当な結果が得られます。ただし、並べ替え検定について質問しました。あなたのテストは並べ替えテストではありません。だから私はあなたに1つ見せました。

(4)以下のRコードを使用して、上記の説明で使用した2つのサンプルを取得しました。

set.seed(2020)
a = rexp(2040, 1/256) + 112
b = rexp(2741, 1/284) + 56
x = c(a,b);  gp = rep(1:2, c(2040,2741)