Perché la raccolta di dati fino a quando non si ottiene un risultato significativo aumenta il tasso di errore di tipo I?


60

Mi chiedevo esattamente perché la raccolta di dati fino a quando non si ottiene un risultato significativo (ad es. ) (ad es. P-hacking) aumenta il tasso di errore di tipo I?p<.05

Gradirei anche una Rdimostrazione di questo fenomeno.


6
Probabilmente intendi "p-hacking", perché "harking" si riferisce a "Ipotizzare dopo che i risultati sono noti" e, sebbene ciò possa essere considerato un peccato correlato, non è quello che ti sembra di chiedere.
whuber

2
Ancora una volta, xkcd risponde a una buona domanda con le immagini. xkcd.com/882
Jason,

7
@Jason Non sono d'accordo con il tuo link; che non parla di raccolta cumulativa di dati. Il fatto che anche la raccolta cumulativa di dati sulla stessa cosa e l' utilizzo di tutti i dati necessari per calcolare il valore sia errata è molto più non banale del caso in quel xkcd. p
JiK,

1
@JiK, buona chiamata. Mi sono concentrato sull'aspetto "continua a provare fino a quando non otteniamo un risultato che ci piace", ma hai assolutamente ragione, c'è molto di più nella domanda a portata di mano.
Jason,

@whuber e user163778 hanno dato risposte molto simili a quelle discusse per il caso praticamente identico di "test A / B (sequenziali)" in questo thread: stats.stackexchange.com/questions/244646/… Lì, abbiamo discusso in termini di Family Wise Error tassi e necessità di adeguamento del valore p in test ripetuti. Questa domanda infatti può essere considerata come un problema di test ripetuto!
tomka,

Risposte:


87

Il problema è che ti stai dando troppe possibilità di superare il test. È solo una versione elaborata di questa finestra di dialogo:

Ti girerò per vedere chi paga per cena.

OK, chiamo teste.

Ratti, hai vinto. I migliori due su tre?


Per capirlo meglio, considera un modello semplificato ma realistico di questa procedura sequenziale . Supponiamo che inizi con una "prova" di un certo numero di osservazioni, ma sei disposto a continuare a sperimentare più a lungo per ottenere un valore p inferiore a . L'ipotesi nulla è che ogni osservazione X i provenga (indipendentemente) da una distribuzione normale standard. L'alternativa è che l' X i provengono indipendentemente da un'unità varianza distribuzione normale con una media diversa da zero. La statistica del test sarà la media di tutte le n osservazioni, ˉ X , divise per il loro errore standard, 1 / 0.05XiXinX¯ . Per un test su due lati, i valori critici sono0,025e0,975punti percentuali della distribuzione normale standard,Zα=±1,96circa.1/n0.0250.975Zα=±1.96

Questo è un buon test - per un singolo esperimento con una dimensione del campione fissa . Ha esattamente un 5 % possibilità di rifiutare l'ipotesi nulla, non importa quale n potrebbe essere.n5%n

Facciamo algebricamente convertire questo ad una prova equivalente sulla base della somma di tutti gli valori, S n = X 1 + X 2 + + X n = n ˉ X .n

Sn=X1+X2++Xn=nX¯.

Pertanto, i dati sono "significativi" quando

|Zα||X¯1/n|=|Snn/n|=|Sn|/n;

questo è,

(1)|Zα|n|Sn|.

Se siamo intelligenti, ridurremo le nostre perdite e ci arrenderemo quando diventerà molto grande e i dati non saranno ancora entrati nell'area critica.n

Questo descrive una camminata casuale . La formula ( 1 ) equivale a erigere una "recinzione" parabolica curva o barriera attorno al diagramma della camminata casuale ( n , S n ) : il risultato è "significativo" se un punto qualsiasi della camminata casuale colpisce la recinzione.Sn(1)(n,Sn)

È una proprietà delle passeggiate casuali che se aspettiamo abbastanza a lungo, è molto probabile che ad un certo punto il risultato sembrerà significativo.

Ecco 20 simulazioni indipendenti fino a un limite di campioni. Iniziano tutti i test su n = 30 campioni, a quel punto controlliamo se ciascun punto si trova al di fuori delle barriere che sono state disegnate secondo la formula ( 1 ) . Dal momento in cui il test statistico è per primo "significativo", i dati simulati sono colorati in rosso.n=5000n=30(1)

figura

n

25%α=5%500025%

Si noti che in tutti e quattro i casi "significativi", poiché i test sono continuati, i dati hanno smesso di apparire significativi in ​​alcuni punti. Nella vita reale, uno sperimentatore che si ferma presto perde la possibilità di osservare tali "inversioni". Questa selettività attraverso l'interruzione facoltativa pregiudica i risultati.

Nei test sequenziali onestà-bontà, le barriere sono linee. Si diffondono più velocemente delle barriere curve mostrate qui.

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)

12
nO(n)2/π

10
n=5,000,000α=0.051/4

4
α=0.05n

6
p<0.05n1=10nk+1=10nkpnk+1pnkp<0.0510nkA(nk)BB(nk)

10
@CL. Ho anticipato la tua obiezione diversi anni fa: 17 è il mio seme pubblico. Infatti, nei primi mesi (molto di più) le prove sono stato costantemente ottenendo maggiori tassi di rilevanza sostanzialmente più grandi del 20%. Ho impostato il seme su 17 per creare l'immagine finale e sono rimasto deluso dal fatto che l'effetto non sia stato così drammatico. È la vita. Un post correlato (che illustra il tuo punto) è all'indirizzo stats.stackexchange.com/a/38067/919 .
whuber

18

Le persone che non conoscono i test di ipotesi tendono a pensare che una volta che il valore di ap scende al di sotto di 0,05, l'aggiunta di più partecipanti ridurrà ulteriormente il valore di p. Ma questo non è vero. Sotto l'ipotesi nulla, il valore di ap è distribuito uniformemente tra 0 e 1 e può rimbalzare un bel po 'in quell'intervallo.

Ho simulato alcuni dati in R (le mie abilità in R sono piuttosto basilari). In questa simulazione, raccolgo 5 punti dati, ciascuno con un'appartenenza casuale selezionata al gruppo (0 o 1) e ciascuno con una misura di esito selezionata casualmente ~ N (0,1). A partire dal partecipante 6, eseguo un test t ad ogni iterazione.

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
}

I valori di p sono in questa figura. Si noti che trovo risultati significativi quando la dimensione del campione è di circa 70-75. Se mi fermo qui, finirò per credere che le mie scoperte sono significative perché mi sarei perso il fatto che i miei valori di p siano balzati indietro con un campione più ampio (questo in realtà mi è successo una volta con dati reali). Poiché so che entrambe le popolazioni hanno una media di 0, questo deve essere un falso positivo. Questo è il problema con l'aggiunta di dati fino a p <.05. Se aggiungi un numero sufficiente di test, p alla fine supererà la soglia .05 e puoi trovare un effetto significativo in qualsiasi set di dati.

inserisci qui la descrizione dell'immagine


1
Grazie ma il tuo Rcodice non viene eseguito affatto.
Reza,

3
@Reza dovresti creare dfprima (preferibilmente alla sua dimensione finale). Poiché il codice inizia a scrivere alla riga 6, l'implicazione (che si adatta al testo della risposta) è che df esiste già con 5 righe già compilate. Forse si intendeva qualcosa del genere: 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)(quindi eseguire il codice sopra) quindi forse: plot(df$pv[6:150])
Glen_b,

@utente263778 risposta utile e pertinente molto focalizzata. Ma c'è troppa confusione nell'interpretazione del cosiddetto valore p - danza bellezza.
Subhash C. Davar,

@ user163778 - dovresti includere anche il codice per inizializzare tutto
Dason,

17

Questa risposta riguarda solo la probabilità di ottenere in definitiva un risultato "significativo" e la distribuzione del tempo a questo evento secondo il modello di @ whuber.

S(t)=X1+X2++XttX1,X2,

(1)S(t+h)|S(t)=s0N(s0,h),
S(t)

TS(t)±zα/2t

Y(τ)S(t)tτ=lnt

(2)Y(τ)=S(t(τ))t(τ)=eτ/2S(eτ).
Y(τ+δ)
E(Y(τ+δ)|Y(τ)=y0)=E(e(τ+δ)/2S(eτ+δ)|S(eτ)=y0eτ/2)(3)=y0eδ/2
Var(Y(τ+δ)|Y(τ)=y0)=Var(e(τ+δ)/2S(eτ+δ)|S(eτ)=y0eτ/2)(4)=1eδ,
Y(τ)

inserisci qui la descrizione dell'immagine

±zα/2TY(τ)λ±zα/2λ^=0.125α=0.05ατ=0H0T=eT

(5)ET1+(1α)0eτλeλτdτ.
Tλ>1α

TETtt+1t

P(T>t)

inserisci qui la descrizione dell'immagine

Codice R:

# 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)

Grazie! Hai dei riferimenti (standard) per questi risultati? Ad esempio, perché il processo Y è un Ornstein-Uhlenbeck e dove possiamo trovare il risultato del tempo di passaggio indicato?
Grassie,

1
Tτ=0Y(0)


Y(0)

5

Va detto che la discussione di cui sopra è per una visione del mondo frequentista per la quale la molteplicità viene dalle possibilità che si danno i dati di essere più estremi, non dalle possibilità che tu dia un effetto per esistere. La causa principale del problema è che i valori p e gli errori di tipo I utilizzano il condizionamento del flusso di informazioni all'indietro, il che rende importante "come sei arrivato qui" e cosa invece potrebbe essere successo. D'altra parte, il paradigma bayesiano codifica lo scetticismo su un effetto sul parametro stesso, non sui dati. Ciò rende ogni probabilità posteriore di essere interpretata allo stesso modo, indipendentemente dal fatto che tu abbia calcolato un'altra probabilità posteriore di un effetto 5 minuti fa o meno. Maggiori dettagli e una semplice simulazione sono disponibili all'indirizzo http://www.fharrell.com/2017/10/continuous-learning-from-data-no.


1
Immaginiamo un laboratorio guidato dal dottor B, che è un devoto bayesiano. Il laboratorio sta studiando il priming sociale e ha prodotto un flusso costante di documenti che mostrano vari effetti del priming, ogni volta supportato dal fattore BF> 10 di Bayes. Se non eseguono mai test sequenziali, sembra abbastanza convincente. Ma diciamo che imparo che fanno sempre test sequenziali e continuano a ottenere nuovi soggetti fino a quando non ottengono BF> 10 a favore degli effetti di innesco . Quindi chiaramente tutto questo lavoro è inutile. Il fatto che eseguano test sequenziali + selezione fa una differenza enorme, non importa se si basa su valori p di BF.
ameba dice di reintegrare Monica il

1
0.95

1
Ho letto il tuo post sul blog, ho notato la citazione e ho guardato un documento simile ( arresto facoltativo: nessun problema per i bayesiani ) a cui qualcun altro ha collegato nei commenti a un'altra risposta. Ancora non capisco. Se lo "null" (effetti di innesco assenti) è vero, allora se il Dr B è disposto a campionare abbastanza a lungo, sarà in grado di ottenere una probabilità posteriore> 0,95 ogni volta che esegue l'esperimento (esattamente come il Dr F sarebbe in grado di ottieni p <0,05 ogni volta). Se questo è "assolutamente niente di sbagliato", allora non so cosa sia.
ameba dice di reintegrare Monica il

2
Bene, contendo questo "punto più grande". Non penso sia vero. Mentre continuo a ripetere, sotto l'effetto zero di zero e con qualsiasi dato precedente (diciamo un ampio precedente continuo centrato su zero), il campionamento ripetuto produrrà sempre prima o poi una probabilità posteriore> 0,98 concentrata sopra lo zero. Una persona che sta campionando fino a quando ciò accade (cioè applicando questa regola di arresto), sbaglierà ogni volta . Come puoi dire che questa persona avrà torto solo 0,02 volte? Non capisco. In queste particolari circostanze, no, non lo farà, avrà sempre torto.
ameba dice che ripristini Monica il

2
Non penso di esserlo. Il mio punto più grande è che è ingiusto e incoerente incolpare simultaneamente le procedure frequentiste per soffrire di test sequenziali e difendere le procedure bayesiane come non influenzate da test sequenziali. Il mio punto (che è un fatto matematico) è che entrambi sono influenzati esattamente allo stesso modo, il che significa che i test sequenziali possono aumentare l'errore bayesiano di tipo I fino al 100%. Naturalmente, se dici che, in linea di principio, non sei interessato ai tassi di errore di tipo I, allora è irrilevante. Ma anche le procedure frequentiste non dovrebbero essere incolpate per questo.
ameba dice che ripristini Monica il

3

nx1θ=θ0tαcnx2(x1,x2)K

Questo problema sembra essere già stato affrontato da P. Armitage, CK McPherson e BC Rowe (1969), Journal of the Royal Statistical Society. Serie A (132), 2, 235-244: "Test ripetuti di significatività sui dati accumulati" .

Il punto di vista bayesiano su questo tema, anche discusso qui, è, tra l'altro, discusso in Berger e Wolpert (1988), "The Likelihood Principle" , Sezione 4.2.

K>1α

K

inserisci qui la descrizione dell'immagine

Dimensione in funzione dell'aumento dei valori critici per diversiK

inserisci qui la descrizione dell'immagine

K

inserisci qui la descrizione dell'immagine

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")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.