데이터 종류에 따른 분석 기법


1 데이터형, 분석 기법, R 함수

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’)
  • 모든 데이터는 데이터 프레임인 것을 가정하였고, dplyr 패키지의 tbl_df() 함수를 이용하여 보기 좋은 형태로 변환할 것을 추천한다.
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>

2 모든 데이터에 행해야 할 분석

  1. 데이터 내용, 구조, 타입을 파악한다. dplyr::glimpse() 함수가 유용하다. 이와 더불어, 데이터 구조를 파악할 수 있는 str(), 데이터 앞 부분을 보여주는 head()이 유용하다.
  2. 데이터의 요약 통계량을 summary로 파악한다.
  3. 결측치가 있는지 summary로 살펴본다.
  4. 무작정 시각화를 해본다. plot(), pairs()를 돌려보면 좋다. 데이터의 관측치가 많을 때는 실행시간이 길으니 dplyr::sample_n() 함수 등을 사용해 표본화한다. 데이터의 변수가 10개 이상 많을 대는 10열씩 구분하여 살펴보는 것도 유용하다.
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

3 수량형 변수의 분석

일변량 변수에 대한 통계량 분석은 다음과 같다.

  1. 데이터 분포의 시각화: 히스토그램, 상자그림, 확률밀도함수 시각화를 통해 분포를 살펴본다. ggplot() + geom_{histogram, density}() 함수 추천
  2. 요약 통계량 계산: summary, mean, median, var, sd, mad, quantile 사용
  3. 데이터 정규성 검사: qqplot, qqline 함수는 분포가 정규분포와 얼마나 유사한지 검사하는데 사용된다.
  4. 가설검정과 신뢰구간: t.test() 함수를 사용하면 일변량 t-검정과 신뢰구간을 구할 수 있다. 실제로 정규분포가 아니라도 큰 문제가 되지 않는다.
  5. 이상점 찾아보기: 로보스트 통계량 계산
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)

3.1 일변량 t-검정

일별량 연속형 변수에 흔하게 사용되는 통계 추정절차는 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]임을 알 수 있다.

3.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

4 성공-실패값 범주형 변수의 분석

성공-실패 범주형 변수의 분석

  1. 요약 통계량 계산: table(), xtab() 등이 있다다. prop.table() 함수는 도수를 상대도수(relative frequncy)로 바꿔준다. table() 함수는 도수 분포를 계산해준다. 결과는 table 클래스 객체다. xtab() 함수는 마찬가지로 도수 분포를 계산해주지만, 포뮬라(formula) 인터페이스를 사용할 수 있고, 결과는 xtabs 클래스 속성도 가지게 된다.
  2. 데이터 분포의 시각화: barplot()이 유용하다.
  3. 가설검정과 신뢰구간: binnorm.test() 함수를 사용하면 ’성공률’에 대한 검정과 신뢰구간을 구할 수 있다.

여론조사 샘플

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

4.1 오차한계, 표본 크기, sqrt(n)의 힘

표본 크기에 따른 오차한계의 감소

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()


5 설명변수와 반응변수

두 변수 사이의 관계를 연구할 때는 각 변수를 설명변수 X와 반응 변수 Y로 구부하는 것이 유용하다. 보통 인과 관계에서 원인이 되는 것으로 믿어지는 변수를 X로, 결과가 되는 변수를 Y로 놓는다.

설명변수 X는 예측변수 혹은 독립변수라고 불린다. 반응변수 Y는 종속변수라고도 불린다.

X, Y 변수 조합에 따른 예

설명변수 X 반응변수 Y
수량형 수량형 아버지 키(X)로 아들 키(Y) 예측
범주형 수량형 수면제의 종류(X)로 수면시간 증가(Y) 예측
수량형 범주형 온도(X)에 따른 로켓 부품의 고장 여부(Y) 예측
범주형 범주형 배너 색깔(X)로 클릭 여부(Y) 예측

6.1 산점도

두 연속형 변수 X와 Y가 있을 때의 시각화는 앞장에서 살펴 보았듯이 산점도가 기본이다.

mpg %>% 
  ggplot(aes(cty, hwy)) + geom_jitter() + geom_smooth(method = "lm")

6.2 상관계수

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

6.3 선형회귀 모형 적합

여러 셜명변수 \(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

6.4 모형 적합도 검정

  • Multiple R-squared: 0.9138, Adjusted R-squared: 0.9134
  • F-statistic: 2459 on 1 and 232 DF, p-value: < 2.2e-16

위의 두 줄은 각 모수뿐 아니라 모형의 적합도를 나타내는 통계량 이다. Multiple R-squared: 0.9138 반응변수의 총 변동 중 91.38%가 선형회귀 모형을 설명된다. 결정계수는 0에서 1사이의 값이고, 1에 가까울수록 설명변수의 설명력을 높여준다.

6.5 선형회귀 모형 예측

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

7 범주형 x, 수량형 y

이런 데이터를 분석랄 때는 다음 방법을 사용하면 된다.

  1. 병렬상자그림을 이용하여 데이터를 시각화한다. 집단 간에 평균과 중앙값의 차이가 존재하는지, 이상치가 있는지, 각 집단의 분산은 유사한지 등을 살펴본다
  2. lm() 함수로 ANOVA 선형 모형이 적합한다. summary.lm 함수도 심도 있는 결과를 받는다.

1 분산분석(ANOVA)

이처럼 설명변수가 범주형이고, 반응변수가 수량형일 경우에는 선형 모형의 특별한 예인 분산분석(Anaysis of Variance, ANOVA)을 사용한다.

2 선형모형, t-검정의 위대함

회귀분석이나, ANOVA 분산북석이나 수학적으로는 동일한 선형 모형이다. R에서는 한 함수 lm()으로 모든 경우를 적한단다. predict.lm(), resid.lm(), plot.lm() 함수의 사용도 유사하다. 그리고 모수에 대한 검정 절차로 사용하는 t-검정도 돋ㅇ일하고, 모형의 적합도를 평가하는 Multiple \(R^2\), Adjusted \(R^\), F-test 등도 동일하다! 선형 모형은 이처럼 매우 매우 중요하다.

3 qnstksqnstjr dP

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

4 분산분석의 진단

이론적으로, 분산분석 결과가 의미 있기 위해서는 다음 여러가지 가정이 충족되어야 한다.

  1. 잔차의 분포가 독립이다.
  2. 잔차의 분산이 동일하다.
  3. 잔차의 분포가 N(0, \(\sigma^2\))이다.

중요한 것은 분포의 독립성과 이상치의 유무다. 진단플롯은 plot.lm() 함수로 얻을 수 있다.

opar <- par(mfrow=c(2,2))
plot(hwy_lm2, las = 1)  # Residuals, Fitted, ...

par(opar)

8 수량형 x, 범주형 y (성공-실패)

이러한 데이터를 분석할 때는 다음의 방법들을 사용하면 된다.

  1. X와 (jitter된) Y 변수의 산점도를 그려본다. 그리고 Y 변수의 그룹별로 X 변수의 병렬 상자그림을 그려본다. Y 변수 값에 따라 X 변수의 분포가 차이가 있는지, 두 변수 간에 어떤 관계가 있는지, 이상치는 존재하는지, 표본 로그오즈(log odds)와 \(x\)의 산점도에 선형 패턴이 있는 등을 살펴보도록 하자.
  2. glm() 함수로 일반화 선형 모형을 적함단다. summary.glm() 함수로 심도 있는 결과를 얻는다.
  3. plot.glm()으로 잔차의 분포를 살펴본다. 이상점은 없는가? 모형의 가정은 만족하는가?

8.1 일반화 선형 모형, 로짓/로지스틱 함수

성공-실패 범주형 \(y\) 변수와 수량형(그리고 범주형) 설명변수를 가진 데이터는 전통적인 선형 모형으로 다룰 수 없다. 왜냐하면 전통적인 선형 모형은 반응변수 \(y\)의 범위가 무한대이기 때문이다. 대신 일반화 선형 모형(Generalized Linear Model, GLM), 특히 이항분포 패밀리를 사용해야한다. 이처럼 이항분포와 로짓링크 함수를 사용한 GLM 모형을 로지스틱 회귀 모형이라고 한다.

8.2 챌린저 데이터 분석

챌린저 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

9 더 복잡한 데이터의 분석, 머신러닝, 데이터 마이닝

변수의 수가 많을 때의 분석은 크게 다음 분석들로 나눌 수 있다.

  • 지도학습(Supervised Learning) : 반응변수를 예측해내는 것이 목적이다.
  • 회귀 예측 분석(regression) : 수량형 반응변수를 예측한다.
  • 분류분석(classification) : 범주형 반응변수를 예측한다.
  • 비지도학습(Unsupervised Learning) : 변수들 간의 혹은 고나측치 간의 관계를 밝혀내는 것이 목적이다.
  • 군집분석(clustering) : 관측치들을 변수들 간의 유사성으로 그룹핑한다.
  • 차원감소(dimentionality reduction) : 변수들을 관측치들 간의 유사성을 이용해서 적은 수로 줄여준다.
  • 피처 가공(feature engineering) : 주어진 변수로붙터 지도학습의 입력변수로 사용할 수 있는 특징값을 변화하거나 생성한다.

이 방법론들은 인공지능의 한 분야인 머신러닝, 데이터 마이닝의 연구분야이기도 하다. 일반적으로 머신러닝은 지도학습을, 데이터 마이닝은 비지도학습, 그리고 탐색적 데이터 분석을 지칭할 경우가 많지만, 경계가 확실한 것은 아니다.