mmings_pring_day

[통계 데이터 분석] 가설검정과 확률분포 ⭕ 본문

통계

[통계 데이터 분석] 가설검정과 확률분포 ⭕

mming_10 2024. 9. 29. 18:13

[반도체 수율의 중요성]

- 반도체 수율 관리 (안정성): 기존 공정 하에서 70%_혹은 70% 이상의 희구성 (가능성) -> 3 % 

 ( * 귀무가설: 기존 반도체 수율의 평균이 50% 부근 *)

- 70 이상의 빈도에 대한 평가= '우리 공장은 3% 밖에 안 되는데?' (연구원의 주장 받아들임) , '우리 공장도 3%나 되는데~' (받아들이지 않음)

 

- 70% : 검정 통계량 (test 하고자 하는 수치)

- 유의확률 (p-value): 검정 통계량이 발생할 확률

- 유의수준- 판단기준 [5%] : 70% 발생율 3% 가 희귀하다고 생각하여 연구원의 새로운 주장을 받아들임

( *판단기준 [5%] vs 판단기준 [1%] : 판단기준 [1%]가 엄격함 -> 주제에 따라서 다름 (수질 오염 검사 결과 시) *)

- 통계적으로 유의미하다

1. 가설과 가설검정

- 모집단에 대한 새로운 주장을 대립가설 (alternative hypothesis)이라고 하고, 기존의 주장을 귀무가설 (null hypothesis)라고 함

- 통계적 검정 (statistical test) 또는 가설검정 (hypothesis test)이란 표본 데이터를 기반으로 모집단에 대한 새로운 주장의 옳고 그름을 추론하는 과정을 말함

  • 귀무가설 (기존과 다를 바 없다- 알려진 주장) -> 흔하게 나타남!
  • 대립가설 (기존과 다르다) -> 드물게 나타남!

(예: 벤처기업을 경영하는 30대 및 40대 경영자의 평균 혈압이 같은 연령대의 일반 사람들과 비교해서 상대적으로 높은지 혹은 낮은지를 알고 싶다고 할 때, 

-> 새로운 주장 (대립가설) = 벤처기업 경영자의 혈압은 일반 사람과 다르다

-> 기존 주장 (귀무가설) = 벤처기업 경영자의 혈압은 일반 사람과 별반 다르지 않다

 

  • 통계적 검정/ 가설검정

- 일반적으로 새로운 주장은 분명하게 입증되지 않으면, '받아들여지기'가 쉽지 않음

  -> 대립가설을 새로운 사실로 받아들이기 위해서는 , '기존의 주장이 명백하게 잘못되었음'을 입증해야 함 -> 입증과정 (가설검정)

 

- 가설검정 귀무가설이 현 상황을 제대로 설명하고 있다는 가정 하에서 시작함

  -> 표본으로부터 얻은 통계량 (예를 들면 표본으로부터 계산된 평균값)이 귀무가설이 옳다는 전제 하에서는 좀처럼 나타나기 어려운 극단적이고 예외적인 값이 나올 경우에는 '계속해서 귀무가설이 옳다고 주장할 수 는 없음'

  -> 귀무가설을 기각하고 대립가설을 채택하게 됨

 

(예: '벤처기업 경영자의 혈압은 일반 사람과 다르다' 는 새로운 주장, 즉 대립가설의 주장을 검정하기 위해서 무작위로 선정한 30명의 벤처기업 경영자의 혈압을 측정해서 평균을 계산함)

 

-> 그렇게 계산된 평균 혈압이 135라고 했을 때, 이 135 라는 혈압이 기존에 일반 사람들의 혈압 분포 하에서 얼마나 흔하게 나타나는지, 혹은 드물게 나타나는지를 평가하게 됨

-> 그래서 벤처기업 경영자의 평균 혈압 135 라는 것이 '일반 사람들의 혈압분포 하에서 굉장히 흔하게 발생하는 것'이라고 한다면

'그런 정도의 혈압'은 일반 사람들한테서도 충분히 나타날 수가 있기 때문에 

: '벤처기업 경영자의 혈압이 일반 사람들하고 다르다'고 할 만한 충분한 증거를 갖고 있지 못하는 것이 됨

 

-> 135 라는 '벤처기업 경영자의 표본 혈압'이 일반 사람들의 혈압분포에서는 좀처럼 나타나지 않는 굉장히 드문 경우일 때,

: '벤처기업 경영자의 혈압이 일반 사람들하고는 다르다'라고 판단을 내릴 수 있음


1-1. 가설검정 절차 

- 표본으로부터 검정하고자 하는 검정통계량 (test statistic) 계산

  (* 검정통계량= 표본평균일 수도 있고,  좀 더 복잡한 방식으로 계산된 값일 수도 *)

  ( 통계량의 분포를 알아야 함: t 검정 - t 분포, F 검정- F 분포 등)

 

- 검정 통계량과 그 확률분포로부터 p-값 (p-value) 계산 (통계량의 분포를 알아야 함)

  • 귀무가설이 사실이라는 가정 하 (일반 사람들의 혈압분포) 에서 관측한 통계량과 같거나 그보다 더 극단적인 값이 발생할 확률을 의미 (벤처기업 사업가의 표본으로부터 계산된 혈압의 평균이 135 또는 그 이상이 발생할 확률)
  • 유의확률 (significance probability)이라고도 함

- p- 값이 매우 작으면 귀무가설 기각

  • 판단의 기준으로 사용하는 5% (0.05) 또는 1%의 확률을 유의수준(significance level)이라고 함
  • 표본으로부터 관측된 결과 (즉, 계산된 통계량)가 나타날 가능성이 5% 미만 또는 1% 미만이 되어(강력한 증거) 귀무가설을 기각하면 이를 통계적으로 유의하다 (statistically significant)라고 표현함

( * p-값이 매우 작다는 것 = 귀무가설이 사실일 경우

 

가설검정과 검정력, 검정력이 클수록 잘못된 귀무가설을 기각할 가능성이 커진다.

 

- 귀무가설이 진심임에도 -> 귀무가설 기각 (대립가설 채택) 

   -> 실수에 대한 확률: 1종 오류 (a) = 유의수준

   -> 나의 판단기준 (5%) = 내가 실수할 확률 5%

   -> 판단기준을 낮춘다 = 왠만하면 새로운 대립가설은 채택하지 않겠다.

통제할 수 있는 오류= 1종 오류 (유의수준을 조절하여)
-> 사실 귀무가설의 주장이 옳은 것임에도 불구하고, 선정한 표본이 우연히도 예외적인 것이어서 귀무가설을 기각하는 판단의 오류를 범할 수 있음 => 판단의 오류 (1종 오류)
(사실은 벤처기업의 사업가들의 혈압과 일반 사람들의 혈압이 같음에도 불구하고 우리가 추측한 표본에서 계산한 벤처기업 사업가 혈압의 표본평균이 우연히도 굉장히 큰 값이 나오는 바람에, 일반 사람들의 혈압분포에서는 그렇게 큰 값을 관측한 가능성이 5% 미만이기 때문에 귀무가설을 기각하고 대립가설을 채택하는 즉, '벤처기업 사업가의 혈압과 일반 사람들의 혈압이 다르다'는 결론을 내림 -> 오류 발생 )

 

- 귀무가설 채택 (대립가설 거절) + 하지만, 귀무가설이 '거짓' 

    -> 2종오류

사실 벤처 기업 사업가의 혈압과 일반 사람들의 혈압이 다름에도 불구하고, 우리가 확인한 표본의 값이 유의수준을 넘지 못해, '귀무가설을 기각하지 않음'

 

- 귀무가설이 틀릴 때 잘못된 귀무가설을 기각할 수 있는 확률= 검정력 (1-B)

(검정력이 클수록, 잘못된 귀무가설을 기각할 가능성이 커지게 됨) => 가설검정을 통해 검정력을 키워야 함!

- 검정력 증가: 유의수준/ 표본 크기 증가

(하지만, 유의수준을 크게하는 것은 -> 가설검정 결과에 대한 신뢰도를 저하할 수 있고, 표본크기 또한 비용상의 문제로 무한정 크게 할 수 없음 

-> 연구모델을 검증할 때, 연구자는 이러한 트레이드오프 (trade-off) 관계를 고려해서 일반적으로 유의수준과 표본크기를 적정 수준으로 유지하면서 동시에 가설검정의 검정력은 가능한 최대화하는 것을 목표로 함


- 검정 통계량 계산 / 검정통계량에 대한 '확률분포' 를 통해서 -> 드문지, 희귀한지 계산

-> R 의 함수는 '일정한 규칙' 이 존재함! (함수의 특성을 나타내는 영문 글자 하나와 확률분포를 나타내는 고유의 이름으로 구성됨)

(ex- 정규분포를 나타내는 고유의 이름: norm/ norm 이란 이름이 정규분포와 관련된 함수에 공통적으로 사용됨)

+  함수의 특성을 나타내는 d, p, q, 를 앞에 붙임으로써 함수의 이름이 완성됨!!


[ 정규분포 관련 함수를 살펴보면, ]
- dnorm( ) : 정규분포 확률밀도함수

- pnorm( ): 정규분포 확률분포함수
- qnorm( ): 정규분포 백분위수함수
- rnorm( ): 정규분포 난수생성함수 

[ t 분포 관련 함수를 살펴보면: t 라는 이름이 t 분포 관련 함수를 대표하는 표기 ]
- dt( ): t 분포의 확률밀도함수
- pt( ): t 분포의 확률분포함수
- qt( ): t 분포의 백분위수함수
- rt( ): t 분포의 난수생성함수

 

2. 이항분포 (binomial distribution)

- 대표적인 이산확률분포 로서 매회 어떤 사건이 일어날 확률이 동일한 독립 시행의 경우에 있어서 이 사건이 일어나는 횟수가 만들어 내는 분포

( 예로, 동전을 일정 횟수 반복하여 던지는 실험에서 매 시행시마다 숫자면이 나타날 확률이 0.5 라고 할 때, 숫자면이 나타나는 횟수는 이항분포를 따름/ 동전을 던지는 행위를 10번 반복한다고 했을 때, 숫자면은 0~ 10회까지 나타날 수 있음)

 

  •  확률변수 = 0~10 까지의 숫자면 출현 횟수
  •  확률분포= 각 확률변수값이 발생할 확률의 분포

 

- 이항분포의 확률밀도함수 를 통해 '동전을 던지는 실험을 열 번 반복했을 때, 숫자면이 일곱 번 나타날 확률을 구할 수 있음'

(이항분포의 확률밀도함수: dbinom( ) 함수)

[이항분포의 확률밀도함수]
# dbinom 의 첫번째 인수: 사건이 발생할 횟수를 지정
# -> (숫자면이 일곱 번 나타날 확률을 구할 것이기에, 사건이 발생할 확률: 7)
# dbinom 의 두번째 인수 (size 인수): 시행 횟수 지정
# -> (동전을 던지는 행위를 열번 반복, 시행 횟수: 10)
# dbinom 의 세번째 인수 (prob 인수) : 각 시행에서 해당 사건이 발생할 확률 지정
# -> (숫자면이 나타날 확률이기에, 사건 발생 확률: 0.5)

dbinom(7, size=10, prob=0.5) #이항분포(성공, 실패)
# 주사위 10번 던졌을 때, 7 확률

- 특정 횟수까지의 누적확률: 이항분포의 확률분포 함수 -> pbinom( )함수 이용

: 동전을 던지는 실험을 열번 반복했을 때, 숫자면이 일곱 번 이하가 나타날 확률 

[이항분포의 확률분포함수]
# pbinom 의 첫번째 인수: 누적 횟수 지정
# pbinom 의 두번째 인수 (size 인수): 시행 횟수 지정
# pbinom 의 세번째 인수 (prob 인수) : 각 시행에서 해당 사건이 발생할 확률 지정

pbinom(7, size=10, prob=0.5) #누적확률분포
# 일곱 번이 나타나거나, 여섯 번이 나타나거나, 다섯 번이 나타나거나, 네 번, 세 번, 두 번, 한 번, 0 번 시의 합

sum(dbinom(0:7, size=10, prob=0.5))
# dbinom(0: 7) = '0:7' 숫자 벡터를 지정하면 여덟 개의 확률 계산
# = 숫자면이 0회 나타날 확률부터 7회 나타날 확률까지 계산= 7회 이하가 나타날 확률은 모든 확률의 합

- pbinom(7, size= 10, prob= 0.5) 의 값과  sum(dbinom(0:7, size= 10, prob= 0.5)) 의 값이 동일함

- 누적확률의 반대편 영역의 확률을 구하기 위해선 (특정 관측값을 기준으로 윗부분의 확률을 구하려면), 

lower.tail 인수에 FALSE 를 지정함

 

[숫자면이 여덟 번 이상 나타날 확률을 의미함]

pbinom(7, size=10, prob=0.5, lower.tail=FALSE) #반대 확률 구하기

[ 두 관측값 간의 확률을 구하려면, 각각에 대한 누적확률을 구한 다음에 그 차이를 계산하면 됨 ]

(예- 숫자면이 네 번 이상 일곱 번 이하 발생할 확률은, 일곱 번 이하 발생할 확률에서 세 번 이하 발생할 확률을 뺴서 구할 수 있음)

pbinom(7, size= 10, prob= 0.5) - pbinom(3, size= 10, prob= 0.5)
# 네 번 이상 일곱 번 이하 발생할 확률 계산

- R의 벡터 연산 기능을 이용하면, 두 관측값 간의 누적확률을 한꺼번에 구할 수 있음

pbinom(c(3,7), size= 10, prob= 0.5)
#세번 이하 발생할 확률과 일곱 번 이하 발생할 확률을 동시에 구할 수 있음

네 번 이상 일곱 번 이하 발생할 확률은 이 두 개의 차이
-> diff(pbinom(c(3,7), size= 10, prob= 0.5)

- 'diff(pbinom(c(3,7), size= 10, prob= 0.5)' =  'pbinom(7, size= 10, prob= 0.5)' => 네 번 이상 일곱 번 이하 발생할 확률을 구함

[이항분포로부터 난수를 생성하기 위해서는 'rbinom( ) 함수 사용' ]

# 난수를 생성하기 전에 set.seed( ) 함수를 이용해서 seed 번호를 지정
set.seed(1)
# -> seed 번호를 지정하게 되면 비록 난수이긴 하지만, 동일한 실행 결고가 나올 수 있도록 실행 결과를 재현해 줌

# rbinom 의 첫번째 인수: 생성할 난수의 개수 지정
# rbinom 의 두번째 인수 (size 인수): 시행 횟수 지정
# rbinom 의 세번째 인수 (prob 인수) : 각 시행에서 해당 사건이 발생할 확률 지정

rbinom(1, size=10, prob=0.5)
# -> 1을 지정하면 난수 한 개 생성
rbinom(5, size=10, prob=0.5)
# 5를 지정하게 되면: 동전을 던지는 실험을 10번 반복했을 때, 나타나게 될 숫자면의 개수 5개를 무작위 생성


3. 정규분포 (normal distribution)

- 대표적인 연속확률분포로서 통계적 검정을 위해 가장 널리 활용되는 분포

(정규분포가 가지고 있는 유용한 특성 중 하나는 '평균과 표준편차'를 알고 있으면, 관측값이 일정 구간 내에 포함될 확률을 구할 수 있다는 점!

-> 정규분포에서는 '평균을 중심으로 한 개의 표준편차 이내에 전체 관측값의 약 68.26% 가 존재함.

-> 두 개의 표준편차 이내에는 약 95.44% 가 존재함

-> 세 개의 표준편차 이내에는 약 99.74% 의 관측값이 존재함

(예- IQ 테스트 점수가 평균이 100, 표준편차가 10인 정규분포를 한다고 가정

- 전체 모집단에서 IQ 테스트 점수가 90점에서 110 점 사이에 속하는 사람은 약 68% 존재

   (90점 = 평균에서 아래로 하나의  

- IQ 테스트 점수가 80 점에서 120 점 사이에 속하는 사람은 약 95.44% 존재

- IQ 테스트 점수가 70 점에서 130 점 사이에 속하는 사람은 약 99% 이상의 대부분의 사람이 존재

 

* 평균과 표준편차가 다르기 때문에 모든 정규분포가 동일한 분포 형태를 가질 순 없지만, 어느 정규분포든 평균을 중심으로 일정 범위 내의 비율은 동일하다는 특성을 가짐.

표준정규분포 = 평균과 표준편차가 다른 다양한 형태의 정규분포를 비교 가능한 통일된 하나의 분포로 변환시킨 것 

- 표준정규분포는 '표준점수로 이루어진 분포를 말하며 평균은 0이고 표준편차는 1임.'

  -> 표준정규분포는 표준점수 (Z 값_ Z score 로 이루어짐) = Z 분포

  -> 표준점수는 관측값과 평균의 차이를 표준편차로 나눠서 구할 수 있음 (예- IQ 100은 표준점수 0으로 환산/ IQ 110 은 표준점수 1로 환산/ IQ 70은 표준점수 -3 으로 환산 가능)
  -> '표준점수 = 0' ) 원래의 관측값과 평균이 동일하다는 의미를 가짐
  -> '표준점수= 1' ) 관측값이 평균으로부터 하나의 표준편차만큼 위에 있다는 의미를 가짐
  -> '표준점수= 2'  & '표준점수= 3' ) 관측값이 평균으로부터 두 개의 표준판차만큼 위에 있다는 것과 세 개의 표준편차만큼 아래에 있다는 것을 나타냄

- 정규분포의 특성에 따라서,

   -> 표준점수 -1 과 1 사이에는 전체 관측값의 68% 가 존재하고, 

  -> 표준점수 -2 와 2 사이에는 전체 관측값의 95% 가 존재하고, 

  -> 표준점수 -3 과 3 사이에는 전체 관측값의 99% 이상이 존재함

- 정규분포에서는 대부분의 관측값이 중앙에 몰려 있으며 중앙에서 멀어질수록 그 빈도수가 점점 작아지는 종 모양의 대칭인 모습을 가짐 (대칭인 모습: 평균인 0을 중심으로 오른쪽에 전체 관측값의 절반이 존재하고, 왼쪽에 나머지 절반이 존재함)

  -> 0과 -1 사이에는 약 34% 관측값이 존재함

  -> -1 과 1사이에 68% 관측값이 존재함  (0과 -1 사이의 크기가 그 절반이기 떄문에)

  ->  -1 보다 작은 값의 영역에는 약 16% 의 관측값이 존재함 (0보다 작은 영역에 50% 관측값이 존재하고, 0과 -1 사이가 34% 이기에) =  1보다 큰 영역의 크기 (16%)  [[대칭]]

 

 

 

 

- 정규분포는 연속확률분포이기 때문에 '하나의 관측값에 대한 확률은 계산할 수 없고, 연속적인 구간에 대한 확률'만이 의미 있음

  -> 특정 관측값 이하일 확률을 계산하기 위해선, 정규분포의 확률분포함수인 pnorm( ) 함수 이용함


3-1. pnorm( ) 함수 = 정규분포의 확률분포함수

# [정규분포: pnorm/ 평균이 100일 때 110 이하일 확률]

# pnorm 의 첫번째 인수: 누적확률을 계산하고자 하는 관측값을 지정
# pnorm 의 두번째 인수 (mean 인수): 정규분포의 평균
# pnorm 의 세번째 인수 (sd 인수) : 정규분포의 표준편차

pnorm(110, mean=100, sd=15)
# -> 성인의 IQ가 평균 100이고, 표준편차가 10인 정규분포를 따른다고 했을 때/ IQ가 110이하일 확률
# pnorm() 함수는 IQ가 110 이하일 누적확률을 산출해 줌

# IQ 가 110을 초과할 확률을 구하려면, 
pnorm(110, mean=100, sd=15, lower.tail=FALSE) #반대(110 보다 클 확률= 110 이하일 누적확률의 반대편)

# *벤처기업 사업가가 일반 사람보다 아이큐가 높다
# 벤처기업 사업가의 평균 아이유: 110
# 110 보다 이상일 확률 (110의 희귀성): 25% -> '흔하지 않은데?' [판단기준: 5%]

 

- 인수로 평균과 표준편차를 지정하지 않으면, 평균이 0/ 표준편차가 1인 표준정규분포를 가정함

  -> pnorm( ) 함수에 mean 인수와 sd 인수를 생략하고, '관측값에 대응되는 값'만을 지정하게 되면 표준정규분포를 가정한 상테에서 누적확률을 계산해 줌

  -> 표준정규분포에서는 0이하일 확률이 0.5 이기 때문에 그 값을 산출함.

pnorm(0)

- mean 인수와 sd 인수의 표준정규분포의 평균과 표준편차를 0, 1로 명식적으로 지정한 것과 동일한 결과를 가져옴

pnorm(0, mean= 0, sd= 1)

- 두 개의 관측값 간의 구간의 확률을 계산하기 위해서는, 각 관측값까지의 누적확률을 계산한 다음 '두 확률의 차이'로서 산출

(예- IQ 가 90보다 크고, 110 보다 작거나 같은 확률

1) 110까지의 누적확률 계산 -> 2) 90까지 누적확률 계산 -> 3) 그 차이를 산출 )

pnorm(110, mean=100, sd=10) - pnorm(90, mean=100, sd=10)

- 또는 pnorm( )함수에 110과 90을 벡터로 지정하고, 두 개의 누적확률을 계산한 다음, diff( )함수를 이용해서 차이를 산출

diff(pnorm(c(90, 110), mean=100, sd=10))


3-2. qnorm( ) 함 수 이용 

[ 누적확률이 주어지고 이 확률에 대응되는 관측값을 알고 싶을 땐: qnorm( ) 함수 이용 ] <-> pnorm( ) = 관측값 -> 누적확률

(정규분포에 대한 백분위수를 계산하는 것과 동일)

# qnorm 의 첫번째 인수: 확률 지정 -> 확률에 대응되는 백분위수를 출력해 줌
# qnorm 의 두번째 인수 (mean 인수): 정규분포의 평균
# qnorm 의 세번째 인수 (sd 인수) : 정규분포의 표준편차]

# 평균 100, 표준쳔차가 10인 정규분포에서 누적확률 5% 이하에 대응되는 관측값은 
qnorm(0.05, mean= 100, sd= 10)

-> IQ 가 83.5 이하인 사람이 전체의 5% 정도 차지하고 있음을 의미함

qnorm(0.95, mean=100, sd=10)

-> 전체 95% 는 IQ 가 116.4 이하라는 것을 의미함 (상위 5%인 사람은 IQ 가 116.5 이상이라는 뜻)

 

- 확률을 벡터로 지정하면, 동시에 여러 백분위수를 구할 수 있음

  -> 5% 와 95% 에 대응되는 백분위수는 한꺼번에 벡터로 지정함으로써 구할 수 있음

qnorm(c(0.05, 0.95), mean=100, sd=10)

 

- qnorm( ) 함수는 '신뢰구간을 계산할 때 이용 가능'

(예- 평균 0, 표준편차가 1인 표준정규분포에서 표준점수의 95% 신뢰구간 계산 = 2.5% 와 97.5% 의 누적확률에 대응되는 백분위수를 구함)

qnorm(0.025)
qnorm(0.975)

=> - 1.96 부터 1.96  까지가 95% 신뢰구간임을 알 수 있음

 

- 벡터로 한꺼번에 지정하게 되면 '구간'을 한꺼번에 계산 가능

qnorm(c(0.025, 0.975))


3-3. rnorm( )함수 이용

- 정규분포로부터 난수를 생성하기 위해서는 rnorm( ) 함수 이용

# rnorm 의 첫번째 인수: 확률 지정 -> 생성할 난수의 개수 지정
# rnorm 의 두번째 인수 (mean 인수): 정규분포의 평균
# rnorm 의 세번째 인수 (sd 인수) : 정규분포의 표준편차]

# [평균 100, 표준쳔차가 10인 정규분포에서 난수를 한 개 생성하기 위해서는]
# 난수를 생성하기 전에 set.seed( ) 함수를 이용해서 seed 번호를 지정
set.seed(1)
# -> seed 번호를 지정하게 되면 비록 난수이긴 하지만, 동일한 실행 결과가 나올 수 있도록 실행 결과를 재현

rnorm(1, mean= 100, sd= 10)

- 5 개의 난수 생성

rnorm(5, mean= 100, sd= 10)

- 평균과 표준편차를 지정하지 않으면, '표준정규분포를 가정함'

# 평균이 0이고 표준편차가 1인 표준정규로부터 난수 추출
rnorm(1)
rnorm(5)

 

- rnorm( ) 함수의 평균과 표준편차 인수는 벡터로 지정 가능

rnorm(3, mean=c(-10, 0, 10), sd=1)
# -> 평균이 -10, 0, 10 이고, 표준편차가 모두 1인 세 개의 정규분포로부터 각각 한 개씩 총 세개의 난수 생성
rnorm(6, mean=c(-10, 0, 10), sd=1)
# -> [R의 재사용규칙]
# 평균이 -10, 0, 10 이고, 표준편차가 모두 1인 세 개의 정규분포로부터 세 개의 난수 생성하고 -> 다시 또 세 개를 생성해서 모두 여섯 개의 난수 생성

 

- 확률분포 가운데 정규분포는 통계적 검정에 있어서 특히 중요한 분포임

( 대부분의 통계적 검정은 표본 데이터가 정규분포를 따른다는 가정을 전제로 하기 때문에 )

  -> 가설검정을 위한 검정 방법을 선택하기 전에, 우선 데이터의 분포가 종 모양의 정규분포를 갖는지를 확인하는 작업이 필요함

 

4. 데이터의 정규성 테스트 : shapiro.test( ) 함수 이용 

- shapiro.test( ) 함수에 검정할 표본 데이터셋을 지정

# 난수를 생성하기 전에 set.seed( ) 함수를 이용해서 seed 번호를 지정 -> 동일한 결과가 나오도록
set.seed(123

# 1. 정규분포부터 추출한 100개의 표본 데이터 지정
shapiro.test(rnorm(100, mean= 100, sd= 10))
# 2. 정규분포와는 전혀 모양이 다른 '일양분포'로부터 추출한 100개의 표본 데이터를 지정
shapiro.test(runit(100, min= 2, max= 4))

- 일양분포 데이터셋을 생성하기 위해서는 '최솟값'과 '최댓값'을 인수로 지정함

- shapiro.test( ) 함수가 수행하는 샤피로 윌크 검정은 '표본 데이터가 정규성을 만족한다는 귀무가설을 검정'

  -> 유의수준 0.05 를 적용할 때 p 값이 0.05 보다 커야만 귀무가설 그대로 유지 => 표본 데이터가 정규성을 충족한다고 결론 내림

 -> 반대로 p 값이 0.05 보다 작으면 귀무가설을 기각하게 돼서 '표본데이터가 정규성을 충족한다는 주장을 유지하지 못하게 됨'

 

1) 정규분포로부터 추출한 표본에 대한 샤피로 윌크 검정을 보게 되면, p 값은 0.05 보다 훨씬 큼 

   => 귀무가설은 유지되고 이 데이터의 정규성은 예상대로 충족한 것으로 판단

2) 일양분포로부터 추출한 표본의 경우- p값이 0.05 에 훨씬 못 미침 

   => 귀무가설은 기각되어 역시 기대대로 정규성 요건을 충족하지 못한다고 결론을 내릴 수 있음

 

4-1. 데이터의 정규성 확인 (시각화) : 정규 Q-Q 도표을 통해서 (normal quantile plot)

(1) 정규 Q-Q 도표는 qqnorm( ) 함수를 이용해서 생성할 수 있음

  -> qqnorm()함수에 표본 데이터를 인수로 제공하게 되면, R은 표준정규분포로부터 인수로 지어진 표본 데이터 크기만큼의 이론적 표본을 추가로 생성함 

  -> 두 표본의 데이터를 크기 순으로 정렬하고, 정렬된 각 쌍의 데이터를 산점도 형식으로 그리게 되면 정규 Q-Q 도표 완성

 (정규분포로부터 추출한 100개의 표본 데이터를 이용해서 정규 Q-Q 도표 생성)

set.seed(123)

# qqnorm()함수에 표본 데이터를 인수로 제공하게 되면, R은 표준정규분포로부터 인수로 지어진 표본 데이터 크기만큼의 이론적 표본을 추가로 생성함
qqnorm(rnorm(100, mean=100, sd=15), col="blue", 
       main="Sample from Normal Distribution")

- 정규 Q-Q 도표의 x 축은 이론적 정규분포로부터 생성된 표본이고, y 축은 실제 표본

  (x 축의 값은 '정규분포로부터 생성된 값이기 때문에, Q-Q 도표상에 점들이 대각선을 따라서 직선상에 분포하게 되면 인수로 주어진 표본 데이터는 정규분포를 따른다고 볼 수 있음)

 

- 정규 Q-Q 도표상에 qqline( ) 함수를 이용해서 첫번째 4분위수와 세번째 4분위수를 통과하는 직선을 그리게 되면, 정규성 충족 정도를 시각적으로 좀 더 쉽게 확인해 볼 수 있음

 

qqline(rnorm(100, mean=100, sd=10))

- 점들이 비교적 직선에 가까이 위치하고 있는 것을 볼 수 있음 (오른쪽)

   -> 점들이 직선에 가까이 위치할수록 데이터 표본은 정규분포에 근접하게 됨

   -> 정규분포로부터 생성한 Q-Q 도표 상 점들은, '직선 근처에 분포함' 

 

(2) 일양분포로부터 추출한 표본 데이터를 이용해서 정규 Q-Q 도표 그리기

qqnorm(runif(100, min=2, max=4), col="red", 
       main="Sample from Uniform Distribution")
qqline(runif(100, min=2, max=4))

- 정규분포로부터 추출한 표본 데이터에서 대해서 생성한 정규 Q-Q 도표에 비해서 '점들이 직선으로부터 많이 벗어나 있는 것을 볼 수 있음'

 

=> 정규분포로부터 추출한 표본 데이터가 정규성의 조건을 조금 더 잘 충족하고 있다는 것을 의미함 

 

 

 

 


자료출처:

https://github.com/kykwahk/Statistics-R/blob/master/Statistics-R_02.R

 

Statistics-R/Statistics-R_02.R at master · kykwahk/Statistics-R

『R을 이용한 통계데이터분석(제2판)』(곽기영, 도서출판 청람). Contribute to kykwahk/Statistics-R development by creating an account on GitHub.

github.com

 

https://www.youtube.com/watch?v=usFOvwgy8kg&t=403s