R Language
순열 테스트 수행
수색…
상당히 일반적인 기능
내장 치아 성장 데이터 세트를 사용합니다. 우리는 기니아 피그에게 비타민 C 대 오렌지 주스를 투여했을 때 치아 성장에 통계적으로 유의 한 차이가 있는지에 관심이 있습니다.
전체 예제는 다음과 같습니다.
teethVC = ToothGrowth[ToothGrowth$supp == 'VC',]
teethOJ = ToothGrowth[ToothGrowth$supp == 'OJ',]
permutationTest = function(vectorA, vectorB, testStat){
N = 10^5
fullSet = c(vectorA, vectorB)
lengthA = length(vectorA)
lengthB = length(vectorB)
trials <- replicate(N,
{index <- sample(lengthB + lengthA, size = lengthA, replace = FALSE)
testStat((fullSet[index]), fullSet[-index]) } )
trials
}
vec1 =teethVC$len;
vec2 =teethOJ$len;
subtractMeans = function(a, b){ return (mean(a) - mean(b))}
result = permutationTest(vec1, vec2, subtractMeans)
observedMeanDifference = subtractMeans(vec1, vec2)
result = c(result, observedMeanDifference)
hist(result)
abline(v=observedMeanDifference, col = "blue")
pValue = 2*mean(result <= (observedMeanDifference))
pValue
CSV를 읽은 후에는 함수를 정의합니다.
permutationTest = function(vectorA, vectorB, testStat){
N = 10^5
fullSet = c(vectorA, vectorB)
lengthA = length(vectorA)
lengthB = length(vectorB)
trials <- replicate(N,
{index <- sample(lengthB + lengthA, size = lengthA, replace = FALSE)
testStat((fullSet[index]), fullSet[-index]) } )
trials
}
이 함수는 두 벡터를 취해 그 내용을 함께 섞은 다음 셔플 된 벡터에 대해 testStat
함수를 수행합니다. teststat
의 결과가 반환 값인 trials
추가됩니다.
이것은 N = 10^5
번합니다. 값 N
은 함수의 매개 변수 일 수 있습니다.
이로 인해 우리는 두 가지 변수 사이에 진정한 관계가없는 새로운 일련의 데이터, trials
, 새로운 일련의 데이터를 남겨 둡니다.
이제 테스트 통계를 정의하십시오.
subtractMeans = function(a, b){ return (mean(a) - mean(b))}
테스트를 수행하십시오.
result = permutationTest(vec1, vec2, subtractMeans)
실제 관찰 된 평균 차이를 계산하십시오 :
observedMeanDifference = subtractMeans(vec1, vec2)
우리의 관찰 결과가 우리의 테스트 통계의 히스토그램에서 어떻게 보이는지 봅시다.
hist(result)
abline(v=observedMeanDifference, col = "blue")
우리의 관찰 결과가 우연에 의해 발생할 가능성이 높습니다처럼은 보이지 않는다 ...
두 변수 사이에 관계가 없다면 원래 관찰 된 결과의 가능성 인 p- 값을 계산하려고합니다.
pValue = 2*mean(result >= (observedMeanDifference))
아래로 조금씩 해봅시다.
result >= (observedMeanDifference)
다음과 같이 부울 벡터를 만듭니다.
FALSE TRUE FALSE FALSE TRUE FALSE ...
으로 TRUE
마다 값 result
받는 이상인 observedMean
.
함수 mean
은이 벡터를 TRUE
1
로, FALSE
경우 0
으로 해석하고 믹스에서 1
의 백분율을 제공합니다. 즉, 셔플 된 벡터의 평균 차이가 우리가 관찰 한 것과 같거나 초과 한 횟수입니다.
마지막으로, 우리는 테스트 통계의 분포가 매우 대칭이기 때문에 2를 곱합니다. 우리는 실제로 어떤 결과가 관측 된 결과보다 "극단적"인지 알고 싶습니다.
남은 것은 p- 값을 출력하는 것 0.06093939
.이 값은 0.06093939
입니다. 이 값의 해석은 주관적이지만 비타민 C가 오렌지 주스가하는 것보다 치아 성장을 상당히 촉진시키는 것처럼 보입니다.