통계적 검정 (statistical testing) 은 모집단의 모수 또는 분포 형태에 대한 추정에 대해 그것이 옳은지 그른지를 임의로 추출한 표본으로부터 통계량을 측정하여 판단하는 통계적 절차를 말합니다.

 

단일 모집단에 대한 통계적 추론 (추정과 검정) 과 관련하여

 

[표본이 크고 정규성 충족 시]

- 단일 모집단의 모평균에 대한 신뢰구간 추정과 검정

   : t.test()

 

- 단일 모집단의 모분산에 대한 신뢰구간 추정과 검정

   : chi-square test

 

- 단일 모집단의 모비율에 대한 신뢰구간 추정과 검정

   : prop.test()

 

 

[정규성 미충족 시]

- 단일 모집단 중심에 대한 비모수 검정

  : wilcox.test()

 

 

[정규성 여부 검정]

- 단일 모집단 분포의 정규성 검정

  : shapiro.test(), qqnorm(), qqline()

 

을 차례로 살펴보겠습니다.

 

지난번 포스팅의 '단일 모집단의 모평균에 대한 신뢰구간 추정과 검정'에 이어서, 이번 포스팅에서는 정규분포 형태를 띠는 단일 모집단에서 임의로 표본을 추출하여 미지의 모수인 모분산(one population variance)에 대한 95% 신뢰계수의 신뢰구간 추정과 검정을 R의 사용자 정의 함수를 적용해서 해보겠습니다.

 

제조업에서 품질을 평가하거나 금융업에서 Risk를 평가할 때 많이 사용하는 것이 퍼짐 정도를 나타내는 분산이므로 기준치, 혹은 허용치를 벗어나는지를 판단(모분산과 표본분산이 동일한가 여부)하는데 이번 포스팅을 활용할 수 있겠습니다.

 

연속형 확률분포 중에서 이전에 '카이제곱 분포'를 포스팅한적이 있는데요, 단일 모집단의 모비율 추정과 검정에 '카이제곱 분포 통계량'을 사용합니다.

 

 

정규분포 (μ, σ^2)을 따르는 모집단으로부터 표본크기 n인 표본을 랜덤하게 추출하면

 

  V = (n-1)* (S/σ)^2 인 통계량은

 

자유도가 n-1 인 카이제곱 분포(chisquare distribution)를 따름

 

 

위의 V 통계량에서 (S/σ)^2  부분에 주목해서 보면, 표본분산을 모분산으로 나눈 값을 제곱하였으므로 모분산 대비 표본분산이 크거나 작게 되면 1로부터 멀어지게끔 되어있습니다.

 

그리고, 참고로 카이제곱 분포를 따른다는 것은 정규분포나 t-분포처럼 좌우 대칭 형태의 분포가 아니라, 왼쪽으로 많이 몰려있고, 오른쪽으로 꼬리가 긴 분포를 따른다는 의미입니다.  따라서 양측검정할 때는 정규분포의 z통계량이나 t-분포의 T통계량을 사용할 때 처럼 '±통계량'의 형태가 아니구요, 하한 신뢰한계(lower confidence limit)와 상한 신뢰한계(upper confidence limit)을 따로 따로 계산해야만 합니다. 

 

또한 t-검정의 경우 모집단으로 부터 추출한 샘플들이 정확하게 정규분포를 따르지 않더라도 좌우 대칭이며 특이값만 없다면 검정 결과는 덜 영향을 받는 반면에, 카이제곱 검정은 정규성 가정에 매우 민감하게 영향을 받으므로 정규분포를 따르는지에 대해서 반드시 확인 후에 조심해서 사용해야 하겠습니다.

 

 

 

[ 카이제곱 검정 (Chi-square test) 의 검정 통계량 및 기각역 ]

 

 

 

 

 

문제) 빛나리 공장에서 생산하는 전구 수명은 정규분포를 따르는 것으로 알려져 있다.  빛나리 공장 전구의 분산이 30시간 이내이면 품질 기준을 만족한다.  완성품 전구에서 100개를 무작위로 추출하여 전구의 수명을 측정한 결과 분산이 38시간 이었다.  그러면, 빛나리 공장에서 생산한 전구의 수명의 분산이 기준치 30시간을 초과하는지 여부를 유의수준(significance level) 5%로 검정하여라.

 

 

위의 문제는 분산에 대해 우측검정(one-sided test, greater) 을 하는 문제이므로 카이제곱 검정을 하는 R 사용자 정의함수를 만들어보았습니다.  아래 R 사용자 정의 함수에 샘플 개수(n), 모분산(Sigma0Squared), 표본분산(SSquared), 유의수준(alpha) 부분을 다른 문제의 값으로 바꿔치기 해서 사용하시면 되겠습니다.

 

 

> # function for right-sided chi-square test with significance level 'alpha'
> var_test_TwoSided <- function(n, Sigma0Squared, SSquared, alpha)
+ {
+   df <- n - 1
+   v <- df*(SSquared)/Sigma0Squared
+   
+   upper.critical <- qchisq((1-alpha), df, lower.tail = FALSE) # right-sided test
+ 
+   # lower.critical <- qchisq((alpha), df, lower.tail = FALSE) # left-sided test
+   
+   # upper.critical <- qchisq((1-alpha)/2, df, lower.tail = FALSE) # two-sided test
+   # lower.critical <- qchisq(alpha/2, df, lower.tail = FALSE) # two-sided test
+   
+   print(paste("degrees of freedom = ", df), quote = FALSE)
+   print(paste("population variance = ", Sigma0Squared), quote = FALSE)
+   print(paste("sample variance = ", SSquared), quote = FALSE) 
+   print(paste("significance level = ", alpha), quote = FALSE)
+   print(paste("confidence level = ", 1-alpha), quote = FALSE)
+   print("  ")
+   print(paste((1-alpha)*100, "% confidence interval for variance"), quote=FALSE)
+   print(paste("   upper critical limit = ", round(upper.critical, 2)), quote = FALSE)
+   print(paste("   chisq statistic      = ", round(v, 2)), quote = FALSE)
+   print("  ")
+   print(paste("P-value =", round(pchisq(v, df, lower.tail=FALSE),4)), quote = FALSE)
+ }
> 
> 
> var_test_TwoSided(n=100, Sigma0Squared=30, SSquared=38, alpha=0.05)
[1] degrees of freedom =  99
[1] population variance =  30
[1] sample variance =  38
[1] significance level =  0.05
[1] confidence level =  0.95
[1] "  "
[1] 95 % confidence interval for variance
[1]    upper critical limit =  77.05
[1]    chisq statistic      =  125.4
[1] "  "
[1] P-value = 0.0377

 

 

P-value 가 0.0377 이므로 유의수준(significance level) 0.05에서 귀무가설은 기각(H0 is rejected), 대립가설 채택(H1 is accepted) 되었습니다.  따라서 빛나리 전구회사의 전구는 분산이 기준치 30시간을 유의수준 5%에서 초과했으므로 시장에 내다팔 수가 없게 되었네요.

 

많은 도움 되었기를 바랍니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 눌러주세요. ^^

 

 

 

Posted by R Friend R_Friend

댓글을 달아 주세요