diff --git a/PredictingHFinT2DM/.gitignore b/PredictingHFinT2DM/.gitignore
new file mode 100644
index 00000000..5b6a0652
--- /dev/null
+++ b/PredictingHFinT2DM/.gitignore
@@ -0,0 +1,4 @@
+.Rproj.user
+.Rhistory
+.RData
+.Ruserdata
diff --git a/PredictingHFinT2DM/data/Analysis_1/plpLog.txt b/PredictingHFinT2DM/data/Analysis_1/plpLog.txt
new file mode 100644
index 00000000..1ef33bc7
--- /dev/null
+++ b/PredictingHFinT2DM/data/Analysis_1/plpLog.txt
@@ -0,0 +1,57 @@
+2021-01-06 05:42:56 [Main thread] INFO PatientLevelPrediction Patient-Level Prediction Package version 4.2.5
+2021-01-06 05:42:56 [Main thread] INFO PatientLevelPrediction AnalysisID: Analysis_1
+2021-01-06 05:42:56 [Main thread] INFO PatientLevelPrediction CohortID: 19693
+2021-01-06 05:42:56 [Main thread] INFO PatientLevelPrediction OutcomeID: 19692
+2021-01-06 05:42:56 [Main thread] INFO PatientLevelPrediction Cohort size: 180552
+2021-01-06 05:42:56 [Main thread] INFO PatientLevelPrediction Covariates: 3
+2021-01-06 05:42:56 [Main thread] INFO PatientLevelPrediction Population size: 112989
+2021-01-06 05:42:56 [Main thread] INFO PatientLevelPrediction Cases: 1843
+2021-01-06 05:42:56 [Main thread] WARN PatientLevelPrediction personSplitter deprecatedWarning: 'personSplitter' is deprecated. Use 'randomSplitter' instead. See help("Deprecated")
+2021-01-06 05:42:56 [Main thread] INFO PatientLevelPrediction randomSplitter Creating a 25% test and 75% train (into 3 folds) random stratified split by class
+2021-01-06 05:42:56 [Main thread] INFO PatientLevelPrediction randomSplitter Data split into 28246 test cases and 84743 train cases (28248, 28248, 28247)
+2021-01-06 05:42:57 [Main thread] INFO PatientLevelPrediction Training Lasso Logistic Regression model
+2021-01-06 05:42:58 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 1 redundant covariates
+2021-01-06 05:42:58 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 0 infrequent covariates
+2021-01-06 05:42:58 [Main thread] INFO FeatureExtraction tidyCovariateData Normalizing covariates
+2021-01-06 05:42:58 [Main thread] INFO FeatureExtraction tidyCovariateData Tidying covariates took 1.6 secs
+2021-01-06 05:42:58 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 05:42:59 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 05:43:00 [Main thread] INFO PatientLevelPrediction fitGLMModel Running Cyclops
+2021-01-06 05:43:24 [Main thread] INFO PatientLevelPrediction fitGLMModel Done.
+2021-01-06 05:43:24 [Main thread] INFO PatientLevelPrediction fitGLMModel GLM fit status: OK
+2021-01-06 05:43:24 [Main thread] INFO PatientLevelPrediction fitGLMModel Fitting model took 25.3 secs
+2021-01-06 05:43:29 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Creating variable importance data frame
+2021-01-06 05:43:29 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Getting predictions on train set
+2021-01-06 05:43:29 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 05:43:30 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 05:43:30 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.536 secs
+2021-01-06 05:43:31 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 05:43:32 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 05:43:32 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 05:43:32 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 05:43:33 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.207 secs
+2021-01-06 05:43:33 [Main thread] INFO PatientLevelPrediction Train set evaluation
+2021-01-06 05:43:33 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 63.12
+2021-01-06 05:43:33 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 3.07
+2021-01-06 05:43:33 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.02
+2021-01-06 05:43:36 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.0166 : observed risk 0.0163
+2021-01-06 05:43:38 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: -0.0152 - gradient:1.0024
+2021-01-06 05:43:38 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 1.33 intercept: -0.01
+2021-01-06 05:43:41 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.03
+2021-01-06 05:43:41 [Main thread] INFO PatientLevelPrediction Test set evaluation
+2021-01-06 05:43:41 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 64.08
+2021-01-06 05:43:41 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 61.60
+2021-01-06 05:43:41 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 66.56
+2021-01-06 05:43:41 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 3.18
+2021-01-06 05:43:41 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.02
+2021-01-06 05:43:42 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.0166 : observed risk 0.0163
+2021-01-06 05:43:42 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: -0.0191 - gradient:1.0031
+2021-01-06 05:43:42 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 1.42 intercept: -0.01
+2021-01-06 05:43:43 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.03
+2021-01-06 05:43:44 [Main thread] INFO PatientLevelPrediction Calculating covariate summary @ 2021-01-06 05:43:44
+2021-01-06 05:43:44 [Main thread] INFO PatientLevelPrediction This can take a while...
+2021-01-06 05:43:46 [Main thread] INFO PatientLevelPrediction Finished covariate summary @ 2021-01-06 05:43:46
+2021-01-06 05:43:46 [Main thread] INFO PatientLevelPrediction Saving PlpResult
+2021-01-06 05:43:49 [Main thread] INFO PatientLevelPrediction plpResult saved to ..\./results/ccae/Analysis_1\plpResult
+2021-01-06 05:43:49 [Main thread] INFO PatientLevelPrediction Log saved to ./results/ccae/Analysis_1/plplog.txt
+2021-01-06 05:43:49 [Main thread] INFO PatientLevelPrediction Run finished successfully.
diff --git a/PredictingHFinT2DM/data/Analysis_1/plpResult.rds b/PredictingHFinT2DM/data/Analysis_1/plpResult.rds
new file mode 100644
index 00000000..55ad4bf6
Binary files /dev/null and b/PredictingHFinT2DM/data/Analysis_1/plpResult.rds differ
diff --git a/PredictingHFinT2DM/data/Analysis_10/plpLog.txt b/PredictingHFinT2DM/data/Analysis_10/plpLog.txt
index fb0aa751..1349a1fb 100644
--- a/PredictingHFinT2DM/data/Analysis_10/plpLog.txt
+++ b/PredictingHFinT2DM/data/Analysis_10/plpLog.txt
@@ -1,55 +1,57 @@
-2020-07-08 09:50:16 [Main thread] INFO PatientLevelPrediction Patient-Level Prediction Package version 4.0.2
-2020-07-08 09:50:16 [Main thread] INFO PatientLevelPrediction AnalysisID: Analysis_10
-2020-07-08 09:50:16 [Main thread] INFO PatientLevelPrediction CohortID: 13897
-2020-07-08 09:50:16 [Main thread] INFO PatientLevelPrediction OutcomeID: 11696
-2020-07-08 09:50:16 [Main thread] INFO PatientLevelPrediction Cohort size: 5015
-2020-07-08 09:50:16 [Main thread] INFO PatientLevelPrediction Covariates: 13219
-2020-07-08 09:50:16 [Main thread] INFO PatientLevelPrediction Population size: 3567
-2020-07-08 09:50:16 [Main thread] INFO PatientLevelPrediction Cases: 53
-2020-07-08 09:50:16 [Main thread] WARN PatientLevelPrediction personSplitter deprecatedWarning: 'personSplitter' is deprecated. Use 'randomSplitter' instead. See help("Deprecated")
-2020-07-08 09:50:16 [Main thread] INFO PatientLevelPrediction randomSplitter Creating a 25% test and 75% train (into 3 folds) random stratified split by class
-2020-07-08 09:50:17 [Main thread] INFO PatientLevelPrediction randomSplitter Data split into 891 test cases and 2676 train cases (893, 892, 891)
-2020-07-08 09:50:17 [Main thread] INFO PatientLevelPrediction Training Lasso Logistic Regression model
-2020-07-08 09:50:19 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 11 redundant covariates
-2020-07-08 09:50:19 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 6146 infrequent covariates
-2020-07-08 09:50:19 [Main thread] INFO FeatureExtraction tidyCovariateData Normalizing covariates
-2020-07-08 09:50:21 [Main thread] INFO FeatureExtraction tidyCovariateData Tidying covariates took 4.12 secs
-2020-07-08 09:50:21 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:50:22 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:50:23 [Main thread] INFO PatientLevelPrediction fitGLMModel Running Cyclops
-2020-07-08 09:50:26 [Main thread] INFO PatientLevelPrediction fitGLMModel Done.
-2020-07-08 09:50:26 [Main thread] INFO PatientLevelPrediction fitGLMModel GLM fit status: OK
-2020-07-08 09:50:26 [Main thread] INFO PatientLevelPrediction fitGLMModel Fitting model took 5.56 secs
-2020-07-08 09:50:27 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Creating variable importance data frame
-2020-07-08 09:50:27 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Getting predictions on train set
-2020-07-08 09:50:27 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:50:28 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:50:28 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.165 secs
-2020-07-08 09:50:28 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:50:29 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:50:29 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.089 secs
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction Train set evaluation
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 80.15
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 71.69
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 88.62
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 10.96
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.01
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration gradient: 2.52 intercept: -0.02
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.12
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction Test set evaluation
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 58.27
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 40.77
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 75.78
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 2.12
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.01
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration gradient: 0.88 intercept: 0.00
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.03
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction Calculating covariate summary @ 2020-07-08 09:50:30
-2020-07-08 09:50:30 [Main thread] INFO PatientLevelPrediction This can take a while...
-2020-07-08 09:50:42 [Main thread] INFO PatientLevelPrediction Finished covariate summary @ 2020-07-08 09:50:42
-2020-07-08 09:50:42 [Main thread] INFO PatientLevelPrediction Saving PlpResult
-2020-07-08 09:50:43 [Main thread] INFO PatientLevelPrediction plpResult saved to ..\./hfint2dm07072020Results/jmdc/Analysis_10\plpResult
-2020-07-08 09:50:43 [Main thread] INFO PatientLevelPrediction Log saved to ./hfint2dm07072020Results/jmdc/Analysis_10/plplog.txt
-2020-07-08 09:50:43 [Main thread] INFO PatientLevelPrediction Run finished successfully.
+2021-01-06 11:39:13 [Main thread] INFO PatientLevelPrediction Patient-Level Prediction Package version 4.2.5
+2021-01-06 11:39:13 [Main thread] INFO PatientLevelPrediction AnalysisID: Analysis_2
+2021-01-06 11:39:13 [Main thread] INFO PatientLevelPrediction CohortID: 19693
+2021-01-06 11:39:13 [Main thread] INFO PatientLevelPrediction OutcomeID: 19692
+2021-01-06 11:39:13 [Main thread] INFO PatientLevelPrediction Cohort size: 213363
+2021-01-06 11:39:13 [Main thread] INFO PatientLevelPrediction Covariates: 92383
+2021-01-06 11:39:13 [Main thread] INFO PatientLevelPrediction Population size: 159633
+2021-01-06 11:39:13 [Main thread] INFO PatientLevelPrediction Cases: 3690
+2021-01-06 11:39:13 [Main thread] WARN PatientLevelPrediction personSplitter deprecatedWarning: 'personSplitter' is deprecated. Use 'randomSplitter' instead. See help("Deprecated")
+2021-01-06 11:39:13 [Main thread] INFO PatientLevelPrediction randomSplitter Creating a 25% test and 75% train (into 3 folds) random stratified split by class
+2021-01-06 11:39:14 [Main thread] INFO PatientLevelPrediction randomSplitter Data split into 39907 test cases and 119726 train cases (39909, 39909, 39908)
+2021-01-06 11:39:14 [Main thread] INFO PatientLevelPrediction Training Lasso Logistic Regression model
+2021-01-06 11:46:53 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 1 redundant covariates
+2021-01-06 11:46:53 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 81159 infrequent covariates
+2021-01-06 11:46:53 [Main thread] INFO FeatureExtraction tidyCovariateData Normalizing covariates
+2021-01-06 11:52:17 [Main thread] INFO FeatureExtraction tidyCovariateData Tidying covariates took 13 mins
+2021-01-06 11:52:17 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 11:53:26 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 11:54:28 [Main thread] INFO PatientLevelPrediction fitGLMModel Running Cyclops
+2021-01-06 12:07:23 [Main thread] INFO PatientLevelPrediction fitGLMModel Done.
+2021-01-06 12:07:23 [Main thread] INFO PatientLevelPrediction fitGLMModel GLM fit status: OK
+2021-01-06 12:07:23 [Main thread] INFO PatientLevelPrediction fitGLMModel Fitting model took 15.1 mins
+2021-01-06 12:08:48 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Creating variable importance data frame
+2021-01-06 12:08:48 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Getting predictions on train set
+2021-01-06 12:08:48 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 12:10:03 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 12:10:21 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 17.6 secs
+2021-01-06 12:10:22 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 12:13:02 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 12:13:34 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 12:13:55 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 12:14:01 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 5.64 secs
+2021-01-06 12:14:01 [Main thread] INFO PatientLevelPrediction Train set evaluation
+2021-01-06 12:14:02 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 83.69
+2021-01-06 12:14:02 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 16.18
+2021-01-06 12:14:02 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.02
+2021-01-06 12:14:06 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.0231 : observed risk 0.0231
+2021-01-06 12:14:08 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: -1e-04 - gradient:1.0147
+2021-01-06 12:14:09 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 1.15 intercept: -0.00
+2021-01-06 12:14:12 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.16
+2021-01-06 12:14:12 [Main thread] INFO PatientLevelPrediction Test set evaluation
+2021-01-06 12:14:13 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 81.25
+2021-01-06 12:14:13 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 79.84
+2021-01-06 12:14:13 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 82.67
+2021-01-06 12:14:13 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 14.46
+2021-01-06 12:14:13 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.02
+2021-01-06 12:14:14 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.023 : observed risk 0.0231
+2021-01-06 12:14:15 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: 0.006 - gradient:1.0031
+2021-01-06 12:14:15 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 1.03 intercept: -0.00
+2021-01-06 12:14:16 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.15
+2021-01-06 12:14:17 [Main thread] INFO PatientLevelPrediction Calculating covariate summary @ 2021-01-06 12:14:17
+2021-01-06 12:14:17 [Main thread] INFO PatientLevelPrediction This can take a while...
+2021-01-06 12:26:40 [Main thread] INFO PatientLevelPrediction Finished covariate summary @ 2021-01-06 12:26:40
+2021-01-06 12:26:40 [Main thread] INFO PatientLevelPrediction Saving PlpResult
+2021-01-06 12:26:47 [Main thread] INFO PatientLevelPrediction plpResult saved to ..\./results/panther/Analysis_2\plpResult
+2021-01-06 12:26:47 [Main thread] INFO PatientLevelPrediction Log saved to ./results/panther/Analysis_2/plplog.txt
+2021-01-06 12:26:47 [Main thread] INFO PatientLevelPrediction Run finished successfully.
diff --git a/PredictingHFinT2DM/data/Analysis_10/plpResult.rds b/PredictingHFinT2DM/data/Analysis_10/plpResult.rds
index 2863983d..a8d6467e 100644
Binary files a/PredictingHFinT2DM/data/Analysis_10/plpResult.rds and b/PredictingHFinT2DM/data/Analysis_10/plpResult.rds differ
diff --git a/PredictingHFinT2DM/data/Analysis_2/plpLog.txt b/PredictingHFinT2DM/data/Analysis_2/plpLog.txt
index 074ff8b1..1d7d0def 100644
--- a/PredictingHFinT2DM/data/Analysis_2/plpLog.txt
+++ b/PredictingHFinT2DM/data/Analysis_2/plpLog.txt
@@ -1,55 +1,57 @@
-2020-07-08 09:06:54 [Main thread] INFO PatientLevelPrediction Patient-Level Prediction Package version 4.0.2
-2020-07-08 09:06:54 [Main thread] INFO PatientLevelPrediction AnalysisID: Analysis_2
-2020-07-08 09:06:54 [Main thread] INFO PatientLevelPrediction CohortID: 13897
-2020-07-08 09:06:54 [Main thread] INFO PatientLevelPrediction OutcomeID: 11696
-2020-07-08 09:06:54 [Main thread] INFO PatientLevelPrediction Cohort size: 50133
-2020-07-08 09:06:54 [Main thread] INFO PatientLevelPrediction Covariates: 46973
-2020-07-08 09:06:54 [Main thread] INFO PatientLevelPrediction Population size: 30289
-2020-07-08 09:06:54 [Main thread] INFO PatientLevelPrediction Cases: 236
-2020-07-08 09:06:54 [Main thread] WARN PatientLevelPrediction personSplitter deprecatedWarning: 'personSplitter' is deprecated. Use 'randomSplitter' instead. See help("Deprecated")
-2020-07-08 09:06:54 [Main thread] INFO PatientLevelPrediction randomSplitter Creating a 25% test and 75% train (into 3 folds) random stratified split by class
-2020-07-08 09:06:54 [Main thread] INFO PatientLevelPrediction randomSplitter Data split into 7572 test cases and 22717 train cases (7573, 7572, 7572)
-2020-07-08 09:06:54 [Main thread] INFO PatientLevelPrediction Training Lasso Logistic Regression model
-2020-07-08 09:07:16 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 4 redundant covariates
-2020-07-08 09:07:16 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 36486 infrequent covariates
-2020-07-08 09:07:16 [Main thread] INFO FeatureExtraction tidyCovariateData Normalizing covariates
-2020-07-08 09:07:40 [Main thread] INFO FeatureExtraction tidyCovariateData Tidying covariates took 45.8 secs
-2020-07-08 09:07:40 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:07:51 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:07:59 [Main thread] INFO PatientLevelPrediction fitGLMModel Running Cyclops
-2020-07-08 09:09:12 [Main thread] INFO PatientLevelPrediction fitGLMModel Done.
-2020-07-08 09:09:12 [Main thread] INFO PatientLevelPrediction fitGLMModel GLM fit status: OK
-2020-07-08 09:09:12 [Main thread] INFO PatientLevelPrediction fitGLMModel Fitting model took 1.53 mins
-2020-07-08 09:09:27 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Creating variable importance data frame
-2020-07-08 09:09:27 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Getting predictions on train set
-2020-07-08 09:09:27 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:09:38 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:09:39 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 1.27 secs
-2020-07-08 09:09:39 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:09:45 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:09:50 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:09:53 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:09:53 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.469 secs
-2020-07-08 09:09:53 [Main thread] INFO PatientLevelPrediction Train set evaluation
-2020-07-08 09:09:54 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 84.32
-2020-07-08 09:09:54 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 81.56
-2020-07-08 09:09:54 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 87.09
-2020-07-08 09:09:54 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 8.75
-2020-07-08 09:09:54 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.01
-2020-07-08 09:09:54 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration gradient: 1.87 intercept: -0.01
-2020-07-08 09:09:54 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.09
-2020-07-08 09:09:54 [Main thread] INFO PatientLevelPrediction Test set evaluation
-2020-07-08 09:09:54 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 73.14
-2020-07-08 09:09:54 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 66.40
-2020-07-08 09:09:54 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 79.88
-2020-07-08 09:09:54 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 2.43
-2020-07-08 09:09:54 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.01
-2020-07-08 09:09:55 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration gradient: 0.95 intercept: 0.00
-2020-07-08 09:09:55 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.03
-2020-07-08 09:09:55 [Main thread] INFO PatientLevelPrediction Calculating covariate summary @ 2020-07-08 09:09:55
-2020-07-08 09:09:55 [Main thread] INFO PatientLevelPrediction This can take a while...
-2020-07-08 09:13:58 [Main thread] INFO PatientLevelPrediction Finished covariate summary @ 2020-07-08 09:13:58
-2020-07-08 09:13:58 [Main thread] INFO PatientLevelPrediction Saving PlpResult
-2020-07-08 09:14:00 [Main thread] INFO PatientLevelPrediction plpResult saved to ..\./hfint2dm07072020Results/ccae/Analysis_2\plpResult
-2020-07-08 09:14:00 [Main thread] INFO PatientLevelPrediction Log saved to ./hfint2dm07072020Results/ccae/Analysis_2/plplog.txt
-2020-07-08 09:14:00 [Main thread] INFO PatientLevelPrediction Run finished successfully.
+2021-01-06 06:08:13 [Main thread] INFO PatientLevelPrediction Patient-Level Prediction Package version 4.2.5
+2021-01-06 06:08:13 [Main thread] INFO PatientLevelPrediction AnalysisID: Analysis_2
+2021-01-06 06:08:13 [Main thread] INFO PatientLevelPrediction CohortID: 19693
+2021-01-06 06:08:13 [Main thread] INFO PatientLevelPrediction OutcomeID: 19692
+2021-01-06 06:08:13 [Main thread] INFO PatientLevelPrediction Cohort size: 180552
+2021-01-06 06:08:13 [Main thread] INFO PatientLevelPrediction Covariates: 88144
+2021-01-06 06:08:13 [Main thread] INFO PatientLevelPrediction Population size: 112989
+2021-01-06 06:08:13 [Main thread] INFO PatientLevelPrediction Cases: 1843
+2021-01-06 06:08:13 [Main thread] WARN PatientLevelPrediction personSplitter deprecatedWarning: 'personSplitter' is deprecated. Use 'randomSplitter' instead. See help("Deprecated")
+2021-01-06 06:08:13 [Main thread] INFO PatientLevelPrediction randomSplitter Creating a 25% test and 75% train (into 3 folds) random stratified split by class
+2021-01-06 06:08:14 [Main thread] INFO PatientLevelPrediction randomSplitter Data split into 28246 test cases and 84743 train cases (28248, 28248, 28247)
+2021-01-06 06:08:14 [Main thread] INFO PatientLevelPrediction Training Lasso Logistic Regression model
+2021-01-06 06:14:56 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 2 redundant covariates
+2021-01-06 06:14:57 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 76062 infrequent covariates
+2021-01-06 06:14:57 [Main thread] INFO FeatureExtraction tidyCovariateData Normalizing covariates
+2021-01-06 06:19:43 [Main thread] INFO FeatureExtraction tidyCovariateData Tidying covariates took 11.5 mins
+2021-01-06 06:19:43 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 06:20:36 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 06:21:14 [Main thread] INFO PatientLevelPrediction fitGLMModel Running Cyclops
+2021-01-06 06:27:29 [Main thread] INFO PatientLevelPrediction fitGLMModel Done.
+2021-01-06 06:27:29 [Main thread] INFO PatientLevelPrediction fitGLMModel GLM fit status: OK
+2021-01-06 06:27:29 [Main thread] INFO PatientLevelPrediction fitGLMModel Fitting model took 7.76 mins
+2021-01-06 06:29:01 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Creating variable importance data frame
+2021-01-06 06:29:02 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Getting predictions on train set
+2021-01-06 06:29:02 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 06:29:54 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 06:30:02 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 7.63 secs
+2021-01-06 06:30:02 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 06:31:48 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 06:32:11 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 06:32:26 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 06:32:28 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 2.54 secs
+2021-01-06 06:32:28 [Main thread] INFO PatientLevelPrediction Train set evaluation
+2021-01-06 06:32:29 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 80.43
+2021-01-06 06:32:29 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 10.64
+2021-01-06 06:32:29 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.02
+2021-01-06 06:32:31 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.0163 : observed risk 0.0163
+2021-01-06 06:32:33 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: -2e-04 - gradient:1.0131
+2021-01-06 06:32:33 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 1.23 intercept: -0.00
+2021-01-06 06:32:36 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.11
+2021-01-06 06:32:36 [Main thread] INFO PatientLevelPrediction Test set evaluation
+2021-01-06 06:32:36 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 78.39
+2021-01-06 06:32:36 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 76.18
+2021-01-06 06:32:36 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 80.60
+2021-01-06 06:32:36 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 8.89
+2021-01-06 06:32:36 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.02
+2021-01-06 06:32:37 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.0167 : observed risk 0.0163
+2021-01-06 06:32:37 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: -0.0284 - gradient:1.0058
+2021-01-06 06:32:37 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 1.06 intercept: -0.00
+2021-01-06 06:32:38 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.09
+2021-01-06 06:32:39 [Main thread] INFO PatientLevelPrediction Calculating covariate summary @ 2021-01-06 06:32:39
+2021-01-06 06:32:39 [Main thread] INFO PatientLevelPrediction This can take a while...
+2021-01-06 06:41:01 [Main thread] INFO PatientLevelPrediction Finished covariate summary @ 2021-01-06 06:41:01
+2021-01-06 06:41:01 [Main thread] INFO PatientLevelPrediction Saving PlpResult
+2021-01-06 06:41:07 [Main thread] INFO PatientLevelPrediction plpResult saved to ..\./results/ccae/Analysis_2\plpResult
+2021-01-06 06:41:07 [Main thread] INFO PatientLevelPrediction Log saved to ./results/ccae/Analysis_2/plplog.txt
+2021-01-06 06:41:07 [Main thread] INFO PatientLevelPrediction Run finished successfully.
diff --git a/PredictingHFinT2DM/data/Analysis_2/plpResult.rds b/PredictingHFinT2DM/data/Analysis_2/plpResult.rds
index 2108af4b..da42b43e 100644
Binary files a/PredictingHFinT2DM/data/Analysis_2/plpResult.rds and b/PredictingHFinT2DM/data/Analysis_2/plpResult.rds differ
diff --git a/PredictingHFinT2DM/data/Analysis_3/plpLog.txt b/PredictingHFinT2DM/data/Analysis_3/plpLog.txt
new file mode 100644
index 00000000..f9d18d31
--- /dev/null
+++ b/PredictingHFinT2DM/data/Analysis_3/plpLog.txt
@@ -0,0 +1,59 @@
+2021-01-06 08:39:55 [Main thread] INFO PatientLevelPrediction Patient-Level Prediction Package version 4.2.5
+2021-01-06 08:39:55 [Main thread] INFO PatientLevelPrediction AnalysisID: Analysis_1
+2021-01-06 08:39:55 [Main thread] INFO PatientLevelPrediction CohortID: 19693
+2021-01-06 08:39:55 [Main thread] INFO PatientLevelPrediction OutcomeID: 19692
+2021-01-06 08:39:55 [Main thread] INFO PatientLevelPrediction Cohort size: 24139
+2021-01-06 08:39:55 [Main thread] INFO PatientLevelPrediction Covariates: 3
+2021-01-06 08:39:55 [Main thread] INFO PatientLevelPrediction Population size: 15860
+2021-01-06 08:39:55 [Main thread] INFO PatientLevelPrediction Cases: 650
+2021-01-06 08:39:55 [Main thread] WARN PatientLevelPrediction personSplitter deprecatedWarning: 'personSplitter' is deprecated. Use 'randomSplitter' instead. See help("Deprecated")
+2021-01-06 08:39:55 [Main thread] INFO PatientLevelPrediction randomSplitter Creating a 25% test and 75% train (into 3 folds) random stratified split by class
+2021-01-06 08:39:55 [Main thread] INFO PatientLevelPrediction randomSplitter Data split into 3964 test cases and 11896 train cases (3966, 3966, 3964)
+2021-01-06 08:39:55 [Main thread] INFO PatientLevelPrediction Training Lasso Logistic Regression model
+2021-01-06 08:39:56 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 1 redundant covariates
+2021-01-06 08:39:56 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 0 infrequent covariates
+2021-01-06 08:39:56 [Main thread] INFO FeatureExtraction tidyCovariateData Normalizing covariates
+2021-01-06 08:39:56 [Main thread] INFO FeatureExtraction tidyCovariateData Tidying covariates took 0.947 secs
+2021-01-06 08:39:56 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 08:39:57 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 08:39:57 [Main thread] INFO PatientLevelPrediction fitGLMModel Running Cyclops
+2021-01-06 08:39:59 [Main thread] INFO PatientLevelPrediction fitGLMModel Done.
+2021-01-06 08:39:59 [Main thread] INFO PatientLevelPrediction fitGLMModel GLM fit status: OK
+2021-01-06 08:39:59 [Main thread] INFO PatientLevelPrediction fitGLMModel Fitting model took 2.85 secs
+2021-01-06 08:40:00 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Creating variable importance data frame
+2021-01-06 08:40:00 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Getting predictions on train set
+2021-01-06 08:40:00 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 08:40:00 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 08:40:00 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.152 secs
+2021-01-06 08:40:01 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 08:40:01 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 08:40:01 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 08:40:01 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 08:40:01 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.0942 secs
+2021-01-06 08:40:01 [Main thread] INFO PatientLevelPrediction Train set evaluation
+2021-01-06 08:40:01 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 66.41
+2021-01-06 08:40:01 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 64.08
+2021-01-06 08:40:01 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 68.75
+2021-01-06 08:40:01 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 8.09
+2021-01-06 08:40:01 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.04
+2021-01-06 08:40:02 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.041 : observed risk 0.041
+2021-01-06 08:40:02 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: 0 - gradient:1.0002
+2021-01-06 08:40:02 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 0.98 intercept: 0.00
+2021-01-06 08:40:02 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.08
+2021-01-06 08:40:02 [Main thread] INFO PatientLevelPrediction Test set evaluation
+2021-01-06 08:40:02 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 65.23
+2021-01-06 08:40:02 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 60.90
+2021-01-06 08:40:02 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 69.56
+2021-01-06 08:40:02 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 7.60
+2021-01-06 08:40:02 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.04
+2021-01-06 08:40:02 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.0417 : observed risk 0.0409
+2021-01-06 08:40:02 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: -0.0213 - gradient:0.9978
+2021-01-06 08:40:03 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 0.91 intercept: 0.00
+2021-01-06 08:40:03 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.08
+2021-01-06 08:40:03 [Main thread] INFO PatientLevelPrediction Calculating covariate summary @ 2021-01-06 08:40:03
+2021-01-06 08:40:03 [Main thread] INFO PatientLevelPrediction This can take a while...
+2021-01-06 08:40:03 [Main thread] INFO PatientLevelPrediction Finished covariate summary @ 2021-01-06 08:40:03
+2021-01-06 08:40:03 [Main thread] INFO PatientLevelPrediction Saving PlpResult
+2021-01-06 08:40:04 [Main thread] INFO PatientLevelPrediction plpResult saved to ..\./results/mdcd/Analysis_1\plpResult
+2021-01-06 08:40:04 [Main thread] INFO PatientLevelPrediction Log saved to ./results/mdcd/Analysis_1/plplog.txt
+2021-01-06 08:40:04 [Main thread] INFO PatientLevelPrediction Run finished successfully.
diff --git a/PredictingHFinT2DM/data/Analysis_3/plpResult.rds b/PredictingHFinT2DM/data/Analysis_3/plpResult.rds
new file mode 100644
index 00000000..91942113
Binary files /dev/null and b/PredictingHFinT2DM/data/Analysis_3/plpResult.rds differ
diff --git a/PredictingHFinT2DM/data/Analysis_4/plpLog.txt b/PredictingHFinT2DM/data/Analysis_4/plpLog.txt
index 6fbbef43..cfa28733 100644
--- a/PredictingHFinT2DM/data/Analysis_4/plpLog.txt
+++ b/PredictingHFinT2DM/data/Analysis_4/plpLog.txt
@@ -1,55 +1,59 @@
-2020-07-08 09:24:46 [Main thread] INFO PatientLevelPrediction Patient-Level Prediction Package version 4.0.2
-2020-07-08 09:24:46 [Main thread] INFO PatientLevelPrediction AnalysisID: Analysis_4
-2020-07-08 09:24:46 [Main thread] INFO PatientLevelPrediction CohortID: 13897
-2020-07-08 09:24:46 [Main thread] INFO PatientLevelPrediction OutcomeID: 11696
-2020-07-08 09:24:46 [Main thread] INFO PatientLevelPrediction Cohort size: 3925
-2020-07-08 09:24:46 [Main thread] INFO PatientLevelPrediction Covariates: 25536
-2020-07-08 09:24:46 [Main thread] INFO PatientLevelPrediction Population size: 2622
-2020-07-08 09:24:46 [Main thread] INFO PatientLevelPrediction Cases: 93
-2020-07-08 09:24:46 [Main thread] WARN PatientLevelPrediction personSplitter deprecatedWarning: 'personSplitter' is deprecated. Use 'randomSplitter' instead. See help("Deprecated")
-2020-07-08 09:24:46 [Main thread] INFO PatientLevelPrediction randomSplitter Creating a 25% test and 75% train (into 3 folds) random stratified split by class
-2020-07-08 09:24:46 [Main thread] INFO PatientLevelPrediction randomSplitter Data split into 655 test cases and 1967 train cases (657, 655, 655)
-2020-07-08 09:24:46 [Main thread] INFO PatientLevelPrediction Training Lasso Logistic Regression model
-2020-07-08 09:24:49 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 11 redundant covariates
-2020-07-08 09:24:49 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 11004 infrequent covariates
-2020-07-08 09:24:49 [Main thread] INFO FeatureExtraction tidyCovariateData Normalizing covariates
-2020-07-08 09:24:51 [Main thread] INFO FeatureExtraction tidyCovariateData Tidying covariates took 4.58 secs
-2020-07-08 09:24:51 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:24:52 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:24:53 [Main thread] INFO PatientLevelPrediction fitGLMModel Running Cyclops
-2020-07-08 09:24:58 [Main thread] INFO PatientLevelPrediction fitGLMModel Done.
-2020-07-08 09:24:58 [Main thread] INFO PatientLevelPrediction fitGLMModel GLM fit status: OK
-2020-07-08 09:24:58 [Main thread] INFO PatientLevelPrediction fitGLMModel Fitting model took 7.5 secs
-2020-07-08 09:24:59 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Creating variable importance data frame
-2020-07-08 09:24:59 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Getting predictions on train set
-2020-07-08 09:24:59 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:25:00 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:25:00 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.159 secs
-2020-07-08 09:25:00 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:25:01 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.094 secs
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction Train set evaluation
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 82.42
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 77.56
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 87.28
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 26.34
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.03
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration gradient: 1.99 intercept: -0.04
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.27
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction Test set evaluation
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 60.27
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 49.05
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 71.48
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 4.90
-2020-07-08 09:25:02 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.03
-2020-07-08 09:25:03 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration gradient: 0.44 intercept: 0.02
-2020-07-08 09:25:03 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.06
-2020-07-08 09:25:03 [Main thread] INFO PatientLevelPrediction Calculating covariate summary @ 2020-07-08 09:25:03
-2020-07-08 09:25:03 [Main thread] INFO PatientLevelPrediction This can take a while...
-2020-07-08 09:25:14 [Main thread] INFO PatientLevelPrediction Finished covariate summary @ 2020-07-08 09:25:14
-2020-07-08 09:25:14 [Main thread] INFO PatientLevelPrediction Saving PlpResult
-2020-07-08 09:25:16 [Main thread] INFO PatientLevelPrediction plpResult saved to ..\./hfint2dm07072020Results/mdcr/Analysis_4\plpResult
-2020-07-08 09:25:16 [Main thread] INFO PatientLevelPrediction Log saved to ./hfint2dm07072020Results/mdcr/Analysis_4/plplog.txt
-2020-07-08 09:25:16 [Main thread] INFO PatientLevelPrediction Run finished successfully.
+2021-01-06 08:57:24 [Main thread] INFO PatientLevelPrediction Patient-Level Prediction Package version 4.2.5
+2021-01-06 08:57:24 [Main thread] INFO PatientLevelPrediction AnalysisID: Analysis_2
+2021-01-06 08:57:24 [Main thread] INFO PatientLevelPrediction CohortID: 19693
+2021-01-06 08:57:24 [Main thread] INFO PatientLevelPrediction OutcomeID: 19692
+2021-01-06 08:57:24 [Main thread] INFO PatientLevelPrediction Cohort size: 24139
+2021-01-06 08:57:24 [Main thread] INFO PatientLevelPrediction Covariates: 56858
+2021-01-06 08:57:24 [Main thread] INFO PatientLevelPrediction Population size: 15860
+2021-01-06 08:57:24 [Main thread] INFO PatientLevelPrediction Cases: 650
+2021-01-06 08:57:24 [Main thread] WARN PatientLevelPrediction personSplitter deprecatedWarning: 'personSplitter' is deprecated. Use 'randomSplitter' instead. See help("Deprecated")
+2021-01-06 08:57:24 [Main thread] INFO PatientLevelPrediction randomSplitter Creating a 25% test and 75% train (into 3 folds) random stratified split by class
+2021-01-06 08:57:24 [Main thread] INFO PatientLevelPrediction randomSplitter Data split into 3964 test cases and 11896 train cases (3966, 3966, 3964)
+2021-01-06 08:57:24 [Main thread] INFO PatientLevelPrediction Training Lasso Logistic Regression model
+2021-01-06 08:58:46 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 2 redundant covariates
+2021-01-06 08:58:46 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 41597 infrequent covariates
+2021-01-06 08:58:46 [Main thread] INFO FeatureExtraction tidyCovariateData Normalizing covariates
+2021-01-06 08:59:45 [Main thread] INFO FeatureExtraction tidyCovariateData Tidying covariates took 2.35 mins
+2021-01-06 08:59:45 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 08:59:55 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 09:00:04 [Main thread] INFO PatientLevelPrediction fitGLMModel Running Cyclops
+2021-01-06 09:00:52 [Main thread] INFO PatientLevelPrediction fitGLMModel Done.
+2021-01-06 09:00:52 [Main thread] INFO PatientLevelPrediction fitGLMModel GLM fit status: OK
+2021-01-06 09:00:52 [Main thread] INFO PatientLevelPrediction fitGLMModel Fitting model took 1.12 mins
+2021-01-06 09:01:05 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Creating variable importance data frame
+2021-01-06 09:01:05 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Getting predictions on train set
+2021-01-06 09:01:05 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 09:01:15 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 09:01:16 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 1.18 secs
+2021-01-06 09:01:17 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 09:01:32 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 09:01:37 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 09:01:41 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 09:01:41 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.482 secs
+2021-01-06 09:01:41 [Main thread] INFO PatientLevelPrediction Train set evaluation
+2021-01-06 09:01:41 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 82.59
+2021-01-06 09:01:41 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 80.81
+2021-01-06 09:01:41 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 84.37
+2021-01-06 09:01:41 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 22.18
+2021-01-06 09:01:41 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.04
+2021-01-06 09:01:42 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.041 : observed risk 0.041
+2021-01-06 09:01:42 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: 8e-04 - gradient:1.0352
+2021-01-06 09:01:42 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 1.30 intercept: -0.01
+2021-01-06 09:01:42 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.22
+2021-01-06 09:01:42 [Main thread] INFO PatientLevelPrediction Test set evaluation
+2021-01-06 09:01:42 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 76.98
+2021-01-06 09:01:42 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 73.26
+2021-01-06 09:01:42 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 80.69
+2021-01-06 09:01:42 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 15.62
+2021-01-06 09:01:42 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.04
+2021-01-06 09:01:42 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.0417 : observed risk 0.0409
+2021-01-06 09:01:42 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: -0.0234 - gradient:1.0018
+2021-01-06 09:01:42 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 0.93 intercept: 0.00
+2021-01-06 09:01:42 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.16
+2021-01-06 09:01:43 [Main thread] INFO PatientLevelPrediction Calculating covariate summary @ 2021-01-06 09:01:43
+2021-01-06 09:01:43 [Main thread] INFO PatientLevelPrediction This can take a while...
+2021-01-06 09:02:42 [Main thread] INFO PatientLevelPrediction Finished covariate summary @ 2021-01-06 09:02:42
+2021-01-06 09:02:42 [Main thread] INFO PatientLevelPrediction Saving PlpResult
+2021-01-06 09:02:45 [Main thread] INFO PatientLevelPrediction plpResult saved to ..\./results/mdcd/Analysis_2\plpResult
+2021-01-06 09:02:45 [Main thread] INFO PatientLevelPrediction Log saved to ./results/mdcd/Analysis_2/plplog.txt
+2021-01-06 09:02:45 [Main thread] INFO PatientLevelPrediction Run finished successfully.
diff --git a/PredictingHFinT2DM/data/Analysis_4/plpResult.rds b/PredictingHFinT2DM/data/Analysis_4/plpResult.rds
index 0312384b..df584b93 100644
Binary files a/PredictingHFinT2DM/data/Analysis_4/plpResult.rds and b/PredictingHFinT2DM/data/Analysis_4/plpResult.rds differ
diff --git a/PredictingHFinT2DM/data/Analysis_5/plpLog.txt b/PredictingHFinT2DM/data/Analysis_5/plpLog.txt
new file mode 100644
index 00000000..7f5ec8c1
--- /dev/null
+++ b/PredictingHFinT2DM/data/Analysis_5/plpLog.txt
@@ -0,0 +1,57 @@
+2021-01-06 07:50:26 [Main thread] INFO PatientLevelPrediction Patient-Level Prediction Package version 4.2.5
+2021-01-06 07:50:26 [Main thread] INFO PatientLevelPrediction AnalysisID: Analysis_1
+2021-01-06 07:50:26 [Main thread] INFO PatientLevelPrediction CohortID: 19693
+2021-01-06 07:50:26 [Main thread] INFO PatientLevelPrediction OutcomeID: 19692
+2021-01-06 07:50:26 [Main thread] INFO PatientLevelPrediction Cohort size: 32271
+2021-01-06 07:50:26 [Main thread] INFO PatientLevelPrediction Covariates: 3
+2021-01-06 07:50:26 [Main thread] INFO PatientLevelPrediction Population size: 22433
+2021-01-06 07:50:26 [Main thread] INFO PatientLevelPrediction Cases: 1658
+2021-01-06 07:50:26 [Main thread] WARN PatientLevelPrediction personSplitter deprecatedWarning: 'personSplitter' is deprecated. Use 'randomSplitter' instead. See help("Deprecated")
+2021-01-06 07:50:26 [Main thread] INFO PatientLevelPrediction randomSplitter Creating a 25% test and 75% train (into 3 folds) random stratified split by class
+2021-01-06 07:50:26 [Main thread] INFO PatientLevelPrediction randomSplitter Data split into 5607 test cases and 16826 train cases (5609, 5609, 5608)
+2021-01-06 07:50:26 [Main thread] INFO PatientLevelPrediction Training Lasso Logistic Regression model
+2021-01-06 07:50:27 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 1 redundant covariates
+2021-01-06 07:50:27 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 0 infrequent covariates
+2021-01-06 07:50:27 [Main thread] INFO FeatureExtraction tidyCovariateData Normalizing covariates
+2021-01-06 07:50:27 [Main thread] INFO FeatureExtraction tidyCovariateData Tidying covariates took 1.09 secs
+2021-01-06 07:50:28 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 07:50:28 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 07:50:28 [Main thread] INFO PatientLevelPrediction fitGLMModel Running Cyclops
+2021-01-06 07:50:35 [Main thread] INFO PatientLevelPrediction fitGLMModel Done.
+2021-01-06 07:50:35 [Main thread] INFO PatientLevelPrediction fitGLMModel GLM fit status: OK
+2021-01-06 07:50:35 [Main thread] INFO PatientLevelPrediction fitGLMModel Fitting model took 7.81 secs
+2021-01-06 07:50:35 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Creating variable importance data frame
+2021-01-06 07:50:35 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Getting predictions on train set
+2021-01-06 07:50:35 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 07:50:36 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 07:50:36 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.179 secs
+2021-01-06 07:50:36 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 07:50:36 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 07:50:37 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 07:50:37 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 07:50:37 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.155 secs
+2021-01-06 07:50:37 [Main thread] INFO PatientLevelPrediction Train set evaluation
+2021-01-06 07:50:37 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 63.40
+2021-01-06 07:50:37 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 12.75
+2021-01-06 07:50:37 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.07
+2021-01-06 07:50:37 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.0742 : observed risk 0.0739
+2021-01-06 07:50:38 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: -0.0044 - gradient:1.0038
+2021-01-06 07:50:38 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 1.11 intercept: -0.01
+2021-01-06 07:50:38 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.13
+2021-01-06 07:50:38 [Main thread] INFO PatientLevelPrediction Test set evaluation
+2021-01-06 07:50:38 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 63.78
+2021-01-06 07:50:38 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 60.96
+2021-01-06 07:50:38 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 66.59
+2021-01-06 07:50:38 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 13.02
+2021-01-06 07:50:38 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.07
+2021-01-06 07:50:38 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.0741 : observed risk 0.0738
+2021-01-06 07:50:38 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: -0.0034 - gradient:1.0041
+2021-01-06 07:50:38 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 1.10 intercept: -0.01
+2021-01-06 07:50:39 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.13
+2021-01-06 07:50:40 [Main thread] INFO PatientLevelPrediction Calculating covariate summary @ 2021-01-06 07:50:40
+2021-01-06 07:50:40 [Main thread] INFO PatientLevelPrediction This can take a while...
+2021-01-06 07:50:40 [Main thread] INFO PatientLevelPrediction Finished covariate summary @ 2021-01-06 07:50:40
+2021-01-06 07:50:40 [Main thread] INFO PatientLevelPrediction Saving PlpResult
+2021-01-06 07:50:41 [Main thread] INFO PatientLevelPrediction plpResult saved to ..\./results/mdcr/Analysis_1\plpResult
+2021-01-06 07:50:41 [Main thread] INFO PatientLevelPrediction Log saved to ./results/mdcr/Analysis_1/plplog.txt
+2021-01-06 07:50:41 [Main thread] INFO PatientLevelPrediction Run finished successfully.
diff --git a/PredictingHFinT2DM/data/Analysis_5/plpResult.rds b/PredictingHFinT2DM/data/Analysis_5/plpResult.rds
new file mode 100644
index 00000000..99b49fa4
Binary files /dev/null and b/PredictingHFinT2DM/data/Analysis_5/plpResult.rds differ
diff --git a/PredictingHFinT2DM/data/Analysis_6/plpLog.txt b/PredictingHFinT2DM/data/Analysis_6/plpLog.txt
index 48175967..a44271cb 100644
--- a/PredictingHFinT2DM/data/Analysis_6/plpLog.txt
+++ b/PredictingHFinT2DM/data/Analysis_6/plpLog.txt
@@ -1,55 +1,57 @@
-2020-07-08 09:29:44 [Main thread] INFO PatientLevelPrediction Patient-Level Prediction Package version 4.0.2
-2020-07-08 09:29:44 [Main thread] INFO PatientLevelPrediction AnalysisID: Analysis_6
-2020-07-08 09:29:44 [Main thread] INFO PatientLevelPrediction CohortID: 13897
-2020-07-08 09:29:44 [Main thread] INFO PatientLevelPrediction OutcomeID: 11696
-2020-07-08 09:29:44 [Main thread] INFO PatientLevelPrediction Cohort size: 7829
-2020-07-08 09:29:44 [Main thread] INFO PatientLevelPrediction Covariates: 33397
-2020-07-08 09:29:44 [Main thread] INFO PatientLevelPrediction Population size: 4888
-2020-07-08 09:29:44 [Main thread] INFO PatientLevelPrediction Cases: 96
-2020-07-08 09:29:44 [Main thread] WARN PatientLevelPrediction personSplitter deprecatedWarning: 'personSplitter' is deprecated. Use 'randomSplitter' instead. See help("Deprecated")
-2020-07-08 09:29:44 [Main thread] INFO PatientLevelPrediction randomSplitter Creating a 25% test and 75% train (into 3 folds) random stratified split by class
-2020-07-08 09:29:44 [Main thread] INFO PatientLevelPrediction randomSplitter Data split into 1222 test cases and 3666 train cases (1222, 1222, 1222)
-2020-07-08 09:29:44 [Main thread] INFO PatientLevelPrediction Training Lasso Logistic Regression model
-2020-07-08 09:29:49 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 5 redundant covariates
-2020-07-08 09:29:49 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 19054 infrequent covariates
-2020-07-08 09:29:49 [Main thread] INFO FeatureExtraction tidyCovariateData Normalizing covariates
-2020-07-08 09:29:54 [Main thread] INFO FeatureExtraction tidyCovariateData Tidying covariates took 10.4 secs
-2020-07-08 09:29:54 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:29:57 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:29:59 [Main thread] INFO PatientLevelPrediction fitGLMModel Running Cyclops
-2020-07-08 09:30:10 [Main thread] INFO PatientLevelPrediction fitGLMModel Done.
-2020-07-08 09:30:10 [Main thread] INFO PatientLevelPrediction fitGLMModel GLM fit status: OK
-2020-07-08 09:30:10 [Main thread] INFO PatientLevelPrediction fitGLMModel Fitting model took 15.4 secs
-2020-07-08 09:30:11 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Creating variable importance data frame
-2020-07-08 09:30:12 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Getting predictions on train set
-2020-07-08 09:30:12 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:30:14 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:30:14 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.296 secs
-2020-07-08 09:30:14 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:30:16 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:30:17 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:30:18 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:30:18 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.15 secs
-2020-07-08 09:30:18 [Main thread] INFO PatientLevelPrediction Train set evaluation
-2020-07-08 09:30:18 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 86.40
-2020-07-08 09:30:18 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 82.22
-2020-07-08 09:30:18 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 90.59
-2020-07-08 09:30:18 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 25.43
-2020-07-08 09:30:18 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.02
-2020-07-08 09:30:18 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration gradient: 1.72 intercept: -0.01
-2020-07-08 09:30:18 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.26
-2020-07-08 09:30:18 [Main thread] INFO PatientLevelPrediction Test set evaluation
-2020-07-08 09:30:18 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 71.21
-2020-07-08 09:30:18 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 62.31
-2020-07-08 09:30:18 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 80.10
-2020-07-08 09:30:18 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 4.61
-2020-07-08 09:30:18 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.02
-2020-07-08 09:30:19 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration gradient: 0.78 intercept: 0.01
-2020-07-08 09:30:19 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.05
-2020-07-08 09:30:19 [Main thread] INFO PatientLevelPrediction Calculating covariate summary @ 2020-07-08 09:30:19
-2020-07-08 09:30:19 [Main thread] INFO PatientLevelPrediction This can take a while...
-2020-07-08 09:30:58 [Main thread] INFO PatientLevelPrediction Finished covariate summary @ 2020-07-08 09:30:58
-2020-07-08 09:30:58 [Main thread] INFO PatientLevelPrediction Saving PlpResult
-2020-07-08 09:31:00 [Main thread] INFO PatientLevelPrediction plpResult saved to ..\./hfint2dm07072020Results/mdcd/Analysis_6\plpResult
-2020-07-08 09:31:00 [Main thread] INFO PatientLevelPrediction Log saved to ./hfint2dm07072020Results/mdcd/Analysis_6/plplog.txt
-2020-07-08 09:31:00 [Main thread] INFO PatientLevelPrediction Run finished successfully.
+2021-01-06 08:20:09 [Main thread] INFO PatientLevelPrediction Patient-Level Prediction Package version 4.2.5
+2021-01-06 08:20:09 [Main thread] INFO PatientLevelPrediction AnalysisID: Analysis_2
+2021-01-06 08:20:09 [Main thread] INFO PatientLevelPrediction CohortID: 19693
+2021-01-06 08:20:09 [Main thread] INFO PatientLevelPrediction OutcomeID: 19692
+2021-01-06 08:20:09 [Main thread] INFO PatientLevelPrediction Cohort size: 32271
+2021-01-06 08:20:09 [Main thread] INFO PatientLevelPrediction Covariates: 60667
+2021-01-06 08:20:09 [Main thread] INFO PatientLevelPrediction Population size: 22433
+2021-01-06 08:20:09 [Main thread] INFO PatientLevelPrediction Cases: 1658
+2021-01-06 08:20:09 [Main thread] WARN PatientLevelPrediction personSplitter deprecatedWarning: 'personSplitter' is deprecated. Use 'randomSplitter' instead. See help("Deprecated")
+2021-01-06 08:20:09 [Main thread] INFO PatientLevelPrediction randomSplitter Creating a 25% test and 75% train (into 3 folds) random stratified split by class
+2021-01-06 08:20:09 [Main thread] INFO PatientLevelPrediction randomSplitter Data split into 5607 test cases and 16826 train cases (5609, 5609, 5608)
+2021-01-06 08:20:09 [Main thread] INFO PatientLevelPrediction Training Lasso Logistic Regression model
+2021-01-06 08:21:38 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 2 redundant covariates
+2021-01-06 08:21:38 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 46318 infrequent covariates
+2021-01-06 08:21:38 [Main thread] INFO FeatureExtraction tidyCovariateData Normalizing covariates
+2021-01-06 08:22:42 [Main thread] INFO FeatureExtraction tidyCovariateData Tidying covariates took 2.54 mins
+2021-01-06 08:22:42 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 08:22:53 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 08:23:01 [Main thread] INFO PatientLevelPrediction fitGLMModel Running Cyclops
+2021-01-06 08:25:18 [Main thread] INFO PatientLevelPrediction fitGLMModel Done.
+2021-01-06 08:25:18 [Main thread] INFO PatientLevelPrediction fitGLMModel GLM fit status: OK
+2021-01-06 08:25:18 [Main thread] INFO PatientLevelPrediction fitGLMModel Fitting model took 2.6 mins
+2021-01-06 08:25:29 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Creating variable importance data frame
+2021-01-06 08:25:30 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Getting predictions on train set
+2021-01-06 08:25:30 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 08:25:42 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 08:25:43 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 1.64 secs
+2021-01-06 08:25:44 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 08:26:04 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 08:26:11 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 08:26:15 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 08:26:15 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.631 secs
+2021-01-06 08:26:15 [Main thread] INFO PatientLevelPrediction Train set evaluation
+2021-01-06 08:26:16 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 78.33
+2021-01-06 08:26:16 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 25.88
+2021-01-06 08:26:16 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.06
+2021-01-06 08:26:16 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.074 : observed risk 0.0739
+2021-01-06 08:26:16 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: -0.0012 - gradient:1.03
+2021-01-06 08:26:16 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 1.23 intercept: -0.02
+2021-01-06 08:26:17 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.26
+2021-01-06 08:26:17 [Main thread] INFO PatientLevelPrediction Test set evaluation
+2021-01-06 08:26:17 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 72.87
+2021-01-06 08:26:17 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 70.34
+2021-01-06 08:26:17 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 75.40
+2021-01-06 08:26:17 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 19.42
+2021-01-06 08:26:17 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.06
+2021-01-06 08:26:17 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.0764 : observed risk 0.0738
+2021-01-06 08:26:17 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: -0.0398 - gradient:0.9911
+2021-01-06 08:26:17 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 0.88 intercept: 0.01
+2021-01-06 08:26:18 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.20
+2021-01-06 08:26:18 [Main thread] INFO PatientLevelPrediction Calculating covariate summary @ 2021-01-06 08:26:18
+2021-01-06 08:26:18 [Main thread] INFO PatientLevelPrediction This can take a while...
+2021-01-06 08:27:28 [Main thread] INFO PatientLevelPrediction Finished covariate summary @ 2021-01-06 08:27:28
+2021-01-06 08:27:28 [Main thread] INFO PatientLevelPrediction Saving PlpResult
+2021-01-06 08:27:31 [Main thread] INFO PatientLevelPrediction plpResult saved to ..\./results/mdcr/Analysis_2\plpResult
+2021-01-06 08:27:31 [Main thread] INFO PatientLevelPrediction Log saved to ./results/mdcr/Analysis_2/plplog.txt
+2021-01-06 08:27:31 [Main thread] INFO PatientLevelPrediction Run finished successfully.
diff --git a/PredictingHFinT2DM/data/Analysis_6/plpResult.rds b/PredictingHFinT2DM/data/Analysis_6/plpResult.rds
index 2f9ed520..4341866d 100644
Binary files a/PredictingHFinT2DM/data/Analysis_6/plpResult.rds and b/PredictingHFinT2DM/data/Analysis_6/plpResult.rds differ
diff --git a/PredictingHFinT2DM/data/Analysis_7/plpLog.txt b/PredictingHFinT2DM/data/Analysis_7/plpLog.txt
new file mode 100644
index 00000000..822e81b1
--- /dev/null
+++ b/PredictingHFinT2DM/data/Analysis_7/plpLog.txt
@@ -0,0 +1,55 @@
+2021-01-06 09:19:01 [Main thread] INFO PatientLevelPrediction Patient-Level Prediction Package version 4.2.5
+2021-01-06 09:19:01 [Main thread] INFO PatientLevelPrediction AnalysisID: Analysis_1
+2021-01-06 09:19:01 [Main thread] INFO PatientLevelPrediction CohortID: 19693
+2021-01-06 09:19:01 [Main thread] INFO PatientLevelPrediction OutcomeID: 19692
+2021-01-06 09:19:01 [Main thread] INFO PatientLevelPrediction Cohort size: 141600
+2021-01-06 09:19:01 [Main thread] INFO PatientLevelPrediction Covariates: 3
+2021-01-06 09:19:01 [Main thread] INFO PatientLevelPrediction Population size: 92272
+2021-01-06 09:19:01 [Main thread] INFO PatientLevelPrediction Cases: 4332
+2021-01-06 09:19:01 [Main thread] WARN PatientLevelPrediction personSplitter deprecatedWarning: 'personSplitter' is deprecated. Use 'randomSplitter' instead. See help("Deprecated")
+2021-01-06 09:19:01 [Main thread] INFO PatientLevelPrediction randomSplitter Creating a 25% test and 75% train (into 3 folds) random stratified split by class
+2021-01-06 09:19:01 [Main thread] INFO PatientLevelPrediction randomSplitter Data split into 23068 test cases and 69204 train cases (23068, 23068, 23068)
+2021-01-06 09:19:02 [Main thread] INFO PatientLevelPrediction Training Lasso Logistic Regression model
+2021-01-06 09:19:03 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 1 redundant covariates
+2021-01-06 09:19:03 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 0 infrequent covariates
+2021-01-06 09:19:03 [Main thread] INFO FeatureExtraction tidyCovariateData Normalizing covariates
+2021-01-06 09:19:03 [Main thread] INFO FeatureExtraction tidyCovariateData Tidying covariates took 1.62 secs
+2021-01-06 09:19:03 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 09:19:04 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 09:19:05 [Main thread] INFO PatientLevelPrediction fitGLMModel Running Cyclops
+2021-01-06 09:19:21 [Main thread] INFO PatientLevelPrediction fitGLMModel Done.
+2021-01-06 09:19:21 [Main thread] INFO PatientLevelPrediction fitGLMModel GLM fit status: OK
+2021-01-06 09:19:21 [Main thread] INFO PatientLevelPrediction fitGLMModel Fitting model took 17.6 secs
+2021-01-06 09:19:25 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Creating variable importance data frame
+2021-01-06 09:19:25 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Getting predictions on train set
+2021-01-06 09:19:25 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 09:19:26 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 09:19:26 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.406 secs
+2021-01-06 09:19:27 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 09:19:27 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 09:19:28 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 09:19:28 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 09:19:28 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.193 secs
+2021-01-06 09:19:28 [Main thread] INFO PatientLevelPrediction Train set evaluation
+2021-01-06 09:19:28 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 69.43
+2021-01-06 09:19:28 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 10.73
+2021-01-06 09:19:28 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.04
+2021-01-06 09:19:30 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.0469 : observed risk 0.0469
+2021-01-06 09:19:31 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: 0 - gradient:1.0009
+2021-01-06 09:19:31 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 1.02 intercept: -0.00
+2021-01-06 09:19:33 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.11
+2021-01-06 09:19:33 [Main thread] INFO PatientLevelPrediction Test set evaluation
+2021-01-06 09:19:33 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 69.37
+2021-01-06 09:19:33 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 10.90
+2021-01-06 09:19:33 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.04
+2021-01-06 09:19:34 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.0468 : observed risk 0.0469
+2021-01-06 09:19:34 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: 0.0045 - gradient:1.0009
+2021-01-06 09:19:34 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 1.04 intercept: -0.00
+2021-01-06 09:19:34 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.11
+2021-01-06 09:19:35 [Main thread] INFO PatientLevelPrediction Calculating covariate summary @ 2021-01-06 09:19:35
+2021-01-06 09:19:35 [Main thread] INFO PatientLevelPrediction This can take a while...
+2021-01-06 09:19:36 [Main thread] INFO PatientLevelPrediction Finished covariate summary @ 2021-01-06 09:19:36
+2021-01-06 09:19:36 [Main thread] INFO PatientLevelPrediction Saving PlpResult
+2021-01-06 09:19:38 [Main thread] INFO PatientLevelPrediction plpResult saved to ..\./results/optumDod/Analysis_1\plpResult
+2021-01-06 09:19:38 [Main thread] INFO PatientLevelPrediction Log saved to ./results/optumDod/Analysis_1/plplog.txt
+2021-01-06 09:19:38 [Main thread] INFO PatientLevelPrediction Run finished successfully.
diff --git a/PredictingHFinT2DM/data/Analysis_7/plpResult.rds b/PredictingHFinT2DM/data/Analysis_7/plpResult.rds
new file mode 100644
index 00000000..6bc292d5
Binary files /dev/null and b/PredictingHFinT2DM/data/Analysis_7/plpResult.rds differ
diff --git a/PredictingHFinT2DM/data/Analysis_8/plpLog.txt b/PredictingHFinT2DM/data/Analysis_8/plpLog.txt
index fd3d8ab0..ce00fe36 100644
--- a/PredictingHFinT2DM/data/Analysis_8/plpLog.txt
+++ b/PredictingHFinT2DM/data/Analysis_8/plpLog.txt
@@ -1,55 +1,55 @@
-2020-07-08 09:35:41 [Main thread] INFO PatientLevelPrediction Patient-Level Prediction Package version 4.0.2
-2020-07-08 09:35:41 [Main thread] INFO PatientLevelPrediction AnalysisID: Analysis_8
-2020-07-08 09:35:41 [Main thread] INFO PatientLevelPrediction CohortID: 13897
-2020-07-08 09:35:41 [Main thread] INFO PatientLevelPrediction OutcomeID: 11696
-2020-07-08 09:35:41 [Main thread] INFO PatientLevelPrediction Cohort size: 31902
-2020-07-08 09:35:41 [Main thread] INFO PatientLevelPrediction Covariates: 45255
-2020-07-08 09:35:41 [Main thread] INFO PatientLevelPrediction Population size: 19114
-2020-07-08 09:35:41 [Main thread] INFO PatientLevelPrediction Cases: 343
-2020-07-08 09:35:41 [Main thread] WARN PatientLevelPrediction personSplitter deprecatedWarning: 'personSplitter' is deprecated. Use 'randomSplitter' instead. See help("Deprecated")
-2020-07-08 09:35:41 [Main thread] INFO PatientLevelPrediction randomSplitter Creating a 25% test and 75% train (into 3 folds) random stratified split by class
-2020-07-08 09:35:41 [Main thread] INFO PatientLevelPrediction randomSplitter Data split into 4777 test cases and 14337 train cases (4779, 4779, 4779)
-2020-07-08 09:35:42 [Main thread] INFO PatientLevelPrediction Training Lasso Logistic Regression model
-2020-07-08 09:35:58 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 2 redundant covariates
-2020-07-08 09:35:58 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 33191 infrequent covariates
-2020-07-08 09:35:58 [Main thread] INFO FeatureExtraction tidyCovariateData Normalizing covariates
-2020-07-08 09:36:15 [Main thread] INFO FeatureExtraction tidyCovariateData Tidying covariates took 33.2 secs
-2020-07-08 09:36:15 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:36:22 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:36:27 [Main thread] INFO PatientLevelPrediction fitGLMModel Running Cyclops
-2020-07-08 09:37:45 [Main thread] INFO PatientLevelPrediction fitGLMModel Done.
-2020-07-08 09:37:45 [Main thread] INFO PatientLevelPrediction fitGLMModel GLM fit status: OK
-2020-07-08 09:37:45 [Main thread] INFO PatientLevelPrediction fitGLMModel Fitting model took 1.5 mins
-2020-07-08 09:37:57 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Creating variable importance data frame
-2020-07-08 09:37:57 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Getting predictions on train set
-2020-07-08 09:37:57 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:38:04 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:38:05 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.944 secs
-2020-07-08 09:38:05 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:38:09 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:38:13 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
-2020-07-08 09:38:16 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
-2020-07-08 09:38:16 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.431 secs
-2020-07-08 09:38:16 [Main thread] INFO PatientLevelPrediction Train set evaluation
-2020-07-08 09:38:16 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 84.28
-2020-07-08 09:38:16 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 81.85
-2020-07-08 09:38:16 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 86.71
-2020-07-08 09:38:16 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 14.37
-2020-07-08 09:38:16 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.02
-2020-07-08 09:38:17 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration gradient: 1.49 intercept: -0.01
-2020-07-08 09:38:17 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.15
-2020-07-08 09:38:17 [Main thread] INFO PatientLevelPrediction Test set evaluation
-2020-07-08 09:38:17 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 77.72
-2020-07-08 09:38:17 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 73.27
-2020-07-08 09:38:17 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 82.17
-2020-07-08 09:38:17 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 5.55
-2020-07-08 09:38:17 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.02
-2020-07-08 09:38:17 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration gradient: 1.01 intercept: -0.00
-2020-07-08 09:38:17 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.06
-2020-07-08 09:38:17 [Main thread] INFO PatientLevelPrediction Calculating covariate summary @ 2020-07-08 09:38:17
-2020-07-08 09:38:17 [Main thread] INFO PatientLevelPrediction This can take a while...
-2020-07-08 09:40:51 [Main thread] INFO PatientLevelPrediction Finished covariate summary @ 2020-07-08 09:40:51
-2020-07-08 09:40:51 [Main thread] INFO PatientLevelPrediction Saving PlpResult
-2020-07-08 09:40:54 [Main thread] INFO PatientLevelPrediction plpResult saved to ..\./hfint2dm07072020Results/optumDod/Analysis_8\plpResult
-2020-07-08 09:40:54 [Main thread] INFO PatientLevelPrediction Log saved to ./hfint2dm07072020Results/optumDod/Analysis_8/plplog.txt
-2020-07-08 09:40:54 [Main thread] INFO PatientLevelPrediction Run finished successfully.
+2021-01-06 09:51:25 [Main thread] INFO PatientLevelPrediction Patient-Level Prediction Package version 4.2.5
+2021-01-06 09:51:25 [Main thread] INFO PatientLevelPrediction AnalysisID: Analysis_2
+2021-01-06 09:51:25 [Main thread] INFO PatientLevelPrediction CohortID: 19693
+2021-01-06 09:51:25 [Main thread] INFO PatientLevelPrediction OutcomeID: 19692
+2021-01-06 09:51:25 [Main thread] INFO PatientLevelPrediction Cohort size: 141600
+2021-01-06 09:51:25 [Main thread] INFO PatientLevelPrediction Covariates: 105347
+2021-01-06 09:51:25 [Main thread] INFO PatientLevelPrediction Population size: 92272
+2021-01-06 09:51:25 [Main thread] INFO PatientLevelPrediction Cases: 4332
+2021-01-06 09:51:25 [Main thread] WARN PatientLevelPrediction personSplitter deprecatedWarning: 'personSplitter' is deprecated. Use 'randomSplitter' instead. See help("Deprecated")
+2021-01-06 09:51:25 [Main thread] INFO PatientLevelPrediction randomSplitter Creating a 25% test and 75% train (into 3 folds) random stratified split by class
+2021-01-06 09:51:25 [Main thread] INFO PatientLevelPrediction randomSplitter Data split into 23068 test cases and 69204 train cases (23068, 23068, 23068)
+2021-01-06 09:51:26 [Main thread] INFO PatientLevelPrediction Training Lasso Logistic Regression model
+2021-01-06 09:59:36 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 1 redundant covariates
+2021-01-06 09:59:36 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 89264 infrequent covariates
+2021-01-06 09:59:36 [Main thread] INFO FeatureExtraction tidyCovariateData Normalizing covariates
+2021-01-06 10:05:15 [Main thread] INFO FeatureExtraction tidyCovariateData Tidying covariates took 13.8 mins
+2021-01-06 10:05:15 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 10:06:14 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 10:07:01 [Main thread] INFO PatientLevelPrediction fitGLMModel Running Cyclops
+2021-01-06 10:17:01 [Main thread] INFO PatientLevelPrediction fitGLMModel Done.
+2021-01-06 10:17:01 [Main thread] INFO PatientLevelPrediction fitGLMModel GLM fit status: OK
+2021-01-06 10:17:01 [Main thread] INFO PatientLevelPrediction fitGLMModel Fitting model took 11.8 mins
+2021-01-06 10:18:08 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Creating variable importance data frame
+2021-01-06 10:18:09 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Getting predictions on train set
+2021-01-06 10:18:09 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 10:19:12 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 10:19:22 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 10.3 secs
+2021-01-06 10:19:23 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 10:21:33 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 10:21:59 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 10:22:17 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 10:22:21 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 3.42 secs
+2021-01-06 10:22:21 [Main thread] INFO PatientLevelPrediction Train set evaluation
+2021-01-06 10:22:21 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 81.76
+2021-01-06 10:22:21 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 24.35
+2021-01-06 10:22:21 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.04
+2021-01-06 10:22:23 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.0469 : observed risk 0.0469
+2021-01-06 10:22:24 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: 7e-04 - gradient:1.021
+2021-01-06 10:22:24 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 1.12 intercept: -0.01
+2021-01-06 10:22:26 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.24
+2021-01-06 10:22:26 [Main thread] INFO PatientLevelPrediction Test set evaluation
+2021-01-06 10:22:26 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 80.16
+2021-01-06 10:22:26 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 21.59
+2021-01-06 10:22:26 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.04
+2021-01-06 10:22:27 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.0462 : observed risk 0.0469
+2021-01-06 10:22:27 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: 0.0196 - gradient:1.0093
+2021-01-06 10:22:27 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 1.07 intercept: -0.00
+2021-01-06 10:22:28 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.22
+2021-01-06 10:22:29 [Main thread] INFO PatientLevelPrediction Calculating covariate summary @ 2021-01-06 10:22:29
+2021-01-06 10:22:29 [Main thread] INFO PatientLevelPrediction This can take a while...
+2021-01-06 10:31:52 [Main thread] INFO PatientLevelPrediction Finished covariate summary @ 2021-01-06 10:31:52
+2021-01-06 10:31:52 [Main thread] INFO PatientLevelPrediction Saving PlpResult
+2021-01-06 10:31:57 [Main thread] INFO PatientLevelPrediction plpResult saved to ..\./results/optumDod/Analysis_2\plpResult
+2021-01-06 10:31:57 [Main thread] INFO PatientLevelPrediction Log saved to ./results/optumDod/Analysis_2/plplog.txt
+2021-01-06 10:31:57 [Main thread] INFO PatientLevelPrediction Run finished successfully.
diff --git a/PredictingHFinT2DM/data/Analysis_8/plpResult.rds b/PredictingHFinT2DM/data/Analysis_8/plpResult.rds
index 8b59f1e4..a6f52e7e 100644
Binary files a/PredictingHFinT2DM/data/Analysis_8/plpResult.rds and b/PredictingHFinT2DM/data/Analysis_8/plpResult.rds differ
diff --git a/PredictingHFinT2DM/data/Analysis_9/plpLog.txt b/PredictingHFinT2DM/data/Analysis_9/plpLog.txt
new file mode 100644
index 00000000..f429f80f
--- /dev/null
+++ b/PredictingHFinT2DM/data/Analysis_9/plpLog.txt
@@ -0,0 +1,57 @@
+2021-01-06 11:00:30 [Main thread] INFO PatientLevelPrediction Patient-Level Prediction Package version 4.2.5
+2021-01-06 11:00:30 [Main thread] INFO PatientLevelPrediction AnalysisID: Analysis_1
+2021-01-06 11:00:30 [Main thread] INFO PatientLevelPrediction CohortID: 19693
+2021-01-06 11:00:30 [Main thread] INFO PatientLevelPrediction OutcomeID: 19692
+2021-01-06 11:00:30 [Main thread] INFO PatientLevelPrediction Cohort size: 213363
+2021-01-06 11:00:30 [Main thread] INFO PatientLevelPrediction Covariates: 3
+2021-01-06 11:00:30 [Main thread] INFO PatientLevelPrediction Population size: 159633
+2021-01-06 11:00:30 [Main thread] INFO PatientLevelPrediction Cases: 3690
+2021-01-06 11:00:30 [Main thread] WARN PatientLevelPrediction personSplitter deprecatedWarning: 'personSplitter' is deprecated. Use 'randomSplitter' instead. See help("Deprecated")
+2021-01-06 11:00:30 [Main thread] INFO PatientLevelPrediction randomSplitter Creating a 25% test and 75% train (into 3 folds) random stratified split by class
+2021-01-06 11:00:30 [Main thread] INFO PatientLevelPrediction randomSplitter Data split into 39907 test cases and 119726 train cases (39909, 39909, 39908)
+2021-01-06 11:00:30 [Main thread] INFO PatientLevelPrediction Training Lasso Logistic Regression model
+2021-01-06 11:00:32 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 1 redundant covariates
+2021-01-06 11:00:32 [Main thread] INFO FeatureExtraction tidyCovariateData Removing 0 infrequent covariates
+2021-01-06 11:00:32 [Main thread] INFO FeatureExtraction tidyCovariateData Normalizing covariates
+2021-01-06 11:00:32 [Main thread] INFO FeatureExtraction tidyCovariateData Tidying covariates took 1.86 secs
+2021-01-06 11:00:32 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 11:00:34 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 11:00:35 [Main thread] INFO PatientLevelPrediction fitGLMModel Running Cyclops
+2021-01-06 11:01:04 [Main thread] INFO PatientLevelPrediction fitGLMModel Done.
+2021-01-06 11:01:04 [Main thread] INFO PatientLevelPrediction fitGLMModel GLM fit status: OK
+2021-01-06 11:01:04 [Main thread] INFO PatientLevelPrediction fitGLMModel Fitting model took 31.9 secs
+2021-01-06 11:01:09 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Creating variable importance data frame
+2021-01-06 11:01:09 [Main thread] INFO PatientLevelPrediction fitLassoLogisticRegression Getting predictions on train set
+2021-01-06 11:01:09 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 11:01:10 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 11:01:11 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.77 secs
+2021-01-06 11:01:12 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 11:01:13 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 11:01:13 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Starting to limit covariate data to population...
+2021-01-06 11:01:14 [Main thread] INFO PatientLevelPrediction limitCovariatesToPopulation Finished limiting covariate data to population...
+2021-01-06 11:01:14 [Main thread] INFO PatientLevelPrediction predictProbabilities Prediction took 0.36 secs
+2021-01-06 11:01:14 [Main thread] INFO PatientLevelPrediction Train set evaluation
+2021-01-06 11:01:14 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 71.77
+2021-01-06 11:01:14 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 6.19
+2021-01-06 11:01:14 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.02
+2021-01-06 11:01:16 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.0231 : observed risk 0.0231
+2021-01-06 11:01:18 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: 0 - gradient:1.0001
+2021-01-06 11:01:19 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 1.04 intercept: -0.00
+2021-01-06 11:01:21 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.06
+2021-01-06 11:01:21 [Main thread] INFO PatientLevelPrediction Test set evaluation
+2021-01-06 11:01:22 [Main thread] INFO PatientLevelPrediction evaluatePlp AUC: 70.79
+2021-01-06 11:01:22 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% lower AUC: 69.06
+2021-01-06 11:01:22 [Main thread] INFO PatientLevelPrediction evaluatePlp 95% upper AUC: 72.52
+2021-01-06 11:01:22 [Main thread] INFO PatientLevelPrediction evaluatePlp AUPRC: 6.54
+2021-01-06 11:01:22 [Main thread] INFO PatientLevelPrediction evaluatePlp Brier: 0.02
+2021-01-06 11:01:23 [Main thread] INFO PatientLevelPrediction evaluatePlp Calibration in large- Mean predicted risk 0.0231 : observed risk 0.0231
+2021-01-06 11:01:23 [Main thread] INFO PatientLevelPrediction evaluatePlp Weak calibration intercept: 0.0021 - gradient:0.9982
+2021-01-06 11:01:24 [Main thread] INFO PatientLevelPrediction evaluatePlp Hosmer-Lemeshow calibration gradient: 0.98 intercept: 0.00
+2021-01-06 11:01:24 [Main thread] INFO PatientLevelPrediction evaluatePlp Average Precision: 0.07
+2021-01-06 11:01:25 [Main thread] INFO PatientLevelPrediction Calculating covariate summary @ 2021-01-06 11:01:25
+2021-01-06 11:01:25 [Main thread] INFO PatientLevelPrediction This can take a while...
+2021-01-06 11:01:28 [Main thread] INFO PatientLevelPrediction Finished covariate summary @ 2021-01-06 11:01:28
+2021-01-06 11:01:28 [Main thread] INFO PatientLevelPrediction Saving PlpResult
+2021-01-06 11:01:31 [Main thread] INFO PatientLevelPrediction plpResult saved to ..\./results/panther/Analysis_1\plpResult
+2021-01-06 11:01:31 [Main thread] INFO PatientLevelPrediction Log saved to ./results/panther/Analysis_1/plplog.txt
+2021-01-06 11:01:31 [Main thread] INFO PatientLevelPrediction Run finished successfully.
diff --git a/PredictingHFinT2DM/data/Analysis_9/plpResult.rds b/PredictingHFinT2DM/data/Analysis_9/plpResult.rds
new file mode 100644
index 00000000..25b47312
Binary files /dev/null and b/PredictingHFinT2DM/data/Analysis_9/plpResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_1/validationResult.rds b/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_1/validationResult.rds
new file mode 100644
index 00000000..04fe0f3e
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_1/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_10/validationResult.rds b/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_10/validationResult.rds
new file mode 100644
index 00000000..42978be4
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_10/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_2/validationResult.rds b/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_2/validationResult.rds
new file mode 100644
index 00000000..54bc7187
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_2/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_3/validationResult.rds b/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_3/validationResult.rds
new file mode 100644
index 00000000..62c055f0
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_3/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_4/validationResult.rds b/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_4/validationResult.rds
new file mode 100644
index 00000000..77554443
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_4/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_5/validationResult.rds b/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_5/validationResult.rds
new file mode 100644
index 00000000..785be554
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_5/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_6/validationResult.rds b/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_6/validationResult.rds
new file mode 100644
index 00000000..4c30b26a
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_6/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_9/validationResult.rds b/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_9/validationResult.rds
new file mode 100644
index 00000000..5f1a3459
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/Optum Clinformatics/Analysis_9/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_1/validationResult.rds b/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_1/validationResult.rds
new file mode 100644
index 00000000..b868972a
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_1/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_2/validationResult.rds b/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_2/validationResult.rds
new file mode 100644
index 00000000..28861396
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_2/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_3/validationResult.rds b/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_3/validationResult.rds
new file mode 100644
index 00000000..1bf68c8a
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_3/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_4/validationResult.rds b/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_4/validationResult.rds
new file mode 100644
index 00000000..2105abb6
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_4/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_5/validationResult.rds b/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_5/validationResult.rds
new file mode 100644
index 00000000..28bca869
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_5/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_6/validationResult.rds b/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_6/validationResult.rds
new file mode 100644
index 00000000..b0f6fae8
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_6/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_7/validationResult.rds b/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_7/validationResult.rds
new file mode 100644
index 00000000..0530b375
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_7/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_8/validationResult.rds b/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_8/validationResult.rds
new file mode 100644
index 00000000..03b287f9
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/Optum EHR/Analysis_8/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/ccae/Analysis_10/validationResult.rds b/PredictingHFinT2DM/data/Validation/ccae/Analysis_10/validationResult.rds
index 5414a357..62ef62ff 100644
Binary files a/PredictingHFinT2DM/data/Validation/ccae/Analysis_10/validationResult.rds and b/PredictingHFinT2DM/data/Validation/ccae/Analysis_10/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/ccae/Analysis_3/validationResult.rds b/PredictingHFinT2DM/data/Validation/ccae/Analysis_3/validationResult.rds
new file mode 100644
index 00000000..560281ad
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/ccae/Analysis_3/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/ccae/Analysis_4/validationResult.rds b/PredictingHFinT2DM/data/Validation/ccae/Analysis_4/validationResult.rds
index 07203c5b..b2f34638 100644
Binary files a/PredictingHFinT2DM/data/Validation/ccae/Analysis_4/validationResult.rds and b/PredictingHFinT2DM/data/Validation/ccae/Analysis_4/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/ccae/Analysis_5/validationResult.rds b/PredictingHFinT2DM/data/Validation/ccae/Analysis_5/validationResult.rds
new file mode 100644
index 00000000..1987f1ba
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/ccae/Analysis_5/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/ccae/Analysis_6/validationResult.rds b/PredictingHFinT2DM/data/Validation/ccae/Analysis_6/validationResult.rds
index 8142676f..59cd543a 100644
Binary files a/PredictingHFinT2DM/data/Validation/ccae/Analysis_6/validationResult.rds and b/PredictingHFinT2DM/data/Validation/ccae/Analysis_6/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/ccae/Analysis_7/validationResult.rds b/PredictingHFinT2DM/data/Validation/ccae/Analysis_7/validationResult.rds
new file mode 100644
index 00000000..10a2bf7e
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/ccae/Analysis_7/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/ccae/Analysis_8/validationResult.rds b/PredictingHFinT2DM/data/Validation/ccae/Analysis_8/validationResult.rds
index 9558bfd5..4899c389 100644
Binary files a/PredictingHFinT2DM/data/Validation/ccae/Analysis_8/validationResult.rds and b/PredictingHFinT2DM/data/Validation/ccae/Analysis_8/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/ccae/Analysis_9/validationResult.rds b/PredictingHFinT2DM/data/Validation/ccae/Analysis_9/validationResult.rds
new file mode 100644
index 00000000..0dbe6886
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/ccae/Analysis_9/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/jmdc/Analysis_2/validationResult.rds b/PredictingHFinT2DM/data/Validation/jmdc/Analysis_2/validationResult.rds
deleted file mode 100644
index 8b07fcc6..00000000
Binary files a/PredictingHFinT2DM/data/Validation/jmdc/Analysis_2/validationResult.rds and /dev/null differ
diff --git a/PredictingHFinT2DM/data/Validation/jmdc/Analysis_4/validationResult.rds b/PredictingHFinT2DM/data/Validation/jmdc/Analysis_4/validationResult.rds
deleted file mode 100644
index acb82281..00000000
Binary files a/PredictingHFinT2DM/data/Validation/jmdc/Analysis_4/validationResult.rds and /dev/null differ
diff --git a/PredictingHFinT2DM/data/Validation/jmdc/Analysis_6/validationResult.rds b/PredictingHFinT2DM/data/Validation/jmdc/Analysis_6/validationResult.rds
deleted file mode 100644
index abfa7470..00000000
Binary files a/PredictingHFinT2DM/data/Validation/jmdc/Analysis_6/validationResult.rds and /dev/null differ
diff --git a/PredictingHFinT2DM/data/Validation/jmdc/Analysis_8/validationResult.rds b/PredictingHFinT2DM/data/Validation/jmdc/Analysis_8/validationResult.rds
deleted file mode 100644
index 235aba0c..00000000
Binary files a/PredictingHFinT2DM/data/Validation/jmdc/Analysis_8/validationResult.rds and /dev/null differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcd/Analysis_1/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_1/validationResult.rds
new file mode 100644
index 00000000..540c8bda
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_1/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcd/Analysis_10/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_10/validationResult.rds
index 89715c19..65582056 100644
Binary files a/PredictingHFinT2DM/data/Validation/mdcd/Analysis_10/validationResult.rds and b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_10/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcd/Analysis_2/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_2/validationResult.rds
index 2e049cba..7b03ed06 100644
Binary files a/PredictingHFinT2DM/data/Validation/mdcd/Analysis_2/validationResult.rds and b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_2/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcd/Analysis_4/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_4/validationResult.rds
deleted file mode 100644
index c2440fb6..00000000
Binary files a/PredictingHFinT2DM/data/Validation/mdcd/Analysis_4/validationResult.rds and /dev/null differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcd/Analysis_5/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_5/validationResult.rds
new file mode 100644
index 00000000..a046b235
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_5/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcd/Analysis_6/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_6/validationResult.rds
new file mode 100644
index 00000000..aedaceec
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_6/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcd/Analysis_7/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_7/validationResult.rds
new file mode 100644
index 00000000..90b6427e
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_7/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcd/Analysis_8/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_8/validationResult.rds
index 757d274f..e090035a 100644
Binary files a/PredictingHFinT2DM/data/Validation/mdcd/Analysis_8/validationResult.rds and b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_8/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcd/Analysis_9/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_9/validationResult.rds
new file mode 100644
index 00000000..c308d8f4
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/mdcd/Analysis_9/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcr/Analysis_1/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_1/validationResult.rds
new file mode 100644
index 00000000..a8e36829
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_1/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcr/Analysis_10/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_10/validationResult.rds
index ca77b342..3b73df61 100644
Binary files a/PredictingHFinT2DM/data/Validation/mdcr/Analysis_10/validationResult.rds and b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_10/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcr/Analysis_2/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_2/validationResult.rds
index 696c4b70..479ed909 100644
Binary files a/PredictingHFinT2DM/data/Validation/mdcr/Analysis_2/validationResult.rds and b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_2/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcr/Analysis_3/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_3/validationResult.rds
new file mode 100644
index 00000000..519607e6
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_3/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcr/Analysis_4/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_4/validationResult.rds
new file mode 100644
index 00000000..e0a3e258
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_4/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcr/Analysis_6/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_6/validationResult.rds
deleted file mode 100644
index fd75d4a0..00000000
Binary files a/PredictingHFinT2DM/data/Validation/mdcr/Analysis_6/validationResult.rds and /dev/null differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcr/Analysis_7/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_7/validationResult.rds
new file mode 100644
index 00000000..a9a0219b
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_7/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcr/Analysis_8/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_8/validationResult.rds
index a09471e6..8b8b801d 100644
Binary files a/PredictingHFinT2DM/data/Validation/mdcr/Analysis_8/validationResult.rds and b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_8/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/mdcr/Analysis_9/validationResult.rds b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_9/validationResult.rds
new file mode 100644
index 00000000..bba0818e
Binary files /dev/null and b/PredictingHFinT2DM/data/Validation/mdcr/Analysis_9/validationResult.rds differ
diff --git a/PredictingHFinT2DM/data/Validation/optumDod/Analysis_10/validationResult.rds b/PredictingHFinT2DM/data/Validation/optumDod/Analysis_10/validationResult.rds
deleted file mode 100644
index 46dc0ea8..00000000
Binary files a/PredictingHFinT2DM/data/Validation/optumDod/Analysis_10/validationResult.rds and /dev/null differ
diff --git a/PredictingHFinT2DM/data/Validation/optumDod/Analysis_2/validationResult.rds b/PredictingHFinT2DM/data/Validation/optumDod/Analysis_2/validationResult.rds
deleted file mode 100644
index 324f1712..00000000
Binary files a/PredictingHFinT2DM/data/Validation/optumDod/Analysis_2/validationResult.rds and /dev/null differ
diff --git a/PredictingHFinT2DM/data/Validation/optumDod/Analysis_4/validationResult.rds b/PredictingHFinT2DM/data/Validation/optumDod/Analysis_4/validationResult.rds
deleted file mode 100644
index e845f7f1..00000000
Binary files a/PredictingHFinT2DM/data/Validation/optumDod/Analysis_4/validationResult.rds and /dev/null differ
diff --git a/PredictingHFinT2DM/data/Validation/optumDod/Analysis_6/validationResult.rds b/PredictingHFinT2DM/data/Validation/optumDod/Analysis_6/validationResult.rds
deleted file mode 100644
index b03222f9..00000000
Binary files a/PredictingHFinT2DM/data/Validation/optumDod/Analysis_6/validationResult.rds and /dev/null differ
diff --git a/PredictingHFinT2DM/data/settings.csv b/PredictingHFinT2DM/data/settings.csv
index 9dbd6d20..ca7cab5f 100644
--- a/PredictingHFinT2DM/data/settings.csv
+++ b/PredictingHFinT2DM/data/settings.csv
@@ -1,11 +1,11 @@
-"outcomeId","cohortId","modelSettingsId","analysisId","devDatabase","populationSettingId","modelSettingId","covariateSettingId","modelSettingName","addExposureDaysToStart","riskWindowStart","addExposureDaysToEnd","riskWindowEnd","plpDataFolder","studyPopFile","plpResultFolder","cohortName","outcomeName"
-11696,13897,1,2,"ccae",1,1,1,"Lasso Logistic Regression",0,1,0,365,"./hfint2dm07072020Results/ccae/PlpData_L1_T13897","./hfint2dm07072020Results/ccae/StudyPop_L1_T13897_O11696_P1.rds","./hfint2dm07072020Results/ccae/Analysis_2","[RW] type 2 diabetes revised by PBR","[RW] Heart Failure ipci - first"
-13389,13897,1,1,"ccae",1,1,1,"Lasso Logistic Regression",0,1,0,365,"./hfint2dm07072020Results/ccae/PlpData_L1_T13897","./hfint2dm07072020Results/ccae/StudyPop_L1_T13897_O13389_P1.rds","./hfint2dm07072020Results/ccae/Analysis_1","[RW] type 2 diabetes revised by PBR","[RW] Heart Failure - first"
-11696,13897,1,4,"mdcr",1,1,1,"Lasso Logistic Regression",0,1,0,365,"./hfint2dm07072020Results/mdcr/PlpData_L1_T13897","./hfint2dm07072020Results/mdcr/StudyPop_L1_T13897_O11696_P1.rds","./hfint2dm07072020Results/mdcr/Analysis_4","[RW] type 2 diabetes revised by PBR","[RW] Heart Failure ipci - first"
-13389,13897,1,3,"mdcr",1,1,1,"Lasso Logistic Regression",0,1,0,365,"./hfint2dm07072020Results/mdcr/PlpData_L1_T13897","./hfint2dm07072020Results/mdcr/StudyPop_L1_T13897_O13389_P1.rds","./hfint2dm07072020Results/mdcr/Analysis_3","[RW] type 2 diabetes revised by PBR","[RW] Heart Failure - first"
-11696,13897,1,6,"mdcd",1,1,1,"Lasso Logistic Regression",0,1,0,365,"./hfint2dm07072020Results/mdcd/PlpData_L1_T13897","./hfint2dm07072020Results/mdcd/StudyPop_L1_T13897_O11696_P1.rds","./hfint2dm07072020Results/mdcd/Analysis_6","[RW] type 2 diabetes revised by PBR","[RW] Heart Failure ipci - first"
-13389,13897,1,5,"mdcd",1,1,1,"Lasso Logistic Regression",0,1,0,365,"./hfint2dm07072020Results/mdcd/PlpData_L1_T13897","./hfint2dm07072020Results/mdcd/StudyPop_L1_T13897_O13389_P1.rds","./hfint2dm07072020Results/mdcd/Analysis_5","[RW] type 2 diabetes revised by PBR","[RW] Heart Failure - first"
-11696,13897,1,8,"optumDod",1,1,1,"Lasso Logistic Regression",0,1,0,365,"./hfint2dm07072020Results/optumDod/PlpData_L1_T13897","./hfint2dm07072020Results/optumDod/StudyPop_L1_T13897_O11696_P1.rds","./hfint2dm07072020Results/optumDod/Analysis_8","[RW] type 2 diabetes revised by PBR","[RW] Heart Failure ipci - first"
-13389,13897,1,7,"optumDod",1,1,1,"Lasso Logistic Regression",0,1,0,365,"./hfint2dm07072020Results/optumDod/PlpData_L1_T13897","./hfint2dm07072020Results/optumDod/StudyPop_L1_T13897_O13389_P1.rds","./hfint2dm07072020Results/optumDod/Analysis_7","[RW] type 2 diabetes revised by PBR","[RW] Heart Failure - first"
-11696,13897,1,10,"jmdc",1,1,1,"Lasso Logistic Regression",0,1,0,365,"./hfint2dm07072020Results/jmdc/PlpData_L1_T13897","./hfint2dm07072020Results/jmdc/StudyPop_L1_T13897_O11696_P1.rds","./hfint2dm07072020Results/jmdc/Analysis_10","[RW] type 2 diabetes revised by PBR","[RW] Heart Failure ipci - first"
-13389,13897,1,9,"jmdc",1,1,1,"Lasso Logistic Regression",0,1,0,365,"./hfint2dm07072020Results/jmdc/PlpData_L1_T13897","./hfint2dm07072020Results/jmdc/StudyPop_L1_T13897_O13389_P1.rds","./hfint2dm07072020Results/jmdc/Analysis_9","[RW] type 2 diabetes revised by PBR","[RW] Heart Failure - first"
+outcomeId,cohortId,modelSettingsId,analysisId,devDatabase,populationSettingId,modelSettingId,covariateSettingId,modelSettingName,addExposureDaysToStart,riskWindowStart,addExposureDaysToEnd,riskWindowEnd,plpDataFolder,studyPopFile,plpResultFolder,cohortName,outcomeName
+19692,19693,1,1,ccae,1,1,1,Lasso Logistic Regression - AgeSex,0,0,0,365,./results/ccae/PlpData_L1_T19693,./results/ccae/StudyPop_L1_T19693_O19692_P1.rds,./results/ccae/Analysis_1,"[RW] t2dm second line, KV","[RW] Heart Failure - revised, no hosp"
+19692,19693,2,2,ccae,1,1,2,Lasso Logistic Regression,0,0,0,365,./results/ccae/PlpData_L2_T19693,./results/ccae/StudyPop_L2_T19693_O19692_P1.rds,./results/ccae/Analysis_2,"[RW] t2dm second line, KV","[RW] Heart Failure - revised, no hosp"
+19692,19693,1,3,mdcd,1,1,1,Lasso Logistic Regression - AgeSex,0,0,0,365,./results/mdcd/PlpData_L1_T19693,./results/mdcd/StudyPop_L1_T19693_O19692_P1.rds,./results/mdcd/Analysis_1,"[RW] t2dm second line, KV","[RW] Heart Failure - revised, no hosp"
+19692,19693,2,4,mdcd,1,1,2,Lasso Logistic Regression,0,0,0,365,./results/mdcd/PlpData_L2_T19693,./results/mdcd/StudyPop_L2_T19693_O19692_P1.rds,./results/mdcd/Analysis_2,"[RW] t2dm second line, KV","[RW] Heart Failure - revised, no hosp"
+19692,19693,1,5,mdcr,1,1,1,Lasso Logistic Regression - AgeSex,0,0,0,365,./results/mdcr/PlpData_L1_T19693,./results/mdcr/StudyPop_L1_T19693_O19692_P1.rds,./results/mdcr/Analysis_1,"[RW] t2dm second line, KV","[RW] Heart Failure - revised, no hosp"
+19692,19693,2,6,mdcr,1,1,2,Lasso Logistic Regression,0,0,0,365,./results/mdcr/PlpData_L2_T19693,./results/mdcr/StudyPop_L2_T19693_O19692_P1.rds,./results/mdcr/Analysis_2,"[RW] t2dm second line, KV","[RW] Heart Failure - revised, no hosp"
+19692,19693,1,7,Optum Clinformatics,1,1,1,Lasso Logistic Regression - AgeSex,0,0,0,365,./results/optumDod/PlpData_L1_T19693,./results/optumDod/StudyPop_L1_T19693_O19692_P1.rds,./results/optumDod/Analysis_1,"[RW] t2dm second line, KV","[RW] Heart Failure - revised, no hosp"
+19692,19693,2,8,Optum Clinformatics,1,1,2,Lasso Logistic Regression,0,0,0,365,./results/optumDod/PlpData_L2_T19693,./results/optumDod/StudyPop_L2_T19693_O19692_P1.rds,./results/optumDod/Analysis_2,"[RW] t2dm second line, KV","[RW] Heart Failure - revised, no hosp"
+19692,19693,1,9,Optum EHR,1,1,1,Lasso Logistic Regression - AgeSex,0,0,0,365,./results/panther/PlpData_L1_T19693,./results/panther/StudyPop_L1_T19693_O19692_P1.rds,./results/panther/Analysis_1,"[RW] t2dm second line, KV","[RW] Heart Failure - revised, no hosp"
+19692,19693,2,10,Optum EHR,1,1,2,Lasso Logistic Regression,0,0,0,365,./results/panther/PlpData_L2_T19693,./results/panther/StudyPop_L2_T19693_O19692_P1.rds,./results/panther/Analysis_2,"[RW] t2dm second line, KV","[RW] Heart Failure - revised, no hosp"
diff --git a/PredictingHFinT2DM/global.R b/PredictingHFinT2DM/global.R
index d407ea0e..9f989b22 100644
--- a/PredictingHFinT2DM/global.R
+++ b/PredictingHFinT2DM/global.R
@@ -28,5 +28,12 @@ if(inputType == 'file' & !is.null(validation)){
summaryTable <- getSummary(result, inputType, validation)
+myResultList <- lapply(1:nrow(summaryTable), function(i){paste( 'Dev:', as.character(summaryTable$Dev[i]),
+ '- Val:',as.character(summaryTable$Val[i]),
+ '-T:', as.character(summaryTable$T[i]),
+ '- O:',as.character(summaryTable$O[i]),
+ '- TAR:', as.character(summaryTable$TAR[i]),
+ '- Model:', as.character(summaryTable$Model[i]),
+ 'Predictor:', as.character(summaryTable$covariateSettingId[i]))})
diff --git a/PredictingHFinT2DM/helpers.R b/PredictingHFinT2DM/helpers.R
index 8b017ac5..431aa271 100644
--- a/PredictingHFinT2DM/helpers.R
+++ b/PredictingHFinT2DM/helpers.R
@@ -16,20 +16,18 @@ getFilter <- function(summaryTable,input){
if(input$modelSettingName!='All'){
ind <- intersect(ind,which(as.character(summaryTable$Model)==input$modelSettingName))
}
- if(input$riskWindowStart!='All'){
- ind <- intersect(ind,which(summaryTable$`TAR start`==input$riskWindowStart))
- }
- if(input$riskWindowEnd!='All'){
- ind <- intersect(ind,which(summaryTable$`TAR end`==input$riskWindowEnd))
+ if(input$TAR!='All'){
+ ind <- intersect(ind,which(as.character(summaryTable$TAR)==input$TAR))
}
+
return(ind)
}
-getPlpResult <- function(result,validation,summaryTable, inputType,filterIndex, selectedRow){
+getPlpResult <- function(result,validation,summaryTable, inputType,trueRow){
if(inputType == 'plpResult'){
- i <- filterIndex[selectedRow]
+ i <- trueRow
if(i ==1){
tempResult <- result
tempResult$type <- 'test'
@@ -44,8 +42,8 @@ getPlpResult <- function(result,validation,summaryTable, inputType,filterIndex,
tempResult$log <- 'log not available'
}else if( inputType == 'file') {
tempResult <- NULL
- loc <- summaryTable[filterIndex,][selectedRow,]$plpResultLocation
- locLoaderFunc <- summaryTable[filterIndex,][selectedRow,]$plpResultLoad
+ loc <- summaryTable[trueRow,]$plpResultLocation
+ locLoaderFunc <- summaryTable[trueRow,]$plpResultLoad
logLocation <- gsub('plpResult','plpLog.txt', gsub('validationResult.rds','plpLog.txt',gsub('plpResult.rds','plpLog.txt', as.character(loc))))
if(file.exists(logLocation)){
txt <- readLines(logLocation)
@@ -69,7 +67,7 @@ getPlpResult <- function(result,validation,summaryTable, inputType,filterIndex,
formatModSettings <- function(modelSettings){
modelset <- data.frame(Setting = c('Model',names(modelSettings[[2]])),
Value = c(modelSettings[[1]], unlist(lapply(modelSettings[[2]],
- function(x) paste0(x, collapse='')))))
+ function(x) paste0(x, collapse=',')))))
row.names(modelset) <- NULL
return(modelset)
}
@@ -122,29 +120,19 @@ formatPopSettings <- function(populationSettings){
# format covariate summary table
formatCovariateTable <- function(covariateSummary){
+ covariateSummary <- as.data.frame(covariateSummary)
for(coln in c('covariateValue','CovariateMeanWithOutcome','CovariateMeanWithNoOutcome','StandardizedMeanDiff')){
if(sum(colnames(covariateSummary)==coln)>0){
covariateSummary[,coln] <- format(round(covariateSummary[,coln], 4), nsmall = 4)
class(covariateSummary[,coln]) <- "numeric"
}
}
-
- # edit the simple model names:
- covariateSummary$covariateName <- gsub('\\[COVID v1\\] Persons with ', '', covariateSummary$covariateName)
- covariateSummary$covariateName <- gsub('\\[Covid v1\\] Persons with ', '', covariateSummary$covariateName)
- covariateSummary$covariateName <- gsub('\\[covid v1\\] Persons with ', '', covariateSummary$covariateName)
-
-
return(covariateSummary)
}
editCovariates <- function(covs){
-
- # remove Custom ATLAS variable during day -9999 through -1 days relative to index:
- covs$covariateName <- gsub('Custom ATLAS variable during day -9999 through -1 days relative to index: ','History of ', covs$covariateName)
-
if(!is.null(covs$StandardizedMeanDiff)){
return(list(table = formatCovariateTable(covs[,c('covariateName','covariateValue','CovariateCount','CovariateMeanWithOutcome','CovariateMeanWithNoOutcome','StandardizedMeanDiff')]),
colnames = c('Covariate Name', 'Value','Count', 'Outcome Mean', 'Non-outcome Mean','Std Mean Diff')
@@ -155,66 +143,4 @@ editCovariates <- function(covs){
))
}
}
-
-ageCalc <- function(age, model){
-
- if(model == 'Hospitalization'){
- if(age < 20) { value = -7}
- if(dplyr::between(age,20, 24)){ value = -4}
- if(dplyr::between(age,25, 29)){ value = -2}
- if(dplyr::between(age,30, 34)){ value = -2}
- if(dplyr::between(age,35, 39)){ value = 0}
- if(dplyr::between(age,40, 44)){ value = 3}
- if(dplyr::between(age,45, 49)){ value = 6}
- if(dplyr::between(age,50, 54)){ value = 9}
- if(dplyr::between(age,55, 59)){ value = 13}
- if(dplyr::between(age,60, 64)){ value = 15}
- if(dplyr::between(age,65, 69)){ value = 19}
- if(dplyr::between(age,70, 74)){ value = 20}
- if(dplyr::between(age,75, 79)){ value = 23}
- if(dplyr::between(age,80, 84)){ value = 24}
- if(dplyr::between(age,85, 89)){ value = 27}
- if(dplyr::between(age,90, 94)){ value = 25}
- return(value)
- }
- if(model == 'Intensive Care'){
- if(age < 20) { value = -10}
- if(dplyr::between(age,20, 24)){ value = -2}
- if(dplyr::between(age,25, 29)){ value = -1}
- if(dplyr::between(age,30, 34)){ value = 0}
- if(dplyr::between(age,35, 39)){ value = 0}
- if(dplyr::between(age,40, 44)){ value = 3}
- if(dplyr::between(age,45, 49)){ value = 5}
- if(dplyr::between(age,50, 54)){ value = 10}
- if(dplyr::between(age,55, 59)){ value = 12}
- if(dplyr::between(age,60, 64)){ value = 16}
- if(dplyr::between(age,65, 69)){ value = 22}
- if(dplyr::between(age,70, 74)){ value = 21}
- if(dplyr::between(age,75, 79)){ value = 22}
- if(dplyr::between(age,80, 84)){ value = 21}
- if(dplyr::between(age,85, 89)){ value = 25}
- if(dplyr::between(age,90, 94)){ value = 21}
- return(value)
- }
-
- if(model == 'Death'){
- if(age < 20) { value = -15}
- if(dplyr::between(age,20, 24)){ value = -8}
- if(dplyr::between(age,25, 29)){ value = -20}
- if(dplyr::between(age,30, 34)){ value = -5}
- if(dplyr::between(age,35, 39)){ value = 0}
- if(dplyr::between(age,40, 44)){ value = -6}
- if(dplyr::between(age,45, 49)){ value = 1}
- if(dplyr::between(age,50, 54)){ value = 15}
- if(dplyr::between(age,55, 59)){ value = 12}
- if(dplyr::between(age,60, 64)){ value = 16}
- if(dplyr::between(age,65, 69)){ value = 27}
- if(dplyr::between(age,70, 74)){ value = 31}
- if(dplyr::between(age,75, 79)){ value = 35}
- if(dplyr::between(age,80, 84)){ value = 40}
- if(dplyr::between(age,85, 89)){ value = 45}
- if(dplyr::between(age,90, 94)){ value = 30}
- return(value)
- }
-}
diff --git a/PredictingHFinT2DM/plots.R b/PredictingHFinT2DM/plots.R
index cd791438..4ef6fc68 100644
--- a/PredictingHFinT2DM/plots.R
+++ b/PredictingHFinT2DM/plots.R
@@ -159,11 +159,13 @@ plotCovariateSummary <- function(covariateSummary){
# adding plots from PLP temporarily as shiny deploy doesnt have PatientLevelPrediction
-plotPredictedPDF <- function(evaluation, type='test', fileName=NULL){
- if(is.null(evaluation$thresholdSummary$Eval)){
- evaluation$thresholdSummary$Eval <- type
+plotPredictedPDF <- function(evaluation, fileName=NULL){
+
+ ind <- 1:nrow(evaluation$thresholdSummary)
+ if(!is.null(evaluation$thresholdSummary$Eval)){
+ ind <- evaluation$thresholdSummary$Eval%in%c('test','validation')
}
- ind <- evaluation$thresholdSummary$Eval==type
+
x<- evaluation$thresholdSummary[ind,c('predictionThreshold','truePositiveCount','trueNegativeCount',
'falsePositiveCount','falseNegativeCount')]
@@ -209,11 +211,12 @@ plotPredictedPDF <- function(evaluation, type='test', fileName=NULL){
-plotPreferencePDF <- function(evaluation, type='test', fileName=NULL){
- if(is.null(evaluation$thresholdSummary$Eval)){
- evaluation$thresholdSummary$Eval <- type
+plotPreferencePDF <- function(evaluation, fileName=NULL){
+
+ ind <- 1:nrow(evaluation$thresholdSummary)
+ if(!is.null(evaluation$thresholdSummary$Eval)){
+ ind <- evaluation$thresholdSummary$Eval%in%c('test','validation')
}
- ind <- evaluation$thresholdSummary$Eval==type
x<- evaluation$thresholdSummary[ind,c('preferenceThreshold','truePositiveCount','trueNegativeCount',
'falsePositiveCount','falseNegativeCount')]
@@ -257,12 +260,14 @@ plotPreferencePDF <- function(evaluation, type='test', fileName=NULL){
}
-plotDemographicSummary <- function(evaluation, type='test', fileName=NULL){
+plotDemographicSummary <- function(evaluation, fileName=NULL){
if (!all(is.na(evaluation$demographicSummary$averagePredictedProbability))){
- if(is.null(evaluation$demographicSummary$Eval)){
- evaluation$demographicSummary$Eval <- type
+
+ ind <- 1:nrow(evaluation$demographicSummary)
+ if(!is.null(evaluation$demographicSummary$Eval)){
+ ind <- evaluation$demographicSummary$Eval%in%c('test','validation')
}
- ind <- evaluation$demographicSummary$Eval==type
+
x<- evaluation$demographicSummary[ind,colnames(evaluation$demographicSummary)%in%c('ageGroup','genGroup','averagePredictedProbability',
'PersonCountAtRisk', 'PersonCountWithOutcome')]
@@ -341,49 +346,105 @@ plotDemographicSummary <- function(evaluation, type='test', fileName=NULL){
-plotSparseCalibration2 <- function(evaluation, type='test', fileName=NULL){
- if(is.null(evaluation$calibrationSummary$Eval)){
- evaluation$calibrationSummary$Eval <- type
+plotSparseCalibration2 <- function(evaluation,
+ smooth = "loess",
+ span = 1,
+ nKnots = 5,
+ scatter = T,
+ bins = 20,
+ zoom = "data",
+ sample = T,
+ fileName = NULL) {
+
+ ind <- 1:nrow(evaluation$calibrationSummary)
+ if(!is.null(evaluation$calibrationSummary$Eval)){
+ ind <- evaluation$calibrationSummary$Eval%in%c('test','validation')
+ }
+ # use calibrationSummary
+ sparsePred <- evaluation$calibrationSummary[ind,]
+
+ limVal <- max(max(sparsePred$averagePredictedProbability),max(sparsePred$observedIncidence))
+
+ smooth_plot <- ggplot2::ggplot(data = sparsePred, ggplot2::aes(x = averagePredictedProbability,
+ y = observedIncidence)) +
+ ggplot2::stat_smooth(ggplot2::aes(color = "Loess", linetype = "Loess"),
+ method = "loess",
+ se = TRUE,
+ #span = span,
+ size = 1,
+ show.legend = F) +
+ ggplot2::geom_segment(ggplot2::aes(x = 0,
+ xend = 1,
+ y = 0,
+ yend = 1,
+ color = "Ideal",
+ linetype = "Ideal")) +
+ ggplot2::coord_cartesian(xlim = c(0,limVal),
+ ylim = c(0,limVal)) +
+ ggplot2::scale_linetype_manual(name = "Models",
+ values = c(Loess = "solid",
+ Ideal = "dashed")) +
+ ggplot2::scale_color_manual(name = "Models", values = c(Loess = "blue", Ideal = "red")) +
+ ggplot2::labs(x = "Predicted Probability", y = "Observed Probability")
+
+ # construct the plot grid
+ if (scatter) {
+ smooth_plot <- smooth_plot + ggplot2::geom_point(data = sparsePred,
+ ggplot2::aes(x = averagePredictedProbability,
+ y = observedIncidence),
+ color = "black",
+ size = 2)
}
- ind <- evaluation$calibrationSummary$Eval==type
-
- x<- evaluation$calibrationSummary[ind,c('averagePredictedProbability','observedIncidence', 'PersonCountAtRisk')]
-
-
- cis <- apply(x, 1, function(x) binom.test(x[2]*x[3], x[3], alternative = c("two.sided"), conf.level = 0.95)$conf.int)
- x$lci <- cis[1,]
- x$uci <- cis[2,]
-
- maxes <- max(max(x$averagePredictedProbability), max(x$observedIncidence))*1.1
-
- # limits <- ggplot2::aes(ymax = x$uci, ymin= x$lci)
- limits <- ggplot2::aes(ymax = uci, ymin= lci)
-
- plot <- ggplot2::ggplot(data=x,
- ggplot2::aes(x=averagePredictedProbability, y=observedIncidence
- )) +
- ggplot2::geom_point(size=2, color='black') +
- ggplot2::geom_errorbar(limits) +
- #ggplot2::geom_smooth(method=lm, se=F, colour='darkgrey') +
- ggplot2::geom_line(colour='darkgrey') +
- ggplot2::geom_abline(intercept = 0, slope = 1, linetype = 5, size=0.4,
- show.legend = TRUE) +
- ggplot2::scale_x_continuous("Average Predicted Probability") +
- ggplot2::scale_y_continuous("Observed Fraction With Outcome") +
- ggplot2::coord_cartesian(xlim = c(0, maxes), ylim=c(0,maxes))
+ # Histogram object detailing the distibution of event/noevent for each probability interval
+
+ popData1 <- sparsePred[,c('averagePredictedProbability', 'PersonCountWithOutcome')]
+ popData1$Label <- "Outcome"
+ colnames(popData1) <- c('averagePredictedProbability','PersonCount',"Label")
+ popData2 <- sparsePred[,c('averagePredictedProbability', 'PersonCountAtRisk')]
+ popData2$Label <- "No Outcome"
+ popData2$PersonCountAtRisk <- -1*(popData2$PersonCountAtRisk -popData1$PersonCount)
+ colnames(popData2) <- c('averagePredictedProbability','PersonCount',"Label")
+ popData <- rbind(popData1, popData2)
+ popData$averagePredictedProbability <- factor(popData$averagePredictedProbability)
+ hist_plot <- ggplot2::ggplot(popData, ggplot2::aes(y = averagePredictedProbability, x = PersonCount,
+ fill = Label)) +
+ ggplot2::geom_bar(data = subset(popData,Label == "Outcome"), stat = "identity") +
+ ggplot2::geom_bar(data = subset(popData,Label == "No Outcome"), stat = "identity") +
+ ggplot2::geom_bar(stat = "identity") +
+ ggplot2::scale_x_continuous(labels = abs) +
+ #ggplot2::scale_fill_brewer(palette = "Set1") +
+ ggplot2::coord_flip( ) +
+ ggplot2::theme_bw() +
+ ggplot2::theme(axis.title.x=ggplot2::element_blank(),
+ axis.text.x=ggplot2::element_blank(),
+ axis.ticks.x=ggplot2::element_blank())
+
+ # testting whether this is installed in shinydeploy
+ #plot <- gridExtra::grid.arrange(smooth_plot,
+ # hist_plot,
+ # ncol = 1,
+ # heights=c(2,1))
+
+ plot <- cowplot::plot_grid(smooth_plot,
+ hist_plot,
+ ncol = 1,
+ axis = "lr",
+ align = "v",
+ rel_heights = c(1, 0.6))
if (!is.null(fileName))
- ggplot2::ggsave(fileName, plot, width = 5, height = 3.5, dpi = 400)
+ ggplot2::ggsave(fileName, plot, width = 5, height = 4.5, dpi = 400)
return(plot)
}
-plotPredictionDistribution <- function(evaluation, type='test', fileName=NULL){
- if(is.null(evaluation$predictionDistribution$Eval)){
- evaluation$predictionDistribution$Eval <- type
+plotPredictionDistribution <- function(evaluation, fileName=NULL){
+
+ ind <- 1:nrow(evaluation$predictionDistribution)
+ if(!is.null(evaluation$predictionDistribution$Eval)){
+ ind <- evaluation$predictionDistribution$Eval%in%c('test','validation')
}
- ind <- evaluation$predictionDistribution$Eval==type
x<- evaluation$predictionDistribution[ind,]
#(x=Class, y=predictedProbabllity sequence: min->P05->P25->Median->P75->P95->max)
diff --git a/PredictingHFinT2DM/processing.R b/PredictingHFinT2DM/processing.R
index 4b5a29a8..1937e060 100644
--- a/PredictingHFinT2DM/processing.R
+++ b/PredictingHFinT2DM/processing.R
@@ -30,9 +30,9 @@ getSummary <- function(result,inputType,validation){
#sumTab <- sumTab[,c('analysisId','devDatabase','valDatabase','cohortName','outcomeName','modelSettingName','riskWindowStart', 'riskWindowEnd', 'AUC','AUPRC', 'populationSize','outcomeCount','incidence',
# 'addExposureDaysToStart','addExposureDaysToEnd','plpResultLocation', 'plpResultLoad')]
#colnames(sumTab) <- c('Analysis','Dev', 'Val', 'T', 'O','Model', 'TAR start', 'TAR end', 'AUC','AUPRC', 'T Size','O Count','O Incidence (%)', 'addExposureDaysToStart','addExposureDaysToEnd', 'plpResultLocation', 'plpResultLoad')
- sumTab <- sumTab[,c('devDatabase','valDatabase','cohortName','outcomeName','modelSettingName','riskWindowStart', 'riskWindowEnd', 'AUC','AUPRC', 'populationSize','outcomeCount','incidence',
- 'addExposureDaysToStart','addExposureDaysToEnd','plpResultLocation', 'plpResultLoad')]
- colnames(sumTab) <- c('Dev', 'Val', 'T', 'O','Model', 'TAR start', 'TAR end', 'AUC','AUPRC', 'T Size','O Count','O Incidence (%)', 'addExposureDaysToStart','addExposureDaysToEnd', 'plpResultLocation', 'plpResultLoad')
+ sumTab <- sumTab[,c('analysisId','devDatabase','valDatabase','cohortName','outcomeName','modelSettingName','covariateSettingId','TAR', 'AUC','AUPRC', 'populationSize','outcomeCount','incidence',
+ 'plpResultLocation', 'plpResultLoad')]
+ colnames(sumTab) <- c('Analysis','Dev', 'Val', 'T', 'O','Model','covariateSettingId', 'TAR', 'AUC','AUPRC', 'T Size','O Count','O Incidence (%)', 'plpResultLocation', 'plpResultLoad')
return(sumTab)
}
@@ -40,6 +40,7 @@ getSummary <- function(result,inputType,validation){
getSummaryFromObject <- function(result,validation=NULL){
+ TAR <- getTAR(result$model$populationSettings)
eval <- as.data.frame(result$performanceEvaluation$evaluationStatistics)
eval <- eval[eval$Eval %in% c('test',"validation"),]
allRes <- data.frame(analysisId = 1,
@@ -48,21 +49,20 @@ getSummaryFromObject <- function(result,validation=NULL){
cohortName = 'T',
outcomeName = 'O',
modelSettingName = result$model$modelSettings$model,
- riskWindowStart = ifelse(is.null(result$model$populationSettings$riskWindowStart), 'Missing',result$model$populationSettings$riskWindowStart),
- riskWindowEnd = ifelse(is.null(result$model$populationSettings$riskWindowEnd), 'Missing',result$model$populationSettings$riskWindowEnd),
+ covariateSettingId = 1,
+ TAR = TAR,
AUC = as.double(as.character(eval$Value[eval$Metric=='AUC.auc'])),
AUPRC = as.double(as.character(eval$Value[eval$Metric=='AUPRC'])),
populationSize = as.double(as.character(eval$Value[eval$Metric=='populationSize'])),
outcomeCount = as.double(as.character(eval$Value[eval$Metric=='outcomeCount'])),
incidence = as.double(as.character(eval$Value[eval$Metric=='outcomeCount']))/as.double(as.character(eval$Value[eval$Metric=='populationSize'])),
- addExposureDaysToStart = ifelse(is.null(result$model$populationSettings$addExposureDaysToStart),'Missing',result$model$populationSettings$addExposureDaysToStart),
- addExposureDaysToEnd = ifelse(is.null(result$model$populationSettings$addExposureDaysToEnd), 'Missing', result$model$populationSettings$addExposureDaysToEnd),
plpResultLocation = 'NULL',
plpResultLoad = 'NULL'
)
if(!is.null(validation)){
for(i in 1:length(validation$validation)){
+ TAR <- getTAR(validation$validation[[i]]$model$populationSettings)
eval <- as.data.frame(validation$validation[[i]]$performanceEvaluation$evaluationStatistics)
tempRes <-data.frame(analysisId = 1+i,
devDatabase = result$inputSetting$dataExtrractionSettings$cdmDatabaseSchema,
@@ -70,15 +70,13 @@ getSummaryFromObject <- function(result,validation=NULL){
cohortName = 'T',
outcomeName = 'O',
modelSettingName = result$model$modelSettings$model,
- riskWindowStart = result$model$populationSettings$riskWindowStart,
- riskWindowEnd = result$model$populationSettings$riskWindowEnd,
+ covariateSettingId =1,
+ TAR = TAR,
AUC = as.double(as.character(eval$Value[eval$Metric=='AUC.auc'])),
AUPRC = as.double(as.character(eval$Value[eval$Metric=='AUPRC'])),
populationSize = as.double(as.character(eval$Value[eval$Metric=='populationSize'])),
outcomeCount = as.double(as.character(eval$Value[eval$Metric=='outcomeCount'])),
incidence = as.double(as.character(eval$Value[eval$Metric=='outcomeCount']))/as.double(as.character(eval$Value[eval$Metric=='populationSize'])),
- addExposureDaysToStart = result$model$populationSettings$addExposureDaysToStart,
- addExposureDaysToEnd = result$model$populationSettings$addExposureDaysToEnd,
plpResultLocation = 'NULL',
plpResultLoad = 'NULL'
)
@@ -97,6 +95,7 @@ summaryPlpAnalyses <- function(analysesLocation){
#========================================
settings <- read.csv(file.path(analysesLocation,'settings.csv'))
settings <- settings[,!colnames(settings)%in%c('plpDataFolder','studyPopFile','plpResultFolder')]
+ settings$analysisId <- gsub('Analysis_','', settings$analysisId) # fixing if Analysis_id in settings
settings$analysisId <- paste0('Analysis_', settings$analysisId)
analysisIds <- dir(file.path(analysesLocation), recursive = F, full.names = T)
@@ -104,12 +103,13 @@ summaryPlpAnalyses <- function(analysesLocation){
if(is.null(settings$devDatabase)){
settings$devDatabase <- 'Missing'
}
- settings$valDatabase <- settings$devDatabase
+ if(is.null(settings$valDatabase)){
+ settings$valDatabase <- settings$devDatabase
+ }
devPerformance <- do.call(rbind,lapply(file.path(analysisIds), getPerformance))
- devPerformance <- merge(settings[,c('analysisId','modelSettingsId', 'cohortName', 'outcomeName',
- 'populationSettingId','modelSettingName','addExposureDaysToStart',
- 'riskWindowStart', 'addExposureDaysToEnd',
- 'riskWindowEnd','devDatabase','valDatabase')],
+ # updated this for TAR
+ devPerformance <- merge(settings[,c('analysisId','modelSettingsId','covariateSettingId', 'cohortName', 'outcomeName',
+ 'populationSettingId','modelSettingName','devDatabase','valDatabase')],
devPerformance, by='analysisId', all.x=T)
validationLocation <- file.path(analysesLocation,'Validation')
@@ -124,11 +124,8 @@ summaryPlpAnalyses <- function(analysesLocation){
valAnalyses <- dir(valDatabase, recursive = F, full.names = T)
valAnalyses <- valAnalyses[grep('Analysis_', valAnalyses)]
valPerformance <- do.call(rbind,lapply(file.path(valAnalyses), function(x) getValidationPerformance(x)))
- valSettings <- settings[,c('analysisId','modelSettingsId', 'cohortName', 'outcomeName',
- 'populationSettingId','modelSettingName','addExposureDaysToStart',
- 'riskWindowStart', 'addExposureDaysToEnd',
- 'riskWindowEnd','devDatabase')]
- #valSettings$devDatabase <- settings$devDatabase[1]
+ valSettings <- settings[,c('analysisId','modelSettingsId','covariateSettingId', 'cohortName', 'outcomeName',
+ 'populationSettingId','modelSettingName','devDatabase')] # removed TAR bits
valPerformance <- merge(valSettings,
valPerformance, by='analysisId')
valPerformance <- valPerformance[,colnames(devPerformance)] # make sure same order
@@ -163,10 +160,11 @@ getPerformance <- function(analysisLocation){
return(data.frame(analysisId=analysisId[length(analysisId)],
AUC=0.000, AUPRC=0, outcomeCount=0,
populationSize=0,incidence=0,plpResultLocation=location,
- plpResultLoad='loadPlpResult'))
+ plpResultLoad='loadPlpResult', TAR = '?'))
} else {
require(PatientLevelPrediction)
res <- loadPlpResult(file.path(analysisLocation,'plpResult'))
+ TAR <- getTAR(res$model$populationSettings)
res <- as.data.frame(res$performanceEvaluation$evaluationStatistics)
location <- file.path(analysisLocation, 'plpResult')
plpResultLoad <- 'loadPlpResult'
@@ -175,13 +173,14 @@ getPerformance <- function(analysisLocation){
} else{
# read rds here
res <- readRDS(file.path(analysisLocation,'plpResult.rds'))
+ TAR <- getTAR(res$model$populationSettings)
res <- as.data.frame(res$performanceEvaluation$evaluationStatistics)
plpResultLoad <- 'readRDS'
}
#if empty do edit?
- res <- tryCatch(reshape2::dcast(res[res$Eval=='test',], analysisId ~ Metric, value.var='Value'),
+ res <- tryCatch(reshape2::dcast(res[res$Eval%in%c('test','validation'),], analysisId ~ Metric, value.var='Value'),
error = function(cont) return(NULL))
if(is.null(res)){
return(NULL) }
@@ -189,7 +188,7 @@ getPerformance <- function(analysisLocation){
res$incidence <- as.double(res$outcomeCount)/as.double(res$populationSize)*100
res[, !colnames(res)%in%c('analysisId','outcomeCount','populationSize')] <-
format(as.double(res[, !colnames(res)%in%c('analysisId','outcomeCount','populationSize')]), digits = 2, scientific = F)
-
+ res$TAR <- TAR
if(sum(colnames(res)=='AUC.auc_ub95ci')>0){
res$AUC <- res$AUC.auc
#res$AUC <- paste0(res$AUC.auc, ' (', res$AUC.auc_lb95ci,'-', res$AUC.auc_ub95ci,')')
@@ -197,7 +196,7 @@ getPerformance <- function(analysisLocation){
res$plpResultLocation <- location
res$plpResultLoad <- plpResultLoad
- return(res[,c('analysisId', 'AUC', 'AUPRC', 'outcomeCount','populationSize','incidence','plpResultLocation', 'plpResultLoad')])
+ return(res[,c('analysisId', 'AUC', 'AUPRC', 'outcomeCount','populationSize','incidence','plpResultLocation', 'plpResultLoad', 'TAR')])
}
getValidationPerformance <- function(validationLocation){
@@ -205,9 +204,11 @@ getValidationPerformance <- function(validationLocation){
if("performanceEvaluation"%in%names(val)){
valPerformance <- reshape2::dcast(as.data.frame(val$performanceEvaluation$evaluationStatistics),
analysisId ~ Metric, value.var='Value')
+ TAR <- getTAR(val$model$populationSettings)
} else {
valPerformance <- reshape2::dcast(as.data.frame(val[[1]]$performanceEvaluation$evaluationStatistics),
analysisId ~ Metric, value.var='Value')
+ TAR <- getTAR(val[[1]]$model$populationSettings)
}
valPerformance$incidence <- as.double(valPerformance$outcomeCount)/as.double(valPerformance$populationSize)*100
valPerformance[, !colnames(valPerformance)%in%c('analysisId','outcomeCount','populationSize')] <-
@@ -222,9 +223,23 @@ getValidationPerformance <- function(validationLocation){
valPerformance <- valPerformance[,c('analysisId','valDatabase', 'AUC', 'AUPRC', 'outcomeCount','populationSize','incidence')]
valPerformance$plpResultLocation <- file.path(validationLocation,'validationResult.rds')
valPerformance$plpResultLoad <- 'readRDS'
+ valPerformance$TAR <- TAR
#valPerformance$rocplot <- file.path(validationLocation,'plots','sparseROC.pdf')
#valPerformance$calplot <- file.path(validationLocation,'plots','sparseCalibrationConventional.pdf')
return(valPerformance)
}
+getTAR <- function(x){
+ starttar <- unique(x$startAnchor)
+ if(is.null(starttar)){
+ starttar <- ifelse(unique(x$addExposureDaysToStart), 'cohort end','cohort start')
+ }
+ endtar <- unique(x$endAnchor)
+ if(is.null(endtar)){
+ endtar <- ifelse(unique(x$addExposureDaysToEnd), 'cohort end','cohort start')
+ }
+ TAR <- paste0('(',starttar,' + ',unique(x$riskWindowStart),') - (', endtar,' + ',unique(x$riskWindowEnd),')')
+ return(TAR)
+ #return('cohort start + 1 - cohort start + 365')
+}
diff --git a/PredictingHFinT2DM/server.R b/PredictingHFinT2DM/server.R
index b8dc1400..1787f3b5 100644
--- a/PredictingHFinT2DM/server.R
+++ b/PredictingHFinT2DM/server.R
@@ -1,6 +1,6 @@
# @file server.R
#
-# Copyright 2018 Observational Health Data Sciences and Informatics
+# Copyright 2020 Observational Health Data Sciences and Informatics
#
# This file is part of PatientLevelPrediction
#
@@ -27,85 +27,36 @@ server <- shiny::shinyServer(function(input, output, session) {
session$onSessionEnded(shiny::stopApp)
filterIndex <- shiny::reactive({getFilter(summaryTable,input)})
- print(summaryTable)
-
- observeEvent(input$language, {
- i18n$set_translation_language(input$language)
- output$risktabside <- shiny::renderUI(
- sidebarPanel(
- shiny::p(i18n$t('Use this tool to calculate the risk of COVID outcomes: ')),
- shiny::p(' '),
- shiny::sliderInput("age", i18n$t("Age:"),
- min = 18, max = 94,
- value = 50),
- shiny::selectInput("sex",i18n$t("Sex"), choices = c(i18n$t("Male"), i18n$t("Female"))),
- shiny::checkboxInput("cancer", i18n$t("History of Cancer")),
- shiny::checkboxInput("copd", i18n$t("History of COPD")),
- shiny::checkboxInput("diabetes", i18n$t("History of Diabetes")),
- shiny::checkboxInput("hd", i18n$t("History of Heart disease")),
- shiny::checkboxInput("hl", i18n$t("History of Hyperlipidemia")),
- shiny::checkboxInput("hypertension", i18n$t("History of Hypertension")),
- shiny::checkboxInput("kidney",i18n$t("History of Kidney Disease")),
- shiny::actionButton("calculate",i18n$t("Calculate Risk")),
- hr()
-
- ))
-
- output$risktabmain <- shiny::renderUI(
- mainPanel(
- conditionalPanel('input.calculate', {
- shinydashboard::box(width = 12,
- title = tagList(shiny::icon("bar-chart"),i18n$t("Predicted Risk (%)")), status = "info", solidHeader = TRUE,
-
- plotly::plotlyOutput("contributions"))}
-
- ),
- shinydashboard::box(
- status = "primary", solidHeader = TRUE,
- width = 12,
- shiny::includeMarkdown(path = paste0("./www/languages/calculatorDesc_", input$language, ".md"))
- # shiny::h2("Description"),
- # # shiny::p("The Observational Health Data Sciences and Informatics (OHDSI) international community is hosting a COVID-19 virtual study-a-thon this week (March 26-29) to inform healthcare decision-making in response to the current global pandemic."),
- # shiny::p("This calculator presents the results of a prediction study that developed 3 prediction models."),
- # shiny::p("The three models predicted: requiring hospital admission (COVER-H), requiring intensive services (COVER-I), or fatality (COVER-F) in the month following COVID-19 diagnosis"),
- # shiny::p(' '),
- # shiny::h3("Disclaimer"),
- # shiny::p('Should not be considered Medical Advice.
- # By using the app, you acknowledge that the content does not constitute medical advice and does not create a Healthcare Professional - Patient relationship and does not constitute medical opinion or advice.
- # Access to general information is provided for research and educational purposes only.
- # Content is not recommended or endorsed by any doctor or healthcare provider.
- # The information provided is not a substitute for medical or professional care,
- # and you should not use the information in place of an appointment or the advice of your physician or other healthcare provider.
- # You are liable or responsible for any action taken through use of information in this site.'), #Todo: add disclaimer
- ), )
- )
- })
- #plot for the risk score calculator
- output$contributions <- plotly::renderPlotly(plotly::plot_ly(x = as.double(riskValues$data$values),
- y = riskValues$data$names,
- text = paste0(riskValues$data$values,'%'), textposition = 'auto', insidetextfont = list(size=20, color = 'white'),
- color = riskValues$data$color,
- colors = levels(riskValues$data$color),
- type = 'bar', orientation = 'h', showlegend = F) %>% layout(
- xaxis = list(
- range=c(-0.1,max(riskValues$data$values)*1.25)
- )
- ))
- # need to remove over columns:
- output$summaryTable <- DT::renderDataTable(DT::datatable(summaryTable[filterIndex(),!colnames(summaryTable)%in%c('addExposureDaysToStart','addExposureDaysToEnd', 'plpResultLocation', 'plpResultLoad')],
- rownames= FALSE, selection = 'single'))
-
- selectedRow <- shiny::reactive({
- if(is.null(input$summaryTable_rows_selected[1])){
- return(1)
- }else{
- return(input$summaryTable_rows_selected[1])
- }
- })
-
+ #print(summaryTable)
+ # need to remove over columns:
+ output$summaryTable <- DT::renderDataTable(DT::datatable(summaryTable[filterIndex(),!colnames(summaryTable)%in%c('Analysis','addExposureDaysToStart','addExposureDaysToEnd', 'plpResultLocation', 'plpResultLoad')],
+ rownames= FALSE, selection = 'single',
+ extensions = 'Buttons', options = list(
+ dom = 'Blfrtip' ,
+ buttons = c(I('colvis'), 'copy', 'excel', 'pdf' )
+ #pageLength = 100, lengthMenu=c(10, 50, 100,200)
+ ),
+
+ container = htmltools::withTags(table(
+ class = 'display',
+ thead(
+ #tags$th(title=active_columns[i], colnames(data)[i])
+ tr(apply(data.frame(colnames=c('Dev', 'Val', 'T','O', 'Model','Covariate setting',
+ 'TAR', 'AUC', 'AUPRC',
+ 'T Size', 'O Count', 'O Incidence (%)'),
+ labels=c('Database used to develop the model', 'Database used to evaluate model', 'Target population - the patients you want to predict risk for','Outcome - what you want to predict',
+ 'Model type','Id for the covariate/settings used','Time-at-risk period', 'Area under the reciever operating characteristics (test or validation)', 'Area under the precision recall curve (test or validation)',
+ 'Target population size of test or validation set', 'Outcome count in test or validation set', 'Percentage of target population that have outcome during time-at-risk')), 1,
+ function(x) th(title=x[2], x[1])))
+ )
+ ))
+
+ )
+ )
+
- plpResult <- shiny::reactive({getPlpResult(result,validation,summaryTable, inputType,filterIndex(), selectedRow())})
+ plpResult <- shiny::reactive({getPlpResult(result,validation,summaryTable, inputType,trueRow())})
# covariate table
output$modelView <- DT::renderDataTable(editCovariates(plpResult()$covariateSummary)$table,
@@ -114,12 +65,21 @@ server <- shiny::shinyServer(function(input, output, session) {
output$modelCovariateInfo <- DT::renderDataTable(data.frame(covariates = nrow(plpResult()$covariateSummary),
nonZeroCount = sum(plpResult()$covariateSummary$covariateValue!=0)))
+ # Download plpresult
+ output$plpResult <- shiny::downloadHandler(
+ filename = function(){
+ "plpResult.rds"
+ },
+ content = function(file) {
+ saveRDS(plpResult(), file)
+ }
+ )
# Downloadable csv of model ----
output$downloadData <- shiny::downloadHandler(
filename = function(){'model.csv'},
content = function(file) {
- write.csv(plpResult()$covariateSummary[plpResult()$covariateSummary$covariateValue!=0,c('covariateName','covariateValue','CovariateCount','CovariateMeanWithOutcome','CovariateMeanWithNoOutcome' )]
+ write.csv(plpResult()$covariateSummary[,c('covariateName','covariateValue','CovariateCount','CovariateMeanWithOutcome','CovariateMeanWithNoOutcome' )]
, file, row.names = FALSE)
}
)
@@ -133,13 +93,23 @@ server <- shiny::shinyServer(function(input, output, session) {
# prediction text
- output$info <- shiny::renderText(paste0('Within ', summaryTable[filterIndex(),'T'][selectedRow()],
- ' predict who will develop ', summaryTable[filterIndex(),'O'][selectedRow()],
- ' during ',summaryTable[filterIndex(),'TAR start'][selectedRow()], ' day/s',
- ' after ', ifelse(summaryTable[filterIndex(),'addExposureDaysToStart'][selectedRow()]==0, ' cohort start ', ' cohort end '),
- ' and ', summaryTable[filterIndex(),'TAR end'][selectedRow()], ' day/s',
- ' after ', ifelse(summaryTable[filterIndex(),'addExposureDaysToEnd'][selectedRow()]==0, ' cohort start ', ' cohort end '))
- )
+ #output$info <- shiny::renderUI(shiny::HTML(paste0(shiny::strong('Model: '), summaryTable[trueRow(),'Model'], ' with covariate setting id ',summaryTable[trueRow(),'covariateSettingId'] , '
',
+ # shiny::strong('Question:'), ' Within ', summaryTable[trueRow(),'T'],
+ # ' predict who will develop ', summaryTable[trueRow(),'O'],
+ # ' during ',summaryTable[trueRow(),'TAR'], '
',
+ # ' Developed in database: ', shiny::strong(summaryTable[trueRow(),'Dev']), ' and ',
+ # ' validated in database: ', shiny::strong(summaryTable[trueRow(),'Val'])
+ # ))
+ #)
+
+ output$sideSettings <- shiny::renderTable(t(data.frame(Development = as.character(summaryTable[trueRow(),'Dev']),
+ Validation = as.character(summaryTable[trueRow(),'Val']),
+ Model = as.character(summaryTable[trueRow(),'Model']))), rownames = T, colnames = F)
+
+ output$sideSettings2 <- shiny::renderTable(t(data.frame(T = paste0(substring(as.character(summaryTable[trueRow(),'T']),0,25),'...') ,
+ O = paste0(substring(as.character(summaryTable[trueRow(),'O']),0,25),'...') )),
+ rownames = T, colnames = F)
+
# PLOTTING FUNCTION
plotters <- shiny::reactive({
@@ -202,8 +172,7 @@ server <- shiny::shinyServer(function(input, output, session) {
if(is.null(plpResult()$performanceEvaluation)){
return(NULL)
} else{
- plotPreferencePDF(plpResult()$performanceEvaluation,
- type=plpResult()$type ) #+
+ plotPreferencePDF(plpResult()$performanceEvaluation) #+
# ggplot2::geom_vline(xintercept=plotters()$prefthreshold) -- RMS
}
})
@@ -212,8 +181,7 @@ server <- shiny::shinyServer(function(input, output, session) {
if(is.null(plpResult()$performanceEvaluation)){
return(NULL)
} else{
- plotPredictedPDF(plpResult()$performanceEvaluation,
- type=plpResult()$type ) # +
+ plotPredictedPDF(plpResult()$performanceEvaluation) # +
#ggplot2::geom_vline(xintercept=plotters()$threshold) -- RMS
}
})
@@ -222,7 +190,7 @@ server <- shiny::shinyServer(function(input, output, session) {
if(is.null(plpResult()$performanceEvaluation)){
return(NULL)
} else{
- plotPredictionDistribution(plpResult()$performanceEvaluation, type=plpResult()$type )
+ plotPredictionDistribution(plpResult()$performanceEvaluation)
}
})
@@ -230,7 +198,7 @@ server <- shiny::shinyServer(function(input, output, session) {
if(is.null(plpResult()$performanceEvaluation)){
return(NULL)
} else{
- plotSparseCalibration2(plpResult()$performanceEvaluation, type=plpResult()$type )
+ plotSparseCalibration2(plpResult()$performanceEvaluation)
}
})
@@ -238,12 +206,60 @@ server <- shiny::shinyServer(function(input, output, session) {
if(is.null(plpResult()$performanceEvaluation)){
return(NULL)
} else{
- tryCatch(plotDemographicSummary(plpResult()$performanceEvaluation,
- type=plpResult()$type ),
+ tryCatch(plotDemographicSummary(plpResult()$performanceEvaluation),
error= function(cond){return(NULL)})
}
})
+ # validation table and selection
+ validationTable <- shiny::reactive(dplyr::filter(summaryTable[filterIndex(),],
+ Analysis == summaryTable[filterIndex(),'Analysis'][trueRow()]))
+
+ output$validationTable <- DT::renderDataTable(dplyr::select(validationTable(),c(Analysis, Dev, Val, AUC)), rownames= FALSE)
+
+ valFilterIndex <- shiny::reactive({getFilter(validationTable(), input)})
+ valSelectedRow <- shiny::reactive({
+ if(is.null(input$validationTable_rows_selected[1])){
+ return(1)
+ }else{
+ # return(input$validationTable_rows_selected[1])
+ return(input$validationTable_rows_selected)
+ }
+ })
+
+ # plots for the validation section. todo: add the development?
+
+ valResult <- shiny::reactive({
+ valtemplist <- list()
+ valTable <- validationTable()
+ rows <- sort(valSelectedRow())
+ names <- valTable[rows, "Val"]
+ for (i in 1:length(rows)){
+ valtemplist[[i]] <- getPlpResult(result,validation,valTable, inputType, rows[i])
+ }
+ list(valtemplist, names)
+ })
+
+ valPlots <- shiny::reactive({
+ results <- valResult()
+ if(is.null(results[[1]][[1]]$performanceEvaluation)){
+ # list(valRocPlot= NULL, valCalPlot = NULL)
+ return(NULL)
+ } else{
+
+ valCalPlot <- PredictionComparison::plotMultipleCal(results[[1]], names = results[[2]])
+ valRocPlot <- PredictionComparison::plotMultipleRoc(results[[1]], names = results[[2]], grid = F)
+ list(valRocPlot= valRocPlot, valCalPlot = valCalPlot)
+
+ }
+ })
+
+ output$valRoc <- shiny::renderPlot({
+ try(valPlots()$valRocPlot)
+ })
+ output$valCal <- shiny::renderPlot({
+ try(valPlots()$valCalPlot)
+ })
# Do the tables and plots:
@@ -329,4 +345,94 @@ server <- shiny::shinyServer(function(input, output, session) {
)
})
-})
\ No newline at end of file
+
+ # SELECTING RESULTS - for PERFORMANCE/MODEl
+ ##selectedRow <- shiny::reactiveVal(value = 1)
+ trueRow <- shiny::reactiveVal(value = 1)
+
+ # row selection updates dropdowns
+ shiny::observeEvent(input$summaryTable_rows_selected,{
+ #selectedRow(input$summaryTable_rows_selected)
+ trueRow(filterIndex()[input$summaryTable_rows_selected])
+ shiny::updateSelectInput(session, "selectResult",
+ selected = myResultList[[trueRow()]]
+ )
+ })
+
+ #drop downs update row and other drop down
+ sumProxy <- DT::dataTableProxy("summaryTable", session = session)
+
+ shiny::observeEvent(input$selectResult,{
+ val <- which(myResultList==input$selectResult)
+ trueRow(val)
+ DT::selectRows(sumProxy, which(filterIndex()==val)) # reset filter here?
+ })
+
+
+
+ # HELPER INFO
+ showInfoBox <- function(title, htmlFileName) {
+ shiny::showModal(shiny::modalDialog(
+ title = title,
+ easyClose = TRUE,
+ footer = NULL,
+ size = "l",
+ shiny::HTML(readChar(htmlFileName, file.info(htmlFileName)$size) )
+ ))
+ }
+
+
+ observeEvent(input$DescriptionInfo, {
+ showInfoBox("Description", "html/Description.html")
+ })
+ observeEvent(input$SummaryInfo, {
+ showInfoBox("Summary", "html/Summary.html")
+ })
+ observeEvent(input$PerformanceInfo, {
+ showInfoBox("Performance", "html/Performance.html")
+ })
+ observeEvent(input$ModelInfo, {
+ showInfoBox("Model", "html/Model.html")
+ })
+ observeEvent(input$LogInfo, {
+ showInfoBox("Log", "html/Log.html")
+ })
+ observeEvent(input$SettingsInfo, {
+ showInfoBox("Settings", "html/Settings.html")
+ })
+ observeEvent(input$DataInfoInfo, {
+ showInfoBox("DataInfo", "html/DataInfo.html")
+ })
+ observeEvent(input$HelpInfo, {
+ showInfoBox("HelpInfo", "html/Help.html")
+ })
+
+
+ observeEvent(input$rocHelp, {
+ showInfoBox("ROC Help", "html/rocHelp.html")
+ })
+ observeEvent(input$prcHelp, {
+ showInfoBox("PRC Help", "html/prcHelp.html")
+ })
+ observeEvent(input$f1Help, {
+ showInfoBox("F1 Score Plot Help", "html/f1Help.html")
+ })
+ observeEvent(input$boxHelp, {
+ showInfoBox("Box Plot Help", "html/boxHelp.html")
+ })
+ observeEvent(input$predDistHelp, {
+ showInfoBox("Predicted Risk Distribution Help", "html/predDistHelp.html")
+ })
+ observeEvent(input$prefDistHelp, {
+ showInfoBox("Preference Score Distribution Help", "html/prefDistHelp.html")
+ })
+ observeEvent(input$calHelp, {
+ showInfoBox("Calibration Help", "html/calHelp.html")
+ })
+ observeEvent(input$demoHelp, {
+ showInfoBox("Demographic Help", "html/demoHelp.html")
+ })
+
+
+
+})
diff --git a/PredictingHFinT2DM/ui.R b/PredictingHFinT2DM/ui.R
index 2bbc5e20..d281422f 100644
--- a/PredictingHFinT2DM/ui.R
+++ b/PredictingHFinT2DM/ui.R
@@ -1,6 +1,6 @@
# @file Ui.R
#
-# Copyright 2018 Observational Health Data Sciences and Informatics
+# Copyright 2020 Observational Health Data Sciences and Informatics
#
# This file is part of PatientLevelPrediction
#
@@ -20,7 +20,7 @@ library(shiny)
library(plotly)
library(shinycssloaders)
library(shinydashboard)
-library(shiny.i18n)
+
addInfo <- function(item, infoId) {
infoTag <- tags$small(class = "badge pull-right action-button",
style = "padding: 1px 6px 2px 6px; background-color: steelblue;",
@@ -31,10 +31,9 @@ addInfo <- function(item, infoId) {
return(item)
}
-#translation
ui <- shinydashboard::dashboardPage(skin = 'black',
- shinydashboard::dashboardHeader(title = "Multiple PLP Viewer",
+ shinydashboard::dashboardHeader(title = "PLP Viewer",
tags$li(div(img(src = 'logo.png',
title = "OHDSI PLP", height = "40px", width = "40px"),
@@ -45,17 +44,60 @@ ui <- shinydashboard::dashboardPage(skin = 'black',
),
shinydashboard::dashboardSidebar(
- shinydashboard::sidebarMenu(
- addInfo(shinydashboard::menuItem("Description", tabName = "Description", icon = shiny::icon("home")), "DescriptionInfo"),
- # addInfo(shinydashboard::menuItem("Calculate Risk", tabName = "Risk", icon = shiny::icon("heartbeat")), "RiskInfo"),
- addInfo(shinydashboard::menuItem("Summary", tabName = "Summary", icon = shiny::icon("table")), "SummaryInfo"),
- addInfo(shinydashboard::menuItem("Performance", tabName = "Performance", icon = shiny::icon("bar-chart")), "PerformanceInfo"),
- addInfo(shinydashboard::menuItem("Model", tabName = "Model", icon = shiny::icon("clipboard")), "ModelInfo"),
- addInfo(shinydashboard::menuItem("Log", tabName = "Log", icon = shiny::icon("list")), "LogInfo"),
- addInfo(shinydashboard::menuItem("Data Info", tabName = "DataInfo", icon = shiny::icon("database")), "DataInfoInfo"),
- addInfo(shinydashboard::menuItem("Help", tabName = "Help", icon = shiny::icon("info")), "HelpInfo")
+ shinydashboard::sidebarMenu(id ='menu',
+ addInfo(shinydashboard::menuItem("Description", tabName = "Description", icon = shiny::icon("home")), "DescriptionInfo"),
+ addInfo(shinydashboard::menuItem("Summary", tabName = "Summary", icon = shiny::icon("table")), "SummaryInfo"),
+ addInfo(shinydashboard::menuItem("Performance", tabName = "Performance", icon = shiny::icon("bar-chart")), "PerformanceInfo"),
+ addInfo(shinydashboard::menuItem("Model", tabName = "Model", icon = shiny::icon("clipboard")), "ModelInfo"),
+ addInfo(shinydashboard::menuItem("Settings", tabName = "Settings", icon = shiny::icon("cog")), "SettingsInfo"),
+ addInfo(shinydashboard::menuItem("Log", tabName = "Log", icon = shiny::icon("list")), "LogInfo"),
+ addInfo(shinydashboard::menuItem("Data Info", tabName = "DataInfo", icon = shiny::icon("database")), "DataInfoInfo"),
+ addInfo(shinydashboard::menuItem("Help", tabName = "Help", icon = shiny::icon("info")), "HelpInfo")
+ ),
+
+ # scroller performanace - make conditional
+ conditionalPanel(condition = "input.menu=='Performance'",
+ shiny::sliderInput("slider1",
+ shiny::span("Threshold: ", shiny::textOutput('threshold'), style="color:white;font-family: Arial;font-size:14px;"),
+ min = 1, max = 100, value = 50, ticks = F
+ ),
+
+ shiny::splitLayout(
+ cellWidths = c('10%', '80%', '10%'),
+ shiny::span(shiny::h5(strong('0')), style="color:white"),
+ shiny::h5(' '),
+ shiny::span(shiny::h5(strong('1')), style="color:white")
+ ),
+ shiny::tags$script(shiny::HTML("
+ $(document).ready(function() {setTimeout(function() {
+ supElement = document.getElementById('slider1').parentElement;
+ $(supElement).find('span.irs-max, span.irs-min, span.irs-single, span.irs-from, span.irs-to').remove();
+ }, 50);})
+ "))
+ ),
+
+ conditionalPanel(condition = "input.menu=='Performance' || input.menu=='Model' || input.menu=='Settings' || input.menu=='Log'",
+
+ shinyWidgets::pickerInput("selectResult", "Result:",
+ choices = myResultList,
+ selected = myResultList[[1]],
+ options = shinyWidgets::pickerOptions(liveSearch = TRUE, dropupAuto = FALSE, header = 'Select a result here to view...'),
+ multiple = FALSE),
+
+ shiny::tableOutput("sideSettings"),
+ shiny::tableOutput("sideSettings2")
+
+
+ #shiny::selectInput(
+ # "selectResult",
+ # label = shiny::h4("Result:"),
+ # choices = myResultList
+ #)
+
)
- ),
+
+
+ ), # end sidebar
shinydashboard::dashboardBody(
shinydashboard::tabItems(
@@ -67,65 +109,14 @@ ui <- shinydashboard::dashboardPage(skin = 'black',
shiny::a("Demo Video", href = 'https://youtu.be/StpV40yl1UE', target='_blank')
),
- # # First tab content
+ # First tab content
shinydashboard::tabItem(tabName = "Description",
shiny::includeMarkdown(path = "./www/shinyDescription.md")
-
+
),
- # shinydashboard::tabItem(tabName = "Risk",
- # shiny::selectInput("language",'Language', choices = translationChoices),
- # shiny::uiOutput("risktabside"),
- # shiny::uiOutput("risktabmain")
- #
- # # sidebarPanel(
- # # shiny::p(i18n$t('Use this tool to calculate the risk of COVID outcomes: ')),
- # # shiny::p(' '),
- # # shiny::sliderInput("age", i18n$t("Age:"),
- # # min = 18, max = 94,
- # # value = 50),
- # # shiny::selectInput("sex",i18n$t("Sex"), choices = c(i18n$t("Male"), i18n$t("Female"))),
- # # shiny::checkboxInput("cancer", i18n$t("History of Cancer")),
- # # shiny::checkboxInput("copd", i18n$t("History of COPD")),
- # # shiny::checkboxInput("diabetes", i18n$t("History of Diabetes")),
- # # shiny::checkboxInput("hd", i18n$t("History of Heart disease")),
- # # shiny::checkboxInput("hl", i18n$t("History of Hyperlipidemia")),
- # # shiny::checkboxInput("hypertension", i18n$t("History of Hypertension")),
- # # shiny::checkboxInput("kidney",i18n$t("History of Kidney Disease")),
- # # shiny::actionButton("calculate",i18n$t("Calculate Risk")),
- # # hr()
- # #
- # # ),
- # # mainPanel(
- # # conditionalPanel('input.calculate', {
- # # shinydashboard::box(width = 12,
- # # title = tagList(shiny::icon("bar-chart"),i18n$t("Predicted Risk (%)")), status = "info", solidHeader = TRUE,
- # #
- # # plotly::plotlyOutput("contributions"))}
- # #
- # # ),
- # # shinydashboard::box(
- # # status = "primary", solidHeader = TRUE,
- # # width = 12,
- # # shiny::h2("Description"),
- # # # shiny::p("The Observational Health Data Sciences and Informatics (OHDSI) international community is hosting a COVID-19 virtual study-a-thon this week (March 26-29) to inform healthcare decision-making in response to the current global pandemic."),
- # # shiny::p("This calculator presents the results of a prediction study that developed 3 prediction models."),
- # # shiny::p("The three models predicted: requiring hospital admission (COVER-H), requiring intensive services (COVER-I), or fatality (COVER-F) in the month following COVID-19 diagnosis"),
- # # shiny::p(' '),
- # # shiny::h3("Disclaimer"),
- # # shiny::p('Should not be considered Medical Advice.
- # # By using the app, you acknowledge that the content does not constitute medical advice and does not create a Healthcare Professional - Patient relationship and does not constitute medical opinion or advice.
- # # Access to general information is provided for research and educational purposes only.
- # # Content is not recommended or endorsed by any doctor or healthcare provider.
- # # The information provided is not a substitute for medical or professional care,
- # # and you should not use the information in place of an appointment or the advice of your physician or other healthcare provider.
- # # You are liable or responsible for any action taken through use of information in this site.'), #Todo: add disclaimer
- # # ), )
- #
- # ),
- #
shinydashboard::tabItem(tabName = "DataInfo",
shiny::includeMarkdown(path = "./www/dataInfo.md")
-
+
),
shinydashboard::tabItem(tabName = "Summary",
@@ -137,35 +128,41 @@ ui <- shinydashboard::dashboardPage(skin = 'black',
shiny::selectInput('valDatabase', 'Validation Database', c('All',unique(as.character(summaryTable$Val)))),
shiny::selectInput('T', 'Target Cohort', c('All',unique(as.character(summaryTable$`T`)))),
shiny::selectInput('O', 'Outcome Cohort', c('All',unique(as.character(summaryTable$`O`)))),
- shiny::selectInput('riskWindowStart', 'Time-at-risk start:', c('All',unique(as.character(summaryTable$`TAR start`)))),
- shiny::selectInput('riskWindowEnd', 'Time-at-risk end:', c('All',unique(as.character(summaryTable$`TAR end`))))
+ shiny::selectInput('TAR', 'Time-at-risk end:', c('All',unique(as.character(summaryTable$TAR))))
),
+ shiny::column(10, style = "background-color:#F3FAFC;",
+ shiny::div(DT::dataTableOutput('summaryTable'),
+ style = "font-size:70%")
+
+ ))),
+
+
+ shinydashboard::tabItem(tabName = "Settings",
+
+ shiny::fluidRow(
+
shiny::column(10, style = "background-color:#F3FAFC;",
# do this inside tabs:
- shiny::tabsetPanel(
-
- shiny::tabPanel("Results",
- shiny::div(DT::dataTableOutput('summaryTable'),
- style = "font-size:70%")),
-
- shiny::tabPanel("Model Settings",
- shiny::h3('Model Settings: ',
- shiny::a("help", href="https://ohdsi.github.io/PatientLevelPrediction/reference/index.html", target="_blank")
- ),
- DT::dataTableOutput('modelTable')),
-
- shiny::tabPanel("Population Settings",
- shiny::h3('Population Settings: ',
- shiny::a("help", href="https://ohdsi.github.io/PatientLevelPrediction/reference/createStudyPopulation.html", target="_blank")
- ),
- DT::dataTableOutput('populationTable')),
-
- shiny::tabPanel("Covariate Settings",
- shiny::h3('Covariate Settings: ',
- shiny::a("help", href="http://ohdsi.github.io/FeatureExtraction/reference/createCovariateSettings.html", target="_blank")
- ),
- DT::dataTableOutput('covariateTable'))
+ shiny::tabsetPanel(id = "tabs",
+
+ shiny::tabPanel("Model Settings",
+ shiny::h3('Model Settings: ',
+ shiny::a("help", href="https://ohdsi.github.io/PatientLevelPrediction/reference/index.html", target="_blank")
+ ),
+ DT::dataTableOutput('modelTable')),
+
+ shiny::tabPanel("Population Settings",
+ shiny::h3('Population Settings: ',
+ shiny::a("help", href="https://ohdsi.github.io/PatientLevelPrediction/reference/createStudyPopulation.html", target="_blank")
+ ),
+ DT::dataTableOutput('populationTable')),
+
+ shiny::tabPanel("Covariate Settings",
+ shiny::h3('Covariate Settings: ',
+ shiny::a("help", href="http://ohdsi.github.io/FeatureExtraction/reference/createCovariateSettings.html", target="_blank")
+ ),
+ DT::dataTableOutput('covariateTable'))
)
)
@@ -175,47 +172,19 @@ ui <- shinydashboard::dashboardPage(skin = 'black',
shinydashboard::tabItem(tabName = "Performance",
shiny::fluidRow(
+ #shinydashboard::box(width = 12,
+ # title = tagList(shiny::icon("question"),"Prediction Question"), status = "info", solidHeader = TRUE,
+ # shiny::htmlOutput('info')
+ #),
tabBox(
title = "Performance",
# The id lets us use input$tabset1 on the server to find the current tab
id = "tabset1", height = "100%", width='100%',
- tabPanel("Summary",
+
+ tabPanel("Threshold Dependant",
shiny::fluidRow(
- shiny::column(width = 4,
- shinydashboard::box(width = 12,
- title = tagList(shiny::icon("question"),"Prediction Question"), status = "info", solidHeader = TRUE,
- shiny::textOutput('info')
- ),
- shinydashboard::box(width = 12,
- title = tagList(shiny::icon("gear"), "Input"),
- status = "info", solidHeader = TRUE,
- shiny::splitLayout(
- cellWidths = c('5%', '90%', '5%'),
- shiny::h5(' '),
- shiny::sliderInput("slider1",
- shiny::h4("Threshold value slider: ", strong(shiny::textOutput('threshold'))),
- min = 1, max = 100, value = 50, ticks = F),
- shiny::h5(' ')
- ),
- shiny::splitLayout(
- cellWidths = c('5%', '90%', '5%'),
- shiny::h5(strong('0')),
- shiny::h5(' '),
- shiny::h5(strong('1'))
- ),
- shiny::tags$script(shiny::HTML("
- $(document).ready(function() {setTimeout(function() {
- supElement = document.getElementById('slider1').parentElement;
- $(supElement).find('span.irs-max, span.irs-min, span.irs-single, span.irs-from, span.irs-to').remove();
- }, 50);})
- "))
- )
-
- ),
-
-
- shiny::column(width = 8,
+ shiny::column(width = 12,
shinydashboard::box(width = 12,
title = "Dashboard",
status = "warning", solidHeader = TRUE,
@@ -237,7 +206,7 @@ ui <- shinydashboard::dashboardPage(skin = 'black',
)
- ),
+ ), # end summary
tabPanel("Discrimination",
shiny::fluidRow(
@@ -287,11 +256,28 @@ ui <- shinydashboard::dashboardPage(skin = 'black',
side = "right",
shinycssloaders::withSpinner(shiny::plotOutput('demo')))
)
- )
+ ),
+ tabPanel("Validation",
+ shiny::div(DT::dataTableOutput('validationTable'),
+ style = "font-size:70%; padding-bottom:20px"),
+
+ shiny::fluidRow(
+ shinydashboard::box(status = 'info',
+ title = actionLink("rocHelp","Roc Plot", icon = icon("info")),
+ solidHeader = TRUE,
+ shinycssloaders::withSpinner(shiny::plotOutput('valRoc'))),
+ shinydashboard::box(status = 'info',
+ title = actionLink("calHelp","Calibration Plot", icon = icon("info")),
+ solidHeader = TRUE,
+ side = "right",
+ shinycssloaders::withSpinner(shiny::plotOutput('valCal')))
+ )
+ )
))),
# 3rd tab
shinydashboard::tabItem(tabName = "Model",
+
shiny::fluidRow(
shinydashboard::box( status = 'info',
title = "Binary", solidHeader = TRUE,
@@ -319,4 +305,4 @@ ui <- shinydashboard::dashboardPage(skin = 'black',
)
)
- )
\ No newline at end of file
+ )