Önemli bir sonuç (örneğin, ) elde edilinceye (örneğin, p-hack) neden Tip I hata oranını kadar neden veri topladığımı merak ediyordum.
R
Bu fenomenin bir gösterimini de çok takdir ediyorum .
Önemli bir sonuç (örneğin, ) elde edilinceye (örneğin, p-hack) neden Tip I hata oranını kadar neden veri topladığımı merak ediyordum.
R
Bu fenomenin bir gösterimini de çok takdir ediyorum .
Yanıtlar:
Sorun şu ki, testi geçmek için kendinize çok fazla şans veriyorsunuz. Bu, bu iletişim kutusunun sadece fantezi bir versiyonudur:
Akşam yemeğini kimin ödediğini görmek için seni çeviririm.
Tamam, ben kafa çağırırım.
Rats, kazandın. Üçte iki en iyi?
Bunu daha iyi anlamak için , bu ardışık prosedürün basitleştirilmiş ancak gerçekçi bir modelini düşünün . Belirli sayıda gözlemden oluşan bir "deneme çalıştırması" ile başlayacağınızı, ancak daha düşük bir p değeri elde etmek için daha uzun süre deney yapmaya devam edeceğinizi varsayalım . Boş hipotez, her bir gözlem (bağımsız olarak) standart bir Normal dağılımdan . Alternatif olarak, bağımsız bir ortalama olmayan bir birim varyans normal dağılımından bağımsız olarak gelir. Test istatistiği, tüm gözlemlerin ortalaması olacak; , standart hatalarına bölünmüş, . İki taraflı bir test için, kritik değerlerX i X i n ˉ X 1 / √ 0.0250.975Zα=±1.96Standart Normal dağılımın ve yüzde puanları, yaklaşık.
Bu iyi bir test - sabit örneklem büyüklüğü ile tek bir deney için . Bu tam bir sahiptir ne olursa olsun, boş varsayımı reddetme şansı olabilir.% 5 n
Bunu cebirsel olarak tüm değerlerinin toplamına dayanan eşdeğer bir sınamaya dönüştürelim.S , n = x 1 + x 2 + ⋯ + X , n = n ˉ x .
Böylece, veriler ne zaman "önemli"
yani,
Eğer akıllıysak, çok büyüdükçe ve veriler kritik bölgeye girmediğinde, kayıplarımızı azaltıp vazgeçeceğiz .
Bu rastgele bir yürüyüş . Formül , rastgele yürüyüşün etrafına kavisli bir parabolik "çit" veya bariyer oluşturmaya : rastgele yürüyüşün herhangi bir noktası çite çarparsa, sonuç "önemli" olur .
Yeterince uzun süre beklersek , bir noktada sonucun önemli görünmesi çok muhtemeldir , rastgele yürüyüşlerin bir özelliğidir .
İşte örnek limitine kadar 20 bağımsız simülasyon . Hepsi numunede test etmeye başlar , bu noktada her noktanın formül e göre çizilen engellerin dışında olup olmadığını kontrol ederiz . İstatistiksel testin ilk önce "önemli" olduğu noktadan, simüle edilen veriler kırmızı renkle gösterilmiştir.
Neler olup bittiğini görebilirsiniz: rastgele yürüyüş arttıkça yukarı ve aşağı hareket ediyor . Engeller yaklaşık olarak aynı oranda dağılıyor - ancak rastgele yürümeyi önlemek için her zaman yeterince hızlı değil.
Bu simülasyonların% 20'sinde "önemli" bir fark bulundu - genellikle oldukça erken - her birinde boş hipotez kesinlikle doğru olsa bile! Bu türden daha fazla simülasyon çalıştırmak, gerçek test boyutunun, in öngörülen değeri yerine yakın olduğunu gösterir : yani, örneklem boyutuna kadar "önem" aramaya istekli size verir boş doğrudur bile null adlı reddetme şansı.
Dört "önemli" durumun hepsinde, test devam ettikçe, verilerin bazı noktalarda önemli görünmeyi bıraktığına dikkat edin. Gerçek hayatta, erken duran bir deneyci, bu tür "geri dönüşleri" gözlemleme şansını kaybediyor. İsteğe bağlı durma yoluyla bu seçicilik sonuçları önyargılı hale getirir.
Dürüst olmak gerekirse, sıralı testlerde, engeller çizgilerdir. Burada gösterilen kavisli engellerden daha hızlı yayıldılar.
library(data.table)
library(ggplot2)
alpha <- 0.05 # Test size
n.sim <- 20 # Number of simulated experiments
n.buffer <- 5e3 # Maximum experiment length
i.min <- 30 # Initial number of observations
#
# Generate data.
#
set.seed(17)
X <- data.table(
n = rep(0:n.buffer, n.sim),
Iteration = rep(1:n.sim, each=n.buffer+1),
X = rnorm((1+n.buffer)*n.sim)
)
#
# Perform the testing.
#
Z.alpha <- -qnorm(alpha/2)
X[, Z := Z.alpha * sqrt(n)]
X[, S := c(0, cumsum(X))[-(n.buffer+1)], by=Iteration]
X[, Trigger := abs(S) >= Z & n >= i.min]
X[, Significant := cumsum(Trigger) > 0, by=Iteration]
#
# Plot the results.
#
ggplot(X, aes(n, S, group=Iteration)) +
geom_path(aes(n,Z)) + geom_path(aes(n,-Z)) +
geom_point(aes(color=!Significant), size=1/2) +
facet_wrap(~ Iteration)
Hipotez testinde yeni olan kişiler, ap değeri 0,05'in altına düştüğünde, daha fazla katılımcı eklemek sadece p değerini daha da azaltacağını düşünme eğilimindedir. Ancak bu doğru değil. Boş hipotez altında, ap değeri 0 ile 1 arasında eşit olarak dağıtılır ve bu aralıkta bir miktar etrafa sıçrayabilir.
R'deki bazı verileri simüle ettim (R becerilerim oldukça basit). Bu simülasyonda, her biri rasgele seçilmiş bir grup üyeliğine (0 veya 1) ve her biri rasgele seçilmiş bir sonuç ölçüsüne sahip ~ N (0,1) olan 5 veri puanı toplarım. Katılımcı 6'dan başlayarak, her yinelemede bir t testi yapıyorum.
for (i in 6:150) {
df[i,1] = round(runif(1))
df[i,2] = rnorm(1)
p = t.test(df[ , 2] ~ df[ , 1], data = df)$p.value
df[i,3] = p
}
P değerleri bu şekildedir. Örnek büyüklüğü 70-75 civarındayken önemli sonuçlar bulduğuma dikkat edin. Eğer orada durursam, bulgularımın önemli olduğuna inanmaya başlıyorum, çünkü p değerlerimin daha büyük bir örnekle geri yükseldiğini kaçırdım (bu, gerçek verilerle başıma geldi). Her iki popülasyonun da ortalama 0 olduğunu bildiğim için, bu yanlış bir pozitif olmalı. P <.05 olana kadar veri ekleme ile ilgili sorun budur. Yeterli sayıda test eklerseniz, p sonunda .05 eşiğini geçecektir ve önemli bir etkinin herhangi bir veri kümesi olduğunu görebilirsiniz.
R
kodunuz hiç çalışmıyor.
df
önce oluşturmanız gerekir (tercihen son boyutunda). Kod satır 6'da yazmaya başladığından beri (cevap metniyle uyuşan) ima, df zaten önceden doldurulmuş 5 satırla zaten var demektir. Belki bunun gibi bir şey amaçlanmıştır: n150<-vector("numeric",150); df<-data.frame(gp=n150,val=n150,pval=n150); init<-1:5; df[init,1]<-c(0,1,0,1,0); df[init,2]<-rnorm(5)
(sonra yukarıdaki kodu çalıştırın) sonra belki: plot(df$pv[6:150])
Bu cevap sadece nihayetinde “anlamlı” bir sonuç alma olasılığı ve bu olaya zamanın @ whuber'in modeli altında dağıtılması ile ilgilidir.
@Whuber modelinde olduğu gibi, , gözlemleri toplandıktan sonra test istatistiğinin değerini göstersin ve gözlemlerinin standart normal olduğunu varsayalım. . O zaman öyle ki öyle ki sürekli bir standart Brownian hareketi gibi davranır, anı görmezden gelirsek ayrık zamanlı bir sürecimiz olduğu gerçeği (aşağıda soldaki grafik).
Let ilk geçiş zamanı belirtmek , zamana bağlı engeller boyunca (testi önemli döner önce gerekli gözlem sayısı).
Dönüştürülmüş işlemi göz önünde ölçekleme ile elde edilen süresi de standart sapma ile ve yeni zaman ölçeği izin vererek bu şekilde (1) ve (2) 'den, normalde ve
Dönüştürülen model için, engeller eşit zamandan bağımsız sabitler haline gelir . Daha sonra ( Nobile ve diğerleri, 1985 ; Ricciardi ve Sato, 1988 ), bu engellerin karşısındaki OU işleminin ilk geçiş zamanı in katlanarak yaklaşık olarak üssel olarak bazı parametreler ile dağıtıldığı ( 'deki engellere bağlı olarak ) ( için aşağıda tahmin edilmiştir ). içinde boyutunda fazladan bir nokta kütlesi de vardır . "Reddetme"sonuçta olasılık 1 olur. Dolayısıyla, ("anlamlı" bir sonuç almadan önce toplanması gereken gözlemlerin sayısı), yaklaşık olarak beklenen bir log üstel dağılımını izler Bu nedenle, yalnızca olması durumunda (yeterli bir süre için) sınırlı bir beklentisi vardır. önemi büyük seviyeleri ).Tλ>1α
Yukarıdakiler , gerçek model için ayrık olduğu ve gerçek sürecin sürekli-zamandan farklı olduğu gerçeğini görmezden gelir . Bu nedenle, yukarıdaki model engel geçildikten olasılığını tahminini fazla (ve hafife ) sürekli-zaman örnek yol sadece geçici bariyerini geçebilir, çünkü içinde-iki bitişik ayrık zaman noktaları ve . Ama böyle olaylar geniş için önemsiz olasılığına sahip olmalıdır . E T t t + 1 t
Aşağıdaki şekil, log-log ölçeğindeki Kaplan-Meier tahminini ve üstel sürekli zaman yaklaşımı (kırmızı çizgi) için hayatta kalma eğrisini göstermektedir.
R kodu:
# Fig 1
par(mfrow=c(1,2),mar=c(4,4,.5,.5))
set.seed(16)
n <- 20
npoints <- n*100 + 1
t <- seq(1,n,len=npoints)
subset <- 1:n*100-99
deltat <- c(1,diff(t))
z <- qnorm(.975)
s <- cumsum(rnorm(npoints,sd=sqrt(deltat)))
plot(t,s,type="l",ylim=c(-1,1)*z*sqrt(n),ylab="S(t)",col="grey")
points(t[subset],s[subset],pch="+")
curve(sqrt(t)*z,xname="t",add=TRUE)
curve(-sqrt(t)*z,xname="t",add=TRUE)
tau <- log(t)
y <- s/sqrt(t)
plot(tau,y,type="l",ylim=c(-2.5,2.5),col="grey",xlab=expression(tau),ylab=expression(Y(tau)))
points(tau[subset],y[subset],pch="+")
abline(h=c(-z,z))
# Fig 2
nmax <- 1e+3
nsim <- 1e+5
alpha <- .05
t <- numeric(nsim)
n <- 1:nmax
for (i in 1:nsim) {
s <- cumsum(rnorm(nmax))
t[i] <- which(abs(s) > qnorm(1-alpha/2)*sqrt(n))[1]
}
delta <- ifelse(is.na(t),0,1)
t[delta==0] <- nmax + 1
library(survival)
par(mfrow=c(1,1),mar=c(4,4,.5,.5))
plot(survfit(Surv(t,delta)~1),log="xy",xlab="t",ylab="P(T>t)",conf.int=FALSE)
curve((1-alpha)*exp(-.125*(log(x))),add=TRUE,col="red",from=1,to=nmax)
Yukarıdaki tartışmanın, çoklukluluğun, verdiğiniz şanstan daha aşırı olma ihtimalinden kaynaklandığı, varolma etkisi yaratma şansından değil, sık sık dünya görüşü için olduğu söylenmelidir. Sorunun kök nedeni, p-değerleri ve tip I hatalarının, zamanın geri-geri-bilgi akış koşullandırma sistemini kullanmasıdır; bu, “buraya nasıl geldiğinizi” ve bunun yerine ne olabileceğini önemli kılar . Öte yandan, Bayes Paradigması, veri üzerindeki değil, parametrenin kendisi üzerindeki bir etki hakkında şüpheciliği kodlamaktadır. Bu, her bir arka olasılığın, 5 dakika önce bir etkinin başka bir arka olasılığını hesaplayıp hesaplamamasıyla aynı şekilde yorumlanmasını sağlar. Daha fazla ayrıntı ve basit bir simülasyon http://www.fharrell.com/2017/10/continuous-learning-from-data-no adresinde bulunabilir .
Bazı hipotezleri test etmek için , boyutunda bir örnek toplayan bir araştırmacı olduğunu . Uygun bir test istatistiğinin kritik değerini aşması durumunda reddeder . , , boyutunda başka bir örnek toplar ve testin birleştirilmiş örnek için reddetmesi halinde reddeder . Hala reddetmediği takdirde, bu şekilde, toplamda kadar devam eder .
Bu problem zaten Kraliyet İstatistik Derneği Dergisi'nden P. Armitage, CK McPherson ve BC Rowe (1969) tarafından ele alınmaktadır . Seri A (132), 2, 235-244: "Veri Toplamada Tekrarlanan Önemlilik Testleri" .
Burada tartışılan bu konudaki Bayes bakış açısı, bu arada, Berger ve Wolpert (1988), "Olabilirlik İlkesi" , Bölüm 4.2'de tartışılmaktadır .
İşte Armitage ve arkadaşlarının sonuçlarının (aşağıdaki kod) kısmi bir kopyası, olduğunda önem seviyelerinin nasıl azaldığını ve aynı zamanda seviye kritik değerlerini geri yüklemek için olası düzeltme faktörlerini gösterir . Şebeke aramasının çalışması biraz zaman alır, uygulama oldukça etkin olmayabilir.α
Deneme sayısının bir fonksiyonu olarak standart reddetme kuralının büyüklüğü
Farklı için kritik değerleri artırmanın bir fonksiyonu olarak boyut
bir fonksiyonu olarak% 5 testi geri yüklemek için ayarlanmış kritik değerler
reps <- 50000
K <- c(1:5, seq(10,50,5), seq(60,100,10)) # the number of attempts a researcher gives herself
alpha <- 0.05
cv <- qnorm(1-alpha/2)
grid.scale.cv <- cv*seq(1,1.5,by=.01) # scaled critical values over which we check rejection rates
max.g <- length(grid.scale.cv)
results <- matrix(NA, nrow = length(K), ncol=max.g)
for (kk in 1:length(K)){
g <- 1
dev <- 0
K.act <- K[kk]
while (dev > -0.01 & g <= max.g){
rej <- rep(NA,reps)
for (i in 1:reps){
k <- 1
accept <- 1
x <- rnorm(K.act)
while(k <= K.act & accept==1){
# each of our test statistics for "samples" of size n are N(0,1) under H0, so just scaling their sum by sqrt(k) gives another N(0,1) test statistic
rej[i] <- abs(1/sqrt(k)*sum(x[1:k])) > grid.scale.cv[g]
accept <- accept - rej[i]
k <- k+1
}
}
rej.rate <- mean(rej)
dev <- rej.rate-alpha
results[kk,g] <- rej.rate
g <- g+1
}
}
plot(K,results[,1], type="l")
matplot(grid.scale.cv,t(results), type="l")
abline(h=0.05)
cv.a <- data.frame(K,adjusted.cv=grid.scale.cv[apply(abs(results-alpha),1,which.min)])
plot(K,cv.a$adjusted.cv, type="l")