수색…


상당히 일반적인 기능

내장 치아 성장 데이터 세트를 사용합니다. 우리는 기니아 피그에게 비타민 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가 오렌지 주스가하는 것보다 치아 성장을 상당히 촉진시키는 것처럼 보입니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow