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

#4 4일차_가설검정, t-분포

ecosso 2026. 4. 16. 16:19

01. 가설검정 

 -01 신뢰구간

 -02 유의확률

  

02. t-분포

 -01 t분포 시각화

 -02 증명


01. 가설검정 

 -01 신뢰구간

 영가설을 신뢰할만한 영역 = 채택역 구간

  1) 양측검정 (α = 0.05)

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

 

  2) 왼쪽검정

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

 

  3) 오른쪽검정

  [xbar - 1.645 * ( σ/sqrt(n)), inf]


 -02 유의확률

   귀무가설을 채택할 확률(유의수준과 비교)

  (검정통계량만으로는 귀무가설의 기각여부를 결정할 수 없다. <- 검정통계량의 채택역, 기각역 구간 확인 필수)

   -> 오차확률 (유의수준 = α)의 크기와 비교하기 위해 유의확률 확인이 필요하다.

 

  1) 양측검정

  p-value = P(Z < z*) (z* < 0)

               = P(Z > z*) (z* > 0)

               => P(Z > |z*|)

 

 결론) p-value > α/2 : H0 채택

          p-value < α/2 : H0 기각

 

  2) 왼쪽검정

 p-value = P(Z < z*)

 

 결론) p-value > α : H0 채택

          p-value < α : H0 기각

 

  3) 오른쪽검정

 p-value = P(Z > z*)

 

 결론) p-value > α : H0 채택

          p-value < α : H0 기각

 


 

# [ 연습문제 1 ]
# A사의 건전지 기대 수명이 100시간이라고 한다.
# A사의 건전지가 실제 기대수명에 충족하는지 확인하고자
# 80개의 건전지를 임의 추출한 결과 98이었을 때,
# A사의 건전지가 실제 기대수명에 충족하는지 여부를 유의수준 1%로 가설검정하여라.
# (단, 모표준편차는 30이라 가정)

 

# 유의확률을 사용한 검정

양측검정, z*가 음수이므로

 

* 검정통계량 구하기
Z* = (98 - 100) / (30/sqrt(80)) # -0.5962848

> (98 - 100) / (30/sqrt(80))
[1] -0.5962848

 

p-value = P(Z < -0.5962848)

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

             = 0.2754925  >>> 0.01/2

                     => 귀무가설을 채택한다.

> pnorm(-0.5962848, mean = 0, sd = 1)
[1] 0.2754925

 

-

 

# z.test

library(BSDA)
z.test(x,                         # 첫번째 집단 데이터
          y,                         # 두번째 집단 데이터
          alternaative = 'two.sided',  # 대립가설(기본 : 양측검정, greater : 오른쪽검정, less : 왼쪽검정)
          mu = 0,                # 영가설(귀무가설) 가정값
          sigma.x =,           # 첫번째 집단의 모표준편차(가정값)
          sigma.y = ,          # 두번째 집단의 모표준편차(가정값)
          conf.level = 0.95 # 신뢰수준(1-α)
          )

> v1 <- rep(98, 80)
> z.test(v1, mu = 100, sigma.x = 30, conf.level = 0.99)

	One-sample z-Test

data:  v1
z = -0.59628, p-value = 0.551
alternative hypothesis: true mean is not equal to 100
99 percent confidence interval:
  89.36041 106.63959
sample estimates:
mean of x 
       98 

 

 > z.test p - value

> 0.2754928 *2
[1] 0.5509856

 

** 원래 양측검정에서의 p-value는 α/2와 비교하는 것이 정확한 측정 방법이다.

    모든 통계 프로그램에서의 가설검정 결과는 α와 비교하기 위하여 기존 p-value * 2 의 값을 리턴한다.

    따라서 모든 통계 프로그램의 가설검정에서 출력되는 p-value는 검정 종류과 상관없이 α와 비교한다.

 


 

# [ 연습문제 2 ]
# A 자동차사의 엔진의 기존 연비는 평균 12.5(km/l), 표준편차 0.5(km/l)로 알려져 있는데,
# 새로 개발한 엔진이 기존 연비보다 개선되었음을 가설 검정
# 총 40대의 자동차 연비를 측정한 결과 평균이 12.64(km/l)

# α = 0.05 유의수준 : 5%

H0 : μ = 12.5
H1 : μ > 12.5 (오른쪽검정)

xbar = 12.64 
μ = 12.5
σ = 0.5
n = 40

 

# 모평균 신뢰구간 가설검정

채택역 : [xbar - 1.645 * ( σ/sqrt(n)), inf]

             = [12.64 - 1.645 * (0.5/sqrt(40)), inf]

             = [12.50995, inf]

 

-

 

#  유의확률을 사용한 검정

오른쪽검정, z*가 양수이므로

 

* 검정통계량 구하기
Z* = (12.64 - 12.5) / (0.5/sqrt(40))

> (12.64 - 12.5) / (0.5/sqrt(40))
[1] 1.770875

 

 2) p-value = P(Z > 1.770875)

                  = pnorm

 

p-value = P(Z > 1.770875)

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

             = 0.03829075 < 0.05

                     => 영가설이 기각되며, 대립가설을 채택한다.

 

-

 

# z.test

v1 <- rep(12.64, 40)
z.test(v1, mu = 12.5, alternative = 'greater', sigma.x = 0.5)

> v1 <- rep(12.64, 40)
> z.test(v1, mu = 12.5, alternative = 'greater', sigma.x = 0.5)

	One-sample z-Test

data:  v1
z = 1.7709, p-value = 0.03829
alternative hypothesis: true mean is greater than 12.5
95 percent confidence interval:
 12.50996       NA
sample estimates:
mean of x 
    12.64 

 

# 영가설을 기각한다. (p-value < 0.05)

 


02. t-분포

정규분포의 경우 표본의 수가 작으면 신뢰도가 낮아지므로 n<30의 경우 t-분포를 사용하여 추정해야 한다.

표준정규분포와 유사(0을 중심으로 좌우대칭을 이루며 종모양이다. 꼬리가 조금더 두꺼운 형태이다.)

* 자유도에 따라 분포가 달라짐 (자유도가 커질수록 첨도가 올라감 -> 표준정규분포에 근사)

 

모수 : k(자유도) => T ~ t(k)

 

 -01 t분포 시각화

vx <- seq(-3, 3, 0.01)
vy1 <- dt(vx, df = 1)
vy2 <- dt(vx, df = 10)
vy3 <- dt(vx, df = 100)

par(mfrow = c(1,1))
plot(vx, vy1, type = 'l', col = 2, ylim = c(0,0.5),
     xlab = 't', main = '자유도의 변화에 따른 t-분포 시각화')
lines(vx, vy2, type = 'l', col = 3)
lines(vx, vy3, type = 'l', col = 4)
legend('topright', legend = c('df=1', 'df=10','df=100'),
       lty = 1, col = 2:4, inset = c(0.02, 0.02))


 -02 증명

 

# [ z분포와 t분포의 관계 ]

중심극한정리에 의해 ( n >= 30 )

xbar ~ N(μ, σ²/n)

Z = (xbar - μ) / (σ/sqrt(n)) ~ N(0,1)

t = (xbar - μ) / (s/sqrt(n)) ~ t(n-1)

 

 

# ** 증명

정규분포(평균 : 10, 표준편차 : 2)을 따르는 x를 50개 추출

 

vmean <- c()
vstd <- c()
for (i in 1:1000) {
  v1 <- rnorm(50, mean = 10, sd = 2)
  vmean <- c(vmean, mean(v1))
  vstd <- c(vstd, sd(v1))
}

# 1) t통계량의 실제 분포 시각화
vt <- (vmean - 10) / (vstd/sqrt(50))
hist(vt, prob = T, xlim = c(-4,4), xlab = 't')

# 2) 이론분포 시각화
T ~ t(n-1)

vx1 <- seq(-4, 4, 0.01)
vy1 <- dt(vx1, df = 49)

lines(vx1, vy1, col = 'red', type = 'l')


# [ 연습문제1 - t검정 ]
# 건강을 위해 하루 10000보 걷는 것이 좋다고 알려져 있다.
# 우리나라 20대를 50명 대상으로 조사한 결과 9235로 조사되었다.
# 건강을 위한 하루 기준에 부합하는지 여부를 유의수준 5%로 검정하세요.
# (단, 표본표준편차 : 1500)

H0 : μ = 10000
H1 : μ ! = 10000 (양측검정) 또는 μ < 10000 (왼쪽검정)

# 1. 검정통계량
t = (xbar - μ) / (s/sqrt(n)) ~ t(n-1)
  = (9235 - 10000) / (1500/sqrt(50))
  = -3.606245


## 채택역 [-2.009575, 2.009575]
qt(0.5/2, mean = 0, sd = 1500)

ld <- qt(0.025, df=49)
lu <- qt(1-0.025, df=49)

> ld <- qt(0.025, df=49)
> ld
[1] -2.009575
> lu <- qt(1-0.025, df=49)
> lu
[1] 2.009575

 

  => (H0 기각) : 건강을 위한 만보 기준에 부합한다고 볼 수 없다.

 

# 왼쪽검정의 경우 
# 채택역 : [-1.676551, inf]
# 기각역 : [-inf, -1.676551]
ld <- qt(0.05, df = 49)

> qt(0.05, df = 49)
[1] -1.676551


 # => (H0 기각) : 건강을 위한 만보 기준에 부합한다고 볼 수 없다.

 

 

 

-

 

# 2. 모평균 신뢰구간
[xbar - 2.009575 * (s/sqrt(n)), xbar + 2.009575 * (s/sqrt(n))]
c(9235 - 2.009575 * (1500/sqrt(50)), 9235 + 2.009578 * (1500/sqrt(50)))

> c(9235 - 2.009575 * (1500/sqrt(50)), 9235 + 2.009578 * (1500/sqrt(50)))
[1] 8808.705 9661.296

 

모평균의 신뢰구간 : [8808.705, 9661.295]

모집단의 가정값(10000)이 모평균의 신뢰구간에 포함되지 않으므로 H0을 기각한다.

 

# 왼쪽검정의 경우

[-inf, xbar + 1.676551 * (s/sqrt(n)]

[-inf, 9235 + 1.676551 * (1500/sqrt(50)]

-

 

# 3. 유의확률
t* < 0 이므로
p-value = P(T < t*)
             = pt(-3.606245, df = 49)
             = 0.0003633745 <<< 0.025  => 따라서 H0을 기각한다.

 


# [ 연습문제2 - t검정 ]
# 여아신생아.txt 파일을 읽고 신생아 몸무게가 2800보다 클 것이다라는
# 가설에 대한 가설 검정 수행
# 유의수준 : 5%

unlist(read.table('여아신생아.txt'))
scan('여아신생아.txt') # 벡터로 불러오기

v1 <- scan('여아신생아.txt')

# 가설
H0 : μ = 2800
H1 : μ > 2800 (오른쪽검정)


# 1) 검정통계량
mean(v1) # 3132.444
sd(v1)   # 631.5825
length(v1)

# v1 -> n : 18

t = (xbar - μ) / (s/sqrt(n))
  = (3132.444 - 2800) / (631.5825/sqrt(18))
  = 2.233185

qt(1-0.05, df = 17) # 1.739607

# 채택역 : [-inf, 1.739607]
# 기각역 : [1.739607, inf]
# => H0 기각!

# 2) 유의확률
# t* > 0 이므로
p-value = p(T > t*)
        = 1 - (pt(2.233185, df = 17))
        = 0.01963432

 0.0196... <<< 0.05
 
 따라서 H0 기각.

# 3) t.test
t.test(v1, alternative = 'greater', mu = 2800)

> t.test(v1, alternative = 'greater', mu = 2800)

	One Sample t-test

data:  v1
t = 2.2332, df = 17, p-value = 0.01963
alternative hypothesis: true mean is greater than 2800
95 percent confidence interval:
 2873.477      Inf
sample estimates:
mean of x 
 3132.444