1.1 기본 사용법

  1. 의학관련 논문을 쓸 때 대부분 처음 등장하는 것이 바로 기본적인 정보를 요약한 Table 1입니다. 문건웅 교수님께서 만드신 [moonBook package]를 사용하면 아주 쉽게 작성할 수 있습니다.
  2. moonBook package를 설치한 후, 자료를 불러오기 위해 data(acs)를 입력합니다.
install.packages("moonBook") # 패키지 설치하기
require(moonBook) # 패키지 불러오기 
data(acs) # 데이터 불러오기
str(acs) # 데이터 구조확인
## 'data.frame':    857 obs. of  17 variables:
##  $ age             : int  62 78 76 89 56 73 58 62 59 71 ...
##  $ sex             : chr  "Male" "Female" "Female" "Female" ...
##  $ cardiogenicShock: chr  "No" "No" "Yes" "No" ...
##  $ entry           : chr  "Femoral" "Femoral" "Femoral" "Femoral" ...
##  $ Dx              : chr  "STEMI" "STEMI" "STEMI" "STEMI" ...
##  $ EF              : num  18 18.4 20 21.8 21.8 22 24.7 26.6 28.5 31.1 ...
##  $ height          : num  168 148 NA 165 162 153 167 160 152 168 ...
##  $ weight          : num  72 48 NA 50 64 59 78 50 67 60 ...
##  $ BMI             : num  25.5 21.9 NA 18.4 24.4 ...
##  $ obesity         : chr  "Yes" "No" "No" "No" ...
##  $ TC              : num  215 NA NA 121 195 184 161 136 239 169 ...
##  $ LDLC            : int  154 NA NA 73 151 112 91 88 161 88 ...
##  $ HDLC            : int  35 NA NA 20 36 38 34 33 34 54 ...
##  $ TG              : int  155 166 NA 89 63 137 196 30 118 141 ...
##  $ DM              : chr  "Yes" "No" "No" "No" ...
##  $ HBP             : chr  "No" "Yes" "Yes" "No" ...
##  $ smoking         : chr  "Smoker" "Never" "Never" "Never" ...


  1. acs 자료를 이용하여 진단명에 따라 환자의 기본 데이터를 정리한 표를 만들어 봅시다.
  2. R의 명령어에도 문법이 존재하는 데, 이 함수는 [formula(규정식)]을 사용합니다. “~”기준으로 왼쪽에는 우리가 그룹별로 나누고자하는 변수(grouping variable)의 이름을 써주고 오른쪽에는 표의 열이 되는 변수(row variable)의 이름을 써줍니다. ~의 오른쪽에는 “.”을 쓸수도 있는데 이것은 열 전부를 뜻합니다.
mytable(Dx~., data=acs)
## 
##                  Descriptive Statistics by 'Dx'                 
## _________________________________________________________________ 
##                      NSTEMI       STEMI     Unstable Angina   p  
##                     (N=153)      (N=304)        (N=400)    
## ----------------------------------------------------------------- 
##  age              64.3 ± 12.3  62.1 ± 12.1    63.8 ± 11.0   0.073
##  sex                                                        0.012
##    - Female        50 (32.7%)   84 (27.6%)    153 (38.2%)        
##    - Male         103 (67.3%)  220 (72.4%)    247 (61.8%)        
##  cardiogenicShock                                           0.000
##    - No           149 (97.4%)  256 (84.2%)   400 (100.0%)        
##    - Yes           4 ( 2.6%)    48 (15.8%)     0 ( 0.0%)         
##  entry                                                      0.001
##    - Femoral       58 (37.9%)  133 (43.8%)    121 (30.2%)        
##    - Radial        95 (62.1%)  171 (56.2%)    279 (69.8%)        
##  EF               55.0 ±  9.3  52.4 ±  9.5    59.2 ±  8.7   0.000
##  height           163.3 ±  8.2 165.1 ±  8.2  161.7 ±  9.7   0.000
##  weight           64.3 ± 10.2  65.7 ± 11.6    64.5 ± 11.6   0.361
##  BMI              24.1 ±  3.2  24.0 ±  3.3    24.6 ±  3.4   0.064
##  obesity                                                    0.186
##    - No           106 (69.3%)  209 (68.8%)    252 (63.0%)        
##    - Yes           47 (30.7%)   95 (31.2%)    148 (37.0%)        
##  TC               193.7 ± 53.6 183.2 ± 43.4  183.5 ± 48.3   0.057
##  LDLC             126.1 ± 44.7 116.7 ± 39.5  112.9 ± 40.4   0.004
##  HDLC             38.9 ± 11.9  38.5 ± 11.0    37.8 ± 10.9   0.501
##  TG               130.1 ± 88.5 106.5 ± 72.0  137.4 ± 101.6  0.000
##  DM                                                         0.209
##    - No            96 (62.7%)  208 (68.4%)    249 (62.2%)        
##    - Yes           57 (37.3%)   96 (31.6%)    151 (37.8%)        
##  HBP                                                        0.002
##    - No            62 (40.5%)  150 (49.3%)    144 (36.0%)        
##    - Yes           91 (59.5%)  154 (50.7%)    256 (64.0%)        
##  smoking                                                    0.000
##    - Ex-smoker     42 (27.5%)   66 (21.7%)    96 (24.0%)         
##    - Never         50 (32.7%)   97 (31.9%)    185 (46.2%)        
##    - Smoker        61 (39.9%)  141 (46.4%)    119 (29.8%)        
## -----------------------------------------------------------------


  1. 기호 중 +,-도 사용할 수 있는데, +는 변수의 이름을 더할 때 사용하고 -는 뺄 때 사용합니다.
mytable(sex~age+Dx, data=acs)
## 
##          Descriptive Statistics by 'sex'         
## __________________________________________________ 
##                        Female       Male       p  
##                        (N=287)     (N=570)  
## -------------------------------------------------- 
##  age                 68.7 ± 10.7 60.6 ± 11.2 0.000
##  Dx                                          0.012
##    - NSTEMI          50 (17.4%)  103 (18.1%)      
##    - STEMI           84 (29.3%)  220 (38.6%)      
##    - Unstable Angina 153 (53.3%) 247 (43.3%)      
## --------------------------------------------------


1.2 연속형 변수의 통계 방법

  1. 따로 정해주지 않는 경우 디폴트 값으로 연속형 변수는 정규분포하는 것으로 간주하고 통계처리를 하며, 표에서는 자료는 [평균±표준편차]로 표현합니다.
  2. 이러한 디폴트값을 바꾸려면 mytable 명령을 내릴때 함수 안의 [method] 값을 바꿔주면 됩니다. method에는 1부터 3까지 값을 줄 수 있습니다.
  • 1) 정규본포하는 것으로 간주하고 분석. 표에서는 평균과 표준편차 값이 나타남. 디폴트 값으로 설정. p값은 두군인 경우 t.test, 세 군 이상인 경우 anova를 통해 결정됨.
  • 2) 정규분포 하지 않는 것으로 간주하고 분석. 중앙값과 사분위값이 나타남. p값은 Kruskal-Wallis Rank Sum Test로 결정됨.
  • 3) 자료의 정규성을 검정하고 그 결과에 따라 분석을 진행. 자료의 개수가 5000개 이하인 경우에는 Shapiro-Wilk Normality test를 실시하고 5000개 이상인 경우에는 Anderson-Daring test를 실시함.
data(radial)
mytable(sex~age+weight+TC+hsCRP, data=radial, method=3)
## 
##            Descriptive Statistics by 'sex'          
## _____________________________________________________ 
##                  F                   M            p  
##               (N=57)              (N=58)       
## ----------------------------------------------------- 
##  age        66.0 ±  8.8         61.3 ± 10.3     0.009
##  weight     58.2 ±  7.0         67.9 ±  8.5     0.000
##  TC     188.0 [172.5;220.0] 176.0 [161.0;216.0] 0.181
##  hsCRP    0.1 [ 0.1; 0.3]     0.1 [ 0.1; 0.5]   0.343
## -----------------------------------------------------


1.3 범주형 변수

  1. mytable 함수에서는 고유값이 5개 미만인 경우 숫자로 입력되어 있더라도 연속형 변수가 아닌 범주형 변수로 취급합니다.
  2. 자동차 연비에 대한 R의 내장자료인 mtcars 데이터는 모든 변수가 숫자로 입력되어 있습니다. 하지만 cyl, vs, gear 변수는 범주형 변수로 취급했습니다.
mytable(am~., data=mtcars)
## 
##     Descriptive Statistics by 'am'    
## _______________________________________ 
##              0            1         p  
##           (N=19)        (N=13)   
## --------------------------------------- 
##  mpg    17.1 ±  3.8  24.4 ±  6.2  0.000
##  cyl                              0.013
##    - 4   3 (15.8%)    8 (61.5%)        
##    - 6   4 (21.1%)    3 (23.1%)        
##    - 8  12 (63.2%)    2 (15.4%)        
##  disp  290.4 ± 110.2 143.5 ± 87.2 0.000
##  hp    160.3 ± 53.9  126.8 ± 84.1 0.180
##  drat    3.3 ±  0.4   4.0 ±  0.4  0.000
##  wt      3.8 ±  0.8   2.4 ±  0.6  0.000
##  qsec   18.2 ±  1.8  17.4 ±  1.8  0.206
##  vs                               0.556
##    - 0  12 (63.2%)    6 (46.2%)        
##    - 1   7 (36.8%)    7 (53.8%)        
##  gear                             0.000
##    - 3  15 (78.9%)     0 ( 0.0%)       
##    - 4   4 (21.1%)    8 (61.5%)        
##    - 5   0 ( 0.0%)    5 (38.5%)        
##  carb    2.7 ±  1.1   2.9 ±  2.2  0.781
## ---------------------------------------


  1. carb 변수는 6개의 고유값을 가지므로 연속형 변수로 취급했는데 만일 범주형 변수로 취급하고 싶다면 [max.ylev]의 인수를 바꿔주면 됩니다.
mytable(am~carb, data=mtcars,max.ylev=6)
## 
##   Descriptive Statistics by 'am' 
## __________________________________ 
##            0          1        p  
##          (N=19)     (N=13)  
## ---------------------------------- 
##  carb                        0.284
##    - 1 3 (15.8%)  4 (30.8%)       
##    - 2 6 (31.6%)  4 (30.8%)       
##    - 3 3 (15.8%)   0 ( 0.0%)      
##    - 4 7 (36.8%)  3 (23.1%)       
##    - 6  0 ( 0.0%) 1 ( 7.7%)       
##    - 8  0 ( 0.0%) 1 ( 7.7%)       
## ----------------------------------


1.4 여러개의 표를 하나로 합치기

  1. 전체 환자를 성별에 따라 남, 여로 나누고 다시 당뇨병 유무에 따라 표를 나누어 만든 후 표를 합치고 싶으면 다음과 같이 합니다.
mytable(sex+DM~., data=acs)
## 
##                  Descriptive Statistics stratified by 'sex' and 'DM'                
## _____________________________________________________________________________________ 
##                                     Male                             Female             
##                      -------------------------------- ------------------------------- 
##                           No           Yes        p        No          Yes        p  
##                        (N=380)       (N=190)           (N=173)      (N=114)        
## ------------------------------------------------------------------------------------- 
##  age                 60.9 ± 11.5   60.1 ± 10.6  0.472 69.3 ± 11.4  67.8 ±  9.7  0.257
##  cardiogenicShock                               0.685                           0.296
##    - No              355 (93.4%)   175 (92.1%)        168 (97.1%)  107 (93.9%)       
##    - Yes              25 ( 6.6%)   15 ( 7.9%)          5 ( 2.9%)    7 ( 6.1%)        
##  entry                                          0.552                           0.665
##    - Femoral         125 (32.9%)   68 (35.8%)          74 (42.8%)   45 (39.5%)       
##    - Radial          255 (67.1%)   122 (64.2%)         99 (57.2%)   69 (60.5%)       
##  Dx                                             0.219                           0.240
##    - NSTEMI           71 (18.7%)   32 (16.8%)          25 (14.5%)   25 (21.9%)       
##    - STEMI           154 (40.5%)   66 (34.7%)          54 (31.2%)   30 (26.3%)       
##    - Unstable Angina 155 (40.8%)   92 (48.4%)          94 (54.3%)   59 (51.8%)       
##  EF                  56.5 ±  8.3   53.9 ± 11.0  0.007 56.0 ± 10.1  56.6 ± 10.0  0.655
##  height              168.1 ±  5.8 167.5 ±  6.7  0.386 153.9 ±  6.5 153.6 ±  5.8 0.707
##  weight              68.1 ± 10.4   69.8 ± 10.2  0.070 56.5 ±  8.7  58.4 ± 10.0  0.106
##  BMI                 24.0 ±  3.1   24.9 ±  3.5  0.005 23.8 ±  3.2  24.8 ±  4.0  0.046
##  obesity                                        0.027                           0.359
##    - No              261 (68.7%)   112 (58.9%)        121 (69.9%)   73 (64.0%)       
##    - Yes             119 (31.3%)   78 (41.1%)          52 (30.1%)   41 (36.0%)       
##  TC                  184.1 ± 46.7 181.8 ± 44.5  0.572 186.0 ± 43.1 193.3 ± 60.8 0.274
##  LDLC                117.9 ± 41.8 112.1 ± 39.4  0.115 116.3 ± 35.2 119.8 ± 48.6 0.519
##  HDLC                38.4 ± 11.4   36.8 ±  9.6  0.083 39.2 ± 10.9  38.8 ± 12.2  0.821
##  TG                  115.2 ± 72.2 153.4 ± 130.7 0.000 114.2 ± 82.4 128.4 ± 65.5 0.112
##  HBP                                            0.000                           0.356
##    - No              205 (53.9%)   68 (35.8%)          54 (31.2%)   29 (25.4%)       
##    - Yes             175 (46.1%)   122 (64.2%)        119 (68.8%)   85 (74.6%)       
##  smoking                                        0.386                           0.093
##    - Ex-smoker       101 (26.6%)   54 (28.4%)          34 (19.7%)   15 (13.2%)       
##    - Never            77 (20.3%)   46 (24.2%)         118 (68.2%)   91 (79.8%)       
##    - Smoker          202 (53.2%)   90 (47.4%)          21 (12.1%)   8 ( 7.0%)        
## -------------------------------------------------------------------------------------


1.5 csv 파일로 저장하기

  1. mytable() 함수의 결과를 [csv 형식]으로 저장할 수 있습니다.
mycsv(mytable(sex+DM~., data=acs),file='test1.csv')
mycsv(mytable(sex+DM~age+Dx, data=acs),file='test2.csv')


1.6 html 형식으로 표를 출력하기

  1. myhtml() 함수를 쓰면 웹브라우저에 볼 수 있는 [html 형식]의 표로 바꿀 수 있습니다.
myhtml(mytable(sex+DM~., data=acs))
Descriptive Statistics stratified by sex and DM
sex Male Female
DM No
(N=380)
Yes
(N=190)
p No
(N=173)
Yes
(N=114)
p
age 60.9 ± 11.5 60.1 ± 10.6 0.472 69.3 ± 11.4 67.8 ± 9.7 0.257
cardiogenicShock 0.685 0.296
    No 355 (93.4%) 175 (92.1%) 168 (97.1%) 107 (93.9%)
    Yes 25 ( 6.6%) 15 ( 7.9%) 5 ( 2.9%) 7 ( 6.1%)
entry 0.552 0.665
    Femoral 125 (32.9%) 68 (35.8%) 74 (42.8%) 45 (39.5%)
    Radial 255 (67.1%) 122 (64.2%) 99 (57.2%) 69 (60.5%)
Dx 0.219 0.240
    NSTEMI 71 (18.7%) 32 (16.8%) 25 (14.5%) 25 (21.9%)
    STEMI 154 (40.5%) 66 (34.7%) 54 (31.2%) 30 (26.3%)
    Unstable Angina 155 (40.8%) 92 (48.4%) 94 (54.3%) 59 (51.8%)
EF 56.5 ± 8.3 53.9 ± 11.0 0.007 56.0 ± 10.1 56.6 ± 10.0 0.655
height 168.1 ± 5.8 167.5 ± 6.7 0.386 153.9 ± 6.5 153.6 ± 5.8 0.707
weight 68.1 ± 10.4 69.8 ± 10.2 0.070 56.5 ± 8.7 58.4 ± 10.0 0.106
BMI 24.0 ± 3.1 24.9 ± 3.5 0.005 23.8 ± 3.2 24.8 ± 4.0 0.046
obesity 0.027 0.359
    No 261 (68.7%) 112 (58.9%) 121 (69.9%) 73 (64.0%)
    Yes 119 (31.3%) 78 (41.1%) 52 (30.1%) 41 (36.0%)
TC 184.1 ± 46.7 181.8 ± 44.5 0.572 186.0 ± 43.1 193.3 ± 60.8 0.274
LDLC 117.9 ± 41.8 112.1 ± 39.4 0.115 116.3 ± 35.2 119.8 ± 48.6 0.519
HDLC 38.4 ± 11.4 36.8 ± 9.6 0.083 39.2 ± 10.9 38.8 ± 12.2 0.821
TG 115.2 ± 72.2 153.4 ± 130.7 0.000 114.2 ± 82.4 128.4 ± 65.5 0.112
HBP 0.000 0.356
    No 205 (53.9%) 68 (35.8%) 54 (31.2%) 29 (25.4%)
    Yes 175 (46.1%) 122 (64.2%) 119 (68.8%) 85 (74.6%)
smoking 0.386 0.093
    Ex-smoker 101 (26.6%) 54 (28.4%) 34 (19.7%) 15 (13.2%)
    Never 77 (20.3%) 46 (24.2%) 118 (68.2%) 91 (79.8%)
    Smoker 202 (53.2%) 90 (47.4%) 21 (12.1%) 8 ( 7.0%)


myhtml(mytable(sex+DM~age+Dx, data=acs))
Descriptive Statistics stratified by sex and DM
sex Male Female
DM No
(N=380)
Yes
(N=190)
p No
(N=173)
Yes
(N=114)
p
age 60.9 ± 11.5 60.1 ± 10.6 0.472 69.3 ± 11.4 67.8 ± 9.7 0.257
Dx 0.219 0.240
    NSTEMI 71 (18.7%) 32 (16.8%) 25 (14.5%) 25 (21.9%)
    STEMI 154 (40.5%) 66 (34.7%) 54 (31.2%) 30 (26.3%)
    Unstable Angina 155 (40.8%) 92 (48.4%) 94 (54.3%) 59 (51.8%)