01 가설검정 절차
02 문제풀이
-01 문제1
-02 문제2
-03 문제3
-04 문제4
-05 문제5
-06 문제6
01 가설검정 절차
1. 모수
2. 검정통계량
3. 가설형태
4. 검정통계량의 기각역/채택역
5. 유의확률
6. 함수
02 문제풀이
-01 문제1
# 프로세스에서 10개의 제품을 랜덤 샘플링하여 검사한 결과 2개의 불량품이
# 발견되었다. 공정 불량률이 0.1보다 크다고 할 수 있는지
# 유의수준 10%에서 검정하시오.
[ 내 답변 ]
# 가설
# H0 : p = 0.1
# H1 : p > 0.1 (오른쪽검정)
# 모비율 단일 집단 비교
phat <- 2/10
p0 <- 0.1
n <- 10
# 검정통계량
(phat - p0) / sqrt(p0*(1-p0)/n) # 1.054093
# 가설형태 및 기각역/ 채택역
# 오른쪽검정
# 유의수준 10%
qnorm(0.90, mean = 0, sd = 1) # 1.281552
# 기각역 : [1.281552, inf]
# 채택역 : [-inf, 1.281552]
# 검정통계량이 채택역 내 위치하므로 귀무가설을 채택한다.
# 따라서 공정 불량률은 유의수준 90% 수준에서 0.1보다 크다고 말할 수 없다.
# 유의확률
P(P* > 1.054093)
1-(P* < 1.054093)
z <- (phat - p0) / sqrt(p0*(1-p0)/n)
1 - pnorm(z)
# 0.1459203
# 함수
result <- prop.test(2, n, p=0.1, alternative = 'greater', correct = F)
result
> result
1-sample proportions test without continuity correction
data: 2 out of n, null probability 0.1
X-squared = 1.1111, df = 1, p-value = 0.1459
alternative hypothesis: true p is greater than 0.1
95 percent confidence interval:
0.06855799 1.00000000
sample estimates:
p
0.2
[ 문제풀이 ]
불량'률' -> 단일집단에 대한 모비율 가설검정
z분포선상에 있어서 윗쪽(분자)의 값을 확인
소표본일때는 P0가 phat이 된다.
문제는 소표본(10개)에 해당되기 때문에 정확한 유의확률을 구할 수 없으나, 이론적인 공식에 따른 z값은 얼마냐는 prop.test의 correct를 F로 지정하여 구한다. (실제로 소표본일 때는 z값을 구하지 않는다)
# 가설)
H0 : P = 0.1
H1 : P > 0.1 (오른쪽 검정)
# 검정통계량)
n <- 10
x <- 2
p0 <- 0.1
alpha <- 0.01
phat <- x / n
z0 <- (phat - p0) / sqrt(p0 * (1 - p0) / n) # 1.054093
# 임계값
z_alpha <- qnorm(1 - alpha) # 1.281552
# 기각역 : [1.281552, inf]
# 채택역 : [-inf, 1.281552]
# => 귀무가설 채택!
# 유의확률)
p_value <- 1 - pnorm(z0) # 0.1459202 > 0.1 => 귀무가설 채택
# 함수) prop.test
result <- prop.test(X, n, p=p0, alternative = 'greater', correct = F)
F로 옵션을 넣어주어야 연속성보정을 하지 않는다는 옵션이 적용된다.
sqrt(result$statistic) # 1.054093
result$p.value # 0.1459203

-02 문제2
# A회사의 두 라인의 특정 제품의 질량이 동일한지를 가설검정 하기 위해 각각 샘플
# 50개를 조사하였다. 하지만 line_1에 비해 항상 line_2의 질량의 분산이 큰 것으로
# 측정되었는데 수집한 샘플을 통해 line_2의 분산이 크다고 말할 수 있는지를
# 유의수준 1%내에서 가설검정하세요.
v1 <- read.csv('samples.csv')
[ 내 답변 ]
# 가설수립
H0 : line_1 - line_2 = 0
H1 : line_1 - line_2 < 0 (왼쪽검정)
# 두집단의 모분산 비교
# 검정통계량 구하기
x1 <- v1[v1$line==1, 2]
x2 <- v1[v1$line==2, 2]
var1 <- var(v1[v1$line==1, 2])
var2 <- var(v1[v1$line==2, 2])
cov1 <- (((n1 - 1) * var1) + ((n2 - 1) * var2)) / (n1 + n2 - 2)
n1 <- length(v1[v1$line==1, 2])
n2 <- length(v1[v1$line==2, 2])
mean1 <- mean(v1[v1$line==1, 2])
mean2 <- mean(v1[v1$line==2, 2])
var1 / var2 # 0.8884758
# 가설형태 및 기각역/ 채택역
# 왼쪽검정
# 유의수준 1%
q1 <- qf(0.01, df1 = n1 - 1, df2 = n2 - 1)
q1
# 채택역 : [0.5095301, inf]
# 기각역 : [- inf, 0.5095301]
# 검정통계량이 채택역 내 위치하므로 귀무가설 채택
# 유의확률
pf(0.8884758, df1 = n1 - 1, df2 = n2 - 1) # 0.3403008
# 함수
var.test(x1, x2, alternative = "less", conf.level = 0.99)
[ 문제풀이 ]
모평균(질량)이 같냐는 질문에 대답하기 위해서는 등분산성 가정이 필요하다.
# 가설)
H0 : 분산1/분산2 = 1
H1 : 분산1/분산2 < 1 (왼쪽검정)
# 검정통계량)
var1 <- var(y1)
var2 <- var(y2)
F* = var1/var2 ~ F(n-1,m-1)
= 0.8884758
qf(alpha, n-1, m-1) # 0.5095301
# 기각역 : [0, 0.5095301]
# 채택역 : [0.5095301, inf]
# => 귀무가설 채택!
# 유의확률)
P(F < 0.8884758) = pf(0.8884758, n-1, m-1)
= 0.3403008 => 귀무가설 채택!
# 함수) var.test
var.test(y1, y2, alternative = 'less', conf.level = 0.99)
* varTest (EnvStats 패키지) : 단일집단의 모분산 추정 시 사용하며, 두 집단에 대한 모분산 비교는 지원하지 않는다.
* var.test (기본패키지) : 등분산성의 가설에 대한 가정 (두 집단의 분산이 등분산인가? 그렇지 않은가?)
기본패키지는 단일집단의 모분산 추정이 지원되지 않는다.
# F = 0.88848, num df = 49, denom df = 49, p-value = 0.3403
# alternative hypothesis: true ratio of variances is less than 1
# 99 percent confidence interval:
# 0.000000 1.743716
# sample estimates:
# ratio of variances
# 0.8884758

-03 문제3
# 비만약 복용 전후의 체중 측정 결과로서, 체중은 정규분포를 따른다고 가정하자.
# 이를 토대로 비만약 복용 전후의 체중 변화가 있었는지 유의수준 5%에서 검정
x <- c(68, 61, 60, 68, 67, 64, 66, 67, 66, 67, 72, 74, 61, 71, 58, 77) # 복용전
y <- c(56, 55, 67, 62, 59, 67, 50, 60, 59, 53, 60, 65, 62, 61, 64, 57) # 복용후
[ 내 답변 ]
# 가설수립
H0 : x - y = 0
H1 : x - y ! = 0 (양쪽검정)
# 모평균 - 대응되는 두 집단
# 유의수준 5%
# 검정통계량
minus <- x-y
dbar <- mean(minus)
var2 <- var(minus)
sd2 <- sd(minus)
length(x) # 16
dbar / (sd2 / sqrt(16)) # 3.562627
# 가설형태 및 기각역/ 채택역
# 양쪽검정
# 유의수준 5%
qt(0.025, df = 15) # -2.13145
qt(1- 0.025, df = 15) # 2.13145
# 채택역 : [-2.13145, 2.13145]
# 기각역 : -[2.13145 < | 2.13145 >]
# 유의확률
pt(, df = 15) ????
# 함수
t.test(x, y, alternative = '???', paired = TRUE)
[ 문제풀이 ]
# 가설)
H0 : 복용전몸무게평균 - 복용후몸무게평균 = 0
H1 : 복용전몸무게평균 - 복용후몸무게평균 > 0 (오른쪽검정)
# 검정통계량)
D <- x - y
dbar <- mean(x-y)
Sd <- sd(D)
n <- length(D)
alpha <- 0.05
T* = (dbar - 0) / (Sd/sqrt(n))
= 3.562627
qt(1-alpha, df = n-1) # 1.75305
# 기각역 : [1.75305, inf]
# 채택역 : [-inf, 1.75305]
# => 귀무가설 기각!
# 유의확률)
P(T > 3.562627) = 1 - P(T < 3.562627)
= 1 - pt(3.562627, df = n-1)
= 0.00141742 << 0.05 => 귀무가설 기각!
# 함수) t.test
t.test(x, y, alternative = 'greater', paired = T)
# t = 3.5626, df = 15, p-value = 0.001417
# alternative hypothesis: true mean difference is greater than 0
# 95 percent confidence interval:
# 3.492041 Inf
# sample estimates:
# mean difference
# 6.875
-04 문제4
# 두 라인에서 생산되는 초콜릿의 무게는 정규분포
# 라인 1 표본 25개의 무게는 평균 198.5(g), 표준편차 4.8(g),
# 라인 2 표본 34개의 무게는 평균 201.3(g), 표준편차 5.1(g)
# 모평균의 차이가 있는지 유의수준 5%에서 검정하시오.
[ 내 답변 ]
# 가설수립
H0 : 라인1 평균 - 라인2 평균 = 0
H0 : 라인1 평균 - 라인2 평균 != 0 (양측검정)
# 검정통계량
mean1 <- 198.5
mean2 <- 201.3
sd1 <- 4.8
sd2 <- 5.1
n1 <- 25
n2 <- 34
cov1 <- (((n1-1)*sd1^2) + ((n2-1)*sd2^2)) / (n1 + n2 -2) # 24.75947
cov2 <- sqrt(24.75947) # 4.975889
mean1 - mean2 # -2.8
-2.8/(cov2*sqrt(1/n1+1/n2)) # -2.13585
# 채택역 구하기
qt(0.025, df = n1+n2-2) # -2.002465
qt(1- 0.025, df = n1+n2-2) # 2.002465
# 채택역 : [-2.002465, 2.002465]
# 검정통계량이 기각역에 위치하므로 두 라인에서의 평균차이가 유의하게 있다라고 말할 수 있다.
# 유의확률
pt(-2.13585, df = n1+n2-2) # 0.01849992
[ 문제풀이 ]
# 가설)
H0 : 초콜릿무게평균1 - 초콜릿무게평균2 = 0
H1 : 초콜릿무게평균1 - 초콜릿무게평균2 != 0
# 검정통계량)
xbar1 <- 198.5
xbar2 <- 201.3
var1 <- 4.8^2
var2 <- 5.1^2
n <- 25
m <- 34
Var <- ((n-1)*var1 + (m-1)*var2) / (n+m-2) #공통분산 구하기
alpha <- 0.05
T* = (xbar1 - xbar2) / sqrt(var1/n + var2/m) = -2.156016 (등분산성 가정X)
= (xbar1 - xbar2) / sqrt(Var/n + Var/m) = -2.13585(*) (등분산성 가정) # 공통분산이기 때문에 Var가 들어감
qt(alpha/2, n+m-2) # -2.002465
# 채택역 : [-2.002465, 2.002465]
# => 귀무가설 기각!
# 유의확률)
P(T < -2.13585) = pt(-2.13585, df = n+m-2)
= 0.01849992 << 0.025 => 귀무가설 기각!
# ** 추가 : 등분산성 가설검정
H0 : 분산1/분산2 = 1
H1 : 분산1/분산2 != 1
# 검정통계량)
F* = var1/var2 ~ F(n-1, m-1)
= 0.8858131
qf(alpha/2, n-1, m-1) # 0.4573714
qf(1-alpha/2, n-1, m-1) # 2.088486
# 채택역 : [0.4573714, 2.088486]
# => 귀무가설 채택!
* 따라서 등분산성을 가정해야 한다. (공통분산으로 계산을 해주는 것이 맞다.)

-05 문제5
# 품질특성치가 정규분포를 따르는 생산공정에서 품질특성에 대한 분산을
# 추정하기 위하여 10개 제품을 랜덤 샘플링한 결과 다음의 데이터를 구하였다.
# 모분산이 2와 다르다고 할 수 있는지 유의수준 5%에서 검정하시오.
vx <- c(20.0, 21.5, 20.9, 19.8, 22.5, 20.3, 23.6, 18.0, 23.3, 17.8)
[ 내 답변 ]
# 가설수립
H0 : sigma^2 = 2
H1 : sigma^2 != 2
# 검정통계량 구하기
n <- length(vx)
mean1 <- mean(vx)
var(vx) # 4.022333
(n-1) * var(vx) / 2 # 18.1005
q1 <- qchisq(0.025, df = n-1) # 2.700389
q2 <- qchisq(1 - 0.025, df = n-1) # 19.02277
c((n-1)*var(vx)/q2, (n-1)*var(vx)/q1) # [ 1.903035 13.405844 ]
# 검정통계량이 기각역 외 위치하므로 귀무가설이 기각되었다.
# 유의수준 5%에서 해당 모분산은 2와 같다고 말할 수 없다.
# 유의 확률
qchisq(0.5, df = n-1) # 8.342833
pvalue <- 2 * min(pchisq(18.1005, df = n - 1), 1 - pchisq(18.1005, df = n - 1)) #
0.06805061
# 함수
library(EnvStats)
result <- varTest(vx, alternative = 'two.sided', sigma.squared = 2)
result$statistic
[ 문제풀이 ]
# 가설)
H0 : 모분산 = 2
H1 : 모분산 != 2 (양측검정)
# 검정통계량)
n <- length(vx)
Var <- var(vx)
alpha <- 0.05
V* = (n-1) * Var / 2 ~ Chisq(n-1)
= 18.1005
qchisq(alpha/2, df = n-1) # 2.700389
qchisq(1-alpha/2, df = n-1) # 19.02277
# 채택역 : [2.700389, 19.02277]
# => 귀무가설 채택!
# 유의확률)
P(V > 18.1005) = 1 - P(V < 18.1005)
= 1 - pchisq(18.1005, df = n-1)
= 0.0340253 > 0.025 => 귀무가설 채택!
# 함수) varTest
library(EnvStats)
result <- varTest(vx, sigma.squared = 2)
result$statistic # 18.1005
result$p.value # 0.06805061

-06 문제6
# iris 데이터에서 Speces별로 Sepal.Length의 평균차이가 존재하는지 유의수준5%로 가설검정
[ 내 답변 ]
df2 <-iris
df2$Species
# anova
df2$Species <- factor(df2$Species)
lm1 <- lm(Sepal.Length ~ Species, data = df2)
summary(aov(lm1))
# SSE
nrow(df2)
v1 <- df2[df2$Species == 'setosa', 1]
v2 <- df2[df2$Species == 'versicolor', 1]
v3 <- df2[df2$Species == 'virginica', 1]
sse1 <- sum((v1-mean(v1))^2)
sse2 <- sum((v2-mean(v2))^2)
sse3 <- sum((v3-mean(v3))^2)
n1 <- length(v1)
n2 <- length(v2)
n3 <- length(v3)
sse <- sse1 + sse2 + sse3
mse <- sse / (150-3) # 0.2650082
# SSt
sst1 <- n1 * (mean(v1)-mean(df2$Sepal.Length))^2
sst2 <- n2 * (mean(v2)-mean(df2$Sepal.Length))^2
sst3 <- n3 * (mean(v3)-mean(df2$Sepal.Length))^2
sst <- sst1 + sst2 + sst3
mst <- sst / (3-1)
# fscore
mst / mse # 119.2645
# 유의확률
1 - pf(119.2645, 2, 147)
[ 문제풀이 ]
# 가설)
# H0 : 세집단의 평균이 모두 같다
# H1 : 세집단의 평균이 모두 같지 않다 (오른쪽검정)
# 검정통계량)
y1 <- iris[iris$Species == 'setosa', 'Sepal.Length']
y2 <- iris[iris$Species == 'versicolor', 'Sepal.Length']
y3 <- iris[iris$Species == 'virginica', 'Sepal.Length']
n <- 150
n1 <- 50
n2 <- 50
n3 <- 50
alpha <- 0.05
k <- 3
# mse)
sse1 <- sum((y1 - mean(y1))^2)
sse2 <- sum((y2 - mean(y2))^2)
sse3 <- sum((y3 - mean(y3))^2)
sse <- sse1 + sse2 + sse3
mse <- sse / (n-k) # 0.2650082
# mst)
sst1 <- n1 * (mean(y1) - mean(iris$Sepal.Length))^2
sst2 <- n2 * (mean(y2) - mean(iris$Sepal.Length))^2
sst3 <- n3 * (mean(y3) - mean(iris$Sepal.Length))^2
sst <- sst1 + sst2 + sst3
mst <- sst / (k-1) # 31.60607
F* = mst/mse ~ F(k-1, n-k)
= 119.2645
qf(1-alpha, k-1,n-k) # 3.057621
# 기각역 : [3.057621, inf]
# 채택역 : [0, 3.057621]
# => 귀무가설 기각!
# 함수)
m1 <- lm(Sepal.Length ~ Species, data = iris)
summary(aov(m1))
# Df Sum Sq Mean Sq F value Pr(>|F|) <=> P(F>F*)
# Species 2 63.21 31.606 119.3 <2e-16 ***
# Residuals 147 38.96 0.265
'아이티윌_데이터 분석 55기 > 강의내용 필기_통계 및 분석' 카테고리의 다른 글
| #10 10일차_분류분석 (0) | 2026.04.24 |
|---|---|
| #9 9일차_교차분석, 변수 선택 (0) | 2026.04.23 |
| #7 7일차_카이제곱검정, F분포, ANOVA (0) | 2026.04.21 |
| #6 6일차_모비율 차이 검정 (0) | 2026.04.20 |
| #5 5일차_모집단의 가설검정, 두 집단의 모평균 차이 가설검정 (0) | 2026.04.17 |