80%의 실제 문제는 20% 정도의 통계 기법으로 처리할 수 있다.
데이터형 | 분석 기법 | R함수 |
---|---|---|
0. 모든데이터 | 데이터 내용, 구조 파악 | glimpse |
요약 통계량 | summary | |
단순 시각화 | plot, pairs | |
1. 수량형 변수 | 분포시각 | hist, boxplot, density |
요약 통계량 | mean, median | |
t-검정 | t.test() | |
2.범주형 변수(성공-실패) | 도수 분포 | table(), xtabs() |
막대그래프 | barplot | |
이항검정 | binom.test() | |
3. 수량형 x, 수량형 y | 산점도 | plot() |
상관계수 | cor() | |
단순회귀 | lm() | |
로버스트회귀 | lqs() | |
비모수회귀 | ||
4. 범주형 x, 수량형 y | 병렬상자그림 | boxplot() |
분산분석(ANOVA) | lm(y~x) | |
5. 수량형 x, 범주형(성공-실패) y | 산점도/병렬상자그림 | plot(), boxplot() |
로지스틱 회귀분석 | glm(family=‘binom’) |
mpg <- tbl_df(mpg)
mpg
## # A tibble: 234 x 11
## manufacturer model displ year cyl trans drv cty hwy
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int>
## 1 audi a4 1.8 1999 4 auto(l5) f 18 29
## 2 audi a4 1.8 1999 4 manual(m5) f 21 29
## 3 audi a4 2.0 2008 4 manual(m6) f 20 31
## 4 audi a4 2.0 2008 4 auto(av) f 21 30
## 5 audi a4 2.8 1999 6 auto(l5) f 16 26
## 6 audi a4 2.8 1999 6 manual(m5) f 18 26
## 7 audi a4 3.1 2008 6 auto(av) f 18 27
## 8 audi a4 quattro 1.8 1999 4 manual(m5) 4 18 26
## 9 audi a4 quattro 1.8 1999 4 auto(l5) 4 16 25
## 10 audi a4 quattro 2.0 2008 4 manual(m6) 4 20 28
## # ... with 224 more rows, and 2 more variables: fl <chr>, class <chr>
glimpse(mpg)
## Observations: 234
## Variables: 11
## $ manufacturer <chr> "audi", "audi", "audi", "audi", "audi", "audi", "...
## $ model <chr> "a4", "a4", "a4", "a4", "a4", "a4", "a4", "a4 qua...
## $ displ <dbl> 1.8, 1.8, 2.0, 2.0, 2.8, 2.8, 3.1, 1.8, 1.8, 2.0,...
## $ year <int> 1999, 1999, 2008, 2008, 1999, 1999, 2008, 1999, 1...
## $ cyl <int> 4, 4, 4, 4, 6, 6, 6, 4, 4, 4, 4, 6, 6, 6, 6, 6, 6...
## $ trans <chr> "auto(l5)", "manual(m5)", "manual(m6)", "auto(av)...
## $ drv <chr> "f", "f", "f", "f", "f", "f", "f", "4", "4", "4",...
## $ cty <int> 18, 21, 20, 21, 16, 18, 18, 18, 16, 20, 19, 15, 1...
## $ hwy <int> 29, 29, 31, 30, 26, 26, 27, 26, 25, 28, 27, 25, 2...
## $ fl <chr> "p", "p", "p", "p", "p", "p", "p", "p", "p", "p",...
## $ class <chr> "compact", "compact", "compact", "compact", "comp...
head(mpg)
## # A tibble: 6 x 11
## manufacturer model displ year cyl trans drv cty hwy fl
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr>
## 1 audi a4 1.8 1999 4 auto(l5) f 18 29 p
## 2 audi a4 1.8 1999 4 manual(m5) f 21 29 p
## 3 audi a4 2.0 2008 4 manual(m6) f 20 31 p
## 4 audi a4 2.0 2008 4 auto(av) f 21 30 p
## 5 audi a4 2.8 1999 6 auto(l5) f 16 26 p
## 6 audi a4 2.8 1999 6 manual(m5) f 18 26 p
## # ... with 1 more variables: class <chr>
summary(mpg)
## manufacturer model displ year
## Length:234 Length:234 Min. :1.600 Min. :1999
## Class :character Class :character 1st Qu.:2.400 1st Qu.:1999
## Mode :character Mode :character Median :3.300 Median :2004
## Mean :3.472 Mean :2004
## 3rd Qu.:4.600 3rd Qu.:2008
## Max. :7.000 Max. :2008
## cyl trans drv cty
## Min. :4.000 Length:234 Length:234 Min. : 9.00
## 1st Qu.:4.000 Class :character Class :character 1st Qu.:14.00
## Median :6.000 Mode :character Mode :character Median :17.00
## Mean :5.889 Mean :16.86
## 3rd Qu.:8.000 3rd Qu.:19.00
## Max. :8.000 Max. :35.00
## hwy fl class
## Min. :12.00 Length:234 Length:234
## 1st Qu.:18.00 Class :character Class :character
## Median :24.00 Mode :character Mode :character
## Mean :23.44
## 3rd Qu.:27.00
## Max. :44.00
일변량 변수에 대한 통계량 분석은 다음과 같다.
데이터 분포의 시각화
: 히스토그램, 상자그림, 확률밀도함수 시각화를 통해 분포를 살펴본다. ggplot() + geom_{histogram, density}() 함수 추천요약 통계량 계산
: summary, mean, median, var, sd, mad, quantile 사용데이터 정규성 검사
: qqplot, qqline 함수는 분포가 정규분포와 얼마나 유사한지 검사하는데 사용된다.가설검정과 신뢰구간
: t.test() 함수를 사용하면 일변량 t-검정과 신뢰구간을 구할 수 있다. 실제로 정규분포가 아니라도 큰 문제가 되지 않는다.이상점 찾아보기
: 로보스트 통계량 계산summary(mpg$hwy)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 12.00 18.00 24.00 23.44 27.00 44.00
mean(mpg$hwy)
## [1] 23.44017
median(mpg$hwy)
## [1] 24
range(mpg$hwy)
## [1] 12 44
quantile(mpg$hwy)
## 0% 25% 50% 75% 100%
## 12 18 24 27 44
opar <- par(mfrow=c(2,2))
hist(mpg$hwy)
boxplot(mpg$hwy)
qqnorm(mpg$hwy)
qqline(mpg$hwy)
par(opar)
일별량 연속형 변수에 흔하게 사용되는 통계 추정절차는 t-검정이다. 다음과 같은 단측검정(one-side hypothesis testing)을 시행하고자 한다고 해보자.
\(\ H0: \mu <= 22.9\) vs. \(\ H1: \mu > 22.9\)
위의 가설검정은 R의 t.test() 명령으로 간단하게 시행할 수 있다.
hwy <- mpg$hwy
n <- length(hwy)
mu0 <- 22.9
t.test(hwy, mu = mu0, alternative = "greater")
##
## One Sample t-test
##
## data: hwy
## t = 1.3877, df = 233, p-value = 0.08328
## alternative hypothesis: true mean is greater than 22.9
## 95 percent confidence interval:
## 22.79733 Inf
## sample estimates:
## mean of x
## 23.44017
P-value는 0.083이다. 만일 실제 모 평균 고속도로 연비가 22.9라면 우리가 관측한 것 만큼 큰 표본평균값과 t 통계량(t = 1.3877)이 관측될 확률이 8.3%라는 것이다. 따라서 유의수준 alpha = 10%라면 고속도록 연비가 22.9보다 크다고 결론지을 수 있지만, 오의수준이 5%라면 고속도록 연비가 22.9보다 크다고 결론지을 만한 증거가 충분하지 않다고 할 수 있다.
양측검정(two-side hypothesis testing)을 구해보면,
t.test(hwy)
##
## One Sample t-test
##
## data: hwy
## t = 60.216, df = 233, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 22.67324 24.20710
## sample estimates:
## mean of x
## 23.44017
신뢰구간은 [22.6, 24.2]임을 알 수 있다.
이상점(outliers)는 여러 이유로 다른 관측치와 매우 다른 값을 가진 관측치다. 가장 쉽게 찾을 수 있는 방법은 boxplot을 살펴보는 것이다. boxplot에서 이상점은 [Q1 - 1.5 x IQR, Q3 + 1.5 x IRQ] 구간 바깥의 값들이다.
boxplot(hwy)
로버스트 통계 방법은 이상점의 영향을 적게 받는 절차다. 기본적으로 평균 대신 중앙값, 표준편차 대신 MAD(Median Absolute Deviance)
를 사용하면 된다.
c(mean(hwy), sd(hwy))
## [1] 23.440171 5.954643
c(median(hwy), mad(hwy))
## [1] 24.000 7.413
성공-실패 범주형 변수의 분석
여론조사 샘플
set.seed(1606)
n <- 100
p <- 0.5
x <- rbinom(n, 1, p)
x <- factor(x, levels = c(0,1), labels = c("no", "yes"))
x
## [1] yes yes yes yes no no yes no no yes yes no no yes no no yes
## [18] yes yes no yes yes no no yes no no yes no no yes no yes yes
## [35] no no yes yes no yes no no no yes yes no yes yes yes yes no
## [52] yes no yes yes no no yes yes yes yes yes yes no no no yes no
## [69] no yes no no yes no yes yes yes no yes no no no no yes yes
## [86] yes yes no yes yes no no no no yes yes yes yes no yes
## Levels: no yes
table(x)
## x
## no yes
## 46 54
prop.table(table(x))
## x
## no yes
## 0.46 0.54
우리는 실제 ’지지율’이 50%인 것을 알고 있지만, 일단 우리가 그것을 모른다고 가정해보자. 그리고 다음의 가설을 검정한다고 해보자.
\(\ H0: p = 0.5\) vs. \(\ H1: p \neq 0.5\)
R에서 binom.test
로 쉽게 신뢰구간과 가설검정을 시행할 수 있다.
binom.test(x = length(x[x=="yes"]), n = length(x),
p = .5, alternative = "two.sided")
##
## Exact binomial test
##
## data: length(x[x == "yes"]) and length(x)
## number of successes = 54, number of trials = 100, p-value = 0.4841
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
## 0.4374116 0.6401566
## sample estimates:
## probability of success
## 0.54
표본 크기에 따른 오차한계의 감소
n <- c(100, 1000, 2000, 10000, 1e6)
data.frame(n = n, moe = round(1.96 * sqrt(1/(4 * n)), 4))
## n moe
## 1 1e+02 0.0980
## 2 1e+03 0.0310
## 3 2e+03 0.0219
## 4 1e+04 0.0098
## 5 1e+06 0.0010
curve(1.96 * sqrt(1/(4 * x)), 10, 10000, log = "x")
grid()
두 변수 사이의 관계를 연구할 때는 각 변수를 설명변수 X와 반응 변수 Y로 구부하는 것이 유용하다. 보통 인과 관계에서 원인이 되는 것으로 믿어지는 변수를 X로, 결과가 되는 변수를 Y로 놓는다.
설명변수 X는 예측변수
혹은 독립변수
라고 불린다. 반응변수 Y는 종속변수
라고도 불린다.
X, Y 변수 조합에 따른 예
설명변수 X | 반응변수 Y | 예 |
---|---|---|
수량형 | 수량형 | 아버지 키(X)로 아들 키(Y) 예측 |
범주형 | 수량형 | 수면제의 종류(X)로 수면시간 증가(Y) 예측 |
수량형 | 범주형 | 온도(X)에 따른 로켓 부품의 고장 여부(Y) 예측 |
범주형 | 범주형 | 배너 색깔(X)로 클릭 여부(Y) 예측 |
두 연속형 변수 X와 Y가 있을 때의 시각화는 앞장에서 살펴 보았듯이 산점도가 기본이다.
mpg %>%
ggplot(aes(cty, hwy)) + geom_jitter() + geom_smooth(method = "lm")
cor() 함수는 산관계수(correlation coefficient)를 계산해준다. 기본적으로 피어슨(Pearson) 상관계수를 계산해주는대, 공식은 다음과 같다.
피어슨 상관계수는 두 변량의 ‘선형(linear)’ 관계의 강도를 -1(완벽한 선형 감소 관계)에서 1(완벽한 선형 증가 관계) 사이의 숫자로 나타낸다. 0은 선형 관계가 없음을 나타낸다.
산점도를 그리지 않고 상관계수만 보는 것은 위험하다!
가장 상단의 그림처럼 선형 관계의 강도는 상관관계에 잘 나타난다 하지만 가운데 줄에서 보듯이 상관계소는 경사를 얘기해주지 않는다(마치 P-값이 신뢰구간을 얘기해주지 않는 것과 유사하다). 또한, 가장 하단의 그림에서 보듯이 다양한 비선형적 관계와 데이터의 군집성 등의 패턴은 전혀 잡아내지 못한다!
결론은, 시각화 없이 통계량만 살펴보는 것은 위험하다!
상관계수는 또한 이상치의 영향을 많이 받으므로 로버스트한 방법인 켄달(Kendall)의 \(\tau\)(타우)나 스피어맨(Spearman)의 \(\rho\)(로) 통계량을 계산하는 것도 좋은 방법이다.
켄달의 타우와 스피어맨의 로를 계산하려면 cor() 함수의 method = “kendall” 옵션과 method = “spearman” 옵션을 지정하면 된다.
cor(mpg$cty, mpg$hwy)
## [1] 0.9559159
with(mpg, cor(cty, hwy))
## [1] 0.9559159
with(mpg, cor(cty, hwy, method = "kendall"))
## [1] 0.8628045
with(mpg, cor(cty, hwy, method = "spearman"))
## [1] 0.9542104
여러 셜명변수 \(X_1\), …, \(X_p\)를 사용하여 수량형 반응변수 Y를 예측하기 위한 가장 간단하지만 유용한 모형은 선형회귀 모형(linear regression model)이다.
\(Y_i ~ \beta_0\) + \(\beta_1 x_1i\)
하나의 X 변수로 이루어진 모형을 단순 회귀분석 모형(simple regression model)이라고 한다.
lm()과 summary.lm() 함수는 위의 선형 모형을 최소제곱법으로 추정한다. lm.summary()은 각 추정치와 더불어 각 모수값이 0인지 아닌지에 대한 가설검정 결과를 보여준다.
hwy_lm <- lm(hwy ~ cty, data = mpg)
summary(hwy_lm)
##
## Call:
## lm(formula = hwy ~ cty, data = mpg)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.3408 -1.2790 0.0214 1.0338 4.0461
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.89204 0.46895 1.902 0.0584 .
## cty 1.33746 0.02697 49.585 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.752 on 232 degrees of freedom
## Multiple R-squared: 0.9138, Adjusted R-squared: 0.9134
## F-statistic: 2459 on 1 and 232 DF, p-value: < 2.2e-16
즉, 적합한 모형은 다음과 같다. hwy = 0.892 + 1.337 * cty
위의 두 줄은 각 모수뿐 아니라 모형의 적합도를 나타내는 통계량
이다. Multiple R-squared: 0.9138
반응변수의 총 변동 중 91.38%가 선형회귀 모형을 설명된다. 결정계수는 0에서 1사이의 값이고, 1에 가까울수록 설명변수의 설명력을 높여준다.
hwy_lm <- lm(hwy ~ cty, data = mpg)
predict(hwy_lm)
## 1 2 3 4 5 6 7 8
## 24.96624 28.97861 27.64115 28.97861 22.29133 24.96624 24.96624 24.96624
## 9 10 11 12 13 14 15 16
## 22.29133 27.64115 26.30370 20.95388 23.62879 23.62879 20.95388 20.95388
## 17 18 19 20 21 22 23 24
## 23.62879 22.29133 19.61642 15.60405 19.61642 18.27896 16.94151 22.29133
## 25 26 27 28 29 30 31 32
## 20.95388 22.29133 20.95388 20.95388 19.61642 15.60405 15.60405 19.61642
## 33 34 35 36 37 38 39 40
## 26.30370 30.31606 24.96624 24.96624 23.62879 24.96624 23.62879 22.29133
## 41 42 43 44 45 46 47 48
## 22.29133 23.62879 23.62879 15.60405 20.95388 20.95388 22.29133 22.29133
## 49 50 51 52 53 54 55 56
## 20.95388 19.61642 18.27896 19.61642 19.61642 19.61642 12.92914 15.60405
## 57 58 59 60 61 62 63 64
## 15.60405 18.27896 18.27896 12.92914 18.27896 15.60405 18.27896 15.60405
## 65 66 67 68 69 70 71 72
## 16.94151 12.92914 18.27896 18.27896 16.94151 12.92914 15.60405 15.60405
## 73 74 75 76 77 78 79 80
## 18.27896 15.60405 15.60405 15.60405 16.94151 19.61642 20.95388 19.61642
## 81 82 83 84 85 86 87 88
## 18.27896 18.27896 18.27896 19.61642 19.61642 18.27896 18.27896 18.27896
## 89 90 91 92 93 94 95 96
## 15.60405 18.27896 24.96624 24.96624 23.62879 22.29133 20.95388 20.95388
## 97 98 99 100 101 102 103 104
## 20.95388 20.95388 19.61642 38.34080 32.99098 34.32843 31.65352 32.99098
## 105 106 107 108 109 110 111 112
## 35.66589 34.32843 32.99098 28.97861 24.96624 24.96624 28.97861 28.97861
## 113 114 115 116 117 118 119 120
## 24.96624 24.96624 26.30370 26.30370 26.30370 27.64115 27.64115 23.62879
## 121 122 123 124 125 126 127 128
## 22.29133 23.62879 23.62879 20.95388 20.95388 19.61642 12.92914 19.61642
## 129 130 131 132 133 134 135 136
## 18.27896 15.60405 15.60405 16.94151 16.94151 15.60405 15.60405 15.60405
## 137 138 139 140 141 142 143 144
## 16.94151 19.61642 18.27896 18.27896 18.27896 28.97861 26.30370 31.65352
## 145 146 147 148 149 150 151 152
## 31.65352 26.30370 26.30370 24.96624 26.30370 26.30370 19.61642 20.95388
## 153 154 155 156 157 158 159 160
## 19.61642 16.94151 24.96624 22.29133 23.62879 24.96624 22.29133 24.96624
## 161 162 163 164 165 166 167 168
## 24.96624 27.64115 26.30370 27.64115 24.96624 28.97861 26.30370 26.30370
## 169 170 171 172 173 174 175 176
## 26.30370 27.64115 27.64115 26.30370 27.64115 20.95388 22.29133 20.95388
## 177 178 179 180 181 182 183 184
## 20.95388 22.29133 19.61642 28.97861 28.97861 28.97861 28.97861 24.96624
## 185 186 187 188 189 190 191 192
## 24.96624 26.30370 28.97861 28.97861 28.97861 30.31606 24.96624 24.96624
## 193 194 195 196 197 198 199 200
## 24.96624 32.99098 32.99098 35.66589 38.34080 35.66589 15.60405 18.27896
## 201 202 203 204 205 206 207 208
## 20.95388 22.29133 23.62879 20.95388 20.95388 20.95388 22.29133 28.97861
## 209 210 211 212 213 214 215 216
## 26.30370 28.97861 30.31606 23.62879 45.02808 28.97861 26.30370 30.31606
## 217 218 219 220 221 222 223 224
## 28.97861 28.97861 28.97861 22.29133 23.62879 47.70299 39.67825 28.97861
## 225 226 227 228 229 230 231 232
## 26.30370 27.64115 27.64115 28.97861 24.96624 26.30370 28.97861 22.29133
## 233 234
## 24.96624 23.62879
resid(hwy_lm)
## 1 2 3 4 5
## 4.033757915 0.021391084 3.358846694 1.021391084 3.708669135
## 6 7 8 9 10
## 1.033757915 2.033757915 1.033757915 2.708669135 0.358846694
## 11 12 13 14 15
## 0.696302304 4.046124746 1.371213525 1.371213525 4.046124746
## 16 17 18 19 20
## 3.046124746 1.371213525 0.708669135 0.383580356 -0.604052813
## 21 22 23 24 25
## 0.383580356 -1.278964034 0.058491577 3.708669135 2.046124746
## 26 27 28 29 30
## 3.708669135 4.046124746 3.046124746 -0.616419644 -1.604052813
## 31 32 33 34 35
## -0.604052813 -2.616419644 0.696302304 -0.316064527 1.033757915
## 36 37 38 39 40
## 4.033757915 2.371213525 -0.966242085 0.371213525 -0.291330865
## 41 42 43 44 45
## -0.291330865 0.371213525 0.371213525 1.395947187 1.046124746
## 46 47 48 49 50
## 0.046124746 0.708669135 0.708669135 -1.953875254 -1.616419644
## 51 52 53 54 55
## -1.278964034 -2.616419644 -0.616419644 -0.616419644 -0.929141592
## 56 57 58 59 60
## 1.395947187 -0.604052813 -1.278964034 -1.278964034 -0.929141592
## 61 62 63 64 65
## -1.278964034 0.395947187 -0.278964034 -0.604052813 -0.941508423
## 66 67 68 69 70
## -0.929141592 -1.278964034 -1.278964034 -0.941508423 -0.929141592
## 71 72 73 74 75
## -0.604052813 0.395947187 -1.278964034 -0.604052813 1.395947187
## 76 77 78 79 80
## 1.395947187 1.058491577 -2.616419644 -1.953875254 -2.616419644
## 81 82 83 84 85
## 0.721035966 0.721035966 -1.278964034 -2.616419644 -2.616419644
## 86 87 88 89 90
## -2.278964034 -2.278964034 -1.278964034 -0.604052813 -1.278964034
## 91 92 93 94 95
## 1.033757915 0.033757915 2.371213525 1.708669135 0.046124746
## 96 97 98 99 100
## 1.046124746 2.046124746 1.046124746 0.383580356 -5.340798189
## 101 102 103 104 105
## -0.990975747 -2.328431358 -2.653520137 -0.990975747 -1.665886968
## 106 107 108 109 110
## 1.671568642 3.009024253 0.021391084 1.033757915 2.033757915
## 111 112 113 114 115
## 1.021391084 2.021391084 1.033757915 1.033757915 1.696302304
## 116 117 118 119 120
## -0.303697696 2.696302304 0.358846694 -0.641153306 0.371213525
## 121 122 123 124 125
## 1.708669135 0.371213525 -1.628786475 -1.953875254 -0.953875254
## 126 127 128 129 130
## -2.616419644 -0.929141592 -0.616419644 -0.278964034 -1.604052813
## 131 132 133 134 135
## -0.604052813 1.058491577 1.058491577 -0.604052813 1.395947187
## 136 137 138 139 140
## 0.395947187 1.058491577 -2.616419644 0.721035966 0.721035966
## 141 142 143 144 145
## -1.278964034 0.021391084 0.696302304 -0.653520137 0.346479863
## 146 147 148 149 150
## 0.696302304 -0.303697696 1.033757915 -1.303697696 -1.303697696
## 151 152 153 154 155
## -2.616419644 -3.953875254 0.383580356 1.058491577 1.033757915
## 156 157 158 159 160
## 3.708669135 3.371213525 3.033757915 2.708669135 0.033757915
## 161 162 163 164 165
## -0.966242085 -0.641153306 -1.303697696 -1.641153306 -1.966242085
## 166 167 168 169 170
## -2.978608916 -0.303697696 -0.303697696 -0.303697696 -2.641153306
## 171 172 173 174 175
## -0.641153306 -1.303697696 -0.641153306 -0.953875254 -2.291330865
## 176 177 178 179 180
## -1.953875254 -3.953875254 -2.291330865 -2.616419644 0.021391084
## 181 182 183 184 185
## -1.978608916 2.021391084 2.021391084 1.033757915 1.033757915
## 186 187 188 189 190
## 1.696302304 -1.978608916 0.021391084 2.021391084 0.683935473
## 191 192 193 194 195
## 1.033757915 1.033757915 2.033757915 -2.990975747 0.009024253
## 196 197 198 199 200
## -0.665886968 -1.340798189 -0.665886968 -0.604052813 -0.278964034
## 201 202 203 204 205
## -0.953875254 -2.291330865 -1.628786475 -3.953875254 -1.953875254
## 206 207 208 209 210
## -2.953875254 -2.291330865 0.021391084 -0.303697696 0.021391084
## 211 212 213 214 215
## -1.316064527 0.371213525 -1.028076240 0.021391084 -0.303697696
## 216 217 218 219 220
## -1.316064527 0.021391084 0.021391084 0.021391084 0.708669135
## 221 222 223 224 225
## 0.371213525 -3.702987461 1.321746201 0.021391084 -0.303697696
## 226 227 228 229 230
## 0.358846694 1.358846694 0.021391084 4.033757915 1.696302304
## 231 232 233 234
## 0.021391084 3.708669135 1.033757915 2.371213525
predict(hwy_lm, newdata = data.frame(cty = c(10, 20, 30)))
## 1 2 3
## 14.26660 27.64115 41.01571
predict(hwy_lm, newdata = data.frame(cty = c(10, 20, 30)), se.fit = T)
## $fit
## 1 2 3
## 14.26660 27.64115 41.01571
##
## $se.fit
## 1 2 3
## 0.2176003 0.1424778 0.3725052
##
## $df
## [1] 232
##
## $residual.scale
## [1] 1.752289
이런 데이터를 분석랄 때는 다음 방법을 사용하면 된다.
ANOVA 선형 모형
이 적합한다. summary.lm 함수도 심도 있는 결과를 받는다.이처럼 설명변수가 범주형이고, 반응변수가 수량형일 경우에는 선형 모형의 특별한 예인 분산분석(Anaysis of Variance, ANOVA)을 사용한다.
회귀분석이나, ANOVA 분산북석이나 수학적으로는 동일한 선형 모형이다. R에서는 한 함수 lm()으로 모든 경우를 적한단다. predict.lm(), resid.lm(), plot.lm() 함수의 사용도 유사하다. 그리고 모수에 대한 검정 절차로 사용하는 t-검정도 돋ㅇ일하고, 모형의 적합도를 평가하는 Multiple \(R^2\), Adjusted \(R^\), F-test 등도 동일하다! 선형 모형은 이처럼 매우 매우 중요하다.
mpg %>% ggplot(aes(class, hwy)) + geom_boxplot()
분산분석은 lm() 함수로 간단히 실행할 수 있다.
hwy_lm2 <- lm(hwy ~ class, data = mpg)
summary(hwy_lm2)
##
## Call:
## lm(formula = hwy ~ class, data = mpg)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8.1429 -1.8788 -0.2927 1.1803 15.8571
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 24.800 1.507 16.454 < 2e-16 ***
## classcompact 3.498 1.585 2.206 0.0284 *
## classmidsize 2.493 1.596 1.561 0.1198
## classminivan -2.436 1.818 -1.340 0.1815
## classpickup -7.921 1.617 -4.898 1.84e-06 ***
## classsubcompact 3.343 1.611 2.075 0.0391 *
## classsuv -6.671 1.567 -4.258 3.03e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.37 on 227 degrees of freedom
## Multiple R-squared: 0.6879, Adjusted R-squared: 0.6797
## F-statistic: 83.39 on 6 and 227 DF, p-value: < 2.2e-16
모형의 적합도를 나타내는 Multiple \(R^2:0.6879\) 값은 연비의 총 변동량 중 자동차 클래스로 설명되는 변동량의 비율이 69%임을 나타낸다. Adjusted \(R^2:0.6797\) 값은 모형의 복잡도, 즉 총 6개의 모수를 사용했음을 감안하여 그 비율을 68%로 줄여서 보고한다. F-statistics: 83.39와 p-value: < 2.2e-16은 H0: 연비에 클래스 진단의 효과 전혀 없다 vs. H0: not H1에 대한 검정결과를 보고해준다. 회귀분석의 예처럼, 새로운 \(x\) 값에 대한 예측/추정값은 predict() 함수로 얻을 수 있다.
predict(hwy_lm2, newdata = data.frame(class = "pickup"))
## 1
## 16.87879
이론적으로, 분산분석 결과가 의미 있기 위해서는 다음 여러가지 가정이 충족되어야 한다.
중요한 것은 분포의 독립성과 이상치의 유무다. 진단플롯은 plot.lm() 함수로 얻을 수 있다.
opar <- par(mfrow=c(2,2))
plot(hwy_lm2, las = 1) # Residuals, Fitted, ...
par(opar)
이러한 데이터를 분석할 때는 다음의 방법들을 사용하면 된다.
성공-실패 범주형 \(y\) 변수와 수량형(그리고 범주형) 설명변수를 가진 데이터는 전통적인 선형 모형으로 다룰 수 없다. 왜냐하면 전통적인 선형 모형은 반응변수 \(y\)의 범위가 무한대이기 때문이다. 대신 일반화 선형 모형(Generalized Linear Model, GLM), 특히 이항분포 패밀리를 사용해야한다. 이처럼 이항분포와 로짓링크 함수를 사용한 GLM 모형을 로지스틱 회귀 모형이라고 한다.
챌린저 O링 데이터를 분석해보자.
chall <- read.csv("https://raw.githubusercontent.com/stedy/Machine-Learning-with-R-datasets/master/challenger.csv")
chall <- tbl_df(chall)
glimpse(chall)
## Observations: 23
## Variables: 5
## $ o_ring_ct <int> 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,...
## $ distress_ct <int> 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 2, 0, 0, 0,...
## $ temperature <int> 66, 70, 69, 68, 67, 72, 73, 70, 57, 63, 70, 78, 67...
## $ pressure <int> 50, 50, 50, 50, 50, 50, 100, 100, 200, 200, 200, 2...
## $ launch_id <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,...
우선 이 데이터를 시각화해보면 온도와 실패한 O링 개수 간의 의미 있는 관계를 관찰할 수 있다.
temperature와 distress_ct의 산전도 및 y-x 상자그림
chall %>% ggplot(aes(temperature, distress_ct)) + geom_point()
chall %>% ggplot(aes(factor(distress_ct), temperature)) + geom_boxplot()
chall_glm <-
glm(cbind(distress_ct, o_ring_ct - distress_ct) ~
temperature, data = chall, family = "binomial")
summary(chall_glm)
##
## Call:
## glm(formula = cbind(distress_ct, o_ring_ct - distress_ct) ~ temperature,
## family = "binomial", data = chall)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.7526 -0.5533 -0.3388 -0.1901 1.5388
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 8.81692 3.60697 2.444 0.01451 *
## temperature -0.17949 0.05822 -3.083 0.00205 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 20.706 on 22 degrees of freedom
## Residual deviance: 9.527 on 21 degrees of freedom
## AIC: 24.865
##
## Number of Fisher Scoring iterations: 6
변수의 수가 많을 때의 분석은 크게 다음 분석들로 나눌 수 있다.
이 방법론들은 인공지능의 한 분야인 머신러닝, 데이터 마이닝의 연구분야이기도 하다. 일반적으로 머신러닝은 지도학습을, 데이터 마이닝은 비지도학습, 그리고 탐색적 데이터 분석을 지칭할 경우가 많지만, 경계가 확실한 것은 아니다.