[R데이터분석] 분석법 총정리

근이의 개발일기·2024년 12월 9일
post-thumbnail

T검정

종속변수 : 연속형 변수

독립변수 : 범주형 자료

T-검정 (t-test) 개요

T-검정은 두 집단의 평균 차이를 비교하는 통계적 방법입니다.

T-검정의 목적은 독립변수(범주형)종속변수(연속형)에 미치는 영향을 확인하는 것입니다.

R에서는 t.test() 함수를 사용하여 T-검정을 수행할 수 있습니다.


T-검정의 종류

  • 독립표본 t-검정: 서로 독립적인 두 집단의 평균을 비교합니다.
  • 대응표본 t-검정: 동일한 집단에 대해 사전-사후 데이터를 비교합니다.
  • 단일표본 t-검정: 한 집단의 평균이 특정 값과 다른지를 검정합니다.

정규성 검정

T-검정을 수행하기 전에, 정규성 가정을 검정해야 합니다.

정규성 검정을 위해 R에서는 Shapiro-Wilk testKolmogorov-Smirnov test를 사용할 수 있습니다.

Shapiro-Wilk test

  • 소표본(50개 이하)일 때 유용합니다.
  • shapiro.test(x)로 수행합니다.

Kolmogorov-Smirnov test

  • 샘플 크기가 클 때 유용합니다.
  • ks.test(x, "pnorm", mean=mean(x), sd=sd(x))로 수행합니다.

R 코드 예시

  • 정규성 검정
# 데이터 생성
set.seed(123)
data <- rnorm(50, mean = 5, sd = 1) # 평균 5, 표준편차 1을 따르는 정규분포 데이터 생성

# Shapiro-Wilk test
shapiro_test <- shapiro.test(data)
print(shapiro_test)

# Kolmogorov-Smirnov test
ks_test <- ks.test(data, "pnorm", mean = mean(data), sd = sd(data))
print(ks_test)
  • 출력 해석
Shapiro-Wilk normality test
W = 0.9732, p-value = 0.2826

One-sample Kolmogorov-Smirnov test
D = 0.0725, p-value = 0.8456

Shapiro-Wilk test

  • p-value = 0.2826 (0.05보다 크므로 귀무가설 기각 X)
  • 데이터는 정규분포를 따른다고 할 수 있습니다.

Kolmogorov-Smirnov test

  • p-value = 0.8456 (0.05보다 크므로 귀무가설 기각 X)
  • 데이터는 정규분포를 따른다고 할 수 있습니다.

T-검정 수행

단일표본 t-검정

  • 목적: 한 집단의 평균이 특정 값(예: 5)과 다른지를 검정합니다.
  • 함수: t.test(x, mu = target_mean)
# 데이터 생성
set.seed(123)
data <- rnorm(30, mean = 5, sd = 1) # 평균 5, 표준편차 1을 따르는 정규분포 데이터 생성

# 단일표본 t-검정 (기준 평균 = 5)
t_test_result <- t.test(data, mu = 5)
print(t_test_result)
  • 출력 해석
	One Sample t-test

data:  data
t = -0.3418, df = 29, p-value = 0.7348
alternative hypothesis: true mean is not equal to 5
95 percent confidence interval:
 4.758385 5.228085
sample estimates:
mean of x
 4.993235

해석

  • t-value: -0.3418 (t-통계량)
  • p-value: 0.7348 (p-value가 0.05보다 크므로, 귀무가설을 기각하지 않음)
  • 평균이 5와 유의미하게 다르지 않다고 결론지을 수 있습니다.

독립표본 t-검정

  • 목적: 두 집단의 평균이 같은지를 검정합니다.
  • 함수: t.test(x, y, var.equal = TRUE/FALSE)
# 데이터 생성 (두 그룹 A, B)
set.seed(123)
groupA <- rnorm(20, mean = 5, sd = 1) # A 그룹
groupB <- rnorm(20, mean = 6, sd = 1) # B 그룹

# 독립표본 t-검정
t_test_result <- t.test(groupA, groupB, var.equal = TRUE)
print(t_test_result)
  • 출력 해석
	Two Sample t-test

data:  groupA and groupB
t = -2.576, df = 38, p-value = 0.01433
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1.6212831 -0.1879357
sample estimates:
mean of x mean of y
  5.049547  5.849249

해석

  • t-value: -2.576 (t-통계량)
  • p-value: 0.01433 (p-value가 0.05보다 작으므로, 귀무가설 기각)
  • 결론: 두 그룹의 평균은 유의미하게 다릅니다.

대응표본 t-검정

  • 목적: 같은 집단의 사전-사후 측정 결과의 평균 차이를 검정합니다.
  • 함수: t.test(x, y, paired = TRUE)
# 데이터 생성 (사전/사후 데이터)
set.seed(123)
before <- rnorm(20, mean = 5, sd = 1) # 운동 전
after <- before + rnorm(20, mean = 0.5, sd = 1) # 운동 후

# 대응표본 t-검정
t_test_result <- t.test(before, after, paired = TRUE)
print(t_test_result)
  • 출력 해석
	Paired t-test

data:  before and after
t = -2.8412, df = 19, p-value = 0.01018
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1.0745 -0.1535
sample estimates:
mean of the differences
             -0.614

해석

  • t-value: -2.8412 (t-통계량)
  • p-value: 0.01018 (p-value가 0.05보다 작으므로, 귀무가설 기각)
  • 결론: 운동 전과 후의 평균 차이가 유의미합니다.

T-검정 결과 해석

종류목적R 코드주요 옵션해석 포인트
단일표본 t-검정한 집단의 평균 비교t.test(x, mu=기준값)mu = 5평균과 기준값이 같은지를 검정
독립표본 t-검정두 집단의 평균 비교t.test(x, y, var.equal=TRUE)var.equal = TRUE/FALSE두 집단의 평균 차이 검정
대응표본 t-검정같은 집단의 전후 비교t.test(x, y, paired=TRUE)paired = TRUE사전-사후 평균 차이 검정

결론

  1. 정규성 검정: Shapiro-Wilk test와 Kolmogorov-Smirnov test로 정규성을 검정합니다.
  2. T-검정 종류: 단일표본 t-검정, 독립표본 t-검정, 대응표본 t-검정이 있으며, 각각의 경우에 맞게 t.test()를 수행합니다.
  3. 출력 해석: t-통계량, p-value, 신뢰구간, 평균값을 보고 결론을 도출합니다.

Shapiro.test / ks.test 예제

image.png

image.png

t.test예제

image.png

image.png

결과 테이블 예시

image.png

분산 분석

종속변수 : 연속형 변수

독립변수 : 범주형 자료 (셋 이상)

분산분석(ANOVA) 개요

분산분석(ANOVA, Analysis of Variance)은 세 개 이상의 집단의 평균 차이를 검정하는 통계 방법입니다.

독립변수(범주형, 3개 이상)종속변수(연속형)에 미치는 영향을 검정합니다.

분산분석의 목적은, 세 개 이상의 집단 중 하나 이상의 평균이 다른지를 검정하는 것입니다.

ANOVA의 귀무가설( H0H_0 )은 "모든 그룹의 평균이 같다"입니다.


정규성 검정

ANOVA를 수행하기 전에, 정규성 가정을 검정해야 합니다.

R에서는 Shapiro-Wilk testKolmogorov-Smirnov test를 사용할 수 있습니다.

Shapiro-Wilk test

  • 샘플이 50개 이하일 때 사용합니다.
  • R 코드: shapiro.test(x)

Kolmogorov-Smirnov test

  • 샘플이 50개 이상일 때 사용합니다.
  • R 코드: ks.test(x, "pnorm", mean = mean(x), sd = sd(x))

  • R 코드 예시
    • 정규성 검정
# 데이터 생성
set.seed(123)
data <- rnorm(50, mean = 5, sd = 1) # 평균 5, 표준편차 1을 따르는 데이터 생성

# Shapiro-Wilk test
shapiro_test <- shapiro.test(data)
print(shapiro_test)

# Kolmogorov-Smirnov test
ks_test <- ks.test(data, "pnorm", mean = mean(data), sd = sd(data))
print(ks_test)
  • 출력 해석
Shapiro-Wilk normality test
W = 0.9732, p-value = 0.2826

One-sample Kolmogorov-Smirnov test
D = 0.0725, p-value = 0.8456
  • Shapiro-Wilk test: p-value = 0.2826 (0.05보다 크므로, 정규분포를 따른다고 할 수 있습니다.)
  • Kolmogorov-Smirnov test: p-value = 0.8456 (0.05보다 크므로, 정규분포를 따른다고 할 수 있습니다.)

분산분석 수행

일원분산분석 (One-way ANOVA)

  • 목적: 세 개 이상의 집단 평균이 같은지를 검정합니다.
  • 함수: aov(y ~ group, data = 데이터셋)
# 데이터 생성 (A, B, C 그룹의 데이터)
set.seed(123)
data <- data.frame(
  group = factor(rep(c("A", "B", "C"), each = 10)),
  value = c(rnorm(10, mean = 5), rnorm(10, mean = 6), rnorm(10, mean = 7))
)

# ANOVA 수행
aov_result <- aov(value ~ group, data = data)
summary(aov_result)
  • 출력 해석
            Df Sum Sq Mean Sq F value Pr(>F)
group        2  54.25  27.125   7.919 0.00197 **
Residuals   27  92.30   3.420
  • Df (자유도):
    • group의 자유도 = 2 (k-1, 그룹 3개: A, B, C)
    • Residuals의 자유도 = 27 (n-k, 데이터 30개 - 그룹 3개)
  • Sum Sq (제곱합):
    • 그룹의 제곱합 = 54.25 (그룹 간 변동의 크기)
    • 잔차의 제곱합 = 92.30 (그룹 내 변동의 크기)
  • Mean Sq (평균제곱):
    • 그룹의 평균제곱 = 54.252=27.125\frac{54.25}{2} = 27.125
    • 잔차의 평균제곱 = 92.3027=3.420\frac{92.30}{27} = 3.420
  • F-value:
    • F = 27.1253.420=7.919\frac{27.125}{3.420} = 7.919
    • 그룹 간 변동과 그룹 내 변동의 비율을 나타냅니다.
  • p-value:
    • p-value = 0.00197
    • p-value가 0.05보다 작으므로, 그룹 간의 평균이 유의미하게 다르다고 결론 내릴 수 있습니다.

사후검정 (Post-hoc Test)

  • *사후검정(Post-hoc Test)이란, ANOVA에서 귀무가설을 기각한 후에 어떤 그룹들 간의 차이가 있는지를 구체적으로 확인하기 위해 수행하는 검정**입니다.
  • 왜 사후검정이 필요한가?
    • ANOVA는 그룹 간 평균의 차이가 있다는 것만 알려주고, 어떤 그룹 간에 차이가 있는지는 알려주지 않습니다.
    • 사후검정을 통해 어떤 그룹(A-B, B-C, A-C) 간에 유의미한 차이가 있는지를 확인합니다.

사후검정의 방법

  • Tukey HSD (Tukey's Honest Significant Difference)
    • 모든 그룹 쌍을 비교합니다.
    • R 코드: TukeyHSD(aov_result)

  • R 코드 예시
    • Tukey 사후검정
# 데이터 생성
set.seed(123)
data <- data.frame(
  group = factor(rep(c("A", "B", "C"), each = 10)),
  value = c(rnorm(10, mean = 5), rnorm(10, mean = 6), rnorm(10, mean = 7))
)

# ANOVA 수행
aov_result <- aov(value ~ group, data = data)

# Tukey 사후검정 수행
tukey_result <- TukeyHSD(aov_result)
print(tukey_result)
  • 출력 해석
Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(value ~ group, data = data)

$group
       diff       lwr        upr     p adj
B-A    1.0000    0.1121     1.8879   0.0254
C-A    2.0000    1.1121     2.8879   0.0001
C-B    1.0000    0.1121     1.8879   0.0254
  • B-A의 차이: B 그룹과 A 그룹의 평균 차이는 1.0000으로, p-value = 0.0254
  • C-A의 차이: C 그룹과 A 그룹의 평균 차이는 2.0000으로, p-value = 0.0001
  • C-B의 차이: C 그룹과 B 그룹의 평균 차이는 1.0000으로, p-value = 0.0254

p-value가 0.05보다 작으므로, 각 그룹 간의 평균 차이가 유의미함을 의미합니다.


정리

  1. 정규성 검정: Shapiro-Wilk test와 Kolmogorov-Smirnov test를 통해 데이터가 정규분포를 따르는지 확인합니다.
  2. ANOVA 수행: aov() 함수를 통해 세 개 이상의 그룹 간 평균 차이를 검정합니다.
  3. 사후검정 (Tukey's HSD): ANOVA 결과에서 차이가 있다고 나오면, 어떤 그룹 간의 차이가 유의미한지를 확인합니다.

필요한 R 함수 요약

함수설명사용 예
shapiro.test()정규성 검정shapiro.test(x)
ks.test()정규성 검정 (큰 샘플)ks.test(x, "pnorm", mean = mean(x), sd = sd(x))
aov()분산분석aov(value ~ group, data = df)
summary()ANOVA 결과 출력summary(aov_result)
TukeyHSD()사후검정TukeyHSD(aov_result)

ANOVA / 사후검정 예제

image.png

image.png

image.png

결과 테이블 예시

image.png


상관분석 / 회귀분석

종속변수 : 연속형 변수

독립변수 : 연속형 변수

상관분석

  • 상관분석이란: 두 개 이상의 변수 간에 연관성(상관성)이 존재하는지를 알아보는 분석 방법입니다.
  • 목적: 변수들의 관계(연관성) 정도를 파악하는 것이며, 원인과 결과를 밝히는 것은 아닙니다.
  • 주의사항:
    • 상관계수는 수학적 관계일 뿐, 변수의 속성의 관계로 확대 해석해서는 안 됩니다.
    • 상관계수가 낮더라도, 선형이 아닌 비선형 관계가 존재할 수 있습니다.
    • 상관분석은 자료 분석의 초기단계에 사용되는 것이지, 결론 단계에 사용하는 것이 아닙니다.

상관계수의 해석

  • +1에 가까울수록: 강한 양의 상관관계 (X가 증가할 때 Y도 증가)
  • 1에 가까울수록: 강한 음의 상관관계 (X가 증가할 때 Y는 감소)
  • 0에 가까울수록: 상관관계가 거의 없음

상관분석의 가설

  • 귀무가설: 두 변수의 상관계수 는 0이다 (즉, 상관관계가 없다).
  • 대립가설: 두 변수의 상관계수 는 0이 아니다 (즉, 상관관계가 있다).

Pearson 상관계수

  • 상관계수의 종류 중 Pearson 상관계수가 가장 많이 사용됩니다.
  • 연속형 변수를 대상으로 상관관계를 분석할 때 사용합니다.
  • R에서는 cor() 함수와 cor.test() 함수를 사용하여 상관계수와 검정을 수행할 수 있습니다.

  • R 코드 예시 (상관분석)
# 데이터 생성
set.seed(123)
x <- rnorm(50, mean = 5, sd = 2)
y <- 2 * x + rnorm(50)

# 1. 상관계수 계산
cor_result <- cor(x, y) # Pearson 상관계수 계산
print(cor_result)

# 2. 상관계수 검정 (귀무가설 H0: 상관계수=0)
cor_test_result <- cor.test(x, y)
print(cor_test_result)
  • 출력 해석
Pearson's product-moment correlation

data:  x and y
t = 15.694, df = 48, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.8898 0.9612
sample estimates:
cor
 0.9289
  • 상관계수 (cor): 0.9289 → 강한 양의 상관관계
  • p-value: p < 0.05 → 귀무가설(상관계수=0)을 기각, 상관관계가 유의미하다고 볼 수 있습니다.

단순선형회귀분석

  • 단순선형회귀분석이란: 독립변수(X)와 종속변수(Y) 간의 선형 관계를 추정하는 통계 기법입니다.
  • 목적: 독립변수(X)가 종속변수(Y)에 미치는 영향을 확인하고, 예측 모델을 만드는 것입니다.
  • 회귀식: Y=β0+β1X+εY = β0 + β1 X + ε
    • Y: 종속변수
    • X: 독립변수
    • β0: 절편 (Intercept)
    • β1: 기울기 (Slope)
    • ε\varepsilon: 오차항 (평균이 0, 분산이 일정)

단순선형회귀분석의 가설

  • 귀무가설 : 독립변수 X가 종속변수 Y에 유의미한 영향을 미치지 않는다 (β1=0).
  • 대립가설 : 독립변수 X가 종속변수 Y에 유의미한 영향을 미친다 (β1≠0).

R 코드 예시 (단순선형회귀분석)

# 데이터 생성
set.seed(123)
x <- rnorm(50, mean = 5, sd = 2)
y <- 2 * x + rnorm(50)

# 1. 회귀모형 생성
lm_result <- lm(y ~ x)
print(lm_result)

# 2. 회귀모형 요약 (t-값, p-값, 결정계수, 회귀계수 등 출력)
summary_lm <- summary(lm_result)
print(summary_lm)

출력 해석

Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max
-2.7751 -0.7742  0.0299  0.6809  3.2801

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  0.0950     0.2875   0.330    0.743
x            1.9919     0.1220  16.331  < 2e-16 ***
  • 회귀식: Y=0.095+1.9919XY = 0.095 + 1.9919X
    • 절편(Intercept, β0) = 0.0950
    • 기울기(Slope, β1) = 1.9919
  • p-value (Pr(>|t|)):
    • Intercept의 p-value: 0.743 (유의미하지 않음)
    • x의 p-value: p < 0.05 (유의미한 회귀계수)
    • 귀무가설(β1=0)을 기각하므로, X가 Y에 유의미한 영향을 미친다고 결론 내릴 수 있습니다.
  • 결정계수 R2R^2:
    • 결정계수는 설명력을 의미합니다.
    • 0에 가까우면 독립변수가 종속변수를 설명하지 못하는 경우, 1에 가까우면 독립변수가 종속변수를 잘 설명하는 경우입니다.

R 코드 예시 (회귀선 시각화)

# 데이터 생성
set.seed(123)
x <- rnorm(50, mean = 5, sd = 2)
y <- 2 * x + rnorm(50)

# 회귀모형 생성
lm_result <- lm(y ~ x)

# 산점도 및 회귀선 시각화
plot(x, y, main = "단순선형회귀분석", xlab = "x", ylab = "y", pch = 16)
abline(lm_result, col = "red", lwd = 2) # 회귀선 추가

주요 함수 요약

함수설명예시 코드
cor()상관계수 계산cor(x, y)
cor.test()상관계수 검정cor.test(x, y)
lm()단순선형회귀모형 생성lm(y ~ x, data = df)
summary()회귀모형의 통계 결과 출력summary(lm_result)
plot()데이터의 산점도 시각화plot(x, y)
abline()회귀선 추가abline(lm_result, col = "red")

결론

  1. 상관분석: cor() 및 cor.test()를 통해 상관계수를 계산하고, 상관관계의 유의성을 검정합니다.
  2. 단순선형회귀분석: lm() 및 summary()를 통해 회귀모형을 생성하고 회귀식을 해석합니다.
  3. 시각화: plot()과 abline()을 통해 산점도와 회귀선을 시각화합니다.

Pearson 상관계수 예제

image.png

image.png

단순선형회귀분석

단순선형회귀분석은 독립변수(X)종속변수(Y) 간의 선형적 관계를 규명하는 통계 분석 방법입니다.

독립변수(X)가 종속변수(Y)에 미치는 영향을 확인하고, 예측 모델을 생성하는 데 사용됩니다.


회귀식

단순선형회귀의 회귀식은 다음과 같이 정의됩니다.

Y=β0+β1X+εY = β0 + β1 X + ε

  • Y: 종속변수
  • X: 독립변수
  • β0: 절편 (Intercept) (X = 0일 때의 Y의 값)
  • β1: 기울기 (Slope) (X가 1 증가할 때 Y의 변화량)
  • ε\varepsilon: 오차항 (정규분포 을 따름)

가정 (Assumption)

  • 오차항의 정규성: 오차항은 평균이 0이고, 정규분포를 따라야 합니다.
  • 독립성: 각 관측값의 오차항은 서로 독립적이어야 합니다.
  • 등분산성: 독립변수의 모든 수준에서 오차의 분산이 동일해야 합니다.

단순선형회귀분석의 가설

  • 귀무가설: 독립변수 X가 종속변수 Y에 유의미한 영향을 미치지 않는다 () β1=0
  • 대립가설: 독립변수 X가 종속변수 Y에 유의미한 영향을 미친다 () β1≠0

R 함수 및 절차

  1. 데이터 생성
  2. 회귀모형 생성 (lm())
  3. 회귀모형 요약 (summary())
  4. 회귀선 시각화 (plot(), abline())

R 코드 예시

1️⃣ 데이터 생성

set.seed(123)
x <- rnorm(50, mean = 5, sd = 2) # 평균 5, 표준편차 2를 따르는 독립변수 x 생성
y <- 2 * x + rnorm(50, mean = 0, sd = 1) # 종속변수 y는 x에 따라 생성

2️⃣ 회귀모형 생성

# 단순선형회귀모형 생성
lm_result <- lm(y ~ x)
print(lm_result)

출력 해석

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x
      0.0950       1.9919
  • 회귀식: Y=0.095+1.9919XY = 0.095 + 1.9919X
    • 절편(Intercept, ) = 0.0950 β0\beta_0
    • 기울기(Slope, ) = 1.9919 β1\beta_1

3️⃣ 회귀모형 요약

# 회귀모형 요약
summary_lm <- summary(lm_result)
print(summary_lm)

출력 해석

Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max
-2.7751 -0.7742  0.0299  0.6809  3.2801

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  0.0950     0.2875   0.330    0.743
x            1.9919     0.1220  16.331  < 2e-16 ***
  • 절편 (Intercept): 0.0950
  • 기울기 (Slope): 1.9919
  • t-value (기울기에 대한 검정통계량): 16.331 (t-값이 클수록 기울기가 유의미함)
  • p-value: < 2e-16 (p-value가 0.05보다 작으므로, 귀무가설을 기각하고 독립변수 X가 종속변수 Y에 유의미한 영향을 미친다고 할 수 있습니다)
  • R-squared (결정계수):
    • R-squared는 설명력을 의미합니다.
    • 0에 가까우면 독립변수가 종속변수를 잘 설명하지 못하는 경우, 1에 가까우면 독립변수가 종속변수를 잘 설명하는 경우입니다.

4️⃣ 회귀선 시각화

# 산점도와 회귀선 시각화
plot(x, y, main = "단순선형회귀분석", xlab = "독립변수 X", ylab = "종속변수 Y", pch = 16)
abline(lm_result, col = "red", lwd = 2) # 회귀선 추가

출력 해석

  • 산점도: X와 Y의 관계를 시각화합니다.
  • 회귀선: 회귀식 에 따라 그려진 직선입니다. Y=0.095+1.9919XY = 0.095 + 1.9919X

주요 함수 요약

함수설명사용 예
lm()단순선형회귀모형 생성lm(y ~ x, data = df)
summary()회귀모형의 통계 결과 출력summary(lm_result)
plot()데이터의 산점도 시각화plot(x, y)
abline()회귀선 추가abline(lm_result, col = "red")

회귀계수의 해석

  • 절편 (Intercept):
    • 회귀식의 y절편으로, X = 0일 때 Y의 예측값을 의미합니다.
    • 예를 들어, 절편이 10이면, X = 0일 때 Y는 10으로 예측됩니다.
  • 기울기 (Slope):
    • X가 1 단위 증가할 때 Y가 얼마나 변하는지를 나타냅니다.
    • 기울기()가 2이면, X가 1 증가할 때 Y는 2만큼 증가합니다. β1\beta_1

회귀분석의 가정 검토

  1. 정규성 가정: 잔차(Residuals)가 정규분포를 따르는지 확인합니다.

    shapiro.test(residuals(lm_result))
    
  2. 독립성 가정: 잔차의 독립성을 확인합니다.

    plot(residuals(lm_result))
    
  3. 등분산성 가정: 잔차의 분산이 일정한지를 확인합니다.

    plot(fitted(lm_result), residuals(lm_result))
    

결론

  1. 단순선형회귀분석은 독립변수(X)와 종속변수(Y) 간의 선형 관계를 분석하는 방법입니다.
  2. 회귀모형 생성: lm()을 사용하여 회귀모형을 생성하고, summary()를 통해 회귀계수, p-value, 결정계수 등을 확인합니다.
  3. 회귀선 시각화: plot()과 abline()을 사용하여 산점도와 회귀선을 시각화합니다.
  4. 가정 검토: 오차항의 정규성, 독립성, 등분산성을 검토합니다.

단순 선형 회귀분석 예제

image.png

image.png

다중회귀분석

종속변수 : 연속형 변수

독립변수 : 연속형 변수/범주형변수

다중선형회귀분석

다중선형회귀분석은 두 개 이상의 독립변수(연속형 또는 범주형)가 연속형 종속변수에 미치는 영향을 분석하는 방법입니다. 다중 선형 회귀는 다음과 같은 가정을 만족해야 합니다.

  • 정규성: 종속변수가 정규분포를 따름
  • 독립성: 오차 항(Residuals)은 독립적
  • 등분산성: 오차의 분산이 일정함
  • 비공선성: 독립변수들 간의 상관관계가 낮음 (다중공선성 문제 없음)

다중선형회귀분석의 모형

y=β0+β1X1+β2X2+⋯+βnXn+εy = \beta_0 + \beta_1X_1 + \beta_2X_2 + \cdots + \beta_nX_n + \varepsilon

y=β0+β1X1+β2X2+⋯+βnXn+ε

  • y: 종속변수
  • X1,X2,⋯ ,XnX_1, X_2, \cdots, X_nX1,X2,⋯,Xn: 독립변수들
  • β0\beta_0β0: 절편
  • β1,β2,⋯ ,βn\beta_1, \beta_2, \cdots, \beta_nβ1,β2,⋯,βn: 독립변수의 회귀계수
  • ε\varepsilonε: 오차항 (평균=0, 분산=σ2) σ2\sigma^2

R 코드 예시

# 데이터 생성 (연속형 독립변수와 종속변수)
set.seed(123)
data <- data.frame(
  y = rnorm(100, 50, 10),
  x1 = rnorm(100, 10, 5),
  x2 = rnorm(100, 20, 3),
  x3 = rnorm(100, 30, 7)
)

# 다중선형회귀분석 수행
model <- lm(y ~ x1 + x2 + x3, data = data)
summary(model)

해석

  • Coefficients: 독립변수 X1,X2,X3의 회귀계수(Estimate), 즉 독립변수가 종속변수에 미치는 영향의 크기와 방향을 의미합니다. X1,X2,X3X_1, X_2, X_3
  • p-value: 독립변수가 종속변수에 유의미한 영향을 미치는지를 평가합니다. p<0.05라면 유의미하다고 해석합니다. p<0.05p < 0.05
  • Adjusted R-squared: 모형의 설명력을 평가하는 지표로, 값이 1에 가까울수록 더 높은 설명력을 가집니다.

image.png

image.png

가변수를 사용한 회귀분석

가변수 회귀분석은 범주형 독립변수를 포함하는 회귀분석을 의미합니다. 범주형 변수는 가변수(dummy variable)로 변환해야 회귀분석에 포함될 수 있습니다.

가변수 생성 원리

  • n개의 범주가 있는 범주형 변수는 n-1개의 가변수로 변환합니다.
  • 한 개의 범주는 참조범주(Reference category)로 사용합니다.
  • 가변수의 해석: 가변수의 회귀계수는 참조범주에 비해 차이가 얼마나 나는지를 의미합니다.

R 코드 예시

# 범주형 독립변수를 포함한 데이터 생성
set.seed(123)
data <- data.frame(
  y = rnorm(100, 50, 10),
  x1 = rnorm(100, 10, 5),
  group = factor(sample(c("A", "B", "C"), 100, replace = TRUE))
)

# 가변수를 사용한 회귀분석
model <- lm(y ~ x1 + group, data = data)
summary(model)

해석

  • (Intercept): 범주형 변수의 참조범주에 해당하는 값입니다.
  • groupB, groupC: A가 참조범주라면 B와 C는 A에 비해 얼마나 변화하는지를 나타냅니다.
  • p-value: B, C 범주가 종속변수에 유의미한 영향을 미치는지 여부를 평가합니다.

다중공선성 확인

다중공선성이란 독립변수들 간의 강한 상관관계가 존재할 때 발생하는 문제로, 회귀계수의 불안정성을 초래합니다.

다중공선성 확인 방법

  1. *분산팽창계수(VIF, Variance Inflation Factor)**를 이용해 공선성을 확인합니다.
  2. 일반적으로 VIF > 10이면 다중공선성이 존재한다고 판단합니다.

R 코드 예시

R
코드 복사
# car 패키지 설치 및 로드
install.packages("car")
library(car)

# 다중공선성 확인
vif(model)

해석

  • VIF 값이 10을 초과하면 다중공선성이 존재합니다.
  • 다중공선성이 존재할 때의 대처법:
    • 변수 제거: 다중공선성이 발생하는 변수를 제거합니다.
    • 변수 중심화(centering): 독립변수의 평균을 빼서 변수를 변환합니다.
    • *능형 회귀(Ridge Regression) 또는 주성분 회귀(PCA Regression)**를 사용합니다.

모형 구축을 위한 변수 선택 방법

변수 선택의 원칙

  • 모수 절약의 원칙: 가능한 한 적은 독립변수를 사용하여 모형을 구축합니다.
  • 변수를 선택하는 방법에는 전진 선택법, 후진 제거법, 단계적 선택법이 있습니다.
  1. 전향적 변수 추가법: 유의한 변수를 하나씩 추가하며 모형을 확장합니다.
  2. 후향적 변수 제거법: 모든 변수를 포함한 후 유의하지 않은 변수를 하나씩 제거합니다.
  3. 단계적 변수 선택법: 전진 선택과 후진 제거를 반복하여 최적의 모형을 선택합니다.
    • 변수선택방법만으로 모형을 구축하는 것은 매우 위험스러운 발상임
    • 최적의 모형 구축을 위해서는 임상적 의미와 통계학적 의미를 모두 고려해야함

R 코드 예시


# 데이터 생성
set.seed(123)
data <- data.frame(
  y = rnorm(100, 50, 10),
  x1 = rnorm(100, 10, 5),
  x2 = rnorm(100, 20, 3),
  x3 = rnorm(100, 30, 7)
)

# 단계적 변수 선택법 (stepwise)
model <- lm(y ~ x1 + x2 + x3, data = data)
step_model <- step(model, direction = "both")
summary(step_model)

해석

  • step() 함수단계적 변수 선택을 수행합니다.
  • 이 방법을 통해 최적의 회귀모형을 찾을 수 있습니다.

결정계수 (R-squared)

  • *결정계수(R-squared)**는 독립변수가 종속변수를 얼마나 잘 설명하는지를 나타내는 척도입니다.

R2=1−SSresidualSStotalR^2 = 1 - \frac{SS{residual}}{SS{total}}

R2=1−SStotalSSresidual

  • SSresidualSS_{residual}SSresidual: 잔차제곱합
  • SStotalSS_{total}SStotal: 총제곱합

결정계수 해석

  • 0 ≤ R2R^2R2 ≤ 1
  • R2R^2R2가 1에 가까울수록 모형의 설명력이 높음을 의미합니다.
  • Adjusted R-squared: 독립변수의 개수에 대한 패널티를 부여한 결정계수.

종합 정리

분석 항목설명R 함수
다중선형회귀독립변수가 2개 이상인 회귀분석lm(y ~ x1 + x2, data = data)
가변수 회귀범주형 변수로 회귀분석 수행lm(y ~ group, data = data)
다중공선성 확인VIF 계산, 공선성 문제 파악vif(model)
변수 선택 방법단계적 회귀분석 수행step(model)
결정계수(R^2)회귀모형의 설명력 평가summary(model)

다중회귀분석 예제

image.png

image.png

image.png

범주형 자료 분석

종속변수 : 범주형

독립변수 : 범주형

범주형 자료 분석

범주형 자료는 명목형(Nominal) 또는 순위형(Ordinal)으로 구분됩니다. 이 자료는 숫자가 아닌 범주로 구분되며, 그 범주의 빈도와 비율을 분석합니다.

  • 명목형(Nominal): 명칭으로 구분되는 자료 (예: 성별, 혈액형 등)
  • 순위형(Ordinal): 순서가 있는 자료 (예: 만족도, 증상의 정도 등)

분할표(Contingency Table)와 관련 검정

  • *분할표(Contingency Table)두 개 이상의 범주형 변수의 교차 빈도를 표로 정리한 것입니다. 2x2부터 mxn 테이블로 확장 가능하며, 빈도와 비율을 확인하고 분석**합니다.

R 코드 예시 - 분할표 생성

# 데이터 생성
data <- data.frame(
  gender = c('Male', 'Female', 'Female', 'Male', 'Male', 'Female', 'Male', 'Female'),
  outcome = c('Success', 'Failure', 'Success', 'Failure', 'Success', 'Failure', 'Failure', 'Success')
)

# 분할표 생성
table_data <- table(data$gender, data$outcome)
print(table_data)

해석

  • table() 함수는 교차 빈도표를 생성합니다.
  • 행(남성/여성)과 열(성공/실패)로 구분되며, 각 교차 지점에 빈도가 표시됩니다.

연관성, 관련성 분석

연관성(association) 또는 관련성을 분석할 때, 주요 분석 방법은 독립성 검정동질성 검정으로 구분됩니다.

  1. 동질성 검정:
    • 서로 다른 모집단에서 분포가 동일한지를 확인합니다.
    • 예: 두 집단의 제품 선호도가 동일한가?
  2. 독립성 검정:
    • 두 범주형 변수 간에 상관관계 또는 교호작용이 있는지를 확인합니다.
    • 예: 성별(gender)과 성공/실패(outcome)가 독립적인 관계인지 확인합니다.

R 코드 예시 - 독립성 검정 (카이제곱 검정)

# 독립성 검정 (Chi-square test)
chisq_test <- chisq.test(table_data)
print(chisq_test)

해석

  • Chi-squared (X²) 값: 카이제곱 통계량으로, 분할표의 관찰 빈도와 기대 빈도 간의 차이를 측정합니다.
  • p-value: p < 0.05일 경우, 두 변수는 독립적이지 않으며 관계가 있다고 해석합니다.

Yates의 연속성 보정

Yates의 연속성 보정2x2 분할표에 적용되는 보정 방법입니다.

  • 2x2 테이블에서 비연속적인 범주형 자료에 대해, 연속 분포인 카이제곱 분포를 적용함으로써 발생하는 오류를 줄이기 위해 0.5를 빼는 보정을 수행합니다.
  • Yates 보정이 적용된 카이제곱 검정을 통해 더 보수적인 p-value를 얻을 수 있습니다.

R 코드 예시 - Yates의 연속성 보정

# Yates의 연속성 보정이 적용된 카이제곱 검정
yates_test <- chisq.test(table_data, correct = TRUE)
print(yates_test)

해석

  • correct = TRUE: Yates의 연속성 보정을 적용한 카이제곱 검정을 수행합니다.
  • p-value: Yates 보정이 적용되면 p-value가 커질 가능성이 높아, 더 보수적인 해석이 이루어집니다.

동질성 검정

동질성 검정은 서로 다른 모집단의 범주형 자료가 같은 분포를 따르는지 확인합니다.

  • 예: 지역 A와 지역 B의 제품 선호도가 동일한가를 확인할 때 사용합니다.
  • 카이제곱 검정과 유사한 과정으로 수행되며, 모집단의 동질성을 확인합니다.

R 코드 예시 - 동질성 검정

# 동질성 검정 (카이제곱 검정)
# 예시 데이터 생성
data2 <- matrix(c(50, 30, 20, 40, 60, 80), nrow = 2)
rownames(data2) <- c('Group A', 'Group B')
colnames(data2) <- c('Product 1', 'Product 2', 'Product 3')

# 동질성 검정
homogeneity_test <- chisq.test(data2)
print(homogeneity_test)

해석

  • 카이제곱 통계량 (X²): 두 집단의 분포가 유사할수록 X² 값이 작아집니다.
  • p-value: p < 0.05라면, 두 모집단의 분포는 서로 다르다고 해석합니다.

교차표에 대한 검정

카이제곱 검정은 교차표에 대한 대표적인 분석 방법입니다.

  • 카이제곱 검정(Chi-square test): 교차표의 관찰 빈도와 기대 빈도의 차이를 측정합니다.

R 코드 예시 - 카이제곱 검정

# 교차표 생성
data <- data.frame(
  gender = c('Male', 'Female', 'Female', 'Male', 'Male', 'Female', 'Male', 'Female'),
  outcome = c('Success', 'Failure', 'Success', 'Failure', 'Success', 'Failure', 'Failure', 'Success')
)

# 교차표 생성
table_data <- table(data$gender, data$outcome)

# 카이제곱 검정
chi_test <- chisq.test(table_data)
print(chi_test)

해석

  • p-value: p < 0.05이면 성별과 결과(outcome) 간에 관계가 있다고 해석합니다.
  • 카이제곱 통계량 (X²): 관찰된 빈도와 기대 빈도의 차이를 측정합니다.

카이제곱 검정의 주의사항

  1. 모든 기대빈도가 5 이상이어야 함: 5 미만의 기대빈도가 많다면 Fisher의 정확검정을 사용하는 것이 좋습니다.
  2. 표본 크기가 너무 작을 때: 표본 크기가 작을 때는 Fisher's exact test를 수행합니다.

R 코드 예시 - Fisher's exact test

# Fisher의 정확검정 수행
fisher_test <- fisher.test(table_data)
print(fisher_test)

해석

  • Fisher의 검정2x2 테이블에 적합합니다.
  • p-value: p < 0.05일 경우, 두 범주형 변수 간의 관계가 있다고 해석합니다.

요약

분석 항목설명R 함수
분할표 생성두 범주형 변수의 빈도 확인table(data$var1, data$var2)
독립성 검정범주형 변수 간의 독립성 검정chisq.test(table)
동질성 검정두 집단의 분포가 같은지 검정chisq.test(data2)
Yates 보정Yates 보정을 적용한 카이제곱 검정chisq.test(table, correct = TRUE)
Fisher의 검정작은 표본의 독립성 검정fisher.test(table)

결론

  • 범주형 자료는 명목형, 순위형으로 구분됩니다.
  • *분할표(Contingency Table)**는 범주형 자료의 빈도를 교차표로 나타낸 것입니다.
  • 카이제곱 검정은 분할표의 관찰 빈도와 기대 빈도 간의 차이를 평가합니다.
  • Yates의 연속성 보정은 2x2 테이블의 카이제곱 검정에 적용됩니다.
  • 표본이 작을 때는 Fisher의 정확검정을 사용합니다.

카이제곱 검정 실습 예제

image.png

image.png

예시

image.png

로지스틱 회귀분석

종속변수 : 범주형

독립변수 : 연속형/범주형 (여러개)

로지스틱 회귀분석

로지스틱 회귀분석은 종속변수가 범주형(이진 변수)인 경우에 사용하는 회귀분석 방법입니다.

  • 종속변수 는 0 또는 1로 이루어져 있으며, 독립변수 는 연속형 또는 범주형이 될 수 있습니다. Y X1,X2,⋯ ,XnX_1, X_2, \cdots, X_n
  • 로지스틱 회귀분석의 목적: 독립변수들이 종속변수에 미치는 영향을 확인하고, 특정 조건에서 사건(1)이 발생할 확률을 예측합니다.

확률과 오즈 (Odds) 개념

image.png

  • 확률(Probability, pp): 사건이 발생할 확률로 . 0≤p≤10 \leq p \leq 1
  • 오즈(Odds): 사건이 발생할 확률과 발생하지 않을 확률의 비율.

Odds=p1−pOdds = \frac{p}{1 - p}

  • 오즈비(Odds Ratio, OR): 한 독립변수가 1 단위 증가할 때, 종속변수가 1로 변할 확률의 변화 비율을 의미합니다.

로지스틱 회귀모형

로지스틱 회귀모형의 식은 다음과 같이 표현됩니다.

log⁡(p1−p)=β0+β1X1+β2X2+⋯+βnXn\log\left(\frac{p}{1 - p}\right) = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_n X_n

  • p1−p\frac{p}{1 - p}: 오즈(Odds)
  • log⁡(⋅)\log(\cdot): 오즈에 로그를 취한 것 → 로그 오즈(Logit)
  • β0,β1,⋯ ,βn\beta_0, \beta_1, \cdots, \beta_n: 회귀계수

R 코드 예시 - 로지스틱 회귀분석 수행

데이터 생성 및 모델 생성

# 데이터 생성
set.seed(123)
data <- data.frame(
  outcome = sample(c(0, 1), 100, replace = TRUE),  # 종속변수 (0 또는 1)
  age = rnorm(100, mean = 50, sd = 10),            # 연속형 독립변수 1
  income = rnorm(100, mean = 3000, sd = 500),      # 연속형 독립변수 2
  gender = factor(sample(c("Male", "Female"), 100, replace = TRUE)) # 범주형 독립변수
)

# 로지스틱 회귀분석 수행
logit_model <- glm(outcome ~ age + income + gender, data = data, family = binomial)
summary(logit_model)

해석

  • Coefficients: 독립변수의 회귀계수(Estimate)로, 로그 오즈(log-odds)로 해석합니다.
  • p-value: p < 0.05일 경우, 독립변수가 종속변수에 유의미한 영향을 미친다고 해석합니다.
  • Null devianceResidual deviance: 모델의 적합도를 평가합니다.

오즈비(Odds Ratio) 해석

로지스틱 회귀의 회귀계수(Estimate)로그 오즈(log-odds)로 표현됩니다.

이를 오즈비(Odds Ratio)로 해석하기 위해서는 회귀계수를 지수화(Exponential)해야 합니다.


R 코드 예시 - 오즈비 계산

# 오즈비 계산
odds_ratios <- exp(coef(logit_model))
odds_ratios

해석

  • eβe^{\beta}로 회귀계수를 변환하여 오즈비(Odds Ratio)를 계산합니다.
  • 오즈비의 해석:
    • OR > 1: 독립변수가 1 단위 증가할 때, 사건(종속변수 = 1)이 발생할 가능성이 커짐.
    • OR < 1: 독립변수가 1 단위 증가할 때, 사건(종속변수 = 1)이 발생할 가능성이 작아짐.
    • OR = 1: 독립변수의 변화가 종속변수에 영향을 미치지 않음.

95% 신뢰구간 (Confidence Interval)

로지스틱 회귀분석에서는 오즈비의 신뢰구간을 확인하여, 오즈비가 유의미한지 평가할 수 있습니다.

  • 신뢰구간에 1이 포함되면 오즈비가 유의미하지 않음을 의미합니다.

R 코드 예시 - 95% 신뢰구간 계산

# 95% 신뢰구간 계산
confint(logit_model)

해석

  • 신뢰구간(95% CI): 로지스틱 회귀모형의 계수에 대한 신뢰구간을 제공합니다.
  • 만약 신뢰구간에 0이 포함되면 회귀계수가 유의미하지 않음을 의미합니다.

예측값과 정확도 평가

로지스틱 회귀모형이 얼마나 정확한지를 평가하기 위해 예측값정확도(Accuracy)를 확인합니다.


R 코드 예시 - 예측값 생성 및 정확도 평가

# 예측값 생성 (0 또는 1로 변환)
predicted_probs <- predict(logit_model, type = "response")  # 확률 예측
predicted_classes <- ifelse(predicted_probs > 0.5, 1, 0)  # 0.5 기준으로 0 또는 1로 변환

# 혼동행렬 (Confusion Matrix) 생성
table(Predicted = predicted_classes, Actual = data$outcome)

# 정확도 계산
accuracy <- mean(predicted_classes == data$outcome)
accuracy

해석

  • Confusion Matrix: 예측값과 실제값을 교차시켜 맞춘 개수를 보여줍니다.
  • 정확도(Accuracy): 예측값과 실제값이 일치하는 비율로, 전체 예측 중에서 맞춘 비율입니다.

전체 코드 정리

# 데이터 생성
set.seed(123)
data <- data.frame(
  outcome = sample(c(0, 1), 100, replace = TRUE),  # 종속변수 (0 또는 1)
  age = rnorm(100, mean = 50, sd = 10),            # 연속형 독립변수 1
  income = rnorm(100, mean = 3000, sd = 500),      # 연속형 독립변수 2
  gender = factor(sample(c("Male", "Female"), 100, replace = TRUE)) # 범주형 독립변수
)

# 로지스틱 회귀모형 생성
logit_model <- glm(outcome ~ age + income + gender, data = data, family = binomial)
summary(logit_model)

# 오즈비 계산
odds_ratios <- exp(coef(logit_model))
print(odds_ratios)

# 95% 신뢰구간
confint(logit_model)

# 예측값 생성  정확도 평가
predicted_probs <- predict(logit_model, type = "response")
predicted_classes <- ifelse(predicted_probs > 0.5, 1, 0)
table(Predicted = predicted_classes, Actual = data$outcome)
accuracy <- mean(predicted_classes == data$outcome)
print(accuracy)

요약

분석 항목설명R 함수
로지스틱 회귀종속변수가 이진변수인 회귀분석glm(outcome ~ x1 + x2, family = binomial)
오즈비회귀계수를 오즈비로 변환exp(coef(model))
95% 신뢰구간회귀계수의 신뢰구간confint(model)
정확도 평가예측값과 실제값의 정확도 계산mean(predicted == actual)

결론

  • 로지스틱 회귀분석은 범주형 종속변수에 적합한 회귀분석 기법입니다.
  • 오즈비를 통해 독립변수의 영향을 해석할 수 있으며, 신뢰구간을 통해 유의성을 평가할 수 있습니다.
  • R에서 glm() 함수를 사용해 쉽게 로지스틱 회귀모형을 구축하고 예측값을 생성할 수 있습니다.

당뇨 프로젝트

image.png

다중 로지스틱 회귀 모델 구축과 해석


1️⃣ 데이터 준비

  • 목표: 종속변수가 0과 1로 구성된 이진형(binary) 데이터 또는 다중 분류 데이터.
  • 독립변수는 연속형 변수범주형 변수 모두 가능.
  • 종속변수는 factor형으로 변환해야 합니다.
# 데이터 생성
set.seed(123)
data <- data.frame(
  y = as.factor(sample(c(0, 1), 100, replace = TRUE)),  # 종속변수 (이진형)
  x1 = rnorm(100, mean = 10, sd = 2),  # 연속형 독립변수 1
  x2 = rnorm(100, mean = 5, sd = 1),   # 연속형 독립변수 2
  x3 = as.factor(sample(c('A', 'B', 'C'), 100, replace = TRUE))  # 범주형 독립변수
)

2️⃣ 데이터 전처리

  • factor 변수 변환: 범주형 변수는 factor로 변환해야 합니다.
  • 결측값이 있는 경우 제거하거나 대체합니다.
  • 필요시 더미변수(Dummy Variable)를 생성합니다.
# 범주형 변수 factor 변환
data$x3 <- as.factor(data$x3)

# 데이터 확인
str(data)

3️⃣ 다중 로지스틱 회귀 모델 구축

  • glm() 함수를 이용하여 모델을 생성합니다.
  • *링크 함수(link function) = "logit"**을 사용하는 것이 특징입니다.
  • 종속변수가 이항형(binary, 0과 1)인 경우 family = binomial을 설정합니다.
# 다중 로지스틱 회귀 모델 생성
logit_model <- glm(y ~ x1 + x2 + x3, data = data, family = binomial)

4️⃣ 다중공선성 확인 (VIF 확인)

  • 다중공선성을 확인하기 위해 VIF (Variance Inflation Factor, 분산 팽창 인자)를 계산합니다.
  • 일반적으로 VIF 값이 10 이상이면 다중공선성이 있다고 판단합니다.
# VIF 확인을 위해 car 패키지 설치 및 로드
install.packages("car")
library(car)

# VIF 계산
vif(logit_model)

해석

  • VIF 값이 10 이상이면 다중공선성이 존재한다고 판단합니다.
  • 다중공선성이 존재할 경우 변수를 제거하거나 능형 회귀를 고려해야 합니다.

5️⃣ 최적 모델 선택 (step() 함수)

  • step() 함수는 후향 제거법(backward elimination)을 통해 불필요한 변수를 제거하여 최적의 모델을 만듭니다.
  • AIC(Akaike Information Criterion)를 기준으로 모델을 선택합니다.
# 최적 모델 찾기 (step 함수)
optimal_model <- step(logit_model, direction = "both")

해석

  • step() 함수는 AIC 기준으로 변수를 추가하거나 제거하여 최적의 모델을 선택합니다.
  • 최종 모델은 summary(optimal_model)로 확인합니다.

6️⃣ 회귀계수 해석 (Summary)

  • summary() 함수를 사용하여 모델의 회귀계수, 유의성(p-value), 잔차 등을 확인합니다.
  • 회귀계수(Estimate)는 로그오즈(log-odds)로 해석해야 하며, 이를 오즈비(Odds Ratio)로 변환하기 위해서는 exp()를 사용합니다.
# 모델 요약 확인
summary(optimal_model)

해석 방법

  • (Intercept): 기준이 되는 값(모든 독립변수가 0일 때의 log-odds)입니다.
  • Coefficients (Estimate): 로그오즈(log-odds)로 해석됩니다.
  • p-value: 독립변수가 종속변수에 유의한 영향을 미치는지 여부를 나타냅니다.
  • Std. Error: 회귀계수의 표준오차를 의미합니다.

7️⃣ 오즈비(Odds Ratio) 해석

  • 회귀계수를 오즈비(Odds Ratio, OR)로 변환하기 위해 exp()를 사용합니다.
  • 오즈비 > 1: 해당 독립변수가 종속변수에 양의 영향을 미침.
  • 오즈비 < 1: 해당 독립변수가 종속변수에 음의 영향을 미침.
# 회귀계수와 신뢰구간
round(exp(cbind(coef(optimal_model), confint(optimal_model))), 3)

해석 방법

  • 회귀계수의 신뢰구간을 제공하며, 오즈비(odds ratio)와 함께 표시합니다.
  • 오즈비가 1보다 크면 양의 영향을 미치고, 1보다 작으면 음의 영향을 미칩니다.
  • 신뢰구간이 1을 포함하지 않으면 유의한 변수로 해석합니다.

8️⃣ 모델 적합도 평가

  • AIC(Akaike Information Criterion): AIC 값이 낮을수록 좋은 모델.
  • 잔차 분석: 잔차의 분포를 확인하여 모델의 적합성을 평가합니다.
# AIC 확인
AIC(optimal_model)
  • AIC가 낮을수록 좋은 모델로 평가합니다.

9️⃣ 모델의 예측

  • 새 데이터에 대한 예측값을 생성합니다.
  • 예측값은 확률값(probability, 0~1 사이의 값)으로 반환됩니다.
# 새로운 데이터 생성
new_data <- data.frame(x1 = c(12, 8), x2 = c(4, 6), x3 = factor(c('A', 'B'), levels = c('A', 'B', 'C')))

# 예측 (확률값으로 출력)
predict(optimal_model, newdata = new_data, type = "response")

🔎 해석 요약

  1. VIF 확인: 다중공선성 확인, 10 이상이면 다중공선성 문제로 인한 예측 불안정성 가능성.
  2. Summary 해석
    • p-value < 0.05: 유의미한 변수.
    • 회귀계수(Estimate): 로그오즈(log-odds).
    • 잔차표(Residuals): 잔차의 최소, 1사분위수, 중앙값, 3사분위수, 최대값.
  3. step(): AIC 기준 최적 모델을 선택합니다.
  4. round(exp(cbind(coef(), confint())), 3):
    • 회귀계수(OR)와 신뢰구간을 함께 반환합니다.
    • 신뢰구간에 1을 포함하지 않는 회귀계수는 유의미한 변수로 해석합니다.

실습 예시

# 1. 데이터 생성
set.seed(123)
data <- data.frame(
  y = as.factor(sample(c(0, 1), 100, replace = TRUE)),
  x1 = rnorm(100, mean = 10, sd = 2),
  x2 = rnorm(100, mean = 5, sd = 1),
  x3 = as.factor(sample(c('A', 'B', 'C'), 100, replace = TRUE))
)

# 2. 다중 로지스틱 회귀 모델 생성
logit_model <- glm(y ~ x1 + x2 + x3, data = data, family = binomial)

# 3. 다중공선성 확인 (VIF)
install.packages("car")
library(car)
vif(logit_model)

# 4. 최적 모델 선택
optimal_model <- step(logit_model, direction = "both")

# 5. 회귀계수 해석
summary(optimal_model)

# 6. 오즈비 해석
round(exp(cbind(coef(optimal_model), confint(optimal_model))), 3)

# 7. 예측 수행
new_data <- data.frame(x1 = c(12, 8), x2 = c(4, 6), x3 = factor(c('A', 'B'), levels = c('A', 'B', 'C')))
predict(optimal_model, newdata = new_data, type = "response")

이 과정을 통해 VIF 확인, 최적 모델 선택, 오즈비 해석, 예측값 생성이 모두 완료됩니다.

round(exp(cbind(coef(), confint())), 3)로지스틱 회귀 분석의 결과 해석에 매우 중요한 부분으로, 회귀계수(Estimate)와 신뢰구간(Confidence Interval, CI)을 오즈비(Odds Ratio, OR)로 변환하고, 소수점 3자리로 반올림한 결과를 나타내는 것입니다.

이 코드를 하나하나 단계별로 해석해보겠습니다.


1️⃣ coef()

  • *coef()는 회귀 모델의 회귀계수(Estimate, β)**를 추출합니다.
  • 회귀계수는 로그오즈(log-odds)로 해석되며, 이는 종속변수의 오즈(odds, 확률비율)에 대한 변화를 설명합니다.
  • 예를 들어, 특정 독립변수 x의 회귀계수가 0.5라면, x가 1 단위 증가할 때 로그오즈(log-odds)가 0.5만큼 증가합니다.

예시

# 로지스틱 회귀 모델
model <- glm(y ~ x1 + x2, data = data, family = binomial)

# 회귀계수 출력
coef(model)

출력 예시

(Intercept)         x1         x2
  -2.105         0.150      -0.025

해석

  • (Intercept): 기준값 (x1, x2가 모두 0일 때의 log-odds)입니다.
  • x1의 회귀계수 0.150: x1이 1 단위 증가할 때 로그오즈(log-odds)0.150만큼 증가합니다.
  • x2의 회귀계수 -0.025: x2가 1 단위 증가할 때 로그오즈(log-odds)0.025만큼 감소합니다.

2️⃣ confint()

  • *confint()회귀계수의 신뢰구간(Confidence Interval, CI)**을 반환합니다.
  • 신뢰구간은 특정 회귀계수(β)의 불확실성을 나타내며, 95% 신뢰구간으로 회귀계수가 포함될 확률이 95%임을 의미합니다.
  • 신뢰구간이 1을 포함하지 않으면 유의미한 회귀계수로 판단합니다.

예시

# 회귀계수의 신뢰구간 계산
confint(model)

출력 예시

               2.5 %    97.5 %
(Intercept)  -3.876   -0.450
x1            0.010    0.290
x2           -0.120    0.050

해석

  • *(Intercept)**의 신뢰구간 [-3.876, -0.450]: 회귀계수의 95% 신뢰구간은 -3.876에서 -0.450 사이에 존재합니다.
  • x1의 신뢰구간 [0.010, 0.290]: 회귀계수의 신뢰구간이 0보다 큽니다. 이는 x1이 종속변수에 유의미한 영향을 미침을 나타냅니다.
  • x2의 신뢰구간 [-0.120, 0.050]: 신뢰구간에 0이 포함되어 있으므로, x2는 유의미하지 않은 변수로 해석합니다.

3️⃣ cbind(coef(), confint())

  • *cbind()coef()와 confint()의 결과를 병합**합니다.
  • cbind()는 각 변수의 회귀계수와 신뢰구간(2.5%, 97.5%)을 하나의 데이터프레임으로 만듭니다.

예시

cbind(coef(model), confint(model))

출력 예시

              Coefficient    2.5 %    97.5 %
(Intercept)      -2.105   -3.876   -0.450
x1                0.150    0.010    0.290
x2               -0.025   -0.120    0.050

해석

  • 이 표는 각 변수의 회귀계수와 신뢰구간을 하나의 표로 정리한 것입니다.
  • x1의 회귀계수는 0.150, 신뢰구간은 [0.010, 0.290]로, x1이 유의미한 영향을 미친다고 해석합니다.

4️⃣ exp()

  • *exp()로그오즈(log-odds) → 오즈비(Odds Ratio, OR)**로 변환합니다.
  • 오즈비 > 1: 종속변수의 발생 확률이 증가함을 의미합니다.
  • 오즈비 < 1: 종속변수의 발생 확률이 감소함을 의미합니다.

예시

exp(cbind(coef(model), confint(model)))

출력 예시

               OR       2.5 %    97.5 %
(Intercept)  0.121     0.021     0.637
x1           1.162     1.010     1.337
x2           0.975     0.887     1.051

해석

  • (Intercept)의 OR = 0.121: 기준값으로, x1과 x2가 모두 0일 때의 오즈비(odds ratio)입니다.
  • x1의 OR = 1.162: x1이 1 증가할 때 오즈비가 1.162배 증가합니다.
  • x2의 OR = 0.975: x2가 1 증가할 때 오즈비가 0.975배로 감소합니다.

5️⃣ round()

  • *round()소수점 3자리로 반올림**합니다.

예시

round(exp(cbind(coef(model), confint(model))), 3)

출력 예시

               OR       2.5 %    97.5 %
(Intercept)  0.121     0.021     0.637
x1           1.162     1.010     1.337
x2           0.975     0.887     1.051

해석

  • 소수점 3자리까지 반올림된 값을 출력합니다.
  • 오즈비와 신뢰구간을 명확하게 해석할 수 있도록 소수점을 깔끔하게 표현합니다.

📌 전체 과정 정리

  • coef(): 회귀계수를 가져옵니다 (log-odds).
  • confint(): 회귀계수의 신뢰구간(2.5%, 97.5%)을 가져옵니다.
  • cbind(coef(), confint()): 회귀계수와 신뢰구간을 병합합니다.
  • exp(): 로그오즈(log-odds)를 오즈비(odds ratio, OR)로 변환합니다.
  • round(): 소수점 3자리로 반올림합니다.

📘 최종 예시 코드

# 데이터 생성
set.seed(123)
data <- data.frame(
  y = as.factor(sample(c(0, 1), 100, replace = TRUE)),
  x1 = rnorm(100, mean = 10, sd = 2),
  x2 = rnorm(100, mean = 5, sd = 1)
)

# 다중 로지스틱 회귀 모델 생성
model <- glm(y ~ x1 + x2, data = data, family = binomial)

# 회귀계수, 신뢰구간, 오즈비 해석
round(exp(cbind(coef(model), confint(model))), 3)

출력 예시

               OR       2.5 %    97.5 %
(Intercept)  0.121     0.021     0.637
x1           1.162     1.010     1.337
x2           0.975     0.887     1.051

결론

  • x1의 OR = 1.162: x1이 1 단위 증가할 때 오즈비가 1.162배 증가합니다.
  • x2의 OR = 0.975: x2가 1 단위 증가할 때 오즈비가 0.975배로 감소합니다.
  • 신뢰구간이 1을 포함하지 않는 경우 그 변수는 유의미한 변수로 해석합니다.

image.png

image.png

merge, join으로 두 데이터를 합쳐주어서 분석
round

모수검정과 비모수 검정 비교

종속변수 : 연속형 변수

독립변수 : 범주형 (2개)

모수검정과 비모수검정

모수검정과 비모수검정은 데이터의 분포에 따라 분석 방법을 선택하는 기준이 됩니다.

  • 모수검정: 정규성을 만족하는 경우 사용하는 통계 방법.
  • 비모수검정: 정규성을 만족하지 않거나, 표본 크기가 작을 때 사용하는 통계 방법.

Independent Two-Sample T-Test (Unpaired T-Test) - 모수검정

개념

  • 두 독립된 집단의 평균 차이를 검정하기 위해 사용합니다.
  • 정규분포를 가정하며, 분산이 동일하다고 가정할 수 있습니다.
  • 두 그룹 간 평균의 차이가 유의미한지 검정합니다.

R 코드 예시

# 데이터 생성
set.seed(123)
group1 <- rnorm(30, mean = 10, sd = 3)  # 그룹 1 데이터
group2 <- rnorm(30, mean = 12, sd = 3)  # 그룹 2 데이터

# 독립표본 t-test
t.test(group1, group2, var.equal = TRUE)

해석

  • p-value < 0.05이면, 두 그룹의 평균에 차이가 있다고 해석합니다.

Mann-Whitney U Test (Wilcoxon Rank-Sum Test) - 비모수검정

image.png

개념

  • 두 독립된 집단의 중위수 차이를 검정하기 위해 사용합니다.
  • 정규분포를 따르지 않는 경우에, 두 그룹 간 중위수 차이를 검정합니다.
  • Two-Sample T-Test의 비모수 버전이라고 볼 수 있습니다.

R 코드 예시

# 데이터 생성
group1 <- c(8, 7, 9, 10, 12, 8, 9, 6, 10, 8)
group2 <- c(15, 14, 13, 16, 12, 18, 17, 20, 19, 21)

# Mann-Whitney U Test
wilcox.test(group1, group2)

해석

  • p-value < 0.05이면, 두 그룹의 중위수에 유의한 차이가 있다고 해석합니다.

Paired T-Test (모수검정)

개념

  • 같은 집단의 전후 변화를 검정합니다.
  • 예를 들어, 다이어트 전후의 몸무게 변화, 수술 전후의 상태 변화 등.
  • 정규분포를 가정하며, 동일한 집단의 전후 평균 차이를 검정합니다.

R 코드 예시

# 데이터 생성
before <- c(90, 85, 100, 95, 105, 110)
after <- c(88, 83, 97, 92, 102, 108)

# 대응표본 t-test
t.test(before, after, paired = TRUE)

해석

  • p-value < 0.05이면, 전후의 차이가 유의미하다고 해석합니다.

Wilcoxon Signed-Rank Test (비모수검정)

image.png

image.png

개념

  • 대응표본 t-test의 비모수 버전으로, 같은 집단의 전후 변화에 대해 중위수의 차이를 검정합니다.
  • 데이터의 정규성을 가정하지 않고, 순위를 사용합니다.

R 코드 예시

# 데이터 생성
before <- c(90, 85, 100, 95, 105, 110)
after <- c(88, 83, 97, 92, 102, 108)

# Wilcoxon Signed-Rank Test
wilcox.test(before, after, paired = TRUE)

해석

  • p-value < 0.05이면, 전후의 중위수 차이가 유의미하다고 해석합니다.

ANOVA (Analysis of Variance) - 모수검정

개념

  • 세 집단 이상의 평균 차이를 검정하는 방법.
  • 정규분포등분산성을 가정합니다.
  • ANOVA의 귀무가설은 "세 그룹 간 평균의 차이가 없다"입니다.

R 코드 예시

# 데이터 생성
group_A <- rnorm(30, mean = 10, sd = 3)
group_B <- rnorm(30, mean = 12, sd = 3)
group_C <- rnorm(30, mean = 15, sd = 3)

# 데이터 프레임 생성
data <- data.frame(
  value = c(group_A, group_B, group_C),
  group = factor(rep(c("A", "B", "C"), each = 30))
)

# ANOVA 분석
anova_result <- aov(value ~ group, data = data)
summary(anova_result)

해석

  • p-value < 0.05이면, 세 집단의 평균에 유의미한 차이가 있다고 해석합니다.

Kruskal-Wallis Test (비모수검정)

image.png

image.png

개념

  • 세 집단 이상의 중위수 차이를 검정합니다.
  • ANOVA의 비모수 버전으로, 데이터의 정규성을 가정하지 않습니다.

R 코드 예시

# 데이터 생성
group_A <- c(8, 7, 9, 10, 12)
group_B <- c(15, 14, 13, 16, 12)
group_C <- c(20, 18, 17, 22, 21)

# 데이터 프레임 생성
data <- data.frame(
  value = c(group_A, group_B, group_C),
  group = factor(rep(c("A", "B", "C"), each = 5))
)

# Kruskal-Wallis Test
kruskal.test(value ~ group, data = data)

해석

  • p-value < 0.05이면, 세 집단의 중위수에 유의미한 차이가 있다고 해석합니다.

Pearson Correlation (모수검정)

개념

  • 두 연속형 변수 간의 선형 상관관계를 검정합니다.
  • 정규성을 가정하며, 상관계수의 값은 1 ~ 1 사이의 값을 가집니다.

R 코드 예시

# 데이터 생성
x <- rnorm(50)
y <- 2 * x + rnorm(50)

# Pearson 상관계수
cor(x, y, method = "pearson")
cor.test(x, y, method = "pearson")

해석

  • p-value < 0.05이면, 두 변수 간에 선형 상관관계가 유의미하다고 해석합니다.

Spearman Correlation (비모수검정)

개념

  • 두 연속형 변수 간의 비선형 상관관계를 검정합니다.
  • 정규분포를 가정하지 않음.
  • Pearson 상관분석의 비모수 버전입니다.

R 코드 예시

# 데이터 생성
x <- rnorm(50)
y <- 2 * x + rnorm(50)

# Spearman 상관계수
cor(x, y, method = "spearman")
cor.test(x, y, method = "spearman")

해석

  • p-value < 0.05이면, 두 변수 간에 비선형 상관관계가 유의미하다고 해석합니다.

요약

검정 유형모수검정 (P)비모수검정 (N)검정 목적
독립 두 집단 비교t-testMann-Whitney U Test평균 비교 (모수) / 중위수 비교 (비모수)
대응 두 집단 비교Paired t-testWilcoxon Signed-Rank Test평균 차이 (모수) / 중위수 차이 (비모수)
세 집단 이상 비교ANOVAKruskal-Wallis Test평균 비교 (모수) / 중위수 비교 (비모수)
상관관계 분석Pearson CorrelationSpearman Correlation선형 상관 (모수) / 비선형 상관 (비모수)

0개의 댓글