두 변수가 동일한 분포를 따르는 지 여부를 테스트하려면 두 변수를 정렬 한 다음 상관 관계를 확인하는 것이 좋은 테스트입니까? 이 값이 높으면 (적어도 0.9?) 변수는 같은 분포에서 나옵니다.
여기서 분포는 "정상", "카이 제곱", "감마"등을 의미합니다.
두 변수가 동일한 분포를 따르는 지 여부를 테스트하려면 두 변수를 정렬 한 다음 상관 관계를 확인하는 것이 좋은 테스트입니까? 이 값이 높으면 (적어도 0.9?) 변수는 같은 분포에서 나옵니다.
여기서 분포는 "정상", "카이 제곱", "감마"등을 의미합니다.
답변:
이것이 좋은 테스트인지 아닌지 알아 봅시다. 잘못되었다고 주장하거나 한 가지 경우 잘 작동하지 않는다는 것을 보여주는 것보다 더 많은 것이 있습니다. 대부분의 테스트는 일부 상황에서 제대로 작동하지 않으므로 제안 된 테스트가 좋은 선택이 될 수있는 환경을 식별하는 데 종종 직면합니다.
다른 가설 검정과 마찬가지로이 검정은 (a) 귀무 가설 및 대립 가설 및 (b) 가설을 구별하기위한 검정 통계량 (상관 계수)으로 구성됩니다.
귀무 가설은 두 변수가 동일한 분포에서 나온다는 것입니다. 정확히 말하면, 우리는 변수의 이름을 수 있도록 및 Y 우리가 관찰 한 가정 n은 X 의 경우 X 라고, x를 전 = ( X 1 , X 2 , ... , X n은 X를 ) 및 N Y 의 경우 Y 라는 Y 나는 . 귀무 가설은 모든 X 및 Y 인스턴스 가 독립적이며 동일하게 분포되어 있다는 것입니다 (iid).
우리의 (a)의 모든 인스턴스 것을 대체 가설로하자 일부 기본 분포에 따라 IID하는 F X 와 (b)의 모든 인스턴스 Y는 몇 가지 기본 분포에 따라 IID입니다 F Y 하지만, (C) F 는 F 와 다르다는 Y . (따라서 우리는 x i 간의 상관 관계, y i 간의 상관 관계, x i 와 y j 간의 상관 관계또는 x 또는 y 사이의 분포 차이를찾지 않습니다.별도로 : 그럴듯하지 않은 것으로 가정합니다.)
제안 된 통계량은 가정 (이 공통 값 통화 N )과의 상관 계수를 계산한다 ( X [ I ] , Y [ I ]를 ) (정상적으로, [ I ] 로 지정한 I 번째 최소 데이터). 이것을 t ( x , y )라고 부릅니다 .
통계에 상관없이 -이 상황에서 제안 - 우리는 항상 수행 할 수 순열 테스트를. 귀무 가설 하에서 데이터의 가능성 ( ( x 1 , x 2 , … , x n ) , ( y 1 , y 2 , … , y n ) ) 은 2 n의 순열 가능성과 같습니다. 데이터 값. 즉, 데이터의 절반을 X에 할당 하고 다른 절반을 Y에 할당순수한 무작위 우연의 일치입니다. 이것은 iid 가정과 라는 귀무 가설의 단순하고 직접적인 결과입니다 .
따라서, 샘플링 분포 , 조건부 관측에이 X I 및 Y I를 , 모든 값의 분포이다 t 모두 달성 ( 2 N은 ) ! 데이터의 순열. 우리는 α = .05 ( 95 % 신뢰도에 해당) 와 같은 주어진 의도 된 테스트 크기 α 에 대해 t 의 샘플링 분포에서 양면 임계 영역을 구성하기 때문에 관심이 있습니다. 의 가능한 값의 % t (하이 측에 높은 상관 관계가 유사한 분포와 낮은 상관 관계와 일치하기 때문에이 아니다). 이것은 데이터가 다른 분포에서 오는 것을 결정하기 위해 상관 계수가 얼마나 큰지를 결정하는 방법입니다.
왜냐하면 (또는, 만약 당신이 좋아하면, ( 2 N,2n데이터를 두 개의 크기 조각으로나누는 방법의 수를 계산합니다.n) 작은n조차도커지기 때문에 샘플링 분포를 정확하게 계산하는 것이 불가능하므로 시뮬레이션을 사용하여 샘플링합니다. (예를 들어,n=16 인경우 ( 2n및(2N)! ≈2.63×1035.) 약 천 개의 샘플이 종종 충분하다 (그리고 우리가 착수하려는 탐사에 확실히 사용될 것이다).
우리가 알아야 할 두 가지가 있습니다. 첫째, 표본 분포가 귀무 가설 하에서 어떻게 보이는가. 둘째,이 검정은 다른 분포를 얼마나 잘 구별합니까?
복잡한 문제가 있습니다. 샘플링 분포는 데이터의 특성에 따라 다릅니다. 우리가 할 수있는 모든 것은 우리가 연구에 관심이있는 모든 것을 모방하기 위해 만들어진 현실적인 데이터를보고 시뮬레이션에서 배운 것이 우리 자신의 상황에 적용되기를 희망하는 것입니다.
설명을 위해이 작업을에서 수행했습니다 R
. 그것은 자연스럽게 세 조각으로 나뉩니다.
검정 통계량 를 계산하는 함수 입니다. 좀 더 일반적이기를 원하기 때문에 내 버전 은 (정렬 된) 더 큰 데이터 집합의 값을 선형으로 보간하여 (정렬 된) 더 작은 데이터 집합과 일치하도록 다른 크기의 데이터 집합 ( n x ≠ n y )을 처리합니다. 이것은 이미 함수에 의해 수행되었으므로 결과를 얻습니다.R
qqplot
test.statistic <- function(x, y) {
transform <- function(z) -log(1-z^2)/2
fit <- qqplot(x,y, plot.it=FALSE)
transform(cor(fit$x, fit$y))
}
불필요하지만 시각화에 도움이되는 약간의 왜곡은 널 통계의 분포를 대략 대칭으로 만드는 방식으로 상관 계수를 다시 표현합니다. 그게 뭐야 transform
.
샘플링 분포의 시뮬레이션. 입력이 함수는 반복 횟수 받아 n.iter
어레이의 두 데이터 세트와 함께 x
와 y
. n.iter
검정 통계량 의 값 배열을 출력합니다 . 내부 작업은 비 R
사용자 에게도 투명해야합니다 .
permutation.test <- function(n.iter, x, y) {
z <- c(x,y)
n.x <- length(x)
n.y <- length(y)
n <- length(z)
k <- min(n.x, n.y)
divide <- function() {
i <- sample.int(n, size=k)
test.statistic(z[i], z[-i])
}
replicate(n.iter, divide())
}
그것이 우리가 시험 을 수행 하는 데 필요한 전부이지만 , 그것을 연구하기 위해 시험을 여러 번 반복하고 싶을 것입니다. 따라서 테스트를 한 번 수행하고 일반적으로 f
여기에 이름이 지정된 세 번째 기능 계층 내에 해당 코드를 래핑 하여 반복적으로 호출 할 수 있습니다. 광범위하게 연구하기에 충분히 일반화하기 위해 입력에 대해 시뮬레이션 할 데이터 세트의 크기 ( n.x
및 n.y
), 각 순열 테스트에 대한 반복 횟수 ( n.iter
), test
테스트 통계를 계산하는 함수 에 대한 참조를 받아들입니다 ( 순간적으로 우리가 이것을 하드 코딩하고 싶지 않은 이유)와 iid 임의의 값을 생성하는 두 개의 함수, 하나는 ( )와 하나는 Y ( )입니다. 옵션dist.x
dist.y
plot.it
진행 상황을 확인하는 데 도움이됩니다.
f <- function(n.x, n.y, n.iter, test=test.statistic, dist.x=runif, dist.y=runif,
plot.it=FALSE) {
x <- dist.x(n.x)
y <- dist.y(n.y)
if(plot.it) qqplot(x,y)
t0 <- test(x,y)
sim <- permutation.test(n.iter, x, y)
p <- mean(sim > t0) + mean(sim==t0)/2
if(plot.it) {
hist(sim, xlim=c(min(t0, min(sim)), max(t0, max(sim))),
main="Permutation distribution")
abline(v=t0, col="Red", lwd=2)
}
return(p)
}
결과는 시뮬레이션 된 "p- 값"입니다. 시뮬레이션의 비율은 실제로 데이터에 대해 계산 된 것보다 더 극단적 인 통계를 산출합니다.
파트 (2)와 (3)은 매우 일반적입니다. test.statistic
다른 계산으로 간단히 바꾸어 다른 테스트를 위해 이와 같은 연구를 수행 할 수 있습니다 . 우리는 아래에서 그렇게합니다.
기본적으로 코드는 두 개의 균일 한 분포에서 가져온 데이터를 비교합니다. 나는 그것을 위해 (그렇게 할 수 경우 상당히 작은 데이터 세트이므로 적당히 어려운 테스트 사례를 제시한다) 정규 균일 비교 및 균일 지수 비교를 위해 반복한다. (균일 분포는 16 보다 큰값을 가지지 않는 한 정규 분포와 쉽게 구별 할 수없지만 높은 비대칭과 긴 꼬리가있는 지수 분포는 일반적으로 균일 분포와 쉽게 구별됩니다.)
set.seed(17) # Makes the results reproducible
n.per.rep <- 1000 # Number of iterations to compute each p-value
n.reps <- 1000 # Number of times to call `f`
n.x <- 16; n.y <- 16 # Dataset sizes
par(mfcol=c(2,3)) # Lay results out in three columns
null <- replicate(n.reps, f(n.x, n.y, n.per.rep))
hist(null, breaks=20)
plot(null)
normal <- replicate(n.reps, f(n.x, n.y, n.per.rep, dist.y=rnorm))
hist(normal, breaks=20)
plot(normal)
exponential <- replicate(n.reps, f(n.x, n.y, n.per.rep, dist.y=function(n) rgamma(n, 1)))
hist(exponential, breaks=20)
plot(exponential)
왼쪽은 p- 값의 널 분포입니다.
중간 그림 은 16 개의 정규 변량 에 대해 16 균일 변량 x i 를 검정합니다.f
각각으로부터 독립된 값. 저전력입니다. 그러나 어쩌면 피할 수 없으므로 계속 진행하십시오.
오른쪽 그림은 지수 분포에 대한 균일 분포를 유사하게 테스트합니다. 이 결과는 기괴합니다. 이 테스트는 균일 한 데이터와 지수 데이터가 동일하게 보인다는 결론을 내리는 경향이 있습니다. 균일하고 지수 변이가 두 개의 균일 변수보다 더 유사 하다고 생각 합니다! 무슨 일이야?
문제는 지수 분포의 데이터가 극도로 높은 값을 갖는 경향이 있다는 것입니다. 균일하게 분포 된 값에 대해 산점도를 만들면 나머지 모든 오른쪽 상단에 몇 개의 지점이 있습니다. 그것은 매우 높은 상관 계수에 해당합니다. 따라서 분포 중 하나가 극단 값을 생성 할 때마다 상관 계수는 분포의 차이를 측정하기위한 끔찍한 선택입니다. 이로 인해 데이터 세트 크기가 커짐에 따라 몇 가지 극단적 인 관측을 얻을 가능성이 높아집니다. 따라서 데이터 양이 증가함에 따라이 테스트의 성능이 저하 될 것으로 예상 할 수 있습니다. 얼마나 끔찍한 ....
R
구현 은 다음과 같습니다 .
test.statistic <- function(x, y) {
ks.test(x,y)$statistic
}
그렇습니다. 소프트웨어에 내장되어 있으므로 소프트웨어 만 호출하면됩니다. 하지만 기다려! 당신이 설명서를주의 깊게 읽는다면, 당신은 그 (가) 시험 공급하는 p- 값 만하면 모두 (b)에 해당 p- 값이 (심하게) 잘못된 배울 x
하고 y
있는 데이터 세트를. 데이터의 출처를 정확히 알고 있고 이것이 사실 인지 확인 하려는 경우에 사용하기위한 것입니다 x
. 따라서 검정은 데이터가 y
나온 분포에 대한 불확실성을 적절히 수용하지 않습니다 .
문제 없어요! 순열 테스트 프레임 워크는 여전히 유효합니다. 이전 변경 사항을로 변경하면 변경 사항 test.statistic
없이 이전 연구를 다시 실행하기 만하면됩니다. 결과는 다음과 같습니다.
null 분포는 균일 하지 않지만 (왼쪽 위), 아래에서는 상당히 균일합니다.
따라서 상관 관계 테스트의 문제는이 설정의 고유 한 어려움으로 인한 것이 아닙니다. 상관 관계 테스트는 매우 나쁘게 수행 될뿐만 아니라 널리 알려진 사용 가능한 테스트에 비해 나쁩니다. ( 허용 될 수 없다고 생각합니다 . 이는 KS 테스트의 순열 버전보다 항상 평균적으로 성능이 더 나빠서 사용할 이유가 없음을 의미합니다.)
아닙니다. 상관 관계는 이것에 대한 좋은 테스트가 아닙니다.
x <- 1:100 #Uniform
y <- sort(rnorm(100)) #Normal
cor(x,y) #.98
예를 들어 두 분포가 모두 정상이지만 가능한 평균과 sd가 다른지 여부를 비교하는 좋은 테스트를 알지 못합니다. 간접적으로 각각의 정규성을 개별적으로 테스트 할 수 있으며 둘 다 정상인 것처럼 보이면 둘 다 정상이라고 생각합니다.
충분히 많은 수의 변수가 있으면 크기 순서 값과 더 많은 상관 관계가 표시 될 수 있습니다. 그러나 특히 유용한 방법은 아닌 것 같습니다. 특히 동일한 모델을 사용할 수 있다는 신뢰도를 평가할 수단이 거의 없기 때문입니다.
당신이 경험하기 쉬운 문제는 비슷한 평균과 왜도를 가진 모델을 가지고 있지만, 적당한 수의 측정이 상당히 잘 어울리기에 충분히 적합 할 수 있기 때문에 첨도의 차이입니다.
서로 다른 분포에 대해 두 변수를 모델링하여 각각에 가장 적합한 변수를 확인하고 결과를 비교하는 것이 더 합리적입니다.
두 값을 정규화하고 각각을 정렬하고 플로팅하는 것이 약간의 장점이있을 수 있습니다. 이렇게하면 적합치가 어떻게 비교되는지 확인할 수 있습니다. 제안 된 것과 관련이있는 것이 아니라 둘 모두에 대해 가능한 모델을 그릴 수 있습니다. 구체적인 대답을 기대하고 분포의 친밀감에 대한 시각적 아이디어.