Fragility of evidence for anti-fracture efficacy: A systematic review

Data management

Libraries needed:

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.3     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.3     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
library(fragility)
## Warning: package 'fragility' was built under R version 4.3.2
library(expss)
## Warning: package 'expss' was built under R version 4.3.2
## Loading required package: maditr
## Warning: package 'maditr' was built under R version 4.3.2
## 
## To drop variable use NULL: let(mtcars, am = NULL) %>% head()
## 
## 
## Attaching package: 'maditr'
## 
## The following objects are masked from 'package:dplyr':
## 
##     between, coalesce, first, last
## 
## The following object is masked from 'package:purrr':
## 
##     transpose
## 
## The following object is masked from 'package:readr':
## 
##     cols
## 
## 
## Attaching package: 'expss'
## 
## The following objects are masked from 'package:stringr':
## 
##     fixed, regex
## 
## The following objects are masked from 'package:dplyr':
## 
##     compute, contains, na_if, recode, vars, where
## 
## The following objects are masked from 'package:purrr':
## 
##     keep, modify, modify_if, when
## 
## The following objects are masked from 'package:tidyr':
## 
##     contains, nest
## 
## The following object is masked from 'package:ggplot2':
## 
##     vars
library(ggplot2)
library(gridExtra)
## 
## Attaching package: 'gridExtra'
## 
## The following object is masked from 'package:dplyr':
## 
##     combine
library(grid)
library(table1)
## 
## Attaching package: 'table1'
## 
## The following objects are masked from 'package:base':
## 
##     units, units<-
library(compareGroups)

Set-up data:

fi = read.csv("C:\\Thach\\Research projects\\Nick's projects\\FI for fracture efficacy\\Analysis\\fi_analysis_updated.csv")
head(fi)
##    id study_ext study            author year           st_names journal
## 1 a_1        6b    NA Leder_ACTIVExtend 2020 Leder (2020)_exta1    JCEM
## 2 a_2        1b    NA         Body_VERO 2020     Body (2020)_a1      OI
## 3 a_3        1b    NA         Body_VERO 2020     Body (2020)_a2      OI
## 4 a_4        1b    NA         Body_VERO 2020     Body (2020)_a3      OI
## 5 a_5         1     1      Kendler_VERO 2018  Kendler (2018)_a1  Lancet
## 6 a_6         1    NA      Kendler_VERO 2018  Kendler (2018)_a2  Lancet
##         country blinding    intervention     control women_per timing fi
## 1 International   Double   Abaloparatide Alendronate         1      4  4
## 2 International   Double Teriparatide_20 Risedronate         1      2 NA
## 3 International   Double Teriparatide_20 Risedronate         1      4 NA
## 4 International   Double Teriparatide_20 Risedronate         1      2 NA
## 5 International   Double    Teriparatide Risedronate         1      4 15
## 6 International   Double    Teriparatide Risedronate         1      4 17
##          fq      pval         fx_site outcome   HR lower upper
## 1 0.0035971 0.0092162        Vert_24m       1 0.29  0.10  0.87
## 2        NA        NA         MOF_12m       2 0.38  0.20  0.72
## 3        NA        NA         MOF_24m       2 0.20  0.05  0.86
## 4        NA        NA      ClinFx_12m       2 0.49  0.31  0.78
## 5 0.0142993 0.0002691        Vert_24m       1 0.44  0.29  0.68
## 6 0.0162059 0.0002114 NworsenVert_24m       1 0.46  0.31  0.68
##                                           Notes e_con n_rand_con e_intv
## 1                                                  16        581      3
## 2                                                  24        680     10
## 3                                                  40        680     16
## 4 Did not report clinical fractures @ 24 months    34        680     18
## 5                                                  64        680     28
## 6                                                  69        680     31
##   n_rand_intv      x95_ci p_value pri_endpoint sen_analysis extended
## 1         558  0.10, 0.87  0.0270            0            1        1
## 2         680  0.20, 0.72  0.0030            0            0        0
## 3         680  0.05, 0.86  0.0310            0            0        0
## 4         690  0.31, 0.78  0.0030            0            0        0
## 5         680 [0.29,0.68]  0.0001            1            0        0
## 6         680 [0.31,0.68]  0.0001            0            0        0
##                             notes
## 1      post-hoc analysis/extended
## 2                VERO (2nd paper)
## 3                VERO (2nd paper)
## 4                VERO (2nd paper)
## 5 6 pt excluded from the analyses
## 6                                
##                                             st_cohort rep_loss rep_withdr
## 1                   postm osteoporotic women aged 49+        9         62
## 2                    Survival analysis: no loss to FU       NA         NA
## 3                    Survival analysis: no loss to FU       NA         NA
## 4                    Survival analysis: no loss to FU       NA         NA
## 5 postm women aged 45+: <=-1.5, 2+ mod/1+ sev vert fx       12        185
## 6 postm women aged 45+: <=-1.5, 2+ mod/1+ sev vert fx       12        185
##   rep_death rep_compt n_control n_interven  X
## 1        68      1861       568        544 NA
## 2        NA        NA       680        680 NA
## 3        NA        NA       680        680 NA
## 4        NA        NA       680        680 NA
## 5        20      1013       533        516 NA
## 6        20      1013       533        516 NA
fi$no_rand = fi$n_rand_con + fi$n_rand_intv
fi$active_sample = fi$n_control + fi$n_interven
fi$n_event = fi$e_con + fi$e_intv

fi$loghr = log(fi$HR)

Data management:

  1. Fracture sites:
table(fi$fx_site)
## 
##                      ClinFx_12m                      ClinFx_18m 
##                               3                               1 
##                      ClinFx_24m                      ClinFx_36m 
##                               5                               2 
##                      ClinFx_72m                      ClinFx_72w 
##                               1                               2 
##                    ClinVert_12m                    ClinVert_24m 
##                               1                               3 
##                    ClinVert_36m                    ClinVert_48m 
##                               6                               1 
##                    ClinVert_72m                    ClinVert_72w 
##                               1                               2 
##                     Forearm_60m                ForearmWrist_72m 
##                               1                               1 
##                          Fx_36m                          Fx_70m 
##                               2                               1 
##                         Hip_18m                         Hip_24m 
##                               3                               2 
##                         Hip_36m                         Hip_60m 
##                               5                               1 
##           Hip_Wrist_Forearm_70m Hip_Wrist_Forearm_Vertebrae_70m 
##                               1                               1 
##                MajorNonVert_12m                MajorNonVert_24m 
##                               1                               2 
##                MajorNonVert_36m                MajorNonVert_60m 
##                               1                               1 
##                     MajVert_24m                MNworsenVert_12m 
##                               2                               1 
##                MNworsenVert_24m                         MOF_12m 
##                               1                               2 
##                         MOF_18m                         MOF_24m 
##                               1                               3 
##                     MultiFx_36m                   MultiVert_24m 
##                               1                               2 
##                   MultiVert_36m                       MVert_24m 
##                               1                               1 
##                       MVert_36m                    NmodVert_12m 
##                               2                               1 
##                    NmodVert_24m                     NonVert_12m 
##                               1                               1 
##                     Nonvert_18m                     NonVert_18m 
##                               3                               1 
##                     NonVert_24m                     NonVert_36m 
##                               5                               6 
##                     NonVert_60m                     NonVert_72m 
##                               1                               1 
##                  NonVertOFx_24m                 NworsenVert_12m 
##                               2                               2 
##                 NworsenVert_18m                 NworsenVert_24m 
##                               1                               4 
##                         OFx_12m                         OFx_24m 
##                               1                               1 
##                         Ofx_48m                         OFx_72m 
##                               1                               1 
##                 OtherClinFx_48m                        Vert_12m 
##                               1                              12 
##                        Vert_18m                        Vert_24m 
##                               3                              15 
##                        Vert_36m                        Vert_48m 
##                              11                               3 
##                        Vert_48w                        Vert_60m 
##                               1                               2 
##                         Vert_6m                        Vert_72m 
##                               1                               1 
##                        Vert_72w                       Wrist_24m 
##                               2                               1
fi_final = fi %>% 
  mutate(fx_code1 = case_when(fx_site == "Fx_36m" | fx_site == "Fx_70m" | fx_site == "Fx_72m" | fx_site == "MultiFx_36m" ~ 1,
                             fx_site == "ClinFx_12m" | fx_site == "ClinFx_18m" | fx_site == "ClinFx_24m" | 
                               fx_site == "ClinFx_36m" | fx_site == "ClinFx_72m" | fx_site == "ClinFx_72w" | 
                               fx_site == "OtherClinFx_48m" ~ 2,
                             fx_site == "OFx_12m" | fx_site == "OFx_24m" | fx_site == "Ofx_48m" | fx_site == "OFx_72m" ~ 3,
                             fx_site == "MOF_12m" | fx_site == "MOF_18m" | fx_site == "MOF_24m"  ~ 4,
                             fx_site == "Hip_Wrist_Forearm_70m" | fx_site == "Hip_Wrist_Forearm_Vertebrae_70m" ~ 5,
                             fx_site == "MajorNonVert_12m" | fx_site == "MajorNonVert_24m" | fx_site == "MajorNonVert_36m" | 
                               fx_site == "MajorNonVert_60m"  | fx_site == "NonVert_12m" | fx_site == "Nonvert_18m"  | fx_site == "NonVert_18m"  | 
                               fx_site == "NonVert_24m" | fx_site == "NonVert_36m" | fx_site == "NonVert_60m" | 
                               fx_site == "NonVert_72m" | fx_site == "NonVertOFx_24m" ~ 6,
                             fx_site == "MajVert_24m" | fx_site == "MNworsenVert_12m" | fx_site == "MNworsenVert_24m" | 
                               fx_site == "MultiVert_24m" | fx_site == "MultiVert_36m" | fx_site == "MVert_24m" | 
                               fx_site == "MVert_36m" | fx_site == "NmodVert_12m" | fx_site == "NmodVert_24m" | 
                               fx_site == "NworsenVert_12m" | fx_site == "NworsenVert_24m"  | fx_site == "Vert_12m" | fx_site == "NworsenVert_18m" |
                               fx_site == "Vert_18m"  | fx_site == "Vert_24m" | fx_site == "Vert_36m" | 
                               fx_site == "Vert_48m" | fx_site == "Vert_48w" | fx_site == "Vert_60m" | fx_site == "Vert_6m" | 
                               fx_site == "Vert_72m" | fx_site == "Vert_72w" ~ 7, 
                            fx_site == "ClinVert_12m" | fx_site == "ClinVert_24m" | fx_site == "ClinVert_36m" | 
                              fx_site == "ClinVert_48m" | fx_site == "ClinVert_72m" | fx_site == "ClinVert_72w"   ~ 8,
                            fx_site == "Hip_18m" | fx_site == "Hip_24m" | fx_site == "Hip_36m" | fx_site == "Hip_60m" ~ 9,
                            fx_site == "Forearm_60m" | fx_site == "ForearmWrist_72m" | fx_site == "Wrist_24m"  ~ 10))
var_lab(fi_final$fx_code1) = "Fracture sites"
val_lab(fi_final$fx_code1) = num_lab("
                                    1 Any_fx
                                    2 Clin_fx
                                    3 OFx
                                    4 MOF
                                    5 Dif_comb
                                    6 NonVert_fx
                                    7 Vert_fx
                                    8 ClinVert_fx
                                    9 Hip
                                    10 Forearm")
table(fi_final$fx_code1)
## 
##      Any_fx     Clin_fx         OFx         MOF    Dif_comb  NonVert_fx 
##           4          15           4           6           2          25 
##     Vert_fx ClinVert_fx         Hip     Forearm 
##          70          14          11           3
fi_final = fi_final %>% 
  mutate(fx_code2 = case_when(fx_code1 == "1" | fx_code1 == "2" ~ 1,
                              fx_code1 == "3" | fx_code1 == "4" | fx_code1 == "5" ~ 2,
                              fx_code1 == "6" ~ 3,
                              fx_code1 == "7" ~ 4,
                              fx_code1 == "8" ~ 5,
                              fx_code1 == "9" ~ 6,
                              fx_code1 == "10" ~ 7))
var_lab(fi_final$fx_code2) = "Fracture sites"
val_lab(fi_final$fx_code2) = num_lab("
                                    1 Any
                                    2 Osteoporotic 
                                    3 Non-Vertebrae
                                    4 Vertebrae
                                    5 Clinical Vertebrae
                                    6 Hip
                                    7 Forearm")
table(fi_final$fx_code2)
## 
##                Any       Osteoporotic      Non-Vertebrae          Vertebrae 
##                 19                 12                 25                 70 
## Clinical Vertebrae                Hip            Forearm 
##                 14                 11                  3
  1. Interventions:
table(fi$intervention)
## 
##            Abaloparatide              Alendronate                  Calcium 
##                        5                        8                        3 
##          Calcium + vit D                Denosumab        Ibandronate daily 
##                       11                        9                        3 
## Ibandronate intermittent              Minodronate                      PTH 
##                        3                        4                        1 
##           Risedronate_25           Risedronate_50             Risendronate 
##                        1                        2                        5 
##              Romosozumab       Strontium Ranelate             Teriparatide 
##                       28                       17                       13 
##          Teriparatide_20          Teriparatide_40                    Vit D 
##                        8                        5                        3 
##              Zoledronate 
##                       25
fi_final = fi_final %>%
  mutate(interv_code1 = case_when(intervention == "Alendronate"  ~ 1.1,
                                 intervention == "Ibandronate daily" | intervention == "Ibandronate intermittent" ~ 1.2, 
                                 intervention == "Risendronate" | intervention == "Risedronate_25" | intervention == "Risedronate_50"  ~ 1.3, 
                                 intervention == "Minodronate" ~ 1.4, 
                                 intervention == "Zoledronate" ~ 1.5, 
                                 intervention == "Teriparatide" | intervention == "Teriparatide_20" | 
                                   intervention == "Teriparatide_40"  | intervention == "PTH" ~ 2.1, 
                                 intervention == "Abaloparatide" ~ 2.2, 
                                 intervention == "Romosozumab" ~ 3, 
                                 intervention == "Denosumab" ~ 4, 
                                 intervention == "Strontium Ranelate" ~ 5,
                                 intervention == "Calcium" | intervention == "Calcium + vit D" | intervention == "Vit D" ~ 6))
var_lab(fi_final$interv_code1) = "Interventions"
val_lab(fi_final$interv_code1) = num_lab("
                                    1.1 Alendronate
                                    1.2 Ibandronate
                                    1.3 Risedronate
                                    1.4 Minodronate
                                    1.5 Zoledronate
                                    2.1 Teriparatide
                                    2.2 Abaloparatide
                                    3 Romosozumab
                                    4 Denosumab
                                    5 Strontium_ranelate
                                    6 Calcium_VitD")
table(fi_final$interv_code1)
## 
##        Alendronate        Ibandronate        Risedronate        Minodronate 
##                  8                  6                  8                  4 
##        Zoledronate       Teriparatide      Abaloparatide        Romosozumab 
##                 25                 27                  5                 28 
##          Denosumab Strontium_ranelate       Calcium_VitD 
##                  9                 17                 17
fi_final = fi_final %>%
  mutate(interv_code2 = case_when(intervention == "Alendronate" | intervention == "Ibandronate daily" | 
                                    intervention == "Ibandronate intermittent" | intervention == "Risendronate" | intervention == "Risedronate_25" | intervention == "Risedronate_50" | 
                                    intervention == "Minodronate" | intervention == "Zoledronate" ~ 1, 
                                 intervention == "Teriparatide" | intervention == "Teriparatide_20" | 
                                   intervention == "Teriparatide_40" | intervention == "Abaloparatide" | intervention == "PTH" ~ 2, 
                                 intervention == "Romosozumab" ~ 3, 
                                 intervention == "Denosumab" ~ 4, 
                                 intervention == "Strontium Ranelate" ~ 5,
                                 intervention == "Calcium" | intervention == "Calcium + vit D" | intervention == "Vit D" ~ 6))
var_lab(fi_final$interv_code2) = "Interventions"
val_lab(fi_final$interv_code2) = num_lab("
                                    1 Bisphosphonates
                                    2 PTH analog
                                    3 Romosozumab
                                    4 Denosumab
                                    5 Strontium_ranelate
                                    6 Calcium_VitD")
table(fi_final$interv_code2)
## 
##    Bisphosphonates         PTH analog        Romosozumab          Denosumab 
##                 51                 32                 28                  9 
## Strontium_ranelate       Calcium_VitD 
##                 17                 17
  1. Journals:
table(fi$journal)
## 
## Am J Clin Nutr Ann Intern Med      Arth Rheu            BMJ           JAMA 
##              1              1              4              7             11 
##           JBMR           JCEM           JECM         Lancet           NEJM 
##              6              8              5             10             81 
##             OI 
##             20
fi_final = fi_final %>%
  mutate(journal_code1 = case_when(journal == "NEJM" ~ 1,
                                   journal == "Lancet" ~ 2,
                                   journal == "BMJ" ~ 3,
                                   journal == "JAMA" ~ 4, 
                                   journal == "Ann Intern Med" ~ 5, 
                                   journal == "JBMR" ~ 6, 
                                   journal == "JCEM" | journal == "JECM" ~ 7, 
                                   journal == "OI" ~ 8,
                                   journal == "Am J Clin Nutr" | journal == "Arth Rheu" ~ 9))
var_lab(fi_final$journal_code1) = "Journal"
val_lab(fi_final$journal_code1) = num_lab("
                                    1 NEJM
                                    2 Lancet
                                    3 BMJ
                                    4 JAMA
                                    5 Ann Intern Med
                                    6 JBMR
                                    7 JCEM
                                    8 OI
                                    9 Other")
table(fi_final$journal_code1)
## 
##           NEJM         Lancet            BMJ           JAMA Ann Intern Med 
##             81             10              7             11              1 
##           JBMR           JCEM             OI          Other 
##              6             13             20              5
fi_final = fi_final %>%
  mutate(journal_code2 = case_when(journal == "NEJM" ~ 1,
                                   journal == "Lancet" ~ 2,
                                   journal == "BMJ" ~ 3,
                                   journal == "JAMA" ~ 4, 
                                   journal == "Ann Intern Med" ~ 5, 
                                   journal == "JBMR" ~ 6, 
                                   journal == "JCEM" | journal == "JECM" ~ 7, 
                                   journal == "OI" | journal == "Am J Clin Nutr" | journal == "Arth Rheu" ~ 8))
var_lab(fi_final$journal_code2) = "Journal"
val_lab(fi_final$journal_code2) = num_lab("
                                    1 NEJM
                                    2 Lancet
                                    3 BMJ
                                    4 JAMA
                                    5 Ann Intern Med
                                    6 JBMR
                                    7 JCEM
                                    8 Other")
table(fi_final$journal_code2)
## 
##           NEJM         Lancet            BMJ           JAMA Ann Intern Med 
##             81             10              7             11              1 
##           JBMR           JCEM          Other 
##              6             13             25
  1. Others:
var_lab(fi_final$outcome) = "Types of fracture outcome"
val_lab(fi_final$outcome) = num_lab("
                                    1 Binary
                                    2 Time-to-event")

var_lab(fi_final$timing) = "Timing of outcome assessed"
val_lab(fi_final$outcome) = num_lab("
                                    1 0-6m
                                    2 >6-12m
                                    3 >12-18m
                                    4 >18-24m
                                    5 >24-36m
                                    6 >36-48m
                                    7 >48-60m
                                    8 >60-72m
                                    9 >72m")

fi_final = fi_final %>%
  mutate(sex = case_when(women_per == 0 ~ "Men",
                         women_per == 1 ~ "Women",
                         women_per > 0 & women_per < 1 ~ "Both"))
var_lab(fi_final$sex) = "Sex"
table(fi_final$sex)
## 
##  Both   Men Women 
##    19    10   125
fi_final = fi_final %>%
  mutate(placebo = case_when(control == "Placebo" ~ "Placebo",
                             control == "Alendronate" | control == "Risedronate" ~ "Active"))
var_lab(fi_final$placebo) = "Placebo"
table(fi_final$placebo)
## 
##  Active Placebo 
##      30     124

Calculate Fragility index (FI)

All documented analyses (some with significant results from Cox PH might turn out to be statistically non-significant using logistic regression) n= 9 analyses with P>0.05 from logistic regression will be excluded (NO studies are excluded)

fi_screen = frag.studies(e_con, n_control, e_intv, n_interven, data = fi_final, methods = "RR")
fi_screen
## The input dataset contains 154 studies
## Significance level = 0.05
## Null hypothesis: RR = 1
## p-value (two-sided) is based on:
##   relative risk  
## 
## Fragility index (FI) and fragility quotient (FQ):
## Based on relative risk,
##   145 studies yield significance with
##     median FI = 9, range 1-171, IQR 4-19 and
##     median FQ = 0.5%, range 0.0%-9.7%, IQR 0.2%-1.0%;
##   9 studies yield non-significance with
##     median FI = 1, range 1-16, IQR 1-4 and
##     median FQ = 0.1%, range 0.0%-1.4%, IQR 0.0%-0.9%;
##   overall, among all studies,
##     median FI = 8, range 1-171, IQR 3-18 and
##     median FQ = 0.5%, range 0.0%-9.7%, IQR 0.2%-1.0%
fi_final$Pval_screen = fi_screen$pval

Only analyses with statistically significant results from logistic regression/Fisher exact test (binary outcome) are included

fi_sig = subset(fi_final, Pval_screen<= 0.05)
fi_only_sig = frag.studies(e_con, n_control, e_intv, n_interven, data = fi_sig, methods = "RR")
fi_only_sig
## The input dataset contains 145 studies
## Significance level = 0.05
## Null hypothesis: RR = 1
## p-value (two-sided) is based on:
##   relative risk  
## 
## Fragility index (FI) and fragility quotient (FQ):
## Based on relative risk,
##   145 studies yield significance with
##     median FI = 9, range 1-171, IQR 4-19 and
##     median FQ = 0.5%, range 0.0%-9.7%, IQR 0.2%-1.0%;
##   0 study yields non-significance
##   overall, among all studies,
##     median FI = 9, range 1-171, IQR 4-19 and
##     median FQ = 0.5%, range 0.0%-9.7%, IQR 0.2%-1.0%
plot(fi_only_sig, bar = FALSE, freq = FALSE)

fi_sig$FI_final = fi_only_sig$FI
fi_sig$FQ_final = fi_only_sig$FQ
fi_sig$Pval_final = fi_only_sig$pval

The final dataset is saved

write.csv(fi_final, "C:\\Thach\\Research projects\\Nick's projects\\FI for fracture efficacy\\Analysis\\fi_final.csv", row.names = FALSE)

(1) All analyses with statistically significant results from logistic regression

n= 145 analyses from all 26 studies (+ 6 extended studies)

(1.1) Overall

(1.1.1) Overall

Characteristics by analyses

fi_sig$missing_fi[fi_sig$rep_loss > fi_sig$FI_final] = 1
fi_sig$missing_fi[fi_sig$rep_loss <= fi_sig$FI_final] = 0
is.na(fi_sig$rep_loss)
##   [1] FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
##  [61]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
##  [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
##  [97]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
## [109]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
## [121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE
## [133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
## [145]  TRUE
fi_sig$missing_fi[fi_sig$rep_loss == NA] = NA
fi_sig$fi4[fi_sig$FI_final>4] = "FI > 4"
  fi_sig$fi4[fi_sig$FI_final<=4] = "FI <= 4"

table1(~ as.factor(fx_code2) + as.factor(interv_code2) + as.factor(journal_code1) + as.factor(placebo) + sex + HR + loghr + no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) + as.factor(fi4), data = fi_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
Overall
(N=145)
as.factor(fx_code2)
Any 18 (12.4%)
Osteoporotic 11 (7.6%)
Non-Vertebrae 21 (14.5%)
Vertebrae 69 (47.6%)
Clinical Vertebrae 14 (9.7%)
Hip 9 (6.2%)
Forearm 3 (2.1%)
as.factor(interv_code2)
Bisphosphonates 48 (33.1%)
PTH analog 30 (20.7%)
Romosozumab 28 (19.3%)
Denosumab 9 (6.2%)
Strontium_ranelate 15 (10.3%)
Calcium_VitD 15 (10.3%)
as.factor(journal_code1)
NEJM 79 (54.5%)
Lancet 9 (6.2%)
BMJ 5 (3.4%)
JAMA 10 (6.9%)
Ann Intern Med 1 (0.7%)
JBMR 6 (4.1%)
JCEM 12 (8.3%)
OI 19 (13.1%)
Other 4 (2.8%)
as.factor(placebo)
Active 29 (20.0%)
Placebo 116 (80.0%)
Sex
Both 16 (11.0%)
Men 10 (6.9%)
Women 119 (82.1%)
HR
Mean (SD) 0.494 (0.188)
Median [Q1, Q3] 0.520 [0.350, 0.640]
Median [min, max] 0.520 [0.0600, 0.850]
loghr
Mean (SD) -0.806 (0.498)
Median [Q1, Q3] -0.654 [-1.05, -0.446]
Median [min, max] -0.654 [-2.81, -0.163]
no_rand
Mean (SD) 2900 (2300)
Median [Q1, Q3] 1960 [1220, 4090]
Median [min, max] 1960 [450, 7870]
active_sample
Mean (SD) 2540 (2080)
Median [Q1, Q3] 1770 [1060, 3650]
Median [min, max] 1770 [339, 7810]
n_event
Mean (SD) 164 (170)
Median [Q1, Q3] 91.0 [52.0, 223]
Median [min, max] 91.0 [10.0, 764]
FI_final
Mean (SD) 16.6 (23.8)
Median [Q1, Q3] 9.00 [4.00, 19.0]
Median [min, max] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00815 (0.0106)
Median [Q1, Q3] 0.00505 [0.00230, 0.00955]
Median [min, max] 0.00505 [0.000151, 0.0966]
as.factor(missing_fi)
0 10 (6.9%)
1 86 (59.3%)
Missing 49 (33.8%)
as.factor(fi4)
FI <= 4 47 (32.4%)
FI > 4 98 (67.6%)

Characteristics by studies

fi_sig_st = subset(fi_sig, study >= 1)

table1(~ as.factor(interv_code2) + as.factor(journal_code1) + as.factor(placebo) + sex + no_rand, data = fi_sig_st, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
Overall
(N=28)
as.factor(interv_code2)
Bisphosphonates 12 (42.9%)
PTH analog 5 (17.9%)
Romosozumab 2 (7.1%)
Denosumab 2 (7.1%)
Strontium_ranelate 2 (7.1%)
Calcium_VitD 5 (17.9%)
as.factor(journal_code1)
NEJM 12 (42.9%)
Lancet 2 (7.1%)
BMJ 1 (3.6%)
JAMA 3 (10.7%)
Ann Intern Med 1 (3.6%)
JBMR 1 (3.6%)
JCEM 2 (7.1%)
OI 5 (17.9%)
Other 1 (3.6%)
as.factor(placebo)
Active 3 (10.7%)
Placebo 25 (89.3%)
Sex
Both 6 (21.4%)
Men 2 (7.1%)
Women 20 (71.4%)
no_rand
Mean (SD) 2520 (2130)
Median [Q1, Q3] 1780 [1170, 2830]
Median [min, max] 1780 [450, 7870]
table1(~ as.factor(interv_code2) + as.factor(journal_code1) + as.factor(placebo) + sex + no_rand, data = fi_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
Overall
(N=145)
as.factor(interv_code2)
Bisphosphonates 48 (33.1%)
PTH analog 30 (20.7%)
Romosozumab 28 (19.3%)
Denosumab 9 (6.2%)
Strontium_ranelate 15 (10.3%)
Calcium_VitD 15 (10.3%)
as.factor(journal_code1)
NEJM 79 (54.5%)
Lancet 9 (6.2%)
BMJ 5 (3.4%)
JAMA 10 (6.9%)
Ann Intern Med 1 (0.7%)
JBMR 6 (4.1%)
JCEM 12 (8.3%)
OI 19 (13.1%)
Other 4 (2.8%)
as.factor(placebo)
Active 29 (20.0%)
Placebo 116 (80.0%)
Sex
Both 16 (11.0%)
Men 10 (6.9%)
Women 119 (82.1%)
no_rand
Mean (SD) 2900 (2300)
Median [Q1, Q3] 1960 [1220, 4090]
Median [min, max] 1960 [450, 7870]

Distribution of effect sizes (HR/RR and logHR)

p = ggplot(data = fi_sig, aes(x = HR))
p1 = p + geom_histogram(color = "white", fill = "blue") + labs(x = "Effect sizes of the intervention benefit", y = "Number") + theme_bw()

p = ggplot(data = fi_sig, aes(x = loghr))
p2 = p + geom_histogram(color = "white", fill = "blue") + labs(x = "Log(Effect sizes)", y = "Number") + theme_bw()

grid.arrange(p1, p2, nrow = 1, top = textGrob("Distribution of effect sizes", gp = gpar(fontsize = 20, font = 1)))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Relationship between sample size and effect sizes

p = ggplot(data = fi_sig, aes(x = no_rand, y = HR))
p.1 = p + geom_point() + geom_smooth(method = "lm", formula = y ~ x + I(x^2)) + labs(title = "A. Effect size of the intervention benefit", x = "Number of participants at randomisation", y = "Effect sizes of the intervention benefit") + theme_bw()

p = ggplot(data = fi_sig, aes(x = no_rand, y = loghr))
p.2 = p + geom_point() + geom_smooth(method = "lm", formula = y ~ x + I(x^2)) + labs(title = "B. Logarithm of effect size", x = "Number of participants at randomisation", y = "Log(Effect sizes)") + theme_bw()

grid.arrange(p.1, p.2, nrow = 1, top = textGrob("Correlation between effect size and sample size", gp = gpar(fontsize = 20, font = 1)))

Relationship between sample size/active sample/no. events and FI

p = ggplot(data = fi_sig, aes(x = no_rand, y = FI_final))
p1 = p + geom_point() + geom_smooth() + labs(title = "A. Number of participants at randomisation", x = "Number of participants at randomisation", y = "Fragility index") + theme_bw()

p0 = ggplot(data = fi_sig, aes(x = active_sample, y = FI_final))
p2 = p0 + geom_point() + geom_smooth() + labs(x = "Number of participants included in the analyses", y = "Fragility index") + theme_bw()

p.0 = ggplot(data = fi_sig, aes(x = n_event, y = FI_final))
p3 = p.0 + geom_point() + geom_smooth() + labs(title = "B. Number of participants with fractures", x = "Number of participants with fractures", y = "Fragility index") + theme_bw()

#grid.arrange(p1, p2, p3, nrow = 1)
grid.arrange(p1, p3, nrow = 1, top = textGrob("Relationships between Fragility index and sample size", gp = gpar(fontsize = 20, font = 3)))
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

(1.1.2) By fracture sites
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(fx_code1), data = fi_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Any_fx
(N=3)
Clin_fx
(N=15)
OFx
(N=4)
MOF
(N=6)
Dif_comb
(N=1)
NonVert_fx
(N=21)
Vert_fx
(N=69)
ClinVert_fx
(N=14)
Hip
(N=9)
Forearm
(N=3)
Overall
(N=145)
no_rand
Mean (SD) 1850 (423) 3140 (2520) 2780 (1580) 3800 (2810) NA 3680 (2400) 2560 (2260) 2610 (2370) 3950 (2300) 1830 (314) 2900 (2300)
Median [Q1, Q3] 1770 [1620, 2030] 2030 [1370, 4260] 3050 [1730, 4090] 2870 [1430, 6410] 2690 [2690, 2690] 3270 [1630, 5090] 1630 [1140, 4090] 1960 [1650, 2100] 3270 [2300, 4090] 2000 [1740, 2010] 1960 [1220, 4090]
Median [min, max] 1770 [1470, 2300] 2030 [549, 7740] 3050 [930, 4090] 2870 [1360, 7180] 2690 [2690, 2690] 3270 [450, 7870] 1630 [549, 7870] 1960 [549, 7870] 3270 [1770, 7870] 2000 [1470, 2030] 1960 [450, 7870]
active_sample
Mean (SD) 1830 (439) 2750 (2330) 2670 (1490) 3330 (2410) NA 3240 (2190) 2250 (2050) 2220 (2240) 3260 (1920) 1450 (760) 2540 (2080)
Median [Q1, Q3] 1770 [1600, 2030] 2010 [881, 4070] 2890 [1690, 3870] 2450 [1360, 5460] 2690 [2690, 2690] 2790 [1630, 4940] 1350 [892, 3400] 1650 [783, 2010] 2380 [1980, 3320] 1740 [1160, 1880] 1770 [1060, 3650]
Median [min, max] 1770 [1430, 2300] 2010 [426, 6690] 2890 [930, 3980] 2450 [1270, 6380] 2690 [2690, 2690] 2790 [389, 6670] 1350 [426, 7390] 1650 [339, 7810] 2380 [1770, 6600] 1740 [590, 2030] 1770 [339, 7810]
n_event
Mean (SD) 354 (290) 234 (205) 334 (251) 128 (123) NA 272 (213) 122 (140) 80.9 (60.0) 158 (86.9) 94.7 (29.7) 164 (170)
Median [Q1, Q3] 475 [249, 519] 189 [76.0, 350] 318 [245, 407] 78.5 [47.0, 159] 147 [147, 147] 225 [85.0, 395] 72.0 [39.0, 128] 63.0 [51.0, 95.5] 140 [106, 190] 99.0 [81.0, 111] 91.0 [52.0, 223]
Median [min, max] 475 [23.0, 563] 189 [31.0, 764] 318 [44.0, 658] 78.5 [34.0, 355] 147 [147, 147] 225 [37.0, 680] 72.0 [10.0, 696] 63.0 [19.0, 207] 140 [58.0, 315] 99.0 [63.0, 122] 91.0 [10.0, 764]
FI_final
Mean (SD) 16.7 (11.9) 16.2 (22.1) 32.3 (26.2) 11.2 (8.35) NA 10.2 (11.2) 21.1 (30.1) 11.5 (13.2) 6.67 (5.34) 5.00 (3.61) 16.6 (23.8)
Median [Q1, Q3] 22.0 [12.5, 23.5] 8.00 [5.00, 14.5] 31.5 [22.8, 41.0] 9.00 [6.00, 13.5] 4.00 [4.00, 4.00] 5.00 [2.00, 17.0] 11.0 [4.00, 23.0] 6.50 [3.25, 11.8] 5.00 [2.00, 11.0] 4.00 [3.00, 6.50] 9.00 [4.00, 19.0]
Median [min, max] 22.0 [3.00, 25.0] 8.00 [2.00, 89.0] 31.5 [1.00, 65.0] 9.00 [3.00, 26.0] 4.00 [4.00, 4.00] 5.00 [1.00, 43.0] 11.0 [1.00, 171] 6.50 [1.00, 42.0] 5.00 [1.00, 16.0] 4.00 [2.00, 9.00] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00847 (0.00558) 0.00735 (0.00511) 0.0106 (0.00776) 0.00442 (0.00292) NA 0.00337 (0.00288) 0.0116 (0.0140) 0.00514 (0.00300) 0.00254 (0.00247) 0.00352 (0.00161) 0.00815 (0.0106)
Median [Q1, Q3] 0.0109 [0.00647, 0.0117] 0.00714 [0.00236, 0.0104] 0.0122 [0.00592, 0.0169] 0.00454 [0.00227, 0.00699] 0.00149 [0.00149, 0.00149] 0.00255 [0.00114, 0.00454] 0.00673 [0.00314, 0.0162] 0.00462 [0.00312, 0.00533] 0.00150 [0.00101, 0.00337] 0.00339 [0.00268, 0.00429] 0.00505 [0.00230, 0.00955]
Median [min, max] 0.0109 [0.00209, 0.0125] 0.00714 [0.00124, 0.0166] 0.0122 [0.00108, 0.0169] 0.00454 [0.000783, 0.00736] 0.00149 [0.00149, 0.00149] 0.00255 [0.000203, 0.0105] 0.00673 [0.000151, 0.0966] 0.00462 [0.00205, 0.0125] 0.00150 [0.000303, 0.00695] 0.00339 [0.00197, 0.00519] 0.00505 [0.000151, 0.0966]
as.factor(missing_fi)
0 0 (0%) 1 (6.7%) 2 (50.0%) 0 (0%) 0 (0%) 1 (4.8%) 5 (7.2%) 0 (0%) 0 (0%) 1 (33.3%) 10 (6.9%)
1 1 (33.3%) 10 (66.7%) 2 (50.0%) 4 (66.7%) 1 (100%) 13 (61.9%) 41 (59.4%) 6 (42.9%) 6 (66.7%) 2 (66.7%) 86 (59.3%)
Missing 2 (66.7%) 4 (26.7%) 0 (0%) 2 (33.3%) 0 (0%) 7 (33.3%) 23 (33.3%) 8 (57.1%) 3 (33.3%) 0 (0%) 49 (33.8%)
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(fx_code2), data = fi_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Any
(N=18)
Osteoporotic
(N=11)
Non-Vertebrae
(N=21)
Vertebrae
(N=69)
Clinical Vertebrae
(N=14)
Hip
(N=9)
Forearm
(N=3)
Overall
(N=145)
no_rand
Mean (SD) 2920 (2340) 3330 (2230) 3680 (2400) 2560 (2260) 2610 (2370) 3950 (2300) 1830 (314) 2900 (2300)
Median [Q1, Q3] 2010 [1390, 4090] 2690 [1500, 4090] 3270 [1630, 5090] 1630 [1140, 4090] 1960 [1650, 2100] 3270 [2300, 4090] 2000 [1740, 2010] 1960 [1220, 4090]
Median [min, max] 2010 [549, 7740] 2690 [930, 7180] 3270 [450, 7870] 1630 [549, 7870] 1960 [549, 7870] 3270 [1770, 7870] 2000 [1470, 2030] 1960 [450, 7870]
active_sample
Mean (SD) 2600 (2150) 3030 (1920) 3240 (2190) 2250 (2050) 2220 (2240) 3260 (1920) 1450 (760) 2540 (2080)
Median [Q1, Q3] 1890 [1140, 3690] 2690 [1360, 3910] 2790 [1630, 4940] 1350 [892, 3400] 1650 [783, 2010] 2380 [1980, 3320] 1740 [1160, 1880] 1770 [1060, 3650]
Median [min, max] 1890 [426, 6690] 2690 [930, 6380] 2790 [389, 6670] 1350 [426, 7390] 1650 [339, 7810] 2380 [1770, 6600] 1740 [590, 2030] 1770 [339, 7810]
n_event
Mean (SD) 254 (216) 205 (193) 272 (213) 122 (140) 80.9 (60.0) 158 (86.9) 94.7 (29.7) 164 (170)
Median [Q1, Q3] 210 [76.0, 401] 147 [50.0, 318] 225 [85.0, 395] 72.0 [39.0, 128] 63.0 [51.0, 95.5] 140 [106, 190] 99.0 [81.0, 111] 91.0 [52.0, 223]
Median [min, max] 210 [23.0, 764] 147 [34.0, 658] 225 [37.0, 680] 72.0 [10.0, 696] 63.0 [19.0, 207] 140 [58.0, 315] 99.0 [63.0, 122] 91.0 [10.0, 764]
FI_final
Mean (SD) 16.3 (20.5) 18.2 (19.2) 10.2 (11.2) 21.1 (30.1) 11.5 (13.2) 6.67 (5.34) 5.00 (3.61) 16.6 (23.8)
Median [Q1, Q3] 9.00 [5.00, 20.3] 9.00 [4.50, 28.0] 5.00 [2.00, 17.0] 11.0 [4.00, 23.0] 6.50 [3.25, 11.8] 5.00 [2.00, 11.0] 4.00 [3.00, 6.50] 9.00 [4.00, 19.0]
Median [min, max] 9.00 [2.00, 89.0] 9.00 [1.00, 65.0] 5.00 [1.00, 43.0] 11.0 [1.00, 171] 6.50 [1.00, 42.0] 5.00 [1.00, 16.0] 4.00 [2.00, 9.00] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00753 (0.00504) 0.00641 (0.00585) 0.00337 (0.00288) 0.0116 (0.0140) 0.00514 (0.00300) 0.00254 (0.00247) 0.00352 (0.00161) 0.00815 (0.0106)
Median [Q1, Q3] 0.00731 [0.00235, 0.0115] 0.00662 [0.00185, 0.00745] 0.00255 [0.00114, 0.00454] 0.00673 [0.00314, 0.0162] 0.00462 [0.00312, 0.00533] 0.00150 [0.00101, 0.00337] 0.00339 [0.00268, 0.00429] 0.00505 [0.00230, 0.00955]
Median [min, max] 0.00731 [0.00124, 0.0166] 0.00662 [0.000783, 0.0169] 0.00255 [0.000203, 0.0105] 0.00673 [0.000151, 0.0966] 0.00462 [0.00205, 0.0125] 0.00150 [0.000303, 0.00695] 0.00339 [0.00197, 0.00519] 0.00505 [0.000151, 0.0966]
as.factor(missing_fi)
0 1 (5.6%) 2 (18.2%) 1 (4.8%) 5 (7.2%) 0 (0%) 0 (0%) 1 (33.3%) 10 (6.9%)
1 11 (61.1%) 7 (63.6%) 13 (61.9%) 41 (59.4%) 6 (42.9%) 6 (66.7%) 2 (66.7%) 86 (59.3%)
Missing 6 (33.3%) 2 (18.2%) 7 (33.3%) 23 (33.3%) 8 (57.1%) 3 (33.3%) 0 (0%) 49 (33.8%)
kruskal.test(FI_final ~ fx_code2, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by fx_code2
## Kruskal-Wallis chi-squared = 10.221, df = 6, p-value = 0.1156
kruskal.test(FQ_final ~ fx_code2, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by fx_code2
## Kruskal-Wallis chi-squared = 24.542, df = 6, p-value = 0.0004149

Box plots

p1 = ggplot(data = fi_sig, aes(y = FI_final, x = as.factor(fx_code2), fill = as.factor(fx_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index", x = "Fracture sites", y = "Fragility index") + theme(axis.text.x = element_text(angle = 45, hjust = 1))
p2 = ggplot(data = fi_sig, aes(y = FQ_final, x = as.factor(fx_code2), fill = as.factor(fx_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility quotient", x = "Fracture sites", y = "Fragility quotient") + theme(axis.text.x = element_text(angle = 45, hjust = 1))

grid.arrange(p1, p2, nrow = 1, top = textGrob("Fragility of evidence for anti-fracture efficacy by fracture sites", gp = gpar(fontsize = 20, font = 1)))

(1.1.3) By pharmacological interventions

table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(interv_code1), data = fi_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Alendronate
(N=7)
Ibandronate
(N=6)
Risedronate
(N=8)
Minodronate
(N=3)
Zoledronate
(N=24)
Teriparatide
(N=26)
Abaloparatide
(N=4)
Romosozumab
(N=28)
Denosumab
(N=9)
Strontium_ranelate
(N=15)
Calcium_VitD
(N=15)
Overall
(N=145)
no_rand
Mean (SD) 2700 (1190) 1960 (0) 1240 (420) 704 (0) 3020 (2820) 1110 (442) 1520 (253) 5420 (1560) 5020 (3370) 2610 (1570) 2320 (965) 2900 (2300)
Median [Q1, Q3] 2030 [2030, 3230] 1960 [1960, 1960] 1280 [815, 1630] 704 [704, 704] 2000 [1200, 3530] 1100 [705, 1360] 1650 [1520, 1650] 4090 [4090, 7180] 7870 [1470, 7870] 1650 [1650, 3750] 2300 [1620, 3270] 1960 [1220, 4090]
Median [min, max] 2030 [1910, 4430] 1960 [1960, 1960] 1280 [814, 1630] 704 [704, 704] 2000 [665, 7740] 1100 [549, 2530] 1650 [1140, 1650] 4090 [4090, 7180] 7870 [1470, 7870] 1650 [1220, 5090] 2300 [450, 3270] 1960 [450, 7870]
active_sample
Mean (SD) 2640 (1120) 1950 (0) 1050 (393) 575 (27.7) 2450 (2280) 908 (357) 1260 (118) 4910 (1500) 4600 (3080) 2330 (1490) 1810 (830) 2540 (2080)
Median [Q1, Q3] 2030 [1990, 3080] 1950 [1950, 1950] 1020 [684, 1340] 582 [563, 590] 1430 [958, 2920] 887 [567, 1090] 1270 [1230, 1310] 4040 [3640, 6640] 6600 [1350, 7390] 1440 [1390, 3030] 1770 [1350, 2380] 1770 [1060, 3650]
Median [min, max] 2030 [1910, 4430] 1950 [1950, 1950] 1020 [663, 1630] 582 [544, 598] 1430 [339, 6550] 887 [426, 1700] 1270 [1110, 1400] 4040 [3240, 6910] 6600 [1350, 7810] 1440 [1150, 4940] 1770 [389, 2790] 1770 [339, 7810]
n_event
Mean (SD) 181 (141) 81.5 (23.1) 88.1 (37.9) 79.3 (20.5) 165 (206) 50.3 (24.8) 43.3 (24.1) 209 (146) 140 (180) 347 (221) 223 (163) 164 (170)
Median [Q1, Q3] 121 [68.0, 273] 70.5 [64.5, 101] 68.5 [64.8, 99.3] 79.0 [69.0, 89.5] 72.5 [38.5, 236] 45.0 [34.0, 59.0] 39.0 [30.3, 52.0] 173 [106, 272] 69.0 [29.0, 121] 330 [166, 504] 176 [96.0, 335] 91.0 [52.0, 223]
Median [min, max] 121 [56.0, 409] 70.5 [63.0, 112] 68.5 [58.0, 154] 79.0 [59.0, 100] 72.5 [13.0, 764] 45.0 [14.0, 100] 39.0 [19.0, 76.0] 173 [10.0, 658] 69.0 [15.0, 531] 330 [66.0, 696] 176 [37.0, 563] 91.0 [10.0, 764]
FI_final
Mean (SD) 13.1 (12.6) 8.50 (4.68) 7.25 (4.83) 10.0 (9.17) 22.2 (37.7) 8.69 (7.26) 7.50 (4.36) 22.7 (19.2) 25.1 (43.7) 25.1 (29.2) 9.67 (9.01) 16.6 (23.8)
Median [Q1, Q3] 11.0 [5.50, 13.5] 7.50 [4.50, 12.0] 7.50 [3.50, 11.0] 8.00 [5.00, 14.0] 8.00 [3.00, 21.8] 6.50 [2.25, 12.5] 6.50 [4.00, 10.0] 19.5 [7.00, 31.5] 4.00 [3.00, 17.0] 18.0 [4.50, 37.0] 6.00 [2.00, 16.5] 9.00 [4.00, 19.0]
Median [min, max] 11.0 [3.00, 40.0] 7.50 [4.00, 15.0] 7.50 [1.00, 14.0] 8.00 [2.00, 20.0] 8.00 [1.00, 171] 6.50 [1.00, 25.0] 6.50 [4.00, 13.0] 19.5 [1.00, 77.0] 4.00 [2.00, 137] 18.0 [1.00, 111] 6.00 [1.00, 25.0] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00588 (0.00679) 0.00435 (0.00240) 0.00832 (0.00658) 0.0180 (0.0171) 0.00752 (0.00682) 0.0107 (0.00919) 0.00578 (0.00293) 0.00501 (0.00481) 0.00432 (0.00546) 0.0171 (0.0246) 0.00508 (0.00378) 0.00815 (0.0106)
Median [Q1, Q3] 0.00314 [0.00178, 0.00617] 0.00384 [0.00231, 0.00615] 0.00777 [0.00434, 0.00996] 0.0137 [0.00855, 0.0253] 0.00535 [0.00316, 0.00983] 0.00805 [0.00297, 0.0157] 0.00535 [0.00348, 0.00765] 0.00354 [0.00147, 0.00629] 0.00255 [0.00222, 0.00296] 0.0104 [0.00189, 0.0187] 0.00353 [0.00243, 0.00659] 0.00505 [0.00230, 0.00955]
Median [min, max] 0.00314 [0.00157, 0.0206] 0.00384 [0.00205, 0.00768] 0.00777 [0.000615, 0.0203] 0.0137 [0.00334, 0.0368] 0.00535 [0.000887, 0.0301] 0.00805 [0.00114, 0.0288] 0.00535 [0.00314, 0.00928] 0.00354 [0.000151, 0.0188] 0.00255 [0.000303, 0.0185] 0.0104 [0.000203, 0.0966] 0.00353 [0.000567, 0.0125] 0.00505 [0.000151, 0.0966]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 0 (0%) 0 (0%) 5 (20.8%) 2 (7.7%) 0 (0%) 2 (7.1%) 0 (0%) 1 (6.7%) 0 (0%) 10 (6.9%)
1 5 (71.4%) 0 (0%) 7 (87.5%) 3 (100%) 19 (79.2%) 5 (19.2%) 4 (100%) 26 (92.9%) 4 (44.4%) 3 (20.0%) 10 (66.7%) 86 (59.3%)
Missing 2 (28.6%) 6 (100%) 1 (12.5%) 0 (0%) 0 (0%) 19 (73.1%) 0 (0%) 0 (0%) 5 (55.6%) 11 (73.3%) 5 (33.3%) 49 (33.8%)
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(interv_code2), data = fi_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Bisphosphonates
(N=48)
PTH analog
(N=30)
Romosozumab
(N=28)
Denosumab
(N=9)
Strontium_ranelate
(N=15)
Calcium_VitD
(N=15)
Overall
(N=145)
no_rand
Mean (SD) 2400 (2180) 1160 (442) 5420 (1560) 5020 (3370) 2610 (1570) 2320 (965) 2900 (2300)
Median [Q1, Q3] 1960 [1200, 2030] 1100 [1090, 1360] 4090 [4090, 7180] 7870 [1470, 7870] 1650 [1650, 3750] 2300 [1620, 3270] 1960 [1220, 4090]
Median [min, max] 1960 [665, 7740] 1100 [549, 2530] 4090 [4090, 7180] 7870 [1470, 7870] 1650 [1220, 5090] 2300 [450, 3270] 1960 [450, 7870]
active_sample
Mean (SD) 2060 (1780) 955 (356) 4910 (1500) 4600 (3080) 2330 (1490) 1810 (830) 2540 (2080)
Median [Q1, Q3] 1800 [742, 1970] 892 [841, 1240] 4040 [3640, 6640] 6600 [1350, 7390] 1440 [1390, 3030] 1770 [1350, 2380] 1770 [1060, 3650]
Median [min, max] 1800 [339, 6550] 892 [426, 1700] 4040 [3240, 6910] 6600 [1350, 7810] 1440 [1150, 4940] 1770 [389, 2790] 1770 [339, 7810]
n_event
Mean (SD) 139 (159) 49.4 (24.5) 209 (146) 140 (180) 347 (221) 223 (163) 164 (170)
Median [Q1, Q3] 72.5 [58.8, 141] 44.0 [34.0, 59.0] 173 [106, 272] 69.0 [29.0, 121] 330 [166, 504] 176 [96.0, 335] 91.0 [52.0, 223]
Median [min, max] 72.5 [13.0, 764] 44.0 [14.0, 100] 173 [10.0, 658] 69.0 [15.0, 531] 330 [66.0, 696] 176 [37.0, 563] 91.0 [10.0, 764]
FI_final
Mean (SD) 15.9 (27.7) 8.53 (6.90) 22.7 (19.2) 25.1 (43.7) 25.1 (29.2) 9.67 (9.01) 16.6 (23.8)
Median [Q1, Q3] 8.50 [4.00, 14.0] 6.50 [3.00, 12.5] 19.5 [7.00, 31.5] 4.00 [3.00, 17.0] 18.0 [4.50, 37.0] 6.00 [2.00, 16.5] 9.00 [4.00, 19.0]
Median [min, max] 8.50 [1.00, 171] 6.50 [1.00, 25.0] 19.5 [1.00, 77.0] 4.00 [2.00, 137] 18.0 [1.00, 111] 6.00 [1.00, 25.0] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00767 (0.00754) 0.0101 (0.00876) 0.00501 (0.00481) 0.00432 (0.00546) 0.0171 (0.0246) 0.00508 (0.00378) 0.00815 (0.0106)
Median [Q1, Q3] 0.00535 [0.00272, 0.00859] 0.00741 [0.00325, 0.0137] 0.00354 [0.00147, 0.00629] 0.00255 [0.00222, 0.00296] 0.0104 [0.00189, 0.0187] 0.00353 [0.00243, 0.00659] 0.00505 [0.00230, 0.00955]
Median [min, max] 0.00535 [0.000615, 0.0368] 0.00741 [0.00114, 0.0288] 0.00354 [0.000151, 0.0188] 0.00255 [0.000303, 0.0185] 0.0104 [0.000203, 0.0966] 0.00353 [0.000567, 0.0125] 0.00505 [0.000151, 0.0966]
as.factor(missing_fi)
0 5 (10.4%) 2 (6.7%) 2 (7.1%) 0 (0%) 1 (6.7%) 0 (0%) 10 (6.9%)
1 34 (70.8%) 9 (30.0%) 26 (92.9%) 4 (44.4%) 3 (20.0%) 10 (66.7%) 86 (59.3%)
Missing 9 (18.8%) 19 (63.3%) 0 (0%) 5 (55.6%) 11 (73.3%) 5 (33.3%) 49 (33.8%)
kruskal.test(FI_final ~ interv_code2, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by interv_code2
## Kruskal-Wallis chi-squared = 13.943, df = 5, p-value = 0.01597
kruskal.test(FQ_final ~ interv_code2, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by interv_code2
## Kruskal-Wallis chi-squared = 11.645, df = 5, p-value = 0.03999

Box plots

p1 = ggplot(data = fi_sig, aes(y = FI_final, x = as.factor(interv_code2), fill = as.factor(interv_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index", x = "Pharmacological interventions", y = "Fragility index") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) 
p2 = ggplot(data = fi_sig, aes(y = FQ_final, x = as.factor(interv_code2), fill = as.factor(interv_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility quotient", x = "Pharmacological interventions", y = "Fragility quotine") + theme(axis.text.x = element_text(angle = 45, hjust = 1))

grid.arrange(p1, p2, nrow = 1, top = textGrob("Fragility of evidence for anti-fracture efficacy by interventions", gp = gpar(fontsize = 20, font = 1)))

(1.1.4) Timing of fracture assessment

table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(timing), data = fi_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
2
(N=26)
3
(N=18)
4
(N=48)
5
(N=35)
6
(N=6)
7
(N=5)
8
(N=7)
Overall
(N=145)
no_rand
Mean (SD) 3070 (2370) 1820 (1190) 2720 (2210) 3740 (2870) 2340 (1650) 3640 (1980) 2100 (259) 2900 (2300)
Median [Q1, Q3] 1650 [1360, 4090] 1650 [578, 3270] 1410 [1100, 4090] 1980 [1650, 7740] 1650 [1120, 3740] 5090 [1470, 5090] 2000 [2000, 2000] 1960 [1220, 4090]
Median [min, max] 1650 [578, 7180] 1650 [549, 3270] 1410 [665, 7180] 1980 [450, 7870] 1650 [930, 4430] 5090 [1470, 5090] 2000 [2000, 2690] 1960 [450, 7870]
active_sample
Mean (SD) 2790 (2200) 1340 (851) 2450 (2030) 3230 (2490) 2090 (1710) 2930 (2210) 2000 (315) 2540 (2080)
Median [Q1, Q3] 1390 [1190, 3910] 1340 [451, 1770] 1360 [892, 3620] 1950 [1440, 6050] 1150 [985, 3390] 3650 [590, 4940] 1890 [1860, 1980] 1770 [1060, 3650]
Median [min, max] 1390 [476, 6910] 1340 [426, 2790] 1360 [544, 6690] 1950 [339, 7810] 1150 [759, 4430] 3650 [567, 4940] 1890 [1740, 2690] 1770 [339, 7810]
n_event
Mean (SD) 91.3 (72.9) 102 (109) 134 (139) 236 (196) 257 (252) 418 (301) 186 (127) 164 (170)
Median [Q1, Q3] 65.5 [52.3, 137] 53.0 [34.5, 142] 79.5 [42.8, 189] 142 [83.5, 341] 163 [81.3, 358] 537 [122, 671] 147 [85.5, 281] 91.0 [52.0, 223]
Median [min, max] 65.5 [10.0, 323] 53.0 [19.0, 375] 79.5 [14.0, 658] 142 [23.0, 764] 163 [44.0, 696] 537 [70.0, 691] 147 [48.0, 377] 91.0 [10.0, 764]
FI_final
Mean (SD) 8.31 (8.32) 8.28 (6.09) 16.7 (17.0) 27.1 (37.3) 24.7 (42.5) 8.20 (11.7) 13.6 (9.85) 16.6 (23.8)
Median [Q1, Q3] 5.00 [3.00, 9.75] 7.50 [4.00, 11.0] 10.5 [4.00, 23.0] 15.0 [4.00, 38.5] 9.50 [4.75, 12.8] 3.00 [2.00, 5.00] 10.0 [7.50, 16.5] 9.00 [4.00, 19.0]
Median [min, max] 5.00 [1.00, 30.0] 7.50 [1.00, 25.0] 10.5 [1.00, 77.0] 15.0 [1.00, 171] 9.50 [1.00, 111] 3.00 [2.00, 29.0] 10.0 [4.00, 33.0] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00403 (0.00387) 0.00858 (0.00772) 0.00859 (0.00830) 0.00934 (0.00924) 0.0197 (0.0378) 0.00330 (0.00292) 0.00703 (0.00510) 0.00815 (0.0106)
Median [Q1, Q3] 0.00240 [0.00149, 0.00489] 0.00660 [0.00358, 0.0102] 0.00540 [0.00304, 0.0119] 0.00659 [0.00242, 0.0130] 0.00421 [0.00197, 0.00915] 0.00339 [0.00101, 0.00353] 0.00537 [0.00421, 0.00851] 0.00505 [0.00230, 0.00955]
Median [min, max] 0.00240 [0.000151, 0.0150] 0.00660 [0.000567, 0.0288] 0.00540 [0.000554, 0.0368] 0.00659 [0.000203, 0.0361] 0.00421 [0.00108, 0.0966] 0.00339 [0.000608, 0.00795] 0.00537 [0.00149, 0.0169] 0.00505 [0.000151, 0.0966]
as.factor(missing_fi)
0 1 (3.8%) 0 (0%) 3 (6.3%) 1 (2.9%) 0 (0%) 0 (0%) 5 (71.4%) 10 (6.9%)
1 20 (76.9%) 12 (66.7%) 33 (68.8%) 16 (45.7%) 1 (16.7%) 2 (40.0%) 2 (28.6%) 86 (59.3%)
Missing 5 (19.2%) 6 (33.3%) 12 (25.0%) 18 (51.4%) 5 (83.3%) 3 (60.0%) 0 (0%) 49 (33.8%)
kruskal.test(FI_final ~ timing, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by timing
## Kruskal-Wallis chi-squared = 11.795, df = 6, p-value = 0.06671
kruskal.test(FQ_final ~ timing, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by timing
## Kruskal-Wallis chi-squared = 11.956, df = 6, p-value = 0.06296

Box plots

p1 = ggplot(data = fi_sig, aes(y = FI_final, x = as.factor(timing), fill = as.factor(timing))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by timing of fracture assessment", x = "Timing of fracture assessment", y = "Fragility index")
p1

(1.1.5) By journal
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(journal_code2), data = fi_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
NEJM
(N=79)
Lancet
(N=9)
BMJ
(N=5)
JAMA
(N=10)
Ann Intern Med
(N=1)
JBMR
(N=6)
JCEM
(N=12)
Other
(N=23)
Overall
(N=145)
no_rand
Mean (SD) 3880 (2550) 1660 (352) 2160 (397) 2190 (1180) NA 1960 (0) 1320 (1340) 1590 (1440) 2900 (2300)
Median [Q1, Q3] 3270 [1560, 7180] 1360 [1360, 2030] 2300 [1770, 2300] 1640 [1630, 1650] 2530 [2530, 2530] 1960 [1960, 1960] 578 [571, 1410] 939 [704, 1560] 1960 [1220, 4090]
Median [min, max] 3270 [450, 7870] 1360 [1360, 2030] 2300 [1770, 2690] 1640 [1630, 4430] 2530 [2530, 2530] 1960 [1960, 1960] 578 [549, 5090] 939 [665, 5090] 1960 [450, 7870]
active_sample
Mean (SD) 3360 (2330) 1490 (490) 2160 (397) 1950 (1230) NA 1950 (0) 1230 (1350) 1350 (1320) 2540 (2080)
Median [Q1, Q3] 2790 [1350, 6240] 1160 [1050, 2030] 2300 [1770, 2300] 1390 [1290, 1580] 1700 [1700, 1700] 1950 [1950, 1950] 464 [445, 1410] 690 [659, 1360] 1770 [1060, 3650]
Median [min, max] 2790 [339, 7810] 1160 [1050, 2030] 2300 [1770, 2690] 1390 [1270, 4430] 1700 [1700, 1700] 1950 [1950, 1950] 464 [426, 4930] 690 [544, 4940] 1770 [339, 7810]
n_event
Mean (SD) 177 (165) 115 (96.4) 352 (167) 108 (112) NA 81.5 (23.1) 118 (151) 174 (228) 164 (170)
Median [Q1, Q3] 117 [54.5, 248] 91.0 [63.0, 100] 315 [262, 475] 70.5 [47.5, 112] 60.0 [60.0, 60.0] 70.5 [64.5, 101] 38.0 [28.5, 145] 69.0 [56.0, 132] 91.0 [52.0, 223]
Median [min, max] 117 [10.0, 764] 91.0 [14.0, 322] 315 [147, 563] 70.5 [34.0, 409] 60.0 [60.0, 60.0] 70.5 [63.0, 112] 38.0 [19.0, 471] 69.0 [22.0, 696] 91.0 [10.0, 764]
FI_final
Mean (SD) 21.3 (28.3) 12.9 (11.5) 15.6 (8.44) 8.20 (4.47) NA 8.50 (4.68) 9.67 (12.8) 11.7 (22.7) 16.6 (23.8)
Median [Q1, Q3] 12.0 [4.50, 26.0] 11.0 [4.00, 15.0] 16.0 [11.0, 22.0] 10.0 [4.75, 11.0] 7.00 [7.00, 7.00] 7.50 [4.50, 12.0] 4.00 [2.00, 11.5] 5.00 [3.00, 10.5] 9.00 [4.00, 19.0]
Median [min, max] 12.0 [1.00, 171] 11.0 [2.00, 40.0] 16.0 [4.00, 25.0] 10.0 [1.00, 13.0] 7.00 [7.00, 7.00] 7.50 [4.00, 15.0] 4.00 [1.00, 45.0] 5.00 [1.00, 111] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00727 (0.00800) 0.00877 (0.00681) 0.00760 (0.00430) 0.00504 (0.00332) NA 0.00435 (0.00240) 0.0113 (0.00964) 0.0119 (0.0202) 0.00815 (0.0106)
Median [Q1, Q3] 0.00393 [0.00226, 0.00831] 0.00691 [0.00259, 0.0143] 0.00695 [0.00623, 0.0109] 0.00513 [0.00197, 0.00793] 0.00412 [0.00412, 0.00412] 0.00384 [0.00231, 0.00615] 0.00864 [0.00423, 0.0187] 0.00527 [0.00278, 0.0122] 0.00505 [0.00230, 0.00955]
Median [min, max] 0.00393 [0.000151, 0.0361] 0.00691 [0.00191, 0.0206] 0.00695 [0.00149, 0.0125] 0.00513 [0.000615, 0.00928] 0.00412 [0.00412, 0.00412] 0.00384 [0.00205, 0.00768] 0.00864 [0.000203, 0.0288] 0.00527 [0.000608, 0.0966] 0.00505 [0.000151, 0.0966]
as.factor(missing_fi)
0 7 (8.9%) 2 (22.2%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (8.3%) 0 (0%) 10 (6.9%)
1 51 (64.6%) 7 (77.8%) 1 (20.0%) 8 (80.0%) 1 (100%) 0 (0%) 4 (33.3%) 14 (60.9%) 86 (59.3%)
Missing 21 (26.6%) 0 (0%) 4 (80.0%) 2 (20.0%) 0 (0%) 6 (100%) 7 (58.3%) 9 (39.1%) 49 (33.8%)
kruskal.test(FI_final ~ journal_code2, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by journal_code2
## Kruskal-Wallis chi-squared = 10.571, df = 7, p-value = 0.1584
kruskal.test(FQ_final ~ journal_code2, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by journal_code2
## Kruskal-Wallis chi-squared = 4.9468, df = 7, p-value = 0.6665

Box plots

p1 = ggplot(data = fi_sig, aes(y = FI_final, x = as.factor(timing), fill = as.factor(timing))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by timing of fracture assessment", x = "Timing of fracture assessment", y = "Fragility index") 
p1

(1.1.6) By sex
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | sex, data = fi_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
Both
(N=16)
Men
(N=10)
Women
(N=119)
Overall
(N=145)
no_rand
Mean (SD) 934 (702) 1310 (139) 3300 (2340) 2900 (2300)
Median [Q1, Q3] 622 [571, 731] 1200 [1200, 1470] 2000 [1630, 4090] 1960 [1220, 4090]
Median [min, max] 622 [450, 2690] 1200 [1200, 1470] 2000 [704, 7870] 1960 [450, 7870]
active_sample
Mean (SD) 661 (561) 1220 (137) 2910 (2110) 2540 (2080)
Median [Q1, Q3] 464 [426, 661] 1130 [1130, 1350] 1950 [1300, 4040] 1770 [1060, 3650]
Median [min, max] 464 [339, 2690] 1130 [1060, 1430] 1950 [544, 7810] 1770 [339, 7810]
n_event
Mean (SD) 58.9 (55.1) 26.5 (9.06) 190 (176) 164 (170)
Median [Q1, Q3] 40.0 [33.3, 57.8] 26.0 [21.5, 34.3] 110 [67.0, 262] 91.0 [52.0, 223]
Median [min, max] 40.0 [19.0, 231] 26.0 [13.0, 39.0] 110 [10.0, 764] 91.0 [10.0, 764]
FI_final
Mean (SD) 5.00 (3.78) 2.90 (1.66) 19.3 (25.4) 16.6 (23.8)
Median [Q1, Q3] 4.00 [2.00, 7.00] 3.00 [1.25, 4.00] 11.0 [5.00, 23.0] 9.00 [4.00, 19.0]
Median [min, max] 4.00 [1.00, 13.0] 3.00 [1.00, 6.00] 11.0 [1.00, 171] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00965 (0.00824) 0.00236 (0.00140) 0.00844 (0.0112) 0.00815 (0.0106)
Median [Q1, Q3] 0.00677 [0.00451, 0.0125] 0.00216 [0.00115, 0.00296] 0.00537 [0.00237, 0.0100] 0.00505 [0.00230, 0.00955]
Median [min, max] 0.00677 [0.00108, 0.0288] 0.00216 [0.000887, 0.00532] 0.00537 [0.000151, 0.0966] 0.00505 [0.000151, 0.0966]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 10 (8.4%) 10 (6.9%)
1 8 (50.0%) 10 (100%) 68 (57.1%) 86 (59.3%)
Missing 8 (50.0%) 0 (0%) 41 (34.5%) 49 (33.8%)
kruskal.test(FI_final ~ sex, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by sex
## Kruskal-Wallis chi-squared = 24.445, df = 2, p-value = 4.919e-06
kruskal.test(FQ_final ~ sex, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by sex
## Kruskal-Wallis chi-squared = 9.8062, df = 2, p-value = 0.007423

Box plots

p1 = ggplot(data = fi_sig, aes(y = FI_final, x = as.factor(sex), fill = as.factor(sex))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by sex", x = "Sex", y = "Fragility index") 
p1

(1.1.7) By placebo
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | placebo, data = fi_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Active
(N=29)
Placebo
(N=116)
Overall
(N=145)
no_rand
Mean (SD) 2900 (1350) 2900 (2480) 2900 (2300)
Median [Q1, Q3] 4090 [1360, 4090] 1960 [1170, 3560] 1960 [1220, 4090]
Median [min, max] 4090 [1140, 4090] 1960 [450, 7870] 1960 [450, 7870]
active_sample
Mean (SD) 2560 (1240) 2540 (2240) 2540 (2080)
Median [Q1, Q3] 3320 [1280, 3660] 1750 [890, 3000] 1770 [1060, 3650]
Median [min, max] 3320 [1050, 4090] 1750 [339, 7810] 1770 [339, 7810]
n_event
Mean (SD) 176 (160) 161 (172) 164 (170)
Median [Q1, Q3] 107 [53.0, 255] 84.0 [50.3, 211] 91.0 [52.0, 223]
Median [min, max] 107 [14.0, 658] 84.0 [10.0, 764] 91.0 [10.0, 764]
FI_final
Mean (SD) 16.9 (19.0) 16.5 (24.9) 16.6 (23.8)
Median [Q1, Q3] 10.0 [5.00, 18.0] 8.00 [3.75, 19.3] 9.00 [4.00, 19.0]
Median [min, max] 10.0 [2.00, 77.0] 8.00 [1.00, 171] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00650 (0.00525) 0.00856 (0.0116) 0.00815 (0.0106)
Median [Q1, Q3] 0.00440 [0.00221, 0.00908] 0.00510 [0.00234, 0.0105] 0.00505 [0.00230, 0.00955]
Median [min, max] 0.00440 [0.000554, 0.0188] 0.00510 [0.000151, 0.0966] 0.00505 [0.000151, 0.0966]
as.factor(missing_fi)
0 4 (13.8%) 6 (5.2%) 10 (6.9%)
1 22 (75.9%) 64 (55.2%) 86 (59.3%)
Missing 3 (10.3%) 46 (39.7%) 49 (33.8%)
kruskal.test(FI_final ~ placebo, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by placebo
## Kruskal-Wallis chi-squared = 0.66311, df = 1, p-value = 0.4155
kruskal.test(FQ_final ~ placebo, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by placebo
## Kruskal-Wallis chi-squared = 0.036216, df = 1, p-value = 0.8491

Box plots

p1 = ggplot(data = fi_sig, aes(y = FI_final, x = as.factor(control), fill = as.factor(control))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by types of control", x = "Types of control", y = "Fragility index") 
p1

(1.2) Fracture as the predefined primary endpoint

(1.2.1) Overall
fx_prim = subset(fi_sig, pri_endpoint == 1)
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi), data = fx_prim, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
Overall
(N=34)
no_rand
Mean (SD) 2920 (2280)
Median [Q1, Q3] 1980 [1240, 4090]
Median [min, max] 1980 [549, 7870]
active_sample
Mean (SD) 2500 (2060)
Median [Q1, Q3] 1730 [1050, 3660]
Median [min, max] 1730 [426, 7390]
n_event
Mean (SD) 177 (152)
Median [Q1, Q3] 117 [63.8, 229]
Median [min, max] 117 [29.0, 671]
FI_final
Mean (SD) 27.6 (36.4)
Median [Q1, Q3] 13.5 [8.75, 31.3]
Median [min, max] 13.5 [1.00, 171]
FQ_final
Mean (SD) 0.0137 (0.0111)
Median [Q1, Q3] 0.00997 [0.00442, 0.0205]
Median [min, max] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 3 (8.8%)
1 20 (58.8%)
Missing 11 (32.4%)
# By fracture as the predefined primary endpoint
fi_sig$fx_primary[fi_sig$pri_endpoint == 1] = "Primary endpoint"
fi_sig$fx_primary[fi_sig$pri_endpoint == 0] = "Secondary endpoint"

table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | fx_primary , data = fi_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
Primary endpoint
(N=34)
Secondary endpoint
(N=111)
Overall
(N=145)
no_rand
Mean (SD) 2920 (2280) 2900 (2310) 2900 (2300)
Median [Q1, Q3] 1980 [1240, 4090] 1960 [1290, 4090] 1960 [1220, 4090]
Median [min, max] 1980 [549, 7870] 1960 [450, 7870] 1960 [450, 7870]
active_sample
Mean (SD) 2500 (2060) 2550 (2090) 2540 (2080)
Median [Q1, Q3] 1730 [1050, 3660] 1770 [1110, 3630] 1770 [1060, 3650]
Median [min, max] 1730 [426, 7390] 1770 [339, 7810] 1770 [339, 7810]
n_event
Mean (SD) 177 (152) 160 (175) 164 (170)
Median [Q1, Q3] 117 [63.8, 229] 76.0 [49.5, 209] 91.0 [52.0, 223]
Median [min, max] 117 [29.0, 671] 76.0 [10.0, 764] 91.0 [10.0, 764]
FI_final
Mean (SD) 27.6 (36.4) 13.2 (17.1) 16.6 (23.8)
Median [Q1, Q3] 13.5 [8.75, 31.3] 7.00 [3.00, 17.0] 9.00 [4.00, 19.0]
Median [min, max] 13.5 [1.00, 171] 7.00 [1.00, 111] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.0137 (0.0111) 0.00645 (0.00993) 0.00815 (0.0106)
Median [Q1, Q3] 0.00997 [0.00442, 0.0205] 0.00393 [0.00208, 0.00751] 0.00505 [0.00230, 0.00955]
Median [min, max] 0.00997 [0.000567, 0.0368] 0.00393 [0.000151, 0.0966] 0.00505 [0.000151, 0.0966]
as.factor(missing_fi)
0 3 (8.8%) 7 (6.3%) 10 (6.9%)
1 20 (58.8%) 66 (59.5%) 86 (59.3%)
Missing 11 (32.4%) 38 (34.2%) 49 (33.8%)
fi_sig$missing_fi = factor(fi_sig$missing_fi)
createTable(compareGroups(fx_primary ~ no_rand + active_sample + n_event + FI_final + FQ_final + missing_fi, data = fi_sig, method = c(no_rand = 2, active_sample = 2, n_event = 2, FI_final = 2, FQ_final = 2)))
## Warning in chisq.test(xx, correct = FALSE): Chi-squared approximation may be
## incorrect
## 
## --------Summary descriptives table by 'fx_primary'---------
## 
## ___________________________________________________________ 
##               Primary endpoint Secondary endpoint p.overall 
##                     N=34             N=111                  
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
## no_rand       1982 [1239;4093]  1964 [1292;4093]    0.828   
## active_sample 1733 [1051;3655]  1765 [1106;3629]    0.953   
## n_event        116 [63.8;229]   76.0 [49.5;208]     0.149   
## FI_final      13.5 [8.75;31.2]  7.00 [3.00;17.0]    0.001   
## FQ_final      0.01 [0.00;0.02]  0.00 [0.00;0.01]   <0.001   
## missing_fi:                                         0.699   
##     0            3 (13.0%)         7 (9.59%)                
##     1            20 (87.0%)        66 (90.4%)               
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Relationship between sample size/active sample/no. events and FI

p = ggplot(data = fx_prim, aes(x = no_rand, y = FI_final))
p1 = p + geom_point() + geom_smooth() + labs(x = "Number of participants at randomisation", y = "Fragility index") + theme_bw()

p0 = ggplot(data = fx_prim, aes(x = active_sample, y = FI_final))
p2 = p0 + geom_point() + geom_smooth() + labs(x = "Number of participants included in the analyses", y = "Fragility index") + theme_bw()

p.0 = ggplot(data =  fx_prim, aes(x = n_event, y = FI_final))
p3 = p.0 + geom_point() + geom_smooth() + labs(x = "Number of participants with fracture events", y = "Fragility index") + theme_bw()

#grid.arrange(p1, p2, p3, nrow = 1)
grid.arrange(p1, p3, nrow = 1, top = textGrob("Relationship between Number of participants and Fragility index", gp = gpar(fontsize = 20, font = 3)))
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

(1.2.2) By fracture sites
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(fx_code1), data =  fx_prim, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Clin_fx
(N=2)
OFx
(N=1)
NonVert_fx
(N=1)
Vert_fx
(N=26)
Hip
(N=4)
Overall
(N=34)
no_rand
Mean (SD) 3110 (1390) NA NA 2640 (2350) 4390 (2230) 2920 (2280)
Median [Q1, Q3] 3110 [2620, 3600] 2000 [2000, 2000] 5090 [5090, 5090] 1650 [1120, 3700] 3270 [3270, 4390] 1980 [1240, 4090]
Median [min, max] 3110 [2130, 4090] 2000 [2000, 2000] 5090 [5090, 5090] 1650 [549, 7870] 3270 [3270, 7740] 1980 [549, 7870]
active_sample
Mean (SD) 2060 (2240) NA NA 2330 (2120) 3340 (2110) 2500 (2060)
Median [Q1, Q3] 2060 [1270, 2850] 1950 [1950, 1950] 4940 [4940, 4940] 1440 [931, 3230] 2580 [2220, 3700] 1730 [1050, 3660]
Median [min, max] 2060 [479, 3640] 1950 [1950, 1950] 4940 [4940, 4940] 1440 [426, 7390] 2580 [1770, 6450] 1730 [426, 7390]
n_event
Mean (SD) 348 (165) NA NA 146 (122) 141 (59.2) 177 (152)
Median [Q1, Q3] 348 [289, 406] 312 [312, 312] 671 [671, 671] 103 [51.0, 204] 158 [120, 180] 117 [63.8, 229]
Median [min, max] 348 [231, 464] 312 [312, 312] 671 [671, 671] 103 [29.0, 402] 158 [58.0, 190] 117 [29.0, 671]
FI_final
Mean (SD) 16.5 (13.4) NA NA 32.5 (40.0) 6.00 (4.97) 27.6 (36.4)
Median [Q1, Q3] 16.5 [11.8, 21.3] 33.0 [33.0, 33.0] 3.00 [3.00, 3.00] 15.0 [11.5, 40.0] 5.50 [2.50, 9.00] 13.5 [8.75, 31.3]
Median [min, max] 16.5 [7.00, 26.0] 33.0 [33.0, 33.0] 3.00 [3.00, 3.00] 15.0 [1.00, 171] 5.50 [1.00, 12.0] 13.5 [1.00, 171]
FQ_final
Mean (SD) 0.0109 (0.00529) NA NA 0.0162 (0.0112) 0.00172 (0.00122) 0.0137 (0.0111)
Median [Q1, Q3] 0.0109 [0.00901, 0.0127] 0.0169 [0.0169, 0.0169] 0.000608 [0.000608, 0.000608] 0.0129 [0.00692, 0.0258] 0.00147 [0.000948, 0.00224] 0.00997 [0.00442, 0.0205]
Median [min, max] 0.0109 [0.00714, 0.0146] 0.0169 [0.0169, 0.0169] 0.000608 [0.000608, 0.000608] 0.0129 [0.000946, 0.0368] 0.00147 [0.000567, 0.00337] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 1 (100%) 0 (0%) 2 (7.7%) 0 (0%) 3 (8.8%)
1 2 (100%) 0 (0%) 0 (0%) 14 (53.8%) 4 (100%) 20 (58.8%)
Missing 0 (0%) 0 (0%) 1 (100%) 10 (38.5%) 0 (0%) 11 (32.4%)
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(fx_code2), data =  fx_prim, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Any
(N=2)
Osteoporotic
(N=1)
Non-Vertebrae
(N=1)
Vertebrae
(N=26)
Hip
(N=4)
Overall
(N=34)
no_rand
Mean (SD) 3110 (1390) NA NA 2640 (2350) 4390 (2230) 2920 (2280)
Median [Q1, Q3] 3110 [2620, 3600] 2000 [2000, 2000] 5090 [5090, 5090] 1650 [1120, 3700] 3270 [3270, 4390] 1980 [1240, 4090]
Median [min, max] 3110 [2130, 4090] 2000 [2000, 2000] 5090 [5090, 5090] 1650 [549, 7870] 3270 [3270, 7740] 1980 [549, 7870]
active_sample
Mean (SD) 2060 (2240) NA NA 2330 (2120) 3340 (2110) 2500 (2060)
Median [Q1, Q3] 2060 [1270, 2850] 1950 [1950, 1950] 4940 [4940, 4940] 1440 [931, 3230] 2580 [2220, 3700] 1730 [1050, 3660]
Median [min, max] 2060 [479, 3640] 1950 [1950, 1950] 4940 [4940, 4940] 1440 [426, 7390] 2580 [1770, 6450] 1730 [426, 7390]
n_event
Mean (SD) 348 (165) NA NA 146 (122) 141 (59.2) 177 (152)
Median [Q1, Q3] 348 [289, 406] 312 [312, 312] 671 [671, 671] 103 [51.0, 204] 158 [120, 180] 117 [63.8, 229]
Median [min, max] 348 [231, 464] 312 [312, 312] 671 [671, 671] 103 [29.0, 402] 158 [58.0, 190] 117 [29.0, 671]
FI_final
Mean (SD) 16.5 (13.4) NA NA 32.5 (40.0) 6.00 (4.97) 27.6 (36.4)
Median [Q1, Q3] 16.5 [11.8, 21.3] 33.0 [33.0, 33.0] 3.00 [3.00, 3.00] 15.0 [11.5, 40.0] 5.50 [2.50, 9.00] 13.5 [8.75, 31.3]
Median [min, max] 16.5 [7.00, 26.0] 33.0 [33.0, 33.0] 3.00 [3.00, 3.00] 15.0 [1.00, 171] 5.50 [1.00, 12.0] 13.5 [1.00, 171]
FQ_final
Mean (SD) 0.0109 (0.00529) NA NA 0.0162 (0.0112) 0.00172 (0.00122) 0.0137 (0.0111)
Median [Q1, Q3] 0.0109 [0.00901, 0.0127] 0.0169 [0.0169, 0.0169] 0.000608 [0.000608, 0.000608] 0.0129 [0.00692, 0.0258] 0.00147 [0.000948, 0.00224] 0.00997 [0.00442, 0.0205]
Median [min, max] 0.0109 [0.00714, 0.0146] 0.0169 [0.0169, 0.0169] 0.000608 [0.000608, 0.000608] 0.0129 [0.000946, 0.0368] 0.00147 [0.000567, 0.00337] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 1 (100%) 0 (0%) 2 (7.7%) 0 (0%) 3 (8.8%)
1 2 (100%) 0 (0%) 0 (0%) 14 (53.8%) 4 (100%) 20 (58.8%)
Missing 0 (0%) 0 (0%) 1 (100%) 10 (38.5%) 0 (0%) 11 (32.4%)
kruskal.test(FI_final ~ fx_code2, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by fx_code2
## Kruskal-Wallis chi-squared = 8.4689, df = 4, p-value = 0.07584
kruskal.test(FQ_final ~ fx_code2, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by fx_code2
## Kruskal-Wallis chi-squared = 11.352, df = 4, p-value = 0.02288

Box plots

p1 = ggplot(data = fx_prim, aes(y = FI_final, x = as.factor(fx_code2), fill = as.factor(fx_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index", x = "Fracture sites", y = "Fragility index") + theme(axis.text.x = element_text(angle = 45, hjust = 1))
p2 = ggplot(data =  fx_prim, aes(y = FQ_final, x = as.factor(fx_code2), fill = as.factor(fx_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility quotient", x = "Fracture sites", y = "Fragility quotient") + theme(axis.text.x = element_text(angle = 45, hjust = 1))

grid.arrange(p1, p2, nrow = 1, top = textGrob("Fragility of evidence for anti-fracture efficacy by fracture sites", gp = gpar(fontsize = 20, font = 1)))

(1.2.3) By pharmacological interventions

table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(interv_code1), data =  fx_prim, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Alendronate
(N=2)
Ibandronate
(N=2)
Risedronate
(N=2)
Minodronate
(N=1)
Zoledronate
(N=7)
Teriparatide
(N=7)
Abaloparatide
(N=1)
Romosozumab
(N=5)
Denosumab
(N=1)
Strontium_ranelate
(N=3)
Calcium_VitD
(N=3)
Overall
(N=34)
no_rand
Mean (SD) 3230 (1700) 1960 (0) 1220 (576) NA 3240 (3110) 1260 (683) NA 5330 (1690) NA 2800 (1990) 3270 (0) 2920 (2280)
Median [Q1, Q3] 3230 [2630, 3830] 1960 [1960, 1960] 1220 [1020, 1420] 704 [704, 704] 2000 [1200, 4930] 1100 [832, 1500] 1650 [1650, 1650] 4090 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 3370] 3270 [3270, 3270] 1980 [1240, 4090]
Median [min, max] 3230 [2030, 4430] 1960 [1960, 1960] 1220 [814, 1630] 704 [704, 704] 2000 [665, 7740] 1100 [549, 2530] 1650 [1650, 1650] 4090 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 5090] 3270 [3270, 3270] 1980 [549, 7870]
active_sample
Mean (SD) 3040 (1550) 1950 (0) 1030 (484) NA 2480 (2500) 976 (471) NA 4940 (1570) NA 2610 (2020) 2310 (516) 2500 (2060)
Median [Q1, Q3] 3040 [2490, 3590] 1950 [1950, 1950] 1030 [861, 1200] 544 [544, 544] 1130 [857, 3810] 892 [667, 1240] 1400 [1400, 1400] 4090 [3660, 6640] 7390 [7390, 7390] 1440 [1440, 3190] 2380 [2070, 2580] 1730 [1050, 3660]
Median [min, max] 3040 [1950, 4130] 1950 [1950, 1950] 1030 [690, 1370] 544 [544, 544] 1130 [479, 6450] 892 [426, 1700] 1400 [1400, 1400] 4090 [3640, 6650] 7390 [7390, 7390] 1440 [1440, 4940] 2380 [1770, 2790] 1730 [426, 7390]
n_event
Mean (SD) 172 (72.1) 111 (1.41) 148 (8.49) NA 170 (149) 63.7 (23.1) NA 247 (168) NA 463 (182) 141 (72.5) 177 (152)
Median [Q1, Q3] 172 [147, 198] 111 [111, 112] 148 [145, 151] 100 [100, 100] 140 [38.0, 272] 60.0 [44.5, 84.5] 34.0 [34.0, 34.0] 221 [105, 370] 350 [350, 350] 387 [360, 529] 176 [117, 183] 117 [63.8, 229]
Median [min, max] 172 [121, 223] 111 [110, 112] 148 [142, 154] 100 [100, 100] 140 [29.0, 402] 60.0 [36.0, 92.0] 34.0 [34.0, 34.0] 221 [75.0, 464] 350 [350, 350] 387 [332, 671] 176 [58.0, 190] 117 [29.0, 671]
FI_final
Mean (SD) 26.5 (19.1) 14.0 (1.41) 12.5 (2.12) NA 33.9 (61.4) 15.0 (6.63) NA 41.8 (21.3) NA 33.3 (26.5) 4.00 (3.61) 27.6 (36.4)
Median [Q1, Q3] 26.5 [19.8, 33.3] 14.0 [13.5, 14.5] 12.5 [11.8, 13.3] 20.0 [20.0, 20.0] 7.00 [6.50, 22.5] 13.0 [11.0, 19.0] 13.0 [13.0, 13.0] 40.0 [26.0, 42.0] 137 [137, 137] 45.0 [24.0, 48.5] 3.00 [2.00, 5.50] 13.5 [8.75, 31.3]
Median [min, max] 26.5 [13.0, 40.0] 14.0 [13.0, 15.0] 12.5 [11.0, 14.0] 20.0 [20.0, 20.0] 7.00 [1.00, 171] 13.0 [7.00, 25.0] 13.0 [13.0, 13.0] 40.0 [24.0, 77.0] 137 [137, 137] 45.0 [3.00, 52.0] 3.00 [1.00, 8.00] 13.5 [1.00, 171]
FQ_final
Mean (SD) 0.0118 (0.0123) 0.00717 (0.000724) 0.0141 (0.00869) NA 0.0115 (0.0102) 0.0193 (0.0104) NA 0.00941 (0.00598) NA 0.0226 (0.0192) 0.00167 (0.00149) 0.0137 (0.0111)
Median [Q1, Q3] 0.0118 [0.00750, 0.0162] 0.00717 [0.00692, 0.00743] 0.0141 [0.0111, 0.0172] 0.0368 [0.0368, 0.0368] 0.0107 [0.00359, 0.0158] 0.0258 [0.0110, 0.0271] 0.00928 [0.00928, 0.00928] 0.00714 [0.00601, 0.0115] 0.0185 [0.0185, 0.0185] 0.0312 [0.0159, 0.0336] 0.00108 [0.000821, 0.00222] 0.00997 [0.00442, 0.0205]
Median [min, max] 0.0118 [0.00314, 0.0206] 0.00717 [0.00666, 0.00768] 0.0141 [0.00801, 0.0203] 0.0368 [0.0368, 0.0368] 0.0107 [0.000946, 0.0301] 0.0258 [0.00412, 0.0288] 0.00928 [0.00928, 0.00928] 0.00714 [0.00361, 0.0188] 0.0185 [0.0185, 0.0185] 0.0312 [0.000608, 0.0361] 0.00108 [0.000567, 0.00337] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (14.3%) 1 (14.3%) 0 (0%) 1 (20.0%) 0 (0%) 0 (0%) 0 (0%) 3 (8.8%)
1 1 (50.0%) 0 (0%) 2 (100%) 1 (100%) 6 (85.7%) 2 (28.6%) 1 (100%) 4 (80.0%) 0 (0%) 0 (0%) 3 (100%) 20 (58.8%)
Missing 1 (50.0%) 2 (100%) 0 (0%) 0 (0%) 0 (0%) 4 (57.1%) 0 (0%) 0 (0%) 1 (100%) 3 (100%) 0 (0%) 11 (32.4%)
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(interv_code2), data =  fx_prim, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Bisphosphonates
(N=14)
PTH analog
(N=8)
Romosozumab
(N=5)
Denosumab
(N=1)
Strontium_ranelate
(N=3)
Calcium_VitD
(N=3)
Overall
(N=34)
no_rand
Mean (SD) 2590 (2370) 1310 (647) 5330 (1690) NA 2800 (1990) 3270 (0) 2920 (2280)
Median [Q1, Q3] 1960 [1200, 2100] 1230 [958, 1640] 4090 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 3370] 3270 [3270, 3270] 1980 [1240, 4090]
Median [min, max] 1960 [665, 7740] 1230 [549, 2530] 4090 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 5090] 3270 [3270, 3270] 1980 [549, 7870]
active_sample
Mean (SD) 2140 (1910) 1030 (461) 4940 (1570) NA 2610 (2020) 2310 (516) 2500 (2060)
Median [Q1, Q3] 1660 [782, 1950] 971 [774, 1410] 4090 [3660, 6640] 7390 [7390, 7390] 1440 [1440, 3190] 2380 [2070, 2580] 1730 [1050, 3660]
Median [min, max] 1660 [479, 6450] 971 [426, 1700] 4090 [3640, 6650] 7390 [7390, 7390] 1440 [1440, 4940] 2380 [1770, 2790] 1730 [426, 7390]
n_event
Mean (SD) 154 (107) 60.0 (23.9) 247 (168) NA 463 (182) 141 (72.5) 177 (152)
Median [Q1, Q3] 131 [103, 206] 54.0 [39.8, 83.8] 221 [105, 370] 350 [350, 350] 387 [360, 529] 176 [117, 183] 117 [63.8, 229]
Median [min, max] 131 [29.0, 402] 54.0 [34.0, 92.0] 221 [75.0, 464] 350 [350, 350] 387 [332, 671] 176 [58.0, 190] 117 [29.0, 671]
FI_final
Mean (SD) 25.9 (43.0) 14.8 (6.18) 41.8 (21.3) NA 33.3 (26.5) 4.00 (3.61) 27.6 (36.4)
Median [Q1, Q3] 13.0 [8.00, 18.8] 13.0 [11.0, 17.0] 40.0 [26.0, 42.0] 137 [137, 137] 45.0 [24.0, 48.5] 3.00 [2.00, 5.50] 13.5 [8.75, 31.3]
Median [min, max] 13.0 [1.00, 171] 13.0 [7.00, 25.0] 40.0 [24.0, 77.0] 137 [137, 137] 45.0 [3.00, 52.0] 3.00 [1.00, 8.00] 13.5 [1.00, 171]
FQ_final
Mean (SD) 0.0131 (0.0108) 0.0180 (0.0102) 0.00941 (0.00598) NA 0.0226 (0.0192) 0.00167 (0.00149) 0.0137 (0.0111)
Median [Q1, Q3] 0.00933 [0.00566, 0.0195] 0.0200 [0.00889, 0.0265] 0.00714 [0.00601, 0.0115] 0.0185 [0.0185, 0.0185] 0.0312 [0.0159, 0.0336] 0.00108 [0.000821, 0.00222] 0.00997 [0.00442, 0.0205]
Median [min, max] 0.00933 [0.000946, 0.0368] 0.0200 [0.00412, 0.0288] 0.00714 [0.00361, 0.0188] 0.0185 [0.0185, 0.0185] 0.0312 [0.000608, 0.0361] 0.00108 [0.000567, 0.00337] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 1 (7.1%) 1 (12.5%) 1 (20.0%) 0 (0%) 0 (0%) 0 (0%) 3 (8.8%)
1 10 (71.4%) 3 (37.5%) 4 (80.0%) 0 (0%) 0 (0%) 3 (100%) 20 (58.8%)
Missing 3 (21.4%) 4 (50.0%) 0 (0%) 1 (100%) 3 (100%) 0 (0%) 11 (32.4%)
kruskal.test(FI_final ~ interv_code2, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by interv_code2
## Kruskal-Wallis chi-squared = 13.439, df = 5, p-value = 0.01959
kruskal.test(FQ_final ~ interv_code2, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by interv_code2
## Kruskal-Wallis chi-squared = 8.3873, df = 5, p-value = 0.1361

Box plots

p1 = ggplot(data =  fx_prim, aes(y = FI_final, x = as.factor(interv_code2), fill = as.factor(interv_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index", x = "Pharmacological interventions", y = "Fragility index") + theme(axis.text.x = element_text(angle = 45, hjust = 1))
p2 = ggplot(data =  fx_prim, aes(y = FQ_final, x = as.factor(interv_code2), fill = as.factor(interv_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility quotient", x = "Pharmacological interventions", y = "Fragility quotine") + theme(axis.text.x = element_text(angle = 45, hjust = 1))

grid.arrange(p1, p2, nrow = 1, top = textGrob("Fragility of evidence for anti-fracture efficacy by intervention sites", gp = gpar(fontsize = 20, font = 1)))

(1.2.4) Timing of fracture assessment

table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(timing), data =  fx_prim, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
2
(N=1)
3
(N=8)
4
(N=12)
5
(N=10)
6
(N=1)
7
(N=1)
8
(N=1)
Overall
(N=34)
no_rand
Mean (SD) NA 2090 (1160) 2400 (2020) 3510 (2970) NA NA NA 2920 (2280)
Median [Q1, Q3] 7180 [7180, 7180] 2090 [1370, 3270] 1280 [1090, 4090] 1960 [1650, 6330] 4430 [4430, 4430] 5090 [5090, 5090] 2000 [2000, 2000] 1980 [1240, 4090]
Median [min, max] 7180 [7180, 7180] 2090 [549, 3270] 1280 [665, 7180] 1960 [814, 7870] 4430 [4430, 4430] 5090 [5090, 5090] 2000 [2000, 2000] 1980 [549, 7870]
active_sample
Mean (SD) NA 1540 (828) 2180 (1910) 2880 (2570) NA NA NA 2500 (2060)
Median [Q1, Q3] 6640 [6640, 6640] 1560 [1160, 1920] 1090 [890, 3650] 1700 [1390, 4740] 4130 [4130, 4130] 4940 [4940, 4940] 1950 [1950, 1950] 1730 [1050, 3660]
Median [min, max] 6640 [6640, 6640] 1560 [426, 2790] 1090 [544, 6650] 1700 [479, 7390] 4130 [4130, 4130] 4940 [4940, 4940] 1950 [1950, 1950] 1730 [426, 7390]
n_event
Mean (SD) NA 80.4 (64.1) 154 (139) 236 (120) NA NA NA 177 (152)
Median [Q1, Q3] 75.0 [75.0, 75.0] 53.0 [39.8, 89.0] 96.0 [72.0, 222] 193 [141, 346] 121 [121, 121] 671 [671, 671] 312 [312, 312] 117 [63.8, 229]
Median [min, max] 75.0 [75.0, 75.0] 53.0 [34.0, 190] 96.0 [29.0, 464] 193 [110, 402] 121 [121, 121] 671 [671, 671] 312 [312, 312] 117 [29.0, 671]
FI_final
Mean (SD) NA 8.38 (4.50) 26.8 (20.9) 47.7 (58.6) NA NA NA 27.6 (36.4)
Median [Q1, Q3] 24.0 [24.0, 24.0] 9.50 [6.00, 11.5] 24.0 [13.0, 40.0] 14.5 [12.3, 50.3] 13.0 [13.0, 13.0] 3.00 [3.00, 3.00] 33.0 [33.0, 33.0] 13.5 [8.75, 31.3]
Median [min, max] 24.0 [24.0, 24.0] 9.50 [1.00, 13.0] 24.0 [1.00, 77.0] 14.5 [7.00, 171] 13.0 [13.0, 13.0] 3.00 [3.00, 3.00] 33.0 [33.0, 33.0] 13.5 [1.00, 171]
FQ_final
Mean (SD) NA 0.0101 (0.0111) 0.0155 (0.0108) 0.0175 (0.0118) NA NA NA 0.0137 (0.0111)
Median [Q1, Q3] 0.00361 [0.00361, 0.00361] 0.00591 [0.00279, 0.0134] 0.0129 [0.00686, 0.0219] 0.0166 [0.00776, 0.0277] 0.00314 [0.00314, 0.00314] 0.000608 [0.000608, 0.000608] 0.0169 [0.0169, 0.0169] 0.00997 [0.00442, 0.0205]
Median [min, max] 0.00361 [0.00361, 0.00361] 0.00591 [0.000567, 0.0288] 0.0129 [0.000946, 0.0368] 0.0166 [0.00186, 0.0361] 0.00314 [0.00314, 0.00314] 0.000608 [0.000608, 0.000608] 0.0169 [0.0169, 0.0169] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 2 (16.7%) 0 (0%) 0 (0%) 0 (0%) 1 (100%) 3 (8.8%)
1 1 (100%) 6 (75.0%) 8 (66.7%) 5 (50.0%) 0 (0%) 0 (0%) 0 (0%) 20 (58.8%)
Missing 0 (0%) 2 (25.0%) 2 (16.7%) 5 (50.0%) 1 (100%) 1 (100%) 0 (0%) 11 (32.4%)
kruskal.test(FI_final ~ timing, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by timing
## Kruskal-Wallis chi-squared = 10.765, df = 6, p-value = 0.0959
kruskal.test(FQ_final ~ timing, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by timing
## Kruskal-Wallis chi-squared = 7.7952, df = 6, p-value = 0.2535

Box plots

p1 = ggplot(data =  fx_prim, aes(y = FI_final, x = as.factor(timing), fill = as.factor(timing))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by timing of fracture assessment", x = "Timing of fracture assessment", y = "Fragility index")
p1

(1.2.5) By journal
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(journal_code2), data =  fx_prim, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
NEJM
(N=19)
Lancet
(N=2)
JAMA
(N=4)
Ann Intern Med
(N=1)
JBMR
(N=2)
JCEM
(N=2)
Other
(N=4)
Overall
(N=34)
no_rand
Mean (SD) 3780 (2530) 1690 (472) 2340 (1400) NA 1960 (0) 564 (20.5) 1820 (2180) 2920 (2280)
Median [Q1, Q3] 3270 [1650, 5640] 1690 [1530, 1860] 1640 [1640, 2340] 2530 [2530, 2530] 1960 [1960, 1960] 564 [556, 571] 759 [694, 1880] 1980 [1240, 4090]
Median [min, max] 3270 [1090, 7870] 1690 [1360, 2030] 1640 [1630, 4430] 2530 [2530, 2530] 1960 [1960, 1960] 564 [549, 578] 759 [665, 5090] 1980 [549, 7870]
active_sample
Mean (SD) 3180 (2320) 1500 (634) 2080 (1370) NA 1950 (0) 439 (17.7) 1710 (2150) 2500 (2060)
Median [Q1, Q3] 2380 [1280, 4880] 1500 [1270, 1720] 1410 [1390, 2100] 1700 [1700, 1700] 1950 [1950, 1950] 439 [432, 445] 674 [629, 1750] 1730 [1050, 3660]
Median [min, max] 2380 [479, 7390] 1500 [1050, 1950] 1410 [1370, 4130] 1700 [1700, 1700] 1950 [1950, 1950] 439 [426, 451] 674 [544, 4940] 1730 [426, 7390]
n_event
Mean (SD) 213 (141) 158 (92.6) 86.3 (60.7) NA 111 (1.41) 44.5 (4.95) 238 (292) 177 (152)
Median [Q1, Q3] 190 [84.5, 341] 158 [125, 190] 78.5 [35.5, 129] 60.0 [60.0, 60.0] 111 [111, 112] 44.5 [42.8, 46.3] 121 [84.8, 274] 117 [63.8, 229]
Median [min, max] 190 [29.0, 464] 158 [92.0, 223] 78.5 [34.0, 154] 60.0 [60.0, 60.0] 111 [110, 112] 44.5 [41.0, 48.0] 121 [39.0, 671] 117 [29.0, 671]
FI_final
Mean (SD) 38.6 (45.7) 27.5 (17.7) 12.0 (1.15) NA 14.0 (1.41) 12.0 (1.41) 11.0 (7.53) 27.6 (36.4)
Median [Q1, Q3] 25.0 [7.50, 43.5] 27.5 [21.3, 33.8] 12.0 [11.0, 13.0] 7.00 [7.00, 7.00] 14.0 [13.5, 14.5] 12.0 [11.5, 12.5] 10.5 [6.00, 15.5] 13.5 [8.75, 31.3]
Median [min, max] 25.0 [1.00, 171] 27.5 [15.0, 40.0] 12.0 [11.0, 13.0] 7.00 [7.00, 7.00] 14.0 [13.0, 15.0] 12.0 [11.0, 13.0] 10.5 [3.00, 20.0] 13.5 [1.00, 171]
FQ_final
Mean (SD) 0.0138 (0.0118) 0.0174 (0.00442) 0.00703 (0.00268) NA 0.00717 (0.000724) 0.0273 (0.00212) 0.0171 (0.0154) 0.0137 (0.0111)
Median [Q1, Q3] 0.0115 [0.00349, 0.0223] 0.0174 [0.0159, 0.0190] 0.00785 [0.00656, 0.00832] 0.00412 [0.00412, 0.00412] 0.00717 [0.00692, 0.00743] 0.0273 [0.0266, 0.0281] 0.0155 [0.00814, 0.0244] 0.00997 [0.00442, 0.0205]
Median [min, max] 0.0115 [0.000567, 0.0361] 0.0174 [0.0143, 0.0206] 0.00785 [0.00314, 0.00928] 0.00412 [0.00412, 0.00412] 0.00717 [0.00666, 0.00768] 0.0273 [0.0258, 0.0288] 0.0155 [0.000608, 0.0368] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 2 (10.5%) 1 (50.0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 3 (8.8%)
1 12 (63.2%) 1 (50.0%) 3 (75.0%) 1 (100%) 0 (0%) 0 (0%) 3 (75.0%) 20 (58.8%)
Missing 5 (26.3%) 0 (0%) 1 (25.0%) 0 (0%) 2 (100%) 2 (100%) 1 (25.0%) 11 (32.4%)
kruskal.test(FI_final ~ journal_code2, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by journal_code2
## Kruskal-Wallis chi-squared = 5.0581, df = 6, p-value = 0.5364
kruskal.test(FQ_final ~ journal_code2, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by journal_code2
## Kruskal-Wallis chi-squared = 5.3118, df = 6, p-value = 0.5045

Box plots

p1 = ggplot(data =  fx_prim, aes(y = FI_final, x = as.factor(timing), fill = as.factor(timing))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by timing of fracture assessment", x = "Timing of fracture assessment", y = "Fragility index") 
p1

(1.2.6) By sex
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | sex, data =  fx_prim, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Both
(N=4)
Men
(N=2)
Women
(N=28)
Overall
(N=34)
no_rand
Mean (SD) 980 (766) 1200 (0) 3320 (2310) 2920 (2280)
Median [Q1, Q3] 622 [571, 1030] 1200 [1200, 1200] 2280 [1640, 4180] 1980 [1240, 4090]
Median [min, max] 622 [549, 2130] 1200 [1200, 1200] 2280 [704, 7870] 1980 [549, 7870]
active_sample
Mean (SD) 503 (105) 1090 (49.5) 2890 (2080) 2500 (2060)
Median [Q1, Q3] 465 [445, 524] 1090 [1070, 1110] 1950 [1420, 4100] 1730 [1050, 3660]
Median [min, max] 465 [426, 657] 1090 [1060, 1130] 1950 [544, 7390] 1730 [426, 7390]
n_event
Mean (SD) 89.8 (94.2) 33.0 (5.66) 200 (155) 177 (152)
Median [Q1, Q3] 44.5 [40.5, 93.8] 33.0 [31.0, 35.0] 141 [90.5, 317] 117 [63.8, 229]
Median [min, max] 44.5 [39.0, 231] 33.0 [29.0, 37.0] 141 [34.0, 671] 117 [29.0, 671]
FI_final
Mean (SD) 9.50 (3.00) 3.50 (3.54) 31.9 (38.8) 27.6 (36.4)
Median [Q1, Q3] 9.00 [7.00, 11.5] 3.50 [2.25, 4.75] 17.5 [11.8, 40.0] 13.5 [8.75, 31.3]
Median [min, max] 9.00 [7.00, 13.0] 3.50 [1.00, 6.00] 17.5 [1.00, 171] 13.5 [1.00, 171]
FQ_final
Mean (SD) 0.0200 (0.00872) 0.00313 (0.00310) 0.0136 (0.0113) 0.0137 (0.0111)
Median [Q1, Q3] 0.0202 [0.0136, 0.0266] 0.00313 [0.00204, 0.00423] 0.00864 [0.00399, 0.0204] 0.00997 [0.00442, 0.0205]
Median [min, max] 0.0202 [0.0107, 0.0288] 0.00313 [0.000946, 0.00532] 0.00864 [0.000567, 0.0368] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 3 (10.7%) 3 (8.8%)
1 2 (50.0%) 2 (100%) 16 (57.1%) 20 (58.8%)
Missing 2 (50.0%) 0 (0%) 9 (32.1%) 11 (32.4%)
kruskal.test(FI_final ~ sex, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by sex
## Kruskal-Wallis chi-squared = 7.5261, df = 2, p-value = 0.02321
kruskal.test(FQ_final ~ sex, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by sex
## Kruskal-Wallis chi-squared = 4.2872, df = 2, p-value = 0.1172

Box plots

p1 = ggplot(data =  fx_prim, aes(y = FI_final, x = as.factor(sex), fill = as.factor(sex))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by sex", x = "Sex", y = "Fragility index") 
p1

(1.2.7) By placebo
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | placebo, data =  fx_prim, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Active
(N=6)
Placebo
(N=28)
Overall
(N=34)
no_rand
Mean (SD) 2820 (1400) 2950 (2450) 2920 (2280)
Median [Q1, Q3] 2870 [1640, 4090] 1980 [1170, 3560] 1980 [1240, 4090]
Median [min, max] 2870 [1360, 4090] 1980 [549, 7870] 1980 [549, 7870]
active_sample
Mean (SD) 2550 (1390) 2490 (2200) 2500 (2060)
Median [Q1, Q3] 2540 [1410, 3660] 1730 [890, 3130] 1730 [1050, 3660]
Median [min, max] 2540 [1050, 4090] 1730 [426, 7390] 1730 [426, 7390]
n_event
Mean (SD) 203 (182) 172 (148) 177 (152)
Median [Q1, Q3] 157 [50.0, 333] 117 [71.3, 225] 117 [63.8, 229]
Median [min, max] 157 [34.0, 464] 117 [29.0, 671] 117 [29.0, 671]
FI_final
Mean (SD) 30.7 (25.5) 27.0 (38.7) 27.6 (36.4)
Median [Q1, Q3] 20.5 [13.5, 38.0] 13.0 [7.00, 27.0] 13.5 [8.75, 31.3]
Median [min, max] 20.5 [11.0, 77.0] 13.0 [1.00, 171] 13.5 [1.00, 171]
FQ_final
Mean (SD) 0.0115 (0.00447) 0.0142 (0.0121) 0.0137 (0.0111)
Median [Q1, Q3] 0.0104 [0.00810, 0.0136] 0.00933 [0.00355, 0.0258] 0.00997 [0.00442, 0.0205]
Median [min, max] 0.0104 [0.00714, 0.0188] 0.00933 [0.000567, 0.0368] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 2 (33.3%) 1 (3.6%) 3 (8.8%)
1 4 (66.7%) 16 (57.1%) 20 (58.8%)
Missing 0 (0%) 11 (39.3%) 11 (32.4%)
kruskal.test(FI_final ~ placebo, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by placebo
## Kruskal-Wallis chi-squared = 1.4928, df = 1, p-value = 0.2218
kruskal.test(FQ_final ~ placebo, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by placebo
## Kruskal-Wallis chi-squared = 0.018367, df = 1, p-value = 0.8922

Box plots

p1 = ggplot(data =  fx_prim, aes(y = FI_final, x = as.factor(control), fill = as.factor(control))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by types of control", x = "Types of control", y = "Fragility index") 
p1

(1.3) Analyses with P< 0.001

Data set:

p_sig = subset(fi_sig, Pval_screen<=0.001)
(1.3.1) Overall
# Comparison of different P values:
fi_sig$p_sig1[fi_sig$p_value<=0.001] = "Highly significant"
  fi_sig$p_sig1[fi_sig$p_value>0.001] = "Significant"
fi_sig$p_sig2[fi_sig$Pval_screen<=0.001] = "Highly significant"
  fi_sig$p_sig2[fi_sig$Pval_screen>0.001] = "Significant"

table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | p_sig2 , data = fi_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
Highly significant
(N=45)
Significant
(N=100)
Overall
(N=145)
no_rand
Mean (SD) 3860 (2780) 2470 (1910) 2900 (2300)
Median [Q1, Q3] 2420 [1640, 7180] 1840 [1200, 3270] 1960 [1220, 4090]
Median [min, max] 2420 [549, 7870] 1840 [450, 7870] 1960 [450, 7870]
active_sample
Mean (SD) 3430 (2520) 2140 (1710) 2540 (2080)
Median [Q1, Q3] 2380 [1270, 6530] 1660 [921, 2790] 1770 [1060, 3650]
Median [min, max] 2380 [426, 7810] 1660 [339, 6670] 1770 [339, 7810]
n_event
Mean (SD) 220 (190) 139 (154) 164 (170)
Median [Q1, Q3] 128 [82.0, 330] 71.0 [42.8, 164] 91.0 [52.0, 223]
Median [min, max] 128 [34.0, 764] 71.0 [10.0, 691] 91.0 [10.0, 764]
FI_final
Mean (SD) 37.9 (33.0) 6.95 (5.91) 16.6 (23.8)
Median [Q1, Q3] 26.0 [18.0, 42.0] 5.00 [2.75, 10.0] 9.00 [4.00, 19.0]
Median [min, max] 26.0 [9.00, 171] 5.00 [1.00, 29.0] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.0163 (0.0154) 0.00450 (0.00395) 0.00815 (0.0106)
Median [Q1, Q3] 0.0131 [0.00670, 0.0193] 0.00318 [0.00158, 0.00633] 0.00505 [0.00230, 0.00955]
Median [min, max] 0.0131 [0.00230, 0.0966] 0.00318 [0.000151, 0.0203] 0.00505 [0.000151, 0.0966]
as.factor(missing_fi)
0 6 (13.3%) 4 (4.0%) 10 (6.9%)
1 24 (53.3%) 62 (62.0%) 86 (59.3%)
Missing 15 (33.3%) 34 (34.0%) 49 (33.8%)
createTable(compareGroups(p_sig2 ~ no_rand + active_sample + n_event + FI_final + FQ_final + missing_fi, data = fi_sig, method = c(no_rand = 2, active_sample = 2, n_event = 2, FI_final = 2, FQ_final = 2)))
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning in chisq.test(xx, correct = FALSE): Chi-squared approximation may be
## incorrect
## 
## --------Summary descriptives table by 'p_sig2'---------
## 
## ___________________________________________________________ 
##               Highly significant   Significant    p.overall 
##                      N=45             N=100                 
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
## no_rand        2416 [1639;7180]  1836 [1199;3270]   0.011   
## active_sample  2376 [1266;6528]  1664 [920;2790]    0.006   
## n_event         128 [82.0;330]   71.0 [42.8;164]    0.001   
## FI_final       26.0 [18.0;42.0]  5.00 [2.75;10.0]  <0.001   
## FQ_final       0.01 [0.01;0.02]  0.00 [0.00;0.01]  <0.001   
## missing_fi:                                         0.066   
##     0             6 (20.0%)         4 (6.06%)               
##     1             24 (80.0%)        62 (93.9%)              
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
# Subset of analyses whose P-value<= 0.001
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi), data = p_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
Overall
(N=45)
no_rand
Mean (SD) 3860 (2780)
Median [Q1, Q3] 2420 [1640, 7180]
Median [min, max] 2420 [549, 7870]
active_sample
Mean (SD) 3430 (2520)
Median [Q1, Q3] 2380 [1270, 6530]
Median [min, max] 2380 [426, 7810]
n_event
Mean (SD) 220 (190)
Median [Q1, Q3] 128 [82.0, 330]
Median [min, max] 128 [34.0, 764]
FI_final
Mean (SD) 37.9 (33.0)
Median [Q1, Q3] 26.0 [18.0, 42.0]
Median [min, max] 26.0 [9.00, 171]
FQ_final
Mean (SD) 0.0163 (0.0154)
Median [Q1, Q3] 0.0131 [0.00670, 0.0193]
Median [min, max] 0.0131 [0.00230, 0.0966]
as.factor(missing_fi)
0 6 (13.3%)
1 24 (53.3%)
Missing 15 (33.3%)

Relationship between sample size/active sample/no. events and FI

p = ggplot(data = p_sig, aes(x = no_rand, y = FI_final))
p1 = p + geom_point() + geom_smooth() + labs(x = "Number of participants at randomisation", y = "Fragility index") + theme_bw()

p0 = ggplot(data = p_sig, aes(x = active_sample, y = FI_final))
p2 = p0 + geom_point() + geom_smooth() + labs(x = "Number of participants included in the analyses", y = "Fragility index") + theme_bw()

p.0 = ggplot(data = p_sig, aes(x = n_event, y = FI_final))
p3 = p.0 + geom_point() + geom_smooth() + labs(x = "Number of participants with fracture events", y = "Fragility index") + theme_bw()

#grid.arrange(p1, p2, p3, nrow = 1)
grid.arrange(p1, p3, nrow = 1, top = textGrob("Relationship between Number of participants and Fragility index", gp = gpar(fontsize = 20, font = 3)))
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

(1.3.2) By fracture sites
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(fx_code1), data = p_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Clin_fx
(N=2)
OFx
(N=3)
MOF
(N=2)
NonVert_fx
(N=4)
Vert_fx
(N=31)
ClinVert_fx
(N=3)
Overall
(N=45)
no_rand
Mean (SD) 7460 (393) 3400 (1210) 2870 (1730) 6340 (2060) 3230 (2710) 5750 (3550) 3860 (2780)
Median [Q1, Q3] 7460 [7320, 7600] 4090 [3050, 4090] 2870 [2260, 3480] 7180 [6200, 7320] 1650 [1290, 5640] 7740 [4690, 7800] 2420 [1640, 7180]
Median [min, max] 7460 [7180, 7740] 4090 [2000, 4090] 2870 [1650, 4090] 7180 [3270, 7740] 1650 [549, 7870] 7740 [1650, 7870] 2420 [549, 7870]
active_sample
Mean (SD) 6620 (100) 3250 (1130) 2400 (1600) 5560 (2120) 2860 (2440) 5230 (3350) 3430 (2520)
Median [Q1, Q3] 6620 [6580, 6660] 3840 [2890, 3910] 2400 [1830, 2970] 6590 [5490, 6650] 1440 [1050, 4880] 6430 [3940, 7120] 2380 [1270, 6530]
Median [min, max] 6620 [6550, 6690] 3840 [1950, 3980] 2400 [1270, 3530] 6590 [2380, 6670] 1440 [426, 7390] 6430 [1440, 7810] 2380 [426, 7810]
n_event
Mean (SD) 505 (366) 431 (197) 200 (220) 357 (229) 173 (154) 144 (55.6) 220 (190)
Median [Q1, Q3] 505 [376, 635] 323 [318, 491] 200 [122, 277] 290 [211, 436] 100 [74.0, 258] 121 [112, 164] 128 [82.0, 330]
Median [min, max] 505 [246, 764] 323 [312, 658] 200 [44.0, 355] 290 [168, 680] 100 [34.0, 696] 121 [103, 207] 128 [34.0, 764]
FI_final
Mean (SD) 62.5 (37.5) 42.7 (19.4) 17.5 (12.0) 28.0 (10.1) 39.0 (37.6) 33.0 (13.1) 37.9 (33.0)
Median [Q1, Q3] 62.5 [49.3, 75.8] 33.0 [31.5, 49.0] 17.5 [13.3, 21.8] 24.0 [22.5, 29.5] 24.0 [17.0, 43.5] 39.0 [28.5, 40.5] 26.0 [18.0, 42.0]
Median [min, max] 62.5 [36.0, 89.0] 33.0 [30.0, 65.0] 17.5 [9.00, 26.0] 24.0 [21.0, 43.0] 24.0 [11.0, 171] 39.0 [18.0, 42.0] 26.0 [9.00, 171]
FQ_final
Mean (SD) 0.00949 (0.00580) 0.0138 (0.00543) 0.00723 (0.000175) 0.00593 (0.00343) 0.0196 (0.0174) 0.00800 (0.00395) 0.0163 (0.0154)
Median [Q1, Q3] 0.00949 [0.00743, 0.0115] 0.0169 [0.0122, 0.0169] 0.00723 [0.00717, 0.00730] 0.00502 [0.00338, 0.00757] 0.0185 [0.00799, 0.0258] 0.00653 [0.00576, 0.00951] 0.0131 [0.00670, 0.0193]
Median [min, max] 0.00949 [0.00538, 0.0136] 0.0169 [0.00754, 0.0169] 0.00723 [0.00711, 0.00736] 0.00502 [0.00315, 0.0105] 0.0185 [0.00230, 0.0966] 0.00653 [0.00499, 0.0125] 0.0131 [0.00230, 0.0966]
as.factor(missing_fi)
0 0 (0%) 2 (66.7%) 0 (0%) 0 (0%) 4 (12.9%) 0 (0%) 6 (13.3%)
1 2 (100%) 1 (33.3%) 2 (100%) 4 (100%) 14 (45.2%) 1 (33.3%) 24 (53.3%)
Missing 0 (0%) 0 (0%) 0 (0%) 0 (0%) 13 (41.9%) 2 (66.7%) 15 (33.3%)
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(fx_code2), data = p_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Any
(N=2)
Osteoporotic
(N=5)
Non-Vertebrae
(N=4)
Vertebrae
(N=31)
Clinical Vertebrae
(N=3)
Overall
(N=45)
no_rand
Mean (SD) 7460 (393) 3180 (1250) 6340 (2060) 3230 (2710) 5750 (3550) 3860 (2780)
Median [Q1, Q3] 7460 [7320, 7600] 4090 [2000, 4090] 7180 [6200, 7320] 1650 [1290, 5640] 7740 [4690, 7800] 2420 [1640, 7180]
Median [min, max] 7460 [7180, 7740] 4090 [1650, 4090] 7180 [3270, 7740] 1650 [549, 7870] 7740 [1650, 7870] 2420 [549, 7870]
active_sample
Mean (SD) 6620 (100) 2910 (1230) 5560 (2120) 2860 (2440) 5230 (3350) 3430 (2520)
Median [Q1, Q3] 6620 [6580, 6660] 3530 [1950, 3840] 6590 [5490, 6650] 1440 [1050, 4880] 6430 [3940, 7120] 2380 [1270, 6530]
Median [min, max] 6620 [6550, 6690] 3530 [1270, 3980] 6590 [2380, 6670] 1440 [426, 7390] 6430 [1440, 7810] 2380 [426, 7810]
n_event
Mean (SD) 505 (366) 338 (218) 357 (229) 173 (154) 144 (55.6) 220 (190)
Median [Q1, Q3] 505 [376, 635] 323 [312, 355] 290 [211, 436] 100 [74.0, 258] 121 [112, 164] 128 [82.0, 330]
Median [min, max] 505 [246, 764] 323 [44.0, 658] 290 [168, 680] 100 [34.0, 696] 121 [103, 207] 128 [34.0, 764]
FI_final
Mean (SD) 62.5 (37.5) 32.6 (20.4) 28.0 (10.1) 39.0 (37.6) 33.0 (13.1) 37.9 (33.0)
Median [Q1, Q3] 62.5 [49.3, 75.8] 30.0 [26.0, 33.0] 24.0 [22.5, 29.5] 24.0 [17.0, 43.5] 39.0 [28.5, 40.5] 26.0 [18.0, 42.0]
Median [min, max] 62.5 [36.0, 89.0] 30.0 [9.00, 65.0] 24.0 [21.0, 43.0] 24.0 [11.0, 171] 39.0 [18.0, 42.0] 26.0 [9.00, 171]
FQ_final
Mean (SD) 0.00949 (0.00580) 0.0112 (0.00526) 0.00593 (0.00343) 0.0196 (0.0174) 0.00800 (0.00395) 0.0163 (0.0154)
Median [Q1, Q3] 0.00949 [0.00743, 0.0115] 0.00754 [0.00736, 0.0169] 0.00502 [0.00338, 0.00757] 0.0185 [0.00799, 0.0258] 0.00653 [0.00576, 0.00951] 0.0131 [0.00670, 0.0193]
Median [min, max] 0.00949 [0.00538, 0.0136] 0.00754 [0.00711, 0.0169] 0.00502 [0.00315, 0.0105] 0.0185 [0.00230, 0.0966] 0.00653 [0.00499, 0.0125] 0.0131 [0.00230, 0.0966]
as.factor(missing_fi)
0 0 (0%) 2 (40.0%) 0 (0%) 4 (12.9%) 0 (0%) 6 (13.3%)
1 2 (100%) 3 (60.0%) 4 (100%) 14 (45.2%) 1 (33.3%) 24 (53.3%)
Missing 0 (0%) 0 (0%) 0 (0%) 13 (41.9%) 2 (66.7%) 15 (33.3%)
kruskal.test(FI_final ~ fx_code2, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by fx_code2
## Kruskal-Wallis chi-squared = 1.7455, df = 4, p-value = 0.7824
kruskal.test(FQ_final ~ fx_code2, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by fx_code2
## Kruskal-Wallis chi-squared = 9.9548, df = 4, p-value = 0.0412

Box plots

p1 = ggplot(data = p_sig, aes(y = FI_final, x = as.factor(fx_code2), fill = as.factor(fx_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index", x = "Fracture sites", y = "Fragility index") + theme(axis.text.x = element_text(angle = 45, hjust = 1))
p2 = ggplot(data = p_sig, aes(y = FQ_final, x = as.factor(fx_code2), fill = as.factor(fx_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility quotient", x = "Fracture sites", y = "Fragility quotient") + theme(axis.text.x = element_text(angle = 45, hjust = 1))

grid.arrange(p1, p2, nrow = 1, top = textGrob("Fragility of evidence for anti-fracture efficacy by fracture sites", gp = gpar(fontsize = 20, font = 1)))

(1.3.3) By pharmacological interventions

table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(interv_code1), data = p_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Alendronate
(N=1)
Ibandronate
(N=1)
Risedronate
(N=1)
Minodronate
(N=1)
Zoledronate
(N=6)
Teriparatide
(N=9)
Abaloparatide
(N=2)
Romosozumab
(N=13)
Denosumab
(N=3)
Strontium_ranelate
(N=7)
Calcium_VitD
(N=1)
Overall
(N=45)
no_rand
Mean (SD) NA NA NA NA 6780 (2340) 1090 (354) 1650 (0) 5760 (1600) 7870 (0) 1700 (354) NA 3860 (2780)
Median [Q1, Q3] 2030 [2030, 2030] 1960 [1960, 1960] 1630 [1630, 1630] 704 [704, 704] 7740 [7740, 7740] 1100 [1090, 1360] 1650 [1650, 1650] 7180 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 1650] 3270 [3270, 3270] 2420 [1640, 7180]
Median [min, max] 2030 [2030, 2030] 1960 [1960, 1960] 1630 [1630, 1630] 704 [704, 704] 7740 [2000, 7740] 1100 [549, 1640] 1650 [1650, 1650] 7180 [4090, 7180] 7870 [7870, 7870] 1650 [1220, 2420] 3270 [3270, 3270] 2420 [549, 7870]
active_sample
Mean (SD) NA NA NA NA 5470 (1770) 883 (306) 1330 (95.5) 5360 (1510) 7530 (240) 1500 (421) NA 3430 (2520)
Median [Q1, Q3] 1950 [1950, 1950] 1950 [1950, 1950] 1330 [1330, 1330] 544 [544, 544] 6050 [5680, 6500] 892 [882, 1050] 1330 [1300, 1370] 6640 [3840, 6650] 7390 [7390, 7600] 1440 [1300, 1440] 2380 [2380, 2380] 2380 [1270, 6530]
Median [min, max] 1950 [1950, 1950] 1950 [1950, 1950] 1330 [1330, 1330] 544 [544, 544] 6050 [1950, 6550] 892 [426, 1430] 1330 [1270, 1400] 6640 [3530, 6910] 7390 [7390, 7810] 1440 [1150, 2420] 2380 [2380, 2380] 2380 [426, 7810]
n_event
Mean (SD) NA NA NA NA 389 (287) 64.8 (25.0) 39.0 (7.07) 245 (160) 184 (145) 334 (182) NA 220 (190)
Median [Q1, Q3] 223 [223, 223] 110 [110, 110] 58.0 [58.0, 58.0] 100 [100, 100] 357 [155, 611] 51.0 [46.0, 86.0] 39.0 [36.5, 41.5] 225 [106, 323] 121 [102, 236] 330 [234, 360] 355 [355, 355] 128 [82.0, 330]
Median [min, max] 223 [223, 223] 110 [110, 110] 58.0 [58.0, 58.0] 100 [100, 100] 357 [73.0, 764] 51.0 [36.0, 100] 39.0 [34.0, 44.0] 225 [75.0, 658] 121 [82.0, 350] 330 [128, 696] 355 [355, 355] 128 [34.0, 764]
FI_final
Mean (SD) NA NA NA NA 69.3 (53.8) 17.1 (5.21) 11.0 (2.83) 38.3 (16.9) 64.3 (63.9) 44.7 (32.4) NA 37.9 (33.0)
Median [Q1, Q3] 40.0 [40.0, 40.0] 15.0 [15.0, 15.0] 11.0 [11.0, 11.0] 20.0 [20.0, 20.0] 42.5 [39.0, 77.5] 17.0 [13.0, 22.0] 11.0 [10.0, 12.0] 36.0 [26.0, 42.0] 39.0 [28.0, 88.0] 45.0 [21.0, 48.5] 25.0 [25.0, 25.0] 26.0 [18.0, 42.0]
Median [min, max] 40.0 [40.0, 40.0] 15.0 [15.0, 15.0] 11.0 [11.0, 11.0] 20.0 [20.0, 20.0] 42.5 [33.0, 171] 17.0 [11.0, 25.0] 11.0 [9.00, 13.0] 36.0 [21.0, 77.0] 39.0 [17.0, 137] 45.0 [18.0, 111] 25.0 [25.0, 25.0] 26.0 [9.00, 171]
FQ_final
Mean (SD) NA NA NA NA 0.0134 (0.00928) 0.0212 (0.00726) 0.00819 (0.00153) 0.00820 (0.00525) 0.00861 (0.00870) 0.0325 (0.0296) NA 0.0163 (0.0154)
Median [Q1, Q3] 0.0206 [0.0206, 0.0206] 0.00768 [0.00768, 0.00768] 0.00828 [0.00828, 0.00828] 0.0368 [0.0368, 0.0368] 0.0101 [0.00661, 0.0161] 0.0247 [0.0162, 0.0258] 0.00819 [0.00765, 0.00874] 0.00601 [0.00391, 0.0115] 0.00499 [0.00365, 0.0118] 0.0188 [0.0162, 0.0336] 0.0105 [0.0105, 0.0105] 0.0131 [0.00670, 0.0193]
Median [min, max] 0.0206 [0.0206, 0.0206] 0.00768 [0.00768, 0.00768] 0.00828 [0.00828, 0.00828] 0.0368 [0.0368, 0.0368] 0.0101 [0.00653, 0.0301] 0.0247 [0.00770, 0.0288] 0.00819 [0.00711, 0.00928] 0.00601 [0.00315, 0.0188] 0.00499 [0.00230, 0.0185] 0.0188 [0.0125, 0.0966] 0.0105 [0.0105, 0.0105] 0.0131 [0.00230, 0.0966]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (16.7%) 2 (22.2%) 0 (0%) 2 (15.4%) 0 (0%) 1 (14.3%) 0 (0%) 6 (13.3%)
1 1 (100%) 0 (0%) 1 (100%) 1 (100%) 5 (83.3%) 1 (11.1%) 2 (100%) 11 (84.6%) 0 (0%) 1 (14.3%) 1 (100%) 24 (53.3%)
Missing 0 (0%) 1 (100%) 0 (0%) 0 (0%) 0 (0%) 6 (66.7%) 0 (0%) 0 (0%) 3 (100%) 5 (71.4%) 0 (0%) 15 (33.3%)
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(interv_code2), data = p_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Bisphosphonates
(N=10)
PTH analog
(N=11)
Romosozumab
(N=13)
Denosumab
(N=3)
Strontium_ranelate
(N=7)
Calcium_VitD
(N=1)
Overall
(N=45)
no_rand
Mean (SD) 4700 (3220) 1190 (387) 5760 (1600) 7870 (0) 1700 (354) NA 3860 (2780)
Median [Q1, Q3] 4880 [1970, 7740] 1100 [1090, 1500] 7180 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 1650] 3270 [3270, 3270] 2420 [1640, 7180]
Median [min, max] 4880 [704, 7740] 1100 [549, 1650] 7180 [4090, 7180] 7870 [7870, 7870] 1650 [1220, 2420] 3270 [3270, 3270] 2420 [549, 7870]
active_sample
Mean (SD) 3860 (2490) 965 (330) 5360 (1510) 7530 (240) 1500 (421) NA 3430 (2520)
Median [Q1, Q3] 3810 [1950, 6240] 892 [882, 1160] 6640 [3840, 6650] 7390 [7390, 7600] 1440 [1300, 1440] 2380 [2380, 2380] 2380 [1270, 6530]
Median [min, max] 3810 [544, 6550] 892 [426, 1430] 6640 [3530, 6910] 7390 [7390, 7810] 1440 [1150, 2420] 2380 [2380, 2380] 2380 [426, 7810]
n_event
Mean (SD) 283 (258) 60.1 (24.7) 245 (160) 184 (145) 334 (182) NA 220 (190)
Median [Q1, Q3] 167 [101, 380] 48.0 [42.5, 84.5] 225 [106, 323] 121 [102, 236] 330 [234, 360] 355 [355, 355] 128 [82.0, 330]
Median [min, max] 167 [58.0, 764] 48.0 [34.0, 100] 225 [75.0, 658] 121 [82.0, 350] 330 [128, 696] 355 [355, 355] 128 [34.0, 764]
FI_final
Mean (SD) 50.2 (47.7) 16.0 (5.35) 38.3 (16.9) 64.3 (63.9) 44.7 (32.4) NA 37.9 (33.0)
Median [Q1, Q3] 39.0 [23.3, 42.8] 15.0 [12.0, 19.5] 36.0 [26.0, 42.0] 39.0 [28.0, 88.0] 45.0 [21.0, 48.5] 25.0 [25.0, 25.0] 26.0 [18.0, 42.0]
Median [min, max] 39.0 [11.0, 171] 15.0 [9.00, 25.0] 36.0 [21.0, 77.0] 39.0 [17.0, 137] 45.0 [18.0, 111] 25.0 [25.0, 25.0] 26.0 [9.00, 171]
FQ_final
Mean (SD) 0.0154 (0.0108) 0.0188 (0.00838) 0.00820 (0.00525) 0.00861 (0.00870) 0.0325 (0.0296) NA 0.0163 (0.0154)
Median [Q1, Q3] 0.0109 [0.00694, 0.0197] 0.0193 [0.0118, 0.0258] 0.00601 [0.00391, 0.0115] 0.00499 [0.00365, 0.0118] 0.0188 [0.0162, 0.0336] 0.0105 [0.0105, 0.0105] 0.0131 [0.00670, 0.0193]
Median [min, max] 0.0109 [0.00653, 0.0368] 0.0193 [0.00711, 0.0288] 0.00601 [0.00315, 0.0188] 0.00499 [0.00230, 0.0185] 0.0188 [0.0125, 0.0966] 0.0105 [0.0105, 0.0105] 0.0131 [0.00230, 0.0966]
as.factor(missing_fi)
0 1 (10.0%) 2 (18.2%) 2 (15.4%) 0 (0%) 1 (14.3%) 0 (0%) 6 (13.3%)
1 8 (80.0%) 3 (27.3%) 11 (84.6%) 0 (0%) 1 (14.3%) 1 (100%) 24 (53.3%)
Missing 1 (10.0%) 6 (54.5%) 0 (0%) 3 (100%) 5 (71.4%) 0 (0%) 15 (33.3%)
kruskal.test(FI_final ~ interv_code2, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by interv_code2
## Kruskal-Wallis chi-squared = 16.452, df = 5, p-value = 0.005665
kruskal.test(FQ_final ~ interv_code2, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by interv_code2
## Kruskal-Wallis chi-squared = 17.258, df = 5, p-value = 0.004035

Box plots

p1 = ggplot(data = p_sig, aes(y = FI_final, x = as.factor(interv_code2), fill = as.factor(interv_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index", x = "Pharmacological interventions", y = "Fragility index") + theme(axis.text.x = element_text(angle = 45, hjust = 1))
p2 = ggplot(data = p_sig, aes(y = FQ_final, x = as.factor(interv_code2), fill = as.factor(interv_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility quotient", x = "Pharmacological interventions", y = "Fragility quotine") + theme(axis.text.x = element_text(angle = 45, hjust = 1))

grid.arrange(p1, p2, nrow = 1, top = textGrob("Fragility of evidence for anti-fracture efficacy by intervention sites", gp = gpar(fontsize = 20, font = 1)))

(1.3.4) Timing of fracture assessment

table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(timing), data = p_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
2
(N=5)
3
(N=6)
4
(N=18)
5
(N=14)
6
(N=1)
8
(N=1)
Overall
(N=45)
no_rand
Mean (SD) 4350 (2770) 1550 (993) 3680 (2560) 5200 (3110) NA NA 3860 (2780)
Median [Q1, Q3] 4090 [1650, 7180] 1640 [843, 1650] 4090 [1160, 6410] 7740 [1730, 7740] 1650 [1650, 1650] 2000 [2000, 2000] 2420 [1640, 7180]
Median [min, max] 4090 [1630, 7180] 1640 [549, 3270] 4090 [704, 7180] 7740 [1220, 7870] 1650 [1650, 1650] 2000 [2000, 2000] 2420 [549, 7870]
active_sample
Mean (SD) 4050 (2710) 1220 (726) 3350 (2430) 4530 (2660) NA NA 3430 (2520)
Median [Q1, Q3] 3980 [1390, 6640] 1330 [655, 1420] 3600 [931, 6010] 5680 [1570, 6540] 1150 [1150, 1150] 1950 [1950, 1950] 2380 [1270, 6530]
Median [min, max] 3980 [1330, 6910] 1330 [426, 2380] 3600 [544, 6690] 5680 [1220, 7810] 1150 [1150, 1150] 1950 [1950, 1950] 2380 [426, 7810]
n_event
Mean (SD) 132 (110) 93.0 (128) 194 (152) 300 (215) NA NA 220 (190)
Median [Q1, Q3] 76.0 [75.0, 128] 42.5 [37.3, 47.0] 137 [94.0, 241] 296 [113, 378] 696 [696, 696] 312 [312, 312] 128 [82.0, 330]
Median [min, max] 76.0 [58.0, 323] 42.5 [34.0, 355] 137 [46.0, 658] 296 [73.0, 764] 696 [696, 696] 312 [312, 312] 128 [34.0, 764]
FI_final
Mean (SD) 22.2 (7.46) 13.7 (5.75) 33.1 (17.1) 55.3 (46.3) NA NA 37.9 (33.0)
Median [Q1, Q3] 24.0 [19.0, 27.0] 12.0 [11.0, 13.0] 25.5 [21.3, 40.0] 42.5 [26.8, 50.3] 111 [111, 111] 33.0 [33.0, 33.0] 26.0 [18.0, 42.0]
Median [min, max] 24.0 [11.0, 30.0] 12.0 [9.00, 25.0] 25.5 [15.0, 77.0] 42.5 [15.0, 171] 111 [111, 111] 33.0 [33.0, 33.0] 26.0 [9.00, 171]
FQ_final
Mean (SD) 0.00741 (0.00410) 0.0149 (0.00976) 0.0154 (0.00949) 0.0153 (0.0108) NA NA 0.0163 (0.0154)
Median [Q1, Q3] 0.00754 [0.00391, 0.00828] 0.00990 [0.00810, 0.0220] 0.0153 [0.00635, 0.0202] 0.0130 [0.00661, 0.0187] 0.0966 [0.0966, 0.0966] 0.0169 [0.0169, 0.0169] 0.0131 [0.00670, 0.0193]
Median [min, max] 0.00754 [0.00361, 0.0137] 0.00990 [0.00711, 0.0288] 0.0153 [0.00315, 0.0368] 0.0130 [0.00230, 0.0361] 0.0966 [0.0966, 0.0966] 0.0169 [0.0169, 0.0169] 0.0131 [0.00230, 0.0966]
as.factor(missing_fi)
0 1 (20.0%) 0 (0%) 3 (16.7%) 1 (7.1%) 0 (0%) 1 (100%) 6 (13.3%)
1 3 (60.0%) 4 (66.7%) 11 (61.1%) 6 (42.9%) 0 (0%) 0 (0%) 24 (53.3%)
Missing 1 (20.0%) 2 (33.3%) 4 (22.2%) 7 (50.0%) 1 (100%) 0 (0%) 15 (33.3%)
kruskal.test(FI_final ~ timing, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by timing
## Kruskal-Wallis chi-squared = 16.546, df = 5, p-value = 0.005446
kruskal.test(FQ_final ~ timing, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by timing
## Kruskal-Wallis chi-squared = 5.8108, df = 5, p-value = 0.3251

Box plots

p1 = ggplot(data = p_sig, aes(y = FI_final, x = as.factor(timing), fill = as.factor(timing))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by timing of fracture assessment", x = "Timing of fracture assessment", y = "Fragility index")
p1

(1.3.5) By journal
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(journal_code2), data = p_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
NEJM
(N=31)
Lancet
(N=3)
JAMA
(N=4)
JBMR
(N=1)
JCEM
(N=4)
Other
(N=2)
Overall
(N=45)
no_rand
Mean (SD) 4950 (2700) 1580 (385) 1640 (8.02) NA 1190 (874) 1180 (668) 3860 (2780)
Median [Q1, Q3] 4090 [1820, 7460] 1360 [1360, 1690] 1640 [1640, 1650] 1960 [1960, 1960] 901 [571, 1520] 1180 [940, 1410] 2420 [1640, 7180]
Median [min, max] 4090 [1090, 7870] 1360 [1360, 2030] 1640 [1630, 1650] 1960 [1960, 1960] 901 [549, 2420] 1180 [704, 1650] 2420 [549, 7870]
active_sample
Mean (SD) 4410 (2450) 1350 (518) 1360 (73.1) NA 1130 (934) 847 (428) 3430 (2520)
Median [Q1, Q3] 4090 [1700, 6650] 1050 [1050, 1500] 1370 [1310, 1410] 1950 [1950, 1950] 838 [445, 1520] 847 [695, 998] 2380 [1270, 6530]
Median [min, max] 4090 [882, 7810] 1050 [1050, 1950] 1370 [1270, 1430] 1950 [1950, 1950] 838 [426, 2420] 847 [544, 1150] 2380 [426, 7810]
n_event
Mean (SD) 250 (190) 138 (73.4) 43.0 (10.9) NA 170 (148) 398 (421) 220 (190)
Median [Q1, Q3] 221 [94.5, 353] 100 [96.0, 162] 40.0 [35.5, 47.5] 110 [110, 110] 155 [46.3, 278] 398 [249, 547] 128 [82.0, 330]
Median [min, max] 221 [46.0, 764] 100 [92.0, 223] 40.0 [34.0, 58.0] 110 [110, 110] 155 [41.0, 330] 398 [100, 696] 128 [34.0, 764]
FI_final
Mean (SD) 43.6 (34.3) 24.0 (13.9) 11.0 (1.63) NA 23.0 (15.6) 65.5 (64.3) 37.9 (33.0)
Median [Q1, Q3] 36.0 [23.5, 44.0] 17.0 [16.0, 28.5] 11.0 [10.5, 11.5] 15.0 [15.0, 15.0] 18.0 [12.5, 28.5] 65.5 [42.8, 88.3] 26.0 [18.0, 42.0]
Median [min, max] 36.0 [17.0, 171] 17.0 [15.0, 40.0] 11.0 [9.00, 13.0] 15.0 [15.0, 15.0] 18.0 [11.0, 45.0] 65.5 [20.0, 111] 26.0 [9.00, 171]
FQ_final
Mean (SD) 0.0134 (0.00951) 0.0170 (0.00321) 0.00809 (0.000924) NA 0.0230 (0.00512) 0.0667 (0.0423) 0.0163 (0.0154)
Median [Q1, Q3] 0.0115 [0.00594, 0.0187] 0.0162 [0.0153, 0.0184] 0.00799 [0.00755, 0.00853] 0.00768 [0.00768, 0.00768] 0.0223 [0.0187, 0.0266] 0.0667 [0.0517, 0.0816] 0.0131 [0.00670, 0.0193]
Median [min, max] 0.0115 [0.00230, 0.0361] 0.0162 [0.0143, 0.0206] 0.00799 [0.00711, 0.00928] 0.00768 [0.00768, 0.00768] 0.0223 [0.0186, 0.0288] 0.0667 [0.0368, 0.0966] 0.0131 [0.00230, 0.0966]
as.factor(missing_fi)
0 3 (9.7%) 2 (66.7%) 0 (0%) 0 (0%) 1 (25.0%) 0 (0%) 6 (13.3%)
1 17 (54.8%) 1 (33.3%) 4 (100%) 0 (0%) 1 (25.0%) 1 (50.0%) 24 (53.3%)
Missing 11 (35.5%) 0 (0%) 0 (0%) 1 (100%) 2 (50.0%) 1 (50.0%) 15 (33.3%)
kruskal.test(FI_final ~ journal_code2, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by journal_code2
## Kruskal-Wallis chi-squared = 16.223, df = 5, p-value = 0.006235
kruskal.test(FQ_final ~ journal_code2, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by journal_code2
## Kruskal-Wallis chi-squared = 11.894, df = 5, p-value = 0.03627

Box plots

p1 = ggplot(data = p_sig, aes(y = FI_final, x = as.factor(timing), fill = as.factor(timing))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by timing of fracture assessment", x = "Timing of fracture assessment", y = "Fragility index") 
p1

(1.3.6) By sex
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | sex, data = p_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Both
(N=2)
Women
(N=43)
Overall
(N=45)
no_rand
Mean (SD) 564 (20.5) 4010 (2750) 3860 (2780)
Median [Q1, Q3] 564 [556, 571] 3270 [1650, 7180] 2420 [1640, 7180]
Median [min, max] 564 [549, 578] 3270 [704, 7870] 2420 [549, 7870]
active_sample
Mean (SD) 439 (17.7) 3570 (2500) 3430 (2520)
Median [Q1, Q3] 439 [432, 445] 2420 [1360, 6540] 2380 [1270, 6530]
Median [min, max] 439 [426, 451] 2420 [544, 7810] 2380 [426, 7810]
n_event
Mean (SD) 44.5 (4.95) 229 (191) 220 (190)
Median [Q1, Q3] 44.5 [42.8, 46.3] 168 [84.5, 331] 128 [82.0, 330]
Median [min, max] 44.5 [41.0, 48.0] 168 [34.0, 764] 128 [34.0, 764]
FI_final
Mean (SD) 12.0 (1.41) 39.1 (33.3) 37.9 (33.0)
Median [Q1, Q3] 12.0 [11.5, 12.5] 27.0 [19.5, 42.5] 26.0 [18.0, 42.0]
Median [min, max] 12.0 [11.0, 13.0] 27.0 [9.00, 171] 26.0 [9.00, 171]
FQ_final
Mean (SD) 0.0273 (0.00212) 0.0157 (0.0156) 0.0163 (0.0154)
Median [Q1, Q3] 0.0273 [0.0266, 0.0281] 0.0125 [0.00664, 0.0188] 0.0131 [0.00670, 0.0193]
Median [min, max] 0.0273 [0.0258, 0.0288] 0.0125 [0.00230, 0.0966] 0.0131 [0.00230, 0.0966]
as.factor(missing_fi)
0 0 (0%) 6 (14.0%) 6 (13.3%)
1 0 (0%) 24 (55.8%) 24 (53.3%)
Missing 2 (100%) 13 (30.2%) 15 (33.3%)
kruskal.test(FI_final ~ sex, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by sex
## Kruskal-Wallis chi-squared = 4.271, df = 1, p-value = 0.03877
kruskal.test(FQ_final ~ sex, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by sex
## Kruskal-Wallis chi-squared = 3.1062, df = 1, p-value = 0.078

Box plots

p1 = ggplot(data = p_sig, aes(y = FI_final, x = as.factor(sex), fill = as.factor(sex))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by sex", x = "Sex", y = "Fragility index") 
p1

(1.3.7) By placebo
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | placebo, data = p_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Active
(N=11)
Placebo
(N=34)
Overall
(N=45)
no_rand
Mean (SD) 2930 (1340) 4160 (3060) 3860 (2780)
Median [Q1, Q3] 4090 [1640, 4090] 2220 [1630, 7180] 2420 [1640, 7180]
Median [min, max] 4090 [1360, 4090] 2220 [549, 7870] 2420 [549, 7870]
active_sample
Mean (SD) 2630 (1350) 3690 (2770) 3430 (2520)
Median [Q1, Q3] 3530 [1330, 3750] 2160 [1250, 6640] 2380 [1270, 6530]
Median [min, max] 3530 [1050, 4090] 2160 [426, 7810] 2380 [426, 7810]
n_event
Mean (SD) 226 (193) 219 (192) 220 (190)
Median [Q1, Q3] 221 [68.0, 339] 125 [82.3, 326] 128 [82.0, 330]
Median [min, max] 221 [34.0, 658] 125 [41.0, 764] 128 [34.0, 764]
FI_final
Mean (SD) 32.1 (23.1) 39.8 (35.7) 37.9 (33.0)
Median [Q1, Q3] 26.0 [14.0, 45.0] 26.0 [20.3, 41.5] 26.0 [18.0, 42.0]
Median [min, max] 26.0 [9.00, 77.0] 26.0 [11.0, 171] 26.0 [9.00, 171]
FQ_final
Mean (SD) 0.0118 (0.00431) 0.0177 (0.0174) 0.0163 (0.0154)
Median [Q1, Q3] 0.0115 [0.00762, 0.0153] 0.0137 [0.00614, 0.0255] 0.0131 [0.00670, 0.0193]
Median [min, max] 0.0115 [0.00711, 0.0188] 0.0137 [0.00230, 0.0966] 0.0131 [0.00230, 0.0966]
as.factor(missing_fi)
0 4 (36.4%) 2 (5.9%) 6 (13.3%)
1 7 (63.6%) 17 (50.0%) 24 (53.3%)
Missing 0 (0%) 15 (44.1%) 15 (33.3%)
kruskal.test(FI_final ~ placebo, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by placebo
## Kruskal-Wallis chi-squared = 0.45413, df = 1, p-value = 0.5004
kruskal.test(FQ_final ~ placebo, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by placebo
## Kruskal-Wallis chi-squared = 0.20158, df = 1, p-value = 0.6534

Box plots

p1 = ggplot(data = p_sig, aes(y = FI_final, x = as.factor(control), fill = as.factor(control))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by types of control", x = "Types of control", y = "Fragility index") 
p1

(2) Only analyses from the primary analyses (i.e., those from the extended studies or sensitivity/subgroup analyses will be excluded)

Set-up data

ori_st = subset(fi_sig, sen_analysis == 0)
ori_st_st = subset(ori_st, study == 1)

(2.1) Overall

(2.1.1) Overall
# Comparison
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(sen_analysis), data = fi_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
0
(N=128)
1
(N=17)
Overall
(N=145)
no_rand
Mean (SD) 3010 (2390) 2110 (1220) 2900 (2300)
Median [Q1, Q3] 1960 [1360, 4090] 1650 [1200, 3270] 1960 [1220, 4090]
Median [min, max] 1960 [450, 7870] 1650 [549, 4090] 1960 [450, 7870]
active_sample
Mean (SD) 2630 (2160) 1880 (1140) 2540 (2080)
Median [Q1, Q3] 1770 [1050, 3660] 1440 [1110, 2420] 1770 [1060, 3650]
Median [min, max] 1770 [339, 7810] 1440 [426, 4090] 1770 [339, 7810]
n_event
Mean (SD) 161 (174) 186 (133) 164 (170)
Median [Q1, Q3] 84.0 [52.8, 208] 190 [41.0, 330] 91.0 [52.0, 223]
Median [min, max] 84.0 [10.0, 764] 190 [19.0, 375] 91.0 [10.0, 764]
FI_final
Mean (SD) 16.4 (24.2) 18.1 (20.5) 16.6 (23.8)
Median [Q1, Q3] 9.00 [4.00, 18.3] 11.0 [4.00, 23.0] 9.00 [4.00, 19.0]
Median [min, max] 9.00 [1.00, 171] 11.0 [1.00, 77.0] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00786 (0.0108) 0.0104 (0.00932) 0.00815 (0.0106)
Median [Q1, Q3] 0.00502 [0.00222, 0.00892] 0.00609 [0.00337, 0.0186] 0.00505 [0.00230, 0.00955]
Median [min, max] 0.00502 [0.000151, 0.0966] 0.00609 [0.000946, 0.0312] 0.00505 [0.000151, 0.0966]
as.factor(missing_fi)
0 8 (6.3%) 2 (11.8%) 10 (6.9%)
1 77 (60.2%) 9 (52.9%) 86 (59.3%)
Missing 43 (33.6%) 6 (35.3%) 49 (33.8%)
fi_sig$sensitive[fi_sig$sen_analysis == 1] = "Sensitivity/Posthoc"
  fi_sig$sensitive[fi_sig$sen_analysis == 0] = "Original"
createTable(compareGroups(sensitive ~ no_rand + active_sample + n_event + FI_final + FQ_final + missing_fi, data = fi_sig, method = c(no_rand = 2, active_sample = 2, n_event = 2, FI_final = 2, FQ_final = 2)))
## Warning in chisq.test(xx, correct = FALSE): Chi-squared approximation may be
## incorrect
## 
## --------Summary descriptives table by 'sensitive'---------
## 
## ____________________________________________________________ 
##                   Original     Sensitivity/Posthoc p.overall 
##                    N=128              N=17                   
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
## no_rand       1964 [1360;4093]  1649 [1199;3270]     0.310   
## active_sample 1765 [1049;3664]  1442 [1112;2416]     0.549   
## n_event       84.0 [52.8;208]    190 [41.0;330]      0.336   
## FI_final      9.00 [4.00;18.2]  11.0 [4.00;23.0]     0.622   
## FQ_final      0.01 [0.00;0.01]  0.01 [0.00;0.02]     0.234   
## missing_fi:                                          0.321   
##     0            8 (9.41%)          2 (18.2%)                
##     1            77 (90.6%)         9 (81.8%)                
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
# Description

table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi), data = ori_st, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Overall
(N=128)
no_rand
Mean (SD) 3010 (2390)
Median [Q1, Q3] 1960 [1360, 4090]
Median [min, max] 1960 [450, 7870]
active_sample
Mean (SD) 2630 (2160)
Median [Q1, Q3] 1770 [1050, 3660]
Median [min, max] 1770 [339, 7810]
n_event
Mean (SD) 161 (174)
Median [Q1, Q3] 84.0 [52.8, 208]
Median [min, max] 84.0 [10.0, 764]
FI_final
Mean (SD) 16.4 (24.2)
Median [Q1, Q3] 9.00 [4.00, 18.3]
Median [min, max] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00786 (0.0108)
Median [Q1, Q3] 0.00502 [0.00222, 0.00892]
Median [min, max] 0.00502 [0.000151, 0.0966]
as.factor(missing_fi)
0 8 (6.3%)
1 77 (60.2%)
Missing 43 (33.6%)

Characteristics by studies

table1(~ as.factor(interv_code2) + as.factor(journal_code1) + as.factor(placebo) + sex + no_rand, data = ori_st_st, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
Overall
(N=27)
as.factor(interv_code2)
Bisphosphonates 12 (44.4%)
PTH analog 5 (18.5%)
Romosozumab 2 (7.4%)
Denosumab 2 (7.4%)
Strontium_ranelate 2 (7.4%)
Calcium_VitD 4 (14.8%)
as.factor(journal_code1)
NEJM 12 (44.4%)
Lancet 2 (7.4%)
BMJ 1 (3.7%)
JAMA 3 (11.1%)
Ann Intern Med 1 (3.7%)
JBMR 1 (3.7%)
JCEM 2 (7.4%)
OI 4 (14.8%)
Other 1 (3.7%)
as.factor(placebo)
Active 3 (11.1%)
Placebo 24 (88.9%)
Sex
Both 6 (22.2%)
Men 2 (7.4%)
Women 19 (70.4%)
no_rand
Mean (SD) 2560 (2160)
Median [Q1, Q3] 1910 [1140, 2980]
Median [min, max] 1910 [450, 7870]

Relationship between sample size/active sample/no. events and FI

p = ggplot(data = ori_st, aes(x = no_rand, y = FI_final))
p1 = p + geom_point() + geom_smooth() + labs(x = "Number of participants at randomisation", y = "Fragility index") + theme_bw()

p0 = ggplot(data = ori_st, aes(x = active_sample, y = FI_final))
p2 = p0 + geom_point() + geom_smooth() + labs(x = "Number of participants included in the analyses", y = "Fragility index") + theme_bw()

p.0 = ggplot(data = ori_st, aes(x = n_event, y = FI_final))
p3 = p.0 + geom_point() + geom_smooth() + labs(x = "Number of participants with fracture events", y = "Fragility index") + theme_bw()

#grid.arrange(p1, p2, p3, nrow = 1)
grid.arrange(p1, p3, nrow = 1, top = textGrob("Relationship between Number of participants and Fragility index", gp = gpar(fontsize = 20, font = 3)))
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

(2.1.2) By fracture sites
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(fx_code1), data = ori_st, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Any_fx
(N=3)
Clin_fx
(N=14)
OFx
(N=4)
MOF
(N=6)
Dif_comb
(N=1)
NonVert_fx
(N=19)
Vert_fx
(N=60)
ClinVert_fx
(N=12)
Hip
(N=6)
Forearm
(N=3)
Overall
(N=128)
no_rand
Mean (SD) 1850 (423) 3320 (2510) 2780 (1580) 3800 (2810) NA 3720 (2530) 2650 (2370) 2860 (2470) 4510 (2680) 1830 (314) 3010 (2390)
Median [Q1, Q3] 1770 [1620, 2030] 2080 [1440, 4350] 3050 [1730, 4090] 2870 [1430, 6410] 2690 [2690, 2690] 4090 [1360, 5090] 1630 [1100, 4090] 1980 [1650, 2620] 3680 [2540, 6830] 2000 [1740, 2010] 1960 [1360, 4090]
Median [min, max] 1770 [1470, 2300] 2080 [578, 7740] 3050 [930, 4090] 2870 [1360, 7180] 2690 [2690, 2690] 4090 [450, 7870] 1630 [578, 7870] 1980 [578, 7870] 3680 [1770, 7870] 2000 [1470, 2030] 1960 [450, 7870]
active_sample
Mean (SD) 1830 (439) 2910 (2330) 2670 (1490) 3330 (2410) NA 3310 (2300) 2300 (2140) 2440 (2350) 3700 (2260) 1450 (760) 2630 (2160)
Median [Q1, Q3] 1770 [1600, 2030] 2020 [1140, 4250] 2890 [1690, 3870] 2450 [1360, 5460] 2690 [2690, 2690] 3560 [1250, 4940] 1350 [892, 3400] 1910 [1030, 2330] 2810 [1900, 5660] 1740 [1160, 1880] 1770 [1050, 3660]
Median [min, max] 1770 [1430, 2300] 2020 [451, 6690] 2890 [930, 3980] 2450 [1270, 6380] 2690 [2690, 2690] 3560 [389, 6670] 1350 [451, 7390] 1910 [339, 7810] 2810 [1770, 6600] 1740 [590, 2030] 1770 [339, 7810]
n_event
Mean (SD) 354 (290) 249 (204) 334 (251) 128 (123) NA 262 (222) 112 (138) 75.5 (49.3) 159 (106) 94.7 (29.7) 161 (174)
Median [Q1, Q3] 475 [249, 519] 210 [79.8, 363] 318 [245, 407] 78.5 [47.0, 159] 147 [147, 147] 168 [71.0, 433] 71.0 [38.5, 111] 63.0 [57.0, 80.5] 124 [78.5, 232] 99.0 [81.0, 111] 84.0 [52.8, 208]
Median [min, max] 475 [23.0, 563] 210 [34.0, 764] 318 [44.0, 658] 78.5 [34.0, 355] 147 [147, 147] 168 [37.0, 680] 71.0 [10.0, 696] 63.0 [21.0, 204] 124 [58.0, 315] 99.0 [63.0, 122] 84.0 [10.0, 764]
FI_final
Mean (SD) 16.7 (11.9) 17.0 (22.7) 32.3 (26.2) 11.2 (8.35) NA 9.05 (11.1) 20.5 (30.8) 11.8 (13.9) 7.83 (6.05) 5.00 (3.61) 16.4 (24.2)
Median [Q1, Q3] 22.0 [12.5, 23.5] 9.00 [5.50, 14.8] 31.5 [22.8, 41.0] 9.00 [6.00, 13.5] 4.00 [4.00, 4.00] 3.00 [2.00, 15.5] 11.0 [4.75, 22.3] 6.50 [3.75, 11.3] 8.00 [2.75, 11.8] 4.00 [3.00, 6.50] 9.00 [4.00, 18.3]
Median [min, max] 22.0 [3.00, 25.0] 9.00 [2.00, 89.0] 31.5 [1.00, 65.0] 9.00 [3.00, 26.0] 4.00 [4.00, 4.00] 3.00 [1.00, 43.0] 11.0 [1.00, 171] 6.50 [1.00, 42.0] 8.00 [1.00, 16.0] 4.00 [2.00, 9.00] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00847 (0.00558) 0.00703 (0.00515) 0.0106 (0.00776) 0.00442 (0.00292) NA 0.00285 (0.00238) 0.0112 (0.0145) 0.00457 (0.00231) 0.00290 (0.00292) 0.00352 (0.00161) 0.00786 (0.0108)
Median [Q1, Q3] 0.0109 [0.00647, 0.0117] 0.00702 [0.00197, 0.00903] 0.0122 [0.00592, 0.0169] 0.00454 [0.00227, 0.00699] 0.00149 [0.00149, 0.00149] 0.00239 [0.00108, 0.00370] 0.00671 [0.00313, 0.0139] 0.00449 [0.00305, 0.00515] 0.00168 [0.000801, 0.00514] 0.00339 [0.00268, 0.00429] 0.00502 [0.00222, 0.00892]
Median [min, max] 0.0109 [0.00209, 0.0125] 0.00702 [0.00124, 0.0166] 0.0122 [0.00108, 0.0169] 0.00454 [0.000783, 0.00736] 0.00149 [0.00149, 0.00149] 0.00239 [0.000203, 0.00955] 0.00671 [0.000151, 0.0966] 0.00449 [0.00205, 0.0104] 0.00168 [0.000303, 0.00695] 0.00339 [0.00197, 0.00519] 0.00502 [0.000151, 0.0966]
as.factor(missing_fi)
0 0 (0%) 1 (7.1%) 2 (50.0%) 0 (0%) 0 (0%) 1 (5.3%) 3 (5.0%) 0 (0%) 0 (0%) 1 (33.3%) 8 (6.3%)
1 1 (33.3%) 10 (71.4%) 2 (50.0%) 4 (66.7%) 1 (100%) 11 (57.9%) 37 (61.7%) 6 (50.0%) 3 (50.0%) 2 (66.7%) 77 (60.2%)
Missing 2 (66.7%) 3 (21.4%) 0 (0%) 2 (33.3%) 0 (0%) 7 (36.8%) 20 (33.3%) 6 (50.0%) 3 (50.0%) 0 (0%) 43 (33.6%)
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(fx_code2), data = ori_st, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Any
(N=17)
Osteoporotic
(N=11)
Non-Vertebrae
(N=19)
Vertebrae
(N=60)
Clinical Vertebrae
(N=12)
Hip
(N=6)
Forearm
(N=3)
Overall
(N=128)
no_rand
Mean (SD) 3060 (2340) 3330 (2230) 3720 (2530) 2650 (2370) 2860 (2470) 4510 (2680) 1830 (314) 3010 (2390)
Median [Q1, Q3] 2030 [1470, 4090] 2690 [1500, 4090] 4090 [1360, 5090] 1630 [1100, 4090] 1980 [1650, 2620] 3680 [2540, 6830] 2000 [1740, 2010] 1960 [1360, 4090]
Median [min, max] 2030 [578, 7740] 2690 [930, 7180] 4090 [450, 7870] 1630 [578, 7870] 1980 [578, 7870] 3680 [1770, 7870] 2000 [1470, 2030] 1960 [450, 7870]
active_sample
Mean (SD) 2720 (2150) 3030 (1920) 3310 (2300) 2300 (2140) 2440 (2350) 3700 (2260) 1450 (760) 2630 (2160)
Median [Q1, Q3] 2010 [1280, 3700] 2690 [1360, 3910] 3560 [1250, 4940] 1350 [892, 3400] 1910 [1030, 2330] 2810 [1900, 5660] 1740 [1160, 1880] 1770 [1050, 3660]
Median [min, max] 2010 [451, 6690] 2690 [930, 6380] 3560 [389, 6670] 1350 [451, 7390] 1910 [339, 7810] 2810 [1770, 6600] 1740 [590, 2030] 1770 [339, 7810]
n_event
Mean (SD) 267 (215) 205 (193) 262 (222) 112 (138) 75.5 (49.3) 159 (106) 94.7 (29.7) 161 (174)
Median [Q1, Q3] 231 [76.0, 409] 147 [50.0, 318] 168 [71.0, 433] 71.0 [38.5, 111] 63.0 [57.0, 80.5] 124 [78.5, 232] 99.0 [81.0, 111] 84.0 [52.8, 208]
Median [min, max] 231 [23.0, 764] 147 [34.0, 658] 168 [37.0, 680] 71.0 [10.0, 696] 63.0 [21.0, 204] 124 [58.0, 315] 99.0 [63.0, 122] 84.0 [10.0, 764]
FI_final
Mean (SD) 16.9 (20.9) 18.2 (19.2) 9.05 (11.1) 20.5 (30.8) 11.8 (13.9) 7.83 (6.05) 5.00 (3.61) 16.4 (24.2)
Median [Q1, Q3] 10.0 [5.00, 22.0] 9.00 [4.50, 28.0] 3.00 [2.00, 15.5] 11.0 [4.75, 22.3] 6.50 [3.75, 11.3] 8.00 [2.75, 11.8] 4.00 [3.00, 6.50] 9.00 [4.00, 18.3]
Median [min, max] 10.0 [2.00, 89.0] 9.00 [1.00, 65.0] 3.00 [1.00, 43.0] 11.0 [1.00, 171] 6.50 [1.00, 42.0] 8.00 [1.00, 16.0] 4.00 [2.00, 9.00] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00729 (0.00508) 0.00641 (0.00585) 0.00285 (0.00238) 0.0112 (0.0145) 0.00457 (0.00231) 0.00290 (0.00292) 0.00352 (0.00161) 0.00786 (0.0108)
Median [Q1, Q3] 0.00714 [0.00209, 0.0109] 0.00662 [0.00185, 0.00745] 0.00239 [0.00108, 0.00370] 0.00671 [0.00313, 0.0139] 0.00449 [0.00305, 0.00515] 0.00168 [0.000801, 0.00514] 0.00339 [0.00268, 0.00429] 0.00502 [0.00222, 0.00892]
Median [min, max] 0.00714 [0.00124, 0.0166] 0.00662 [0.000783, 0.0169] 0.00239 [0.000203, 0.00955] 0.00671 [0.000151, 0.0966] 0.00449 [0.00205, 0.0104] 0.00168 [0.000303, 0.00695] 0.00339 [0.00197, 0.00519] 0.00502 [0.000151, 0.0966]
as.factor(missing_fi)
0 1 (5.9%) 2 (18.2%) 1 (5.3%) 3 (5.0%) 0 (0%) 0 (0%) 1 (33.3%) 8 (6.3%)
1 11 (64.7%) 7 (63.6%) 11 (57.9%) 37 (61.7%) 6 (50.0%) 3 (50.0%) 2 (66.7%) 77 (60.2%)
Missing 5 (29.4%) 2 (18.2%) 7 (36.8%) 20 (33.3%) 6 (50.0%) 3 (50.0%) 0 (0%) 43 (33.6%)
kruskal.test(FI_final ~ fx_code2, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by fx_code2
## Kruskal-Wallis chi-squared = 9.608, df = 6, p-value = 0.1422
kruskal.test(FQ_final ~ fx_code2, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by fx_code2
## Kruskal-Wallis chi-squared = 22.351, df = 6, p-value = 0.001046

Box plots

p1 = ggplot(data = ori_st, aes(y = FI_final, x = as.factor(fx_code2), fill = as.factor(fx_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index", x = "Fracture sites", y = "Fragility index") + theme(axis.text.x = element_text(angle = 45, hjust = 1))
p2 = ggplot(data = ori_st, aes(y = FQ_final, x = as.factor(fx_code2), fill = as.factor(fx_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility quotient", x = "Fracture sites", y = "Fragility quotient") + theme(axis.text.x = element_text(angle = 45, hjust = 1))

grid.arrange(p1, p2, nrow = 1, top = textGrob("Fragility of evidence for anti-fracture efficacy by fracture sites", gp = gpar(fontsize = 20, font = 1)))

(2.1.3) By pharmacological interventions

table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(interv_code1), data = ori_st, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Alendronate
(N=7)
Ibandronate
(N=6)
Risedronate
(N=8)
Minodronate
(N=3)
Zoledronate
(N=23)
Teriparatide
(N=23)
Abaloparatide
(N=3)
Romosozumab
(N=26)
Denosumab
(N=9)
Strontium_ranelate
(N=9)
Calcium_VitD
(N=11)
Overall
(N=128)
no_rand
Mean (SD) 2700 (1190) 1960 (0) 1240 (420) 704 (0) 3100 (2860) 1180 (417) 1650 (0) 5520 (1570) 5020 (3370) 3180 (1810) 1970 (899) 3010 (2390)
Median [Q1, Q3] 2030 [2030, 3230] 1960 [1960, 1960] 1280 [815, 1630] 704 [704, 704] 2000 [1200, 4930] 1100 [1090, 1360] 1650 [1650, 1650] 4090 [4090, 7180] 7870 [1470, 7870] 1650 [1650, 5090] 1770 [1470, 2490] 1960 [1360, 4090]
Median [min, max] 2030 [1910, 4430] 1960 [1960, 1960] 1280 [814, 1630] 704 [704, 704] 2000 [665, 7740] 1100 [578, 2530] 1650 [1650, 1650] 4090 [4090, 7180] 7870 [1470, 7870] 1650 [1650, 5090] 1770 [450, 3270] 1960 [450, 7870]
active_sample
Mean (SD) 2640 (1120) 1950 (0) 1050 (393) 575 (27.7) 2510 (2310) 971 (331) 1310 (75.5) 4970 (1540) 4600 (3080) 2770 (1790) 1530 (789) 2630 (2160)
Median [Q1, Q3] 2030 [1990, 3080] 1950 [1950, 1950] 1020 [684, 1340] 582 [563, 590] 1740 [894, 3840] 892 [864, 1130] 1280 [1270, 1340] 3910 [3620, 6640] 6600 [1350, 7390] 1440 [1390, 4930] 1770 [760, 2030] 1770 [1050, 3660]
Median [min, max] 2030 [1910, 4430] 1950 [1950, 1950] 1020 [663, 1630] 582 [544, 598] 1740 [339, 6550] 892 [451, 1700] 1280 [1270, 1400] 3910 [3240, 6910] 6600 [1350, 7810] 1440 [1150, 4940] 1770 [389, 2690] 1770 [339, 7810]
n_event
Mean (SD) 181 (141) 81.5 (23.1) 88.1 (37.9) 79.3 (20.5) 171 (209) 52.9 (25.1) 51.3 (21.9) 203 (148) 140 (180) 428 (247) 205 (180) 161 (174)
Median [Q1, Q3] 121 [68.0, 273] 70.5 [64.5, 101] 68.5 [64.8, 99.3] 79.0 [69.0, 89.5] 73.0 [39.0, 240] 48.0 [34.5, 71.5] 44.0 [39.0, 60.0] 168 [105, 253] 69.0 [29.0, 121] 471 [204, 671] 147 [64.0, 289] 84.0 [52.8, 208]
Median [min, max] 121 [56.0, 409] 70.5 [63.0, 112] 68.5 [58.0, 154] 79.0 [59.0, 100] 73.0 [13.0, 764] 48.0 [14.0, 100] 44.0 [34.0, 76.0] 168 [10.0, 658] 69.0 [15.0, 531] 471 [66.0, 696] 147 [37.0, 563] 84.0 [10.0, 764]
FI_final
Mean (SD) 13.1 (12.6) 8.50 (4.68) 7.25 (4.83) 10.0 (9.17) 23.1 (38.3) 9.04 (7.54) 8.67 (4.51) 20.8 (16.6) 25.1 (43.7) 26.6 (35.5) 8.36 (8.85) 16.4 (24.2)
Median [Q1, Q3] 11.0 [5.50, 13.5] 7.50 [4.50, 12.0] 7.50 [3.50, 11.0] 8.00 [5.00, 14.0] 9.00 [3.50, 25.5] 7.00 [2.50, 14.0] 9.00 [6.50, 11.0] 18.0 [7.00, 29.3] 4.00 [3.00, 17.0] 12.0 [5.00, 29.0] 4.00 [2.00, 13.5] 9.00 [4.00, 18.3]
Median [min, max] 11.0 [3.00, 40.0] 7.50 [4.00, 15.0] 7.50 [1.00, 14.0] 8.00 [2.00, 20.0] 9.00 [1.00, 171] 7.00 [1.00, 25.0] 9.00 [4.00, 13.0] 18.0 [1.00, 65.0] 4.00 [2.00, 137] 12.0 [1.00, 111] 4.00 [1.00, 25.0] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00588 (0.00679) 0.00435 (0.00240) 0.00832 (0.00658) 0.0180 (0.0171) 0.00780 (0.00683) 0.0103 (0.00915) 0.00651 (0.00311) 0.00451 (0.00413) 0.00432 (0.00546) 0.0191 (0.0311) 0.00501 (0.00387) 0.00786 (0.0108)
Median [Q1, Q3] 0.00314 [0.00178, 0.00617] 0.00384 [0.00231, 0.00615] 0.00777 [0.00434, 0.00996] 0.0137 [0.00855, 0.0253] 0.00537 [0.00339, 0.0101] 0.00770 [0.00249, 0.0153] 0.00711 [0.00512, 0.00819] 0.00330 [0.00140, 0.00598] 0.00255 [0.00222, 0.00296] 0.00795 [0.00101, 0.0137] 0.00353 [0.00244, 0.00659] 0.00502 [0.00222, 0.00892]
Median [min, max] 0.00314 [0.00157, 0.0206] 0.00384 [0.00205, 0.00768] 0.00777 [0.000615, 0.0203] 0.0137 [0.00334, 0.0368] 0.00537 [0.000887, 0.0301] 0.00770 [0.00114, 0.0288] 0.00711 [0.00314, 0.00928] 0.00330 [0.000151, 0.0169] 0.00255 [0.000303, 0.0185] 0.00795 [0.000203, 0.0966] 0.00353 [0.000567, 0.0125] 0.00502 [0.000151, 0.0966]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 0 (0%) 0 (0%) 5 (21.7%) 2 (8.7%) 0 (0%) 1 (3.8%) 0 (0%) 0 (0%) 0 (0%) 8 (6.3%)
1 5 (71.4%) 0 (0%) 7 (87.5%) 3 (100%) 18 (78.3%) 5 (21.7%) 3 (100%) 25 (96.2%) 4 (44.4%) 1 (11.1%) 6 (54.5%) 77 (60.2%)
Missing 2 (28.6%) 6 (100%) 1 (12.5%) 0 (0%) 0 (0%) 16 (69.6%) 0 (0%) 0 (0%) 5 (55.6%) 8 (88.9%) 5 (45.5%) 43 (33.6%)
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(interv_code2), data = ori_st, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Bisphosphonates
(N=47)
PTH analog
(N=26)
Romosozumab
(N=26)
Denosumab
(N=9)
Strontium_ranelate
(N=9)
Calcium_VitD
(N=11)
Overall
(N=128)
no_rand
Mean (SD) 2430 (2200) 1240 (419) 5520 (1570) 5020 (3370) 3180 (1810) 1970 (899) 3010 (2390)
Median [Q1, Q3] 1960 [1200, 2030] 1230 [1090, 1360] 4090 [4090, 7180] 7870 [1470, 7870] 1650 [1650, 5090] 1770 [1470, 2490] 1960 [1360, 4090]
Median [min, max] 1960 [665, 7740] 1230 [578, 2530] 4090 [4090, 7180] 7870 [1470, 7870] 1650 [1650, 5090] 1770 [450, 3270] 1960 [450, 7870]
active_sample
Mean (SD) 2090 (1800) 1010 (330) 4970 (1540) 4600 (3080) 2770 (1790) 1530 (789) 2630 (2160)
Median [Q1, Q3] 1860 [725, 1980] 971 [880, 1270] 3910 [3620, 6640] 6600 [1350, 7390] 1440 [1390, 4930] 1770 [760, 2030] 1770 [1050, 3660]
Median [min, max] 1860 [339, 6550] 971 [451, 1700] 3910 [3240, 6910] 6600 [1350, 7810] 1440 [1150, 4940] 1770 [389, 2690] 1770 [339, 7810]
n_event
Mean (SD) 141 (160) 52.7 (24.3) 203 (148) 140 (180) 428 (247) 205 (180) 161 (174)
Median [Q1, Q3] 73.0 [59.5, 141] 47.0 [34.3, 72.0] 168 [105, 253] 69.0 [29.0, 121] 471 [204, 671] 147 [64.0, 289] 84.0 [52.8, 208]
Median [min, max] 73.0 [13.0, 764] 47.0 [14.0, 100] 168 [10.0, 658] 69.0 [15.0, 531] 471 [66.0, 696] 147 [37.0, 563] 84.0 [10.0, 764]
FI_final
Mean (SD) 16.2 (27.9) 9.00 (7.19) 20.8 (16.6) 25.1 (43.7) 26.6 (35.5) 8.36 (8.85) 16.4 (24.2)
Median [Q1, Q3] 9.00 [4.00, 14.0] 7.50 [3.00, 13.0] 18.0 [7.00, 29.3] 4.00 [3.00, 17.0] 12.0 [5.00, 29.0] 4.00 [2.00, 13.5] 9.00 [4.00, 18.3]
Median [min, max] 9.00 [1.00, 171] 7.50 [1.00, 25.0] 18.0 [1.00, 65.0] 4.00 [2.00, 137] 12.0 [1.00, 111] 4.00 [1.00, 25.0] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00781 (0.00756) 0.00985 (0.00872) 0.00451 (0.00413) 0.00432 (0.00546) 0.0191 (0.0311) 0.00501 (0.00387) 0.00786 (0.0108)
Median [Q1, Q3] 0.00537 [0.00301, 0.00891] 0.00741 [0.00273, 0.0130] 0.00330 [0.00140, 0.00598] 0.00255 [0.00222, 0.00296] 0.00795 [0.00101, 0.0137] 0.00353 [0.00244, 0.00659] 0.00502 [0.00222, 0.00892]
Median [min, max] 0.00537 [0.000615, 0.0368] 0.00741 [0.00114, 0.0288] 0.00330 [0.000151, 0.0169] 0.00255 [0.000303, 0.0185] 0.00795 [0.000203, 0.0966] 0.00353 [0.000567, 0.0125] 0.00502 [0.000151, 0.0966]
as.factor(missing_fi)
0 5 (10.6%) 2 (7.7%) 1 (3.8%) 0 (0%) 0 (0%) 0 (0%) 8 (6.3%)
1 33 (70.2%) 8 (30.8%) 25 (96.2%) 4 (44.4%) 1 (11.1%) 6 (54.5%) 77 (60.2%)
Missing 9 (19.1%) 16 (61.5%) 0 (0%) 5 (55.6%) 8 (88.9%) 5 (45.5%) 43 (33.6%)
kruskal.test(FI_final ~ interv_code2, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by interv_code2
## Kruskal-Wallis chi-squared = 10.697, df = 5, p-value = 0.05774
kruskal.test(FQ_final ~ interv_code2, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by interv_code2
## Kruskal-Wallis chi-squared = 10.738, df = 5, p-value = 0.05682

Box plots

p1 = ggplot(data = ori_st, aes(y = FI_final, x = as.factor(interv_code2), fill = as.factor(interv_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index", x = "Pharmacological interventions", y = "Fragility index") + theme(axis.text.x = element_text(angle = 45, hjust = 1))
p2 = ggplot(data = ori_st, aes(y = FQ_final, x = as.factor(interv_code2), fill = as.factor(interv_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility quotient", x = "Pharmacological interventions", y = "Fragility quotine") + theme(axis.text.x = element_text(angle = 45, hjust = 1))

grid.arrange(p1, p2, nrow = 1, top = textGrob("Fragility of evidence for anti-fracture efficacy by medications", gp = gpar(fontsize = 20, font = 1)))

#### (2.1.4) Timing of fracture assessment

table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(timing), data = ori_st, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
2
(N=25)
3
(N=11)
4
(N=45)
5
(N=29)
6
(N=6)
7
(N=5)
8
(N=7)
Overall
(N=128)
no_rand
Mean (SD) 3030 (2410) 1640 (1020) 2760 (2250) 4140 (2990) 2340 (1650) 3640 (1980) 2100 (259) 3010 (2390)
Median [Q1, Q3] 1650 [1360, 4090] 1650 [641, 2090] 1470 [1100, 4090] 2130 [1770, 7740] 1650 [1120, 3740] 5090 [1470, 5090] 2000 [2000, 2000] 1960 [1360, 4090]
Median [min, max] 1650 [578, 7180] 1650 [578, 3270] 1470 [665, 7180] 2130 [450, 7870] 1650 [930, 4430] 5090 [1470, 5090] 2000 [2000, 2690] 1960 [450, 7870]
active_sample
Mean (SD) 2730 (2230) 1140 (549) 2480 (2060) 3560 (2620) 2090 (1710) 2930 (2210) 2000 (315) 2630 (2160)
Median [Q1, Q3] 1390 [1160, 3700] 1280 [517, 1560] 1360 [892, 3610] 1950 [1440, 6450] 1150 [985, 3390] 3650 [590, 4940] 1890 [1860, 1980] 1770 [1050, 3660]
Median [min, max] 1390 [476, 6910] 1280 [451, 1770] 1360 [544, 6690] 1950 [339, 7810] 1150 [759, 4430] 3650 [567, 4940] 1890 [1740, 2690] 1770 [339, 7810]
n_event
Mean (SD) 86.6 (70.2) 59.4 (38.8) 133 (137) 238 (212) 257 (252) 418 (301) 186 (127) 161 (174)
Median [Q1, Q3] 65.0 [52.0, 128] 48.0 [35.0, 68.0] 83.0 [44.0, 178] 140 [73.0, 387] 163 [81.3, 358] 537 [122, 671] 147 [85.5, 281] 84.0 [52.8, 208]
Median [min, max] 65.0 [10.0, 323] 48.0 [21.0, 163] 83.0 [14.0, 658] 140 [23.0, 764] 163 [44.0, 696] 537 [70.0, 691] 147 [48.0, 377] 84.0 [10.0, 764]
FI_final
Mean (SD) 7.92 (8.25) 7.09 (4.16) 16.0 (14.7) 28.0 (40.3) 24.7 (42.5) 8.20 (11.7) 13.6 (9.85) 16.4 (24.2)
Median [Q1, Q3] 5.00 [3.00, 9.00] 7.00 [4.00, 10.0] 11.0 [5.00, 23.0] 14.0 [4.00, 38.0] 9.50 [4.75, 12.8] 3.00 [2.00, 5.00] 10.0 [7.50, 16.5] 9.00 [4.00, 18.3]
Median [min, max] 5.00 [1.00, 30.0] 7.00 [1.00, 13.0] 11.0 [1.00, 65.0] 14.0 [1.00, 171] 9.50 [1.00, 111] 3.00 [2.00, 29.0] 10.0 [4.00, 33.0] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00401 (0.00394) 0.00829 (0.00773) 0.00864 (0.00832) 0.00834 (0.00866) 0.0197 (0.0378) 0.00330 (0.00292) 0.00703 (0.00510) 0.00786 (0.0108)
Median [Q1, Q3] 0.00222 [0.00147, 0.00505] 0.00711 [0.00376, 0.00907] 0.00543 [0.00307, 0.0115] 0.00653 [0.00230, 0.0109] 0.00421 [0.00197, 0.00915] 0.00339 [0.00101, 0.00353] 0.00537 [0.00421, 0.00851] 0.00502 [0.00222, 0.00892]
Median [min, max] 0.00222 [0.000151, 0.0150] 0.00711 [0.000567, 0.0288] 0.00543 [0.000554, 0.0368] 0.00653 [0.000203, 0.0361] 0.00421 [0.00108, 0.0966] 0.00339 [0.000608, 0.00795] 0.00537 [0.00149, 0.0169] 0.00502 [0.000151, 0.0966]
as.factor(missing_fi)
0 1 (4.0%) 0 (0%) 2 (4.4%) 0 (0%) 0 (0%) 0 (0%) 5 (71.4%) 8 (6.3%)
1 19 (76.0%) 8 (72.7%) 31 (68.9%) 14 (48.3%) 1 (16.7%) 2 (40.0%) 2 (28.6%) 77 (60.2%)
Missing 5 (20.0%) 3 (27.3%) 12 (26.7%) 15 (51.7%) 5 (83.3%) 3 (60.0%) 0 (0%) 43 (33.6%)
kruskal.test(FI_final ~ timing, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by timing
## Kruskal-Wallis chi-squared = 12.519, df = 6, p-value = 0.05134
kruskal.test(FQ_final ~ timing, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by timing
## Kruskal-Wallis chi-squared = 11.272, df = 6, p-value = 0.08032

Box plots

p1 = ggplot(data = ori_st, aes(y = FI_final, x = as.factor(timing), fill = as.factor(timing))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by timing of fracture assessment", x = "Timing of fracture assessment", y = "Fragility index")
p1

(2.1.5) By journal
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(journal_code2), data = ori_st, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
NEJM
(N=69)
Lancet
(N=9)
BMJ
(N=5)
JAMA
(N=10)
Ann Intern Med
(N=1)
JBMR
(N=6)
JCEM
(N=5)
Other
(N=23)
Overall
(N=128)
no_rand
Mean (SD) 4040 (2660) 1660 (352) 2160 (397) 2190 (1180) NA 1960 (0) 1480 (2020) 1590 (1440) 3010 (2390)
Median [Q1, Q3] 4090 [1470, 7180] 1360 [1360, 2030] 2300 [1770, 2300] 1640 [1630, 1650] 2530 [2530, 2530] 1960 [1960, 1960] 578 [578, 578] 939 [704, 1560] 1960 [1360, 4090]
Median [min, max] 4090 [450, 7870] 1360 [1360, 2030] 2300 [1770, 2690] 1640 [1630, 4430] 2530 [2530, 2530] 1960 [1960, 1960] 578 [578, 5090] 939 [665, 5090] 1960 [450, 7870]
active_sample
Mean (SD) 3500 (2430) 1490 (490) 2160 (397) 1950 (1230) NA 1950 (0) 1350 (2000) 1350 (1320) 2630 (2160)
Median [Q1, Q3] 3400 [1350, 6430] 1160 [1050, 2030] 2300 [1770, 2300] 1390 [1290, 1580] 1700 [1700, 1700] 1950 [1950, 1950] 451 [451, 476] 690 [659, 1360] 1770 [1050, 3660]
Median [min, max] 3400 [339, 7810] 1160 [1050, 2030] 2300 [1770, 2690] 1390 [1270, 4430] 1700 [1700, 1700] 1950 [1950, 1950] 451 [451, 4930] 690 [544, 4940] 1770 [339, 7810]
n_event
Mean (SD) 168 (170) 115 (96.4) 352 (167) 108 (112) NA 81.5 (23.1) 122 (195) 174 (228) 161 (174)
Median [Q1, Q3] 103 [48.0, 231] 91.0 [63.0, 100] 315 [262, 475] 70.5 [47.5, 112] 60.0 [60.0, 60.0] 70.5 [64.5, 101] 35.0 [34.0, 48.0] 69.0 [56.0, 132] 84.0 [52.8, 208]
Median [min, max] 103 [10.0, 764] 91.0 [14.0, 322] 315 [147, 563] 70.5 [34.0, 409] 60.0 [60.0, 60.0] 70.5 [63.0, 112] 35.0 [21.0, 471] 69.0 [22.0, 696] 84.0 [10.0, 764]
FI_final
Mean (SD) 21.3 (29.0) 12.9 (11.5) 15.6 (8.44) 8.20 (4.47) NA 8.50 (4.68) 4.80 (4.76) 11.7 (22.7) 16.4 (24.2)
Median [Q1, Q3] 10.0 [5.00, 26.0] 11.0 [4.00, 15.0] 16.0 [11.0, 22.0] 10.0 [4.75, 11.0] 7.00 [7.00, 7.00] 7.50 [4.50, 12.0] 4.00 [2.00, 4.00] 5.00 [3.00, 10.5] 9.00 [4.00, 18.3]
Median [min, max] 10.0 [1.00, 171] 11.0 [2.00, 40.0] 16.0 [4.00, 25.0] 10.0 [1.00, 13.0] 7.00 [7.00, 7.00] 7.50 [4.00, 15.0] 4.00 [1.00, 13.0] 5.00 [1.00, 111] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00700 (0.00778) 0.00877 (0.00681) 0.00760 (0.00430) 0.00504 (0.00332) NA 0.00435 (0.00240) 0.0101 (0.0110) 0.0119 (0.0202) 0.00786 (0.0108)
Median [Q1, Q3] 0.00391 [0.00222, 0.00748] 0.00691 [0.00259, 0.0143] 0.00695 [0.00623, 0.0109] 0.00513 [0.00197, 0.00793] 0.00412 [0.00412, 0.00412] 0.00384 [0.00231, 0.00615] 0.00840 [0.00443, 0.00887] 0.00527 [0.00278, 0.0122] 0.00502 [0.00222, 0.00892]
Median [min, max] 0.00391 [0.000151, 0.0361] 0.00691 [0.00191, 0.0206] 0.00695 [0.00149, 0.0125] 0.00513 [0.000615, 0.00928] 0.00412 [0.00412, 0.00412] 0.00384 [0.00205, 0.00768] 0.00840 [0.000203, 0.0288] 0.00527 [0.000608, 0.0966] 0.00502 [0.000151, 0.0966]
as.factor(missing_fi)
0 6 (8.7%) 2 (22.2%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 8 (6.3%)
1 45 (65.2%) 7 (77.8%) 1 (20.0%) 8 (80.0%) 1 (100%) 0 (0%) 1 (20.0%) 14 (60.9%) 77 (60.2%)
Missing 18 (26.1%) 0 (0%) 4 (80.0%) 2 (20.0%) 0 (0%) 6 (100%) 4 (80.0%) 9 (39.1%) 43 (33.6%)
kruskal.test(FI_final ~ journal_code2, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by journal_code2
## Kruskal-Wallis chi-squared = 10.988, df = 7, p-value = 0.1392
kruskal.test(FQ_final ~ journal_code2, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by journal_code2
## Kruskal-Wallis chi-squared = 3.6893, df = 7, p-value = 0.8148

Box plots

p1 = ggplot(data = ori_st, aes(y = FI_final, x = as.factor(timing), fill = as.factor(timing))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by timing of fracture assessment", x = "Timing of fracture assessment", y = "Fragility index") 
p1

(2.1.6) By sex
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | sex, data = ori_st, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Both
(N=13)
Men
(N=9)
Women
(N=106)
Overall
(N=128)
no_rand
Mean (SD) 1020 (755) 1320 (142) 3400 (2440) 3010 (2390)
Median [Q1, Q3] 665 [578, 930] 1200 [1200, 1470] 2000 [1630, 4930] 1960 [1360, 4090]
Median [min, max] 665 [450, 2690] 1200 [1200, 1470] 2000 [704, 7870] 1960 [450, 7870]
active_sample
Mean (SD) 715 (613) 1240 (132) 2980 (2200) 2630 (2160)
Median [Q1, Q3] 479 [451, 661] 1130 [1130, 1350] 1950 [1280, 4360] 1770 [1050, 3660]
Median [min, max] 479 [339, 2690] 1130 [1130, 1430] 1950 [544, 7810] 1770 [339, 7810]
n_event
Mean (SD) 65.5 (59.4) 26.2 (9.56) 185 (182) 161 (174)
Median [Q1, Q3] 44.0 [35.0, 60.0] 23.0 [21.0, 36.0] 102 [64.3, 248] 84.0 [52.8, 208]
Median [min, max] 44.0 [21.0, 231] 23.0 [13.0, 39.0] 102 [10.0, 764] 84.0 [10.0, 764]
FI_final
Mean (SD) 4.77 (3.75) 3.11 (1.62) 18.9 (25.9) 16.4 (24.2)
Median [Q1, Q3] 4.00 [2.00, 7.00] 3.00 [2.00, 4.00] 11.0 [5.00, 22.8] 9.00 [4.00, 18.3]
Median [min, max] 4.00 [1.00, 13.0] 3.00 [1.00, 6.00] 11.0 [1.00, 171] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00863 (0.00772) 0.00252 (0.00139) 0.00822 (0.0115) 0.00786 (0.0108)
Median [Q1, Q3] 0.00514 [0.00443, 0.0107] 0.00222 [0.00177, 0.00296] 0.00532 [0.00231, 0.00908] 0.00502 [0.00222, 0.00892]
Median [min, max] 0.00514 [0.00108, 0.0288] 0.00222 [0.000887, 0.00532] 0.00532 [0.000151, 0.0966] 0.00502 [0.000151, 0.0966]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 8 (7.5%) 8 (6.3%)
1 8 (61.5%) 9 (100%) 60 (56.6%) 77 (60.2%)
Missing 5 (38.5%) 0 (0%) 38 (35.8%) 43 (33.6%)
kruskal.test(FI_final ~ sex, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by sex
## Kruskal-Wallis chi-squared = 20.603, df = 2, p-value = 3.358e-05
kruskal.test(FQ_final ~ sex, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by sex
## Kruskal-Wallis chi-squared = 6.6623, df = 2, p-value = 0.03575

Box plots

p1 = ggplot(data = ori_st, aes(y = FI_final, x = as.factor(sex), fill = as.factor(sex))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by sex", x = "Sex", y = "Fragility index") 
p1

(2.1.7) By placebo
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | placebo, data = ori_st, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
Active
(N=26)
Placebo
(N=102)
Overall
(N=128)
no_rand
Mean (SD) 2880 (1340) 3040 (2590) 3010 (2390)
Median [Q1, Q3] 4090 [1360, 4090] 1960 [1120, 5090] 1960 [1360, 4090]
Median [min, max] 4090 [1360, 4090] 1960 [450, 7870] 1960 [450, 7870]
active_sample
Mean (SD) 2500 (1210) 2660 (2340) 2630 (2160)
Median [Q1, Q3] 3280 [1300, 3640] 1770 [885, 4810] 1770 [1050, 3660]
Median [min, max] 3280 [1050, 3980] 1770 [339, 7810] 1770 [339, 7810]
n_event
Mean (SD) 173 (161) 158 (178) 161 (174)
Median [Q1, Q3] 104 [53.8, 247] 77.5 [52.3, 176] 84.0 [52.8, 208]
Median [min, max] 104 [14.0, 658] 77.5 [10.0, 764] 84.0 [10.0, 764]
FI_final
Mean (SD) 15.1 (15.8) 16.7 (26.0) 16.4 (24.2)
Median [Q1, Q3] 9.50 [5.00, 16.5] 8.00 [4.00, 18.8] 9.00 [4.00, 18.3]
Median [min, max] 9.50 [2.00, 65.0] 8.00 [1.00, 171] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00622 (0.00493) 0.00828 (0.0118) 0.00786 (0.0108)
Median [Q1, Q3] 0.00528 [0.00210, 0.00874] 0.00502 [0.00231, 0.00875] 0.00502 [0.00222, 0.00892]
Median [min, max] 0.00528 [0.000554, 0.0169] 0.00502 [0.000151, 0.0966] 0.00502 [0.000151, 0.0966]
as.factor(missing_fi)
0 3 (11.5%) 5 (4.9%) 8 (6.3%)
1 20 (76.9%) 57 (55.9%) 77 (60.2%)
Missing 3 (11.5%) 40 (39.2%) 43 (33.6%)
kruskal.test(FI_final ~ placebo, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by placebo
## Kruskal-Wallis chi-squared = 0.33785, df = 1, p-value = 0.5611
kruskal.test(FQ_final ~ placebo, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by placebo
## Kruskal-Wallis chi-squared = 0.028491, df = 1, p-value = 0.866

Box plots

p1 = ggplot(data = ori_st, aes(y = FI_final, x = as.factor(control), fill = as.factor(control))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by types of control", x = "Types of control", y = "Fragility index") 
p1

(2.2) Fracture as the predefined primary endpoint

(2.2.1) Overall
# Comparison:
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | fx_primary , data = ori_st, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
Primary endpoint
(N=28)
Secondary endpoint
(N=100)
Overall
(N=128)
no_rand
Mean (SD) 3050 (2430) 3000 (2390) 3010 (2390)
Median [Q1, Q3] 1980 [1320, 4180] 1960 [1360, 4090] 1960 [1360, 4090]
Median [min, max] 1980 [578, 7870] 1960 [450, 7870] 1960 [450, 7870]
active_sample
Mean (SD) 2600 (2190) 2640 (2160) 2630 (2160)
Median [Q1, Q3] 1730 [1010, 3780] 1770 [1090, 3660] 1770 [1050, 3660]
Median [min, max] 1730 [451, 7390] 1770 [339, 7810] 1770 [339, 7810]
n_event
Mean (SD) 175 (156) 158 (179) 161 (174)
Median [Q1, Q3] 111 [71.3, 225] 74.5 [50.3, 181] 84.0 [52.8, 208]
Median [min, max] 111 [34.0, 671] 74.5 [10.0, 764] 84.0 [10.0, 764]
FI_final
Mean (SD) 28.4 (38.0) 13.0 (17.5) 16.4 (24.2)
Median [Q1, Q3] 14.5 [11.0, 27.8] 7.00 [3.00, 16.3] 9.00 [4.00, 18.3]
Median [min, max] 14.5 [1.00, 171] 7.00 [1.00, 111] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.0137 (0.0108) 0.00621 (0.0103) 0.00786 (0.0108)
Median [Q1, Q3] 0.00997 [0.00584, 0.0204] 0.00354 [0.00205, 0.00717] 0.00502 [0.00222, 0.00892]
Median [min, max] 0.00997 [0.000567, 0.0368] 0.00354 [0.000151, 0.0966] 0.00502 [0.000151, 0.0966]
as.factor(missing_fi)
0 2 (7.1%) 6 (6.0%) 8 (6.3%)
1 17 (60.7%) 60 (60.0%) 77 (60.2%)
Missing 9 (32.1%) 34 (34.0%) 43 (33.6%)
createTable(compareGroups(fx_primary ~ no_rand + active_sample + n_event + FI_final + FQ_final + missing_fi, data = ori_st, method = c(no_rand = 2, active_sample = 2, n_event = 2, FI_final = 2, FQ_final = 2)))
## Warning in chisq.test(xx, correct = FALSE): Chi-squared approximation may be
## incorrect
## 
## --------Summary descriptives table by 'fx_primary'---------
## 
## ___________________________________________________________ 
##               Primary endpoint Secondary endpoint p.overall 
##                     N=28             N=100                  
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
## no_rand       1982 [1320;4178]  1964 [1360;4093]    0.808   
## active_sample 1733 [1010;3778]  1765 [1088;3664]    0.940   
## n_event        111 [71.2;225]   74.5 [50.2;181]     0.135   
## FI_final      14.5 [11.0;27.8]  7.00 [3.00;16.2]   <0.001   
## FQ_final      0.01 [0.01;0.02]  0.00 [0.00;0.01]   <0.001   
## missing_fi:                                         1.000   
##     0            2 (10.5%)         6 (9.09%)                
##     1            17 (89.5%)        60 (90.9%)               
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
# Description:
fx_prim2 = subset(ori_st, pri_endpoint == 1)
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi), data = fx_prim2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Overall
(N=28)
no_rand
Mean (SD) 3050 (2430)
Median [Q1, Q3] 1980 [1320, 4180]
Median [min, max] 1980 [578, 7870]
active_sample
Mean (SD) 2600 (2190)
Median [Q1, Q3] 1730 [1010, 3780]
Median [min, max] 1730 [451, 7390]
n_event
Mean (SD) 175 (156)
Median [Q1, Q3] 111 [71.3, 225]
Median [min, max] 111 [34.0, 671]
FI_final
Mean (SD) 28.4 (38.0)
Median [Q1, Q3] 14.5 [11.0, 27.8]
Median [min, max] 14.5 [1.00, 171]
FQ_final
Mean (SD) 0.0137 (0.0108)
Median [Q1, Q3] 0.00997 [0.00584, 0.0204]
Median [min, max] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 2 (7.1%)
1 17 (60.7%)
Missing 9 (32.1%)

Relationship between sample size/active sample/no. events and FI

p = ggplot(data = fx_prim2, aes(x = no_rand, y = FI_final))
p1 = p + geom_point() + geom_smooth() + labs(x = "Number of participants at randomisation", y = "Fragility index") + theme_bw()

p0 = ggplot(data = fx_prim2, aes(x = active_sample, y = FI_final))
p2 = p0 + geom_point() + geom_smooth() + labs(x = "Number of participants included in the analyses", y = "Fragility index") + theme_bw()

p.0 = ggplot(data =  fx_prim2, aes(x = n_event, y = FI_final))
p3 = p.0 + geom_point() + geom_smooth() + labs(x = "Number of participants with fracture events", y = "Fragility index") + theme_bw()

#grid.arrange(p1, p2, p3, nrow = 1)
grid.arrange(p1, p3, nrow = 1, top = textGrob("Relationship between Number of participants and Fragility index", gp = gpar(fontsize = 20, font = 3)))
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

(2.2.2) By fracture sites
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(fx_code1), data =  fx_prim2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Clin_fx
(N=2)
OFx
(N=1)
NonVert_fx
(N=1)
Vert_fx
(N=22)
Hip
(N=2)
Overall
(N=28)
no_rand
Mean (SD) 3110 (1390) NA NA 2770 (2470) 5500 (3160) 3050 (2430)
Median [Q1, Q3] 3110 [2620, 3600] 2000 [2000, 2000] 5090 [5090, 5090] 1650 [1120, 3700] 5500 [4390, 6620] 1980 [1320, 4180]
Median [min, max] 3110 [2130, 4090] 2000 [2000, 2000] 5090 [5090, 5090] 1650 [578, 7870] 5500 [3270, 7740] 1980 [578, 7870]
active_sample
Mean (SD) 2060 (2240) NA NA 2440 (2210) 4110 (3310) 2600 (2190)
Median [Q1, Q3] 2060 [1270, 2850] 1950 [1950, 1950] 4940 [4940, 4940] 1440 [931, 3230] 4110 [2940, 5280] 1730 [1010, 3780]
Median [min, max] 2060 [479, 3640] 1950 [1950, 1950] 4940 [4940, 4940] 1440 [451, 7390] 4110 [1770, 6450] 1730 [451, 7390]
n_event
Mean (SD) 348 (165) NA NA 137 (112) 99.0 (58.0) 175 (156)
Median [Q1, Q3] 348 [289, 406] 312 [312, 312] 671 [671, 671] 103 [63.8, 151] 99.0 [78.5, 120] 111 [71.3, 225]
Median [min, max] 348 [231, 464] 312 [312, 312] 671 [671, 671] 103 [34.0, 402] 99.0 [58.0, 140] 111 [34.0, 671]
FI_final
Mean (SD) 16.5 (13.4) NA NA 32.4 (41.7) 6.50 (7.78) 28.4 (38.0)
Median [Q1, Q3] 16.5 [11.8, 21.3] 33.0 [33.0, 33.0] 3.00 [3.00, 3.00] 15.0 [13.0, 36.3] 6.50 [3.75, 9.25] 14.5 [11.0, 27.8]
Median [min, max] 16.5 [7.00, 26.0] 33.0 [33.0, 33.0] 3.00 [3.00, 3.00] 15.0 [6.00, 171] 6.50 [1.00, 12.0] 14.5 [1.00, 171]
FQ_final
Mean (SD) 0.0109 (0.00529) NA NA 0.0156 (0.0110) 0.00121 (0.000916) 0.0137 (0.0108)
Median [Q1, Q3] 0.0109 [0.00901, 0.0127] 0.0169 [0.0169, 0.0169] 0.000608 [0.000608, 0.000608] 0.0111 [0.00692, 0.0245] 0.00121 [0.000890, 0.00154] 0.00997 [0.00584, 0.0204]
Median [min, max] 0.0109 [0.00714, 0.0146] 0.0169 [0.0169, 0.0169] 0.000608 [0.000608, 0.000608] 0.0111 [0.00314, 0.0368] 0.00121 [0.000567, 0.00186] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 1 (100%) 0 (0%) 1 (4.5%) 0 (0%) 2 (7.1%)
1 2 (100%) 0 (0%) 0 (0%) 13 (59.1%) 2 (100%) 17 (60.7%)
Missing 0 (0%) 0 (0%) 1 (100%) 8 (36.4%) 0 (0%) 9 (32.1%)
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(fx_code2), data =  fx_prim2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Any
(N=2)
Osteoporotic
(N=1)
Non-Vertebrae
(N=1)
Vertebrae
(N=22)
Hip
(N=2)
Overall
(N=28)
no_rand
Mean (SD) 3110 (1390) NA NA 2770 (2470) 5500 (3160) 3050 (2430)
Median [Q1, Q3] 3110 [2620, 3600] 2000 [2000, 2000] 5090 [5090, 5090] 1650 [1120, 3700] 5500 [4390, 6620] 1980 [1320, 4180]
Median [min, max] 3110 [2130, 4090] 2000 [2000, 2000] 5090 [5090, 5090] 1650 [578, 7870] 5500 [3270, 7740] 1980 [578, 7870]
active_sample
Mean (SD) 2060 (2240) NA NA 2440 (2210) 4110 (3310) 2600 (2190)
Median [Q1, Q3] 2060 [1270, 2850] 1950 [1950, 1950] 4940 [4940, 4940] 1440 [931, 3230] 4110 [2940, 5280] 1730 [1010, 3780]
Median [min, max] 2060 [479, 3640] 1950 [1950, 1950] 4940 [4940, 4940] 1440 [451, 7390] 4110 [1770, 6450] 1730 [451, 7390]
n_event
Mean (SD) 348 (165) NA NA 137 (112) 99.0 (58.0) 175 (156)
Median [Q1, Q3] 348 [289, 406] 312 [312, 312] 671 [671, 671] 103 [63.8, 151] 99.0 [78.5, 120] 111 [71.3, 225]
Median [min, max] 348 [231, 464] 312 [312, 312] 671 [671, 671] 103 [34.0, 402] 99.0 [58.0, 140] 111 [34.0, 671]
FI_final
Mean (SD) 16.5 (13.4) NA NA 32.4 (41.7) 6.50 (7.78) 28.4 (38.0)
Median [Q1, Q3] 16.5 [11.8, 21.3] 33.0 [33.0, 33.0] 3.00 [3.00, 3.00] 15.0 [13.0, 36.3] 6.50 [3.75, 9.25] 14.5 [11.0, 27.8]
Median [min, max] 16.5 [7.00, 26.0] 33.0 [33.0, 33.0] 3.00 [3.00, 3.00] 15.0 [6.00, 171] 6.50 [1.00, 12.0] 14.5 [1.00, 171]
FQ_final
Mean (SD) 0.0109 (0.00529) NA NA 0.0156 (0.0110) 0.00121 (0.000916) 0.0137 (0.0108)
Median [Q1, Q3] 0.0109 [0.00901, 0.0127] 0.0169 [0.0169, 0.0169] 0.000608 [0.000608, 0.000608] 0.0111 [0.00692, 0.0245] 0.00121 [0.000890, 0.00154] 0.00997 [0.00584, 0.0204]
Median [min, max] 0.0109 [0.00714, 0.0146] 0.0169 [0.0169, 0.0169] 0.000608 [0.000608, 0.000608] 0.0111 [0.00314, 0.0368] 0.00121 [0.000567, 0.00186] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 1 (100%) 0 (0%) 1 (4.5%) 0 (0%) 2 (7.1%)
1 2 (100%) 0 (0%) 0 (0%) 13 (59.1%) 2 (100%) 17 (60.7%)
Missing 0 (0%) 0 (0%) 1 (100%) 8 (36.4%) 0 (0%) 9 (32.1%)
kruskal.test(FI_final ~ fx_code2, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by fx_code2
## Kruskal-Wallis chi-squared = 6.3938, df = 4, p-value = 0.1716
kruskal.test(FQ_final ~ fx_code2, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by fx_code2
## Kruskal-Wallis chi-squared = 8.0105, df = 4, p-value = 0.09119

Box plots

p1 = ggplot(data = fx_prim2, aes(y = FI_final, x = as.factor(fx_code2), fill = as.factor(fx_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index", x = "Fracture sites", y = "Fragility index") + theme(axis.text.x = element_text(angle = 45, hjust = 1))
p2 = ggplot(data =  fx_prim2, aes(y = FQ_final, x = as.factor(fx_code2), fill = as.factor(fx_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility quotient", x = "Fracture sites", y = "Fragility quotient") + theme(axis.text.x = element_text(angle = 45, hjust = 1))

grid.arrange(p1, p2, nrow = 1, top = textGrob("Fragility of evidence for anti-fracture efficacy by fracture sites", gp = gpar(fontsize = 20, font = 1)))

(2.2.3) By pharmacological interventions

table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(interv_code1), data =  fx_prim2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Alendronate
(N=2)
Ibandronate
(N=2)
Risedronate
(N=2)
Minodronate
(N=1)
Zoledronate
(N=6)
Teriparatide
(N=6)
Abaloparatide
(N=1)
Romosozumab
(N=4)
Denosumab
(N=1)
Strontium_ranelate
(N=2)
Calcium_VitD
(N=1)
Overall
(N=28)
no_rand
Mean (SD) 3230 (1700) 1960 (0) 1220 (576) NA 3580 (3270) 1380 (664) NA 5640 (1780) NA 3370 (2430) NA 3050 (2430)
Median [Q1, Q3] 3230 [2630, 3830] 1960 [1960, 1960] 1220 [1020, 1420] 704 [704, 704] 2060 [1400, 6330] 1230 [1090, 1570] 1650 [1650, 1650] 5640 [4090, 7180] 7870 [7870, 7870] 3370 [2510, 4230] 3270 [3270, 3270] 1980 [1320, 4180]
Median [min, max] 3230 [2030, 4430] 1960 [1960, 1960] 1220 [814, 1630] 704 [704, 704] 2060 [665, 7740] 1230 [578, 2530] 1650 [1650, 1650] 5640 [4090, 7180] 7870 [7870, 7870] 3370 [1650, 5090] 3270 [3270, 3270] 1980 [578, 7870]
active_sample
Mean (SD) 3040 (1550) 1950 (0) 1030 (484) NA 2720 (2650) 1070 (442) NA 5150 (1730) NA 3190 (2470) NA 2600 (2190)
Median [Q1, Q3] 3040 [2490, 3590] 1950 [1950, 1950] 1030 [861, 1200] 544 [544, 544] 1540 [775, 4740] 971 [885, 1330] 1400 [1400, 1400] 5150 [3660, 6650] 7390 [7390, 7390] 3190 [2320, 4060] 1770 [1770, 1770] 1730 [1010, 3780]
Median [min, max] 3040 [1950, 4130] 1950 [1950, 1950] 1030 [690, 1370] 544 [544, 544] 1540 [479, 6450] 971 [451, 1700] 1400 [1400, 1400] 5150 [3640, 6650] 7390 [7390, 7390] 3190 [1440, 4940] 1770 [1770, 1770] 1730 [451, 7390]
n_event
Mean (SD) 172 (72.1) 111 (1.41) 148 (8.49) NA 194 (148) 67.5 (22.9) NA 216 (177) NA 529 (201) NA 175 (156)
Median [Q1, Q3] 172 [147, 198] 111 [111, 112] 148 [145, 151] 100 [100, 100] 186 [64.3, 292] 71.5 [51.0, 85.3] 34.0 [34.0, 34.0] 163 [97.5, 282] 350 [350, 350] 529 [458, 600] 58.0 [58.0, 58.0] 111 [71.3, 225]
Median [min, max] 172 [121, 223] 111 [110, 112] 148 [142, 154] 100 [100, 100] 186 [37.0, 402] 71.5 [36.0, 92.0] 34.0 [34.0, 34.0] 163 [75.0, 464] 350 [350, 350] 529 [387, 671] 58.0 [58.0, 58.0] 111 [34.0, 671]
FI_final
Mean (SD) 26.5 (19.1) 14.0 (1.41) 12.5 (2.12) NA 39.3 (65.3) 15.7 (7.00) NA 33.0 (9.31) NA 27.5 (34.6) NA 28.4 (38.0)
Median [Q1, Q3] 26.5 [19.8, 33.3] 14.0 [13.5, 14.5] 12.5 [11.8, 13.3] 20.0 [20.0, 20.0] 9.50 [7.00, 27.8] 14.0 [11.5, 21.0] 13.0 [13.0, 13.0] 33.0 [25.5, 40.5] 137 [137, 137] 27.5 [15.3, 39.8] 1.00 [1.00, 1.00] 14.5 [11.0, 27.8]
Median [min, max] 26.5 [13.0, 40.0] 14.0 [13.0, 15.0] 12.5 [11.0, 14.0] 20.0 [20.0, 20.0] 9.50 [6.00, 171] 14.0 [7.00, 25.0] 13.0 [13.0, 13.0] 33.0 [24.0, 42.0] 137 [137, 137] 27.5 [3.00, 52.0] 1.00 [1.00, 1.00] 14.5 [1.00, 171]
FQ_final
Mean (SD) 0.0118 (0.0123) 0.00717 (0.000724) 0.0141 (0.00869) NA 0.0133 (0.0100) 0.0182 (0.0109) NA 0.00706 (0.00329) NA 0.0183 (0.0251) NA 0.0137 (0.0108)
Median [Q1, Q3] 0.0118 [0.00750, 0.0162] 0.00717 [0.00692, 0.00743] 0.0141 [0.0111, 0.0172] 0.0368 [0.0368, 0.0368] 0.0126 [0.00666, 0.0164] 0.0200 [0.00935, 0.0277] 0.00928 [0.00928, 0.00928] 0.00658 [0.00541, 0.00822] 0.0185 [0.0185, 0.0185] 0.0183 [0.00947, 0.0272] 0.000567 [0.000567, 0.000567] 0.00997 [0.00584, 0.0204]
Median [min, max] 0.0118 [0.00314, 0.0206] 0.00717 [0.00666, 0.00768] 0.0141 [0.00801, 0.0203] 0.0368 [0.0368, 0.0368] 0.0126 [0.00186, 0.0301] 0.0200 [0.00412, 0.0288] 0.00928 [0.00928, 0.00928] 0.00658 [0.00361, 0.0115] 0.0185 [0.0185, 0.0185] 0.0183 [0.000608, 0.0361] 0.000567 [0.000567, 0.000567] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (16.7%) 1 (16.7%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2 (7.1%)
1 1 (50.0%) 0 (0%) 2 (100%) 1 (100%) 5 (83.3%) 2 (33.3%) 1 (100%) 4 (100%) 0 (0%) 0 (0%) 1 (100%) 17 (60.7%)
Missing 1 (50.0%) 2 (100%) 0 (0%) 0 (0%) 0 (0%) 3 (50.0%) 0 (0%) 0 (0%) 1 (100%) 2 (100%) 0 (0%) 9 (32.1%)
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(interv_code2), data =  fx_prim2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Bisphosphonates
(N=13)
PTH analog
(N=7)
Romosozumab
(N=4)
Denosumab
(N=1)
Strontium_ranelate
(N=2)
Calcium_VitD
(N=1)
Overall
(N=28)
no_rand
Mean (SD) 2690 (2440) 1420 (614) 5640 (1780) NA 3370 (2430) NA 3050 (2430)
Median [Q1, Q3] 1960 [1200, 2130] 1360 [1090, 1640] 5640 [4090, 7180] 7870 [7870, 7870] 3370 [2510, 4230] 3270 [3270, 3270] 1980 [1320, 4180]
Median [min, max] 1960 [665, 7740] 1360 [578, 2530] 5640 [4090, 7180] 7870 [7870, 7870] 3370 [1650, 5090] 3270 [3270, 3270] 1980 [578, 7870]
active_sample
Mean (SD) 2220 (1960) 1110 (423) 5150 (1730) NA 3190 (2470) NA 2600 (2190)
Median [Q1, Q3] 1950 [690, 1950] 1050 [887, 1410] 5150 [3660, 6650] 7390 [7390, 7390] 3190 [2320, 4060] 1770 [1770, 1770] 1730 [1010, 3780]
Median [min, max] 1950 [479, 6450] 1050 [451, 1700] 5150 [3640, 6650] 7390 [7390, 7390] 3190 [1440, 4940] 1770 [1770, 1770] 1730 [451, 7390]
n_event
Mean (SD) 163 (104) 62.7 (24.4) 216 (177) NA 529 (201) NA 175 (156)
Median [Q1, Q3] 140 [110, 223] 60.0 [42.0, 84.5] 163 [97.5, 282] 350 [350, 350] 529 [458, 600] 58.0 [58.0, 58.0] 111 [71.3, 225]
Median [min, max] 140 [37.0, 402] 60.0 [34.0, 92.0] 163 [75.0, 464] 350 [350, 350] 529 [387, 671] 58.0 [58.0, 58.0] 111 [34.0, 671]
FI_final
Mean (SD) 27.8 (44.2) 15.3 (6.47) 33.0 (9.31) NA 27.5 (34.6) NA 28.4 (38.0)
Median [Q1, Q3] 13.0 [11.0, 20.0] 13.0 [12.0, 19.0] 33.0 [25.5, 40.5] 137 [137, 137] 27.5 [15.3, 39.8] 1.00 [1.00, 1.00] 14.5 [11.0, 27.8]
Median [min, max] 13.0 [6.00, 171] 13.0 [7.00, 25.0] 33.0 [24.0, 42.0] 137 [137, 137] 27.5 [3.00, 52.0] 1.00 [1.00, 1.00] 14.5 [1.00, 171]
FQ_final
Mean (SD) 0.0140 (0.0106) 0.0169 (0.0105) 0.00706 (0.00329) NA 0.0183 (0.0251) NA 0.0137 (0.0108)
Median [Q1, Q3] 0.0107 [0.00666, 0.0203] 0.0143 [0.00849, 0.0271] 0.00658 [0.00541, 0.00822] 0.0185 [0.0185, 0.0185] 0.0183 [0.00947, 0.0272] 0.000567 [0.000567, 0.000567] 0.00997 [0.00584, 0.0204]
Median [min, max] 0.0107 [0.00186, 0.0368] 0.0143 [0.00412, 0.0288] 0.00658 [0.00361, 0.0115] 0.0185 [0.0185, 0.0185] 0.0183 [0.000608, 0.0361] 0.000567 [0.000567, 0.000567] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 1 (7.7%) 1 (14.3%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2 (7.1%)
1 9 (69.2%) 3 (42.9%) 4 (100%) 0 (0%) 0 (0%) 1 (100%) 17 (60.7%)
Missing 3 (23.1%) 3 (42.9%) 0 (0%) 1 (100%) 2 (100%) 0 (0%) 9 (32.1%)
kruskal.test(FI_final ~ interv_code2, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by interv_code2
## Kruskal-Wallis chi-squared = 9.11, df = 5, p-value = 0.1048
kruskal.test(FQ_final ~ interv_code2, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by interv_code2
## Kruskal-Wallis chi-squared = 5.3409, df = 5, p-value = 0.3757

Box plots

p1 = ggplot(data =  fx_prim2, aes(y = FI_final, x = as.factor(interv_code2), fill = as.factor(interv_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index", x = "Pharmacological interventions", y = "Fragility index") + theme(axis.text.x = element_text(angle = 45, hjust = 1))
p2 = ggplot(data =  fx_prim2, aes(y = FQ_final, x = as.factor(interv_code2), fill = as.factor(interv_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility quotient", x = "Pharmacological interventions", y = "Fragility quotine") + theme(axis.text.x = element_text(angle = 45, hjust = 1))

grid.arrange(p1, p2, nrow = 1, top = textGrob("Fragility of evidence for anti-fracture efficacy by intervention sites", gp = gpar(fontsize = 20, font = 1)))

(2.2.4) Timing of fracture assessment

table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(timing), data =  fx_prim2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
2
(N=1)
3
(N=5)
4
(N=10)
5
(N=9)
6
(N=1)
7
(N=1)
8
(N=1)
Overall
(N=28)
no_rand
Mean (SD) NA 1930 (1020) 2350 (2120) 3720 (3070) NA NA NA 3050 (2430)
Median [Q1, Q3] 7180 [7180, 7180] 1650 [1640, 2530] 1280 [1090, 3580] 1960 [1650, 7740] 4430 [4430, 4430] 5090 [5090, 5090] 2000 [2000, 2000] 1980 [1320, 4180]
Median [min, max] 7180 [7180, 7180] 1650 [578, 3270] 1280 [665, 7180] 1960 [814, 7870] 4430 [4430, 4430] 5090 [5090, 5090] 2000 [2000, 2000] 1980 [578, 7870]
active_sample
Mean (SD) NA 1350 (527) 2110 (1970) 3040 (2680) NA NA NA 2600 (2190)
Median [Q1, Q3] 6640 [6640, 6640] 1430 [1400, 1700] 1090 [885, 3220] 1950 [1370, 5680] 4130 [4130, 4130] 4940 [4940, 4940] 1950 [1950, 1950] 1730 [1010, 3780]
Median [min, max] 6640 [6640, 6640] 1430 [451, 1770] 1090 [544, 6650] 1950 [479, 7390] 4130 [4130, 4130] 4940 [4940, 4940] 1950 [1950, 1950] 1730 [451, 7390]
n_event
Mean (SD) NA 47.2 (12.0) 145 (129) 225 (122) NA NA NA 175 (156)
Median [Q1, Q3] 75.0 [75.0, 75.0] 48.0 [36.0, 58.0] 96.0 [83.8, 192] 154 [140, 350] 121 [121, 121] 671 [671, 671] 312 [312, 312] 111 [71.3, 225]
Median [min, max] 75.0 [75.0, 75.0] 48.0 [34.0, 60.0] 96.0 [37.0, 464] 154 [110, 402] 121 [121, 121] 671 [671, 671] 312 [312, 312] 111 [34.0, 671]
FI_final
Mean (SD) NA 9.00 (5.10) 24.4 (13.1) 48.0 (62.1) NA NA NA 28.4 (38.0)
Median [Q1, Q3] 24.0 [24.0, 24.0] 11.0 [7.00, 13.0] 24.0 [16.3, 36.5] 14.0 [12.0, 52.0] 13.0 [13.0, 13.0] 3.00 [3.00, 3.00] 33.0 [33.0, 33.0] 14.5 [11.0, 27.8]
Median [min, max] 24.0 [24.0, 24.0] 11.0 [1.00, 13.0] 24.0 [6.00, 42.0] 14.0 [7.00, 171] 13.0 [13.0, 13.0] 3.00 [3.00, 3.00] 33.0 [33.0, 33.0] 14.5 [1.00, 171]
FQ_final
Mean (SD) NA 0.0101 (0.0110) 0.0166 (0.0108) 0.0160 (0.0115) NA NA NA 0.0137 (0.0108)
Median [Q1, Q3] 0.00361 [0.00361, 0.00361] 0.00770 [0.00412, 0.00928] 0.0129 [0.00802, 0.0245] 0.0146 [0.00768, 0.0203] 0.00314 [0.00314, 0.00314] 0.000608 [0.000608, 0.000608] 0.0169 [0.0169, 0.0169] 0.00997 [0.00584, 0.0204]
Median [min, max] 0.00361 [0.00361, 0.00361] 0.00770 [0.000567, 0.0288] 0.0129 [0.00532, 0.0368] 0.0146 [0.00186, 0.0361] 0.00314 [0.00314, 0.00314] 0.000608 [0.000608, 0.000608] 0.0169 [0.0169, 0.0169] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 1 (10.0%) 0 (0%) 0 (0%) 0 (0%) 1 (100%) 2 (7.1%)
1 1 (100%) 4 (80.0%) 7 (70.0%) 5 (55.6%) 0 (0%) 0 (0%) 0 (0%) 17 (60.7%)
Missing 0 (0%) 1 (20.0%) 2 (20.0%) 4 (44.4%) 1 (100%) 1 (100%) 0 (0%) 9 (32.1%)
kruskal.test(FI_final ~ timing, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by timing
## Kruskal-Wallis chi-squared = 8.7593, df = 6, p-value = 0.1876
kruskal.test(FQ_final ~ timing, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by timing
## Kruskal-Wallis chi-squared = 7.6194, df = 6, p-value = 0.2673

Box plots

p1 = ggplot(data =  fx_prim2, aes(y = FI_final, x = as.factor(timing), fill = as.factor(timing))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by timing of fracture assessment", x = "Timing of fracture assessment", y = "Fragility index")
p1

(2.2.5) By journal
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(journal_code2), data =  fx_prim2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
NEJM
(N=14)
Lancet
(N=2)
JAMA
(N=4)
Ann Intern Med
(N=1)
JBMR
(N=2)
JCEM
(N=1)
Other
(N=4)
Overall
(N=28)
no_rand
Mean (SD) 4170 (2790) 1690 (472) 2340 (1400) NA 1960 (0) NA 1820 (2180) 3050 (2430)
Median [Q1, Q3] 3680 [1740, 7180] 1690 [1530, 1860] 1640 [1640, 2340] 2530 [2530, 2530] 1960 [1960, 1960] 578 [578, 578] 759 [694, 1880] 1980 [1320, 4180]
Median [min, max] 3680 [1090, 7870] 1690 [1360, 2030] 1640 [1630, 4430] 2530 [2530, 2530] 1960 [1960, 1960] 578 [578, 578] 759 [665, 5090] 1980 [578, 7870]
active_sample
Mean (SD) 3470 (2580) 1500 (634) 2080 (1370) NA 1950 (0) NA 1710 (2150) 2600 (2190)
Median [Q1, Q3] 2800 [1210, 6250] 1500 [1270, 1720] 1410 [1390, 2100] 1700 [1700, 1700] 1950 [1950, 1950] 451 [451, 451] 674 [629, 1750] 1730 [1010, 3780]
Median [min, max] 2800 [479, 7390] 1500 [1050, 1950] 1410 [1370, 4130] 1700 [1700, 1700] 1950 [1950, 1950] 451 [451, 451] 674 [544, 4940] 1730 [451, 7390]
n_event
Mean (SD) 211 (147) 158 (92.6) 86.3 (60.7) NA 111 (1.41) NA 238 (292) 175 (156)
Median [Q1, Q3] 181 [83.8, 341] 158 [125, 190] 78.5 [35.5, 129] 60.0 [60.0, 60.0] 111 [111, 112] 48.0 [48.0, 48.0] 121 [84.8, 274] 111 [71.3, 225]
Median [min, max] 181 [37.0, 464] 158 [92.0, 223] 78.5 [34.0, 154] 60.0 [60.0, 60.0] 111 [110, 112] 48.0 [48.0, 48.0] 121 [39.0, 671] 111 [34.0, 671]
FI_final
Mean (SD) 42.8 (49.7) 27.5 (17.7) 12.0 (1.15) NA 14.0 (1.41) NA 11.0 (7.53) 28.4 (38.0)
Median [Q1, Q3] 25.5 [14.8, 41.5] 27.5 [21.3, 33.8] 12.0 [11.0, 13.0] 7.00 [7.00, 7.00] 14.0 [13.5, 14.5] 13.0 [13.0, 13.0] 10.5 [6.00, 15.5] 14.5 [11.0, 27.8]
Median [min, max] 25.5 [1.00, 171] 27.5 [15.0, 40.0] 12.0 [11.0, 13.0] 7.00 [7.00, 7.00] 14.0 [13.0, 15.0] 13.0 [13.0, 13.0] 10.5 [3.00, 20.0] 14.5 [1.00, 171]
FQ_final
Mean (SD) 0.0147 (0.0116) 0.0174 (0.00442) 0.00703 (0.00268) NA 0.00717 (0.000724) NA 0.0171 (0.0154) 0.0137 (0.0108)
Median [Q1, Q3] 0.0130 [0.00550, 0.0240] 0.0174 [0.0159, 0.0190] 0.00785 [0.00656, 0.00832] 0.00412 [0.00412, 0.00412] 0.00717 [0.00692, 0.00743] 0.0288 [0.0288, 0.0288] 0.0155 [0.00814, 0.0244] 0.00997 [0.00584, 0.0204]
Median [min, max] 0.0130 [0.000567, 0.0361] 0.0174 [0.0143, 0.0206] 0.00785 [0.00314, 0.00928] 0.00412 [0.00412, 0.00412] 0.00717 [0.00666, 0.00768] 0.0288 [0.0288, 0.0288] 0.0155 [0.000608, 0.0368] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 1 (7.1%) 1 (50.0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2 (7.1%)
1 9 (64.3%) 1 (50.0%) 3 (75.0%) 1 (100%) 0 (0%) 0 (0%) 3 (75.0%) 17 (60.7%)
Missing 4 (28.6%) 0 (0%) 1 (25.0%) 0 (0%) 2 (100%) 1 (100%) 1 (25.0%) 9 (32.1%)
kruskal.test(FI_final ~ journal_code2, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by journal_code2
## Kruskal-Wallis chi-squared = 7.3153, df = 6, p-value = 0.2927
kruskal.test(FQ_final ~ journal_code2, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by journal_code2
## Kruskal-Wallis chi-squared = 5.1191, df = 6, p-value = 0.5286

Box plots

p1 = ggplot(data =  fx_prim2, aes(y = FI_final, x = as.factor(timing), fill = as.factor(timing))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by timing of fracture assessment", x = "Timing of fracture assessment", y = "Fragility index") 
p1

(2.2.6) By sex
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | sex, data =  fx_prim2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
Both
(N=3)
Men
(N=1)
Women
(N=24)
Overall
(N=28)
no_rand
Mean (SD) 1120 (870) NA 3370 (2480) 3050 (2430)
Median [Q1, Q3] 665 [622, 1400] 1200 [1200, 1200] 2010 [1640, 4600] 1980 [1320, 4180]
Median [min, max] 665 [578, 2130] 1200 [1200, 1200] 2010 [704, 7870] 1980 [578, 7870]
active_sample
Mean (SD) 529 (112) NA 2920 (2210) 2600 (2190)
Median [Q1, Q3] 479 [465, 568] 1130 [1130, 1130] 1950 [1390, 4330] 1730 [1010, 3780]
Median [min, max] 479 [451, 657] 1130 [1130, 1130] 1950 [544, 7390] 1730 [451, 7390]
n_event
Mean (SD) 106 (108) NA 189 (161) 175 (156)
Median [Q1, Q3] 48.0 [43.5, 140] 37.0 [37.0, 37.0] 117 [85.3, 245] 111 [71.3, 225]
Median [min, max] 48.0 [39.0, 231] 37.0 [37.0, 37.0] 117 [34.0, 671] 111 [34.0, 671]
FI_final
Mean (SD) 9.00 (3.46) NA 31.7 (40.1) 28.4 (38.0)
Median [Q1, Q3] 7.00 [7.00, 10.0] 6.00 [6.00, 6.00] 17.5 [12.8, 34.8] 14.5 [11.0, 27.8]
Median [min, max] 7.00 [7.00, 13.0] 6.00 [6.00, 6.00] 17.5 [1.00, 171] 14.5 [1.00, 171]
FQ_final
Mean (SD) 0.0180 (0.00956) NA 0.0136 (0.0111) 0.0137 (0.0108)
Median [Q1, Q3] 0.0146 [0.0126, 0.0217] 0.00532 [0.00532, 0.00532] 0.00864 [0.00554, 0.0204] 0.00997 [0.00584, 0.0204]
Median [min, max] 0.0146 [0.0107, 0.0288] 0.00532 [0.00532, 0.00532] 0.00864 [0.000567, 0.0368] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 2 (8.3%) 2 (7.1%)
1 2 (66.7%) 1 (100%) 14 (58.3%) 17 (60.7%)
Missing 1 (33.3%) 0 (0%) 8 (33.3%) 9 (32.1%)
kruskal.test(FI_final ~ sex, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by sex
## Kruskal-Wallis chi-squared = 5.0532, df = 2, p-value = 0.07993
kruskal.test(FQ_final ~ sex, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by sex
## Kruskal-Wallis chi-squared = 1.8972, df = 2, p-value = 0.3873

Box plots

p1 = ggplot(data =  fx_prim2, aes(y = FI_final, x = as.factor(sex), fill = as.factor(sex))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by sex", x = "Sex", y = "Fragility index") 
p1

(2.2.7) By placebo
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | placebo, data =  fx_prim2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Active
(N=5)
Placebo
(N=23)
Overall
(N=28)
no_rand
Mean (SD) 2570 (1400) 3150 (2610) 3050 (2430)
Median [Q1, Q3] 1650 [1640, 4090] 2000 [1150, 4760] 1980 [1320, 4180]
Median [min, max] 1650 [1360, 4090] 2000 [578, 7870] 1980 [578, 7870]
active_sample
Mean (SD) 2240 (1300) 2680 (2360) 2600 (2190)
Median [Q1, Q3] 1430 [1400, 3640] 1770 [887, 4530] 1730 [1010, 3780]
Median [min, max] 1430 [1050, 3660] 1770 [451, 7390] 1730 [451, 7390]
n_event
Mean (SD) 169 (181) 176 (155) 175 (156)
Median [Q1, Q3] 92.0 [36.0, 221] 112 [79.0, 227] 111 [71.3, 225]
Median [min, max] 92.0 [34.0, 464] 112 [37.0, 671] 111 [34.0, 671]
FI_final
Mean (SD) 21.4 (12.9) 29.9 (41.6) 28.4 (38.0)
Median [Q1, Q3] 15.0 [13.0, 26.0] 14.0 [9.00, 29.0] 14.5 [11.0, 27.8]
Median [min, max] 15.0 [11.0, 42.0] 14.0 [1.00, 171] 14.5 [1.00, 171]
FQ_final
Mean (SD) 0.00998 (0.00294) 0.0146 (0.0118) 0.0137 (0.0108)
Median [Q1, Q3] 0.00928 [0.00770, 0.0115] 0.0107 [0.00472, 0.0232] 0.00997 [0.00584, 0.0204]
Median [min, max] 0.00928 [0.00714, 0.0143] 0.0107 [0.000567, 0.0368] 0.00997 [0.000567, 0.0368]
as.factor(missing_fi)
0 1 (20.0%) 1 (4.3%) 2 (7.1%)
1 4 (80.0%) 13 (56.5%) 17 (60.7%)
Missing 0 (0%) 9 (39.1%) 9 (32.1%)
kruskal.test(FI_final ~ placebo, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by placebo
## Kruskal-Wallis chi-squared = 0.23136, df = 1, p-value = 0.6305
kruskal.test(FQ_final ~ placebo, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by placebo
## Kruskal-Wallis chi-squared = 0.044078, df = 1, p-value = 0.8337

Box plots

p1 = ggplot(data =  fx_prim2, aes(y = FI_final, x = as.factor(control), fill = as.factor(control))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by types of control", x = "Types of control", y = "Fragility index") 
p1

(2.3) Analyses with P< 0.001

(2.3.1) Overall
# Comparison of different P values:
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | p_sig2 , data = ori_st, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
Highly significant
(N=38)
Significant
(N=90)
Overall
(N=128)
no_rand
Mean (SD) 4180 (2870) 2510 (1970) 3010 (2390)
Median [Q1, Q3] 4090 [1640, 7180] 1840 [1200, 3890] 1960 [1360, 4090]
Median [min, max] 4090 [578, 7870] 1840 [450, 7870] 1960 [450, 7870]
active_sample
Mean (SD) 3710 (2610) 2180 (1760) 2630 (2160)
Median [Q1, Q3] 3600 [1280, 6620] 1660 [902, 3100] 1770 [1050, 3660]
Median [min, max] 3600 [451, 7810] 1660 [339, 6670] 1770 [339, 7810]
n_event
Mean (SD) 211 (201) 140 (158) 161 (174)
Median [Q1, Q3] 108 [77.5, 298] 69.5 [44.0, 153] 84.0 [52.8, 208]
Median [min, max] 108 [34.0, 764] 69.5 [10.0, 691] 84.0 [10.0, 764]
FI_final
Mean (SD) 38.5 (34.8) 7.01 (5.92) 16.4 (24.2)
Median [Q1, Q3] 26.5 [17.5, 41.5] 5.00 [3.00, 10.0] 9.00 [4.00, 18.3]
Median [min, max] 26.5 [9.00, 171] 5.00 [1.00, 29.0] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.0157 (0.0165) 0.00456 (0.00404) 0.00786 (0.0108)
Median [Q1, Q3] 0.0104 [0.00655, 0.0191] 0.00314 [0.00163, 0.00665] 0.00502 [0.00222, 0.00892]
Median [min, max] 0.0104 [0.00230, 0.0966] 0.00314 [0.000151, 0.0203] 0.00502 [0.000151, 0.0966]
as.factor(missing_fi)
0 4 (10.5%) 4 (4.4%) 8 (6.3%)
1 22 (57.9%) 55 (61.1%) 77 (60.2%)
Missing 12 (31.6%) 31 (34.4%) 43 (33.6%)
createTable(compareGroups(p_sig2 ~ no_rand + active_sample + n_event + FI_final + FQ_final + missing_fi, data = ori_st, method = c(no_rand = 2, active_sample = 2, n_event = 2, FI_final = 2, FQ_final = 2)))
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning in chisq.test(xx, correct = FALSE): Chi-squared approximation may be
## incorrect
## 
## --------Summary descriptives table by 'p_sig2'---------
## 
## ___________________________________________________________ 
##               Highly significant   Significant    p.overall 
##                      N=38              N=90                 
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
## no_rand        4093 [1640;7180]  1836 [1199;3887]   0.006   
## active_sample  3596 [1282;6620]  1664 [902;3102]    0.003   
## n_event         108 [77.5;298]   69.5 [44.0;152]    0.005   
## FI_final       26.5 [17.5;41.5]  5.00 [3.00;10.0]  <0.001   
## FQ_final       0.01 [0.01;0.02]  0.00 [0.00;0.01]  <0.001   
## missing_fi:                                         0.241   
##     0             4 (15.4%)         4 (6.78%)               
##     1             22 (84.6%)        55 (93.2%)              
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
# Subset of analyses whose P-value<= 0.001

p_sig2 = subset(ori_st, Pval_screen<=0.001)
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi), data = p_sig2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Overall
(N=38)
no_rand
Mean (SD) 4180 (2870)
Median [Q1, Q3] 4090 [1640, 7180]
Median [min, max] 4090 [578, 7870]
active_sample
Mean (SD) 3710 (2610)
Median [Q1, Q3] 3600 [1280, 6620]
Median [min, max] 3600 [451, 7810]
n_event
Mean (SD) 211 (201)
Median [Q1, Q3] 108 [77.5, 298]
Median [min, max] 108 [34.0, 764]
FI_final
Mean (SD) 38.5 (34.8)
Median [Q1, Q3] 26.5 [17.5, 41.5]
Median [min, max] 26.5 [9.00, 171]
FQ_final
Mean (SD) 0.0157 (0.0165)
Median [Q1, Q3] 0.0104 [0.00655, 0.0191]
Median [min, max] 0.0104 [0.00230, 0.0966]
as.factor(missing_fi)
0 4 (10.5%)
1 22 (57.9%)
Missing 12 (31.6%)

Relationship between sample size/active sample/no. events and FI

p = ggplot(data = p_sig2, aes(x = no_rand, y = FI_final))
p1 = p + geom_point() + geom_smooth() + labs(x = "Number of participants at randomisation", y = "Fragility index") + theme_bw()

p0 = ggplot(data = p_sig2, aes(x = active_sample, y = FI_final))
p2 = p0 + geom_point() + geom_smooth() + labs(x = "Number of participants included in the analyses", y = "Fragility index") + theme_bw()

p.0 = ggplot(data = p_sig2, aes(x = n_event, y = FI_final))
p3 = p.0 + geom_point() + geom_smooth() + labs(x = "Number of participants with fracture events", y = "Fragility index") + theme_bw()

#grid.arrange(p1, p2, p3, nrow = 1)
grid.arrange(p1, p3, nrow = 1, top = textGrob("Relationship between Number of participants and Fragility index", gp = gpar(fontsize = 20, font = 3)))
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

(2.3.2) By fracture sites
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(fx_code1), data = p_sig2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Clin_fx
(N=2)
OFx
(N=3)
MOF
(N=2)
NonVert_fx
(N=3)
Vert_fx
(N=26)
ClinVert_fx
(N=2)
Overall
(N=38)
no_rand
Mean (SD) 7460 (393) 3400 (1210) 2870 (1730) 7370 (321) 3470 (2850) 7800 (93.3) 4180 (2870)
Median [Q1, Q3] 7460 [7320, 7600] 4090 [3050, 4090] 2870 [2260, 3480] 7180 [7180, 7460] 1650 [1360, 7180] 7800 [7770, 7840] 4090 [1640, 7180]
Median [min, max] 7460 [7180, 7740] 4090 [2000, 4090] 2870 [1650, 4090] 7180 [7180, 7740] 1650 [578, 7870] 7800 [7740, 7870] 4090 [578, 7870]
active_sample
Mean (SD) 6620 (100) 3250 (1130) 2400 (1600) 6620 (76.9) 3040 (2570) 7120 (975) 3710 (2610)
Median [Q1, Q3] 6620 [6580, 6660] 3840 [2890, 3910] 2400 [1830, 2970] 6650 [6590, 6660] 1440 [1050, 5680] 7120 [6770, 7460] 3600 [1280, 6620]
Median [min, max] 6620 [6550, 6690] 3840 [1950, 3980] 2400 [1270, 3530] 6650 [6530, 6670] 1440 [451, 7390] 7120 [6430, 7810] 3600 [451, 7810]
n_event
Mean (SD) 505 (366) 431 (197) 200 (220) 358 (281) 155 (154) 112 (12.7) 211 (201)
Median [Q1, Q3] 505 [376, 635] 323 [318, 491] 200 [122, 277] 225 [197, 453] 96.0 [73.5, 198] 112 [108, 117] 108 [77.5, 298]
Median [min, max] 505 [246, 764] 323 [312, 658] 200 [44.0, 355] 225 [168, 680] 96.0 [34.0, 696] 112 [103, 121] 108 [34.0, 764]
FI_final
Mean (SD) 62.5 (37.5) 42.7 (19.4) 17.5 (12.0) 29.0 (12.2) 38.7 (39.9) 40.5 (2.12) 38.5 (34.8)
Median [Q1, Q3] 62.5 [49.3, 75.8] 33.0 [31.5, 49.0] 17.5 [13.3, 21.8] 23.0 [22.0, 33.0] 23.5 [17.0, 40.0] 40.5 [39.8, 41.3] 26.5 [17.5, 41.5]
Median [min, max] 62.5 [36.0, 89.0] 33.0 [30.0, 65.0] 17.5 [9.00, 26.0] 23.0 [21.0, 43.0] 23.5 [11.0, 171] 40.5 [39.0, 42.0] 26.5 [9.00, 171]
FQ_final
Mean (SD) 0.00949 (0.00580) 0.0138 (0.00543) 0.00723 (0.000175) 0.00440 (0.00190) 0.0191 (0.0188) 0.00576 (0.00109) 0.0157 (0.0165)
Median [Q1, Q3] 0.00949 [0.00743, 0.0115] 0.0169 [0.0122, 0.0169] 0.00723 [0.00717, 0.00730] 0.00346 [0.00330, 0.00502] 0.0140 [0.00769, 0.0255] 0.00576 [0.00538, 0.00615] 0.0104 [0.00655, 0.0191]
Median [min, max] 0.00949 [0.00538, 0.0136] 0.0169 [0.00754, 0.0169] 0.00723 [0.00711, 0.00736] 0.00346 [0.00315, 0.00659] 0.0140 [0.00230, 0.0966] 0.00576 [0.00499, 0.00653] 0.0104 [0.00230, 0.0966]
as.factor(missing_fi)
0 0 (0%) 2 (66.7%) 0 (0%) 0 (0%) 2 (7.7%) 0 (0%) 4 (10.5%)
1 2 (100%) 1 (33.3%) 2 (100%) 3 (100%) 13 (50.0%) 1 (50.0%) 22 (57.9%)
Missing 0 (0%) 0 (0%) 0 (0%) 0 (0%) 11 (42.3%) 1 (50.0%) 12 (31.6%)
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(fx_code2), data = p_sig2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Any
(N=2)
Osteoporotic
(N=5)
Non-Vertebrae
(N=3)
Vertebrae
(N=26)
Clinical Vertebrae
(N=2)
Overall
(N=38)
no_rand
Mean (SD) 7460 (393) 3180 (1250) 7370 (321) 3470 (2850) 7800 (93.3) 4180 (2870)
Median [Q1, Q3] 7460 [7320, 7600] 4090 [2000, 4090] 7180 [7180, 7460] 1650 [1360, 7180] 7800 [7770, 7840] 4090 [1640, 7180]
Median [min, max] 7460 [7180, 7740] 4090 [1650, 4090] 7180 [7180, 7740] 1650 [578, 7870] 7800 [7740, 7870] 4090 [578, 7870]
active_sample
Mean (SD) 6620 (100) 2910 (1230) 6620 (76.9) 3040 (2570) 7120 (975) 3710 (2610)
Median [Q1, Q3] 6620 [6580, 6660] 3530 [1950, 3840] 6650 [6590, 6660] 1440 [1050, 5680] 7120 [6770, 7460] 3600 [1280, 6620]
Median [min, max] 6620 [6550, 6690] 3530 [1270, 3980] 6650 [6530, 6670] 1440 [451, 7390] 7120 [6430, 7810] 3600 [451, 7810]
n_event
Mean (SD) 505 (366) 338 (218) 358 (281) 155 (154) 112 (12.7) 211 (201)
Median [Q1, Q3] 505 [376, 635] 323 [312, 355] 225 [197, 453] 96.0 [73.5, 198] 112 [108, 117] 108 [77.5, 298]
Median [min, max] 505 [246, 764] 323 [44.0, 658] 225 [168, 680] 96.0 [34.0, 696] 112 [103, 121] 108 [34.0, 764]
FI_final
Mean (SD) 62.5 (37.5) 32.6 (20.4) 29.0 (12.2) 38.7 (39.9) 40.5 (2.12) 38.5 (34.8)
Median [Q1, Q3] 62.5 [49.3, 75.8] 30.0 [26.0, 33.0] 23.0 [22.0, 33.0] 23.5 [17.0, 40.0] 40.5 [39.8, 41.3] 26.5 [17.5, 41.5]
Median [min, max] 62.5 [36.0, 89.0] 30.0 [9.00, 65.0] 23.0 [21.0, 43.0] 23.5 [11.0, 171] 40.5 [39.0, 42.0] 26.5 [9.00, 171]
FQ_final
Mean (SD) 0.00949 (0.00580) 0.0112 (0.00526) 0.00440 (0.00190) 0.0191 (0.0188) 0.00576 (0.00109) 0.0157 (0.0165)
Median [Q1, Q3] 0.00949 [0.00743, 0.0115] 0.00754 [0.00736, 0.0169] 0.00346 [0.00330, 0.00502] 0.0140 [0.00769, 0.0255] 0.00576 [0.00538, 0.00615] 0.0104 [0.00655, 0.0191]
Median [min, max] 0.00949 [0.00538, 0.0136] 0.00754 [0.00711, 0.0169] 0.00346 [0.00315, 0.00659] 0.0140 [0.00230, 0.0966] 0.00576 [0.00499, 0.00653] 0.0104 [0.00230, 0.0966]
as.factor(missing_fi)
0 0 (0%) 2 (40.0%) 0 (0%) 2 (7.7%) 0 (0%) 4 (10.5%)
1 2 (100%) 3 (60.0%) 3 (100%) 13 (50.0%) 1 (50.0%) 22 (57.9%)
Missing 0 (0%) 0 (0%) 0 (0%) 11 (42.3%) 1 (50.0%) 12 (31.6%)
kruskal.test(FI_final ~ fx_code2, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by fx_code2
## Kruskal-Wallis chi-squared = 2.897, df = 4, p-value = 0.5752
kruskal.test(FQ_final ~ fx_code2, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by fx_code2
## Kruskal-Wallis chi-squared = 9.3266, df = 4, p-value = 0.05344

Box plots

p1 = ggplot(data = p_sig2, aes(y = FI_final, x = as.factor(fx_code2), fill = as.factor(fx_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index", x = "Fracture sites", y = "Fragility index") + theme(axis.text.x = element_text(angle = 45, hjust = 1))
p2 = ggplot(data = p_sig2, aes(y = FQ_final, x = as.factor(fx_code2), fill = as.factor(fx_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility quotient", x = "Fracture sites", y = "Fragility quotient") + theme(axis.text.x = element_text(angle = 45, hjust = 1))

grid.arrange(p1, p2, nrow = 1, top = textGrob("Fragility of evidence for anti-fracture efficacy by fracture sites", gp = gpar(fontsize = 20, font = 1)))

(2.3.3) By pharmacological interventions

table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(interv_code1), data = p_sig2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Alendronate
(N=1)
Ibandronate
(N=1)
Risedronate
(N=1)
Minodronate
(N=1)
Zoledronate
(N=6)
Teriparatide
(N=8)
Abaloparatide
(N=2)
Romosozumab
(N=12)
Denosumab
(N=3)
Strontium_ranelate
(N=3)
Overall
(N=38)
no_rand
Mean (SD) NA NA NA NA 6780 (2340) 1160 (309) 1650 (0) 5890 (1590) 7870 (0) 1650 (0) 4180 (2870)
Median [Q1, Q3] 2030 [2030, 2030] 1960 [1960, 1960] 1630 [1630, 1630] 704 [704, 704] 7740 [7740, 7740] 1100 [1090, 1360] 1650 [1650, 1650] 7180 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 1650] 4090 [1640, 7180]
Median [min, max] 2030 [2030, 2030] 1960 [1960, 1960] 1630 [1630, 1630] 704 [704, 704] 7740 [2000, 7740] 1100 [578, 1640] 1650 [1650, 1650] 7180 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 1650] 4090 [578, 7870]
active_sample
Mean (SD) NA NA NA NA 5470 (1770) 941 (271) 1330 (95.5) 5460 (1530) 7530 (240) 1330 (155) 3710 (2610)
Median [Q1, Q3] 1950 [1950, 1950] 1950 [1950, 1950] 1330 [1330, 1330] 544 [544, 544] 6050 [5680, 6500] 892 [882, 1050] 1330 [1300, 1370] 6640 [3790, 6660] 7390 [7390, 7600] 1390 [1270, 1410] 3600 [1280, 6620]
Median [min, max] 1950 [1950, 1950] 1950 [1950, 1950] 1330 [1330, 1330] 544 [544, 544] 6050 [1950, 6550] 892 [451, 1430] 1330 [1270, 1400] 6640 [3530, 6910] 7390 [7390, 7810] 1390 [1150, 1440] 3600 [451, 7810]
n_event
Mean (SD) NA NA NA NA 389 (287) 67.8 (24.9) 39.0 (7.07) 234 (163) 184 (145) 404 (284) 211 (201)
Median [Q1, Q3] 223 [223, 223] 110 [110, 110] 58.0 [58.0, 58.0] 100 [100, 100] 357 [155, 611] 67.0 [47.5, 87.5] 39.0 [36.5, 41.5] 223 [106, 272] 121 [102, 236] 387 [258, 542] 108 [77.5, 298]
Median [min, max] 223 [223, 223] 110 [110, 110] 58.0 [58.0, 58.0] 100 [100, 100] 357 [73.0, 764] 67.0 [36.0, 100] 39.0 [34.0, 44.0] 223 [75.0, 658] 121 [82.0, 350] 387 [128, 696] 108 [34.0, 764]
FI_final
Mean (SD) NA NA NA NA 69.3 (53.8) 17.9 (5.00) 11.0 (2.83) 35.1 (12.8) 64.3 (63.9) 60.7 (46.6) 38.5 (34.8)
Median [Q1, Q3] 40.0 [40.0, 40.0] 15.0 [15.0, 15.0] 11.0 [11.0, 11.0] 20.0 [20.0, 20.0] 42.5 [39.0, 77.5] 17.0 [14.5, 22.3] 11.0 [10.0, 12.0] 33.0 [25.5, 40.5] 39.0 [28.0, 88.0] 52.0 [35.5, 81.5] 26.5 [17.5, 41.5]
Median [min, max] 40.0 [40.0, 40.0] 15.0 [15.0, 15.0] 11.0 [11.0, 11.0] 20.0 [20.0, 20.0] 42.5 [33.0, 171] 17.0 [11.0, 25.0] 11.0 [9.00, 13.0] 33.0 [21.0, 65.0] 39.0 [17.0, 137] 52.0 [19.0, 111] 26.5 [9.00, 171]
FQ_final
Mean (SD) NA NA NA NA 0.0134 (0.00928) 0.0206 (0.00754) 0.00819 (0.00153) 0.00732 (0.00436) 0.00861 (0.00870) 0.0488 (0.0429) 0.0157 (0.0165)
Median [Q1, Q3] 0.0206 [0.0206, 0.0206] 0.00768 [0.00768, 0.00768] 0.00828 [0.00828, 0.00828] 0.0368 [0.0368, 0.0368] 0.0101 [0.00661, 0.0161] 0.0220 [0.0157, 0.0264] 0.00819 [0.00765, 0.00874] 0.00594 [0.00383, 0.00853] 0.00499 [0.00365, 0.0118] 0.0361 [0.0249, 0.0663] 0.0104 [0.00655, 0.0191]
Median [min, max] 0.0206 [0.0206, 0.0206] 0.00768 [0.00768, 0.00768] 0.00828 [0.00828, 0.00828] 0.0368 [0.0368, 0.0368] 0.0101 [0.00653, 0.0301] 0.0220 [0.00770, 0.0288] 0.00819 [0.00711, 0.00928] 0.00594 [0.00315, 0.0169] 0.00499 [0.00230, 0.0185] 0.0361 [0.0137, 0.0966] 0.0104 [0.00230, 0.0966]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (16.7%) 2 (25.0%) 0 (0%) 1 (8.3%) 0 (0%) 0 (0%) 4 (10.5%)
1 1 (100%) 0 (0%) 1 (100%) 1 (100%) 5 (83.3%) 1 (12.5%) 2 (100%) 11 (91.7%) 0 (0%) 0 (0%) 22 (57.9%)
Missing 0 (0%) 1 (100%) 0 (0%) 0 (0%) 0 (0%) 5 (62.5%) 0 (0%) 0 (0%) 3 (100%) 3 (100%) 12 (31.6%)
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(interv_code2), data = p_sig2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]"))
Bisphosphonates
(N=10)
PTH analog
(N=10)
Romosozumab
(N=12)
Denosumab
(N=3)
Strontium_ranelate
(N=3)
Overall
(N=38)
no_rand
Mean (SD) 4700 (3220) 1260 (340) 5890 (1590) 7870 (0) 1650 (0) 4180 (2870)
Median [Q1, Q3] 4880 [1970, 7740] 1230 [1090, 1570] 7180 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 1650] 4090 [1640, 7180]
Median [min, max] 4880 [704, 7740] 1230 [578, 1650] 7180 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 1650] 4090 [578, 7870]
active_sample
Mean (SD) 3860 (2490) 1020 (292) 5460 (1530) 7530 (240) 1330 (155) 3710 (2610)
Median [Q1, Q3] 3810 [1950, 6240] 971 [885, 1210] 6640 [3790, 6660] 7390 [7390, 7600] 1390 [1270, 1410] 3600 [1280, 6620]
Median [min, max] 3810 [544, 6550] 971 [451, 1430] 6640 [3530, 6910] 7390 [7390, 7810] 1390 [1150, 1440] 3600 [451, 7810]
n_event
Mean (SD) 283 (258) 62.0 (25.2) 234 (163) 184 (145) 404 (284) 211 (201)
Median [Q1, Q3] 167 [101, 380] 49.5 [44.5, 85.3] 223 [106, 272] 121 [102, 236] 387 [258, 542] 108 [77.5, 298]
Median [min, max] 167 [58.0, 764] 49.5 [34.0, 100] 223 [75.0, 658] 121 [82.0, 350] 387 [128, 696] 108 [34.0, 764]
FI_final
Mean (SD) 50.2 (47.7) 16.5 (5.36) 35.1 (12.8) 64.3 (63.9) 60.7 (46.6) 38.5 (34.8)
Median [Q1, Q3] 39.0 [23.3, 42.8] 16.0 [13.0, 20.8] 33.0 [25.5, 40.5] 39.0 [28.0, 88.0] 52.0 [35.5, 81.5] 26.5 [17.5, 41.5]
Median [min, max] 39.0 [11.0, 171] 16.0 [9.00, 25.0] 33.0 [21.0, 65.0] 39.0 [17.0, 137] 52.0 [19.0, 111] 26.5 [9.00, 171]
FQ_final
Mean (SD) 0.0154 (0.0108) 0.0181 (0.00849) 0.00732 (0.00436) 0.00861 (0.00870) 0.0488 (0.0429) 0.0157 (0.0165)
Median [Q1, Q3] 0.0109 [0.00694, 0.0197] 0.0177 [0.0105, 0.0255] 0.00594 [0.00383, 0.00853] 0.00499 [0.00365, 0.0118] 0.0361 [0.0249, 0.0663] 0.0104 [0.00655, 0.0191]
Median [min, max] 0.0109 [0.00653, 0.0368] 0.0177 [0.00711, 0.0288] 0.00594 [0.00315, 0.0169] 0.00499 [0.00230, 0.0185] 0.0361 [0.0137, 0.0966] 0.0104 [0.00230, 0.0966]
as.factor(missing_fi)
0 1 (10.0%) 2 (20.0%) 1 (8.3%) 0 (0%) 0 (0%) 4 (10.5%)
1 8 (80.0%) 3 (30.0%) 11 (91.7%) 0 (0%) 0 (0%) 22 (57.9%)
Missing 1 (10.0%) 5 (50.0%) 0 (0%) 3 (100%) 3 (100%) 12 (31.6%)
kruskal.test(FI_final ~ interv_code2, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by interv_code2
## Kruskal-Wallis chi-squared = 13.737, df = 4, p-value = 0.008185
kruskal.test(FQ_final ~ interv_code2, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by interv_code2
## Kruskal-Wallis chi-squared = 15.78, df = 4, p-value = 0.003329

Box plots

p1 = ggplot(data = p_sig2, aes(y = FI_final, x = as.factor(interv_code2), fill = as.factor(interv_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index", x = "Pharmacological interventions", y = "Fragility index") + theme(axis.text.x = element_text(angle = 45, hjust = 1))
p2 = ggplot(data = p_sig2, aes(y = FQ_final, x = as.factor(interv_code2), fill = as.factor(interv_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility quotient", x = "Pharmacological interventions", y = "Fragility quotine") + theme(axis.text.x = element_text(angle = 45, hjust = 1))

grid.arrange(p1, p2, nrow = 1, top = textGrob("Fragility of evidence for anti-fracture efficacy by intervention sites", gp = gpar(fontsize = 20, font = 1)))

(2.3.4) Timing of fracture assessment

table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(timing), data = p_sig2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
2
(N=5)
3
(N=4)
4
(N=17)
5
(N=10)
6
(N=1)
8
(N=1)
Overall
(N=38)
no_rand
Mean (SD) 4350 (2770) 1380 (533) 3650 (2640) 6590 (2520) NA NA 4180 (2870)
Median [Q1, Q3] 4090 [1650, 7180] 1640 [1370, 1650] 4090 [1100, 7180] 7740 [7740, 7840] 1650 [1650, 1650] 2000 [2000, 2000] 4090 [1640, 7180]
Median [min, max] 4090 [1630, 7180] 1640 [578, 1650] 4090 [704, 7180] 7740 [1650, 7870] 1650 [1650, 1650] 2000 [2000, 2000] 4090 [578, 7870]
active_sample
Mean (SD) 4050 (2710) 1140 (462) 3300 (2500) 5680 (2220) NA NA 3710 (2610)
Median [Q1, Q3] 3980 [1390, 6640] 1330 [1060, 1410] 3530 [892, 6650] 6480 [5680, 7180] 1150 [1150, 1150] 1950 [1950, 1950] 3600 [1280, 6620]
Median [min, max] 3980 [1330, 6910] 1330 [451, 1430] 3530 [544, 6690] 6480 [1440, 7810] 1150 [1150, 1150] 1950 [1950, 1950] 3600 [451, 7810]
n_event
Mean (SD) 132 (110) 40.5 (6.61) 184 (150) 307 (255) NA NA 211 (201)
Median [Q1, Q3] 76.0 [75.0, 128] 40.0 [35.5, 45.0] 106 [92.0, 225] 236 [105, 398] 696 [696, 696] 312 [312, 312] 108 [77.5, 298]
Median [min, max] 76.0 [58.0, 323] 40.0 [34.0, 48.0] 106 [46.0, 658] 236 [73.0, 764] 696 [696, 696] 312 [312, 312] 108 [34.0, 764]
FI_final
Mean (SD) 22.2 (7.46) 11.5 (1.91) 30.5 (13.6) 64.3 (52.0) NA NA 38.5 (34.8)
Median [Q1, Q3] 24.0 [19.0, 27.0] 12.0 [10.5, 13.0] 25.0 [21.0, 40.0] 42.5 [38.3, 79.8] 111 [111, 111] 33.0 [33.0, 33.0] 26.5 [17.5, 41.5]
Median [min, max] 24.0 [11.0, 30.0] 12.0 [9.00, 13.0] 25.0 [15.0, 65.0] 42.5 [15.0, 171] 111 [111, 111] 33.0 [33.0, 33.0] 26.5 [9.00, 171]
FQ_final
Mean (SD) 0.00741 (0.00410) 0.0132 (0.0104) 0.0152 (0.00975) 0.0133 (0.0115) NA NA 0.0157 (0.0165)
Median [Q1, Q3] 0.00754 [0.00391, 0.00828] 0.00849 [0.00755, 0.0142] 0.0143 [0.00601, 0.0206] 0.00719 [0.00655, 0.0173] 0.0966 [0.0966, 0.0966] 0.0169 [0.0169, 0.0169] 0.0104 [0.00655, 0.0191]
Median [min, max] 0.00754 [0.00361, 0.0137] 0.00849 [0.00711, 0.0288] 0.0143 [0.00315, 0.0368] 0.00719 [0.00230, 0.0361] 0.0966 [0.0966, 0.0966] 0.0169 [0.0169, 0.0169] 0.0104 [0.00230, 0.0966]
as.factor(missing_fi)
0 1 (20.0%) 0 (0%) 2 (11.8%) 0 (0%) 0 (0%) 1 (100%) 4 (10.5%)
1 3 (60.0%) 3 (75.0%) 11 (64.7%) 5 (50.0%) 0 (0%) 0 (0%) 22 (57.9%)
Missing 1 (20.0%) 1 (25.0%) 4 (23.5%) 5 (50.0%) 1 (100%) 0 (0%) 12 (31.6%)
kruskal.test(FI_final ~ timing, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by timing
## Kruskal-Wallis chi-squared = 16.429, df = 5, p-value = 0.00572
kruskal.test(FQ_final ~ timing, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by timing
## Kruskal-Wallis chi-squared = 5.4313, df = 5, p-value = 0.3655

Box plots

p1 = ggplot(data = p_sig2, aes(y = FI_final, x = as.factor(timing), fill = as.factor(timing))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by timing of fracture assessment", x = "Timing of fracture assessment", y = "Fragility index")
p1

(2.3.5) By journal
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | as.factor(journal_code2), data = p_sig2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
NEJM
(N=27)
Lancet
(N=3)
JAMA
(N=4)
JBMR
(N=1)
JCEM
(N=1)
Other
(N=2)
Overall
(N=38)
no_rand
Mean (SD) 5280 (2700) 1580 (385) 1640 (8.02) NA NA 1180 (668) 4180 (2870)
Median [Q1, Q3] 7180 [3050, 7740] 1360 [1360, 1690] 1640 [1640, 1650] 1960 [1960, 1960] 578 [578, 578] 1180 [940, 1410] 4090 [1640, 7180]
Median [min, max] 7180 [1090, 7870] 1360 [1360, 2030] 1640 [1630, 1650] 1960 [1960, 1960] 578 [578, 578] 1180 [704, 1650] 4090 [578, 7870]
active_sample
Mean (SD) 4720 (2450) 1350 (518) 1360 (73.1) NA NA 847 (428) 3710 (2610)
Median [Q1, Q3] 5680 [2740, 6650] 1050 [1050, 1500] 1370 [1310, 1410] 1950 [1950, 1950] 451 [451, 451] 847 [695, 998] 3600 [1280, 6620]
Median [min, max] 5680 [882, 7810] 1050 [1050, 1950] 1370 [1270, 1430] 1950 [1950, 1950] 451 [451, 451] 847 [544, 1150] 3600 [451, 7810]
n_event
Mean (SD) 240 (200) 138 (73.4) 43.0 (10.9) NA NA 398 (421) 211 (201)
Median [Q1, Q3] 168 [84.5, 337] 100 [96.0, 162] 40.0 [35.5, 47.5] 110 [110, 110] 48.0 [48.0, 48.0] 398 [249, 547] 108 [77.5, 298]
Median [min, max] 168 [46.0, 764] 100 [92.0, 223] 40.0 [34.0, 58.0] 110 [110, 110] 48.0 [48.0, 48.0] 398 [100, 696] 108 [34.0, 764]
FI_final
Mean (SD) 44.0 (35.7) 24.0 (13.9) 11.0 (1.63) NA NA 65.5 (64.3) 38.5 (34.8)
Median [Q1, Q3] 36.0 [23.5, 42.5] 17.0 [16.0, 28.5] 11.0 [10.5, 11.5] 15.0 [15.0, 15.0] 13.0 [13.0, 13.0] 65.5 [42.8, 88.3] 26.5 [17.5, 41.5]
Median [min, max] 36.0 [17.0, 171] 17.0 [15.0, 40.0] 11.0 [9.00, 13.0] 15.0 [15.0, 15.0] 13.0 [13.0, 13.0] 65.5 [20.0, 111] 26.5 [9.00, 171]
FQ_final
Mean (SD) 0.0127 (0.00949) 0.0170 (0.00321) 0.00809 (0.000924) NA NA 0.0667 (0.0423) 0.0157 (0.0165)
Median [Q1, Q3] 0.00754 [0.00562, 0.0177] 0.0162 [0.0153, 0.0184] 0.00799 [0.00755, 0.00853] 0.00768 [0.00768, 0.00768] 0.0288 [0.0288, 0.0288] 0.0667 [0.0517, 0.0816] 0.0104 [0.00655, 0.0191]
Median [min, max] 0.00754 [0.00230, 0.0361] 0.0162 [0.0143, 0.0206] 0.00799 [0.00711, 0.00928] 0.00768 [0.00768, 0.00768] 0.0288 [0.0288, 0.0288] 0.0667 [0.0368, 0.0966] 0.0104 [0.00230, 0.0966]
as.factor(missing_fi)
0 2 (7.4%) 2 (66.7%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 4 (10.5%)
1 16 (59.3%) 1 (33.3%) 4 (100%) 0 (0%) 0 (0%) 1 (50.0%) 22 (57.9%)
Missing 9 (33.3%) 0 (0%) 0 (0%) 1 (100%) 1 (100%) 1 (50.0%) 12 (31.6%)
kruskal.test(FI_final ~ journal, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by journal
## Kruskal-Wallis chi-squared = 16.53, df = 5, p-value = 0.005483
kruskal.test(FQ_final ~ journal, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by journal
## Kruskal-Wallis chi-squared = 9.3851, df = 5, p-value = 0.09465

Box plots

p1 = ggplot(data = p_sig2, aes(y = FI_final, x = as.factor(timing), fill = as.factor(journal_code2))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by timing of fracture assessment", x = "Timing of fracture assessment", y = "Fragility index") 
p1

(2.3.6) By sex
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | sex, data = p_sig2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
Both
(N=1)
Women
(N=37)
Overall
(N=38)
no_rand
Mean (SD) NA 4280 (2850) 4180 (2870)
Median [Q1, Q3] 578 [578, 578] 4090 [1650, 7180] 4090 [1640, 7180]
Median [min, max] 578 [578, 578] 4090 [704, 7870] 4090 [578, 7870]
active_sample
Mean (SD) NA 3800 (2590) 3710 (2610)
Median [Q1, Q3] 451 [451, 451] 3660 [1330, 6640] 3600 [1280, 6620]
Median [min, max] 451 [451, 451] 3660 [544, 7810] 3600 [451, 7810]
n_event
Mean (SD) NA 216 (202) 211 (201)
Median [Q1, Q3] 48.0 [48.0, 48.0] 110 [82.0, 312] 108 [77.5, 298]
Median [min, max] 48.0 [48.0, 48.0] 110 [34.0, 764] 108 [34.0, 764]
FI_final
Mean (SD) NA 39.2 (35.0) 38.5 (34.8)
Median [Q1, Q3] 13.0 [13.0, 13.0] 27.0 [19.0, 42.0] 26.5 [17.5, 41.5]
Median [min, max] 13.0 [13.0, 13.0] 27.0 [9.00, 171] 26.5 [9.00, 171]
FQ_final
Mean (SD) NA 0.0153 (0.0166) 0.0157 (0.0165)
Median [Q1, Q3] 0.0288 [0.0288, 0.0288] 0.00928 [0.00653, 0.0185] 0.0104 [0.00655, 0.0191]
Median [min, max] 0.0288 [0.0288, 0.0288] 0.00928 [0.00230, 0.0966] 0.0104 [0.00230, 0.0966]
as.factor(missing_fi)
0 0 (0%) 4 (10.8%) 4 (10.5%)
1 0 (0%) 22 (59.5%) 22 (57.9%)
Missing 1 (100%) 11 (29.7%) 12 (31.6%)
kruskal.test(FI_final ~ sex, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by sex
## Kruskal-Wallis chi-squared = 1.8734, df = 1, p-value = 0.1711
kruskal.test(FQ_final ~ sex, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by sex
## Kruskal-Wallis chi-squared = 1.7484, df = 1, p-value = 0.1861

Box plots

p1 = ggplot(data = p_sig2, aes(y = FI_final, x = as.factor(sex), fill = as.factor(sex))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by sex", x = "Sex", y = "Fragility index") 
p1

(2.3.7) By placebo
table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi) | placebo, data = p_sig2, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
Active
(N=10)
Placebo
(N=28)
Overall
(N=38)
no_rand
Mean (SD) 2810 (1350) 4670 (3120) 4180 (2870)
Median [Q1, Q3] 2870 [1640, 4090] 7180 [1640, 7740] 4090 [1640, 7180]
Median [min, max] 2870 [1360, 4090] 7180 [578, 7870] 4090 [578, 7870]
active_sample
Mean (SD) 2490 (1330) 4140 (2830) 3710 (2610)
Median [Q1, Q3] 2480 [1300, 3660] 5680 [1280, 6650] 3600 [1280, 6620]
Median [min, max] 2480 [1050, 3980] 5680 [451, 7810] 3600 [451, 7810]
n_event
Mean (SD) 212 (198) 211 (205) 211 (201)
Median [Q1, Q3] 161 [56.0, 306] 108 [80.5, 263] 108 [77.5, 298]
Median [min, max] 161 [34.0, 658] 108 [46.0, 764] 108 [34.0, 764]
FI_final
Mean (SD) 27.6 (18.7) 42.4 (38.5) 38.5 (34.8)
Median [Q1, Q3] 21.5 [13.5, 39.0] 30.0 [20.8, 40.5] 26.5 [17.5, 41.5]
Median [min, max] 21.5 [9.00, 65.0] 30.0 [11.0, 171] 26.5 [9.00, 171]
FQ_final
Mean (SD) 0.0111 (0.00383) 0.0173 (0.0189) 0.0157 (0.0165)
Median [Q1, Q3] 0.0104 [0.00758, 0.0140] 0.0109 [0.00574, 0.0249] 0.0104 [0.00655, 0.0191]
Median [min, max] 0.0104 [0.00711, 0.0169] 0.0109 [0.00230, 0.0966] 0.0104 [0.00230, 0.0966]
as.factor(missing_fi)
0 3 (30.0%) 1 (3.6%) 4 (10.5%)
1 7 (70.0%) 15 (53.6%) 22 (57.9%)
Missing 0 (0%) 12 (42.9%) 12 (31.6%)
kruskal.test(FI_final ~ placebo, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by placebo
## Kruskal-Wallis chi-squared = 1.4259, df = 1, p-value = 0.2324
kruskal.test(FQ_final ~ placebo, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by placebo
## Kruskal-Wallis chi-squared = 0.0010989, df = 1, p-value = 0.9736

Box plots

p1 = ggplot(data = p_sig2, aes(y = FI_final, x = as.factor(control), fill = as.factor(control))) + geom_boxplot() + 
  geom_jitter(alpha=0.2) + theme_bw() + theme(legend.position="none") + 
  labs(title = "Fragility index by types of control", x = "Types of control", y = "Fragility index") 
p1

R Markdown file saved at https://rpubs.com/ThachTran/1154056