R

[R] 통계 모형 깔끔하게 출력하기(broom)

rubyda 2021. 9. 17. 23:44
728x90

지금까지 공부를 하면서는 다음과 같이 모델을 생성하고 평가하는데 summary() 함수를 많이 사용했다. 회귀분석을 예시로 생각해보자. 회귀분석 후에 우리는 예측 값, 잔차, r.squared등 살펴봐야 할 값들이 많다.

m<- lm(dist~speed, data = cars)
summary(m)

Call:
lm(formula = dist ~ speed, data = cars)

Residuals:
    Min      1Q  Median      3Q     Max 
-29.069  -9.525  -2.272   9.215  43.201 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -17.5791     6.7584  -2.601   0.0123 *  
speed         3.9324     0.4155   9.464 1.49e-12 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 15.38 on 48 degrees of freedom
Multiple R-squared:  0.6511,	Adjusted R-squared:  0.6438 
F-statistic: 89.57 on 1 and 48 DF,  p-value: 1.49e-12

 

그런데 여러 모델을 실험하게 될때는 조금 불편함이 있었다. 그러던 중 효자템을 발견했다. 그게 바로 broom이다!! broom은 summary()에서 출력된 값들을 데이터프레임 형태로 표현을 해준다.

 

 

https://broom.tidymodels.org/index.html

#install.packages('broom')
library('broom')

설치는 다음과 같이 해준다. 참고로 broom은 tidymodels에도 들어있기 때문에 install.packages('tidymodels')를 해도 된다!

 

broom 에서는 크게 tidy, glance, augment 이 사용된다.

 

tidy()


tidy는 모형 작업의 결과를 데이터프레임 형태로 보여준다. 다음과 같이 estimate, p.value등이 있다. 군집분석의 경우 군집별 정보도 출력해준다고 한다. 굿!

m %>% 
 tidy()
 
# A tibble: 2 × 5
  term        estimate std.error statistic  p.value
  <chr>          <dbl>     <dbl>     <dbl>    <dbl>
1 (Intercept)   -17.6      6.76      -2.60 1.23e- 2
2 speed           3.93     0.416      9.46 1.49e-12

 

glance()


glance는 모형의 성능을 데이터프레임 형태로 보여준다.  r.squared, adj.r.squared, AIC등이 있다.

m %>% 
 glance()
 
# A tibble: 1 × 12
  r.squared adj.r.squared sigma statistic  p.value    df logLik   AIC   BIC deviance
      <dbl>         <dbl> <dbl>     <dbl>    <dbl> <dbl>  <dbl> <dbl> <dbl>    <dbl>
1     0.651         0.644  15.4      89.6 1.49e-12     1  -207.  419.  425.   11354.
# … with 2 more variables: df.residual <int>, nobs <int>

 

augment()


augment는 예측값, 잔차, 등을 알려주는데 원래 데이터프레임에 추가해서 출력을 해준다

m %>%
 augment()

# A tibble: 50 × 8
    dist speed .fitted .resid   .hat .sigma  .cooksd .std.resid
   <dbl> <dbl>   <dbl>  <dbl>  <dbl>  <dbl>    <dbl>      <dbl>
 1     2     4   -1.85   3.85 0.115    15.5 0.00459       0.266
 2    10     4   -1.85  11.8  0.115    15.4 0.0435        0.819
 3     4     7    9.95  -5.95 0.0715   15.5 0.00620      -0.401
 4    22     7    9.95  12.1  0.0715   15.4 0.0255        0.813
 5    16     8   13.9    2.12 0.0600   15.5 0.000645      0.142
 6    10     9   17.8   -7.81 0.0499   15.5 0.00713      -0.521
 7    18    10   21.7   -3.74 0.0413   15.5 0.00133      -0.249
 8    26    10   21.7    4.26 0.0413   15.5 0.00172       0.283
 9    34    10   21.7   12.3  0.0413   15.4 0.0143        0.814
10    17    11   25.7   -8.68 0.0341   15.5 0.00582      -0.574
# … with 40 more rows