태그 보관물: permutation-test

permutation-test

순열 검정의 모수에 대한 신뢰 구간을 어떻게 작성합니까? 달리 순열 재 샘플은

순열 테스트는 원래 데이터에서 임의로 추출 된 순열 리 샘플을 기반으로하는 중요도 테스트입니다. 교체와 함께 생성되는 부트 스트랩 샘플과 달리 순열 재 샘플은 교체없이 추출됩니다. 다음은 간단한 순열 테스트의 R에서 한 예 입니다. (귀하의 의견은 환영합니다)

순열 테스트에는 큰 장점이 있습니다. 정규성과 같은 특정 모집단 형태가 필요하지 않습니다. 귀무 가설 하에서 간단한 분포를 갖는 통계뿐만 아니라 다양한 통계에 적용됩니다. 모집단의 모양과 크기에 관계없이 (정확한 순열이 사용 된 경우) 매우 정확한 p- 값을 제공 할 수 있습니다.

또한 순열 리샘플링 대신 부트 스트랩 리샘플링을 사용하여 생성 된 테스트와 함께 신뢰 구간을 제공하는 것이 유용한 경우가 많습니다.

신뢰 구간이 구성되는 방법을 설명 (또는 R 코드 만 제공) 할 수 있습니까 (예 : 위 예제에서 두 샘플의 평균 차이)?

편집하다

인터넷 검색 후 나는 이 흥미로운 독서를 발견했다 .



답변

순열 리샘플링을 사용해도됩니다. 그것은 실제로 여러 가지 요인에 달려 있습니다. 순열이 비교적 적은 수이면 순열에 대한 신뢰 구간 추정치가 그리 크지 않습니다. 순열은 다소 회색 영역이며 아마도 괜찮을 것입니다.

이전 코드와의 유일한 차이점은 순열 대신 무작위로 샘플을 생성한다는 것입니다. 예를 들어 1000을 더 많이 생성 해 봅시다. 실험의 1000 회 복제에 대한 차이 점수를 얻으십시오. 중간 950 (95 %)의 컷오프를 수행하십시오. 그것이 당신의 신뢰 구간입니다. 부트 스트랩에서 직접 떨어집니다.

귀하의 예에서 이미 대부분의 작업을 수행했습니다. dif.treat의 길이는 462 개입니다. 따라서 하단 2.5 % 및 상단 2.5 % 컷오프 (각 끝에 약 11 개 항목)가 필요합니다.

이전의 코드 사용 중 …

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

나는 462가 약간 낮다고 말하지만 10,000에 이르는 부트 스트랩은 거의 다른 점수 (평균에 더 가까운)로 나옵니다.

부트 라이브러리가 필요한 간단한 코드를 추가 할 것이라고 생각했습니다 (이전 코드를 기반으로 함).

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

답변

순열 테스트는 정확한 테스트이므로 정확한 p- 값을 제공합니다. 순열 테스트를 부트 스트랩하는 것은 의미가 없습니다.

그 다음으로, 테스트 통계량에 대한 신뢰 구간을 결정하는 것은 추정치가 아닌 샘플을 기반으로 계산되므로 의미가 없습니다. 평균과 같은 추정치에 대한 신뢰 구간을 결정하지만 테스트 통계에 대해서는 신뢰 구간을 결정하지 않습니다.

순열 테스트는 너무 큰 데이터 집합에 사용해서는 안되며 가능한 모든 순열을 더 이상 계산할 수 없습니다. 이 경우 부트 스트랩 절차를 사용하여 사용하는 검정 통계량에 대한 컷오프를 결정하십시오. 그러나 이것은 95 % 신뢰 구간과 거의 관련이 없습니다.

예 : 여기서는 고전적인 T- 통계량을 사용하지만 통계의 경험적 분포를 계산하기 위해 부트 스트랩에 간단한 접근 방식을 사용합니다. 이를 바탕으로 경험적 p- 값을 계산합니다.

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

이 양면 테스트는 대칭 분포에 대해서만 작동한다는 점을 고려하십시오. 비대칭 분포는 일반적으로 단 측으로 만 테스트됩니다.

편집하다 :

좋아, 나는 질문을 오해했다. 차이 추정치에 대한 신뢰 구간을 계산하려면 여기 에 언급 된 코드를 사용하여 각 샘플 내에서 부트 스트랩 할 수 있습니다 . 이것은 치우친 추정치입니다. 일반적으로 CI가 너무 작습니다. 또한 신뢰 구간과 p- 값에 대해 다른 접근 방식을 사용해야하는 이유로 제공된 예를 참조하십시오.


답변

답변의 Joris Meys 코드에서 단일 상황에 더 적용될 수 있도록 수정되었습니다.

다른 것을 편집하려고했지만 완료 할 시간이 없었으며 어떤 이유로 든 언급 할 수 없습니다 (아마도 오래된 질문이기 때문에).

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

답변