Simulation
1) Simulation of mean BPs
Simulated BPs and the count-based decision method were generated using statistical software R (R Core Team, R Foundation for Statistical Computing, Vienna, Austria) and RStudio (RStudio Team, Rstudio, BPC, Boston, MA, US). We produced 100 random sample cases of mean SBP level between 130 ~ 140 mmHg and mean DBP between 80 ~ 90 mmHg using “runif”, a random number generating function as follows to generate individual BP samples around the mean SBPs and DBPs later, because it will be most difficult for physicians to decide whether HBP achieves the target BP level, 135/85 mmHg, when the mean BP levels were close to the target BP level.
set.seed (1234)
N<-100
M.sbp<-runif(n = N, min = 130, max = 140)
M.dbp<-runif(n = N, min = 80, max = 90)
2) Simulation of individual BPs according to the numbers of BP readings and SDs
Guidelines recommend obtaining HBPM for at least 5 to 7 days serially and excluding BP readings obtained on the first day of a series in mean BP calculation3. Consequently, at least 16 (5 days) to 24 (7 days) readings in a month are required to standardize HBPM. Therefore, we generated 16, 20, and 24 SBP and DBP readings per 1 mean SBP and DBP sample.
For a number of BP readings K, a set of 100 SBPs and DBPs was simulated using “rnorm”, a function generating random numbers with a normal distribution at 4 different SD levels, which were 5, 10, 15 and 20 mmHg for SBP and 3.5, 7.0, 10.5, and 14 mmHg for DBP (70% of the SDs for SBP). Here is an example of K = 16, as follows. All sets of simulated BPs are provided in Supplementary data S2.
N <-100
K <-16
SD <-c(5, 10, 15, 20)
sd_label <-c("SD = 5", "SD = 10", "SD = 15", "SD = 20")
mk<-matrix (NA, ncol = k, nrow = N)
sbp <-list(mk, mk, mk, mk)
dbp <- list(mk, mk, mk, mk)
names(sbp)<-sd_label; names(dbp)<-sd_label
dimnames <-list(paste0("Pt", 1:N), sd_label)
msd <-matrix(NA, ncol = NROW(SD), nrow = N, dimnames = dimnames)
meansbp <-msd; meandbp <-msd
shtn <- msd; dhtn <- msd
nsbp135 <-msd; ndbp85 <-msd
for (j in 1:NROW(SD)){
for (i in 1:N){
sbp [[j]][i,]<-rnorm(n = k, mean = M.sbp[i], sd = SD[j])
dbp [[j]][i,]<-rnorm(n = k, mean = M.dbp[i], sd = SD[j]*0.7)
nsbp135[i,j]<-NROW(which(sbp[[j]][i,] > = 135))
ndbp85[i,j]<-NROW(which(dbp[[j]][i,] > = 85))
}
meansbp[,j]<-apply(sbp[[j]], 1, mean)
meandbp[,j]<-apply(dbp[[j]], 1, mean)
shtn[,j]<-ifelse(meansbp[,j] > = 135, 1, 0)
dhtn[,j]<-ifelse(meandbp[,j] > = 85, 1, 0)
}
4) Definition of a high BP reading and uncontrolled BP
A high SBP/DBP reading was defined as an individual SBP ≥ 135 mmHg and/or DBP ≥ 85 mmHg, and a high SBP/DBP count was defined as the number of high SBP/DBP readings in an HBPM series. An uncontrolled SBP/DBP was defined as a mean SBP ≥ 135 mmHg and/or a mean DBP ≥ 85 mmHg. Diagnostic performances of the count-based decision for uncontrolled BP were assessed using ROC curves and C-statistics. The best threshold for the number of high BPs was decided at the maximum values of Youden’s J-indexes. In addition to the diagnostic performances at the best thresholds, we investigated the diagnostic performances at intuitive fixed cutoff values. For physicians to use the cutoff values widely, the cutoff values were set to half of the K values, 8, 10 and 12.
5) Assessments and comparisons of the diagnostic performances for uncontrolled BPs
Sensitivity, specificity, PPV, NPV, CCR and C-statistic were assessed as diagnostic performance indexes of the high BP counts. Although Delong’s method can be employed to generate CIs for C-statistics and to compare 2 C-statistics, there have been no stable methods to compare the other diagnostic performance indexes among 3 or more groups. Therefore, we employed bootstrap resampling methods to create individual samples and distributions for the diagnostic performance indexes. For each combination of the 3 Ks (16, 20 and 24) and 4 SD (5, 10, 15 and 20 mmHg) levels, we created 2,000 bootstrap samples (subsequently, 24,000 bootstrap samples for 12 levels) from a set of 100 SBPs/DBPs using the “boot” function as follows:
#For K = 16
roc.sbp.k16 <-list(NA, NA, NA, NA)
bootraw.auc.sbp.k16 <-list(NA, NA, NA, NA)
boot.auc.sbp.k16 <-matrix(NA, nrow = 2000, ncol = 4)
#For ROC curve objects
for (i in 1:4) {
roc.sbp.k16[[i]]<-roc(shtn[,i] ~ nsbp135[,i], ci = T, auc = T)
}
#For Bootstrap resampling
fx<-function(data, indices, x, y){
d<-data[indices, ]
roc<-roc(d$y ~ d$x, auc = T); return(roc$auc)
}
for (j in 1:4){
x<- roc.sbp.k16[[j]]$original.predictor
y<- roc.sbp.k16[[j]]$original.response
m<-data.frame(x, y)
boot<-boot(m, x="x", y="y", R = 2000, statistic = fx)
boot.auc.sbp.k16[,j]<-boot$t
bootraw.auc.sbp.k16[[j]]<-boot
}
Therefore, 24,000 bootstrap variations of C-statistics and CCRs were created for both SBP and DBP (2,000 bootstrap variations for each possible combination of Ks and SDs). With these bootstrap samples, we compared the C-statistics and CCRs among the numbers of measurements K and the SD levels and evaluated the interactions between K values and SD levels using mixed linear effect models. In the models, each combination of K values and SD levels was used as an identifier, and variations within the combination were considered random effects, and the variations among the K values and SD levels were considered fixed effects. All bootstrap variations of C-statistics and CCRs are provided in Supplementary Data S3.
7) Estimation of the mean SBPs and DBPs using the numbers of high BPs
Linear regression models were used to predict the mean SBPs and DBPs corresponding to the numbers of high SBPs and DBPs with 95% prediction intervals. A linear regression model was produced for each SD level at K = 24.
Validation
Validation for the count-based decision method for uncontrolled BP was performed using HBPM data retrospectively obtained from 424 patients who had visited the cardiology department for antihypertensive medications at Hanyang University Seoul Hospital from November 2017 to September 2018. The HBPM data collection and study protocol adhered to the Declaration of Helsinki. The use of these data was approved by the Institutional Review Board of Hanyang University Seoul Hospital, and informed consent was waived because the HBPM data were obtained from the electrical medical records produced in the past. HBPM data from 12 patients whose number of BP readings was < 8 were excluded. Patients were categorized into 3 groups according to Ks (8 ~ 15 times, 16 ~ 23 times and ≥ 24 times), SDs (< 10 mmHg, 10-14.9 mmHg and ≥ 15 mmHg), SBP ranges (< 40 mmHg, 40–59 mmHg and ≥ 60 mmHg) and mean SBPs/DBPs.
Diagnostic performances of the count-based decision for uncontrolled BP were assessed using ROC curve analyses and the C-statistics according to the categories of patients. Because, unlike the numbers of simulated BP readings with 3 fixed levels, the numbers of actual HBP readings widely varied from 8 to 70, we used the ratio between the high BP counts and the number of total BP readings or a high BP count-to-total BP reading ratio (C-T ratio), instead of the simple high BP counts, to predict uncontrolled BP and to estimate mean SBPs/DBPs. Sensitivity, specificity, PPV, NPV and CCR were assessed at the smallest number of high BP counts when the C-T ratio was ≥ 0.5, or at a HCP, as follows:
# When “V” is a list of matrixes containing columns for home SBPs and DBPs,
# And “m” is a dataframe containing columns for the mean SBPs and mean DBPs,
for(i in 1:NROW(V)){
dt<-V[[i]]
m$n.sbp135[i]<-NROW(which(dt$sbp > = 135, 1, 0))
m$n.dbp85[i]<-NROW(which(dt$dbp > = 85, 1, 0))
}
m$nhalf<-ceiling(m$nmeasure/2)
m$rate.sbp135<-m$n.sbp135/m$nmeasure
m$rate.dbp85<-m$n.dbp85/m$nmeasure
#m$n.sbp135 > = nhalf or m$n.dbp85 > = nhalf indicates the HCP,
#”nmeasure” indicates the number of entire BP readings,
#”rate.sbp135” and “rate.dbp85” indicate the systolic and diastolic C-T ratios, respectively.
The mean HBPs were predicted with 95% prediction intervals using the C-T ratio. Unlike the simulated BP series, which were generated within the programmed range, the real HBP series had a wider distribution, ranging between 89–183 mmHg for the mean SBPs and 59–125 mmHg for the mean DBPs. Consequently, the fitting curve between the high BP counts and the mean BP was expected to resemble a logit curve (y = C + b*log(x/(1-x)) | 0 < x < 1). However, because the fitting curve will be linear within the range applied to the simulated BPs, we fitted the C-T ratio to the mean BPs using a linear curve within the range of the simulated BPs with an SD most similar to the real SD of the mean BPs, as well as the logit curve.
Statistical analysis
All simulations and statistical analyses were performed using R-4.04 and RStudio-1.3. R codes required to simulate BPs and to conduct the statistical analyses are provided in supplementary data S1.
The sample size of 100 cases was determined empirically, given that a physician would prescribe 50 patients per session and 100 patients per day in primary care clinic settings. To assess the diagnostic performances of the count-based decision method for uncontrolled BP, ROC curve analysis with the “pROC” package was used. The 95% CIs of the C-statistics were estimated using 2 methods, Delong’s method and the bootstrap resampling method. The comparisons of C-statistics and CCRs among Ks and SDs were performed through mixed linear effect models on the 24,000 permuted results of the C-statistics and CCRs from the bootstrap resamples using the “lme4” package. A linear regression model in the “stats” package was used to fit the high BP counts and the mean BPs on both a linear curve and a logit curve.
C-statistics of < 0.70, 0.70–0.89 and > 0.90 were interpreted as poor, moderate and high in diagnostic accuracy, and a p-value < 0.05 was considered significant.