t-분포

- 표본의 크기 nn이 충분히 크다는 것은 표본평균의 분포가 정규분포에 근사한다는 의미를 내포한다.
- t분포는 형태가 정규분포와 매우 유사하며, 자유도(degree of freedom)가 증가할수록 표준정규분포에 수렴한다.
p-value
: 귀무가설 H0이 참이라고 가정했을 때,
현재 관측된 검정통계량보다 같거나 더 극단적인 값이 나올 확률이다.
즉,
- p-value가 작다 → 지금 관측된 결과가 우연으로 보기 어렵다
- p-value가 크다 → 이 정도 결과는 충분히 우연히 발생 가능
t-분포를 활용한 두 집단의 평균 검정

합동표준편차 sps_p
: 두 집단이 같은 분산을 가진 하나의 모집단에서 나왔다고 보고
두 표본분산을 표본 크기로 가중 평균한 값
**합동표준편차 sps_p**를 사용하려면 -> 두 모집단의 분산이 동일하다는 등분산 가정이 필요
문제

t-분포를 따르니까 =>> 뮤는 항상 0 => 두 집단의 평균 차이는 0이다 ! ( 𝑋ˉ - Yˉ =0) == 귀무 가설 !!
getwd()
setwd("C:\\Users\\user\\Desktop\\Rwork")
df <-read.csv("two_sample.csv", header= TRUE)
head(df)
str(df)
summary(df)

결측치가 73개가 있지만, str을 통해 확인한게 300개의 object가 있으므로 없어도 괜찮을 수도
-> 그치만 어느 한 데이터만 없는거라면 편향될 수도 있으므로 전처리 시 확인해 볼 필요 존재
result<-subset(df, !is.na(score), c(method, score))
str(result)
우리가 뽑아야되는거 method- score 그리고, 결측치 없게
=> subset() 함수를 이용하면 행을 추출할 수 있다
추출할 때 score에 결측치가 아닌 것만 뽑아달라는 의미 (!is.na(score)),
마지막 인수를 컴바인을 통해 method,score만 뽑아달라는 의미

length(result$score)
length(m1$score)
length(m2$score)
m1<-subset(result, method==1)
m2<-subset(result, method==2)
str(m1)
str(m2)
#----------------------------------------
#각 그룹별 통계량 확인
# 정규성 검정
#method ==1일 때 정규성 = o
shapiro.test(m1$score)
#m1 p-value = 0.7242 => 0.05보다 크니까 정규성 따름
#method ==2일 때 정규성 = x
shapiro.test(m2$score)
#m2 p-value = 0.008546 => 0.05보다 작아서 정규성 안 따름
hist(m1$score)
hist(m2$score)
method ==1일 때 p-value = 0.7242 => 0.05보다 크니까 정규성을 만족한다.
method ==2일 때 p-value = 0.008546 => 0.05보다 작아서 정규성을 만족하지 않는다
따라서 정규성을 맞춰보자 !
-> log를 이용할 수 있다
#정규성을 맞춰보자
#로그 변환 예시
# 1. 전체 데이터에 대해 로그 변환 (모든 행에 동일하게 적용)
result$log_score <- log(result$score) # 그룹별로 로그 취하는 거 아님
str(result)
hist(result$log_score)
# 2. 변환된 데이터를 다시 그룹별로 나눔
m1_log <- subset(result, method == 1)
m2_log <- subset(result, method == 2)
hist(m1_log$log_score)
hist(m2_log$log_score)
# 3. 각 그룹에 대해 다시 정규성 검정 수행
shapiro.test(m1_log$log_score)
shapiro.test(m2_log$log_score)

로그를 적용해버리니 오히려
method1이 정규성을 만족하지 않고, method2가 정규성을 만족한다
\=> 이 방법은 실패 ㅠㅠ
어떤 데이터는 변환 전 데이터를 사용하고, 어떤 데이터는 변환 후 데이터를 사용하는 이런건 절대 불가능 !

지금 편차가 일정하지 않아서 -> t-test를 진행할 수 없다
이상치가 존재할 수도 있다는 이야기 !
이럴 경우 위의 사진에서 처럼 중위수를 가지고 검정하는 방법인 wilcox.test()를 진행해야된다.
=> 중위수로 비모수 추정을 진행하는 셈
# 순위를 이용한 평균차이 검정
# wilcox.test: "한 집단의 데이터가 다른 집단보다 전반적으로 더 큰 순위에 몰려 있는가?"
wilcox.test(score ~ method, data = result)

p-value = 0.1042 > 0.05 -> 귀무가설을 기각할 수 없음 ( 대립가설 채택 불가)
중앙값 또는 전체 분포의 위치 차이를 비교하는 비모수 검정을 진행한 것인데
이 결과는
- method 2가 조금 높아 보일 수는 있으나
- 그 차이가 우연으로도 충분히 발생 가능한 수준
이라고 볼 수 있다.
문제2


1개월 후 = 대응표본
// 코드 넣기
//결과
카이제곱 분포 (x^2-분포)
분산에 대한 분포
- 모집단의 모분산에 대한 가설 검정
- 두 집단간의 동질성 검정에 활용
- 이 N개의 표본들을 단순히 더하는 것이 아니라 제곱을 하여 더하면 양수값 만을 가지는 분포가 된다

Z값은 표준화된 편차 값
=> V= Z의 제곱의 합 : 자유도가 높아질 수록 카이제곱 분포도는 그 자유도 평균을 중심으로 종모양의 형태로 구성된다
=> 정상적인 분산 값이라면 저 그래프 위에 있어야한다
어느범위까지 오차를 인정해줄 것인지를 설정하는 단계 ( 유의수준 α를 설정하여 귀무가설을 기각할 임계 영역을 정하는 단계)

ㅇ원래 데이터가 정규분포일 때 특징
= -> 모수 추정, 가설 검정 둘 다 가능

명목형 데이터는 그대로 수치형이 되는 것이 아니라, ‘도수(빈도)’를 수치로 삼아 교차 분석
=> 교차분석
#H1 : 전과 후(각 쌍의 차이값) 가 다르다
#H0 : 각 개별치의 편차의 평균값은 차이가 없다 -> 평균이 0이라고 주장 가능
모집단 간의 편차가 있을 수도 있으( 존재감)
기대치부터 평균치를 알
표본의 분산을 알고 있음ㄴ -> 카이제곱(독립적) -- 명목형 데이터에 적용 == 교차분석 ~ 통상적이라면
평균 값 알고 있으면, 편차가 중요한지 아닌지 -> T검정 -- 연속형 ( 0.05보다 커야
내가 가지고 있는 편차의 정상/비정상 찾을 수 있응ㅁ
가설검정 하는 이유 귀무가설이 틀렷길바라면서
명목형 데이터는 수치형으로 변환되는 것은 아니지만,
범주별 도수(빈도)를 수치로 활용하여 카이제곱 검정을 통해 분석할 수 있다.
이를 교차분석이라 하며, 관측 빈도와 기대 빈도의 차이를 비교한다.
반면 연속형 데이터에서는 평균이나 분산을 중심으로 가설검정을 수행한다.
대응표본의 경우 개인별 차이값을 산출하고,
그 평균이 0이라는 귀무가설을 검정한다.
가설검정의 목적은 관측된 차이가 표본 오차인지,
아니면 모집단 수준의 실제 차이인지를 판단하는 데 있다.
부모 학력 수준과 자녀 진학 여부는 서로 관련(연관) 있는가?

여기서 변수 둘 다 명목형이므로 평균 비교(t-test) 같은 게 아니라 빈도(도수)로 비교하는 교차분석 + χ² 검정을 씀.
위 표에서 '교수법 A이면서 합격한 사람'의 실제 관측값은 40입니다.
그럼 이 칸의 기대치는 얼마일까요?

install.packages("gmodels")
library(gmodels) # CrossTable() 함수 사용
setwd("C:\\Users\\user\\Desktop\\Rwork")
df <- read.csv("cleanDescriptive.csv", header=TRUE, fileEncoding = "EUC-KR")
df # 확인
summary(df)
x <- df$level2 # 부모의 학력수준 리코딩 변수
y <- df$pass2 # 자녀의 진학여부 리코딩 변수
# 데이터프레임 생성
result<-data.frame(Level=x, Pass=y) #필드명 : Level, Pass
dim(result) #차원 찾기
#---------------------------
table(result) #도수분포표--> 명목형 데이터에서만 사용 가능
#카이제곱의 가치를 찾으려면 옵션 추가 필요(chisq= TRUE)
CrossTable(x,y,chisq= TRUE) #교차분석결과표
#----- 카이제곱 : 빼기-> 제곱 -> 더하기
# p>0.05 통계학적 유의미성 없다 => 귀무가설 채택
#카이제곱의 가치를 찾으려면 옵션 추가 필요
# => 상관관계가 없다 -> 독립적이다
#== 카이제곱 따르려면 독립적 (편차가 크지 않다)== 분포도 균질하다
#교차분석, 독립적 검사, 연관 검사 모두 가능
# 비즈니스 인사이트 분석 --> 머신러닝 크기 줄이기 위해서


χ² 검정은 정확히 뭘 검정하나? (가설)
독립성 검정(=연관성 검정) 기준으로:
- H₀(귀무가설): 부모 학력과 자녀 진학 여부는 독립이다
- H₁(대립가설): 두 변수는 독립이 아니다
출력:
- Chi² = 2.766951
- df = 2
- p-value = 0.2507057
유의수준 α=0.05 기준:
- p = 0.2507 > 0.05
➡ 귀무가설을 기각할 수 없음
➡ 통계적으로는: 부모 학력과 자녀 진학 여부 사이에 유의한 연관이 있다고 보기 어렵다
t-검정과 카이제곱 검정을 어떻게 분류해서 사용해야할까??
A. 종속변수(결과 Y)가 무엇인가?
- 숫자(연속형): 점수, 키, 비용, 시간, 만족도 점수(1~10처럼 ‘점수’로 해석)
- 범주(명목형): 합격/불합격, 남/여, 구매/미구매, 지역(서울/부산…)
B. 비교/관계의 목적이 무엇인가?
- 평균이 다른가? → t-검정
- 비율/분포가 다른가? 또는 독립인가? → 카이제곱(χ²) 검정
t-검정은 언제 쓰나? (연속형 평균 비교)
쓰는 상황
- Y가 **연속형(숫자)**이고,
- “평균이 0(또는 특정 값)과 다른가 / 두 집단 평균이 다른가 / 전후 평균이 다른가”를 볼 때
대표 유형 3개
(1) 단일표본 t-test
예: 우리 반 평균 점수가 5.2인가?
t.test(x, mu = 5.2)
(2) 독립 2표본 t-test (두 집단이 다른 사람들)
예: method1 vs method2 평균 점수 차이
t.test(score ~ method, data = df) # Welch가 기본(권장)
(3) 대응표본 t-test (같은 사람 전/후)
예: before vs after (같은 학생)
t.test(after, before, paired = TRUE)
t-검정에서 “정규성”은 무엇을 보나?
- 독립 2집단: 각 집단이 대체로 정규(대표본이면 완화)
- 대응표본: 차이값(diff = after-before) 이 정규인지 확인
대응 표본 : paired t-검정 ! !
1. 결측 제거(쌍 유지)
result <- subset(df, !is.na(after), c(before, after))
x_before <- result$before
x_after <- result$after
- after에 NA가 있는 행(학생)은 쌍이 깨지므로 통째로 제거
- 그래서 100명 중 4명 제거 → 96쌍 남음
2. 차이값 생성
diff <- x_after - x_before
summary(diff)
- mean(diff) ≈ 1.052
- median(diff) = 1.050
- 대체로 양수 → after가 before보다 대체로 큼
3. 차이값 정규성 검정
shapiro.test(diff)
- p-value = 0.05705
- 유의수준 α = 0.05라하면 -> p = 0.05705 > 0.05
- 정규성을 “기각할 수 없다”
- 즉, “diff가 정규분포가 아니라고 말할 근거가 부족”
- paired t-test를 적용해도 됨
- 왜 before/ after 정규성이 아니라 diff 정규성을 볼까? : 본질이 두 집단 비교가 아니라 차이값 1개짜리 검정이기 때문

4. paired t-test 실행
t.test(x_after, x_before, paired = TRUE)
- t = 13.642, df = 95, p-value < 2.2e-16
- mean difference = 1.052083
- 95% CI: [0.899, 1.205]
5. 가정-검정-결론으로 정리해보자
(1) 가정 확인
- paired t-test 가정: diff 정규성
- Shapiro: p=0.057 → 가정 위반 증거 없음
(2) 검정 수행
- paired t-test 결과 p < 2.2e-16
(3) 결론
- 귀무가설 H0: 평균 차이(=after-before)=0 기각
- 교수법 적용 후 점수가 유의하게 증가
- 평균 증가량 약 1.05점
- 95% CI가 0을 포함하지 않음(0.899~1.205) → 증가가 더 확실
카이제곱(χ²) 검정은 언제 쓰나? (명목형 빈도/비율 비교)
쓰는 상황
- Y가 **명목형(범주)**이거나,
- 두 범주형 변수의 독립성(연관성) 또는 분포(비율) 차이를 볼 때
대표 유형
(1) 독립성 검정 (교차분석)
예: 부모 학력(level2)과 합격(pass2)은 관련 있는가?
tab <- table(level2, pass2)
chisq.test(tab)
# 또는
CrossTable(level2, pass2, chisq = TRUE)
(2) 적합도 검정
예: 관측 비율이 기대 비율과 같은가?
chisq.test(obs_counts, p = expected_probs)
카이제곱 검정의 핵심 조건
- 셀의 기대빈도(Expected count)가 너무 작으면 정확도가 떨어짐
(보통 기대빈도 5 미만 셀이 많으면 Fisher 검정 고려)
chisq.test(tab)$expected
fisher.test(tab) # 2x2 또는 소표본일 때
“어떤 걸 써야 하지?”를 즉시 결정하는 체크리스트
① 결과가 숫자(점수/시간/비용)인가?
- 예 → t-test 계열
- 아니오(합격/실패/성별/학력 등 범주) → χ² 계열
② 비교 구조는?
- 한 집단 vs 기준값 → one-sample t-test
- 서로 다른 두 집단 평균 비교 → two-sample t-test (Welch)
- 같은 대상 전/후 → paired t-test
- 두 범주형 변수의 관계 → χ² 독립성
- 범주 분포가 기대비율과 일치? → χ² 적합도
오늘 내가 확인 데이터를 예시로 기억하면 될 듯
(1) paired_sample.csv (before/after 점수)
- 결과: 점수(연속형)
- 구조: 같은 사람 전/후
→ paired t-test
diff <- after - before
shapiro.test(diff) # 차이값 정규성
t.test(after, before, paired = TRUE)
(2) cleanDescriptive.csv (level2 vs pass2)
- 둘 다 범주(학력/합격여부)
→ 교차분석 + χ² 독립성 검정
tab <- table(level2, pass2)
chisq.test(tab)
R 템플릿
- t-test(연속형 평균)
# 독립 두 집단 평균 비교(권장: Welch)
t.test(y ~ group, data=df)
# 대응표본 전후
t.test(after, before, paired=TRUE)
- χ²(명목형 빈도)
tab <- table(x, y)
chisq.test(tab)
chisq.test(tab)$expected # 기대빈도 확인'LG DX DATA SCHOOL' 카테고리의 다른 글
| 01/12 회귀 분석 마무리 (0) | 2026.01.12 |
|---|---|
| 01/08 가설 검정 (0) | 2026.01.08 |
| 01/06 가설 검정 (정규 분포, t-분포) (0) | 2026.01.06 |
| 01/05 통계 분석의 이해 (1) | 2026.01.05 |
| 12/31 데이터 시각화 라이브러리 (0) | 2025.12.31 |