tableone CreateContTable() test

References

Load data

### Load dataset
library(survival)
data(pbc)
head(pbc)
  id time status trt   age sex ascites hepato spiders edema bili chol albumin copper alk.phos    ast trig platelet
1  1  400      2   1 58.77   f       1      1       1   1.0 14.5  261    2.60    156     1718 137.95  172      190
2  2 4500      0   1 56.45   f       0      1       1   0.0  1.1  302    4.14     54     7395 113.52   88      221
3  3 1012      2   1 70.07   m       0      0       0   0.5  1.4  176    3.48    210      516  96.10   55      151
4  4 1925      2   1 54.74   f       0      1       1   0.5  1.8  244    2.54     64     6122  60.63   92      183
5  5 1504      1   2 38.11   f       0      1       1   0.0  3.4  279    3.53    143      671 113.15   72      136
6  6 2503      2   2 66.26   f       0      1       0   0.0  0.8  248    3.98     50      944  93.00   63       NA
  protime stage
1    12.2     4
2    10.6     3
3    12.0     4
4    10.3     4
5    10.9     3
6    11.0     3
## Group by "status" (3 groups).
## Use c("time","age","bili","chol","albumin","copper","alk.phos","ast","trig","platelet","protime")
## 
## age:       in years                                                      
## albumin:   serum albumin (g/dl)                                          
## alk.phos:  alkaline phosphotase (U/liter)                                
## ascites:   presence of ascites                                           
## ast:       aspartate aminotransferase, once called SGOT (U/ml)           
## bili:      serum bilirunbin (mg/dl)                                      
## chol:      serum cholesterol (mg/dl)                                     
## copper:    urine copper (ug/day)                                         
## edema:     0 no edema, 0.5 untreated or successfully treated             
##            1 edema despite diuretic therapy                              
## hepato:    presence of hepatomegaly or enlarged liver                    
## id:        case number                                                   
## platelet:  platelet count                                                
## protime:   standardised blood clotting time                              
## sex:       m/f                                                           
## spiders:   blood vessel malformations in the skin                        
## stage:     histologic stage of disease (needs biopsy)                    
## status:    status at endpoint, 0/1/2 for censored, transplant, dead      
## time:      number of days between registration and the earlier of death, 
##            transplantion, or study analysis in July, 1986                
## trt:       1/2/NA for D-penicillmain, placebo, not randomised            
## trig:      triglycerides (mg/dl)                                         

Load functions

### Load CreateContTable and related methods
source("../tableone/R/CreateContTable.R")   # Based on Deducer::descriptive.table()
source("../tableone/R/print.ContTable.R")
source("../tableone/R/summary.ContTable.R")

## Usesage
## CreateContTable(vars,       # vector of characters
##                 strata,     # single element character vector
##                 data,       # data frame
##                 nonnormal = FALSE,  # Nonormal flag for testing
##                 test = FALSE,       # Whether to put p-values
##                 )

Define variables for testing

###  Define variables
vars <- c("time","age","bili","chol","albumin","copper","alk.phos","ast","trig","platelet","protime")

## Strata
strata <- "status"
strataTwoVars <- c("status","sex")
strataThreeVars <- c("sex","ascites","hepato")

## Data and variables
dataFrame <- pbc
nonNormalVars <- c("bili","chol","copper","alk.phos","trig","protime")

## Create edema strata that are of sizes 1, 2, and 3
smallDataFrame <- pbc[c(2, 3,4, 1,10,14),]
smallStrata <- "edema"

Actual tests

### Behaviors on correct data format (non-stratified)
## Creation
contTable1 <- CreateContTable(vars = vars, data = dataFrame)
## summary method
summary(contTable1)
strata: Overall
           n miss   mean      sd median    q25    q75   min     max   skew  kurt
time     418    0 1917.8 1104.67 1730.0 1092.8 2613.5  41.0  4795.0  0.473 -0.48
age      418    0   50.7   10.45   51.0   42.8   58.2  26.3    78.4  0.087 -0.62
bili     418    0    3.2    4.41    1.4    0.8    3.4   0.3    28.0  2.718  8.07
chol     418  134  369.5  231.94  309.5  249.5  400.0 120.0  1775.0  3.409 14.34
albumin  418    0    3.5    0.42    3.5    3.2    3.8   2.0     4.6 -0.468  0.57
copper   418  108   97.6   85.61   73.0   41.2  123.0   4.0   588.0  2.304  7.62
alk.phos 418  106 1982.7 2140.39 1259.0  871.5 1980.0 289.0 13862.4  2.993  9.66
ast      418  106  122.6   56.70  114.7   80.6  151.9  26.4   457.2  1.449  4.31
trig     418  136  124.7   65.15  108.0   84.2  151.0  33.0   598.0  2.524 11.80
platelet 418   11  257.0   98.33  251.0  188.5  318.0  62.0   721.0  0.627  0.86
protime  418    2   10.7    1.02   10.6   10.0   11.1   9.0    18.0  2.223 10.04
## print method by default
print(contTable1)
                       "Overall"          
"time (mean (sd))"     "1917.78 (1104.67)"
"age (mean (sd))"      "50.74 (10.45)"    
"bili (mean (sd))"     "3.22 (4.41)"      
"chol (mean (sd))"     "369.51 (231.94)"  
"albumin (mean (sd))"  "3.50 (0.42)"      
"copper (mean (sd))"   "97.65 (85.61)"    
"alk.phos (mean (sd))" "1982.66 (2140.39)"
"ast (mean (sd))"      "122.56 (56.70)"   
"trig (mean (sd))"     "124.70 (65.15)"   
"platelet (mean (sd))" "257.02 (98.33)"   
"protime (mean (sd))"  "10.73 (1.02)"     
## No quote
print(contTable1, quote = FALSE)
                     Overall          
time (mean (sd))     1917.78 (1104.67)
age (mean (sd))      50.74 (10.45)    
bili (mean (sd))     3.22 (4.41)      
chol (mean (sd))     369.51 (231.94)  
albumin (mean (sd))  3.50 (0.42)      
copper (mean (sd))   97.65 (85.61)    
alk.phos (mean (sd)) 1982.66 (2140.39)
ast (mean (sd))      122.56 (56.70)   
trig (mean (sd))     124.70 (65.15)   
platelet (mean (sd)) 257.02 (98.33)   
protime (mean (sd))  10.73 (1.02)     
## No explanation
print(contTable1, quote = FALSE, explain = FALSE)
         Overall          
time     1917.78 (1104.67)
age      50.74 (10.45)    
bili     3.22 (4.41)      
chol     369.51 (231.94)  
albumin  3.50 (0.42)      
copper   97.65 (85.61)    
alk.phos 1982.66 (2140.39)
ast      122.56 (56.70)   
trig     124.70 (65.15)   
platelet 257.02 (98.33)   
protime  10.73 (1.02)     
## All nonnormal
print(contTable1, nonnormal = TRUE)
                          "Overall"                   
"time (median [IQR])"     "1730.00 [1092.75, 2613.50]"
"age (median [IQR])"      "51.00 [42.83, 58.24]"      
"bili (median [IQR])"     "1.40 [0.80, 3.40]"         
"chol (median [IQR])"     "309.50 [249.50, 400.00]"   
"albumin (median [IQR])"  "3.53 [3.24, 3.77]"         
"copper (median [IQR])"   "73.00 [41.25, 123.00]"     
"alk.phos (median [IQR])" "1259.00 [871.50, 1980.00]" 
"ast (median [IQR])"      "114.70 [80.60, 151.90]"    
"trig (median [IQR])"     "108.00 [84.25, 151.00]"    
"platelet (median [IQR])" "251.00 [188.50, 318.00]"   
"protime (median [IQR])"  "10.60 [10.00, 11.10]"      
## Partially nonnormal
print(contTable1, nonnormal = nonNormalVars, quote = TRUE)
                          "Overall"                  
"time (mean (sd))"        "1917.78 (1104.67)"        
"age (mean (sd))"         "50.74 (10.45)"            
"bili (median [IQR])"     "1.40 [0.80, 3.40]"        
"chol (median [IQR])"     "309.50 [249.50, 400.00]"  
"albumin (mean (sd))"     "3.50 (0.42)"              
"copper (median [IQR])"   "73.00 [41.25, 123.00]"    
"alk.phos (median [IQR])" "1259.00 [871.50, 1980.00]"
"ast (mean (sd))"         "122.56 (56.70)"           
"trig (median [IQR])"     "108.00 [84.25, 151.00]"   
"platelet (mean (sd))"    "257.02 (98.33)"           
"protime (median [IQR])"  "10.60 [10.00, 11.10]"     


### Behaviors on correct data format (stratified)
## Creation
contTable2 <- CreateContTable(vars = vars, strata = strata, data = dataFrame)
## summary method
summary(contTable2)
status: 0
           n miss   mean      sd median    q25    q75   min     max  skew  kurt
time     232    0 2333.2  994.66 2186.5 1456.5 2979.5 691.0  4795.0  0.59 -0.59
age      232    0   49.5   10.43   49.8   41.4   56.8  26.3    78.4  0.10 -0.58
bili     232    0    1.6    1.91    0.9    0.6    1.6   0.3    13.6  3.49 14.50
chol     232   80  326.5  165.80  292.0  245.2  360.0 120.0  1480.0  4.30 24.79
albumin  232    0    3.6    0.36    3.6    3.4    3.8   2.4     4.6 -0.21  0.44
copper   232   65   66.6   57.05   52.0   33.5   77.5   4.0   412.0  3.07 13.52
alk.phos 232   64 1578.1 1633.07 1107.5  794.0 1641.0 289.0 11046.6  3.59 14.68
ast      232   64  107.3   52.79   94.5   71.3  129.0  26.4   457.2  2.38 11.22
trig     232   81  111.8   48.28  104.0   80.0  133.5  44.0   382.0  1.72  5.92
platelet 232    5  261.2   88.61  256.0  203.5  313.0  79.0   539.0  0.41  0.21
protime  232    1   10.5    0.92   10.4    9.9   10.8   9.0    18.0  4.21 29.69
--------------------------------------------------------------------------------------- 
status: 1
          n miss   mean     sd median    q25    q75   min    max   skew  kurt
time     25    0 1546.2 753.07 1435.0  901.0 2241.0 533.0 3092.0  0.596 -0.69
age      25    0   41.7   6.33   41.0   36.5   47.2  33.0   56.0  0.470 -0.58
bili     25    0    3.6   3.60    3.1    1.3    3.5   0.5   18.0  2.951 10.89
chol     25    7  439.5 335.54  343.5  311.5  445.5 201.0 1712.0  3.553 13.79
albumin  25    0    3.5   0.46    3.5    3.2    3.8   2.3    4.2 -0.531  0.31
copper   25    6  124.0 100.08  102.0   69.0  129.5  32.0  444.0  2.250  5.62
alk.phos 25    6 1535.2 837.75 1345.0 1028.5 1777.5 637.0 3681.0  1.470  1.84
ast      25    6  130.1  36.95  127.0  113.9  151.1  54.2  205.0  0.088  0.31
trig     25    7  133.9  70.55  124.0   85.8  145.8  33.0  322.0  1.249  1.76
platelet 25    0  309.6 102.65  304.0  248.0  372.0  76.0  517.0 -0.112  0.20
protime  25    0   10.4   0.54   10.3   10.0   10.7   9.6   11.4  0.516 -0.73
--------------------------------------------------------------------------------------- 
status: 2
           n miss   mean      sd median    q25    q75   min     max   skew  kurt
time     161    0 1376.9 1049.23 1083.0  597.0 2071.0  41.0  4191.0  0.833 -0.19
age      161    0   53.9    9.81   53.5   46.6   61.3  30.9    76.7 -0.013 -0.56
bili     161    0    5.5    5.84    3.2    1.4    7.1   0.3    28.0  1.684  2.36
chol     161   47  415.8  275.03  339.0  257.5  454.0 127.0  1775.0  2.575  8.11
albumin  161    0    3.4    0.47    3.4    3.1    3.6   2.0     4.5 -0.329  0.18
copper   161   37  135.4   98.50  111.0   63.5  199.2  13.0   588.0  1.840  5.50
alk.phos 161   36 2594.4 2677.11 1664.0 1029.0 2468.0 516.0 13862.4  2.300  5.08
ast      161   36  141.9   58.38  134.8   99.3  176.7  28.4   338.0  0.808  0.98
trig     161   48  140.5   79.26  122.0   91.0  171.0  49.0   598.0  2.505 10.29
platelet 161    6  242.5  107.88  224.0  158.0  312.5  62.0   721.0  1.012  1.80
protime  161    1   11.2    1.05   11.0   10.5   11.8   9.0    15.2  0.776  0.86
## print method by default
print(contTable2)
Stratified by status
                       "0"                 "1"                "2"                
"time (mean (sd))"     "2333.16 (994.66)"  "1546.20 (753.07)" "1376.93 (1049.23)"
"age (mean (sd))"      "49.51 (10.43)"     "41.69 (6.33)"     "53.92 (9.81)"     
"bili (mean (sd))"     "1.58 (1.91)"       "3.56 (3.60)"      "5.54 (5.84)"      
"chol (mean (sd))"     "326.54 (165.80)"   "439.50 (335.54)"  "415.75 (275.03)"  
"albumin (mean (sd))"  "3.59 (0.36)"       "3.49 (0.46)"      "3.36 (0.47)"      
"copper (mean (sd))"   "66.61 (57.05)"     "124.00 (100.08)"  "135.41 (98.50)"   
"alk.phos (mean (sd))" "1578.13 (1633.07)" "1535.21 (837.75)" "2594.35 (2677.11)"
"ast (mean (sd))"      "107.29 (52.79)"    "130.12 (36.95)"   "141.93 (58.38)"   
"trig (mean (sd))"     "111.79 (48.28)"    "133.94 (70.55)"   "140.49 (79.26)"   
"platelet (mean (sd))" "261.16 (88.61)"    "309.60 (102.65)"  "242.49 (107.88)"  
"protime (mean (sd))"  "10.45 (0.92)"      "10.36 (0.54)"     "11.19 (1.05)"     
## No quote
print(contTable2, quote = FALSE)
Stratified by status
                     0                 1                2                
time (mean (sd))     2333.16 (994.66)  1546.20 (753.07) 1376.93 (1049.23)
age (mean (sd))      49.51 (10.43)     41.69 (6.33)     53.92 (9.81)     
bili (mean (sd))     1.58 (1.91)       3.56 (3.60)      5.54 (5.84)      
chol (mean (sd))     326.54 (165.80)   439.50 (335.54)  415.75 (275.03)  
albumin (mean (sd))  3.59 (0.36)       3.49 (0.46)      3.36 (0.47)      
copper (mean (sd))   66.61 (57.05)     124.00 (100.08)  135.41 (98.50)   
alk.phos (mean (sd)) 1578.13 (1633.07) 1535.21 (837.75) 2594.35 (2677.11)
ast (mean (sd))      107.29 (52.79)    130.12 (36.95)   141.93 (58.38)   
trig (mean (sd))     111.79 (48.28)    133.94 (70.55)   140.49 (79.26)   
platelet (mean (sd)) 261.16 (88.61)    309.60 (102.65)  242.49 (107.88)  
protime (mean (sd))  10.45 (0.92)      10.36 (0.54)     11.19 (1.05)     
## All nonnormal
print(contTable2, nonnormal = TRUE)
Stratified by status
                          "0"                          "1"                          "2"                         
"time (median [IQR])"     "2186.50 [1456.50, 2979.50]" "1435.00 [901.00, 2241.00]"  "1083.00 [597.00, 2071.00]" 
"age (median [IQR])"      "49.82 [41.38, 56.76]"       "41.00 [36.49, 47.18]"       "53.50 [46.63, 61.30]"      
"bili (median [IQR])"     "0.90 [0.60, 1.60]"          "3.10 [1.30, 3.50]"          "3.20 [1.40, 7.10]"         
"chol (median [IQR])"     "292.00 [245.25, 360.00]"    "343.50 [311.50, 445.50]"    "339.00 [257.50, 454.00]"   
"albumin (median [IQR])"  "3.60 [3.36, 3.82]"          "3.53 [3.18, 3.77]"          "3.40 [3.08, 3.65]"         
"copper (median [IQR])"   "52.00 [33.50, 77.50]"       "102.00 [69.00, 129.50]"     "111.00 [63.50, 199.25]"    
"alk.phos (median [IQR])" "1107.50 [794.00, 1641.00]"  "1345.00 [1028.50, 1777.50]" "1664.00 [1029.00, 2468.00]"
"ast (median [IQR])"      "94.55 [71.30, 128.99]"      "127.00 [113.93, 151.12]"    "134.85 [99.33, 176.70]"    
"trig (median [IQR])"     "104.00 [80.00, 133.50]"     "124.00 [85.75, 145.75]"     "122.00 [91.00, 171.00]"    
"platelet (median [IQR])" "256.00 [203.50, 313.00]"    "304.00 [248.00, 372.00]"    "224.00 [158.00, 312.50]"   
"protime (median [IQR])"  "10.40 [9.90, 10.80]"        "10.30 [10.00, 10.70]"       "11.00 [10.47, 11.80]"      
## Partially nonnormal
print(contTable2, nonnormal = nonNormalVars, quote = TRUE)
Stratified by status
                          "0"                         "1"                          "2"                         
"time (mean (sd))"        "2333.16 (994.66)"          "1546.20 (753.07)"           "1376.93 (1049.23)"         
"age (mean (sd))"         "49.51 (10.43)"             "41.69 (6.33)"               "53.92 (9.81)"              
"bili (median [IQR])"     "0.90 [0.60, 1.60]"         "3.10 [1.30, 3.50]"          "3.20 [1.40, 7.10]"         
"chol (median [IQR])"     "292.00 [245.25, 360.00]"   "343.50 [311.50, 445.50]"    "339.00 [257.50, 454.00]"   
"albumin (mean (sd))"     "3.59 (0.36)"               "3.49 (0.46)"                "3.36 (0.47)"               
"copper (median [IQR])"   "52.00 [33.50, 77.50]"      "102.00 [69.00, 129.50]"     "111.00 [63.50, 199.25]"    
"alk.phos (median [IQR])" "1107.50 [794.00, 1641.00]" "1345.00 [1028.50, 1777.50]" "1664.00 [1029.00, 2468.00]"
"ast (mean (sd))"         "107.29 (52.79)"            "130.12 (36.95)"             "141.93 (58.38)"            
"trig (median [IQR])"     "104.00 [80.00, 133.50]"    "124.00 [85.75, 145.75]"     "122.00 [91.00, 171.00]"    
"platelet (mean (sd))"    "261.16 (88.61)"            "309.60 (102.65)"            "242.49 (107.88)"           
"protime (median [IQR])"  "10.40 [9.90, 10.80]"       "10.30 [10.00, 10.70]"       "11.00 [10.47, 11.80]"      


### Behaviors on correct data format (stratified with tests)
## Nonormality needs to be specified in the CreateContTable() if tests are employed
contTable3 <- CreateContTable(vars = vars, strata = strata, data = dataFrame,
                              nonnormal = nonNormalVars,
                              test = TRUE)
## The nonnormality specifications are automatically used
contTable3
Stratified by status
                          "0"                         "1"                          "2"                         
"time (mean (sd))"        "2333.16 (994.66)"          "1546.20 (753.07)"           "1376.93 (1049.23)"         
"age (mean (sd))"         "49.51 (10.43)"             "41.69 (6.33)"               "53.92 (9.81)"              
"bili (median [IQR])"     "0.90 [0.60, 1.60]"         "3.10 [1.30, 3.50]"          "3.20 [1.40, 7.10]"         
"chol (median [IQR])"     "292.00 [245.25, 360.00]"   "343.50 [311.50, 445.50]"    "339.00 [257.50, 454.00]"   
"albumin (mean (sd))"     "3.59 (0.36)"               "3.49 (0.46)"                "3.36 (0.47)"               
"copper (median [IQR])"   "52.00 [33.50, 77.50]"      "102.00 [69.00, 129.50]"     "111.00 [63.50, 199.25]"    
"alk.phos (median [IQR])" "1107.50 [794.00, 1641.00]" "1345.00 [1028.50, 1777.50]" "1664.00 [1029.00, 2468.00]"
"ast (mean (sd))"         "107.29 (52.79)"            "130.12 (36.95)"             "141.93 (58.38)"            
"trig (median [IQR])"     "104.00 [80.00, 133.50]"    "124.00 [85.75, 145.75]"     "122.00 [91.00, 171.00]"    
"platelet (mean (sd))"    "261.16 (88.61)"            "309.60 (102.65)"            "242.49 (107.88)"           
"protime (median [IQR])"  "10.40 [9.90, 10.80]"       "10.30 [10.00, 10.70]"       "11.00 [10.47, 11.80]"      
                          "p"    
"time (mean (sd))"        "0.000"
"age (mean (sd))"         "0.000"
"bili (median [IQR])"     "0.000"
"chol (median [IQR])"     "0.004"
"albumin (mean (sd))"     "0.000"
"copper (median [IQR])"   "0.000"
"alk.phos (median [IQR])" "0.000"
"ast (mean (sd))"         "0.000"
"trig (median [IQR])"     "0.006"
"platelet (mean (sd))"    "0.011"
"protime (median [IQR])"  "0.000"
## No quote
print(contTable3, quote = FALSE)
Stratified by status
                        0                         1                          2                          p    
time (mean (sd))        2333.16 (994.66)          1546.20 (753.07)           1376.93 (1049.23)          0.000
age (mean (sd))         49.51 (10.43)             41.69 (6.33)               53.92 (9.81)               0.000
bili (median [IQR])     0.90 [0.60, 1.60]         3.10 [1.30, 3.50]          3.20 [1.40, 7.10]          0.000
chol (median [IQR])     292.00 [245.25, 360.00]   343.50 [311.50, 445.50]    339.00 [257.50, 454.00]    0.004
albumin (mean (sd))     3.59 (0.36)               3.49 (0.46)                3.36 (0.47)                0.000
copper (median [IQR])   52.00 [33.50, 77.50]      102.00 [69.00, 129.50]     111.00 [63.50, 199.25]     0.000
alk.phos (median [IQR]) 1107.50 [794.00, 1641.00] 1345.00 [1028.50, 1777.50] 1664.00 [1029.00, 2468.00] 0.000
ast (mean (sd))         107.29 (52.79)            130.12 (36.95)             141.93 (58.38)             0.000
trig (median [IQR])     104.00 [80.00, 133.50]    124.00 [85.75, 145.75]     122.00 [91.00, 171.00]     0.006
platelet (mean (sd))    261.16 (88.61)            309.60 (102.65)            242.49 (107.88)            0.011
protime (median [IQR])  10.40 [9.90, 10.80]       10.30 [10.00, 10.70]       11.00 [10.47, 11.80]       0.000
## Show the test results
print(contTable3, test = TRUE)
Stratified by status
                          "0"                         "1"                          "2"                         
"time (mean (sd))"        "2333.16 (994.66)"          "1546.20 (753.07)"           "1376.93 (1049.23)"         
"age (mean (sd))"         "49.51 (10.43)"             "41.69 (6.33)"               "53.92 (9.81)"              
"bili (median [IQR])"     "0.90 [0.60, 1.60]"         "3.10 [1.30, 3.50]"          "3.20 [1.40, 7.10]"         
"chol (median [IQR])"     "292.00 [245.25, 360.00]"   "343.50 [311.50, 445.50]"    "339.00 [257.50, 454.00]"   
"albumin (mean (sd))"     "3.59 (0.36)"               "3.49 (0.46)"                "3.36 (0.47)"               
"copper (median [IQR])"   "52.00 [33.50, 77.50]"      "102.00 [69.00, 129.50]"     "111.00 [63.50, 199.25]"    
"alk.phos (median [IQR])" "1107.50 [794.00, 1641.00]" "1345.00 [1028.50, 1777.50]" "1664.00 [1029.00, 2468.00]"
"ast (mean (sd))"         "107.29 (52.79)"            "130.12 (36.95)"             "141.93 (58.38)"            
"trig (median [IQR])"     "104.00 [80.00, 133.50]"    "124.00 [85.75, 145.75]"     "122.00 [91.00, 171.00]"    
"platelet (mean (sd))"    "261.16 (88.61)"            "309.60 (102.65)"            "242.49 (107.88)"           
"protime (median [IQR])"  "10.40 [9.90, 10.80]"       "10.30 [10.00, 10.70]"       "11.00 [10.47, 11.80]"      
                          "p"    
"time (mean (sd))"        "0.000"
"age (mean (sd))"         "0.000"
"bili (median [IQR])"     "0.000"
"chol (median [IQR])"     "0.004"
"albumin (mean (sd))"     "0.000"
"copper (median [IQR])"   "0.000"
"alk.phos (median [IQR])" "0.000"
"ast (mean (sd))"         "0.000"
"trig (median [IQR])"     "0.006"
"platelet (mean (sd))"    "0.011"
"protime (median [IQR])"  "0.000"
## Nonnormality cannot be overriden when tests are requested.
print(contTable3, test = TRUE, nonnormal = nonNormalVars[1])
Warning: The nonnormality specifications from the object are used when tests are requested.
Stratified by status
                          "0"                         "1"                          "2"                         
"time (mean (sd))"        "2333.16 (994.66)"          "1546.20 (753.07)"           "1376.93 (1049.23)"         
"age (mean (sd))"         "49.51 (10.43)"             "41.69 (6.33)"               "53.92 (9.81)"              
"bili (median [IQR])"     "0.90 [0.60, 1.60]"         "3.10 [1.30, 3.50]"          "3.20 [1.40, 7.10]"         
"chol (median [IQR])"     "292.00 [245.25, 360.00]"   "343.50 [311.50, 445.50]"    "339.00 [257.50, 454.00]"   
"albumin (mean (sd))"     "3.59 (0.36)"               "3.49 (0.46)"                "3.36 (0.47)"               
"copper (median [IQR])"   "52.00 [33.50, 77.50]"      "102.00 [69.00, 129.50]"     "111.00 [63.50, 199.25]"    
"alk.phos (median [IQR])" "1107.50 [794.00, 1641.00]" "1345.00 [1028.50, 1777.50]" "1664.00 [1029.00, 2468.00]"
"ast (mean (sd))"         "107.29 (52.79)"            "130.12 (36.95)"             "141.93 (58.38)"            
"trig (median [IQR])"     "104.00 [80.00, 133.50]"    "124.00 [85.75, 145.75]"     "122.00 [91.00, 171.00]"    
"platelet (mean (sd))"    "261.16 (88.61)"            "309.60 (102.65)"            "242.49 (107.88)"           
"protime (median [IQR])"  "10.40 [9.90, 10.80]"       "10.30 [10.00, 10.70]"       "11.00 [10.47, 11.80]"      
                          "p"    
"time (mean (sd))"        "0.000"
"age (mean (sd))"         "0.000"
"bili (median [IQR])"     "0.000"
"chol (median [IQR])"     "0.004"
"albumin (mean (sd))"     "0.000"
"copper (median [IQR])"   "0.000"
"alk.phos (median [IQR])" "0.000"
"ast (mean (sd))"         "0.000"
"trig (median [IQR])"     "0.006"
"platelet (mean (sd))"    "0.011"
"protime (median [IQR])"  "0.000"
## Check attributes
attr(contTable3, "nonnormal")
 [1] 1 1 2 2 1 2 2 1 2 1 2
attr(contTable3, "pValues")
 [1] 2.923e-13 2.126e-11 4.088e-26 3.588e-03 8.845e-06 2.935e-14 1.139e-05 1.090e-05 5.535e-03 1.085e-02 1.987e-15


### Multivariable stratification
## Two variables
contTable4 <- CreateContTable(vars = vars, strata = strataTwoVars, data = dataFrame)
summary(contTable4)
status: 0
sex: m
          n miss   mean      sd median    q25    q75    min     max   skew  kurt
time     17    0 2462.2 1217.33 1899.0 1419.0 3445.0 1129.0  4459.0  0.581 -1.28
age      17    0   55.7   10.65   52.9   49.1   61.0   41.0    78.4  0.818 -0.03
bili     17    0    2.6    2.62    1.7    0.9    3.0    0.6     8.6  1.345  0.41
chol     17    6  367.9  234.99  252.0  242.5  403.0  216.0  1000.0  2.304  5.61
albumin  17    0    3.5    0.43    3.6    3.1    3.7    2.4     4.1 -0.937  1.18
copper   17    6  128.8  113.07   84.0   57.0  168.0   25.0   380.0  1.380  1.25
alk.phos 17    6 2482.3 3052.94 1098.0  913.0 2311.0  601.0 10396.8  2.175  4.50
ast      17    6  112.3   50.94  108.5   62.8  142.6   56.8   193.0  0.446 -1.14
trig     17    6  131.8   33.73  128.0  112.5  153.5   83.0   188.0  0.274 -0.75
platelet 17    1  213.4   72.17  212.5  170.5  267.0   92.0   336.0 -0.066 -0.72
protime  17    0   10.9    0.80   10.9   10.6   11.2    9.8    13.0  1.077  1.92
--------------------------------------------------------------------------------------- 
status: 1
sex: m
         n miss   mean     sd median   q25    q75   min    max  skew kurt
time     3    0 1147.7 785.78  877.0 705.0 1455.0 533.0 2033.0  1.37  NaN
age      3    0   42.2  11.97   35.4  35.3   45.7  35.2   56.0  1.73  NaN
bili     3    0    2.4   1.15    2.4   1.8    3.0   1.2    3.5 -0.13  NaN
chol     3    0  415.3 201.32  325.0 300.0  485.5 275.0  646.0  1.61  NaN
albumin  3    0    3.7   0.28    3.8   3.6    3.9   3.4    4.0 -1.21  NaN
copper   3    0  215.3 198.03  102.0 101.0  273.0 100.0  444.0  1.73  NaN
alk.phos 3    0  921.0 196.50  855.0 810.5  998.5 766.0 1142.0  1.34  NaN
ast      3    0  110.7  30.99  127.0 101.0  128.6  75.0  130.2 -1.71  NaN
trig     3    0  165.0  64.58  194.0 142.5  202.0  91.0  210.0 -1.61  NaN
platelet 3    0  289.0  65.18  306.0 261.5  325.0 217.0  344.0 -1.09  NaN
protime  3    0   10.7   0.51   10.6  10.4   10.9  10.3   11.3  1.09  NaN
--------------------------------------------------------------------------------------- 
status: 2
sex: m
          n miss   mean     sd median   q25    q75   min     max   skew  kurt
time     24    0 1584.9 1120.5 1257.0 867.2 1906.0 140.0  4191.0  1.112  0.55
age      24    0   57.4   10.3   57.6  51.1   67.5  33.5    71.9 -0.403 -0.57
bili     24    0    3.1    2.2    2.3   1.6    3.6   0.8     9.5  1.586  1.97
chol     24    3  352.0  149.2  331.0 247.0  426.0 151.0   660.0  0.516 -0.44
albumin  24    0    3.6    0.5    3.7   3.3    3.9   2.3     4.3 -0.947  0.81
copper   24    2  158.7   78.6  165.0  96.8  215.2  13.0   290.0 -0.113 -0.99
alk.phos 24    2 2189.0 2243.2 1452.0 973.8 2387.0 516.0 10165.0  2.551  7.32
ast      24    2  128.4   47.4  124.8  88.5  170.5  46.5   221.9  0.313 -0.74
trig     24    3  129.8   59.0  122.0  91.0  155.0  49.0   242.0  0.587 -0.69
platelet 24    0  235.7   93.9  225.5 154.8  328.0  70.0   394.0  0.012 -1.17
protime  24    0   11.0    1.1   10.9  10.2   11.3   9.7    14.1  1.391  2.25
--------------------------------------------------------------------------------------- 
status: 0
sex: f
           n miss   mean      sd median    q25    q75   min     max   skew  kurt
time     215    0 2323.0  977.61 2195.0 1469.0 2917.5 691.0  4795.0  0.582 -0.53
age      215    0   49.0   10.28   49.0   40.9   56.6  26.3    75.0  0.034 -0.78
bili     215    0    1.5    1.83    0.9    0.6    1.4   0.3    13.6  3.915 18.58
chol     215   74  323.3  159.87  294.0  246.0  360.0 120.0  1480.0  4.679 29.79
albumin  215    0    3.6    0.35    3.6    3.4    3.8   2.5     4.6 -0.100  0.23
copper   215   59   62.2   48.66   51.5   33.0   75.2   4.0   412.0  3.148 17.31
alk.phos 215   58 1514.8 1481.83 1110.0  794.0 1637.0 289.0 11046.6  3.748 16.82
ast      215   58  106.9   53.06   93.0   72.8  128.7  26.4   457.2  2.496 11.92
trig     215   75  110.2   48.98  101.0   76.8  133.0  44.0   382.0  1.821  6.26
platelet 215    4  264.8   88.83  256.0  209.0  317.5  79.0   539.0  0.402  0.19
protime  215    1   10.4    0.92   10.3    9.9   10.7   9.0    18.0  4.532 32.79
--------------------------------------------------------------------------------------- 
status: 1
sex: f
          n miss   mean     sd median    q25    q75   min    max    skew   kurt
time     22    0 1600.5 750.70 1441.0 1033.2 2260.5 617.0 3092.0  0.6083 -0.732
age      22    0   41.6   5.67   41.1   37.3   47.0  33.0   52.0  0.1106 -1.025
bili     22    0    3.7   3.80    3.2    1.4    4.2   0.5   18.0  2.7703  9.541
chol     22    7  444.3 361.62  348.0  313.0  441.0 201.0 1712.0  3.4838 12.875
albumin  22    0    3.5   0.47    3.5    3.1    3.8   2.3    4.2 -0.3997  0.202
copper   22    6  106.9  69.34   98.0   58.5  126.2  32.0  308.0  1.6840  3.927
alk.phos 22    6 1650.4 864.55 1407.0 1131.8 1932.0 637.0 3681.0  1.2790  1.262
ast      22    6  133.8  37.69  124.0  114.3  153.5  54.2  205.0  0.0088  0.355
trig     22    7  127.7  72.11  118.0   81.0  142.0  33.0  322.0  1.6287  3.156
platelet 22    0  312.4 107.56  301.0  252.0  384.0  76.0  517.0 -0.1674  0.053
protime  22    0   10.3   0.53   10.1   10.0   10.6   9.6   11.4  0.6395 -0.557
--------------------------------------------------------------------------------------- 
status: 2
sex: f
           n miss   mean      sd median    q25    q75   min     max   skew  kurt
time     137    0 1340.5 1036.28 1037.0  549.0 2071.0  41.0  3853.0  0.783 -0.37
age      137    0   53.3    9.63   53.0   46.4   60.7  30.9    76.7  0.032 -0.46
bili     137    0    6.0    6.16    3.4    1.4    7.3   0.3    28.0  1.501  1.61
chol     137   44  430.1  294.85  344.0  260.0  468.0 127.0  1775.0  2.454  6.88
albumin  137    0    3.3    0.46    3.4    3.1    3.6   2.0     4.5 -0.271  0.35
copper   137   35  130.4  101.92  102.5   58.0  172.8  14.0   588.0  2.102  6.35
alk.phos 137   34 2680.9 2762.92 1787.0 1057.0 2562.0 559.0 13862.4  2.258  4.81
ast      137   34  144.8   60.27  136.7  102.9  177.5  28.4   338.0  0.809  0.93
trig     137   45  142.9   83.28  121.0   91.8  171.2  50.0   598.0  2.581 10.13
platelet 137    6  243.7  110.52  224.0  160.0  304.0  62.0   721.0  1.106  1.97
protime  137    1   11.2    1.04   11.1   10.6   11.8   9.0    15.2  0.695  0.84
print(contTable4)
Stratified by status:sex
                       "0:m"               "1:m"              "2:m"               "0:f"              
"time (mean (sd))"     "2462.18 (1217.33)" "1147.67 (785.78)" "1584.88 (1120.46)" "2322.95 (977.61)" 
"age (mean (sd))"      "55.69 (10.65)"     "42.16 (11.97)"    "57.42 (10.34)"     "49.02 (10.28)"    
"bili (mean (sd))"     "2.63 (2.62)"       "2.37 (1.15)"      "3.10 (2.25)"       "1.49 (1.83)"      
"chol (mean (sd))"     "367.91 (234.99)"   "415.33 (201.32)"  "352.05 (149.18)"   "323.31 (159.87)"  
"albumin (mean (sd))"  "3.47 (0.43)"       "3.75 (0.28)"      "3.55 (0.50)"       "3.60 (0.35)"      
"copper (mean (sd))"   "128.82 (113.07)"   "215.33 (198.03)"  "158.68 (78.57)"    "62.22 (48.66)"    
"alk.phos (mean (sd))" "2482.25 (3052.94)" "921.00 (196.50)"  "2189.02 (2243.18)" "1514.78 (1481.83)"
"ast (mean (sd))"      "112.28 (50.94)"    "110.73 (30.99)"   "128.38 (47.39)"    "106.94 (53.06)"   
"trig (mean (sd))"     "131.82 (33.73)"    "165.00 (64.58)"   "129.76 (58.95)"    "110.21 (48.98)"   
"platelet (mean (sd))" "213.44 (72.17)"    "289.00 (65.18)"   "235.71 (93.92)"    "264.78 (88.83)"   
"protime (mean (sd))"  "10.94 (0.80)"      "10.73 (0.51)"     "10.97 (1.07)"      "10.42 (0.92)"     
                       "1:f"              "2:f"              
"time (mean (sd))"     "1600.55 (750.70)" "1340.50 (1036.28)"
"age (mean (sd))"      "41.63 (5.67)"     "53.31 (9.63)"     
"bili (mean (sd))"     "3.72 (3.80)"      "5.97 (6.16)"      
"chol (mean (sd))"     "444.33 (361.62)"  "430.14 (294.85)"  
"albumin (mean (sd))"  "3.45 (0.47)"      "3.33 (0.46)"      
"copper (mean (sd))"   "106.88 (69.34)"   "130.39 (101.92)"  
"alk.phos (mean (sd))" "1650.38 (864.55)" "2680.93 (2762.92)"
"ast (mean (sd))"      "133.75 (37.69)"   "144.82 (60.27)"   
"trig (mean (sd))"     "127.73 (72.11)"   "142.93 (83.28)"   
"platelet (mean (sd))" "312.41 (107.56)"  "243.73 (110.52)"  
"protime (mean (sd))"  "10.31 (0.53)"     "11.23 (1.04)"     
## Three variables
contTable5 <- CreateContTable(vars = vars, strata = strataThreeVars, data = dataFrame)
summary(contTable5)
sex: m
ascites: 0
hepato: 0
          n miss   mean      sd median    q25    q75   min     max  skew  kurt
time     15    0 2412.3 1422.19 2386.0 1186.0 3607.5 140.0  4459.0  0.12 -1.29
age      15    0   51.1   12.11   49.1   44.2   60.8  33.5    70.1  0.19 -1.02
bili     15    0    2.2    1.31    1.9    1.6    2.5   0.6     6.0  1.71  4.35
chol     15    0  360.3  164.98  317.0  250.5  438.0 168.0   660.0  0.87 -0.46
albumin  15    0    3.7    0.44    3.8    3.5    4.0   2.6     4.3 -1.27  2.40
copper   15    0  166.3  107.94  158.0   98.0  213.5  13.0   444.0  1.02  2.05
alk.phos 15    0 2839.4 3424.63 1056.0  740.0 3470.7 516.0 10396.8  1.61  1.36
ast      15    0  125.0   43.62  127.0  102.3  141.1  56.8   206.4  0.26 -0.32
trig     15    0  132.2   55.55  118.0   85.5  183.0  55.0   219.0  0.19 -1.42
platelet 15    1  246.6   88.70  213.5  180.8  329.2 108.0   394.0  0.25 -1.17
protime  15    0   11.1    1.19   10.6   10.2   11.3   9.7    14.1  1.47  1.96
--------------------------------------------------------------------------------------- 
sex: f
ascites: 0
hepato: 0
           n miss   mean      sd median    q25    q75   min     max  skew  kurt
time     132    0 2375.2 1020.62 2361.0 1475.0 3089.0 198.0  4556.0 0.168 -0.73
age      132    0   48.4   10.22   48.0   40.7   56.1  28.9    75.0 0.271 -0.55
bili     132    0    1.6    2.40    0.9    0.6    1.4   0.3    22.5 5.827 45.14
chol     132   15  337.0  158.86  296.0  242.0  390.0 120.0  1276.0 2.853 12.23
albumin  132    0    3.7    0.34    3.7    3.4    3.9   2.8     4.6 0.075  0.20
copper   132    1   65.6   56.66   52.0   32.0   78.5   4.0   464.0 3.395 18.96
alk.phos 132    0 1634.5 1732.65 1177.5  793.2 1689.8 369.0 12258.8 3.998 18.79
ast      132    0  111.4   52.10   99.1   73.4  136.2  28.4   328.6 1.278  2.10
trig     132   15  110.7   52.29  100.0   74.0  135.0  44.0   382.0 1.875  5.96
platelet 132    0  287.4   87.74  278.0  226.5  336.5  71.0   514.0 0.267 -0.17
protime  132    0   10.4    0.89   10.3    9.9   10.7   9.0    17.1 3.791 24.98
--------------------------------------------------------------------------------------- 
sex: m
ascites: 1
hepato: 0
NULL
--------------------------------------------------------------------------------------- 
sex: f
ascites: 1
hepato: 0
         n miss   mean      sd median   q25    q75   min    max  skew  kurt
time     5    0 1130.2 1382.64  388.0  51.0 2081.0  41.0 3090.0  0.86 -1.63
age      5    0   64.6   10.52   65.9  60.7   70.6  49.0   76.7 -0.66  0.39
bili     5    0    7.1    7.65    2.5   1.4   12.6   1.3   17.9  0.86 -1.80
chol     5    0  253.0   86.81  206.0 200.0  302.0 175.0  382.0  0.98 -0.68
albumin  5    0    2.9    0.54    2.8   2.7    3.1   2.1    3.5 -0.20  0.49
copper   5    0  112.4   72.72  108.0  58.0  140.0  36.0  220.0  0.71 -0.07
alk.phos 5    0 1257.6  416.42 1516.0 918.0 1523.0 705.0 1626.0 -0.70 -2.41
ast      5    0  170.8  118.75  147.2  86.8  238.7  43.4  338.0  0.57 -0.98
trig     5    1  138.5   67.34  127.5 101.5  164.5  70.0  229.0  0.88  1.02
platelet 5    0  192.8  116.54  145.0 126.0  302.0  62.0  329.0  0.31 -2.55
protime  5    0   12.0    1.16   12.2  11.5   12.9  10.3   13.2 -0.76 -0.29
--------------------------------------------------------------------------------------- 
sex: m
ascites: 0
hepato: 1
          n miss   mean      sd median    q25    q75   min    max  skew   kurt
time     18    0 1702.8 1198.55 1299.5  821.8 2088.5 533.0 4191.0  1.14  0.053
age      18    0   58.6    9.18   58.3   51.3   66.6  44.5   74.5  0.22 -1.195
bili     18    0    3.4    2.61    2.3    1.2    5.2   0.6    8.6  0.78 -0.760
chol     18    0  382.6  194.31  361.0  251.2  426.8 178.0 1000.0  1.98  5.357
albumin  18    0    3.6    0.34    3.7    3.4    3.9   3.0    4.0 -0.61 -0.901
copper   18    0  142.4   82.94  114.5   81.8  197.0  25.0  290.0  0.48 -1.049
alk.phos 18    0 1822.9 1260.72 1222.5 1028.8 2387.0 681.0 5719.0  1.92  4.468
ast      18    0  124.5   49.03  118.6   84.3  168.9  57.4  221.9  0.48 -0.872
trig     18    0  138.0   49.34  127.0   95.0  153.8  83.0  242.0  1.00  0.086
platelet 18    0  240.9   86.30  250.0  189.5  298.8  70.0  360.0 -0.47 -0.738
protime  18    0   10.8    0.63   10.9   10.4   11.3   9.8   12.0 -0.25 -0.676
--------------------------------------------------------------------------------------- 
sex: f
ascites: 0
hepato: 1
           n miss   mean      sd median    q25    q75   min     max  skew  kurt
time     123    0 1838.3 1007.36 1741.0 1083.5 2391.0  71.0  4523.0  0.71  0.24
age      123    0   48.7    9.71   49.3   41.4   55.6  26.3    69.3 -0.06 -0.69
bili     123    0    4.0    4.84    2.1    1.0    5.0   0.4    28.0  2.64  8.22
chol     123   10  411.1  298.67  322.0  260.0  408.0 149.0  1775.0  3.09  9.84
albumin  123    0    3.4    0.39    3.5    3.2    3.6   2.0     4.2 -0.62  1.57
copper   123    0  104.1   85.01   76.0   50.0  125.5  11.0   588.0  2.47  9.18
alk.phos 123    0 2259.9 2445.16 1428.0  958.0 2280.0 289.0 13862.4  2.68  7.38
ast      123    0  130.5   60.16  120.9   90.5  158.9  26.4   457.2  1.76  6.54
trig     123   11  127.5   60.14  108.5   89.5  149.8  33.0   322.0  1.40  2.04
platelet 123    3  253.1   97.99  239.0  184.5  306.0  79.0   563.0  0.71  0.72
protime  123    0   10.8    0.96   10.6   10.0   11.5   9.2    13.3  0.65 -0.34
--------------------------------------------------------------------------------------- 
sex: m
ascites: 1
hepato: 1
         n miss   mean     sd median   q25    q75   min    max   skew kurt
time     3    0 1057.7 799.01 1217.0 704.0 1491.0 191.0 1765.0 -0.862  NaN
age      3    0   67.5  11.11   67.9  62.1   73.2  56.2   78.4 -0.155  NaN
bili     3    0    3.1   3.50    1.3   1.1    4.2   0.8    7.1  1.692  NaN
chol     3    1  197.0  65.05  197.0 174.0  220.0 151.0  243.0    NaN  NaN
albumin  3    0    2.8   0.45    3.0   2.6    3.1   2.3    3.1 -1.708  NaN
copper   3    0  165.3 186.51   73.0  58.0  226.5  43.0  380.0  1.682  NaN
alk.phos 3    0  941.0 195.41  983.0 855.5 1047.5 728.0 1112.0 -0.922  NaN
ast      3    0   91.9  58.65   71.0  58.8  114.5  46.5  158.1  1.398  NaN
trig     3    1  101.5  74.25  101.5  75.2  127.8  49.0  154.0    NaN  NaN
platelet 3    0  155.3  58.00  156.0 126.5  184.5  97.0  213.0 -0.052  NaN
protime  3    0   11.8   1.22   11.2  11.1   12.2  11.0   13.2  1.680  NaN
--------------------------------------------------------------------------------------- 
sex: f
ascites: 1
hepato: 1
          n miss mean      sd median    q25    q75   min    max  skew  kurt
time     16    0  668  805.64    341  206.8  915.8  77.0 3222.0 2.390  6.58
age      16    0   55    8.91     55   48.3   61.4  39.2   70.9 0.048 -0.53
bili     16    0   11    7.80     11    4.0   17.2   1.2   24.5 0.178 -1.43
chol     16    2  364  247.72    278  222.0  382.2 175.0 1092.0 2.299  5.70
albumin  16    0    3    0.45      3    2.6    3.3   2.3    3.9 0.261 -0.61
copper   16    1  184  125.71    182  130.5  215.0  16.0  558.0 1.797  5.47
alk.phos 16    0 2522 2043.39   1776 1070.2 3708.1 559.0 6931.2 1.158  0.10
ast      16    0  140   43.22    136  105.5  176.5  73.5  227.0 0.288 -0.65
trig     16    2  194  145.19    162  118.0  188.0  68.0  598.0 2.184  4.55
platelet 16    0  197   94.71    178  138.5  224.0  80.0  401.0 1.194  0.97
protime  16    0   12    1.09     12   11.1   12.0  10.6   15.2 2.201  6.15
print(contTable5)
Stratified by sex:ascites:hepato
                       "m:0:0"             "f:0:0"             "m:1:0" "f:1:0"             "m:0:1"            
"time (mean (sd))"     "2412.33 (1422.19)" "2375.19 (1020.62)" "empty" "1130.20 (1382.64)" "1702.78 (1198.55)"
"age (mean (sd))"      "51.07 (12.11)"     "48.41 (10.22)"     "empty" "64.57 (10.52)"     "58.60 (9.18)"     
"bili (mean (sd))"     "2.24 (1.31)"       "1.61 (2.40)"       "empty" "7.14 (7.65)"       "3.37 (2.61)"      
"chol (mean (sd))"     "360.33 (164.98)"   "336.99 (158.86)"   "empty" "253.00 (86.81)"    "382.61 (194.31)"  
"albumin (mean (sd))"  "3.72 (0.44)"       "3.67 (0.34)"       "empty" "2.85 (0.54)"       "3.59 (0.34)"      
"copper (mean (sd))"   "166.27 (107.94)"   "65.56 (56.66)"     "empty" "112.40 (72.72)"    "142.44 (82.94)"   
"alk.phos (mean (sd))" "2839.41 (3424.63)" "1634.45 (1732.65)" "empty" "1257.60 (416.42)"  "1822.89 (1260.72)"
"ast (mean (sd))"      "125.02 (43.62)"    "111.35 (52.10)"    "empty" "170.83 (118.75)"   "124.49 (49.03)"   
"trig (mean (sd))"     "132.20 (55.55)"    "110.70 (52.29)"    "empty" "138.50 (67.34)"    "138.00 (49.34)"   
"platelet (mean (sd))" "246.57 (88.70)"    "287.36 (87.74)"    "empty" "192.80 (116.54)"   "240.94 (86.30)"   
"protime (mean (sd))"  "11.07 (1.19)"      "10.42 (0.89)"      "empty" "12.02 (1.16)"      "10.82 (0.63)"     
                       "f:0:1"             "m:1:1"            "f:1:1"            
"time (mean (sd))"     "1838.28 (1007.36)" "1057.67 (799.01)" "668.25 (805.64)"  
"age (mean (sd))"      "48.71 (9.71)"      "67.52 (11.11)"    "54.92 (8.91)"     
"bili (mean (sd))"     "3.97 (4.84)"       "3.07 (3.50)"      "10.97 (7.80)"     
"chol (mean (sd))"     "411.14 (298.67)"   "197.00 (65.05)"   "364.50 (247.72)"  
"albumin (mean (sd))"  "3.43 (0.39)"       "2.79 (0.45)"      "3.02 (0.45)"      
"copper (mean (sd))"   "104.11 (85.01)"    "165.33 (186.51)"  "184.13 (125.71)"  
"alk.phos (mean (sd))" "2259.90 (2445.16)" "941.00 (195.41)"  "2522.41 (2043.39)"
"ast (mean (sd))"      "130.47 (60.16)"    "91.87 (58.65)"    "140.36 (43.22)"   
"trig (mean (sd))"     "127.48 (60.14)"    "101.50 (74.25)"   "193.71 (145.19)"  
"platelet (mean (sd))" "253.06 (97.99)"    "155.33 (58.00)"   "197.38 (94.71)"   
"protime (mean (sd))"  "10.79 (0.96)"      "11.80 (1.22)"     "11.79 (1.09)"     



### Behaviors on wrong data format
## Not a data frame
contTable9 <- CreateContTable(vars = vars, strata = strata, data = "dataFrame")
Error: The data argument needs to be a data frame (no quote).
## Invalid variables
contTable9 <- CreateContTable(vars = c(vars,"wrong_var1","wrong_var2"), strata = strata, data = dataFrame)
Warning: The data frame does not have wrong_var1 wrong_var2 . Dropping them.
contTable9
Stratified by status
                       "0"                 "1"                "2"                
"time (mean (sd))"     "2333.16 (994.66)"  "1546.20 (753.07)" "1376.93 (1049.23)"
"age (mean (sd))"      "49.51 (10.43)"     "41.69 (6.33)"     "53.92 (9.81)"     
"bili (mean (sd))"     "1.58 (1.91)"       "3.56 (3.60)"      "5.54 (5.84)"      
"chol (mean (sd))"     "326.54 (165.80)"   "439.50 (335.54)"  "415.75 (275.03)"  
"albumin (mean (sd))"  "3.59 (0.36)"       "3.49 (0.46)"      "3.36 (0.47)"      
"copper (mean (sd))"   "66.61 (57.05)"     "124.00 (100.08)"  "135.41 (98.50)"   
"alk.phos (mean (sd))" "1578.13 (1633.07)" "1535.21 (837.75)" "2594.35 (2677.11)"
"ast (mean (sd))"      "107.29 (52.79)"    "130.12 (36.95)"   "141.93 (58.38)"   
"trig (mean (sd))"     "111.79 (48.28)"    "133.94 (70.55)"   "140.49 (79.26)"   
"platelet (mean (sd))" "261.16 (88.61)"    "309.60 (102.65)"  "242.49 (107.88)"  
"protime (mean (sd))"  "10.45 (0.92)"      "10.36 (0.54)"     "11.19 (1.05)"     
## Invalid variables only
contTable9 <- CreateContTable(vars = c("wrong_var1","wrong_var2"), strata = strata, data = dataFrame)
Warning: The data frame does not have wrong_var1 wrong_var2 . Dropping them.
Error: No valid variables.
## Duplication
contTable9 <- CreateContTable(vars = c(vars,"time","age"), strata = strata, data = dataFrame)
## No stratifying variables
contTable9 <- CreateContTable(vars = vars, strata = "status3", data = dataFrame)
Error: None of the stratifying variables are present in the data frame
## Only mean in the object
contTable9 <- CreateContTable(vars = vars, strata = strata, data = dataFrame, func.names = "mean")
contTable9
status: 0
           mean
time     2333.2
age        49.5
bili        1.6
chol      326.5
albumin     3.6
copper     66.6
alk.phos 1578.1
ast       107.3
trig      111.8
platelet  261.2
protime    10.5
--------------------------------------------------------------------------------------- 
status: 1
           mean
time     1546.2
age        41.7
bili        3.6
chol      439.5
albumin     3.5
copper    124.0
alk.phos 1535.2
ast       130.1
trig      133.9
platelet  309.6
protime    10.4
--------------------------------------------------------------------------------------- 
status: 2
           mean
time     1376.9
age        53.9
bili        5.5
chol      415.8
albumin     3.4
copper    135.4
alk.phos 2594.4
ast       141.9
trig      140.5
platelet  242.5
protime    11.2
Error: The object does not contain all necessary statistics. Use summary() method.
## Very small strata
contTable9 <- CreateContTable(vars = vars, strata = smallStrata, data = smallDataFrame)
summary(contTable9)
edema: 0
         n miss   mean sd median    q25    q75    min    max skew kurt
time     1    0 4500.0 NA 4500.0 4500.0 4500.0 4500.0 4500.0  NaN  NaN
age      1    0   56.4 NA   56.4   56.4   56.4   56.4   56.4  NaN  NaN
bili     1    0    1.1 NA    1.1    1.1    1.1    1.1    1.1  NaN  NaN
chol     1    0  302.0 NA  302.0  302.0  302.0  302.0  302.0  NaN  NaN
albumin  1    0    4.1 NA    4.1    4.1    4.1    4.1    4.1  NaN  NaN
copper   1    0   54.0 NA   54.0   54.0   54.0   54.0   54.0  NaN  NaN
alk.phos 1    0 7394.8 NA 7394.8 7394.8 7394.8 7394.8 7394.8  NaN  NaN
ast      1    0  113.5 NA  113.5  113.5  113.5  113.5  113.5  NaN  NaN
trig     1    0   88.0 NA   88.0   88.0   88.0   88.0   88.0  NaN  NaN
platelet 1    0  221.0 NA  221.0  221.0  221.0  221.0  221.0  NaN  NaN
protime  1    0   10.6 NA   10.6   10.6   10.6   10.6   10.6  NaN  NaN
--------------------------------------------------------------------------------------- 
edema: 0.5
         n miss   mean      sd median    q25    q75    min    max skew kurt
time     2    0 1468.5  645.59 1468.5 1240.2 1696.8 1012.0 1925.0  NaN  NaN
age      2    0   62.4   10.84   62.4   58.6   66.2   54.7   70.1  NaN  NaN
bili     2    0    1.6    0.28    1.6    1.5    1.7    1.4    1.8  NaN  NaN
chol     2    0  210.0   48.08  210.0  193.0  227.0  176.0  244.0  NaN  NaN
albumin  2    0    3.0    0.66    3.0    2.8    3.2    2.5    3.5  NaN  NaN
copper   2    0  137.0  103.24  137.0  100.5  173.5   64.0  210.0  NaN  NaN
alk.phos 2    0 3318.9 3963.90 3318.9 1917.5 4720.4  516.0 6121.8  NaN  NaN
ast      2    0   78.4   25.08   78.4   69.5   87.2   60.6   96.1  NaN  NaN
trig     2    0   73.5   26.16   73.5   64.2   82.8   55.0   92.0  NaN  NaN
platelet 2    0  167.0   22.63  167.0  159.0  175.0  151.0  183.0  NaN  NaN
protime  2    0   11.2    1.20   11.2   10.7   11.6   10.3   12.0  NaN  NaN
--------------------------------------------------------------------------------------- 
edema: 1
         n miss   mean     sd median   q25    q75   min    max  skew kurt
time     3    0  556.0 598.45  400.0 225.5  808.5  51.0 1217.0  1.09  NaN
age      3    0   61.8   7.65   58.8  57.5   64.7  56.2   70.6  1.52  NaN
bili     3    0    9.3   7.42   12.6   6.7   13.6   0.8   14.5 -1.61  NaN
chol     3    1  230.5  43.13  230.5 215.2  245.8 200.0  261.0   NaN  NaN
albumin  3    0    2.5   0.24    2.6   2.4    2.7   2.3    2.7 -1.10  NaN
copper   3    0  113.0  61.15  140.0  91.5  148.0  43.0  156.0 -1.60  NaN
alk.phos 3    0 1121.3 525.39  918.0 823.0 1318.0 728.0 1718.0  1.48  NaN
ast      3    0  118.7  41.60  137.9 104.5  142.6  71.0  147.2 -1.64  NaN
trig     3    1  157.5  20.51  157.5 150.2  164.8 143.0  172.0   NaN  NaN
platelet 3    0  216.0  76.39  190.0 173.0  246.0 156.0  302.0  1.35  NaN
protime  3    0   11.6   0.60   11.5  11.2   11.8  11.0   12.2  0.49  NaN
contTable9
Stratified by edema
                       "0"            "0.5"               "1"               
"time (mean (sd))"     "4500.00 (NA)" "1468.50 (645.59)"  "556.00 (598.45)" 
"age (mean (sd))"      "56.45 (NA)"   "62.41 (10.84)"     "61.85 (7.65)"    
"bili (mean (sd))"     "1.10 (NA)"    "1.60 (0.28)"       "9.30 (7.42)"     
"chol (mean (sd))"     "302.00 (NA)"  "210.00 (48.08)"    "230.50 (43.13)"  
"albumin (mean (sd))"  "4.14 (NA)"    "3.01 (0.66)"       "2.54 (0.24)"     
"copper (mean (sd))"   "54.00 (NA)"   "137.00 (103.24)"   "113.00 (61.15)"  
"alk.phos (mean (sd))" "7394.80 (NA)" "3318.90 (3963.90)" "1121.33 (525.39)"
"ast (mean (sd))"      "113.52 (NA)"  "78.36 (25.08)"     "118.73 (41.60)"  
"trig (mean (sd))"     "88.00 (NA)"   "73.50 (26.16)"     "157.50 (20.51)"  
"platelet (mean (sd))" "221.00 (NA)"  "167.00 (22.63)"    "216.00 (76.39)"  
"protime (mean (sd))"  "10.60 (NA)"   "11.15 (1.20)"      "11.57 (0.60)"    

Show functions

print(CreateContTable)
function (vars, strata, data, func.names = c("n", "miss", "mean", 
    "sd", "median", "q25", "q75", "min", "max", "skew", "kurt"), 
    func.additional, nonnormal = FALSE, test = FALSE, testNormal = oneway.test, 
    testNonNormal = kruskal.test) 
{
    require(e1071)
    if (is.data.frame(data) == FALSE) {
        stop("The data argument needs to be a data frame (no quote).")
    }
    varsNotInData <- setdiff(vars, names(data))
    if (length(varsNotInData) > 0) {
        warning("The data frame does not have ", paste0(varsNotInData, 
            sep = " "), ". Dropping them.")
        vars <- intersect(vars, names(data))
    }
    if (length(vars) < 1) {
        stop("No valid variables.")
    }
    dat <- data[c(vars)]
    if (missing(strata)) {
        strata <- rep("Overall", dim(dat)[1])
        test <- FALSE
    }
    else {
        presenceOfStrata <- strata %in% names(data)
        strata <- strata[presenceOfStrata]
        if (length(strata) == 0) {
            stop("None of the stratifying variables are present in the data frame")
        }
        strata <- data[c(strata)]
    }
    if (any(!sapply(dat, is.numeric))) {
        dat <- dat[sapply(dat, is.numeric)]
        warning("Non-numeric variables dropped")
    }
    if (!all(sapply(dat, is.numeric))) {
        stop("Can only be run on numeric variables")
    }
    if (!is.logical(nonnormal) & !is.character(nonnormal)) {
        stop("nonnormal argument has to be FALSE/TRUE or character.")
    }
    if (is.logical(nonnormal)) {
        if (length(nonnormal) != 1) {
            stop("nonormal has to be a logical vector of length 1")
        }
        nonnormal <- rep(nonnormal, ncol(dat))
    }
    if (is.character(nonnormal)) {
        nonnormal <- vars %in% nonnormal
    }
    nonnormal <- as.numeric(nonnormal) + 1
    listOfTests <- list(testNormal, testNonNormal)
    listOfTests <- listOfTests[nonnormal]
    func.indexes <- pmatch(func.names, c("n", "miss", "mean", 
        "sd", "median", "q25", "q75", "min", "max", "skew", "kurt"))
    func.indexes <- func.indexes[!is.na(func.indexes)]
    tryCatch.W.E <- function(expr) {
        W <- NULL
        w.handler <- function(w) {
            W <<- w
            invokeRestart("muffleWarning")
        }
        list(value = withCallingHandlers(tryCatch(expr, error = function(e) e), 
            warning = w.handler), warning = W)
    }
    sasSkewness <- function(x) {
        out <- tryCatch.W.E(skewness(x, na.rm = TRUE, type = 2))
        ifelse(is.numeric(out$value), out$value, NaN)
    }
    sasKurtosis <- function(x) {
        out <- tryCatch.W.E(kurtosis(x, na.rm = TRUE, type = 2))
        ifelse(is.numeric(out$value), out$value, NaN)
    }
    functions <- c(n = function(x) length(x), miss = function(x) sum(is.na(x)), 
        mean = function(x) mean(x, na.rm = TRUE), sd = function(x) sd(x, 
            na.rm = TRUE), median = function(x) median(x, na.rm = TRUE), 
        q25 = function(x) quantile(x, probs = 0.25, na.rm = TRUE), 
        q75 = function(x) quantile(x, probs = 0.75, na.rm = TRUE), 
        min = function(x) min(x, na.rm = TRUE), max = function(x) max(x, 
            na.rm = TRUE), skew = function(x) sasSkewness(x), 
        kurt = function(x) sasKurtosis(x))
    functions <- functions[func.indexes]
    if (!missing(func.additional)) {
        if (!is.list(func.additional) || is.null(names(func.additional))) {
            stop("func.additional must be a named list of functions")
        }
        functions <- c(functions, unlist(func.additional))
        func.names <- c(func.names, names(func.additional))
    }
    result <- by(data = dat, INDICES = strata, FUN = function(strataDat) {
        sapply(functions, FUN = function(fun) {
            sapply(strataDat, fun)
        })
    })
    pValues <- NULL
    if (test == TRUE) {
        resTests <- sapply(seq_len(ncol(dat)), FUN = function(i) {
            test <- listOfTests[[i]]
            var <- dat[, i]
            test(var ~ strata[[1]])
        }, simplify = FALSE)
        pValues <- sapply(resTests, getElement, "p.value")
    }
    class(result) <- c("ContTable", class(result))
    attributes(result) <- c(attributes(result), list(nonnormal = nonnormal, 
        pValues = pValues))
    return(result)
}
print(summary.ContTable)
function (ContTable, digits = 2) 
{
    print.by(ContTable, digits = digits)
}
print(print.ContTable)
function (ContTable, missing = FALSE, digits = 2, nonnormal = NULL, 
    quote = TRUE, test = TRUE, pDigits = 3, explain = TRUE) 
{
    varNames <- rownames(ContTable[[1]])
    nRows <- length(varNames)
    if (is.null(nonnormal)) {
        nonnormal <- attr(ContTable, "nonnormal")
    }
    else {
        if (!is.logical(nonnormal) & !is.character(nonnormal)) {
            stop("nonnormal argument has to be FALSE/TRUE or character.")
        }
        if (is.logical(nonnormal)) {
            if (length(nonnormal) != 1) {
                stop("nonormal has to be a logical vector of length 1")
            }
            nonnormal <- rep(nonnormal, nRows)
        }
        if (is.character(nonnormal)) {
            nonnormal <- vars %in% nonnormal
        }
        nonnormal <- as.numeric(nonnormal) + 1
        if (test == TRUE & !is.null(attr(ContTable, "pValues"))) {
            nonnormal <- attr(ContTable, "nonnormal")
            warning("The nonnormality specifications from the object are used when tests are requested.")
        }
    }
    statNames <- colnames(ContTable[[1]])
    funcDefault <- c("n", "miss", "mean", "sd", "median", "q25", 
        "q75")
    if (any(!funcDefault %in% statNames)) {
        summary(ContTable)
        stop("The object does not contain all necessary statistics. Use summary() method.")
    }
    ConvertNormal <- function(rowMat) {
        fmt <- paste0("%.", digits, "f", " (%.", digits, "f", 
            ")")
        out <- sprintf(fmt = fmt, rowMat[, "mean"], rowMat[, 
            "sd"])
        return(out)
    }
    ConvertNonNormal <- function(rowMat) {
        fmt <- paste0("%.", digits, "f [%.", digits, "f, %.", 
            digits, "f]")
        out <- sprintf(fmt = fmt, rowMat[, "median"], rowMat[, 
            "q25"], rowMat[, "q75"])
        return(out)
    }
    listOfFunctions <- list(normal = ConvertNormal, nonnormal = ConvertNonNormal)
    listOfFunctions <- listOfFunctions[nonnormal]
    out <- sapply(ContTable, FUN = function(stratum) {
        if (is.null(stratum)) {
            out2 <- rep("empty", nRows)
        }
        else {
            out2 <- sapply(seq_len(nRows), FUN = function(i) {
                fun <- listOfFunctions[[i]]
                fun(stratum[i, , drop = FALSE])
            }, simplify = TRUE)
        }
        out2
    }, simplify = TRUE)
    rownames(out) <- varNames
    if (length(attr(ContTable, "dimnames")) > 1) {
        colnames(out) <- apply(expand.grid(attr(ContTable, "dimnames")), 
            MARGIN = 1, paste0, collapse = ":")
    }
    if (test == TRUE & !is.null(attr(ContTable, "pValues"))) {
        fmt <- paste0("%.", pDigits, "f")
        p <- sprintf(fmt = fmt, attr(ContTable, "pValues"))
        out <- cbind(out, p = p)
    }
    if (explain) {
        what <- c(" (mean (sd))", " (median [IQR])")[nonnormal]
        rownames(out) <- paste0(rownames(out), what)
    }
    if (quote) {
        rownames(out) <- paste0("\"", rownames(out), "\"")
        colnames(out) <- paste0("\"", colnames(out), "\"")
    }
    if (length(ContTable) > 1) {
        cat(paste0("Stratified by ", paste0(names(attr(ContTable, 
            "dimnames")), collapse = ":"), "\n"))
    }
    print(out, quote = quote)
}