順列検定のパラメーターの信頼区間をどのように作成しますか?


9

順列検定は、元のデータからランダムに抽出された順列リサンプルに基づく有意性検定です。置換で描画されるブートストラップサンプルとは対照的に、置換リサンプルは置換なしで描画されます。ここで私はRで行った例、単純な並べ替え検定のは。(あなたのコメントは大歓迎です)

順列テストには大きな利点があります。正規性などの特定の母集団の形状は必要ありません。これらは、帰無仮説の下で単純な分布を持つ統計だけでなく、さまざまな統計に適用されます。母集団の形状とサイズに関係なく、非常に正確なp値を提供できます(十分な順列が使用されている場合)。

また、テストと共に信頼区間を与えることがしばしば役立つことも読んだ。これは、順列再サンプリングではなくブートストラップ再サンプリングを使用して作成される。

信頼区間がどのように構成されているか(つまり、上記の例の2つのサンプルの平均値の差について)説明できますか(または、Rコードを指定してください)?

編集

グーグルで調べた後、この興味深い読み物を見つけました。

回答:


7

順列リサンプリングを使用しても問題ありません。それは本当にいくつかの要因に依存します。順列が比較的低い数である場合、信頼区間の推定は順列ではそれほど大きくありません。順列はやや灰色の領域にあり、おそらく問題ありません。

以前のコードとの唯一の違いは、順列ではなくランダムにサンプルを生成することです。そして、それらをさらに生成します。たとえば、1000としましょう。実験の1000回の複製の差分スコアを取得します。中間950(95%)のカットオフを使用します。これが信頼区間です。ブートストラップから直接落ちます。

あなたの例ではこれのほとんどをすでに行っています。dif.treatは462アイテムです。したがって、下限2.5%と上限2.5%のカットオフ(両端で約11アイテム)が必要です。

以前のコードを使用しています...

y <- sort(dif.treat)
ci.lo <- y[11]
ci.hi <- y[462-11]

オフハンドでは462は少し低いと思いますが、10,000へのブートストラップが少し異なるスコア(平均に近い可能性が高い)で出てくることがわかります。

(以前のコードに基づいて)ブートライブラリを必要とする簡単なコードも追加すると思います。

diff <- function(x,i) mean(x[i[6:11]]) - mean(x[i[1:5]])
b <- boot(total, diff, R = 1000)
boot.ci(b)

ありがとうございました。sampleand を使用してサンプルを生成してもreplace=TRUEよろしいですか?のようなパッケージを使用する理由はありますbootか?
ジョージドンタス2010

通常は置換で行われるため、これをTRUEに設定します。理由については...パッケージが最適化されているため、より高速に実行されるはずです... Rを大きく設定すると、問題になる可能性があります。そして、ご覧のとおり、コードは素晴らしく簡潔です。また、簡単に独自の機能を実装することはできません多くの機能があります。
John

boot.ciは信頼区間を返します。p.valueを与える(ブート)関数はありますか?(生成されたサンプルの総数に対する、少なくとも観察されたものと同じ程度の差異の数の比率として)
George Dontas

わかりました、それを取得する方法を見つけました:sum(b$t>=b$t0)/b$R
George Dontas

@ gd047:これは計算する片側のp値であることを考慮に入れてください
Joris Meys、2010

4

順列検定は正確な検定であるため、正確なp値が得られます。順列テストのブートストラップは意味がありません。

次に、検定統計量の周りの信頼区間を決定することも、推定ではなくサンプルに基づいて計算されるため、意味がありません。平均などの推定値の信頼区間を決定しますが、検定統計量は決定しません。

置換テストは、可能なすべての置換をこれ以上計算できないほど大きいデータセットでは使用しないでください。その場合は、ブートストラップ手順を使用して、使用する検定統計量のカットオフを決定します。しかし、これも95%の信頼区間とはほとんど関係ありません。

例:ここでは古典的なT統計を使用しますが、統計の経験的分布を計算するためにブートストラップに簡単なアプローチを使用します。これに基づいて、経験的なp値を計算します。

x <- c(11.4,25.3,29.9,16.5,21.1)
y <- c(23.7,26.6,28.5,14.2,17.9,24.3)

t.sample <- t.test(x,y)$statistic
t.dist <- apply(
      replicate(1000,sample(c(x,y),11,replace=F)),2,
      function(i){t.test(i[1:5],i[6:11])$statistic})

# two sided testing
center <- mean(t.dist)
t.sample <-abs(t.sample-center)
t.dist <- abs(t.dist - center)
p.value <- sum( t.sample < t.dist ) / length(t.dist)
p.value

この両面テストは対称分布でのみ機能することを考慮に入れてください。非対称分布は、通常、片側のみでテストされます。

編集:

わかりました、質問を誤解しました。差の推定値の信頼区間を計算する場合は、ここに記載さているコードを使用して、各サンプル内のブートストラップを行うことができます。心に留めておいてください、これは偏った見積もりです:一般的にこれは小さすぎるCIを与えます。信頼区間とp値に異なるアプローチを使用する必要がある理由として、そこに示されている例も参照してください。


1
考えられるすべての順列を計算できないデータセットに対して順列テストを使用してはいけない理由を説明できますか?
アンディW

@Andy W:最初に「順列テスト」を定義します。私にとって、順列テストは可能なすべての順列を使用した正確なテストです。大きなデータセットではそれは不可能です。「近似順列検定」は実際には単純なモンテカルロ法であり、そのように扱われるべきです。その次に、中心極限定理は、ほとんどの場合、大規模なデータセットを使用するときに検定統計量の分布に関する仮定が満たされることを保証します。複雑なテストでは、大きなデータセットで順列テストを使用すると、重要な値を追加せずに計算時間が耐えられないほど長くなります。my2cents
Joris Meys、2010

順列テストをブートストラップするようなことは何も言わなかった。[セクション14.5 |]の最後の段落を読んだ後、この質問に入りました 要約]、リンクされたpdf。
George Dontas

@ gd047それから私はあなたの質問を読み違えました。ただし、信頼区間とp。値は厳密に分離する必要があります。信頼区間は、各サンプル内のブートストラップに基づいて推定されます(定義によりバイアスされていますが)。順列検定は、データセット全体の順列によって行われます。これらは2つのまったく異なるものです。
Joris Meys、2010

@Kevin:コードは正しかった。コードをもう一度読んでください。これは、apply内の無名関数のx[6:11]引数xを指します。混乱するかもしれませんが、あなたの編集は非常に間違った結果を出しました。コードを編集する前に、どうあるべきかについてコメントしてください。ロールバックを節約できます。さらに混乱を避けるために、私はそれを変更xするi
ヨリスMeys

0

AnswersのJoris Meysのコードから。ただし、単一の状況以外にも適用できるように変更されています。

他の1つを編集しようとしましたが、終了する時間がなかったため、何らかの理由でコメントできません(おそらくこれは古い質問であるためです)。

x <- c(11.4,25.3,29.9,16.5,21.1)
y <- c(23.7,26.6,28.5,14.2,17.9,24.3)

t.sample <- t.test(x,y)$statistic

t.dist <- apply(
          replicate(1000,sample(c(x,y),length(c(x,y)),replace=F)), 2,
          function(i){t.test(i[1:length(x)],i[length(x)+1:length(c(x,y))])$statistic})

# two sided testing
center <- mean(t.dist)
t.sample <-abs(t.sample-center)
t.dist <- abs(t.dist - center)
p.value <- sum( t.sample < t.dist ) / length(t.dist)
p.value
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.