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


9

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

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

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

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

편집하다

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

답변:


7

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

이전 코드와의 유일한 차이점은 순열 대신 무작위로 샘플을 생성한다는 것입니다. 예를 들어 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)

감사합니다. 그것은 사용하여 샘플을 생성하기 위해 확인을인가 sample하고 replace=TRUE? 같은 패키지를 사용해야 할 이유가 boot있습니까?
George Dontas

일반적으로 교체가 완료되므로 TRUE로 설정하려고합니다. 이유는 ... 패키지가 최적화되어 더 빨리 실행되어야한다는 것입니다. R을 크게 설정하면 문제가 될 수 있습니다. 보시다시피 코드는 훌륭하고 간결합니다. 또한 쉽게 자신의 롤링을 얻을 수없는 많은 기능이 있습니다.
John

boot.ci는 신뢰 구간을 반환합니다. p.value를 제공하는 (부팅) 기능이 있습니까? (생성 된 총 샘플 수에 대해 적어도 관찰 된 것보다 높은 차이 수의 비율로서)
George Dontas

좋아, 나는 그것을 얻는 방법을 발견했다 :sum(b$t>=b$t0)/b$R
George Dontas

@ gd047 : 이것이 계산하는 단측 p- 값임을 고려하십시오.
Joris Meys

4

순열 테스트는 정확한 테스트이므로 정확한 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- 값에 대해 다른 접근 방식을 사용해야하는 이유로 제공된 예를 참조하십시오.


1
가능한 모든 순열을 계산할 수없는 데이터 집합에 순열 테스트를 사용해서는 안되는 이유를 설명 할 수 있습니까?
Andy W

@Andy W : 먼저 "순열 테스트"를 정의하십시오. 나를 위해 순열 테스트는 가능한 모든 순열을 사용하는 정확한 테스트입니다. 더 큰 데이터 세트에서는 불가능합니다. "대략 순열 테스트"는 실제로 Monte Carlo의 간단한 방법이며, 그렇게해야합니다. 그 다음으로, 중앙 한계 정리는 대부분의 경우 큰 데이터 세트를 사용할 때 테스트 통계의 분포와 관련된 가정이 충족됨을 보장합니다. 복잡한 테스트에서 큰 데이터 집합에 순열 테스트를 사용하면 중요한 값을 추가하지 않고도 계산 시간이 너무 길어집니다. my2cents
Joris Meys

나는 순열 테스트를 부트 스트래핑하는 것과 같은 말을하지 않았다. 나는 [SECTION 14.5 | 요약], 링크 된 pdf.
George Dontas

@ gd047 그렇다면 귀하의 질문을 잘못 읽었습니다. 그러나 신뢰 구간과 p. 값은 엄격하게 구분해야합니다. 신뢰 구간은 각 샘플 내에서 부트 스트래핑을 기반으로 추정되며 (정의에 의해 바이어스되지만) 순열 테스트는 전체 데이터 집합에 대한 순열에 의해 수행됩니다. 그것들은 완전히 다른 두 가지입니다.
Joris Meys

@Kevin : 코드가 옳았습니다. 코드를 다시 읽으십시오 .는 apply 내에서 익명 함수 x[6:11]의 인수 x를 나타냅니다 . 혼란 스러울 수 있지만 편집 결과가 매우 잘못되었습니다. 코드를 편집하기 전에 생각해야 할 것에 대해 의견을 말하십시오. 롤백을 저장합니다. 더 혼란을 피하기 위해 다음과 같이 변경했습니다 x.i
Joris Meys

0

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