index.md

compareGroups

package to create descriptive tables

CRAN
version

Overview

compareGroups is an R package available on CRAN which performs descriptive tables displaying means, standard deviation, quantiles or frequencies of several variables. Also, p-value to test equality between groups is computed using the appropiate test.

With a very simple code, nice, compact and ready-to-publish descriptives table are displayed on R console. They can also be exported to different formats, such as Word, Excel, PDF or inserted in a R-Sweave or R-markdown document.

You will find an extensive manual describing all compareGropus capabilities with real examples in the vignette.

Also, compareGroups package has been published in Journal of Statistical Software [Subirana et al, 2014] (https://www.jstatsoft.org/v57/i12/).

Who we are

compareGroups is developed and maintained by Isaac Subirana, Hector Sanz, Joan Vila and collaborators at the cardiovascular epidemiology research unit (URLEC), located at Barcelona Biomedical Research Park (PRBB) .

As the driving force behind the REGICOR study, URLEC has extensive experience in statistical epidemiology, and is a national reference centre for research into cardiovascular diseases and their risk factors.

Gets started

Install the package from CRAN

install.packages("compareGroups")

or the lattest version from Github

library(devtools)
devtools::install_github("isubirana/compareGroups")

Building the descriptive table

library(compareGroups)

data(regicor)

tab <- descrTable(year ~ . -id , regicor, hide.no = "no", 
                  method=c(triglyc=2, tocv=2, todeath=2), sd.type = 3)

export2md(tab, header.background = "black", header.color = "white", 
          caption = "Summary by intervention group")
Summary by intervention group 1995 2000 2005 p.overall N=431 N=786 N=1077 Age 54.1±11.7 54.3±11.2 55.3±10.6 0.078 Sex: 0.506 Male 206 (47.8%) 390 (49.6%) 505 (46.9%) Female 225 (52.2%) 396 (50.4%) 572 (53.1%) Smoking status: <0.001 Never smoker 234 (56.4%) 414 (54.6%) 553 (52.2%) Current or former < 1y 109 (26.3%) 267 (35.2%) 217 (20.5%) Former >= 1y 72 (17.3%) 77 (10.2%) 290 (27.4%) Systolic blood pressure 133±19.2 133±21.3 129±19.8 <0.001 Diastolic blood pressure 77.0±10.5 80.8±10.3 79.9±10.6 <0.001 History of hypertension 111 (25.8%) 233 (29.6%) 379 (35.5%) <0.001 Hypertension treatment 71 (16.5%) 127 (16.2%) 230 (22.2%) 0.002 Total cholesterol 225±43.1 224±44.4 213±45.9 <0.001 HDL cholesterol 51.9±14.5 52.3±15.6 53.2±14.2 0.208 Triglycerides 94.0 \[71.0;136\] 98.0 \[72.0;133\] 98.0 \[72.0;139\] 0.762 LDL cholesterol 152±38.4 149±38.6 136±39.7 <0.001 History of hyperchol. 97 (22.5%) 256 (33.2%) 356 (33.2%) <0.001 Cholesterol treatment 28 (6.50%) 68 (8.80%) 132 (12.8%) <0.001 Height (cm) 163±9.21 162±9.39 163±9.05 0.003 Weight (Kg) 72.3±12.6 73.8±14.0 73.6±13.9 0.150 Body mass index 27.0±4.15 28.1±4.62 27.6±4.63 <0.001 Physical activity (Kcal/week) 491±419 422±377 351±378 <0.001 Physical component 49.3±8.08 49.0±9.63 50.1±8.91 0.032 Mental component 49.2±11.3 48.9±11.0 46.9±10.8 <0.001 Cardiovascular event 10 (2.51%) 35 (4.72%) 47 (4.59%) 0.161 Days to cardiovascular event or end of follow-up 1728 \[746;2767\] 1617 \[723;2596\] 1775 \[835;2723\] 0.096 Overall death 18 (4.65%) 81 (11.0%) 74 (7.23%) <0.001 Days to overall death or end of follow-up 1557 \[812;2689\] 1609 \[734;2549\] 1734 \[817;2713\] 0.249

Stratified table

tabstrat <- strataTable(update(tab, . ~ . -sex), "sex")

export2md(tabstrat, header.background = "black", header.color = "white", size=9)
Summary descriptive tables Male Female 1995 2000 2005 p.overall 1995 2000 2005 p.overall N=206 N=390 N=505 N=225 N=396 N=572 Age 54.1±11.8 54.3±11.2 55.4±10.7 0.212 54.1±11.7 54.4±11.2 55.2±10.6 0.351 Smoking status: <0.001 <0.001 Never smoker 52 (26.5%) 112 (29.7%) 137 (27.5%) 182 (83.1%) 302 (79.3%) 416 (74.0%) Current or former < 1y 77 (39.3%) 199 (52.8%) 134 (26.9%) 32 (14.6%) 68 (17.8%) 83 (14.8%) Former >= 1y 67 (34.2%) 66 (17.5%) 227 (45.6%) 5 (2.28%) 11 (2.89%) 63 (11.2%) Systolic blood pressure 134±18.4 137±19.3 132±18.7 0.002 132±19.8 129±22.6 127±20.5 0.008 Diastolic blood pressure 79.0±9.27 83.0±9.54 81.7±10.8 <0.001 75.2±11.3 78.6±10.6 78.3±10.0 <0.001 History of hypertension 50 (24.3%) 110 (28.2%) 181 (36.2%) 0.002 61 (27.1%) 123 (31.1%) 198 (34.8%) 0.097 Hypertension treatment 31 (15.0%) 48 (12.3%) 110 (22.8%) <0.001 40 (17.8%) 79 (19.9%) 120 (21.7%) 0.446 Total cholesterol 224±43.9 224±43.9 210±40.3 <0.001 226±42.4 224±44.9 216±50.3 0.004 HDL cholesterol 46.5±13.1 47.3±12.6 48.1±12.4 0.290 56.9±13.9 57.4±16.7 57.8±14.2 0.783 Triglycerides 110 \[79.0;149\] 113 \[84.0;145\] 108 \[79.0;149\] 0.825 86.0 \[66.0;113\] 87.0 \[66.0;118\] 90.0 \[66.0;128\] 0.496 LDL cholesterol 153±39.6 152±39.1 137±36.0 <0.001 150±37.3 146±38.0 136±42.6 <0.001 History of hyperchol. 48 (23.3%) 138 (35.8%) 167 (33.2%) 0.007 49 (21.8%) 118 (30.6%) 189 (33.3%) 0.006 Cholesterol treatment 17 (8.25%) 38 (9.84%) 59 (12.2%) 0.256 11 (4.89%) 30 (7.75%) 73 (13.2%) <0.001 Height (cm) 170±7.34 168±7.17 170±7.43 0.021 158±6.31 156±6.50 158±6.24 <0.001 Weight (Kg) 77.6±11.7 80.1±12.3 80.2±11.6 0.023 67.3±11.3 67.6±12.6 67.7±13.0 0.919 Body mass index 26.9±3.64 28.2±3.89 27.9±3.58 <0.001 27.2±4.57 28.0±5.25 27.3±5.39 0.084 Physical activity (Kcal/week) 422±418 356±362 439±467 0.014 553±412 486±382 273±253 <0.001 Physical component 50.1±6.71 50.9±8.58 51.5±8.07 0.110 48.6±9.16 47.1±10.2 48.9±9.45 0.027 Mental component 52.1±9.67 50.9±10.2 49.2±9.67 0.001 46.5±12.2 46.9±11.3 44.7±11.2 0.017 Cardiovascular event 6 (3.06%) 21 (5.74%) 19 (3.96%) 0.272 4 (1.98%) 14 (3.73%) 28 (5.15%) 0.139 Days to cardiovascular event or end of follow-up 1619 \[719;2715\] 1613 \[667;2509\] 1822 \[897;2794\] 0.043 1828 \[853;2779\] 1617 \[772;2679\] 1750 \[746;2692\] 0.427 Overall death 12 (6.45%) 46 (12.5%) 29 (6.08%) 0.002 6 (2.99%) 35 (9.43%) 45 (8.24%) 0.018 Days to overall death or end of follow-up 1557 \[836;2680\] 1606 \[751;2490\] 1688 \[785;2516\] 0.947 1587 \[786;2717\] 1620 \[730;2583\] 1809 \[867;2804\] 0.141

Visual exploration

plot(tab["sex"]) plot(tab["age"])

Computing Odds Ratios

data(SNPs)

tabor <- descrTable(casco ~ .-id, SNPs, show.ratio=TRUE, show.p.overall=FALSE)

export2md(tabor[1:4])
Summary descriptives table by groups of \`casco’ 0 1 OR p.ratio N=47 N=110 sex: Male 21 (44.7%) 54 (49.1%) Ref. Ref. Female 26 (55.3%) 56 (50.9%) 0.84 \[0.42;1.67\] 0.619 blood.pre 13.1 (0.88) 12.9 (1.03) 0.78 \[0.55;1.11\] 0.174 protein 39938 (19770) 44371 (24897) 1.00 \[1.00;1.00\] 0.280 snp10001: CC 2 (4.26%) 10 (9.09%) Ref. Ref. CT 21 (44.7%) 32 (29.1%) 0.33 \[0.04;1.43\] 0.147 TT 24 (51.1%) 68 (61.8%) 0.60 \[0.08;2.55\] 0.521

Computing Hazard Ratios

library(survival)
regicor$tcv <- Surv(regicor$tocv, regicor$cv=="Yes")

tabhr <- descrTable(tcv ~ .-id-cv-tocv, regicor, 
           method=c(triglyc=2, tocv=2, todeath=2),
           hide.no="no", ref.no="no",
           show.ratio=TRUE, show.p.overall=FALSE)


export2md(tabhr[1:10], header.label=c("p.ratio"="p-value"),
          caption="Descriptives by cardiovascular event")
Descriptives by cardiovascular event No event Event HR p-value N=2071 N=92 Recruitment year: 1995 388 (18.7%) 10 (10.9%) Ref. Ref. 2000 706 (34.1%) 35 (38.0%) 1.95 \[0.96;3.93\] 0.063 2005 977 (47.2%) 47 (51.1%) 1.82 \[0.92;3.59\] 0.087 Age 54.6 (11.1) 57.5 (11.0) 1.02 \[1.00;1.04\] 0.021 Sex: Male 996 (48.1%) 46 (50.0%) Ref. Ref. Female 1075 (51.9%) 46 (50.0%) 0.92 \[0.61;1.39\] 0.696 Smoking status: Never smoker 1099 (54.3%) 37 (40.2%) Ref. Ref. Current or former < 1y 506 (25.0%) 47 (51.1%) 2.67 \[1.74;4.11\] <0.001 Former >= 1y 419 (20.7%) 8 (8.70%) 0.55 \[0.26;1.18\] 0.123 Systolic blood pressure 131 (20.3) 138 (21.5) 1.02 \[1.01;1.02\] 0.001 Diastolic blood pressure 79.5 (10.4) 82.9 (12.3) 1.03 \[1.01;1.05\] 0.002 History of hypertension 647 (31.3%) 38 (41.3%) 1.52 \[1.01;2.31\] 0.047 Hypertension treatment 382 (18.7%) 22 (23.9%) 1.37 \[0.85;2.22\] 0.195 Total cholesterol 218 (44.5) 224 (50.4) 1.00 \[1.00;1.01\] 0.207 HDL cholesterol 52.8 (14.8) 50.4 (13.3) 0.99 \[0.97;1.00\] 0.114

Web-based User Interface

For those not familiar to R syntax, a Web User Interface (WUI) has been implemented using Shiny tools, which can be used off line by typing cGroupsWUI() after having compareGroups package installed and loaded, or remotely just accessing the application hosted in a shinyapp.io server.



isubirana/compareGroups documentation built on Jan. 31, 2024, 9:19 p.m.