피셔의 정확한 테스트는 균일하지 않은 p- 값을 제공합니다


12

시뮬레이션 된 유전학 문제에서 Fisher의 정확한 테스트를 적용하려고하지만 p- 값이 오른쪽으로 치우친 것으로 보입니다. 생물 학자로서, 나는 모든 통계 학자에게 명백한 것을 놓치고 있다고 생각합니다. 그래서 나는 당신의 도움에 크게 감사하겠습니다.

내 설정은 다음과 같습니다 (설정 1, 한계는 고정되지 않음)
R에서 무작위로 0과 1의 두 샘플이 생성됩니다. 각 샘플 n = 500, 샘플링 0과 1의 확률은 같습니다. 그런 다음 각 샘플에서 0/1의 비율을 Fisher의 정확한 테스트와 비교합니다 (단지 fisher.test; 비슷한 결과를 가진 다른 소프트웨어도 시도했습니다). 샘플링 및 테스트는 30,000 번 반복됩니다. 결과 p- 값은 다음과 같이 분배됩니다. p- 값 분포

모든 p- 값의 평균은 0.0577에서 약 0.55, 5 번째 백분위 수입니다. 분포도 오른쪽에서 불연속으로 나타납니다.

나는 할 수있는 모든 것을 읽었지만이 동작이 정상이라는 표시를 찾지 못했습니다. 반면에 시뮬레이션 된 데이터이므로 바이어스에 대한 소스가 없습니다. 내가 놓친 조정이 있습니까? 표본 크기가 너무 작습니까? 아니면 균일하게 분포되어 있지 않아야하고 p- 값이 다르게 해석됩니까?
아니면 이것을 백만 번 반복하고 0.05 분량을 찾아서 이것을 실제 데이터에 적용 할 때이를 유의성 컷오프로 사용해야합니까?

감사!


최신 정보:

Michael M은 한계 값 0과 1을 고정 할 것을 제안했습니다. 이제 p- 값은 훨씬 더 좋은 분포를 제공합니다.

고정 마진이있는 p-val

실제 R 코드 추가 : (설정 2, 한계 값 고정)

samples=c(rep(1,500),rep(2,500))
alleles=c(rep(0,500),rep(1,500))
p=NULL
for(i in 1:30000){
  alleles=sample(alleles)
  p[i]=fisher.test(samples,alleles)$p.value
}
hist(p,breaks=50,col="grey",xlab="p-values",main="")

최종 편집 :
의견에서 whuber가 지적한 것처럼 비닝으로 인해 영역이 왜곡되어 보입니다. 설정 1 (자유 한계) 및 설정 2 (고정 한계)에 대한 QQ- 플로트를 첨부하고 있습니다. 아래의 Glen 시뮬레이션에서 비슷한 플롯을 볼 수 있으며 실제로 이러한 모든 결과는 다소 균일 한 것으로 보입니다. 도와 주셔서 감사합니다!

pval-qqplot


2
그룹 크기 (각각 500 개)뿐만 아니라 "풀링 된 샘플에 대한"합계를 일정하게 유지하면서 시뮬레이션을 반복하십시오. Fisher의 정확한 검정의 p 값은이 "고정 된 한계 분포"설정에서 파생됩니다. 그러면 사진이 더 좋아 보입니까? Btw. p- 값 분포가 샘플링 분포의 불 연속적 특성 (예 : 초 지오메트리)에 의해 정확히 균일 할 것으로 기대할 수 없습니다.
Michael M

1
R 코드를 살펴 보는 것이 유용 할 수 있습니다.
conjugateprior

1
@ 글렌 그것은 각 반복에서 두 샘플이 같은 수의 0과 1을 갖거나 (즉, 귀무 가설이 유지되어야 함) 코드에서 나에게 보이는 것 같습니다.
bdeonovic

5
이 히스토그램은 나에게 매우 균일하게 보입니다. 히스토그램은 area로 확률 (또는 빈도)을 표시한다는 것을 기억해야 합니다 . 불규칙적 인 불연속 데이터에 대한 p- 값 분포의 피할 수없는 불연속성으로 인해 오른쪽으로의 간격이 증가하면 막대 높이가 증가 하지만 면적은 거의 일정 해 보입니다. 균일 성을 평가하기 위해 히스토그램을 사용하는 대신 경험적 CDF를 그래프로 표시하십시오.
whuber

2
특정 배포를 제외하고이 질문에 대한 답은 여기
Glen_b -Reinstate Monica

답변:


10

문제는 데이터가 불연속 적이므로 히스토그램이기만 될 수 있다는 것입니다. 대략적인 균일 분포를 보여주는 qqplots로 시뮬레이션을 코딩했습니다.

library(lattice)
set.seed(5545)
TotalNo=300
TotalYes=450

pvalueChi=rep(NA,10000)
pvalueFish=rep(NA,10000)

for(i in 1:10000){
  MaleAndNo=rbinom(1,TotalNo,.3)
  FemaleAndNo=TotalNo-MaleAndNo
  MaleAndYes=rbinom(1,TotalYes,.3)
  FemaleAndYes=TotalYes-MaleAndYes
  x=matrix(c(MaleAndNo,FemaleAndNo,MaleAndYes,FemaleAndYes),nrow=2,ncol=2)
  pvalueChi[i]=chisq.test(x)$p.value
  pvalueFish[i]=fisher.test(x)$p.value
}

dat=data.frame(pvalue=c(pvalueChi,pvalueFish),type=rep(c('Chi-Squared','Fishers'),each=10000))
histogram(~pvalue|type,data=dat,breaks=10)
qqmath(~pvalue|type,data=dat,distribution=qunif,
       panel = function(x, ...) {
         panel.qqmathline(x, ...)
         panel.qqmath(x, ...)
       })

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


5
개별 데이터 의 막대 그래프 또는 막대 그래프에서 이러한 급상승과 급락 은 종종 비닝 절차의 인공물입니다. 신뢰하지 마십시오 : QQ 도표 또는 ECDF 그래프와 같이 더 많은 분포 분포를 사용하십시오. 실제 값이더라도 p- 값의 분포가 거의 균일하고 의사 결정에 중요한 올바른 밀도를 제공하는 경우 아무도 신경 쓰지 않을 것입니다.
whuber

훌륭한 포인트 @ whuber, 나는 qqplots로 업데이트 할 것입니다.
Glen

2
@ whuber, 글렌, 정말 고마워요! 실제로 Glen의 히스토그램을 더 많은 나누기로 나누면 비슷한 패턴이 나왔기 때문에 비닝은 기만적이었습니다. 또한 시뮬레이션으로 선형 경험적 CDF / QQ를 얻으므로 문제가 해결 된 것으로 보입니다.
juod

@ juod : qqplot을 추가하여 두 시뮬레이션 모두에 대해 설명 할 수 있다면 대단히 감사하겠습니다.
Michael M

qq 플롯은 정말 도움이됩니다. 감사합니다. 그래도 답의 첫 단락을 바꾸고 싶지 않습니까? 여전히 시뮬레이션에 문제가 있고 p- 값 분포에 "스파이크"가 있다고 유지합니까?
whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.