중요한 결과를 얻을 때까지 데이터를 수집하는 이유는 제 1 종 오류율을 증가시키는 이유는 무엇입니까?


60

중요한 결과 (예 : )가 얻어 질 때까지 (즉, p- .. 해킹) Type I 오류율이 증가 할 때까지 왜 데이터를 수집하는지 궁금합니다 .p<.05

R이 현상에 대한 시연 도 대단히 감사하겠습니다 .


6
"하킹 (harking)"은 "결과가 알려진 후의 가설 화"를 의미하기 때문에 아마도 "p-hacking"을 의미 할 수 있으며, 이것이 관련 죄로 간주 될 수 있지만 그것은 당신이 요구하는 것처럼 보이지 않습니다.
whuber

2
다시 한번, xkcd는 사진으로 좋은 질문에 대답합니다. xkcd.com/882
Jason

7
@Jason 나는 당신의 링크에 동의하지 않습니다; 누적 데이터 수집에 대해서는 이야기하지 않습니다. 똑같은 것에 대한 누적 데이터 수집과 p- 값 을 계산하는 데 필요한 모든 데이터를 사용하는 것조차도 xkcd의 경우보다 훨씬 중요하지 않습니다. p
JiK

1
@JiK, 공정한 전화. 나는 "우리가 좋아하는 결과를 얻을 때까지 계속 노력하라"는 측면에 초점을 맞추었지만, 당신은 절대적으로 맞습니다. 문제에 더 많은 것이 있습니다.
Jason

@whuber 및 user163778이 스레드에서 "A / B (연속) 테스트"의 실질적으로 동일한 경우에 논의 된 바와 같이 매우 비슷한 응답을했다 : stats.stackexchange.com/questions/244646/... 가, 우리는 가족 현명한 오류의 관점에서 주장 반복 테스트에서 p- 값 조정에 대한 속도와 필요성. 이 질문은 실제로 반복되는 테스트 문제로 볼 수 있습니다!
tomka

답변:


87

문제는 시험에 합격 할 기회가 너무 많다는 것입니다. 이 대화 상자의 멋진 버전 일뿐입니다.

저녁을 누가 지불하는지 보도록하겠습니다.

좋아, 나는 머리를 부른다.

쥐, 이겼어 3 점 중 2 점?


이를 더 잘 이해하려면 이 순차적 절차의 단순화 된 모델이지만 현실적인 모델을 고려하십시오 . 특정 수의 관측치에 대한 "시험 실행"으로 시작하지만 p- 값이 미만이되도록 더 오래 실험하려고한다고 가정합니다 . 귀무 가설은 각 관측치 X i 가 표준 정규 분포에서 (독립적으로) 나온다는 것입니다. 대안은 X i 가 0이 아닌 평균을 갖는 단위 분산 정규 분포와 독립적으로 오는 것입니다. 시험 통계는 모두의 평균 될 것입니다 n 개의 관측 ˉ X 개개인의 표준 오차로 나눈 1 / 0.05XiXinX¯ . 양측 검정의 경우 임계 값은표준 정규 분포의0.0250.975% 포인트,Zα=±1.96입니다.1/n0.0250.975Zα=±1.96

이 방법은 고정 된 표본 크기 사용한 단일 실험에 적합합니다 . n 이 무엇이든 상관없이 귀무 가설을 기각 할 확률 은 정확히 5 % 입니다.n5%n

이것을 모든 n 값 의 , S n = X 1 + X 2 + + X n = n ˉ X 에 대한 등가 테스트로 대수적으로 변환합시다 .n

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

따라서 데이터는 "중요"

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

그건,

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

우리가 영리하다면 손실을 줄이고 이 매우 커지고 데이터가 여전히 중요한 지역에 들어 가지 않으면 포기할 것 입니다.n

랜덤 워크 대해 설명합니다 . 수식 ( 1 ) 임의의 거리의 플롯 주위 곡선 포물선 "차단"또는 벽을 세움 금액 ( N , S의 N ) : 만약 결과가 "중요한"인 임의의 랜덤 거리의 지점 펜스 안타.Sn(1)(n,Sn)

우리가 충분히 오래 기다린다면 어느 시점에서 결과가 크게 보일 가능성이 매우 큰 것은 무작위 보행의 특성입니다 .

n=5000n=30(1)

그림

n

25%α=5%500025%

테스트는 계속 모든 4 개의 "중요한"경우에, 데이터는 것을 알 중지 몇 가지 점에서 의미를 찾고 있습니다. 실제 생활에서 일찍 멈추는 실험자는 그러한 "회복"을 관찰 할 기회를 잃고 있습니다. 선택적 중지를 통한이 선택성 은 결과를 바이어스합니다.

정직하고 순차 순차 테스트에서 장벽은 선입니다. 여기에 표시된 곡선 장벽보다 빠르게 퍼집니다.

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. 나는 몇 년 전에 당신의 이의를 예상했습니다 : 17은 나의 공개 씨앗입니다. 사실, 초기 (더 이상) 시험에서 나는 일관되게 얻고 있었다 더 큰 20 %보다 훨씬 더 큰 의미의 요금을. 나는 최종 이미지를 만들기 위해 시드를 17로 설정했으며 그 효과가 그렇게 극적이지 않은 것에 실망했습니다. C'est la vie. 관련 게시물 (포인트 설명)은 stats.stackexchange.com/a/38067/919에 있습니다.
whuber

18

가설 검정에 익숙하지 않은 사람들은 일단 ap 값이 0.05 미만으로 떨어지면 참가자를 더 추가하면 p 값이 더 낮아질 것이라고 생각하는 경향이 있습니다. 그러나 이것은 사실이 아닙니다. 귀무 가설 하에서 ap 값은 0과 1 사이에 균일하게 분포되며 해당 범위에서 상당히 약간 튀어 오를 수 있습니다.

R에서 일부 데이터를 시뮬레이션했습니다 (R 기술은 매우 기본적 임). 이 시뮬레이션에서는 무작위로 선택된 그룹 구성원 (0 또는 1)과 무작위로 선택된 결과 측정 값 ~ N (0,1)을 갖는 5 개의 데이터 포인트를 수집합니다. 참가자 6부터는 매번 반복 할 때마다 t- 테스트를 수행합니다.

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 값은이 그림에 있습니다. 샘플 크기가 약 70-75 일 때 중요한 결과를 얻습니다. 내가 거기에서 멈 추면 내 p 값이 더 큰 샘플로 되돌아 갔다는 사실을 놓 쳤기 때문에 내 연구 결과가 중요하다는 사실을 알게 될 것입니다 (실제 데이터로 한 번 나에게 일어났습니다). 두 모집단의 평균이 0임을 알고 있기 때문에 이것은 오 탐지 여야합니다. 이것은 p <.05까지 데이터를 추가 할 때 발생하는 문제입니다. 충분한 테스트를 수행하면 p는 결국 .05 임계 값을 넘어 데이터 세트에 큰 영향을 줄 수 있습니다.

여기에 이미지 설명을 입력하십시오


1
고맙지 만 R코드가 전혀 실행되지 않습니다.
Reza

3
@Reza df먼저 (바람직하게는 최종 크기로) 작성해야합니다 . 코드 행 6 (답의 텍스트에 맞는) 암시에서 쓰기 시작부터 이미 5 개 행이 존재 df라고 이미 가득 차 있다는 것이다 어쩌면이 같은 의도되었다. 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)(다음 위의 코드를 실행) 아마도 : plot(df$pv[6:150])
Glen_b

@ user263778은 유용하고 적절한 답변에 매우 집중했지만, 소위 춤추는 아름다움이라고 불리는 p- 값을 해석하는 데 너무 많은 혼란이 있습니다.
Subhash C. Davar

@ user163778-모든 것을 초기화하는 코드를 포함시켜야합니다
Dason

17

이 답변은 궁극적으로 "중요한"결과를 얻을 가능성과 @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(τ)

여기에 이미지 설명을 입력하십시오

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

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

TETtt+1t

P(T>t)

여기에 이미지 설명을 입력하십시오

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)

감사! 이 결과에 대한 (표준) 참조가 있습니까? 예를 들어, 왜 Y 과정이 Ornstein-Uhlenbeck이며 통과 시간 결과를 어디에서 찾을 수 있습니까?
Grassie

1
Tτ=0Y(0)


Y(0)

5

위의 논의는 당신이 존재할 수있는 기회가 아니라 데이터가 더 극단적 일 수있는 기회로부터 다중성이 나오는 빈번한 세계관에 대한 것입니다. 문제의 근본 원인은 p- 값과 유형 I 오류가 뒤로 시간 뒤로 정보 흐름 조절을 사용하기 때문에 "여기에 도착한 방법"과 대신 발생할 수 있는 일이 중요하다는 것입니다. 반면 베이지안 패러다임은 데이터가 아닌 매개 변수 자체에 미치는 영향에 대한 회의론을 인코딩합니다. 이렇게하면 5 분 전에 효과의 다른 사후 확률을 계산했는지 여부에 관계없이 각 사후 확률이 동일하게 해석됩니다. 자세한 내용과 간단한 시뮬레이션은 http://www.fharrell.com/2017/10/continuous-learning-from-data-no 에서 확인할 수 있습니다 .


1
독실한 베이지안 B 박사가 이끄는 실험실을 상상해 봅시다. 이 연구소는 소셜 프라이밍을 연구하고 있으며 Bayes factor BF> 10이 지원할 때마다 프라이밍의 다양한 효과를 보여주는 꾸준한 논문을 작성했습니다. 순차 테스트를 수행하지 않으면 매우 설득력이 있습니다. 그러나 나는 그들이 프라이밍 효과에 찬성하여 BF> 10을 얻을 때까지 항상 순차적 테스트를 수행하고 새로운 과목을 계속 받는다는 것을 배우십시오 . 그렇다면 분명히이 일의 전체가 가치가 없습니다. BF의 p- 값을 기반으로하더라도 순차적 테스트 + 선택을 수행한다는 사실은 큰 차이를 만듭니다.
amoeba는 Reinstate Monica가

1
0.95

1
귀하의 블로그 게시물을 읽고 따옴표를 발견했으며 다른 사람이 다른 답변에 대한 의견에 다른 사람과 연결된 유사한 논문 ( 선택적 중지 : Bayesians에 대한 문제 없음 )을 보았습니다 . 나는 아직도 그것을 얻지 못한다. "널 (null)"(프라이밍 효과 없음)이 참인 경우, B 박사가 충분히 오래 표본을 추출 할 경우, 매번 실험을 수행 할 때마다 > 0.95 이상의 사후 확률을 얻을 수 있습니다 (D 박사가 매번 p <0.05를 얻습니다). 이것이 "아무것도 잘못된 것"이라면 나는 무엇인지 모른다.
amoeba는 Reinstate Monica

2
글쎄, 나는이 "더 큰 지점"에 이의를 제기한다. 나는 이것이 사실이라고 생각하지 않습니다. 반복적으로, 영 (zero)의 영 (null) 효과 아래에서 그리고 주어진 이전 (0을 중심으로 한 연속적인 넓은 연속이라고하자)과 함께, 반복 된 샘플링은 항상 조만간> 0.98 후방 확률을 산출합니다. 이러한 상황이 발생할 때까지 샘플링하는 사람 (즉,이 중지 규칙 적용)은 매번 잘못 될 것 입니다. 이 사람이 0.02에 불과하다고 어떻게 말할 수 있습니까? 이해가 안 돼요 이러한 특별한 상황에서 그는 결코 그렇지 않을 것이며, 항상 틀릴 것입니다.
amoeba는

2
나는 생각하지 않습니다. 저의 가장 큰 요점은 순차적 테스트로 고통받는 잦은 절차를 동시에 비난하고 순차적 테스트의 영향을받지 않은 베이지안 절차를 방어하는 것은 불공평하고 일관성이 없다는 것입니다. 필자의 요점 (수학적 사실)은 둘 다 정확히 같은 방식으로 영향을 받는다는 것입니다. 즉, 순차적 테스트를 통해 베이지안 유형 I 오류를 100 %까지 늘릴 수 있습니다. 물론 당신이 원칙적으로 타입 I 오류율에 관심이 없다고 말하면, 그것은 관련이 없습니다. 그러나 빈번한 절차도 그에 대한 비난을 받아서는 안됩니다.
amoeba는 Reinstate Monica가

3

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

이 문제는 이미 P. Armitage, CK McPherson 및 BC Rowe (1969), 왕립 통계 학회지에 의해 해결 된 것으로 보입니다 . 시리즈 A (132), 2, 235-244 : "누적 데이터에 대한 반복적 유의성 테스트" .

여기서도 논의 된이 문제에 대한 베이지안 관점은 Berger and Wolpert (1988), "우연성 원리" , 섹션 4.2 에서 논의되었다 .

K>1α

K

여기에 이미지 설명을 입력하십시오

다른 대한 임계 값을 증가시키는 함수로서의 크기K

여기에 이미지 설명을 입력하십시오

의 함수로 5 % 테스트를 복원하도록 임계 값 조정K

여기에 이미지 설명을 입력하십시오

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")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.