본문 바로가기
@ 필수과목/손으로 푸는 통계

[손으로 푸는 통계 ver1.0] 97. 표본분산을 모분산 대신 사용할 수 있는가 (2) 정규분포를 따르는 모집단에서 p값 비교

by bigpicture 2022. 7. 21.
반응형

Z검정에서 모분산 대신 표본분산을 사용할 경우 p값이 얼마나 달라질 수 있는지 알아봅시다. Z검정에서 p값은 우리가 뽑은 표본으로 구한 Z값보다 극단적인 영역의 넓이로 정의됩니다. 이 넓이는 표준정규분포에서 구합니다. 

 

 

우리가 뽑은 표본의 Z값은 아래와 같이 구합니다. 

 

Z1=ˉX1μσnZ1=¯X1μσn

 

ˉX1¯X1은 우리가 뽑은 표본의 평균입니다. σσ가 모분산인데요. 모분산을 표본분산으로 바꾸면 Z1Z1 가 변하므로 p값도 바뀌게 됩니다. 모분산을 표본분산으로 바꿨을 때 p값이 얼마나 변하는지 확인해보려는 것입니다. 


지난시간에 유도한 부등식을 가져옵시다. 


qchisq(0.05,n1)n1 σ2s2qchisq(0.95,n1)n1 σ2qchisq(0.05,n1)n1 σ2s2qchisq(0.95,n1)n1 σ2

 

아래와 같이 간단히 치환했었습니다. 

 

An1σ2s2Bn1σ2An1σ2s2Bn1σ2

 

각 항에 루트를 씌워줍니다. 

 

An1σsBn1σAn1σsBn1σ

 

역수를 취해줍니다. 

 

1An11σ1s1Bn11σ1An11σ1s1Bn11σ

 

각 항에 ˉX1μ¯X1μ를 곱해줍니다. ˉX¯Xμμ보다 커서 p값이 우측꼬리에서 발생한다고 가정합시다. 

 

1An1ˉX1μσˉX1μs1Bn1ˉX1μσ1An1¯X1μσ¯X1μs1Bn1¯X1μσ

 

각 항의 분모를 nn으로 나눠줍시다. 

 

1An1ˉX1μσnˉX1μsn1Bn1ˉX1μσn1An1¯X1μσn¯X1μsn1Bn1¯X1μσn

 

모분산으로 구한 Z값을 ZσZσ라고 놓고, 표본분산으로 구한 Z값을 ZsZs 라고 놓으면 위 식을 아래와 같이 치환할 수 있습니다. 

 

1An1ZσZs1Bn1Zσ1An1ZσZs1Bn1Zσ

 

아래와 같이 변형합니다. 

 

1Bn1ZσZs1An1Zσ1Bn1ZσZs1An1Zσ

 

모분산으로 구한 p값이 0.05가 나왔을 때를 기준으로 범위를 구하겠습니다. 모분산으로 구한 p값이 0.05가 나오려면 ZσZσ는 1.64여야 합니다. 위 식에 대입합시다. 

 

1Bn1×1.64Zs1An1×1.641Bn1×1.64Zs1An1×1.64

 

아래와 같이 치환합니다. 

 

Bn11.64ZsAn11.64

 

표본분산으로 대체했을 때의 p값을 ps라고 놓으면 ps 의 범위는 아래와 같습니다. pnorm 은 표준정규분포의 누적분포함수입니다. 

 

1pnorm(An1×1.64)ps1pnorm(Bn1×1.64)

 

n에 따라 양쪽 값이 어떻게 변하는지 알아봅시다. 

 

 

표본 크기가 5000은 되야 어느정도 납득할 만한 범위가 됩니다. 표본크기 5000에서 표본분산으로 구한 p값이 0.048~0.053 입니다. 저 구간에 100% 들어오는 것도 아닙니다. 확률은 95%입니다. 

 

모분산으로 구한 p값과 표본분산으로 구한 p값의 차이가 10% 이하가 되는 표본 크기를 구해보았습니다. n은 1971입니다. 5% 이내일 경우 n은 9917 입니다. 

 

표본의 크기가 수천개인 아주 큰 표본에서 대체가 가능합니다. 우리가 기준으로 사용하는 표본크기 30에서 표본분산으로 구한 p값의 범위는 아래와 같습니다. 

 

0.018ps0.088

 

범위가 상당히 넓습니다. 이정도 표본크기에서는 모분산 대신 표본분산을 사용하면 안된다고 생각합니다. 

 

 

 

#표 그리는 코드

size=c(10,30,50,100,200,500,1000,3000,5000,8000,10000)
confid=0.95


df=data.frame(n=NA,A=NA,B=NA)

for (i in 1:length(size)){
  
  A= sqrt(qchisq(1-confid,size[i]-1)/(size[i]-1))
  B=sqrt(qchisq(confid,size[i]-1)/(size[i]-1))

  A_prime=1/A
  B_prime=1/B
  
  p_left=round(1-pnorm(A_prime*1.64),3)
  p_right=round(1-pnorm(B_prime*1.64),3)
    
  df[i,]=list(size[i],p_left,p_right)
}

colnames(df)=c("n","p_left","p_right")

 

#타겟 표본수 찾는 코드

confid=0.95
target=0.05


#A' 계산
size=2
p_left=0

while(p_left<target*0.95){
  
  A= sqrt(qchisq(1-confid,size-1)/(size-1))
  A_prime=1/A

  p_left=1-pnorm(A_prime*1.64)
  
  size=size+1
}
print(size)


#B' 계산
size=100
p_right=1

while(p_right>target*1.05){
  

  B=sqrt(qchisq(confid,size-1)/(size-1))
  B_prime=1/B
  
  p_right=1-pnorm(B_prime*1.64)
  
  size=size+1
}

print(size)

 

 

#강의 영상

 

반응형

댓글

bigpicture님의
글이 좋았다면 응원을 보내주세요!