📌 회귀분석 더미변수
- spray (독립변수) : 살충제 종류
- count (종속변수) : 살아남은 해충 수
> str(InsectSprays)
'data.frame': 72 obs. of 2 variables:
$ count: num 10 7 20 14 14 12 10 23 17 20 ...
$ spray: Factor w/ 6 levels "A","B","C","D",..: 1 1 1 1 1 1 1 1 1 1 ...
> levels(InsectSprays$spray)
[1] "A" "B" "C" "D" "E" "F"
> # 살충제별로 살아남은 해충 수의 평균
> tapply(InsectSprays$count, InsectSprays$spray, mean)
A B C D E F
14.500000 15.333333 2.083333 4.916667 3.500000 16.666667
더미변수를 이용한 회귀분석은 lm() 함수를 사용하면 자동으로 더미변수 생성해서 분석을 진행한다.
6가지 범주를 갖고 있기 때문에 더미변수는 6-1=5개 사용된다.
> contrasts(InsectSprays$spray)
B C D E F
A 0 0 0 0 0
B 1 0 0 0 0
C 0 1 0 0 0
D 0 0 1 0 0
E 0 0 0 1 0
F 0 0 0 0 1
A가 더미변수의 기준 범주로 사용되었다.
📌 더미변수 회귀분석
> sprays.lm <- lm(count ~ spray, data=InsectSprays)
> summary(sprays.lm)
Call:
lm(formula = count ~ spray, data = InsectSprays)
Residuals:
Min 1Q Median 3Q Max
-8.333 -1.958 -0.500 1.667 9.333
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 14.5000 1.1322 12.807 < 2e-16 ***
sprayB 0.8333 1.6011 0.520 0.604
sprayC -12.4167 1.6011 -7.755 7.27e-11 ***
sprayD -9.5833 1.6011 -5.985 9.82e-08 ***
sprayE -11.0000 1.6011 -6.870 2.75e-09 ***
sprayF 2.1667 1.6011 1.353 0.181
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.922 on 66 degrees of freedom
Multiple R-squared: 0.7244, Adjusted R-squared: 0.7036
F-statistic: 34.7 on 5 and 66 DF, p-value: < 2.2e-16
살충제 A의 효과 : 14.5
살충제 C의 효과 : 14.5 - 12.4167 = 2.083
살충제 B, F와 살충제 A는 통계적으로 유의하지 않다.
살충제 C, D, E와 살충제 A는 통계적으로 유의한 차이가 있다.
살충제 간의 차이를 검정해보자.
> sprays.aov <- aov(count ~ spray, data=InsectSprays)
> summary(sprays.aov)
Df Sum Sq Mean Sq F value Pr(>F)
spray 5 2669 533.8 34.7 <2e-16 ***
Residuals 66 1015 15.4
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
p-value=<2e-16 이므로 살충제 간의 통계적으로 유의한 차이가 존재한다.
📌 사후분석
어떤 살충제가 차이가 있는지 사후분석을 통해 확인할 수 있다.
> TukeyHSD(sprays.aov)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = count ~ spray, data = InsectSprays)
$spray
diff lwr upr p adj
B-A 0.8333333 -3.866075 5.532742 0.9951810
C-A -12.4166667 -17.116075 -7.717258 0.0000000
D-A -9.5833333 -14.282742 -4.883925 0.0000014
E-A -11.0000000 -15.699409 -6.300591 0.0000000
F-A 2.1666667 -2.532742 6.866075 0.7542147
C-B -13.2500000 -17.949409 -8.550591 0.0000000
D-B -10.4166667 -15.116075 -5.717258 0.0000002
E-B -11.8333333 -16.532742 -7.133925 0.0000000
F-B 1.3333333 -3.366075 6.032742 0.9603075
D-C 2.8333333 -1.866075 7.532742 0.4920707
E-C 1.4166667 -3.282742 6.116075 0.9488669
F-C 14.5833333 9.883925 19.282742 0.0000000
E-D -1.4166667 -6.116075 3.282742 0.9488669
F-D 11.7500000 7.050591 16.449409 0.0000000
F-E 13.1666667 8.467258 17.866075 0.0000000
살충제 A는 살충제 C, D, E와 통계적으로 유의한 차이가 있다.
살충제 A는 살충제 B, F와 통계적으로 유의한 차이가 없다.
📌 더미변수의 기준범주 변경
> respray <- relevel(InsectSprays$spray, ref=6)
> contrasts(respray)
A B C D E
F 0 0 0 0 0
A 1 0 0 0 0
B 0 1 0 0 0
C 0 0 1 0 0
D 0 0 0 1 0
E 0 0 0 0 1
변경된 기준 범주로 다시 회귀분석을 수행한다.
> sprays.lm2 <- lm(count ~ spray, data=InsectSprays)
> summary(sprays.lm2)
Call:
lm(formula = count ~ spray, data = InsectSprays)
Residuals:
Min 1Q Median 3Q Max
-8.333 -1.958 -0.500 1.667 9.333
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 14.5000 1.1322 12.807 < 2e-16 ***
sprayB 0.8333 1.6011 0.520 0.604
sprayC -12.4167 1.6011 -7.755 7.27e-11 ***
sprayD -9.5833 1.6011 -5.985 9.82e-08 ***
sprayE -11.0000 1.6011 -6.870 2.75e-09 ***
sprayF 2.1667 1.6011 1.353 0.181
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.922 on 66 degrees of freedom
Multiple R-squared: 0.7244, Adjusted R-squared: 0.7036
F-statistic: 34.7 on 5 and 66 DF, p-value: < 2.2e-16
살충제 C의 살충 효과 = 16.667 - 14.583 = 2.084이다.