아이티윌_데이터 분석 55기/강의내용 필기_통계 및 분석

#2 2일차_추론, 확률분포, 정규분포, 표준정규분포, 중심극한정리

ecosso 2026. 4. 14. 16:11

01. 추론

 -01 추정

 

02. 확률분포의 종류

 -01 이산형 확률분포

 -02 연속형 확률분포

 

03. 정규분포 , 표준정규분포

 -01 정규분포

 -02 표준정규분포

 -03 정규분포 시각화

 -04 표준정규분포에서의 95% 영역 시각화

* [ 참고 - 다양한 함수 ]

 

04. 중심극한정리

 -01 증명

 -02 모평균 추정

 -03 모평균 가설검정


 

01. 추론

 -01 추정

              추정

통계량 ----------> 모수

표본평균           모평균( μ )

표본분산           모분산(σ ² )

표본비율           모비율(P)

 

  1-1) 점추정

  1-2) 구간추정

 

 -02 가설검정 


02. 확률분포의 종류

 -01 이산형 확률분포

 1) 베르누이 분포

 2) 이항 분포(*)

 3) 포아송 분포

 ...

 

 -02 연속형 확률분포

 1) 정규분포 : 하나, 두 집단의 모평균 추정

 2) 표준정규분포(*) : 하나, 두 집단의 모평균 추정

 3) t분포 : 하나, 두 집단의 모평균 추정

 4) 카이제곱분포 : 한집단의 모분산 추정

 5) F분포 : 두집단의 모분산비 추정


03. 정규분포 , 표준정규분포

 

 -01 정규분포

 - 평균을 중심으로 좌우대칭, 종모양

 - 분산에 의해 뾰족함의 정도(첨도)가 달라짐

 

 - 중심극한정리의 기본이 되는 분포(*)

 

X ~ N( μ , σ ²) # 모평균, 모분산

Z = (X - μ ) / σ ~ N(0,1)

 

 -02 표준정규분포

 - 정규분포를 따르는 확률변수(X)를 표준화시킨 표준화된 확률변수(Z)가 따르는 분포

 - 평균 : 0, 분산 : 1인 정규분포

 

X ~ N(0,1) 

 

 * 표준화 : X가 가지고 있는 평균 / 표준편차

 

 -03 정규분포 시각화

1) X ~ N (10, 9)

더보기
더보기

  1-1) 샘플링 결과 시각화

> v1 <- rnorm(500, mean = 10, sd =3)
> hist(v1, prob = T)
> plot(kde(v1))

  1-2) 이론 분포

> vx <- seq(0, 20, 0.01)
> vy <- dnorm(vx, mean = 10, sd = 3)
> plot(vx, vy, type = 'l')

2) 표준화된 확률변수의 분포 시각화

더보기
더보기

 2-1) 샘플링 결과 시각화

> vz <- (v1 - 10) / 3
> par(mfrow = c(1,2))
> hist(vz, prob = T)
> plot(kde(vz))

 

  2-2) 이론 분포

> vx <- seq(-3, 3, 0.01)
> vy <- dnorm(vx, mean = 0, sd = 1)
> plot(vx, vy, type = 'l')

 

 -04 표준정규분포에서의 95% 영역 시각화

> vx <- seq(-3, 3, 0.01)
> vy <- dnorm(vx, mean = 0, sd = 1)
> plot(vx, vy, type = 'l', ylim = c(0,0.5),
+      xaxs = 'i', yaxs = 'i')
> vx1 <- seq(-1.96, 1.96, 0.01)
> vy1 <- dnorm(vx1, mean = 0, sd = 1)
> polygon(c(-1.96, vx1, 1.96),
+         c(0, vy1, 0),
+         col = 'lightgreen')
> arrows(1, 0.38, 0.3, 0.3,
+        length = 0.2, lwd = 2, col = 'red')
> text(1.1, 0.4, '95%', col = 'red')
> mtext('-1.96', side = 1, at = -1.96)
> mtext('1.96', side = 1, at = 1.96)

# [ R 분포함수 ]

 -01 d____ : 특정 x값에 대한 확률값 리턴

 -02 p____ : 특정 x값에 대한 누적확률값 리턴

 -03 q____ : 누적확률값에 대한 x 지점

 -04 r____ : 랜덤샘플링

 

# 분포함수 시각화

> px <- seq(-3, x0, 0.01)
> py <- dnorm(px)
> plot(vx, vy, type = 'l', ylim = c(0, 0.5),
+      xlab = '', ylab = '', xaxs = 'i', yaxs = 'i')
> polygon(c(-3, px, x0),
+         c(0,  py, 0),
+         col = 'lightgray')
> arrows(-1.5, 0.25, -0.5, 0.12, length = 0.1, col = 'blue')
> text(-1.7, 0.27, 'pnorm(1)', col = 'blue', cex = 0.9)
> 
> segments(1, y0, -3, y0, col = 'red', lty = 2)
> points(x0, y0, col = 'red', pch = 16)
> mtext('dnorm(1)', side = 2, las = 1, cex = 0.9, col = 'blue')
> 
> x0 <- qnorm(0.5)   # = 0
> px <- seq(-3, x0, 0.01)
> py <- dnorm(px)
> 
> polygon(c(-3, px, x0),
+         c(0,  py, 0),
+         density = 20,     
+         angle = 45,      
+         col = 'red',
+         border = NA)
> 
> segments(x0, 0, x0, dnorm(x0), col = 'red', lty = 2)
> mtext('qnorm(0.5)', side = 1, at = x0, line = 1.5, cex = 0.8)

 

* [ 참고 - 다양한 함수 ]

1) 영역 색칠 

# R에서 polygon 함수를 이용한 도형그리기 + 색칠하기

# 시작점과 끝점은 자동으로 이어짐

polygon(x,          # x축 좌표만 모아서 벡터로 전달
        y,          # y축 좌표만 모아서 벡터로 전달
        col = ,     # 색상
        density = , # 빗금의 밀도
        angle = ,   # 빗금의 각도
        border =)

> plot(c(1,1,0,0), c(0,1,0,1), ylim = c(-2,2), xlim = c(-2,2))

 

# 사각형 그리기

> polygon(c(0,1,1,0),          
+         c(1,1,0,0),         
+         col = 'red',     
+         density = , 
+         angle = ,   
+         border =)

 

# 나비넥타이 그리기

> polygon(c(0,1,1,0),          
+         c(1,0,1,0),         
+         col = 'red',     
+         density = , 
+         angle = ,   
+         border =)

 2) 화살표

arrows(x0,        # 시작점 x축 좌표
       y0,        # 시작점 y축 좌표
       x1,        # 끝점 x축 좌표
       y1,        # 끝점 y축 좌표
       length = ,
       col = ,
       lty = ,
       lwd =)

> arrows(1, 0.38, 0.3, 0.3,
+        length = 0.2, lwd = 2, col = 'red')


04. 중심극한정리

 

표본평균  모평균
추정  
   
분포   정규분포

 

 

"모집단의 분포와 상관없이 (평균 : μ, 분산 : σ ²  )

모집단으로부터 추출한 표본(n)의 평균(표본평균)은 정규분포를 따른다."

->이 때, 표본평균의 평균은 모집단의 평균( μ)에 근사해지며, 표본평균의 분산은 모분산/표본 수( σ ² /n)에 근사해진다.

 

* xbar ~ N(  μ, σ ² / n )

 

 -01 증명

모집단 : N(50, 9) 가정

 

 1) 해당 모집단으로부터 샘플링

 표본 500개, 표본 평균 1개
 이렇게 한 번 뽑은 표본 평균으로 모평균을 추정하는 것을 '점추정' 이라고 함

 

v1 <- rnorm(500, mean = 50, sd = 3)

> v1 <- rnorm(500, mean = 50, sd = 3)
> mean(v1)
[1] 49.59155

 

 -> 점추정은 오차가 크며 그 오차를 알 수 없음이 단점이다.

 

 2) 표본평균의 분포 확인

 xbar ~ N(50, 9/100)

 

 분포를 확인하는 것이기 때문에 표본평균이 여러개가 필요하다.

 100개의 표본, 표본 평균 1000개  (샘플사이즈 수정 진행하였음, 500 -> 100)

> vmean <- c()
> for (i in 1:1000) {
+   v1 <- rnorm(100, mean = 50 ,  sd = 3)
+   vmean <- c(vmean, mean(v1))
+ }

 

> vx1 <- seq(49, 52, 0.01)
> vy2 <- dnorm(vx1, mean = 50, sd = 3/10) # dnorm은 분산이 아닌 표준편차를 써야 한다. 따라서 분산이 9/100이기 때문에 표본평균의 평균은 3/10인 0.3이 된다.
> lines(vx1, vy2, type = 'l', col = 'red')

 3) 표본평균의 기댓값 (평균)

 E(xbar) = μ 

모집단의 평균인 50에 근사한 값이 나온다.

> mean(vmean)
[1] 50.00377

 

 4) 표본평균의 분산 (평균)

모집단의 분산인 9에 근사한 값이 나온다.

> var(vmean)
[1] 0.09040497

 -02 모평균 추정

 1) 점추정 : 모평균을 하나의 점(수치, 특정 값)으로 추정

 

 E(xbar) = μ 

 

  -> 모평균에 대한 점추정값은 표본평균


 2) 구간추정 : 모집단의 모수를 특정 범위로 추정

 

P(ld < z < lu) = 95%

 

 * 신뢰수준(Confidence Level) : 100 x (1 - a)% (a는 조사에서 인정되는 오차 수준)

                                                  추정값이 존재하는 구간에 모수가 포함될 확률

 신뢰수준이 올라가면 신뢰구간 역시 넓어진다.

 

 신뢰구간(Confidence Interval) : 신뢰수준을 기준으로 통계적으로 유의미한 모수의 범위

 

# 신뢰수준 95% 기준

> alpha = 0.05
> ld <- qnorm(alpha/2, mean = 0, sd = 1)
> ld
[1] -1.959964
> lu <- qnorm(1-alpha/2, mean = 0, sd = 1)
> lu
[1] 1.959964

 

 

[ xbar - 1.96 * ( σ/sqrt(n)), xbar + 1.96 * ( σ/sqrt(n)) ]

 

# 신뢰수준 99% 기준

> ld <- qnorm(alpha/2, mean = 0, sd = 1)
> ld
[1] -2.575829
> lu <- qnorm(1-alpha/2, mean = 0, sd = 1)
> lu
[1] 2.575829

 

[ xbar - 2.58 * ( σ/sqrt(n)), xbar + 2.58 * ( σ/sqrt(n)) ]

 

# 예) 우리나라 신생아 몸무게가 성별로 weight.txt 파일로 저장되어 있다.
# 성별에 관계없이 우리나라 신생아의 몸무게를 추정하라.
# 단, 모분산은 5000 가정

> head(df1)
  gender weight
1      1   3837
2      1   3334
3      2   3554
4      2   3838
5      2   3625
6      1   2208

 

1) 점추정

> n1 <- length(df1$weight)
> sigma <- sqrt(5000)
> xbar <- mean(df1$weight)
> xbar
[1] 3275.955

 

2) 구간추정(95% 신뢰구간)

> c(xbar - 1.959964 * (sigma/sqrt(n1)), xbar + 1.959964 * (sigma/sqrt(n1)) )
[1] 3255.061 3296.848

 

 => 우리나라 신생아의 몸무게의 95% 신뢰구간 : [3255.061, 3296.848]


 -03 모평균 가설검정

 

우리나라 신생아의 몸무게의 95% 신뢰구간 : [3255.061, 3296.848]

 

귀무가설 = 영가설 : 모집단의 모수에 대해 어떤 조건을 가정하여 설정하는 가설

H0(귀무가설) : 우리나라 신생아 몸무게가 3300이다.

 

대립가설 = 대안가설 : 귀무가설의 반대되는 가설
H1(대립가설) : 우리나라 신생아 몸무게가 3300보다 작다.

 

>가설검정을 진행하는 방법론 3가지

 1) 검정통계량 -> 기각/채택

 2) 신뢰구간

 3) p-value


[ R 함수를 사용한 모평균 추정 / 가설검정 ]
install.packages('BSDA')
library(BSDA)

z.test(x,                                     # 첫번째 집단 데이터
          y,                                     # 두번째 집단 데이터
          alternative = 'two.sided', # 가설검정 종류(양측검정, 왼쪽검정, 오른쪽검정)
          mu = 0,                            # 가설 가정값
          sigma.x = ,                      # 첫번째 집단의 모표준편차
          sigma.y = ,                      # 두번째 집단의 모표준편차
          conf.level = 0.95)            # 신뢰수준

> z.test(df1$weight, sigma.x = sqrt(5000), mu = 3300)

	One-sample z-Test

data:  df1$weight
z = -2.2557, p-value = 0.02409
alternative hypothesis: true mean is not equal to 3300
95 percent confidence interval:
 3255.061 3296.848
sample estimates:
mean of x 
 3275.955 

 

  > 신뢰구간(95%) : 3255.061 - 3296.848

  > 표본평균(점추정값) : 3275.955

 

# [ 연습문제 ]
# 우리나라 2세 영아의 머리둘레는 작년과 분산이 동일할 것으로 확인(작년분산 : 500)
# 한 번 추출한 샘플의 평균이 250(n=30)일 때,
# 올해 예상되는 머리둘레의 95%, 99% 신뢰구간 추정

 

n1 <- 30
sigma <- sqrt(500)
xbar <- 250

# 95% 신뢰구간
c(xbar - 1.959964 * (sigma/sqrt(n1)), xbar + 1.959964 * (sigma/sqrt(n1))) # 241.9985 258.0015
z.test(rep(250,30), sigma.x = sqrt(500), mu = 250)

> c(xbar - 1.959964 * (sigma/sqrt(n1)), xbar + 1.959964 * (sigma/sqrt(n1))) # 241.9985 258.0015
[1] 241.9985 258.0015
> z.test(rep(250,30), sigma.x = sqrt(500), mu = 250)

	One-sample z-Test

data:  rep(250, 30)
z = 0, p-value = 1
alternative hypothesis: true mean is not equal to 250
95 percent confidence interval:
 241.9985 258.0015
sample estimates:
mean of x 
      250 


# 99% 신뢰구간
c(xbar - 2.575829 * (sigma/sqrt(n1)), xbar + 2.575829 * (sigma/sqrt(n1))) # 239.4842 260.5158
z.test(rep(250,30), sigma.x = sqrt(500), mu = 250, conf.level = 0.99)

> c(xbar - 2.575829 * (sigma/sqrt(n1)), xbar + 2.575829 * (sigma/sqrt(n1))) # 239.4842 260.5158
[1] 239.4842 260.5158
> z.test(rep(250,30), sigma.x = sqrt(500), mu = 250, conf.level = 0.99)

	One-sample z-Test

data:  rep(250, 30)
z = 0, p-value = 1
alternative hypothesis: true mean is not equal to 250
99 percent confidence interval:
 239.4842 260.5158
sample estimates:
mean of x 
      250