Permütasyon testinin parametresi için nasıl bir güven aralığı oluştururuz?


9

Permütasyon testleri, orijinal verilerden rasgele çizilen permütasyon örneklerine dayanan önem testleridir. Permütasyon örnekleri, replasman ile çekilen önyükleme numunelerinin aksine, değiştirilmeden çizilir. İşte basit bir permütasyon testinin R'sinde yaptığım bir örnek . (Yorumlarınızı bekliyoruz)

Permütasyon testlerinin büyük avantajları vardır. Normallik gibi belirli nüfus şekillerine ihtiyaç duymazlar. Sadece sıfır hipotezi altında basit bir dağılımı olan istatistiklere değil, çeşitli istatistiklere uygulanırlar. Nüfusun şekli ve büyüklüğünden bağımsız olarak çok yeterli p değerleri verebilirler (yeterli permütasyon kullanılırsa).

Ben de permütasyon yeniden örnekleme yerine bootstrap yeniden örnekleme kullanılarak oluşturulan bir test ile birlikte bir güven aralığı vermek için yararlı olduğunu okudum.

Bir güven aralığının nasıl oluşturulduğunu açıklayabilir (veya sadece R kodunu verebilir misiniz) (örneğin, yukarıdaki örnekteki iki örneğin ortalaması arasındaki fark için)?

DÜZENLE

Biraz googling yaptıktan sonra bu ilginç okumayı buldum .

Yanıtlar:


7

Permütasyon yeniden örneklemeyi kullanmakta sorun yoktur. Gerçekten bir dizi faktöre bağlıdır. Permütasyonlarınız nispeten düşük bir rakamsa, güven aralığınızla ilgili tahmininiz permütasyonlarla o kadar büyük değildir. Permütasyonlarınız biraz gri bir alandadır ve muhtemelen iyidir.

Önceki kodunuzdaki tek fark, örneklerinizi permütasyonlar yerine rastgele oluşturmanızdır. Ve bunlardan daha fazla üretersiniz, örneğin 1000 diyelim. Denemenizin 1000 kopyası için fark puanlarını alın. Orta 950 (% 95) için kesikleri alın. Bu sizin güven aralığınız. Doğrudan bootstrap'tan düşer.

Örneğinizde bunların çoğunu zaten yaptınız. dif.treat 462 ürün uzunluğunda. Bu nedenle, daha düşük% 2.5 ve üst% 2.5 kesimlere ihtiyacınız vardır (her bir uçta yaklaşık 11 ürün).

Önceden kodunuzu kullanarak ...

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

Off off 462 biraz düşük olduğunu söyleyebilirim ama 10,000 için bir bootstrap bulacaksınız biraz farklı olan puanlar (muhtemelen ortalamaya daha yakın).

Ayrıca önyükleme kitaplığı gerektiren bazı basit kod ekleyeceğini düşündüm (önceki kodunuza göre).

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

Teşekkür ederim. O kullanarak örnekleri oluşturmak için Tamam mı sampleve replace=TRUE? Gibi bir paket kullanmak için herhangi bir neden var mı boot?
George Dontas

Genellikle değiştirme ile yapılır, böylece bunu TRUE olarak ayarlamak istersiniz. Neden gelince ... paket daha hızlı çalışması gerekir optimize edilmiştir .... asla zamanlanmış. R'yi büyük ayarlarsanız bu bir sorun olabilir. Gördüğünüz gibi kod güzel ve özlü. Ayrıca kolayca kendi haddeleme alamazsınız birçok özelliği vardır.
John

boot.ci güven aralığını döndürür. P.value değerini veren herhangi bir (boot) işlevi var mı? (farklılıkların sayısının, en az gözlemlenen kadar yüksek, üretilen toplam örnek sayısına oranı olarak)
George Dontas

tamam, bunu elde etmenin bir yolunu buldum:sum(b$t>=b$t0)/b$R
George Dontas

@ gd047: bunun hesapladığınız tek taraflı bir p değeri olduğunu dikkate alın.
Joris Meys

4

Permütasyon testi kesin bir test olduğundan size kesin bir p değeri verir. Bir permütasyon testinin önyüklenmesi mantıklı değildir.

Bunun yanında, bir test istatistiği etrafında bir güven aralığı belirlemek de bir anlam değil, örneğinize göre hesaplandığından anlamsızdır. Ortalamalar ve beğeniler gibi tahminler etrafında güven aralıklarını belirlersiniz, ancak test istatistikleri etrafında değil.

Permütasyon testleri o kadar büyük veri kümelerinde kullanılmamalıdır ki artık tüm olası permütasyonları hesaplayamazsınız. Bu durumda, kullandığınız test istatistiği için kesmeyi belirlemek üzere bir bootstrap prosedürü kullanın. Fakat yine de, bunun% 95'lik bir güven aralığıyla ilgisi yoktur.

Bir örnek: Burada klasik T istatistiğini kullanıyorum, ancak istatistiğimin ampirik dağılımının hesaplanması için önyüklemeye basit bir yaklaşım kullanıyorum. Buna dayanarak, ampirik bir p değeri hesaplıyorum:

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

Bu 2 taraflı testin yalnızca simetrik dağılımlar için çalıştığını göz önünde bulundurun. Simetrik olmayan dağılımlar tipik olarak sadece tek taraflı test edilir.

DÜZENLE :

Tamam, soruyu yanlış anladım. Farkın tahmininde bir güven aralığı hesaplamak istiyorsanız, her bir örnekte önyükleme için burada belirtilen kodu kullanabilirsiniz . Dikkat edin, bu önyargılı bir tahmindir: genellikle bu çok küçük bir CI verir. Ayrıca, güven aralığı ve p değeri için farklı bir yaklaşım kullanmanızın bir nedeni olarak verilen örneğe bakın.


1
Tüm olası permütasyonları hesaplayamadığınız veri kümelerinde permütasyon testlerinin neden kullanılmaması gerektiğini açıklayabilir misiniz?
Andy W

@Andy W: Önce "permütasyon testi" ni tanımlayın. benim için permütasyon testleri mümkün olan her permütasyonu kullanan kesin testlerdir. Daha büyük veri kümelerinde bu mümkün değildir. "Yaklaşık permütasyon testleri" aslında Monte Carlo yöntemini basitleştirmektedir ve bu şekilde ele alınmalıdır. Bunun yanında, merkezi limit teoremi çoğu durumda büyük veri kümeleri kullanılırken test istatistiklerinin dağılımına ilişkin varsayımların karşılanmasını sağlar. Karmaşık testlerde, büyük veri kümelerinde permütasyon testlerinin kullanılması, önemli bir değer eklemeden hesaplama sürelerini dayanılmaz bir şekilde uzatır. my2cents
Joris Meys

Bir permütasyon testini başlatmak gibi bir şey söylemedim. Bu soruya [BÖLÜM 14.5 | Özet], bağlantılı pdf içinde.
George Dontas

@ gd047 Sonra sorunuzu yanlış okudum. Ama gerçekten güven aralıklarını ve değerleri kesinlikle birbirinden ayrı tutmalısınız. Güven aralığı, her bir örnek içindeki önyüklemeye dayanarak tahmin edilir (tanım gereği önyargılı olmasına rağmen), permütasyon testi, tüm veri seti üzerindeki permütasyonlarla yapılır. Bunlar tamamen farklı iki şey.
Joris Meys

@Kevin: Kod doğru. Kodu tekrar okuyun: başvuru , anonim işlevin x[6:11]argümanına xbaşvurur. Belki kafa karıştırıcı olabilir, ancak düzenlemeniz çok yanlış sonuçlar verdi. Lütfen kodu düzenlemeden önce ne olması gerektiğini düşündüğünüz hakkında yorum yapın. Beni geri alır. Daha fazla karışıklığı önlemek için bunu şu xşekilde değiştirdimi
Joris Meys

0

Cevaplar'daki Joris Meys kodundan ancak daha fazla tek bir durumda uygulanmasına izin verecek şekilde değiştirilerek:

Diğerini düzenlemeye çalıştım ama bitirmek için zamanım yoktu ve nedense yorum yapamıyorum (belki de bu eski bir soru olduğu için).

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.