# load libraries
required_packages <- c("knitr",
                       "kableExtra",
                       "rmarkdown",
                       "plyr",
                       "dplyr",
                       "parallel",
                       "ggsci",
                       "ggplot2",
                       "GGally",
                       "reshape2",
                       "stringr",
                       "lmerTest",
                       "car",
                       "fdrtool",
                       "pheatmap",
                       "RColorBrewer",
                       "factoextra",
                       "NbClust",
                       "gridExtra",
                       "emmeans")
invisible(temp <- lapply(required_packages, function(x) require(x, quietly = T, character.only = TRUE) ))

# load data
load("data_combined.RData")
df$`Device Type` <- relevel(df$`Device Type`, ref = "HMII")

# subset to only HMII patients
df.HMII <- droplevels(subset(df, df$`Device Type` == "HMII"))

# set options
bc <- 14:42 # col index of b-cells in df
cyt <- 43:80 # col index of cytokines in df
bcellcyto <- c(bc,cyt)

# set patient groups
groups <- make.names(c("AgeGreater60", 
                       "Sex",
                       "LowIntermacs",
                       "RVAD", 
                       "Sensitized",
                       "VAD Indication", 
                       "Survival"
                       ))

# set significance requirements
FDRcutoff <- 0.1
pcutoff <- 0.05



# Efron's double standardization
double_standardize <- function(x, niter = 1000) {
    for(i in 1:niter) x <- t(scale(t(scale(x))))
    return(as.data.frame(x))
}

# Error bars
invisible(suppressMessages(require(Hmisc, quietly = T)))
stat_sum_df <- function(fun, geom="errorbar", ...) {
    stat_summary(fun.data = fun, geom = geom, width = 1, ...)
}

# function that converts pvalues to star indicators
p2stars <- function(p){
    if(is.null(p)) return(".")
    if(is.na(p)) return(".")
    if(p >= 0.1) s <- "."
    if(p < 0.1 & p >= 0.05) s <- ".."
    if(p < 0.05 & p >= 0.01) s <- ".*"
    if(p < 0.01 & p >= 0.001) s <- ".**"
    if(p < 0.001 & p >= 0.0001) s <- ".***"
    if(p < 0.0001 & p >= 0) s <- ".****"
    return(s)
}

1 Introduction

Background: 20 heart-failure patients receiving the Heartmate-II mechanical circulatory support device (MCSD) were sampled at 7 timepoints after implantation. Each sample consisted of 67 biomarker measurements – 29 B-cell markers and 38 cytokine markers. Additionally, each patient was associated with 7 categorical variables, such as age, sex, interMACS score, and survival. Due to practical limitations, not all samples were complete; after accounting for missing data, there are a total of 105 datapoints.

Specific Aims: We had the following two specific aims: (1) Our primary aim was to identify if and how any of the 67 biomarkers are associated with any of the 7 categorical variables. (2) We also sought to describe any global patterns in the set of biomarkers, such as temporal patterns.

Methods: Our methods can be summarized sequentially according to the specific aims:

  1. To identify biomarkers with interesting associations, we used a linear mixed effect model to model group or time effects, or group effects that changed in time. We estimated the local false discovery rate of these results, and reported results with \(q<\) 0.1.

  2. To identify specific timepoints where group effects occur, we did a post-hoc analysis using estimated marginal means based on the mixed effect model. We adjusted the statistical significance of all results using the Benjamini-Hochberg method.

  3. To identify biomarker clusters, we biclustered the standardized biomarkers and samples. We also clustered biomarkers by temporal similarity, using the marginal means of each standarized biomarker at every timepoint. We computed the optimal number of clusters for both approaches by maximizing average silhouette width.

  4. We related biomarker clusters and temporal clusters to each other, and to the list of significant biomarkers found in (2), using Fisher’s exact test.

1.1 Dataset

Data was collected from patients who underwent MCSD implantation at a single university medical center. Peripheral blood draws for cytokine and B-cell expression assays were performed at days 0,1,3,5,8,14,21. Cytokine and chemokine concentrations from plasma samples were assayed using the 38-multiplex MILLIPLEX Human Cytokine Chemokine Panel I. HLA class I and II single antigen Luminex antibody profiles were performed via flow cytometry on available samples. Allosensitization was defined as HLA antibody production (mean fluorescence intensity > 5000) during the MCSD course. B-cell multiparameter immunophenotypes were performed by staining peripheral blood mononuclear cells for surface markers using fluorochrome-tagged antibodies against CD3, CD5, CD11b, CD 19, CD24, CD27, CD38, CD268, IgD, IgM, and IgG (One Lambda, Inc.).

missing.ix <- Reduce(intersect, apply(df.HMII[,bcellcyto], 2, function(x) which(is.na(x))))
df.raw <- df.HMII[-missing.ix,]
df.raw <- df.raw[order(df.raw$PatientID),]
rownames(df.raw) <- 1:nrow(df.raw)

kable(df.raw, 
      digits = 3,
      row.names = T,
      caption = "Table 1: Raw data"
) %>%
    kable_styling(bootstrap_options = c("striped", 
                                        "hover", 
                                        "condensed",
                                        "responsive"),
                  font_size = 12) %>%
    scroll_box(width = "100%", height = "300px") 
Table 1: Raw data
PatientID Time Age AgeGreater60 Sex LowIntermacs InterMACS RVAD Sensitized VAD Indication Device Type Outcome Survival num Total PBMC num lymph lymph live lymph CD3 of live lymph CD19 of live lymph CD19+CD27- CD19+CD27+ CD27+38++plasma blasts CD27-38++ transitional CD27-IgD+ mature naive CD27+IgD- switched memory CD27-IgD- switched memory CD27+IgD+ unswitched memory CD27+IgD-IgM+ switched memory CD27+IgD+IgM+ nonswitched memory CD19+27+IgG+IgM- memory CD19+24dim38dim naive mature CD19+24+38++transitional CD19CD24hiCD38-memory CD19+27-38+CD5+transitionals CD19+CD268+ CD268 of +27-38++transitional CD19+CD11b+ CD19+CD5+ CD19+CD27+CD24hi CD19+CD5+CD24hi CD19+CD5+CD11b+ CD19+27+IgD-38++IgG ASC IL-12(p40) IL-12(p70) IFN-g TNF-a TNF-b IL-4 IL-5 IL-9 IL-10 IL-13 IL-17A IL-1a IL-1b IL-2 IL-3 IL-6 IL-15 TGF-a IFN-a2 IL-8 GRO Eotaxin MDC IP-10 MCP-1 MCP-3 Fractalkine MIP-1a MIP-1b GM-CSF IL-7 G-CSF VEGF EGF FGF-2 Flt-3L IL-1RA sCD40L
1 1 0 65 older Male low 2 No NA BTT HMII Alive s/p OHT alive 169154 35496 20.98 99.53 25.37 19.82 86.02 13.98 1.26 2.54 57.81 11.74 28.06 2.39 21.74 14.36 0.72 81.05 2.86 13.60 0.58 95.22 84.83 10.47 4.33 8.50 1.39 3.13 1.09 1.71 2.16 124.000 20.926 2.72 2.500 1.010 7.273 4.617 1.760 21.20 277.000 3.483 9.878 1.160 12.334 1.090 5.71 2.18 45.38 126.00 119.000 525.00 1174 392 3.03 27.25 2.030 47.654 60.843 1.268 33.267 486.000 54.27 6.05 1.92 4.47 793.00
2 1 1 65 older Male low 2 No NA BTT HMII Alive s/p OHT alive 63082 9915 15.72 99.26 32.45 26.26 90.06 9.94 0.89 2.09 54.27 7.70 35.71 2.32 31.10 20.47 1.57 84.06 2.59 10.79 0.26 97.02 92.59 7.50 3.13 6.42 1.32 2.44 1.49 1.71 1.71 156.000 24.857 2.72 2.500 1.010 1.270 48.726 1.760 29.97 388.000 1.350 1.952 1.160 109.000 5.715 3.89 3.18 102.00 191.00 95.541 463.00 1079 552 3.03 35.53 2.030 62.089 12.293 2.005 109.000 509.000 64.48 26.13 1.92 19.50 841.00
3 1 3 65 older Male low 2 No NA BTT HMII Alive s/p OHT alive 75921 21721 28.61 99.31 24.86 33.01 86.38 13.62 1.54 1.26 45.74 10.98 40.44 2.84 31.80 18.04 1.15 86.21 4.82 6.56 0.24 90.41 73.33 10.00 7.25 10.12 3.22 5.67 2.05 32.32 14.40 259.000 28.330 14.74 12.770 3.369 5.615 28.055 7.406 54.61 438.000 3.867 8.638 3.690 57.616 12.778 5.85 56.84 121.00 193.00 186.000 510.00 1365 464 35.08 152.00 2.030 87.775 44.032 10.100 81.038 687.000 70.06 117.00 1.92 151.00 801.00
4 1 5 65 older Male low 2 No NA BTT HMII Alive s/p OHT alive NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 1.71 5.07 134.000 41.230 2.72 2.813 1.809 4.930 23.012 1.760 26.38 316.000 1.219 1.230 2.735 15.579 5.021 2.73 25.80 78.31 231.00 213.000 462.00 2053 583 4.14 104.00 2.030 55.375 49.222 6.820 29.004 414.000 61.03 43.25 1.92 64.51 1230.00
5 1 8 65 older Male low 2 No NA BTT HMII Alive s/p OHT alive 213808 36002 16.84 99.19 35.95 14.55 67.94 32.06 4.06 2.17 27.92 28.92 39.64 3.52 20.31 9.10 1.33 68.69 7.10 20.42 1.88 87.38 44.25 10.78 11.12 19.15 5.54 7.35 1.07 1.71 3.83 228.000 23.577 2.81 2.500 1.666 6.792 39.103 1.760 43.65 450.000 2.412 6.904 2.197 19.163 2.445 3.75 19.72 56.79 134.00 184.000 496.00 1214 430 3.03 90.07 2.030 72.549 44.681 4.448 51.520 735.000 78.74 94.11 1.92 133.00 912.00
6 1 21 65 older Male low 2 No NA BTT HMII Alive s/p OHT alive 106970 31867 29.79 99.18 42.36 15.02 84.69 15.31 1.94 2.11 55.41 13.14 29.13 2.32 20.22 12.88 2.08 83.21 5.20 9.50 1.10 94.44 73.00 9.04 6.99 9.22 2.80 4.78 1.44 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
7 3 0 81 older Male high 3 No NA DT HMII Died dead 119377 77509 64.93 99.61 58.50 7.99 62.67 37.33 9.10 4.82 36.73 31.90 25.62 5.74 11.47 8.95 0.40 69.54 7.69 9.41 2.61 76.44 57.91 23.29 20.76 15.39 5.42 14.90 2.60 6.39 6.65 11.372 21.497 3.51 2.320 6.303 1.590 6.039 2.111 5.18 4.727 1.920 1.450 2.558 38.074 5.729 2.57 19.65 32.02 123.00 133.000 380.00 1899 1054 26.14 112.00 2.230 32.026 20.483 7.783 58.902 70.513 7.02 95.30 0.39 89.23 624.00
8 3 1 81 older Male high 3 No NA DT HMII Died dead NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 41.70 5.35 39.418 40.838 13.66 17.416 2.457 4.050 57.842 9.006 7.14 46.122 4.879 6.666 3.299 119.000 26.234 2.86 67.14 112.00 206.00 180.000 411.00 1271 4441 35.46 169.00 33.419 100.000 54.262 5.253 43.646 118.000 24.49 79.63 0.39 224.00 1714.00
9 3 3 81 older Male high 3 No NA DT HMII Died dead 96940 57658 59.48 99.70 55.52 9.21 72.15 27.85 3.85 3.82 48.41 21.75 23.49 6.35 12.10 16.04 0.28 75.30 3.72 6.65 2.11 80.52 67.33 15.80 15.23 6.71 1.32 8.86 0.26 17.15 6.00 20.672 15.342 7.00 5.509 7.681 2.040 8.932 3.799 4.45 17.129 2.699 3.725 3.108 25.794 15.326 2.57 74.20 34.62 85.04 162.000 348.00 897 1361 21.65 102.00 6.821 27.057 24.672 5.253 34.257 70.513 13.56 63.96 0.39 118.00 1014.00
10 3 5 81 older Male high 3 No NA DT HMII Died dead 154373 73969 47.92 99.65 45.18 8.77 67.36 32.64 6.59 2.77 39.10 26.28 27.95 6.67 17.89 15.71 0.39 71.57 6.26 9.88 1.78 81.86 72.07 20.12 20.17 14.80 5.99 14.65 3.71 4.28 2.29 12.657 16.490 2.31 2.320 6.816 1.590 6.845 1.520 4.74 2.120 1.920 1.450 1.980 99.474 11.334 1.58 47.29 61.82 48.64 192.000 320.00 738 1071 10.05 46.41 2.230 21.777 11.020 1.520 37.403 27.750 2.89 23.91 0.39 52.69 361.00
11 3 8 81 older Male high 3 No NA DT HMII Died dead 155610 63375 40.73 99.51 38.42 12.40 71.69 28.31 4.36 2.62 37.82 23.43 33.50 5.24 17.37 14.92 0.60 65.04 2.80 11.23 2.54 83.55 37.56 15.55 15.45 9.55 2.66 10.91 0.28 8.54 4.12 17.955 15.342 3.51 2.320 6.816 1.590 6.439 1.605 5.62 13.939 2.314 1.782 2.042 79.869 8.070 2.42 84.63 34.26 38.88 162.000 335.00 822 1054 16.46 84.38 2.980 19.937 20.483 2.734 21.566 90.169 10.50 41.25 0.39 77.29 562.00
12 3 14 81 older Male high 3 No NA DT HMII Died dead 244245 115109 47.13 99.47 47.40 9.37 67.50 32.50 3.99 2.08 50.08 26.01 17.22 6.68 15.34 15.25 0.23 77.86 3.21 10.49 1.48 82.13 59.19 21.45 19.77 14.45 2.57 14.94 0.94 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
13 4 1 58 younger Male high 3 Yes No BTT HMII Alive s/p OHT alive 246811 86529 35.06 93.49 67.96 17.48 81.66 18.34 2.05 6.85 51.33 13.69 29.91 5.08 15.68 5.94 0.19 61.95 0.76 13.51 4.07 92.62 34.06 6.90 12.07 8.00 2.54 3.85 0.26 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
14 4 3 58 younger Male high 3 Yes No BTT HMII Alive s/p OHT alive 406771 90343 22.21 97.34 49.28 17.02 75.04 24.96 4.47 18.36 28.45 21.86 46.07 3.62 24.97 4.33 0.13 47.41 1.64 19.70 18.15 72.76 8.08 25.69 28.35 13.95 4.66 19.20 0.41 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
15 4 21 58 younger Male high 3 Yes No BTT HMII Alive s/p OHT alive 330191 81636 24.72 94.57 45.14 14.70 70.51 29.49 8.94 16.23 38.92 23.53 30.83 6.72 23.93 7.07 0.18 46.63 2.35 16.12 8.59 74.45 39.90 24.19 21.18 12.62 3.26 12.93 0.38 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
16 7 0 65 older Female low 2 No Yes BTT HMII Alive s/p OHT alive 1073919 336538 31.34 100.00 63.29 14.80 93.05 6.95 0.73 8.05 75.49 4.55 19.16 0.80 7.25 8.78 28.04 88.72 2.51 5.18 1.02 90.49 68.18 2.32 4.09 1.69 3.48 1.27 5.78 103.00 34.40 73.796 17.487 330.00 74.260 18.401 16.683 51.466 82.515 12.80 150.000 15.178 15.208 9.970 26.235 21.107 8.44 133.00 39.26 415.00 111.000 298.00 443 296 138.00 125.00 10.503 37.240 39.468 13.629 111.000 409.000 77.43 78.89 10.95 301.00 5998.00
17 7 1 65 older Female low 2 No Yes BTT HMII Alive s/p OHT alive 270301 97229 35.97 91.63 18.43 61.67 97.68 2.32 0.20 5.85 69.45 1.63 28.19 0.73 27.57 21.43 17.05 84.32 7.26 2.73 0.84 99.44 97.60 0.54 2.64 1.51 3.63 0.29 3.40 16.38 6.78 46.507 34.398 28.79 11.752 0.814 4.999 1481.000 8.712 8.92 17.769 2.325 4.279 2.360 63.109 16.386 5.90 34.66 152.00 295.00 55.059 278.00 1037 409 21.48 40.32 6.177 30.898 20.452 2.676 177.000 224.000 36.40 47.22 0.92 160.00 5604.00
18 7 3 65 older Female low 2 No Yes BTT HMII Alive s/p OHT alive 499016 78019 15.63 89.41 25.83 51.38 92.98 7.02 0.32 4.66 51.34 6.31 41.59 0.76 36.49 5.96 22.81 73.48 6.73 7.93 0.33 98.78 96.52 1.31 2.06 5.19 2.68 0.59 2.45 16.38 6.52 31.962 18.537 34.49 16.410 2.113 4.287 78.861 9.272 9.04 17.769 2.902 2.861 3.595 11.983 22.669 9.71 14.43 38.26 183.00 56.470 219.00 307 219 29.76 47.34 5.053 3.891 7.570 2.878 33.464 191.000 16.92 81.03 0.92 99.54 4583.00
19 7 8 65 older Female low 2 No Yes BTT HMII Alive s/p OHT alive 115825 32513 28.07 91.04 44.61 15.76 80.52 19.48 4.16 7.82 49.91 18.37 30.52 1.20 14.87 3.33 30.19 61.08 8.70 12.56 1.58 89.80 76.71 2.87 6.07 11.12 8.08 1.59 1.17 37.61 21.91 70.846 24.832 57.61 38.448 5.988 8.685 44.610 13.488 17.95 55.857 7.772 7.570 7.238 14.443 23.376 10.40 81.88 77.46 332.00 132.000 332.00 1453 632 38.47 104.00 12.646 40.206 31.261 7.509 79.659 354.000 26.71 180.00 0.92 274.00 7156.00
20 7 21 65 older Female low 2 No Yes BTT HMII Alive s/p OHT alive 407080 97651 23.99 91.29 66.96 12.20 84.66 15.34 2.88 5.60 61.89 13.73 22.65 1.74 20.16 7.23 29.39 68.49 5.28 10.60 1.17 92.50 54.35 3.48 6.53 9.61 8.34 1.85 2.83 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
21 8 0 43 younger Male low 2 Yes No BTT HMII Alive s/p OHT alive 515760 266115 51.60 96.30 69.66 8.57 72.22 27.78 6.26 4.77 43.09 26.01 28.26 2.63 16.67 2.67 28.25 50.35 0.41 12.78 4.47 84.76 19.47 9.56 4.55 8.29 0.87 2.18 0.75 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
22 8 8 43 younger Male low 2 Yes No BTT HMII Alive s/p OHT alive 539521 223872 41.49 96.72 60.02 12.63 80.13 19.87 1.66 2.48 43.56 19.52 35.24 1.68 20.46 3.67 20.54 55.76 0.18 10.80 2.43 87.82 13.25 6.55 5.96 4.65 0.95 2.51 0.65 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
23 8 21 43 younger Male low 2 Yes No BTT HMII Alive s/p OHT alive 564317 216312 38.33 97.40 55.80 4.83 74.19 25.81 5.35 5.77 37.90 25.72 34.76 1.62 17.99 2.18 31.75 61.61 0.77 13.44 6.97 76.55 6.97 10.34 11.14 4.46 0.94 5.14 2.43 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
24 10 0 43 younger Male high 3 No No BTT HMII Alive s/p OHT alive 92221 27988 30.35 85.45 55.78 1.51 85.56 14.44 0.28 0.28 55.28 4.72 39.72 0.28 0.00 1.89 1.89 89.44 0.00 2.78 0.00 15.00 0.00 3.33 0.83 0.28 0.28 3.33 0.00 7.64 8.05 12.160 18.210 2.65 2.810 2.640 2.960 12.830 1.500 2.82 2.930 1.340 0.600 2.050 88.780 4.370 4.15 28.83 39.26 873.00 84.790 386.00 413 361 15.64 102.00 3.080 25.630 12.440 3.660 40.120 112.000 84.03 48.41 2.75 67.22 13502.00
25 10 1 43 younger Male high 3 No No BTT HMII Alive s/p OHT alive 273746 46755 17.08 93.25 50.14 7.57 88.27 11.73 0.09 2.12 54.52 3.36 42.00 0.12 8.40 6.87 0.00 92.00 0.12 3.45 0.00 3.94 11.43 1.12 0.64 2.76 0.33 2.15 0.00 1.74 3.20 8.390 13.870 2.65 2.810 2.640 2.960 5.480 1.500 2.63 1.040 0.420 0.020 0.960 56.230 6.110 2.78 12.80 22.38 257.00 109.000 212.00 207 352 2.90 59.32 3.080 10.480 4.350 2.300 35.160 31.280 16.68 40.19 1.22 37.18 3646.00
26 10 3 43 younger Male high 3 No No BTT HMII Alive s/p OHT alive 156053 71752 45.98 78.38 35.43 27.12 78.57 21.43 0.24 0.60 58.56 5.80 18.33 17.31 12.67 72.96 0.53 94.06 0.49 5.11 0.28 22.79 27.47 0.81 5.53 0.01 0.29 0.19 0.00 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
27 10 5 43 younger Male high 3 No No BTT HMII Alive s/p OHT alive NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 28.26 29.24 25.930 19.130 12.01 9.860 4.910 2.960 12.270 2.300 8.31 8.480 4.420 6.460 5.600 31.690 12.300 6.41 65.76 22.02 605.00 111.000 650.00 279 320 27.98 245.00 8.330 34.600 26.450 10.410 112.000 184.000 48.97 197.00 24.56 128.00 8387.00
28 10 8 43 younger Male high 3 No No BTT HMII Alive s/p OHT alive 156053 71752 45.98 78.38 35.43 27.12 78.57 21.43 0.24 0.60 58.56 5.80 18.33 17.31 12.67 72.96 0.53 94.06 0.49 5.11 0.28 22.79 27.47 0.81 5.53 0.01 0.29 0.19 0.00 70.58 65.90 45.390 26.340 33.60 24.140 10.790 5.940 18.220 4.580 16.86 22.040 10.800 17.200 14.210 33.990 19.940 11.61 146.00 23.83 661.00 105.000 765.00 325 270 45.41 414.00 17.810 51.840 49.970 22.030 205.000 266.000 76.21 266.00 48.57 276.00 9997.00
29 13 0 61 older Male low 2 No No BTT HMII Alive s/p OHT alive 411616 119210 28.96 90.82 73.63 5.88 74.30 25.70 2.80 6.46 57.94 19.20 18.72 4.13 19.10 15.42 15.30 53.51 13.78 25.19 0.21 47.23 53.77 5.75 5.92 22.63 3.46 2.55 0.74 74.33 630.00 1198.000 29.033 285.00 6.710 41.890 282.000 58.746 108.000 242.00 1363.000 17.372 74.166 4.089 381.000 11.334 76.55 183.00 145.00 703.00 339.000 938.00 642 424 191.00 439.00 51.380 409.000 169.000 31.768 254.000 3217.000 299.00 1084.00 546.00 877.00 6887.00
30 13 1 61 older Male low 2 No No BTT HMII Alive s/p OHT alive 430509 79492 18.46 89.31 52.10 20.45 87.13 12.87 1.23 4.76 58.11 9.15 30.55 2.20 29.86 18.05 10.37 63.63 10.23 17.43 0.06 74.05 72.50 2.36 2.98 10.68 1.72 1.03 2.89 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
31 13 3 61 older Male low 2 No No BTT HMII Alive s/p OHT alive 395713 119670 30.24 97.90 23.79 6.27 82.17 17.83 0.79 1.99 49.95 13.01 33.91 3.13 28.36 16.83 5.00 56.33 7.13 26.73 0.02 79.50 82.88 1.96 5.55 16.30 3.61 1.88 0.42 4.28 159.00 409.000 41.124 12.27 2.320 4.307 20.356 15.581 16.793 121.00 61.854 2.899 4.794 1.980 49.157 20.020 28.46 32.56 102.00 524.00 415.000 305.00 282 465 41.67 203.00 12.431 121.000 35.967 2.120 73.622 945.000 39.60 451.00 55.87 159.00 676.00
32 13 8 61 older Male low 2 No No BTT HMII Alive s/p OHT alive 329840 73468 22.27 98.63 70.61 3.73 51.50 48.50 8.32 3.77 33.46 41.29 20.92 4.33 25.19 5.89 24.07 46.40 3.73 34.64 0.07 64.14 28.43 10.35 9.61 38.78 4.62 5.55 2.91 100.00 430.00 1063.000 57.719 245.00 135.000 21.182 84.771 41.826 160.000 229.00 580.000 22.030 72.412 10.670 229.000 25.806 54.08 223.00 143.00 966.00 310.000 777.00 1415 796 217.00 325.00 45.047 411.000 137.000 44.518 266.000 2406.000 193.00 908.00 321.00 732.00 7464.00
33 13 14 61 older Male low 2 No No BTT HMII Alive s/p OHT alive 350294 88823 25.36 97.63 74.37 4.37 73.35 26.65 4.91 4.83 56.54 21.32 19.84 2.30 34.68 11.25 18.37 61.98 5.78 20.55 0.04 63.91 47.54 6.81 6.17 21.77 2.90 2.74 3.00 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
34 16 0 39 younger Female high 3 Yes No BTT HMII Died post OHT dead 52016 30920 59.44 95.77 55.57 24.62 58.73 41.27 2.14 0.97 53.01 5.05 5.45 36.50 9.39 81.29 2.88 81.48 5.65 9.02 0.48 97.75 71.83 0.67 22.89 0.34 1.78 0.49 NA 11.66 5.99 5.180 18.210 2.65 2.810 2.640 2.960 2.600 1.500 3.19 3.790 0.750 1.140 1.270 12.840 1.920 2.78 22.29 13.36 205.00 120.000 433.00 852 235 13.38 108.00 17.980 22.860 7.890 3.660 26.920 114.000 27.36 63.49 6.10 47.28 2960.00
35 16 1 39 younger Female high 3 Yes No BTT HMII Died post OHT dead 75516 48801 64.62 92.13 52.90 18.64 70.39 29.61 2.92 2.21 62.18 5.13 7.98 24.70 13.79 69.54 3.19 84.14 3.64 6.36 0.41 94.93 43.78 0.57 15.61 0.23 0.91 0.36 NA 6.69 4.54 3.850 13.310 2.65 2.810 2.640 2.960 15.360 1.500 2.89 2.390 0.640 1.550 1.060 51.270 3.890 2.78 23.91 29.12 139.00 53.210 184.00 503 192 13.38 162.00 30.710 25.630 7.270 3.380 58.260 135.000 10.50 52.34 4.60 111.00 1306.00
36 16 3 39 younger Female high 3 Yes No BTT HMII Died post OHT dead 250612 130454 52.05 95.75 60.05 3.29 46.04 53.96 1.34 3.89 33.08 32.47 8.29 26.15 3.56 34.61 0.09 76.71 0.39 13.20 0.28 39.79 14.38 2.26 1.56 10.45 2.89 3.04 0.08 22.58 5.49 6.580 15.690 2.77 2.810 2.640 2.960 19.820 1.500 3.96 4.710 1.750 5.060 1.270 242.000 7.410 6.23 43.70 45.47 205.00 139.000 201.00 614 498 27.61 259.00 37.910 41.540 13.790 4.520 90.330 187.000 20.67 91.18 20.95 94.90 1637.00
37 16 5 39 younger Female high 3 Yes No BTT HMII Died post OHT dead NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 36.87 8.59 9.500 14.150 5.49 4.340 2.640 2.960 3.860 1.500 4.92 8.120 2.050 5.620 1.480 49.360 5.860 3.77 51.10 19.90 214.00 142.000 261.00 1163 556 27.24 145.00 37.770 41.540 20.750 5.700 54.980 210.000 28.80 99.93 38.44 100.00 3060.00
38 16 8 39 younger Female high 3 Yes No BTT HMII Died post OHT dead 212478 120477 56.70 85.12 48.36 12.51 79.57 20.43 1.35 2.14 58.73 12.87 18.44 9.96 5.63 34.32 0.11 86.74 0.41 6.88 0.15 35.30 53.09 1.23 0.75 2.36 1.04 1.47 NA 39.75 7.52 10.260 14.990 6.70 4.900 2.640 3.060 5.960 1.500 5.57 11.870 2.670 6.610 1.480 49.000 5.860 3.86 55.20 17.87 278.00 105.000 428.00 1180 309 30.12 162.00 41.370 49.350 22.170 5.990 67.210 220.000 34.39 108.00 31.81 119.00 3873.00
39 17 0 70 older Female low 2 No NA DT HMII Alive alive 86135 70306 81.62 93.71 74.50 1.59 61.74 38.26 1.91 2.67 33.97 14.50 26.81 24.71 20.67 62.47 9.03 73.00 2.00 24.71 1.27 20.23 71.43 0.48 12.79 0.38 3.24 0.48 4.60 2.81 7.26 7.290 173.000 2.65 2.810 2.640 2.960 12.550 1.500 4.28 8.850 0.640 0.770 1.160 2.930 3.890 3.28 27.19 22.83 145.00 70.170 765.00 1478 482 9.57 94.83 94.860 103.000 8.520 3.660 18.060 120.000 19.71 40.19 28.19 51.59 1276.00
40 17 1 70 older Female low 2 No NA DT HMII Alive alive 81004 41334 51.03 94.06 53.64 2.99 61.70 38.30 3.10 2.75 39.07 13.34 22.12 25.47 12.58 63.11 15.99 78.92 2.93 17.38 3.35 23.24 71.88 0.52 11.70 0.09 1.29 0.52 9.83 7.64 4.08 4.170 41.980 2.65 2.810 2.640 2.960 133.000 1.500 2.63 7.760 0.420 1.770 0.910 98.210 8.740 4.54 15.89 77.14 211.00 64.900 374.00 1714 959 5.00 64.16 21.350 54.290 8.520 2.560 284.000 52.100 11.10 21.92 7.15 51.59 1301.00
41 17 3 70 older Female low 2 No NA DT HMII Alive alive NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.22 3.20 3.220 21.580 2.65 2.810 2.640 2.960 15.210 1.500 2.63 2.520 0.420 0.020 0.680 58.680 7.800 3.77 8.37 31.94 83.16 74.380 388.00 644 432 2.90 49.55 8.660 30.220 4.630 1.790 14.940 45.600 11.69 14.26 1.53 29.96 690.00
42 17 5 70 older Female low 2 No NA DT HMII Alive alive 90024 39434 43.80 95.32 68.83 5.62 71.59 28.41 0.85 1.66 35.23 13.02 35.80 15.96 22.94 52.37 5.85 76.42 1.14 21.83 0.62 14.54 48.57 0.38 4.69 0.00 0.80 0.38 0.62 0.58 3.63 3.220 25.010 2.65 2.810 2.640 2.960 23.480 1.500 2.63 2.390 0.420 0.100 0.860 31.820 7.670 11.61 15.89 41.91 454.00 91.330 506.00 670 421 3.21 54.44 14.370 37.430 6.660 2.300 33.500 58.260 15.08 19.42 6.10 41.52 1837.00
43 17 8 70 older Female low 2 No NA DT HMII Alive alive NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 37.61 21.91 44.071 23.633 39.20 9.532 6.428 5.102 32.860 7.062 12.93 20.414 2.167 3.138 5.978 41.851 8.190 4.95 63.21 39.70 328.00 175.000 323.00 808 540 34.88 91.67 13.604 48.125 30.231 5.864 59.949 466.000 81.74 150.00 4.51 195.00 9741.00
44 17 14 70 older Female low 2 No NA DT HMII Alive alive 106791 80532 75.41 88.82 79.92 1.57 62.32 37.68 1.70 4.02 28.04 22.86 34.11 15.00 23.92 39.41 15.03 61.61 3.66 34.55 1.97 20.36 73.33 0.80 8.57 0.27 1.79 0.98 0.71 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
45 18 0 63 older Male low 1 No NA BTT HMII Died dead NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 60.38 32.81 186.000 38.833 32.98 21.709 3.051 5.621 37.885 11.091 29.33 189.000 6.338 16.504 4.089 278.000 17.668 7.17 59.99 54.99 695.00 232.000 211.00 828 1145 50.86 107.00 10.251 111.000 31.722 7.153 120.000 533.000 28.75 322.00 2.34 224.00 3524.00
46 18 1 63 older Male low 1 No NA BTT HMII Died dead NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 63.95 40.14 249.000 28.453 32.98 21.709 3.357 4.711 28.562 11.091 38.39 220.000 6.089 13.032 4.089 124.000 15.114 5.01 59.99 41.74 638.00 289.000 303.00 509 713 59.63 121.00 9.867 123.000 56.352 7.153 82.196 685.000 46.72 384.00 14.39 229.00 5489.00
47 18 3 63 older Male low 1 No NA BTT HMII Died dead 366713 77282 21.07 98.61 66.55 12.44 93.65 6.35 0.53 0.60 62.22 4.68 32.38 0.72 19.94 9.89 28.23 83.18 0.51 14.38 0.30 94.72 54.39 2.07 11.33 2.86 3.40 1.48 3.58 65.71 24.75 198.000 26.329 40.68 18.837 4.631 4.711 20.178 9.696 29.66 185.000 5.841 11.411 4.293 71.642 12.166 3.92 74.20 35.60 1110.00 222.000 300.00 489 627 50.86 126.00 9.479 104.000 51.467 10.275 77.933 727.000 62.42 422.00 11.03 219.00 9557.42
48 18 5 63 older Male low 1 No NA BTT HMII Died dead 262251 55344 21.10 99.55 62.37 14.39 93.00 7.00 1.03 0.69 65.71 4.74 28.37 1.17 25.93 17.28 25.93 79.87 1.20 17.05 0.48 97.76 58.18 2.27 11.13 4.12 4.91 1.87 6.10 89.92 70.33 309.000 36.344 103.00 29.010 8.732 7.037 28.329 24.712 57.19 384.000 8.403 25.681 5.347 93.592 18.950 6.40 67.14 51.06 434.00 238.000 328.00 896 536 91.53 134.00 14.161 155.000 92.272 10.890 115.000 873.000 64.87 398.00 65.30 368.00 2247.00
49 18 8 63 older Male low 1 No NA BTT HMII Died dead 309193 61091 19.76 98.15 56.62 7.24 83.61 16.39 3.27 1.52 58.03 11.90 28.13 1.93 24.65 11.36 1.52 79.53 1.45 13.33 0.97 92.63 25.76 3.50 9.23 7.57 3.73 3.48 0.00 60.38 17.64 183.000 34.233 42.23 20.268 6.645 4.488 29.029 11.795 27.05 177.000 6.089 10.605 3.887 154.000 12.585 3.77 56.39 56.34 1534.00 165.000 446.00 487 478 53.19 121.00 10.759 85.242 37.382 13.310 79.359 700.000 104.00 490.00 12.72 151.00 9557.42
50 19 0 68 older Male high 3 No NA DT HMII Died dead 147997 54649 36.93 91.75 79.63 7.62 74.86 25.14 0.60 3.45 62.45 22.87 12.30 2.38 45.98 9.28 13.61 74.33 2.67 21.19 0.84 91.31 90.15 3.58 2.25 21.79 1.36 0.58 0.34 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
51 19 1 68 older Male high 3 No NA DT HMII Died dead 177687 56400 31.74 97.13 69.76 12.60 81.83 18.17 0.65 1.61 55.77 16.13 26.02 2.09 53.19 10.70 11.57 82.92 1.38 13.98 0.28 89.83 85.59 3.78 1.85 14.65 1.30 0.68 0.18 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
52 19 3 68 older Male high 3 No NA DT HMII Died dead 233155 67140 28.80 98.44 74.89 5.32 81.96 18.04 1.00 1.88 49.03 16.59 32.90 1.48 49.92 7.20 12.83 83.44 1.39 12.98 0.14 89.70 69.70 4.58 1.62 13.89 1.08 1.08 0.17 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
53 19 5 68 older Male high 3 No NA DT HMII Died dead 99257 29455 29.68 97.33 62.48 4.73 80.60 19.40 1.84 1.25 45.06 18.36 35.25 1.33 44.61 6.32 12.27 82.89 0.88 13.20 0.09 83.55 35.29 7.23 3.54 14.75 2.29 3.02 1.20 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
54 19 8 68 older Male high 3 No NA DT HMII Died dead 76358 18702 24.49 97.32 29.48 11.10 86.29 13.71 2.43 0.50 37.92 12.13 48.32 1.63 46.45 11.70 11.35 83.96 0.20 10.50 0.06 57.82 50.00 9.95 29.60 10.20 0.64 9.36 0.80 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
55 21 0 46 younger Male low 2 No NA DT HMII Alive alive 226762 25868 11.41 89.41 25.31 12.05 55.06 44.94 11.31 2.69 14.79 42.57 39.95 2.69 19.87 3.88 32.88 68.95 10.48 13.57 0.59 80.62 22.67 31.91 19.38 15.58 10.37 16.55 8.18 2.18 2.45 60.794 34.617 2.31 2.320 1.245 1.590 68.832 1.520 7.45 2.120 1.920 1.450 1.980 130.000 3.544 14.61 5.57 47.27 442.00 52.814 249.00 328 245 3.98 55.48 2.230 19.937 2.737 3.987 21.566 118.000 2.89 23.91 0.39 52.69 1293.00
56 21 3 46 younger Male low 2 No NA DT HMII Alive alive 244049 39386 16.14 94.94 40.46 13.23 40.93 59.07 13.36 3.17 8.33 54.90 32.28 4.49 18.52 4.21 23.83 55.18 13.87 19.39 1.44 70.53 35.67 33.62 33.47 22.86 15.26 25.81 5.11 2.18 2.71 17.955 26.715 9.57 2.320 1.893 1.590 3.759 1.520 3.89 2.120 1.920 1.450 1.980 59.228 1.623 7.17 8.93 60.31 820.00 73.754 165.00 347 262 3.98 63.62 2.230 18.052 2.737 3.358 15.234 90.169 11.56 77.19 0.39 33.64 2726.00
57 21 5 46 younger Male low 2 No NA DT HMII Alive alive 344736 250121 72.55 89.83 7.54 3.81 45.84 54.16 3.96 1.53 13.39 52.70 32.18 1.72 67.14 2.92 2.44 74.68 6.81 13.91 0.21 63.33 58.02 33.05 30.94 19.83 13.96 26.74 0.22 2.18 4.12 15.278 24.202 12.27 2.320 2.457 1.590 4.492 1.520 3.07 2.120 1.920 1.450 2.558 43.554 1.623 2.86 23.32 48.13 1082.00 71.954 125.00 260 251 5.90 77.95 2.230 18.052 7.234 7.153 27.925 153.000 29.97 118.00 0.39 52.69 4714.00
58 21 8 46 younger Male low 2 No NA DT HMII Alive alive 216934 140093 64.58 96.37 4.78 7.22 22.49 77.51 13.49 0.64 7.22 67.61 15.17 10.00 35.88 7.82 17.22 51.28 39.40 6.56 1.33 62.59 58.06 66.67 64.59 53.00 50.26 63.78 4.97 2.18 2.45 24.797 23.042 8.26 2.320 1.625 1.590 3.060 1.520 4.03 2.120 1.920 1.450 1.980 44.329 0.827 2.13 5.57 54.35 370.00 84.966 89.52 348 255 3.98 46.41 2.230 9.990 2.520 2.120 9.035 55.097 2.89 23.91 0.39 27.20 1113.00
59 21 14 46 younger Male low 2 No NA DT HMII Alive alive 215820 66785 30.94 92.54 17.20 6.01 25.88 74.12 9.15 1.45 3.09 71.72 22.44 2.74 65.43 3.42 0.04 69.38 15.93 8.85 0.74 50.58 24.07 52.78 48.88 32.28 28.19 44.04 0.04 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
60 21 21 46 younger Male low 2 No NA DT HMII Alive alive 670692 523014 77.98 96.05 5.07 2.64 23.61 76.39 4.11 0.49 4.79 73.53 18.68 3.00 42.40 2.72 4.49 71.95 20.81 5.51 0.45 48.22 44.62 60.13 60.26 39.07 36.82 56.38 1.49 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
61 22 0 75 older Male low 2 No NA DT HMII Alive alive NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 59.97 33.76 44.886 35.293 48.50 30.282 52.148 11.702 46.900 18.224 10.78 72.616 5.569 5.458 11.016 23.895 17.965 7.15 143.00 43.59 989.00 135.000 584.00 662 925 40.52 163.00 13.354 43.750 59.591 13.629 94.278 449.000 104.00 196.00 0.92 248.00 10443.75
62 22 1 75 older Male low 2 No NA DT HMII Alive alive NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 6.42 13.61 24.600 30.292 4.17 3.956 10.044 3.491 27.540 3.964 5.69 3.190 0.940 1.805 2.360 69.905 14.225 3.22 64.43 56.18 263.00 47.791 495.00 624 1321 16.57 80.75 6.352 20.019 15.869 3.706 57.971 119.000 6.20 184.00 0.92 49.17 2297.00
63 22 3 75 older Male low 2 No NA DT HMII Alive alive 121794 28129 23.10 97.05 52.79 16.42 70.08 29.92 0.29 0.54 50.71 21.46 22.96 4.86 34.18 12.51 23.49 39.78 0.31 55.18 0.35 96.01 16.67 1.74 5.27 23.38 2.95 1.00 0.10 2.77 13.90 16.630 13.668 9.16 2.970 3.372 2.078 10.277 6.347 2.66 4.260 1.165 1.090 2.360 36.910 7.340 2.59 60.77 27.10 698.00 100.000 514.00 323 606 25.83 54.27 4.276 23.867 33.318 4.024 31.548 264.000 61.66 124.00 0.92 69.60 10443.75
64 22 5 75 older Male low 2 No NA DT HMII Alive alive 82157 17295 21.05 99.20 72.54 7.41 68.21 31.79 1.10 0.55 48.47 22.90 23.60 5.04 31.90 13.57 18.10 37.84 0.47 56.73 0.35 92.37 14.29 2.05 7.79 26.20 4.72 1.42 1.02 17.15 11.58 21.356 25.652 9.57 5.509 5.963 3.002 17.410 6.315 3.89 23.573 2.504 1.494 5.132 87.134 12.166 2.86 56.39 33.82 845.00 150.000 484.00 556 814 19.17 130.00 6.685 27.906 20.483 10.890 40.533 185.000 70.35 99.39 2.34 118.00 7899.00
65 22 8 75 older Male low 2 No NA DT HMII Alive alive 154810 27067 17.48 98.04 72.18 5.03 74.91 25.09 0.90 1.65 58.05 14.76 20.82 6.37 23.43 25.71 22.57 44.94 0.60 49.36 0.71 86.59 22.73 3.30 7.64 20.15 4.87 1.72 0.00 10.19 18.30 30.677 25.655 16.47 9.100 6.693 4.896 29.159 3.022 8.07 3.688 1.295 1.557 8.079 68.056 13.360 5.90 58.29 31.79 671.00 47.791 696.00 506 704 18.84 102.00 12.748 17.993 11.877 5.864 44.162 198.000 49.71 115.00 1.39 114.00 10443.75
66 22 21 75 older Male low 2 No NA DT HMII Alive alive 197936 15446 7.80 95.86 50.35 5.44 79.13 20.87 3.98 3.11 52.30 15.90 29.81 1.99 20.23 5.78 24.86 40.62 1.12 50.06 1.89 62.36 8.00 7.20 9.94 13.17 3.60 5.09 1.55 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
67 23 0 30 younger Female high 3 No Yes BTT HMII Alive s/p OHT alive 114586 35996 31.41 100.00 59.03 11.31 75.87 24.13 1.52 7.69 69.83 11.67 10.20 8.30 27.80 29.94 2.04 84.64 0.64 10.54 0.61 91.57 61.34 4.99 7.15 11.57 5.92 2.53 1.92 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
68 23 1 30 younger Female high 3 No Yes BTT HMII Alive s/p OHT alive NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 13.27 4.09 22.842 12.996 2.80 2.970 1.098 0.346 6.097 2.290 3.48 3.190 0.940 0.850 2.360 103.000 4.849 4.64 2.91 28.25 276.00 25.145 449.00 274 442 7.15 31.49 3.050 10.241 2.290 1.036 12.701 13.318 2.92 110.00 0.92 39.59 1621.00
69 23 3 30 younger Female high 3 No Yes BTT HMII Alive s/p OHT alive 349054 129419 37.08 95.25 62.35 8.81 79.64 20.36 2.72 4.45 57.70 13.93 25.89 2.48 57.14 13.49 8.69 74.29 3.76 12.35 1.41 85.87 62.53 3.41 5.43 7.67 1.40 1.92 1.06 72.99 13.61 25.476 15.689 9.16 4.312 3.544 2.168 12.912 2.432 6.98 3.190 1.430 0.850 5.769 30.560 4.849 4.20 59.53 23.70 268.00 56.470 507.00 350 496 15.38 108.00 3.050 23.400 13.860 7.400 61.926 158.000 3.85 123.00 0.92 108.00 2374.00
70 23 5 30 younger Female high 3 No Yes BTT HMII Alive s/p OHT alive 447309 176789 39.52 93.00 53.57 9.32 80.92 19.08 2.16 5.73 56.72 12.51 28.43 2.34 47.68 12.19 11.00 73.80 4.44 12.53 2.57 83.88 49.09 5.24 6.82 8.32 2.18 2.28 1.72 75.52 39.53 49.720 16.363 80.35 13.585 14.246 8.044 28.002 22.225 15.11 23.132 3.869 4.279 13.928 30.947 13.071 8.12 149.00 16.40 384.00 120.000 681.00 419 400 41.84 179.00 5.172 46.471 46.582 14.665 126.000 364.000 36.57 89.46 22.99 224.00 4716.00
71 23 8 30 younger Female high 3 No Yes BTT HMII Alive s/p OHT alive 558290 301468 54.00 95.62 47.73 7.04 79.13 20.87 3.43 7.49 53.19 13.48 30.32 3.01 36.36 14.54 12.10 70.55 5.15 11.89 3.51 79.79 52.89 6.98 8.50 7.82 1.92 3.09 1.96 55.93 9.15 32.389 17.862 2.80 2.970 3.716 1.989 10.711 2.290 7.10 NA NA 12.466 2.360 17.125 3.019 4.20 57.05 18.04 905.00 265.000 855.00 393 618 22.99 71.07 3.050 22.929 32.290 4.131 50.068 170.000 NA 97.14 17.70 80.29 10443.75
72 23 14 30 younger Female high 3 No Yes BTT HMII Alive s/p OHT alive 479402 362845 75.69 97.95 44.30 6.30 76.53 23.47 3.90 11.10 34.99 12.04 50.31 2.66 21.93 14.88 10.05 70.21 4.66 7.31 7.73 49.96 29.38 13.44 17.37 5.64 3.01 6.95 2.28 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
73 23 21 30 younger Female high 3 No Yes BTT HMII Alive s/p OHT alive 334942 191418 57.15 93.28 70.35 4.04 70.89 29.11 6.20 17.70 56.45 19.57 20.44 3.53 38.91 14.64 10.35 55.11 6.61 14.34 8.70 80.96 58.92 7.58 7.96 10.11 2.08 2.08 2.48 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
74 24 0 67 older Male low 2 Yes NA BTT HMII Died dead 129980 41600 32.00 91.40 39.03 2.85 49.63 50.37 7.02 11.55 28.37 29.11 20.79 21.72 19.43 28.34 9.80 69.59 4.90 20.33 6.13 31.15 33.60 20.15 22.27 0.28 4.25 16.54 2.09 33.99 28.59 16.040 25.430 12.01 7.920 6.660 3.530 19.960 3.020 7.39 10.910 3.870 5.620 7.350 29.050 11.190 6.77 80.92 26.34 485.00 156.000 684.00 574 531 28.71 233.00 9.210 37.430 28.250 15.220 112.000 158.000 41.01 59.87 50.92 139.00 4188.00
75 24 1 67 older Male low 2 Yes NA BTT HMII Died dead 59478 20182 33.93 89.07 44.50 10.08 60.93 39.07 2.10 2.70 42.88 13.69 17.66 25.77 13.06 46.12 3.13 81.35 1.16 16.11 0.83 37.58 6.12 5.52 11.64 0.06 1.49 2.76 4.07 4.02 3.20 2.320 19.970 2.65 2.810 2.640 2.960 405.000 1.500 2.63 2.130 0.460 0.450 0.860 99.660 13.000 2.78 12.80 206.00 266.00 84.610 329.00 197 841 3.21 39.72 8.990 27.180 6.360 2.830 565.000 23.210 11.10 10.23 1.22 38.63 1588.00
76 24 3 67 older Male low 2 Yes NA BTT HMII Died dead NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 6.69 9.68 5.520 72.480 2.65 2.810 2.640 2.960 12.830 1.500 3.81 3.490 3.700 1.140 1.870 30.080 8.600 3.57 26.36 120.00 339.00 166.000 633.00 484 808 12.17 90.21 79.330 79.230 12.440 4.520 64.780 75.100 48.83 38.04 18.56 55.88 3892.00
77 24 5 67 older Male low 2 Yes NA BTT HMII Died dead 26646 9754 36.61 98.69 58.32 7.57 64.88 35.12 2.06 0.55 46.50 12.62 17.70 23.18 15.07 53.31 12.50 83.40 1.10 15.64 1.76 28.12 0.00 7.54 16.46 0.55 1.92 6.04 13.00 0.58 3.20 3.220 34.140 2.65 2.810 2.640 2.960 39.370 1.500 2.63 2.930 0.420 0.020 0.540 66.160 8.470 3.38 5.65 51.46 66.05 106.000 497.00 1069 1138 2.90 29.91 6.510 29.470 5.480 1.550 51.690 2.870 3.21 8.86 43.82 41.52 535.00
78 24 8 67 older Male low 2 Yes NA BTT HMII Died dead 73641 21944 29.80 96.79 48.91 4.47 62.74 37.26 2.84 3.16 37.47 17.79 24.95 19.79 19.46 38.11 9.46 79.79 1.89 13.58 1.24 27.05 20.00 14.11 13.37 0.21 2.74 10.53 3.31 2.44 4.08 4.340 49.370 2.65 2.810 2.640 2.960 25.260 1.500 2.63 6.360 0.420 0.100 0.770 74.530 10.920 5.20 8.37 91.97 73.49 135.000 493.00 1207 1273 2.90 49.55 17.980 28.710 7.270 2.560 35.160 14.190 3.93 8.86 52.09 35.74 551.00
79 25 0 68 older Male low 2 No No BTT HMII Alive s/p OHT alive 44004 20612 46.84 43.65 15.61 21.54 49.64 50.36 10.37 0.57 15.94 45.15 33.18 5.73 24.69 5.68 20.25 44.58 1.55 36.17 0.88 67.23 27.27 32.35 15.48 20.02 4.49 10.94 2.76 71.72 47.35 26.349 37.381 158.00 33.334 10.660 8.044 35.402 46.417 6.87 NA 10.690 8.792 2.398 99.342 9.045 6.48 97.08 46.45 297.00 181.000 191.00 567 222 49.74 80.75 6.059 37.993 25.593 20.817 174.000 399.000 44.78 92.77 41.52 NA 4980.00
80 25 1 68 older Male low 2 No No BTT HMII Alive s/p OHT alive 99731 23424 23.49 91.81 41.33 10.89 35.24 64.76 11.83 1.62 18.71 59.21 16.19 5.89 28.16 5.89 18.53 39.98 4.66 42.16 2.33 84.07 2.63 22.55 15.21 40.28 6.07 9.70 3.96 29.43 17.11 20.632 25.281 48.50 22.252 5.900 4.692 222.000 11.168 3.91 72.616 4.422 2.060 2.360 191.000 11.918 7.37 68.02 138.00 324.00 136.000 149.00 347 223 30.17 80.75 4.036 30.061 12.370 7.619 280.000 331.000 21.43 70.73 2.56 274.00 3581.00
81 25 3 68 older Male low 2 No No BTT HMII Alive s/p OHT alive NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 74.26 46.69 17.521 32.607 125.00 34.355 9.340 7.512 18.328 13.879 4.56 190.000 13.031 14.904 2.360 35.125 11.629 8.85 37.42 35.14 218.00 222.000 173.00 1649 290 71.92 85.48 3.557 52.272 44.557 15.485 186.000 514.000 30.19 168.00 48.69 743.00 1283.00
82 25 5 68 older Male low 2 No No BTT HMII Alive s/p OHT alive NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 63.06 27.96 35.932 31.732 44.55 16.008 3.051 5.621 18.791 10.391 5.03 152.000 11.673 14.663 1.980 35.584 10.919 6.56 45.46 42.92 420.00 180.000 216.00 2058 291 95.02 121.00 5.314 63.342 43.034 23.444 164.000 411.000 28.75 257.00 28.67 330.00 1677.00
83 25 8 68 older Male low 2 No No BTT HMII Alive s/p OHT alive 129637 50001 38.57 90.65 44.41 6.05 30.66 69.34 17.12 4.05 10.62 66.50 19.60 3.28 26.41 3.46 13.37 39.74 7.15 39.49 11.91 71.97 2.70 32.48 33.14 43.91 7.81 22.70 3.82 40.52 23.75 22.842 21.835 74.36 13.123 5.021 5.931 27.077 9.272 4.67 134.000 12.603 9.710 2.360 53.765 8.759 6.48 60.77 35.38 426.00 223.000 224.00 1195 211 57.75 93.20 3.857 32.945 29.201 15.485 185.000 523.000 35.17 121.00 27.51 602.00 4088.00
84 25 14 68 older Male low 2 No No BTT HMII Alive s/p OHT alive 134368 46363 34.50 88.32 34.25 4.63 32.47 67.53 12.86 8.38 8.91 64.89 22.88 3.32 24.78 3.89 13.58 36.16 6.01 40.33 13.77 72.11 1.89 29.89 26.36 42.80 6.17 15.97 3.29 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
85 27 0 64 older Male low 2 No Yes BTT HMII Alive s/p OHT alive 59881 8971 14.98 97.40 50.06 9.57 75.84 24.16 3.59 8.13 64.83 13.40 15.67 6.10 19.31 18.81 16.83 76.67 6.10 6.82 2.00 88.16 47.06 10.53 11.24 10.41 9.93 6.94 11.93 16.38 67.35 180.000 62.930 127.00 2.970 36.468 4.794 25.690 5.645 46.84 139.000 1.295 17.624 2.360 148.000 9.904 9.46 143.00 64.82 261.00 507.000 809.00 891 476 76.81 136.00 18.740 113.000 98.896 20.817 358.000 925.000 91.47 168.00 123.00 653.00 761.00
86 27 1 64 older Male low 2 No Yes BTT HMII Alive s/p OHT alive 60193 23874 39.66 96.72 58.83 16.24 80.37 19.63 1.87 3.31 68.58 10.62 14.72 6.08 21.33 22.83 3.80 80.61 3.63 8.03 0.33 94.16 57.26 2.96 5.01 10.19 4.72 1.41 1.24 3.57 32.49 145.000 59.668 35.43 2.970 12.151 4.287 29.390 5.645 54.69 26.852 0.940 6.660 2.360 142.000 12.494 6.13 91.76 118.00 294.00 354.000 659.00 811 759 35.98 83.92 12.544 90.832 44.557 39.375 223.000 830.000 67.87 147.00 58.83 260.00 528.00
87 27 3 64 older Male low 2 No Yes BTT HMII Alive s/p OHT alive NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 8.66 39.21 135.000 67.453 61.20 3.273 20.290 5.826 23.842 5.819 45.26 64.203 1.569 9.863 3.090 66.315 10.766 5.31 155.00 68.00 355.00 420.000 945.00 1063 603 56.22 136.00 16.032 94.647 49.105 19.468 230.000 804.000 72.71 206.00 83.10 435.00 814.00
88 27 5 64 older Male low 2 No Yes BTT HMII Alive s/p OHT alive 135335 27834 20.57 97.35 44.75 5.61 63.22 36.78 8.49 17.63 39.01 23.16 30.72 7.11 17.53 10.38 12.16 42.70 4.93 19.28 4.68 67.37 4.10 26.64 17.76 19.21 14.54 14.47 10.60 2.18 38.51 215.000 76.341 16.50 2.320 10.862 2.224 8.932 1.520 53.96 36.506 1.920 7.437 1.980 105.000 8.874 7.63 77.70 68.16 389.00 204.000 723.00 1321 487 50.26 160.00 12.674 125.000 27.485 45.764 177.000 710.000 55.82 360.00 90.56 239.00 351.00
89 27 8 64 older Male low 2 No Yes BTT HMII Alive s/p OHT alive 247113 62042 25.11 96.41 43.93 14.82 78.42 21.58 2.52 5.24 65.35 12.22 17.53 4.90 20.39 17.20 2.93 77.86 2.11 8.78 2.94 84.64 9.70 10.64 13.93 9.90 11.59 8.48 3.51 22.57 29.97 91.301 58.481 24.03 7.004 8.899 5.515 27.077 7.972 25.93 37.523 2.650 3.138 5.142 70.641 12.783 7.59 94.97 56.14 551.00 288.000 717.00 1003 373 39.51 130.00 9.800 75.273 27.655 7.838 145.000 524.000 52.18 137.00 41.89 251.00 338.00
90 27 14 64 older Male low 2 No Yes BTT HMII Alive s/p OHT alive 142053 56983 40.11 93.01 62.72 12.87 85.10 14.90 0.69 1.64 68.02 8.40 21.03 2.55 17.03 13.68 1.08 83.33 0.37 7.38 0.26 79.00 16.07 3.01 5.85 5.16 5.24 1.77 0.70 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
91 27 21 64 older Male low 2 No Yes BTT HMII Alive s/p OHT alive 60384 17029 28.20 93.65 40.96 21.36 83.80 16.20 1.47 2.32 63.52 9.69 23.80 2.99 23.55 15.58 0.91 78.16 1.09 8.13 1.00 83.65 17.72 4.70 8.42 5.99 7.22 3.76 1.56 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
92 28 0 25 younger Female high 3 No Yes BTT HMII Alive s/p OHT alive 47645 37377 78.45 94.61 2.47 9.41 78.56 17.02 1.71 4.63 34.94 16.09 44.77 4.21 4.35 28.99 59.42 67.26 3.10 26.22 7.50 72.82 53.90 13.50 28.20 3.04 7.70 7.67 0.96 9.61 35.14 22.350 20.460 3.79 22.660 3.480 3.530 9.020 3.210 9.75 7.060 1.210 1.550 0.770 20.320 2.980 2.78 20.67 13.18 290.00 37.840 754.00 653 382 20.62 170.00 9.210 42.210 9.160 3.660 54.980 131.000 33.28 78.76 74.92 178.00 1807.00
93 28 1 25 younger Female high 3 No Yes BTT HMII Alive s/p OHT alive 87452 43025 49.20 91.54 1.98 26.71 92.06 6.76 0.77 4.67 47.21 4.70 45.17 2.92 6.06 18.18 60.61 81.01 3.95 14.10 12.04 85.97 79.84 5.82 14.15 1.11 4.77 2.84 0.00 12.71 13.67 11.390 16.950 2.77 3.020 2.690 2.960 29.730 1.790 5.89 3.490 1.610 2.220 2.640 103.000 6.370 5.67 25.55 37.67 369.00 23.230 830.00 341 373 18.73 111.00 6.740 23.260 13.120 5.700 76.070 128.000 32.15 77.14 17.37 97.61 3031.00
94 28 3 25 younger Female high 3 No Yes BTT HMII Alive s/p OHT alive 124056 80873 65.19 95.41 0.37 14.36 90.47 5.98 0.39 0.60 41.84 4.26 51.08 2.81 18.82 35.29 43.53 86.97 0.10 11.32 1.10 75.49 12.12 3.80 14.94 0.24 0.88 3.25 0.00 37.44 26.01 28.120 25.360 9.28 13.970 5.470 5.150 38.770 3.780 11.03 16.650 3.350 5.760 5.140 32.780 7.800 5.95 60.09 24.86 338.00 39.760 682.00 2208 349 27.24 174.00 11.700 30.960 38.010 10.120 76.070 213.000 35.85 86.63 43.82 185.00 2088.00
95 28 5 25 younger Female high 3 No Yes BTT HMII Alive s/p OHT alive NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 27.69 16.65 26.730 24.380 9.95 7.920 2.820 4.000 58.110 1.790 8.23 7.760 1.750 3.200 3.390 44.050 4.860 3.77 51.92 25.90 506.00 38.490 451.00 1325 306 19.69 141.00 6.280 18.330 27.170 7.470 68.020 184.000 35.13 89.68 25.77 160.00 2691.00
96 28 8 25 younger Female high 3 No Yes BTT HMII Alive s/p OHT alive 87840 57990 66.02 95.60 0.11 15.80 89.00 9.49 1.56 5.02 45.89 7.18 43.54 3.39 6.10 19.51 56.71 84.23 3.14 9.95 10.70 72.13 52.73 7.06 17.53 0.74 3.13 5.13 0.13 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
97 30 0 49 younger Male high 3 No NA DT HMII Alive alive 196315 122053 62.17 95.37 60.66 22.66 91.10 8.90 0.45 4.95 85.57 6.30 5.42 2.71 13.13 28.32 20.05 86.32 2.45 5.42 0.96 98.68 94.19 2.50 2.96 4.63 1.24 0.33 0.89 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
98 30 1 49 younger Male high 3 No NA DT HMII Alive alive 91909 37622 40.93 96.10 43.22 38.85 95.48 4.52 0.14 2.19 85.07 3.09 10.33 1.51 21.03 27.23 9.08 88.84 1.13 3.91 0.23 98.77 88.27 1.16 1.16 2.34 0.38 0.21 0.45 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
99 30 5 49 younger Male high 3 No NA DT HMII Alive alive 153762 86281 56.11 95.83 65.54 24.24 91.12 8.88 0.65 2.84 81.43 6.30 9.62 2.65 21.14 28.73 15.89 83.00 1.97 6.74 0.36 98.22 93.16 3.20 2.29 5.47 1.11 0.77 1.56 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
100 30 8 49 younger Male high 3 No NA DT HMII Alive alive 82406 47485 57.62 92.71 65.75 17.46 91.79 8.21 1.08 1.99 76.35 5.70 15.41 2.54 20.56 26.95 11.99 78.67 1.35 7.97 0.28 97.55 85.62 2.65 2.56 5.19 1.18 0.86 1.79 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
101 32 0 72 older Male high 4 Yes NA BTT HMII Died dead NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 2.77 2.98 33.241 14.342 3.42 2.970 0.420 0.853 3.452 2.290 13.82 3.190 0.940 0.850 2.360 50.340 2.770 5.07 17.40 64.31 653.00 26.894 241.00 316 496 12.21 15.96 3.050 12.001 8.034 2.282 17.749 119.000 3.85 236.00 0.92 44.32 1793.00
102 32 1 72 older Male high 4 Yes NA BTT HMII Died dead NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 2.77 24.67 100.000 10.761 20.24 2.970 8.281 0.853 136.000 3.964 19.25 3.688 0.940 1.090 2.360 130.000 11.629 6.13 45.48 139.00 541.00 88.075 437.00 264 768 20.97 77.56 5.231 40.568 66.481 1.717 408.000 245.000 55.44 141.00 16.95 74.91 10443.75
103 32 3 72 older Male high 4 Yes NA BTT HMII Died dead 424375 21971 5.18 71.78 56.98 18.53 79.84 20.16 3.08 0.51 57.91 14.07 24.06 3.97 31.74 15.95 13.65 57.94 0.65 28.51 0.17 93.57 53.33 2.87 9.69 15.61 3.87 2.16 3.99 2.18 6.65 125.000 14.770 4.61 2.320 14.644 1.590 22.499 1.520 18.98 2.120 1.920 1.450 1.980 72.656 11.749 1.99 23.32 48.13 195.00 286.000 323.00 579 874 10.05 63.62 2.448 45.479 16.356 0.944 52.863 60.307 4.34 61.08 0.39 52.69 813.00
104 32 5 72 older Male high 4 Yes NA BTT HMII Died dead NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 2.77 10.24 45.698 19.436 2.80 2.970 13.723 0.458 31.010 2.290 9.91 3.190 0.940 0.850 2.360 109.000 9.904 3.42 31.87 57.12 177.00 35.314 337.00 361 834 30.99 61.08 3.916 39.476 11.877 2.878 32.504 142.000 2.92 154.00 0.92 69.60 1160.00
105 32 8 72 older Male high 4 Yes NA BTT HMII Died dead 177249 103442 58.36 76.40 15.43 5.64 65.13 34.87 5.21 0.20 35.56 27.91 31.90 4.62 26.60 8.28 13.24 67.89 0.29 20.13 0.00 78.60 22.22 5.50 16.09 25.56 6.80 4.73 0.89 2.18 2.98 74.914 45.496 2.31 2.320 4.146 1.590 63.920 1.520 21.62 2.120 20.861 1.450 1.980 773.000 19.378 33.60 45.46 368.00 630.00 220.000 265.00 523 1437 110.00 102.00 4.899 63.342 35.967 3.045 101.000 80.459 15.43 193.00 0.39 234.00 2752.00

1.2 Categorical associations

For each pair of categories, we tested statistical independence using Fisher’s exact test, and ranked the results by \(p\)-value.

# make sure column names are valid R variables before fitting
df.HMII.valid <- df.HMII
colnames(df.HMII.valid) <- make.names(colnames(df.HMII), unique = T)

# get one value per patient
df.HMII.factors <- df.HMII.valid[match(levels(df.HMII.valid$PatientID), df.HMII.valid$PatientID),]

# compute all pairwise contingency tables
factorpairs <- as.list(as.data.frame(combn(groups, 2)))
tables <- lapply(factorpairs, function(this_pair){
    table(df.HMII.factors[, as.character(this_pair[1])], df.HMII.factors[, as.character(this_pair[2])])
})

# compute all Fisher exact tests
fishertests <- lapply(tables, function(this_table) fisher.test(this_table))
fisher.p <- lapply(fishertests, function(x) x$p)
fisher.q <- as.list(p.adjust(fisher.p, method = "BH"))
fisher.OR <- lapply(fishertests, function(x) x$estimate)
fisher.CI <- lapply(fishertests, function(x) x$conf.int)

# error check
fisher.p[is.null(fisher.p)] <- NA
fisher.OR[is.null(fisher.OR)] <- NA
fisher.CI[is.null(fisher.CI)] <- c(NA, NA)

# collect results
fisher.all <- data.frame(
    factorA =  unlist(lapply(factorpairs, function(x) as.character(x[1]))),
    factorB =  unlist(lapply(factorpairs, function(x) as.character(x[2]))),
    OddsRatio = unlist(fisher.OR),
    lowerCL = do.call(rbind, fisher.CI)[,1],
    upperCL = do.call(rbind, fisher.CI)[,2],
    pvalue = unlist(fisher.p),
    qvalue = unlist(fisher.q),
    stars = unlist(lapply(unlist(fisher.p), p2stars)))

qtable <- fisher.all
qtable[,-c(1,2,8)] <- signif(fisher.all[,-c(1,2,8)], 3)
qtable.ordered <- qtable[order(qtable$pvalue),]

qtable.ordered %>%
    kable(escape = F, row.names = F, caption = "Table 2: Categorical associations") %>%
    kable_styling(bootstrap_options = c("striped", 
                                        "hover", 
                                        "condensed",
                                        "responsive"),
                  font_size = 12)
Table 2: Categorical associations
factorA factorB OddsRatio lowerCL upperCL pvalue qvalue stars
AgeGreater60 LowIntermacs 7.8800 0.83500 124.00 0.0648 0.81 ..
RVAD Survival 5.3700 0.41900 94.60 0.1310 0.81 .
Sex Sensitized 0.0971 0.00107 2.49 0.1900 0.81 .
RVAD Sensitized 0.0000 0.00000 3.41 0.2000 0.81 .
RVAD VAD.Indication 0.0000 0.00000 2.39 0.2600 0.81 .
AgeGreater60 Survival 4.6300 0.36900 269.00 0.3250 0.81 .
LowIntermacs Survival 0.2970 0.01990 2.96 0.3360 0.81 .
AgeGreater60 Sex 2.8300 0.24000 44.70 0.3470 0.81 .
AgeGreater60 RVAD 0.3540 0.02240 4.17 0.3470 0.81 .
Sex LowIntermacs 2.1600 0.18600 33.40 0.6170 1.00 .
LowIntermacs RVAD 0.4630 0.02990 5.39 0.6170 1.00 .
AgeGreater60 Sensitized 1.8600 0.07690 49.00 1.0000 1.00 .
AgeGreater60 VAD.Indication 1.4700 0.14600 21.50 1.0000 1.00 .
Sex RVAD 1.4300 0.09300 89.20 1.0000 1.00 .
Sex VAD.Indication 1.9400 0.13500 118.00 1.0000 1.00 .
Sex Survival 1.9400 0.13500 118.00 1.0000 1.00 .
LowIntermacs Sensitized 1.0000 0.04220 23.70 1.0000 1.00 .
LowIntermacs VAD.Indication 0.7610 0.07280 7.87 1.0000 1.00 .
Sensitized VAD.Indication 0.0000 0.00000 Inf 1.0000 1.00 .
Sensitized Survival 0.0000 0.00000 58.40 1.0000 1.00 .
VAD.Indication Survival 1.2400 0.08080 13.80 1.0000 1.00 .

We plotted the conditional distributions for each pair of categorical labels, using the GGally package.

ggpairs(df.HMII.valid, columns = groups) + ggplot2::theme_grey(base_size = 7)
Figure 1: Conditional distributions

Figure 1: Conditional distributions

2 Identifying biomarker associations

2.1 Linear mixed-effect model

We identified statistical associations in the longitudinal data using a linear mixed effect model implemented in the lmerTest package, which builds upon the commonly used lme4 package. We specifically used a random intercept model, of the form

lmer(y ~ Group + Time + Group:Time + (1|PatientID)),

where y is a biomarker, Group and Time are both factor variables, Group:Time denotes their interaction, and the (1|PatientID) term specifies a random intercept for each patient to account for the repeated measures. There are therefore 3 hypotheses being tested – one for each of the terms in this model. Namely, the first tests the equivalence of means across group levels, the second tests the equivalence of means across timepoints, and the third tests that the effect between group levels changes in time.

In implementing the proper contrasts and statistical tests in R, we followed the recommendations here and here, by using the zero-sum contrast contr.sum, and conducting tests based on the type-III sums of squares by using the Anova(..., type="III") function in the car package. Type-III sums of squares test a main effect after the other main effect and interaction. The significance estimates are therefore valid in the presence of significant interactions.

# make sure column names are valid R variables before fitting
df.HMII.valid <- df.HMII
colnames(df.HMII.valid) <- make.names(colnames(df.HMII), unique = T)

# function to fit a two-way repeated measures anova
anova.fit <- function(this_group, this_variable, this_df){
    this_df$Time <- as.factor(this_df$Time)
    this_formula <- as.formula(paste0(this_variable, " ~ ", this_group, " * Time + (1|PatientID)"))
    # set contrasts
    contrasts(this_df[[this_group]]) <- contr.sum 
    contrasts(this_df$Time) <- contr.sum
    # fit model
    this_model <- lmer(this_formula, data = this_df)
    return(list(model = this_model, group = this_group, variable = this_variable))
}

# function to get stats on the model fit
get.anovatable <- function(anova.fit.obj){
    # unpack
    this_model <- anova.fit.obj$model
    this_variable <- anova.fit.obj$variable
    this_group <- anova.fit.obj$group
    # compute p-values
    this_aov <- as.data.frame(Anova(this_model, type="III"))[-1,]
    # annotate with additional variables
    this_aov$parameter <- rownames(this_aov)
    this_aov$variable <- rep(this_variable, nrow(this_aov))
    this_aov$group <- rep(this_group, nrow(this_aov))
    return(this_aov)
}

# create the list of variable ~ group comparisons to run mclapply over
groups.by.vars <- unlist(lapply(make.names(groups, unique = T), function(this_group){
    lapply(make.names(colnames(df.HMII[,bcellcyto]), unique = T), function(this_variable){
        list(group = this_group, variable = this_variable)
    })
}), recursive = F)

# fit all models in parallel
models.HMII <- mclapply(groups.by.vars, function(this_e){
    anova.fit(this_e$group, this_e$variable, df.HMII.valid)
},  mc.cores = detectCores()-1)

# compute statistics in parallel
anovatable.0 <- mclapply(models.HMII, function(this_model_obj){
    get.anovatable(this_model_obj)
}, mc.cores = detectCores()-1)

# include original variable names and add an index for splitting on later
anovatable <- lapply(1:length(anovatable.0), function(ii){
    this_table <- anovatable.0[[ii]]
    name.ix <- match(unique(this_table$variable), colnames(df.HMII.valid))
    this_table$variable.valid <- this_table$variable
    this_table$variable <- rep(colnames(df.HMII)[name.ix], nrow(this_table))
    this_table$testid <- rep(ii, nrow(this_table))
    this_table
})

2.2 Local false discovery rate

In all, there were 469 models fit, each with 3 terms, for a total of 1407 hypotheses tested. We estimated local false discovery rates and \(q\)-values using the fdrtool package, which alsp produced three figures illustrating the mixture model of the \(p\)-value distribution and the local false discovery rate.

# compute fdr
models <- as.data.frame(do.call(rbind, anovatable))
fdrobj <- fdrtool(models$`Pr(>Chisq)`, statistic = "pvalue", verbose = F)
Figure 2: Local false discovery rate

Figure 2: Local false discovery rate

models$qval <- fdrobj$qval
models$lfdr <- fdrobj$lfdr
anovatable.fdr <- split(models, models$testid)

2.3 Statistically significant results

We ranked the discoveries by \(p\)-value, and reported all results with \(q<\) 0.1 as statistically significant.

# collect pvalues and qvalues into matrix
models.fdr <- do.call(rbind, anovatable.fdr)
qmat <- dcast(models.fdr, group+parameter~variable, value.var = "qval")
pmat <- dcast(models.fdr, group+parameter~variable, value.var = "Pr(>Chisq)")
lfdrmat <- dcast(models.fdr, group+parameter~variable, value.var = "lfdr")

# find significant results and mark with text qvalue
qmask <- signif(qmat[,-c(1,2)], 2)
qmask[qmat[,-c(1,2)] > FDRcutoff] <- ""
keep.signif <- apply(t(qmask), 1, function(x) !all(x == ""))
# 
# # create heatmap of results
# pheatmap(-log10(t(qmat[,-c(1,2)])[keep.signif,c(3,1,2,4:nrow(pmat))]),
#          color = colorRampPalette(brewer.pal(n = 9, name = "Greens"))(4),
#          breaks = c(seq(0, -log10(0.1), length.out = 2),
#                     seq(-log10(0.1)+0.001, max(-log10(t(qmat[,-c(1,2)])[keep.signif,])), length.out = 2)),
#          labels_col = pmat$parameter[c(3,1,2,4:nrow(pmat))],
#          display_numbers = t(qmask)[keep.signif,c(3,1,2,4:nrow(pmat))],
#          number_color = "white",
#          fontsize_number = 6,
#          cluster_cols = F,
#          cluster_rows = F,
#          gaps_col = seq(3, nrow(pmat), by = 3),
#          border_color = NA,
#          legend = F,
#          main = paste0("ANOVA results (FDR=", FDRcutoff, ")"))

# gather significant results into a table
resulttable <- do.call(rbind, apply(which(qmask != "", arr.ind = T), 1, function(x){
    data.frame(biomarker = colnames(qmat)[-c(1,2)][x[2]],
               group = qmat$group[x[1]], 
               parameter = qmat$parameter[x[1]], 
               pvalue = pmat[,-c(1,2)][x[1], x[2]], 
               qvalue = qmat[,-c(1,2)][x[1], x[2]],
               lfdr = lfdrmat[,-c(1,2)][x[1], x[2]],
               stars = p2stars(pmat[,-c(1,2)][x[1], x[2]]))
}))

resulttable.sort <- resulttable[order(resulttable$pvalue), , drop = F]
resulttable.sort[,c("pvalue","qvalue")] <- signif(resulttable.sort[,c("pvalue","qvalue")], 3)
rownames(resulttable.sort) <- 1:nrow(resulttable.sort)
resulttable.sort %>%
    # mutate(
    #     pvalue = cell_spec(pvalue, color = ifelse(resulttable.sort$pvalue > pcutoff, "grey", "green")),
    #     qvalue = cell_spec(qvalue, color = ifelse(resulttable.sort$qvalue > FDRcutoff, "grey", "green"))
    # ) %>% 
    kable(escape = F, row.names = T, caption = "Table 3: Statistically significant results") %>%
    kable_styling(bootstrap_options = c("striped", 
                                        "hover", 
                                        "condensed",
                                        "responsive"),
                  font_size = 10) %>%
    scroll_box(width = "100%")
Table 3: Statistically significant results
biomarker group parameter pvalue qvalue lfdr stars
1 MCP-1 VAD.Indication VAD.Indication:Time 1.00e-07 0.000112 0.0001117 .****
2 G-CSF RVAD Time 2.00e-07 0.000112 0.0001117 .****
3 MCP-1 VAD.Indication Time 3.00e-07 0.000112 0.0004958 .****
4 CD27+IgD-IgM+ switched memory Sensitized Time 7.00e-07 0.000208 0.0118223 .****
5 num lymph AgeGreater60 AgeGreater60 1.02e-05 0.002530 0.0561648 .****
6 IL-8 RVAD Time 1.00e-04 0.017700 0.0561648 .***
7 G-CSF RVAD RVAD:Time 1.01e-04 0.017900 0.0655772 .***
8 IP-10 VAD.Indication VAD.Indication:Time 1.54e-04 0.023800 0.1170453 .***
9 CD19+CD268+ RVAD Time 5.02e-04 0.053200 0.1170453 .***
10 CD268 of +27-38++transitional AgeGreater60 AgeGreater60:Time 6.17e-04 0.059200 0.1170453 .***
11 GRO Sensitized Time 7.11e-04 0.063300 0.1170453 .***
12 CD19 of live lymph Sex Time 7.78e-04 0.066000 0.1170453 .***
13 CD27+IgD-IgM+ switched memory Sensitized Sensitized:Time 8.15e-04 0.067300 0.1170453 .***
14 CD19+27+IgD-38++IgG ASC RVAD Time 8.60e-04 0.068800 0.1170453 .***
15 TNF-a VAD.Indication VAD.Indication:Time 8.64e-04 0.068900 0.1170453 .***
16 sCD40L Sensitized Time 9.34e-04 0.071200 0.1170453 .***
17 IL-1b LowIntermacs Time 1.20e-03 0.077900 0.1170453 .**
18 CD19+CD268+ AgeGreater60 Time 1.41e-03 0.082000 0.1170453 .**
19 CD19+27+IgD-38++IgG ASC LowIntermacs LowIntermacs 1.51e-03 0.083700 0.1170453 .**
20 CD19+CD268+ Survival Time 1.53e-03 0.084000 0.1170453 .**
21 CD19+CD5+CD11b+ VAD.Indication Time 1.58e-03 0.084800 0.1170453 .**
22 IL-5 LowIntermacs LowIntermacs 1.59e-03 0.084900 0.1170453 .**
23 TNF-a VAD.Indication VAD.Indication 1.59e-03 0.085000 0.1170453 .**
24 CD27-IgD+ mature naive AgeGreater60 Time 1.67e-03 0.086000 0.2201208 .**
25 G-CSF Survival Time 1.84e-03 0.091300 0.3213720 .**

2.4 Post-hoc tests

# long
df.long <- melt(df.HMII, id.vars = colnames(df)[1:13])
names(df.long) <- make.names(names(df.long))

# list of identifiers for significant results to plot
unique_results <- unique(resulttable.sort[,c("biomarker","group")])

# compute group means and CI using emmeans
posthoc.means <- lapply(1:nrow(unique_results), function(ii){
     testid <- unique(models.fdr$testid[models.fdr$variable == unique_results$biomarker[ii] & 
                                        models.fdr$group == unique_results$group[ii]])
     posthoc_group <- emmeans(models.HMII[[testid]]$model, 
                             as.character(unique_results$group[ii]), 
                             by = "Time"
                             #lmer.df = "satterthwaite"
                             )
     return(posthoc_group)
})

# compute posthoc tests
posthoc.tests.0 <- lapply(posthoc.means, function(this_means){
     tests <- contrast(this_means, "pairwise", reverse = T)
     posthoc_summary <- rbind(tests, adjust = "none")
     posthoc.df <- as.data.frame(posthoc_summary)
     #posthoc.df$bonferroni <- p.adjust(posthoc.df$p.value, method = "bonferroni")
     #posthoc.df$stars <- sapply(posthoc.df$p.value, p2stars)
     return(posthoc.df)
})

# get longform for FDR adjustment
posthoc.tests.all <- do.call(rbind, lapply(1:length(posthoc.tests.0), function(ii){
    posthoc.tests.0[[ii]]$id <- rep(ii, nrow(posthoc.tests.0[[ii]]))
    posthoc.tests.0[[ii]]
}))

# compute q-values over all tests
posthoc.tests.all$q.value <- p.adjust(posthoc.tests.all$p.value, method = "BH")
posthoc.tests.all$stars <- sapply(posthoc.tests.all$p.value, p2stars)
posthoc.tests <- split(posthoc.tests.all, posthoc.tests.all$id)

# collapse posthoc.means into dataframes for plotting
posthoc.means.df <- lapply(posthoc.means, function(this_means){
    this_df <- as.data.frame(this_means)
    this_df
})

We did posthoc tests for all mixed effect models previously flagged as significant (\(q<\) 0.1). Each grouping was evaluated at every timepoint, using the emmeans package to compute confidence intervals and statistical significance of the observed effects.

The emmeans package package provides methods for obtaining estimated marginal means (EMMs, also known as least-squares means) for factor combinations in mixed-effect models. Estimated marginal means (see Searle et al. 1980) are popular for summarizing linear models that include factors. According to its documentation, the EMMs are based on the mixed-effect model – not directly on data. They are computed on a reference grid consisting of all combinations of factor levels, with each covariate set to its average. EMMs are then predictions on this reference grid, or marginal averages thereof (equally weighted by default). For balanced experimental designs, they are just the marginal means. For unbalanced data, they in essence estimate the marginal means you would have observed that the data arisen from a balanced experiment.

After all models were evaluated, we adjusted the 123 resulting \(p\)-values using the Benjamini-Hochberg method to obtain \(q\)-values.

2.5 Post-hoc figures

We plotted results for each of the statistically significant associations (\(q<\) 0.1). We plotted time on the x-axis, and biomarker level on the y-axis, with patients in different groups shown using different colors. Values for each individual patient are shown in the background with high transparency. Superimposed on top are the estimated marginal means and standard error bars found by emmeans, which we pieced together for display using LOESS regression.

# make all timeseries plots
plots.ts <- mclapply(1:nrow(unique_results), function(ii){
    this_var <- as.character(unique_results[ii, "biomarker"])
    this_groups <- as.character(unique_results[ii, "group"])
    this_df.0 <- droplevels(subset(df.long, df.long$variable == this_var))
    this_df <- droplevels(this_df.0[!is.na(this_df.0$value),]) # drop NAs
    
    # get emmeans with CI
    this_posthoc <- posthoc.means.df[[ii]]
    
    this_df.0 <- droplevels(subset(df.long, df.long$variable == this_var))
    this_df <- droplevels(this_df.0[!is.na(this_df.0$value),])
    
    gg.em <- ggplot(this_posthoc) +
        aes(x = as.numeric(as.character(Time)), y = emmean) + 
        aes_string(group = this_groups, 
                   color = this_groups, 
                   fill = this_groups) +
        geom_line(data = this_df, 
                  aes(group = PatientID,
                      y = value), 
                      alpha = .2, 
                      position=position_dodge(0.5)) +
        geom_point(data = this_df, 
                  aes(group = PatientID,
                      y = value), 
                      alpha = .1, 
                      position=position_dodge(0.5)) +
        geom_point(alpha = 1, position=position_dodge(0.5)) + 
        geom_errorbar(aes(ymin=emmean-SE, ymax=emmean+SE), width=1,
                      position=position_dodge(0.5)) +
        stat_smooth(method = "loess",
                    aes_string(group = this_groups),
                    size = 1,
                    span = .5,
                    se = F,
                    alpha = 0.1,
                    position=position_dodge(0.5)) +
        scale_color_aaas() + scale_fill_aaas() +
        xlab("Time (days after surgery)") +
        ylab(this_var) + 
        scale_x_continuous(breaks = unique(this_df$Time)) +
        ggtitle(paste(this_var)) +
        theme_classic()
    gg.em
}, mc.cores = detectCores()-1)

names(plots.ts) <- paste(unique_results$biomarker, unique_results$group, sep = " | ")



# # make all timeseries plots
# plots.ts <- mclapply(1:nrow(unique_results), function(ii){
#     this_var <- as.character(unique_results[ii, "biomarker"])
#     this_groups <- as.character(unique_results[ii, "group"])
#     this_df.0 <- droplevels(subset(df.long, df.long$variable == this_var))
#     this_df <- droplevels(this_df.0[!is.na(this_df.0$value),])
#     ggplot(this_df) +
#         aes(x = Time, y = value, group = PatientID) +
#         aes_string(color = this_groups, fill = this_groups) +
#         geom_line(alpha = 0.2) + 
#         geom_point(alpha = 0.1) + 
#         stat_summary(fun.y = mean, 
#                      aes_string(group = this_groups), 
#                      geom=c("point"), 
#                      position = position_dodge(.5)) + 
#         stat_summary(fun.y = mean, 
#                      aes_string(group = this_groups), 
#                      geom=c("line"), 
#                      size = 2, 
#                      position = position_dodge(.5)) + 
#         # stat_smooth(method = "loess", 
#         #             aes_string(group = this_groups), 
#         #             size = .01, 
#         #             span = 1, 
#         #             alpha = 0.1) + 
#         stat_sum_df(function(x) mean_cl_normal(x, conf.int = 0.68), 
#                     mapping = aes_string(group = this_groups), 
#                     position = position_dodge(.5)) + 
#         scale_color_aaas() + scale_fill_aaas() +
#         xlab("Time (days after surgery)") +
#         ylab(this_var) + 
#         scale_x_continuous(breaks = unique(this_df$Time)) +
#         ggtitle(paste(this_var)) +
#         theme_classic()
# }, mc.cores = detectCores()-1)
# names(plots.ts) <- paste(unique_results$biomarker, unique_results$group, sep = " | ")



# print out results
for(ii in 1:length(plots.ts)){
    cat("  \n###", names(plots.ts)[ii], "\n")
    
    suppressWarnings(print(plots.ts[[ii]]))
    
    cat("  \n")
    
    testid <- unique(models.fdr$testid[models.fdr$variable == unique_results$biomarker[ii] & 
                                           models.fdr$group == unique_results$group[ii]])
    this_anova <- anovatable.fdr[[testid]][,c("variable", "group", "parameter", "Chisq", "Df", "Pr(>Chisq)", "qval", "lfdr")]
    this_anova$stars <- sapply(this_anova$`Pr(>Chisq)`, p2stars)
    print(this_anova %>%
    # mutate(
    #     pvalue = cell_spec(pvalue, color = ifelse(resulttable.sort$pvalue > pcutoff, "grey", "green")),
    #     qvalue = cell_spec(qvalue, color = ifelse(resulttable.sort$qvalue > FDRcutoff, "grey", "green"))
    # ) %>% 
    kable(escape = F, row.names = F, caption = "Table 4a: Mixed effect model results") %>%
    kable_styling(bootstrap_options = c("striped", 
                                        "hover", 
                                        "condensed",
                                        "responsive"),
                  font_size = 10) %>%
    scroll_box(width = "100%"))
   
    cat("  \n")
    

    
    print(posthoc.tests[[ii]] %>%          
    # mutate(
    #     pvalue = cell_spec(pvalue, color = ifelse(resulttable.sort$pvalue > pcutoff, "grey", "green")),
    #     qvalue = cell_spec(qvalue, color = ifelse(resulttable.sort$qvalue > FDRcutoff, "grey", "green"))
    # ) %>% 
    kable(escape = F, row.names = T, caption = "Table 4b: Post-hoc test results") %>%
    kable_styling(bootstrap_options = c("striped", 
                                        "hover", 
                                        "condensed",
                                        "responsive"),
                  font_size = 10) %>%
    scroll_box(width = "100%"))
    cat("  \n")

    
    
    
}

2.5.1 MCP-1 | VAD.Indication

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
MCP-1 VAD.Indication VAD.Indication 0.7665451 1 0.3812880 0.7363448 0.9789241 .
MCP-1 VAD.Indication Time 36.1407299 4 0.0000003 0.0001117 0.0004958 .****
MCP-1 VAD.Indication VAD.Indication:Time 37.5815741 4 0.0000001 0.0001117 0.0001117 .****
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
1 0 BTT - DT -229.19441 261.8155 38.48326 -0.8754043 0.3867852 1 0.8649924 .
2 1 BTT - DT -1625.50837 283.1057 45.24753 -5.7417004 0.0000007 1 0.0000912 .****
3 3 BTT - DT -161.53318 261.8155 38.48326 -0.6169734 0.5408856 1 0.9762969 .
4 5 BTT - DT -101.07243 264.3065 39.28634 -0.3824062 0.7042211 1 0.9762969 .
5 8 BTT - DT -27.77866 261.8155 38.48326 -0.1061002 0.9160540 1 0.9762969 .

2.5.2 G-CSF | RVAD

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
G-CSF RVAD RVAD 0.9711906 1 0.3243834 0.7103671 0.8927675 .
G-CSF RVAD Time 36.8079880 4 0.0000002 0.0001117 0.0001117 .****
G-CSF RVAD RVAD:Time 23.4918035 4 0.0001010 0.0178547 0.0655772 .***
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
6 0 No - Yes 57.27106 58.12202 43.65005 0.9853590 0.3298784 2 0.8649924 .
7 1 No - Yes -217.04263 58.54155 44.20407 -3.7074975 0.0005807 2 0.0178550 .***
8 3 No - Yes 6.54831 58.12202 43.65005 0.1126649 0.9108128 2 0.9762969 .
9 5 No - Yes 43.95582 58.54155 44.20407 0.7508483 0.4567226 2 0.9369736 .
10 8 No - Yes 30.06753 58.12202 43.65005 0.5173172 0.6075465 2 0.9762969 .

2.5.3 CD27+IgD-IgM+ switched memory | Sensitized

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
CD27+IgD-IgM+ switched memory Sensitized Sensitized 1.636678 1 0.2007818 0.6480377 0.7942120 .
CD27+IgD-IgM+ switched memory Sensitized Time 39.142294 6 0.0000007 0.0002077 0.0118223 .****
CD27+IgD-IgM+ switched memory Sensitized Sensitized:Time 20.986487 5 0.0008148 0.0672896 0.1170453 .***
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
11 0 No - Yes -0.3198014 7.298960 11.34126 -0.0438147 0.9658141 3 0.9762969 .
12 1 No - Yes -4.2757570 7.471146 12.32437 -0.5723027 0.5774078 3 0.9762969 .
13 3 No - Yes -18.2856784 7.579877 12.94933 -2.4123977 0.0314150 3 0.2920877 .*
14 5 No - Yes NA NA NA NA NA 3 NA .
15 8 No - Yes -0.9703014 7.298960 11.34126 -0.1329369 0.8965727 3 0.9762969 .
16 14 No - Yes 10.7841008 8.442165 18.02794 1.2774094 0.2176642 3 0.8439723 .
17 21 No - Yes -3.2676447 8.171663 16.32281 -0.3998751 0.6944327 3 0.9762969 .

2.5.4 num lymph | AgeGreater60

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
num lymph AgeGreater60 AgeGreater60 19.46946 1 0.0000102 0.0025306 0.0561648 .****
num lymph AgeGreater60 Time 11.87890 6 0.0647256 0.5054532 0.7021147 ..
num lymph AgeGreater60 AgeGreater60:Time 16.81779 6 0.0099767 0.2453627 0.4469460 .**
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
18 0 younger - older -7938.938 37018.14 71.50935 -0.2144608 0.8307982 4 0.9762969 .
19 1 younger - older 14918.008 42015.79 71.89144 0.3550572 0.7235863 4 0.9762969 .
20 3 younger - older 35033.304 39756.46 71.81324 0.8811978 0.3811505 4 0.8649924 .
21 5 younger - older 128946.753 51060.17 71.98442 2.5253883 0.0137596 4 0.1692434 .*
22 8 younger - older 86550.394 35476.52 71.35865 2.4396529 0.0171884 4 0.1921977 .*
23 14 younger - older 127334.245 62078.37 71.76727 2.0511855 0.0439001 4 0.3253995 .*
24 21 younger - older 206076.627 52337.71 71.97003 3.9374407 0.0001883 4 0.0115784 .***

2.5.5 IL-8 | RVAD

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
IL-8 RVAD RVAD 0.1597045 1 0.6894287 0.8345596 1.0000000 .
IL-8 RVAD Time 23.5113244 4 0.0001001 0.0177453 0.0561648 .***
IL-8 RVAD RVAD:Time 14.4619692 4 0.0059577 0.1881234 0.4469460 .**
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
25 0 No - Yes 12.722592 31.84028 44.25998 0.3995754 0.6913910 5 0.9762969 .
26 1 No - Yes -39.432494 32.07257 44.81088 -1.2294772 0.2253096 5 0.8439723 .
27 3 No - Yes -22.785204 31.84028 44.25998 -0.7156094 0.4779910 5 0.9369736 .
28 5 No - Yes 7.511063 32.07257 44.81088 0.2341896 0.8159045 5 0.9762969 .
29 8 No - Yes -108.874850 31.84028 44.25998 -3.4194063 0.0013586 5 0.0334222 .**

2.5.6 IP-10 | VAD.Indication

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
IP-10 VAD.Indication VAD.Indication 2.796429 1 0.0944745 0.5543465 0.7021147 ..
IP-10 VAD.Indication Time 1.654803 4 0.7989103 0.8539194 1.0000000 .
IP-10 VAD.Indication VAD.Indication:Time 22.574963 4 0.0001539 0.0238200 0.1170453 .***
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
30 0 BTT - DT -456.9398 273.2854 38.25226 -1.6720245 0.1026812 6 0.4857612 .
31 1 BTT - DT -601.5382 295.3929 45.00832 -2.0364004 0.0476194 6 0.3253995 .*
32 3 BTT - DT 266.7728 273.2854 38.25226 0.9761692 0.3351139 6 0.8649924 .
33 5 BTT - DT 542.2843 275.8720 39.05338 1.9657100 0.0564712 6 0.3655769 ..
34 8 BTT - DT 349.2766 273.2854 38.25226 1.2780656 0.2089277 6 0.8439723 .

2.5.7 CD19+CD268+ | RVAD

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
CD19+CD268+ RVAD RVAD 0.0657854 1 0.7975751 0.8537106 1.0000000 .
CD19+CD268+ RVAD Time 24.0929914 6 0.0005021 0.0532019 0.1170453 .***
CD19+CD268+ RVAD RVAD:Time 12.4104462 5 0.0295766 0.3899639 0.5885059 .*
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
35 0 No - Yes -8.208955 14.69446 27.02123 -0.5586429 0.5810058 7 0.9762969 .
36 1 No - Yes -9.137837 14.77439 27.57950 -0.6184918 0.5413261 7 0.9762969 .
37 3 No - Yes 19.786479 14.74034 27.34278 1.3423355 0.1905271 7 0.8369584 .
38 5 No - Yes 2.599656 17.76246 47.79183 0.1463567 0.8842554 7 0.9762969 .
39 8 No - Yes 12.127541 14.22223 24.06332 0.8527175 0.4022239 7 0.8679569 .
40 14 No - Yes NA NA NA NA NA 7 NA .
41 21 No - Yes 3.335001 15.86875 34.96004 0.2101616 0.8347616 7 0.9762969 .

2.5.8 CD268 of +27-38++transitional | AgeGreater60

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
CD268 of +27-38++transitional AgeGreater60 AgeGreater60 0.2322852 1 0.6298345 0.8216969 1.0000000 .
CD268 of +27-38++transitional AgeGreater60 Time 13.6403081 6 0.0339226 0.4075803 0.5885059 .*
CD268 of +27-38++transitional AgeGreater60 AgeGreater60:Time 23.6053408 6 0.0006171 0.0592243 0.1170453 .***
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
42 0 younger - older -12.194879 12.75736 32.78655 -0.9559094 0.3461137 8 0.8649924 .
43 1 younger - older -10.781971 13.48779 38.80777 -0.7993877 0.4289315 8 0.9096306 .
44 3 younger - older -27.648010 13.12752 35.91134 -2.1061107 0.0422501 8 0.3253995 .*
45 5 younger - older 13.322491 14.89690 49.99151 0.8943129 0.3754401 8 0.8649924 .
46 8 younger - older 15.026888 12.52136 30.93243 1.2000999 0.2392115 8 0.8440587 .
47 14 younger - older -23.380569 16.74574 61.44273 -1.3962098 0.1676755 8 0.7638551 .
48 21 younger - older 8.837055 15.11217 51.51851 0.5847641 0.5612587 8 0.9762969 .

2.5.9 GRO | Sensitized

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
GRO Sensitized Sensitized 1.498174 1 0.2209526 0.6591120 0.7942120 .
GRO Sensitized Time 19.222649 4 0.0007106 0.0633400 0.1170453 .***
GRO Sensitized Sensitized:Time 2.295863 4 0.6815224 0.8329609 1.0000000 .
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
49 0 No - Yes 182.063077 148.9810 14.58784 1.2220555 0.2410665 9 0.8440587 .
50 1 No - Yes -5.020331 149.3567 14.59640 -0.0336130 0.9736411 9 0.9762969 .
51 3 No - Yes 64.719130 149.0100 14.58646 0.4343274 0.6704068 9 0.9762969 .
52 5 No - Yes 71.587100 155.8848 16.10141 0.4592309 0.6522074 9 0.9762969 .
53 8 No - Yes -24.586690 148.9810 14.58784 -0.1650324 0.8711837 9 0.9762969 .

2.5.10 CD19 of live lymph | Sex

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
CD19 of live lymph Sex Sex 0.1225005 1 0.7263382 0.8416352 1.0000000 .
CD19 of live lymph Sex Time 23.0557835 6 0.0007780 0.0659624 0.1170453 .***
CD19 of live lymph Sex Sex:Time 5.1871659 6 0.5200417 0.7918872 1.0000000 .
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
54 0 Female - Male 1.6639060 5.216394 51.92295 0.3189763 0.7510242 10 0.9762969 .
55 1 Female - Male 10.0802980 5.661510 59.37062 1.7804963 0.0801114 10 0.4284219 ..
56 3 Female - Male 0.7887193 5.605561 58.22557 0.1407030 0.8885902 10 0.9762969 .
57 5 Female - Male 3.2662769 7.160489 70.34714 0.4561527 0.6496853 10 0.9762969 .
58 8 Female - Male -0.2498269 5.422218 55.40910 -0.0460747 0.9634164 10 0.9762969 .
59 14 Female - Male 0.9377999 7.516496 71.30697 0.1247656 0.9010602 10 0.9762969 .
60 21 Female - Male -7.2774835 7.315068 71.18607 -0.9948621 0.3231731 10 0.8649924 .

2.5.11 CD19+27+IgD-38++IgG ASC | RVAD

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
CD19+27+IgD-38++IgG ASC RVAD RVAD 1.488335 1 0.2224750 0.6598801 0.7942120 .
CD19+27+IgD-38++IgG ASC RVAD Time 22.817493 6 0.0008600 0.0688251 0.1170453 .***
CD19+27+IgD-38++IgG ASC RVAD RVAD:Time 17.101744 5 0.0043108 0.1546736 0.3213720 .**
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
61 0 No - Yes 2.1367122 1.856919 67.86650 1.1506758 0.2539038 11 0.8440587 .
62 1 No - Yes 0.2479458 1.884481 69.11575 0.1315725 0.8957047 11 0.9762969 .
63 3 No - Yes -0.1112912 1.593381 66.46037 -0.0698459 0.9445260 11 0.9762969 .
64 5 No - Yes -9.4179873 2.552357 70.00000 -3.6899172 0.0004400 11 0.0178550 .***
65 8 No - Yes 0.3859604 1.559019 65.73287 0.2475663 0.8052417 11 0.9762969 .
66 14 No - Yes NA NA NA NA NA 11 NA .
67 21 No - Yes -0.2256372 1.980046 69.64572 -0.1139555 0.9096009 11 0.9762969 .

2.5.12 TNF-a | VAD.Indication

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
TNF-a VAD.Indication VAD.Indication 9.965749 1 0.0015948 0.084951 0.1170453 .**
TNF-a VAD.Indication Time 10.875544 4 0.0279989 0.382689 0.5885059 .*
TNF-a VAD.Indication VAD.Indication:Time 18.791729 4 0.0008636 0.068943 0.1170453 .***
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
68 0 BTT - DT -39.41501 12.48829 46.39397 -3.1561578 0.0028071 12 0.0493246 .**
69 1 BTT - DT -12.19411 13.66910 52.64659 -0.8920929 0.3764026 12 0.8649924 .
70 3 BTT - DT 12.67119 12.48829 46.39397 1.0146458 0.3155372 12 0.8649924 .
71 5 BTT - DT 8.83497 12.62621 47.17160 0.6997324 0.4875310 12 0.9369736 .
72 8 BTT - DT 11.73604 12.48829 46.39397 0.9397639 0.3522060 12 0.8649924 .

2.5.13 sCD40L | Sensitized

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
sCD40L Sensitized Sensitized 3.144392 1 0.0761884 0.5276911 0.7021147 ..
sCD40L Sensitized Time 18.617338 4 0.0009343 0.0711582 0.1170453 .***
sCD40L Sensitized Sensitized:Time 4.966288 4 0.2907741 0.6939787 0.8927675 .
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
73 0 No - Yes 3877.11159 2188.940 13.06905 1.7712278 0.0998259 13 0.4857612 ..
74 1 No - Yes 87.27468 2194.015 13.09380 0.0397785 0.9688698 13 0.9762969 .
75 3 No - Yes -199.84468 2189.349 13.06948 -0.0912804 0.9286540 13 0.9762969 .
76 5 No - Yes 1078.01617 2278.587 14.46069 0.4731072 0.6431989 13 0.9762969 .
77 8 No - Yes 517.33673 2188.940 13.06905 0.2363412 0.8168317 13 0.9762969 .

2.5.14 IL-1b | LowIntermacs

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
IL-1b LowIntermacs LowIntermacs 4.882947 1 0.0271233 0.3784164 0.5885059 .*
IL-1b LowIntermacs Time 18.060820 4 0.0012008 0.0779384 0.1170453 .**
IL-1b LowIntermacs LowIntermacs:Time 10.387189 4 0.0343869 0.4092792 0.6622384 .*
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
78 0 high - low -5.410829 2.450816 38.77113 -2.2077658 0.0332457 14 0.2920877 .*
79 1 high - low -1.010076 2.424774 37.94563 -0.4165651 0.6793436 14 0.9762969 .
80 3 high - low -1.403458 2.447025 38.79132 -0.5735364 0.5695920 14 0.9762969 .
81 5 high - low -2.077816 2.424774 37.94563 -0.8569109 0.3968738 14 0.8679569 .
82 8 high - low 3.231075 2.585424 43.40508 1.2497274 0.2180959 14 0.8439723 .

2.5.15 CD19+CD268+ | AgeGreater60

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
CD19+CD268+ AgeGreater60 AgeGreater60 0.3469473 1 0.5558463 0.8026471 1.0000000 .
CD19+CD268+ AgeGreater60 Time 21.6351602 6 0.0014096 0.0819979 0.1170453 .**
CD19+CD268+ AgeGreater60 AgeGreater60:Time 13.2451783 6 0.0393036 0.4298171 0.6622384 .*
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
83 0 younger - older 6.6467453 12.26880 24.68602 0.5417599 0.5928407 15 0.9762969 .
84 1 younger - older -0.8345696 12.65628 27.60529 -0.0659411 0.9478999 15 0.9762969 .
85 3 younger - older -12.6750829 12.46275 26.14727 -1.0170372 0.3184547 15 0.8649924 .
86 5 younger - older -1.6248585 13.42689 33.73160 -0.1210153 0.9043969 15 0.9762969 .
87 8 younger - older -3.3531216 12.14444 23.79201 -0.2761035 0.7848528 15 0.9762969 .
88 14 younger - older -27.6866076 14.48004 42.29469 -1.9120527 0.0626589 15 0.3670021 ..
89 21 younger - older -7.2491892 13.54774 34.70620 -0.5350847 0.5960034 15 0.9762969 .

2.5.16 CD19+27+IgD-38++IgG ASC | LowIntermacs

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
CD19+27+IgD-38++IgG ASC LowIntermacs LowIntermacs 10.064934 1 0.0015112 0.0836814 0.1170453 .**
CD19+27+IgD-38++IgG ASC LowIntermacs Time 7.025492 6 0.3184962 0.7076945 0.8927675 .
CD19+27+IgD-38++IgG ASC LowIntermacs LowIntermacs:Time 4.762124 6 0.5746644 0.8078680 1.0000000 .
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
90 0 high - low -3.0950000 1.286900 69 -2.4050040 0.0188591 16 0.1933058 .*
91 1 high - low -3.6620000 1.438349 69 -2.5459746 0.0131342 16 0.1692434 .*
92 3 high - low -1.5387500 1.324854 69 -1.1614486 0.2494616 16 0.8440587 .
93 5 high - low -3.2125000 1.590986 69 -2.0191878 0.0473546 16 0.3253995 .*
94 8 high - low -1.3052857 1.200576 69 -1.0872167 0.2807244 16 0.8649924 .
95 14 high - low 0.0620000 2.079164 69 0.0298197 0.9762969 16 0.9762969 .
96 21 high - low -0.4533333 2.024540 69 -0.2239192 0.8234818 16 0.9762969 .

2.5.17 CD19+CD268+ | Survival

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
CD19+CD268+ Survival Survival 0.5237235 1 0.4692576 0.7744448 1.0000000 .
CD19+CD268+ Survival Time 21.4396868 6 0.0015290 0.0839597 0.1170453 .**
CD19+CD268+ Survival Survival:Time 12.0549575 5 0.0340424 0.4080218 0.5885059 .*
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
97 0 alive - dead -12.220999 13.69796 25.79271 -0.8921765 0.3805467 17 0.8649924 .
98 1 alive - dead -12.690845 14.18029 29.15800 -0.8949635 0.3781354 17 0.8649924 .
99 3 alive - dead 6.543127 13.54544 24.80575 0.4830503 0.6332961 17 0.9762969 .
100 5 alive - dead -5.152008 14.07890 28.46258 -0.3659383 0.7171170 17 0.9762969 .
101 8 alive - dead 9.509920 13.24117 22.79946 0.7182086 0.4799244 17 0.9369736 .
102 14 alive - dead -12.459416 17.22654 51.17688 -0.7232688 0.4728077 17 0.9369736 .
103 21 alive - dead NA NA NA NA NA 17 NA .

2.5.18 CD19+CD5+CD11b+ | VAD.Indication

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
CD19+CD5+CD11b+ VAD.Indication VAD.Indication 1.91482 1 0.1664289 0.6243197 0.7942120 .
CD19+CD5+CD11b+ VAD.Indication Time 21.35859 6 0.0015813 0.0847528 0.1170453 .**
CD19+CD5+CD11b+ VAD.Indication VAD.Indication:Time 16.83455 6 0.0099109 0.2446299 0.4469460 .**
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
104 0 BTT - DT 0.7805669 4.980188 33.15732 0.1567344 0.8764046 18 0.9762969 .
105 1 BTT - DT -5.0503011 5.479638 43.65986 -0.9216487 0.3617769 18 0.8649924 .
106 3 BTT - DT -0.5598957 5.189146 37.62268 -0.1078975 0.9146504 18 0.9762969 .
107 5 BTT - DT -1.4173118 5.421362 42.46530 -0.2614310 0.7950240 18 0.9762969 .
108 8 BTT - DT -9.5467743 4.923345 32.00742 -1.9390829 0.0613499 18 0.3670021 ..
109 14 BTT - DT -7.2636215 5.934691 52.62712 -1.2239257 0.2264316 18 0.8439723 .
110 21 BTT - DT -17.8278584 6.207456 56.92148 -2.8720070 0.0057205 18 0.0879529 .**

2.5.19 IL-5 | LowIntermacs

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
IL-5 LowIntermacs LowIntermacs 9.968715 1 0.0015922 0.0849134 0.1170453 .**
IL-5 LowIntermacs Time 5.213550 4 0.2660793 0.6811998 0.8438190 .
IL-5 LowIntermacs LowIntermacs:Time 11.797739 4 0.0189205 0.3276987 0.5885059 .*
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
111 0 high - low -14.336251 4.546425 51.24456 -3.1533021 0.0026987 19 0.0493246 .**
112 1 high - low -1.853963 4.494250 50.41160 -0.4125188 0.6817084 19 0.9762969 .
113 3 high - low 1.388210 4.546425 51.24456 0.3053410 0.7613433 19 0.9762969 .
114 5 high - low 2.018744 4.494250 50.41160 0.4491838 0.6552243 19 0.9762969 .
115 8 high - low -1.255315 4.546425 51.24456 -0.2761102 0.7835739 19 0.9762969 .

2.5.20 CD27-IgD+ mature naive | AgeGreater60

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
CD27-IgD+ mature naive AgeGreater60 AgeGreater60 0.1101225 1 0.7400047 0.8441039 1.0000000 .
CD27-IgD+ mature naive AgeGreater60 Time 21.2315568 6 0.0016669 0.0859702 0.2201208 .**
CD27-IgD+ mature naive AgeGreater60 AgeGreater60:Time 16.1873437 6 0.0127830 0.2723265 0.4469460 .*
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
116 0 younger - older -1.255098 8.359177 25.83189 -0.1501462 0.8818155 20 0.9762969 .
117 1 younger - older 0.496588 8.658665 29.23774 0.0573516 0.9546553 20 0.9762969 .
118 3 younger - older -4.406058 8.509371 27.54353 -0.5177889 0.6087398 20 0.9762969 .
119 5 younger - older 4.623010 9.251121 36.31167 0.4997243 0.6202840 20 0.9762969 .
120 8 younger - older 8.363732 8.262925 24.79079 1.0121999 0.3212203 20 0.8649924 .
121 14 younger - older -18.757631 10.054805 45.87563 -1.8655391 0.0685082 20 0.3830229 ..
122 21 younger - older -6.808721 9.343616 37.41977 -0.7287029 0.4707197 20 0.9369736 .

2.5.21 G-CSF | Survival

Figure 3: Biomarker profile

Figure 3: Biomarker profile

Table 4a: Mixed effect model results
variable group parameter Chisq Df Pr(>Chisq) qval lfdr stars
G-CSF Survival Survival 0.7629021 1 0.3824218 0.7368862 0.9789241 .
G-CSF Survival Time 17.1044346 4 0.0018447 0.0913362 0.3213720 .**
G-CSF Survival Survival:Time 6.3623959 4 0.1736697 0.6299380 0.7942120 .
Table 4b: Post-hoc test results
Time contrast estimate SE df t.ratio p.value id q.value stars
123 0 alive - dead 46.28771 53.01446 50.49979 0.8731149 0.3867333 21 0.8649924 .
124 1 alive - dead -91.52578 53.87612 51.44400 -1.6988192 0.0953941 21 0.4857612 ..
125 3 alive - dead 15.44907 53.01446 50.49979 0.2914125 0.7719296 21 0.9762969 .
126 5 alive - dead 33.26100 53.87612 51.44400 0.6173607 0.5397200 21 0.9762969 .
127 8 alive - dead 46.43142 53.01446 50.49979 0.8758257 0.3852718 21 0.8649924 .

3 Identifying global patterns

3.1 Hierarchical clustering

We double-standardized the data (Efron 2009) and computed the correlation matrix for the biomarkers using all pairwise complete data. We then clustered the biomarkers using those correlations, and clustered the samples that remained after removing missing data. We also clustered by time, after collapsing each biomarker to only its mean level.

# color palette for this section
colorfun <- function(nlevels, func = pal_d3, ...){
    if(nlevels > 10) return(standardColors(nlevels))
    if(nlevels <=10) return(func(...)(nlevels))
} 

# annotations for our heatmap
annotation.row <- data.frame("biomarker" = factor(c(rep("B-cell", length(bc)),
                                                    rep("cytokine", length(cyt)))))
annotation.col <- df.raw[,which(make.names(colnames(df.raw), unique = T) %in% groups)]
annotation.colors <- lapply(colnames(annotation.col), function(nam){
    colrs <- colorfun(nlevels(annotation.col[[nam]]))
    names(colrs) <- levels(annotation.col[[nam]])
    return(colrs)
})
names(annotation.colors) <- colnames(annotation.col)
annotation.colors[["biomarker"]] <- colorfun(nlevels(annotation.row$biomarker))
names(annotation.colors[["biomarker"]]) <- levels(annotation.row$biomarker)

# double standardize
df.ds <- df.raw
df.ds[,bcellcyto] <- double_standardize(df.raw[, bcellcyto])
df.patient <- t(na.omit(df.ds[,bcellcyto]))
rownames(annotation.row) <- rownames(df.patient)

# compute silhouette for various biomarker clusters
r.biomarker <- cor(df.ds[, bcellcyto], use = "p")
nbclust <- fviz_nbclust(t(df.ds[, bcellcyto]), 
             hcut, 
             method = c("silhouette"),
             diss = as.dist((1-r.biomarker)/2), 
             k.max = 25) +
     labs(subtitle = "Silhouette method")

# compute optimal number of clusters
nclusters.bicluster <- as.numeric(as.character(nbclust$data$clusters[nbclust$data$y == max(nbclust$data$y)]))

# compute clusters
tree.bicluster <- hclust(as.dist((1-r.biomarker)/2), method = "ward.D2")
bicluster <- list()
bicluster$biomarkers_optimal <- cutree(tree.bicluster, k = nclusters.bicluster)
bicluster$biomarkers <- cutree(tree.bicluster, k = 4) # use 4 to simplify

# update annotations to include clusters
annotation.row$bicluster_optimal <- factor(bicluster$biomarkers_optimal)
annotation.row$bicluster <- factor(bicluster$biomarkers)
annotation.colors$bicluster <- colorfun(nlevels(annotation.row$bicluster), 
                                      func = pal_simpsons)
annotation.colors$bicluster_optimal <- colorfun(nlevels(annotation.row$bicluster_optimal), 
                                              func = pal_simpsons)
names(annotation.colors$bicluster) <- levels(factor(annotation.row$bicluster))
names(annotation.colors$bicluster_optimal) <- levels(factor(annotation.row$bicluster_optimal))

# # # make heatmap
# pheatmap(df.patient,
#          color = colorRampPalette(rev(brewer.pal(n = 10, name = "RdBu")))(100),
#          breaks = c(seq(-max(abs(df.patient), na.rm=T), 0, length.out = 50),
#                     seq(0.001, max(abs(df.patient), na.rm=T), length.out = 50)),
#          fontsize = 7,
#          cutree_rows = nclusters.bicluster,
#          cutree_cols = 2,
#          cluster_cols = T,
#          cluster_rows = tree.bicluster,
#          show_colnames = F,
#          annotation_col = annotation.col,
#          annotation_row = annotation.row,
#          annotation_colors = annotation.colors,
#          clustering_method = "ward.D2"
# )


# Temporal patterns

compute_module_means <- function(modules, df.ds, metadata.cols = 1:13, FUN = mean){
    nmods <- length(unique(modules))
    module.mean.list <- lapply(1:nmods, function(ii){
        this_names <- names(modules)[modules == ii]
        this_columns <- colnames(df.ds) %in% this_names
        this_mean <- apply(df.ds[,this_columns, drop = F], 1, FUN)
    })
    module.mean.matrix <- do.call(cbind, module.mean.list)
    module.mean.df <- as.data.frame(module.mean.matrix)
    colnames(module.mean.df) <- paste0("module.", unique(modules))
    return(cbind(df.ds[, metadata.cols], module.mean.df))
}

df.modules <- list()
df.modules$bicluster <- compute_module_means(bicluster$biomarkers, df.ds)
df.modules$bicluster_optimal <- compute_module_means(bicluster$biomarkers_optimal, df.ds)

# melt data into longform
df.modules.long <- lapply(df.modules, function(this_df.modules){
    melt(this_df.modules, id.vars = colnames(this_df.modules)[1:13])
})

# this_df <- df.modules.long$bicluster_optimal
# g3 <- ggplot(this_df) +
#         aes(x = as.numeric(as.character(Time)),
#             y = value,
#             color = factor(variable),
#             fill = factor(variable),
#             group = PatientID) +
#         geom_point(alpha = 0.1, size = 1) +
#         geom_line(alpha = 0.2) +
#         xlab("Time (days)") +
#         ylab("Standardized level") +
#         scale_x_continuous(breaks = unique(this_df$Time)) +
#         stat_summary(fun.y = mean,
#                      aes(group = variable),
#                      geom=c("line"),
#                      size = .02,
#                      position = position_dodge(.5)) +
#         stat_smooth(method = "loess",
#                     aes(group = variable),
#                     span = .5,
#                     size = 1,
#                     alpha = 0.1) +
#         stat_summary(fun.y = mean,
#                      aes(group = variable),
#                      geom=c("point"),
#                      position = position_dodge(.5)) +
#         stat_sum_df(function(x) mean_cl_normal(x, conf.int = 0.68),
#                     mapping = aes(group = variable),
#                     position = position_dodge(.5)) +
#         #scale_color_simpsons(name = "Cluster") +
#         #scale_fill_simpsons(name = "Cluster") +
#         theme_classic()
# #print(g3)



# Temporal clusters

df.ds.patients.0 <- split(df.ds, df.ds$PatientID)
df.ds.patients <- lapply(df.ds.patients.0, function(this_patient){
    this_patient[match(c(0,1,3,5,8,14,21), this_patient$Time),bcellcyto]
})

varnames <- colnames(df.ds[,bcellcyto])
meanlist <- lapply(varnames, function(this_var){
    temp <- aggregate(df.ds[[this_var]], 
              list(df.ds$Time), 
              FUN = function(x) mean(x, na.rm = T))
    colnames(temp) <- c("Time", "z")
    temp$biomarker <- this_var
    temp
})
names(meanlist) <- varnames

means.long <- do.call(rbind, meanlist)
means.wide.0 <- dcast(means.long, Time ~ biomarker, value.var = "z" )
means.wide <- means.wide.0[,c("Time", colnames(df)[bcellcyto])]

colorfun.time <- function(nlevels, ...){
    if(nlevels > 10) return(standardColors(nlevels))
    if(nlevels <=10) return(pal_d3(...)(nlevels))
} 
annotation.row.time <- data.frame("biomarker" = factor(c(rep("B-cell",29), rep("cytokine",38))))

annotation.colors.time <- lapply(colnames(annotation.row.time), function(nam){
    colrs <- colorfun.time(nlevels(annotation.row.time[[nam]]))
    names(colrs) <- levels(annotation.row.time[[nam]])
    return(colrs)
})
names(annotation.colors.time) <- colnames(annotation.row.time)

df.means <- as.data.frame(t(means.wide[,-1]))
rownames(annotation.row.time) <- rownames(df.means)

# compute optimal number of clusters
nbclust.time <- fviz_nbclust(df.means, 
                        hcut, 
                        method = c("silhouette"), 
                        diss = as.dist((1-cor(t(df.means), use = "p"))/2), 
                        k.max = 25)+
  labs(subtitle = "Silhouette method")

nclusters.timecluster <- as.numeric(as.character(nbclust.time$data$clusters[nbclust.time$data$y == max(nbclust.time$data$y)]))

3.2 Optimal number of clusters

To determine the optimal number of clusters, we maximized the average silhouete width using the factoextra and NbClust packages.

a <- nbclust + ggtitle("Optimal number of biomarker clusters")
b <- nbclust.time + ggtitle("Optimal number of timeclusters")
grid.arrange(a,b,ncol = 1)
Figure 4: Optimal number of clusters

Figure 4: Optimal number of clusters

# Temporal patterns

# do optimal clustering
tree.timecluster <- hclust(as.dist((1-cor(t(df.means), use = "p"))/2), 
               method = "ward.D2")
timeclusters <- cutree(tree.timecluster, k = nclusters.timecluster) # optimal number of clusters

# update annotations
annotation.row.time$time_cluster <- timeclusters
annotation.colors.time$time_cluster <- colorfun(nlevels(factor(annotation.row.time$time_cluster)))
names(annotation.colors.time$time_cluster) <- factor(unique(annotation.row.time$time_cluster))

# # add in clusters from the first clustering
# annotation.row.time$bicluster_optimal <- annotation.row$bicluster_optimal
# annotation.colors.time$bicluster_optimal <- annotation.colors$bicluster_optimal
# annotation.row.time$bicluster <- annotation.row$bicluster
# annotation.colors.time$bicluster <- annotation.colors$bicluster

hits <- as.character(unique(resulttable$biomarker))
annotation.row.hits <- data.frame(significance = rep(0, nrow(annotation.row)), 
                                  row.names = rownames(annotation.row))
annotation.row.hits$significance[rownames(annotation.row) %in% hits] <- 1

# change to factor
annotation.row.hits$significance <- revalue(factor(annotation.row.hits$significance), c("0"="not significant", "1"="significant"))
annotation.colors.time$significance <- c("not significant" = "lightgrey", "significant" = "darkgreen")

3.3 Biclustering patterns

# make biclustering heatmap
pheatmap(df.patient, 
         color = colorRampPalette(rev(brewer.pal(n = 10, name = "RdBu")))(100),
         breaks = c(seq(-max(abs(df.patient), na.rm=T), 0, length.out = 50), 
                    seq(0.001, max(abs(df.patient), na.rm=T), length.out = 50)),
         fontsize = 7,
         cutree_rows = nclusters.bicluster,
         cutree_cols = 2,
         cluster_cols = T,
         cluster_rows = tree.bicluster,
         show_colnames = F,
         annotation_col = annotation.col,
         #annotation_row = annotation.row.time,
         # annotation_row = cbind(annotation.row, 
         #                        time_cluster = annotation.row.time$time_cluster),
         annotation_row = cbind(annotation.row.time[,1,drop=F],
                                annotation.row.time[,2,drop=F],
                                annotation.row[,c(3,2),drop=F],
                                annotation.row.hits[,1,drop=F]),
         #annotation_colors = c(annotation.colors, annotation.colors.time),
         annotation_colors = c(annotation.colors, annotation.colors.time),
         clustering_method = "ward.D2",
         main = "Clusters"
)
Figure 5: Biclustering

Figure 5: Biclustering

3.4 Time clustering patterns

pheatmap(df.means, 
         color = colorRampPalette(rev(brewer.pal(n = 7, name = "RdBu")))(100),
         breaks = c(seq(-max(abs(df.means), na.rm=T), 0, length.out = 50), 
                    seq(0.001, max(abs(df.means), na.rm=T), length.out = 50)),
         fontsize = 7,
         cutree_rows = 4,
         cutree_cols = 1,
         cluster_cols = F,
         cluster_rows = tree.timecluster,
         #annotation_col = annotation.col,
         # annotation_row = cbind(annotation.row, 
         #                        time_cluster = factor(annotation.row.time$time_cluster)),
         annotation_row = cbind(annotation.row.time[,1,drop=F], 
                                annotation.row.time[,2,drop=F],
                                annotation.row[,c(3,2),drop=F],
                                annotation.row.hits[,1,drop=F]),
         annotation_colors = c(annotation.colors, annotation.colors.time),
         clustering_method = "ward.D2",
         labels_col = means.wide$Time,
         border_color = NA,
         main = "Timeclusters"
)
Figure 6: Temporal clustering

Figure 6: Temporal clustering

3.4.1 Separate heatmaps for each biomarker set

At the request of reviewers, we have split the previous heatmap (Figure 6) into two heatmaps: one for only B-cells, and one for only cytokines. Note that this does not change any of the clustering assignments previously determined, nor any of the clustering analysis that follows (to do so would unnecessarily complicate the unified analysis). This section exists only for the purpose of visualization.

3.4.1.1 Temporal clustering of B-cells

df.means.bcell <- subset(df.means, annotation.row$biomarker == "B-cell")
tree.timecluster.bcell <- hclust(as.dist((1-cor(t(df.means.bcell), use = "p"))/2), 
               method = "ward.D2")
pheatmap(df.means.bcell, 
         color = colorRampPalette(rev(brewer.pal(n = 7, name = "RdBu")))(100),
         breaks = c(seq(-max(abs(df.means.bcell), na.rm=T), 0, length.out = 50), 
                    seq(0.001, max(abs(df.means.bcell), na.rm=T), length.out = 50)),
         fontsize = 7,
         cutree_rows = 4,
         cutree_cols = 1,
         cluster_cols = F,
         cluster_rows = tree.timecluster.bcell,
         #annotation_col = annotation.col,
         # annotation_row = cbind(annotation.row, 
         #                        time_cluster = factor(annotation.row.time$time_cluster)),
         annotation_row = cbind(
                                #annotation.row.time[annotation.row$biomarker == "B-cell",1,drop=F], 
                                #annotation.row.time[annotation.row$biomarker == "B-cell",2,drop=F],
                                #annotation.row[annotation.row$biomarker == "B-cell",c(3),drop=F],
                                annotation.row.hits[annotation.row$biomarker == "B-cell",1,drop=F]
                                ),
         annotation_colors = c(annotation.colors, annotation.colors.time),
         clustering_method = "ward.D2",
         labels_col = means.wide$Time,
         border_color = NA,
         main = "Timeclusters for B-cells"
)
Figure 6.1a: Temporal clustering of B-cells

Figure 6.1a: Temporal clustering of B-cells

3.4.1.2 Temporal clustering of cytokines

df.means.cytokine <- subset(df.means, annotation.row$biomarker == "cytokine")
tree.timecluster.cytokine <- hclust(as.dist((1-cor(t(df.means.cytokine), use = "p"))/2), 
               method = "ward.D2")
pheatmap(df.means.cytokine, 
         color = colorRampPalette(rev(brewer.pal(n = 7, name = "RdBu")))(100),
         breaks = c(seq(-max(abs(df.means.cytokine), na.rm=T), 0, length.out = 50), 
                    seq(0.001, max(abs(df.means.cytokine), na.rm=T), length.out = 50)),
         fontsize = 7,
         cutree_rows = 4,
         cutree_cols = 1,
         cluster_cols = F,
         cluster_rows = tree.timecluster.cytokine,
         #annotation_col = annotation.col,
         # annotation_row = cbind(annotation.row, 
         #                        time_cluster = factor(annotation.row.time$time_cluster)),
         annotation_row = cbind(
                                #annotation.row.time[annotation.row$biomarker == "cytokine",1,drop=F], 
                                #annotation.row.time[annotation.row$biomarker == "cytokine",2,drop=F],
                                #annotation.row[annotation.row$biomarker == "cytokine",c(3),drop=F],
                                annotation.row.hits[annotation.row$biomarker == "cytokine",1,drop=F]),
         annotation_colors = c(annotation.colors, annotation.colors.time),
         clustering_method = "ward.D2",
         labels_col = means.wide$Time,
         border_color = NA,
         main = "Timeclusters for cytokines"
)
Figure 6.1b: Temporal clustering of cytokines

Figure 6.1b: Temporal clustering of cytokines

3.4.1.3 Only Significant B-Cells/Cytokines

At the request of editors, we further generated a heatmap of only the B-cells/cytokines with statistically significant associations.

keepsignif <- annotation.row.hits$significance == "significant"
tree.timecluster.signifs <- hclust(as.dist((1-cor(t(df.means[keepsignif,]), use = "p"))/2), 
               method = "ward.D2")

pheatmap(df.means[keepsignif,], 
         color = colorRampPalette(rev(brewer.pal(n = 7, name = "RdBu")))(100),
         breaks = c(seq(-max(abs(df.means), na.rm=T), 0, length.out = 50), 
                    seq(0.001, max(abs(df.means), na.rm=T), length.out = 50)),
         fontsize = 7,
         cutree_rows = 4,
         cutree_cols = 1,
         cluster_cols = F,
         cluster_rows = tree.timecluster.signifs,
         #annotation_col = annotation.col,
         # annotation_row = cbind(annotation.row, 
         #                        time_cluster = factor(annotation.row.time$time_cluster)),
         annotation_row = cbind(annotation.row.time[keepsignif,1,drop=F] 
                                #annotation.row.time[keepsignif,2,drop=F],
                                #annotation.row[keepsignif,c(3,2),drop=F],
                                #annotation.row.hits[keepsignif,1,drop=F]
                                ),
         annotation_colors = c(annotation.colors, annotation.colors.time),
         clustering_method = "ward.D2",
         labels_col = means.wide$Time,
         border_color = NA,
         main = "Temporal Profile"
)
Figure 6.1c: Temporal clustering of significant B-cells and cytokines

Figure 6.1c: Temporal clustering of significant B-cells and cytokines

3.4.2 Timeseries

We depicted each biomarker cluster’s temporal pattern as a smooth function of time, using a LOESS regression model. There are clear temporal dynamics occurring at multiple timescales.

colnames(df.means) <- unique(means.long$Time)
df.means$timecluster <- factor(timeclusters)
df.means$biomarker <- rownames(df.means)

df.clustermeans <- melt(df.means, id.vars = c("biomarker", "timecluster"), variable.name = "Time", value.name = "z")

gg.time <- ggplot(df.clustermeans) + 
    aes(x=as.numeric(as.character(Time)), y=z, 
        color = timecluster, 
        group = biomarker, 
        fill = timecluster) + 
    geom_point(alpha = 0.1, size = 1) + 
    geom_line(alpha = 0.2) +
    xlab("Time (days)") +
    ylab("Standardized level (z-score)") +
    ggtitle("Temporal biomarker clusters") +
    scale_x_continuous(breaks = as.numeric(as.character(unique(df.clustermeans$Time)))) +
    stat_summary(fun.y = mean, 
                 aes(group = timecluster), 
                 geom=c("line"), 
                 size = .02, 
                 position = position_dodge(.5)) +
    stat_smooth(method = "loess", 
                aes(group = timecluster), 
                span = .6, 
                size = 1, 
                alpha = 0.2) +
    stat_summary(fun.y = mean, 
                 aes(group = timecluster), 
                 geom=c("point"), 
                 position = position_dodge(.5)) +
    # stat_sum_df(function(x) mean_cl_boot(x, conf.int = 0.68), 
    #             mapping = aes(group = timecluster), 
    #             position = position_dodge(.5)) + 
    scale_color_d3() + 
    scale_fill_d3() + 
    theme_classic()

print(gg.time)
Figure 7: Time cluster profile

Figure 7: Time cluster profile

3.5 Cluster statistics

3.5.1 Biomarker clusters and timeclusters

We tested for overlap between the biomarker clusters and the timeclusters using Fisher’s exact test.

this_table <- table(cbind(annotation.row.time[,2,drop=F],
                          annotation.row[, 3, drop=F]))
print(this_table %>% kable(escape = F, row.names = T, caption = "Table 5: Contingency table") %>%
    kable_styling(bootstrap_options = c("striped", 
                                        "hover", 
                                        "condensed",
                                        "responsive"),
                  font_size = 10) %>%
    scroll_box(width = "100%"))
Table 5: Contingency table
1 2 3 4
1 1 13 9 0
2 16 4 1 6
3 3 6 0 1
4 2 3 1 1
cat("  \n")

Fisher’s exact test \(p=\) 2.1210^{-6}

3.5.2 Biomarker clusters and hits

We tested for overlap between the statistically significant biomarkers and the optimal biomarker clusters using Fisher’s exact test.

this_table <- table(cbind(annotation.row.hits[,1, drop=F],
                          annotation.row[,2, drop=F]))
print(this_table %>% kable(escape = F, row.names = T, caption = "Table 5: Contingency table") %>%
    kable_styling(bootstrap_options = c("striped", 
                                        "hover", 
                                        "condensed",
                                        "responsive"),
                  font_size = 10) %>%
    scroll_box(width = "100%"))
Table 5: Contingency table
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
not significant 1 4 2 0 2 7 2 3 2 0 4 4 5 3 2 2 3 1 3
significant 1 0 1 3 1 1 0 0 1 3 0 0 0 1 1 2 0 2 0
cat("  \n")

Fisher’s exact test \(p=\) 0.0061

3.5.3 Timeclusters and hits

We tested for overlap between the statistically significant biomarkers and the timeclusters using Fisher’s exact test.

this_table <- table(cbind(annotation.row.hits[,1, drop=F],
                          annotation.row.time[,2, drop=F]))
print(this_table %>% kable(escape = F, row.names = T, caption = "Table 5: Contingency table") %>%
    kable_styling(bootstrap_options = c("striped", 
                                        "hover", 
                                        "condensed",
                                        "responsive"),
                  font_size = 10) %>%
    scroll_box(width = "100%"))
Table 5: Contingency table
1 2 3 4
not significant 16 21 7 6
significant 7 6 3 1
cat("  \n")

Fisher’s exact test \(p=\) 0.807

3.5.4 Biomarker type and hits

We tested for overlap between statistically significant biomarkers and their biomarker type.

this_table <- table(cbind(annotation.row[,1, drop=F],
                          annotation.row.hits[,1, drop=F]))
print(this_table %>% kable(escape = F, row.names = T, caption = "Table 5: Contingency table") %>%
    kable_styling(bootstrap_options = c("striped", 
                                        "hover", 
                                        "condensed",
                                        "responsive"),
                  font_size = 10) %>%
    scroll_box(width = "100%"))
Table 5: Contingency table
not significant significant
B-cell 21 8
cytokine 29 9
cat("  \n")

Fisher’s exact test \(p=\) 0.781

3.5.5 Biomarker clusters and types

We tested for overlap between optimal biomarker clusters and biomarker type.

this_table <- table(cbind(annotation.row[,1, drop=F],
                          annotation.row[,2, drop=F]))
print(this_table %>% kable(escape = F, row.names = T, caption = "Table 5: Contingency table") %>%
    kable_styling(bootstrap_options = c("striped", 
                                        "hover", 
                                        "condensed",
                                        "responsive"),
                  font_size = 10) %>%
    scroll_box(width = "100%"))
Table 5: Contingency table
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
B-cell 2 3 2 3 3 8 2 2 3 1 0 0 0 0 0 0 0 0 0
cytokine 0 1 1 0 0 0 0 1 0 2 4 4 5 4 3 4 3 3 3
cat("  \n")

Fisher’s exact test \(p=\) 5.8310^{-10}

3.5.6 Biomarker metaclusters and types

We tested for overlap between biomarker metaclusters and biomarker type.

this_table <- table(cbind(annotation.row[,1, drop=F],
                          annotation.row[,3, drop=F]))
print(this_table %>% kable(escape = F, row.names = T, caption = "Table 5: Contingency table") %>%
    kable_styling(bootstrap_options = c("striped", 
                                        "hover", 
                                        "condensed",
                                        "responsive"),
                  font_size = 10) %>%
    scroll_box(width = "100%"))
Table 5: Contingency table
1 2 3 4
B-cell 5 10 6 8
cytokine 17 16 5 0
cat("  \n")

Fisher’s exact test \(p=\) 0.00102

3.5.7 Timeclusters and types

We tested for overlap between timeclusters and biomarker type.

this_table <- table(cbind(annotation.row[,1, drop=F],
                          annotation.row.time[,2, drop=F]))
print(this_table %>% kable(escape = F, row.names = T, caption = "Table 5: Contingency table") %>%
    kable_styling(bootstrap_options = c("striped", 
                                        "hover", 
                                        "condensed",
                                        "responsive"),
                  font_size = 10) %>%
    scroll_box(width = "100%"))
Table 5: Contingency table
1 2 3 4
B-cell 11 8 7 3
cytokine 12 19 3 4
cat("  \n")

Fisher’s exact test \(p=\) 0.158