순열 테스트에서 P- 값은 0과 같습니다.


15

두 개의 데이터 집합이 있으며 데이터가 크게 다른지 여부를 알고 싶습니다 ( " 두 그룹이 크게 다릅니다? 테스트 사용 "에서 비롯됨 ).

R에서 다음을 수행하여 순열 테스트를 사용하기로 결정했습니다.

permutation.test <- function(coding, lncrna) {
    coding <- coding[,1] # dataset1
    lncrna <- lncrna[,1] # dataset2

    ### Under null hyphotesis, both datasets would be the same. So:
    d <- c(coding, lncrna)

    # Observed difference
    diff.observed = mean(coding) - mean(lncrna)
    number_of_permutations = 5000
    diff.random = NULL

    for (i in 1:number_of_permutations) {
        # Sample from the combined dataset
        a.random = sample (d, length(coding), TRUE)
        b.random = sample (d, length(lncrna), TRUE)
        # Null (permuated) difference
        diff.random[i] = mean(b.random) - mean(a.random)
    }

    # P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
    pvalue = sum(abs(diff.random) >= abs(diff.observed)) / number_of_permutations
    pvalue
}

그럼에도 불구하고이 백서에 따르면 p- 값은 0이 아니어야합니다. http://www.statsci.org/smyth/pubs/permp.pdf

내가 뭘 추천하니? p- 값을 계산하는이 방법입니까?

pvalue = sum(abs(diff.random) >= abs(diff.observed)) / number_of_permutations

좋은 방법? 아니면 다음을 수행하는 것이 더 낫습니까?

pvalue = sum(abs(diff.random) >= abs(diff.observed)) + 1 / number_of_permutations + 1

(1) 질문의 마지막 줄은 의도 한 계산을 실행하는 데 필요한 괄호를 포함하지 않기 때문에 잘못되었습니다. (보다 큰 생산 결과를 보장 두 개의 샘플 (2) 당신은 실제로 순열 테스트를 실시하지 않습니다. 모든 p 값이 불가능하다) 와 중복 일반적으로 할 데이터의 임의의 파티션을 구성 드물게하지만 대체로. 대신 및 의 합집합 내의 보수로 계산 하십시오 . 1a.randomb.randomb.randoma.randomcodinglncrna
whuber

p- 값 은 적어도 관측 된 값 보다 극단 값이므로, 순열 분포를 평가하면 관측 된 통계량은 계산 된 "순열"에 있습니다. 랜덤 화를 수행 할 때 고려 된 순열 통계 중에서 관측 된 통계량을 계산하는 것이 일반적입니다 (유사한 이유로).
Glen_b-복지국 모니카

답변:


15

토론

순열 테스트 는 데이터 집합의 모든 관련 순열을 생성 하고 이러한 순열 각각에 대해 지정된 테스트 통계를 계산하며 통계의 결과 순열 분포 와 관련하여 실제 테스트 통계를 평가합니다 . 이를 평가하는 일반적인 방법은 실제 통계보다 "그 이상"극단적 인 통계의 비율을보고하는 것입니다. 이것을 종종 "p- 값"이라고합니다.

실제 데이터 집합은 이러한 순열 중 하나이므로 통계는 반드시 순열 분포 내에서 찾은 데이터 중 하나 일 것입니다. 따라서 p- 값은 0이 될 수 없습니다.

데이터 집합이 매우 작거나 (일반적으로 약 20-30 개 미만) 테스트 통계가 특히 훌륭한 수학적 형식을 갖지 않는 한 모든 순열을 생성하는 것이 불가능하지는 않습니다. (모든 순열이 생성되는 예 는 R의 순열 테스트에 나타납니다 .) 따라서 순열 테스트의 컴퓨터 구현 은 일반적으로 순열 분포에서 샘플링 됩니다. 그들은 독립적 인 임의 순열을 생성함으로써 그렇게하고 결과가 모든 순열의 대표 샘플이되기를 바랍니다.

따라서 이러한 표본에서 파생 된 모든 숫자 (예 : "p- 값") 는 순열 분포의 특성을 추정 할뿐입니다 . 추정 된 p- 값이 0 인 것이 가능하며 효과가 클 때 종종 발생 합니다. 아무 문제가 없지만 추정 된 p- 값이 올바른 값과 얼마나 다를 수 있는지에 대한 지금까지 무시 된 문제를 즉시 제기 합니까? 비율의 샘플링 분포 (예 : 추정 p- 값)가 이항이므로이 불확실성은 이항 신뢰 구간 으로 해결할 수 있습니다 .


건축물

잘 구성된 구현은 모든 측면에서 논의를 밀접하게 따릅니다. 테스트 통계를 계산하는 루틴으로 시작합니다.이 통계는 두 그룹의 평균을 비교하기 때문입니다.

diff.means <- function(control, treatment) mean(treatment) - mean(control)

데이터 세트의 임의 순열을 생성하고 검정 통계량을 적용하는 다른 루틴을 작성하십시오. 이것에 대한 인터페이스는 호출자가 테스트 통계를 인수로 제공 할 수있게합니다. m배열 의 첫 번째 요소 (참조 그룹으로 가정)를 나머지 요소 ( "처리"그룹)와 비교합니다.

f <- function(..., sample, m, statistic) {
  s <- sample(sample)
  statistic(s[1:m], s[-(1:m)])
}

순열 시험 (두 배열에 저장하는 것으로 여기에서 실제 데이터에 대한 통계를 찾아 먼저 수행 controltreatment그 많은 독립적 인 랜덤 순열에 대한 통계를 찾아 다음)과 :

z <- stat(control, treatment) # Test statistic for the observed data
sim<- sapply(1:1e4, f, sample=c(control,treatment), m=length(control), statistic=diff.means)

이제 p- 값의 이항 추정값과 그에 대한 신뢰 구간을 계산하십시오. 한 가지 방법은 패키지 의 내장 binconf프로 시저를 사용합니다 HMisc.

require(Hmisc)                                    # Exports `binconf`
k <- sum(abs(sim) >= abs(z))                      # Two-tailed test
zapsmall(binconf(k, length(sim), method='exact')) # 95% CI by default

적용 할 수없는 것으로 알려져 있더라도 결과를 다른 테스트와 비교하는 것은 나쁜 생각이 아닙니다. 이 방법 (비교 수단)에서 Student t-test는 일반적으로 좋은 결과를 제공합니다.

t.test(treatment, control)

이 아키텍처는 변수가 동일한 분포를 따르는 지 테스트 할 때 작업 R코드 와 함께보다 복잡한 상황에서 설명됩니다 .


100201.5

set.seed(17)
control <- rnorm(10)
treatment <- rnorm(20, 1.5)

위의 코드를 사용하여 순열 테스트를 실행 한 후 실제 통계를 표시하기 위해 순열 빨간색 샘플과 함께 순열 분포 샘플을 플로팅했습니다.

h <- hist(c(z, sim), plot=FALSE)
hist(sim, breaks=h$breaks)
abline(v = stat(control, treatment), col="Red")

그림

이항 신뢰 한계 계산 결과

 PointEst Lower        Upper
        0     0 0.0003688199

00.000373.16e-050.000370.000370.050.010.001


코멘트

케이 케이/(케이+1)/(+1)

10102=1000.0000051.611.7백만 분의 1 (parts per million) : Student t-test가보고 한 것보다 조금 작습니다. 스튜던트 t- 검정을 사용하여 정당화 할 수있는 정규 난수 생성기로 데이터가 생성되었지만 순열 테스트 결과는 각 관측 그룹 내 분포가 완벽하게 정규적이지 않기 때문에 스튜던트 t- 검정 결과와 다릅니다.


위에서 인용 한 Smyth & Phipson의 논문은 왜 k / N이 p- 값 추정기에 적합하지 않은지를 분명히 보여줍니다. 간단히 말해서, 알파 = 0.05와 같은 관련 유의 수준에 대해, P ((k / N) <α | H0)는 놀랍게도 알파보다 클 수있다. 이는 k / N을 p- 값 추정기로 사용하고 0.05를 기각 임계 값으로 사용하는 랜덤 순열 검정은 귀무 가설을 5 % 이상 거부합니다. p- 값이 0이면이 문제의 극단적 인 경우입니다. alpha = 0의 기준을 사용하면 null을 거부하지 않을 것으로 예상되지만 b / m은 null에서 0과 같으므로 잘못된 거부로 이어집니다.
Trisoloriansunscreen

1
@Tal 특정한 목적을위한 "잘못된 선택" . 통계 학자로서 다른 사람들과 구별되는 것은 데이터 분석 및 의사 결정에서 변동의 역할에 대한 이해와 그 변동성을 적절하게 정량화하는 능력입니다. 그것이 나의 대답에서 예시되고 암시 적으로 옹호 된 접근법입니다. 그것이 수행 될 때 당신이 묘사 한 것과 같은 문제는 없다. 왜냐하면 순열 절차의 사용자는 그것의 한계와 그 강점을 이해하게되고 그의 목표에 따라 행동 할 자유가 있기 때문이다.
whuber

13

BMB+1M+1

(B는 관측치보다 크거나 같은 통계량을 얻은 랜덤 순열의 수이고 M은 샘플링 된 총 랜덤 순열 수입니다.)

B미디엄


1
+1 이것은 논문의 요점을 잘 요약 한 것입니다. 특히 추정 된 p- 값과 실제 순열 p- 값의 차이에주의를 기울여 주셔서 감사합니다.
whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.