Hmisc의 summary.formula는 포뮬러를 인자로 지정할 수 있으며, 지정한 포뮬러에 따라 데이터를 분할하여 분석할 수 있고, 분석 함수를 자유로이 지정할 수 있는 편리한 함수다. summary.formula( )의 요약 방식은 method 값에 따라 달라진다.
method=“response”인 경우 ~의 우측에 나열한 변수(이하 rhs) 각각이 ~의 좌측에 나열한 변수(이하 lhs)를 요약한다. mtcars 데이터에서 mpg(1갤런당 주행 마일)를 cyl(실린더의 수), hp(마력)에 따라 요약해보자.
> summary(mpg ~ cyl + hp, data=mtcars) # method의 기본값은 response다.
mpg N=32
+-------+---------+--+--------+
| | |N |mpg |
+-------+---------+--+--------+
|cyl |4 |11|26.66364|
| |6 | 7|19.74286|
| |8 |14|15.10000|
+-------+---------+--+--------+
|hp |[ 52, 97)| 8|27.50000|
| |[ 97,150)| 9|21.31111|
| |[150,205)| 8|17.15000|
| |[205,335]| 7|13.41429|
+-------+---------+--+--------+
|Overall| |32|20.09062|
+-------+---------+--+--------+
코드 실행 결과 cyl의 값(4, 6, 8)에 따른 mpg, hp의 범위에 따른 mpg가 요약된 것을 볼 수 있다. 이때 요약에 사용되는 함수는 mean이다. fun에 함수를 지정하여 다른 요약 값을 얻을 수 있다. 다음은 평균 대신 분산을 구한 예다.
> summary(mpg ~ cyl + hp, data=mtcars, fun=var)
mpg N=32
+-------+---------+--+---------+
| | |N |mpg mpg |
+-------+---------+--+---------+
|cyl |4 |11|20.338545|
| |6 | 7| 2.112857|
| |8 |14| 6.553846|
+-------+---------+--+---------+
|hp |[ 52, 97)| 8|18.494286|
| |[ 97,150)| 9|13.743611|
| |[150,205)| 8| 3.431429|
| |[205,335]| 7| 4.804762|
+-------+---------+--+---------+
|Overall| |32|36.324103|
+-------+---------+--+---------+
method=“reverse”인 경우 lhs에는 범주형 변수를 적고 rhs에 변수들을 적으면 lhs의 분류에 따라 rhs가 요약된다. 다음은 cyl에 따라 mpg, hp를 요약한 예다.
> summary(cyl ~ mpg + hp, data=mtcars, method="reverse")
Descriptive Statistics by cyl
+---+--------------------+--------------------+--------------------+
| |4 |6 |8 |
| |(N=11) |(N=7) |(N=14) |
+---+--------------------+--------------------+--------------------+
|mpg| 22.80/26.00/30.40 | 18.65/19.70/21.00 | 14.40/15.20/16.25 |
+---+--------------------+--------------------+--------------------+
|hp | 65.50/ 91.00/ 96.00|110.00/110.00/123.00|176.25/192.50/241.25|
+---+--------------------+--------------------+--------------------+
method=“cross”는 rhs에 나열한 변수의 조합으로 lhs를 요약할 때 사용한다. mpg를 cyl과 hp의 조합에 따라 요약한 결과, 표의 각 셀에는 N(개수)과 평균 mpg가 나타난다.
> summary(mpg ~ cyl + hp, data=mtcars, method="cross")
mean by cyl, hp
+---+
|N |
|mpg|
+---+
+---+---------+---------+---------+---------+--------+
|cyl|[ 52, 97)|[ 97,150)|[150,205)|[205,335]| ALL |
+---+---------+---------+---------+---------+--------+
|4 | 8 | 3 | 0 | 0 |11 |
| | 27.50000| 24.43333| | |26.66364|
+---+---------+---------+---------+---------+--------+
|6 | 0 | 6 | 1 | 0 | 7 |
| | | 19.75000| 19.70000| |19.74286|
+---+---------+---------+---------+---------+--------+
|8 | 0 | 0 | 7 | 7 |14 |
| | | | 16.78571| 13.41429|15.10000|
+---+---------+---------+---------+---------+--------+
|ALL| 8 | 9 | 8 | 7 |32 |
| | 27.50000| 21.31111| 17.15000| 13.41429|20.09062|
+---+---------+---------+---------+---------+--------+
summary.formula에는 test=TRUE를 지정하면 다양한 가설 검정을 수행하는 등의 기능도 포함되어 있다. example(summary.formula)로 어떤 기능이 지원되는지 살펴보기 바란다.