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 aggregate data: take(mtcars, mean_mpg = mean(mpg), by = am)
## 
## 
## 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.csv")
head(fi)
##    id study_ext            author year journal       country blinding
## 1 a_1        5b Leder_ACTIVExtend 2020    JCEM International   Double
## 2 a_2         1           Kendler 2018  Lancet International   Double
## 3 a_3         1           Kendler 2018  Lancet International   Double
## 4 a_4         1           Kendler 2018  Lancet International   Double
## 5 a_5         1           Kendler 2018  Lancet International   Double
## 6 a_6         1           Kendler 2018  Lancet International   Double
##    intervention     control women_per timing fi        fq      pval
## 1 Abaloparatide Alendronate         1      4  4 0.0035971 0.0092162
## 2  Teriparatide Risedronate         1      4 15 0.0142993 0.0002691
## 3  Teriparatide Risedronate         1      4 17 0.0162059 0.0002114
## 4  Teriparatide Risedronate         1      4 12 0.0088235 0.0010345
## 5  Teriparatide Risedronate         1      4  2 0.0019066 0.0208278
## 6  Teriparatide Risedronate         1      2  3 0.0025884 0.0229448
##           fx_site outcome e_con n_rand_con e_intv n_rand_intv      x95_ci
## 1        Vert_24m       1    16        581      3         558  0.10, 0.87
## 2        Vert_24m       1    64        680     28         680 [0.29,0.68]
## 3 NworsenVert_24m       1    69        680     31         680 [0.31,0.68]
## 4      ClinFx_24m       2    61        680     30         680 [0.32,0.74]
## 5       MVert_24m       1    12        680      2         680  0.04, 0.74
## 6        Vert_12m       1    18        680     35         680  [0.3,0.91]
##   p_value pri_endpoint sen_analysis extended                           notes
## 1  0.0270            0            1        1      post-hoc analysis/extended
## 2  0.0001            1            0        0 6 pt excluded from the analyses
## 3  0.0001            0            0        0                                
## 4  0.0009            0            0        0                                
## 5  0.0070            0            0        0                                
## 6  0.0190            0            0        0                                
##                                             st_cohort rep_loss rep_withdr
## 1                   postm osteoporotic women aged 49+        9         62
## 2 postm women aged 45+: <=-1.5, 2+ mod/1+ sev vert fx       12        185
## 3 postm women aged 45+: <=-1.5, 2+ mod/1+ sev vert fx       12        185
## 4 postm women aged 45+: <=-1.5, 2+ mod/1+ sev vert fx       12        185
## 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
## 1        68      1861       568        544
## 2        20      1013       533        516
## 3        20      1013       533        516
## 4        20      1013       563        538
## 5        20      1013       533        516
## 6        20      1013       574        585
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

Data management:

  1. Fracture sites:
table(fi$fx_site)
## 
##                      ClinFx_12m                      ClinFx_18m 
##                               2                               1 
##                      ClinFx_24m                      ClinFx_36m 
##                               3                               2 
##                      ClinFx_72m                      ClinFx_72w 
##                               1                               2 
##                    ClinVert_12m                    ClinVert_24m 
##                               1                               1 
##                    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                               1 
##                         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                               1 
##                         MOF_18m                         MOF_24m 
##                               1                               2 
##                     MultiFx_36m                   MultiVert_24m 
##                               1                               2 
##                   MultiVert_36m                       MVert_24m 
##                               1                               1 
##                       MVert_36m                    NmodVert_12m 
##                               2                               1 
##                    NmodVert_24m                     Nonvert_18m 
##                               1                               3 
##                     NonVert_18m                     NonVert_24m 
##                               1                               4 
##                     NonVert_36m                     NonVert_60m 
##                               6                               1 
##                     NonVert_72m                  NonVertOFx_24m 
##                               1                               2 
##                 NworsenVert_12m                 NworsenVert_24m 
##                               2                               4 
##                         OFx_12m                         OFx_24m 
##                               1                               1 
##                         Ofx_48m                         OFx_72m 
##                               1                               1 
##                 OtherClinFx_48m                        Vert_12m 
##                               1                              10 
##                        Vert_18m                        Vert_24m 
##                               3                              13 
##                        Vert_36m                        Vert_48m 
##                              10                               3 
##                        Vert_48w                        Vert_60m 
##                               1                               2 
##                         Vert_6m                        Vert_72m 
##                               1                               1 
##                        Vert_72w 
##                               2
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_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 == "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" ~ 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          12           4           4           2          23 
##     Vert_fx ClinVert_fx         Hip     Forearm 
##          64          12          10           2
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 
##                 16                 10                 23                 64 
## Clinical Vertebrae                Hip            Forearm 
##                 12                 10                  2
  1. Interventions:
table(fi$intervention)
## 
##            Abaloparatide              Alendronate                  Calcium 
##                        5                        2                        3 
##          Calcium + vit D                Denosumab        Ibandronate daily 
##                       11                        9                        4 
## Ibandronate intermittent              Minodronate             Risendronate 
##                        2                        4                        5 
##              Romosozumab       Strontium Ranelate             Teriparatide 
##                       28                       17                       13 
##          Teriparatide_20          Teriparatide_40                    Vit D 
##                        5                        5                        3 
##              Zoledronate 
##                       21
fi_final = fi_final %>%
  mutate(interv_code1 = case_when(intervention == "Alendronate"  ~ 1.1,
                                 intervention == "Ibandronate daily" | intervention == "Ibandronate intermittent" ~ 1.2, 
                                 intervention == "Risendronate" ~ 1.3, 
                                 intervention == "Minodronate" ~ 1.4, 
                                 intervention == "Zoledronate" ~ 1.5, 
                                 intervention == "Teriparatide" | intervention == "Teriparatide_20" | 
                                   intervention == "Teriparatide_40" ~ 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 
##                  2                  6                  5                  4 
##        Zoledronate       Teriparatide      Abaloparatide        Romosozumab 
##                 21                 23                  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 == "Minodronate" | intervention == "Zoledronate" ~ 1, 
                                 intervention == "Teriparatide" | intervention == "Teriparatide_20" | 
                                   intervention == "Teriparatide_40" | intervention == "Abaloparatide" ~ 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 
##                 38                 28                 28                  9 
## Strontium_ranelate       Calcium_VitD 
##                 17                 17
  1. Journals:
table(fi$journal)
## 
## Am J Clin Nutr      Arth Rheu            BMJ           JAMA           JBMR 
##              1              4              7             11              6 
##           JCEM           JECM         Lancet           NEJM             OI 
##              8              5              5             81              9
fi_final = fi_final %>%
  mutate(journal_code1 = case_when(journal == "NEJM" ~ 1,
                                   journal == "Lancet" ~ 2,
                                   journal == "BMJ" ~ 3,
                                   journal == "JAMA" ~ 4, 
                                   journal == "JBMR" ~ 5, 
                                   journal == "JCEM" | journal == "JECM" ~ 6, 
                                   journal == "OI" ~ 7,
                                   journal == "Am J Clin Nutr" | journal == "Arth Rheu" ~ 8))
var_lab(fi_final$journal_code1) = "Journal"
val_lab(fi_final$journal_code1) = num_lab("
                                    1 NEJM
                                    2 Lancet
                                    3 BMJ
                                    4 JAMA
                                    5 JBMR
                                    6 JCEM
                                    7 OI
                                    8 Other")
table(fi_final$journal_code1)
## 
##   NEJM Lancet    BMJ   JAMA   JBMR   JCEM     OI  Other 
##     81      5      7     11      6     13      9      5
fi_final = fi_final %>%
  mutate(journal_code2 = case_when(journal == "NEJM" ~ 1,
                                   journal == "Lancet" ~ 2,
                                   journal == "BMJ" ~ 3,
                                   journal == "JAMA" ~ 4, 
                                   journal == "JBMR" ~ 5, 
                                   journal == "JCEM" | journal == "JECM" ~ 6, 
                                   journal == "OI" | journal == "Am J Clin Nutr" | journal == "Arth Rheu" ~ 7))
var_lab(fi_final$journal_code2) = "Journal"
val_lab(fi_final$journal_code2) = num_lab("
                                    1 NEJM
                                    2 Lancet
                                    3 BMJ
                                    4 JAMA
                                    5 JBMR
                                    6 JCEM
                                    7 Other")
table(fi_final$journal_code2)
## 
##   NEJM Lancet    BMJ   JAMA   JBMR   JCEM  Other 
##     81      5      7     11      6     13     14
  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 
##    15    10   112
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 
##      27     110

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= 8 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 137 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,
##   129 studies yield significance with
##     median FI = 9, range 1-171, IQR 4-22 and
##     median FQ = 0.5%, range 0.0%-9.7%, IQR 0.2%-0.9%;
##   8 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 4-20 and
##     median FQ = 0.5%, range 0.0%-9.7%, IQR 0.2%-0.9%
fi_final$Pval_screen = fi_screen$pval

Only analyses with statistical significant results from logistic regression (binary outcome) will be analysed

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 129 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,
##   129 studies yield significance with
##     median FI = 9, range 1-171, IQR 4-22 and
##     median FQ = 0.5%, range 0.0%-9.7%, IQR 0.2%-0.9%;
##   0 study yields non-significance
##   overall, among all studies,
##     median FI = 9, range 1-171, IQR 4-22 and
##     median FQ = 0.5%, range 0.0%-9.7%, IQR 0.2%-0.9%
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

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

n= 129 analyses from all 23 studies (+ 6 extended studies)

(1.1) Overall

(1.1.1) Overall
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 FALSE FALSE FALSE 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  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [61]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE
##  [73] FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [85] FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [97]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
## [109]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE
## [121]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
fi_sig$missing_fi[fi_sig$rep_loss == NA] = NA

table1(~ no_rand + active_sample + n_event + FI_final + FQ_final + as.factor(missing_fi), data = fi_sig, render.continuous = c(. = "Mean (SD)", . = "Median [Q1, Q3]", . = "Median [min, max]" ))
Overall
(N=129)
no_rand
Mean (SD) 3090 (2360)
Median [Q1, Q3] 1960 [1360, 4090]
Median [min, max] 1960 [450, 7870]
active_sample
Mean (SD) 2700 (2140)
Median [Q1, Q3] 1860 [1130, 3700]
Median [min, max] 1860 [339, 7810]
n_event
Mean (SD) 174 (176)
Median [Q1, Q3] 101 [51.0, 246]
Median [min, max] 101 [10.0, 764]
FI_final
Mean (SD) 17.5 (24.8)
Median [Q1, Q3] 9.00 [4.00, 22.0]
Median [min, max] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00815 (0.0111)
Median [Q1, Q3] 0.00499 [0.00230, 0.00928]
Median [min, max] 0.00499 [0.000151, 0.0966]
as.factor(missing_fi)
0 10 (7.8%)
1 73 (56.6%)
Missing 46 (35.7%)

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(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(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.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=12)
OFx
(N=4)
MOF
(N=4)
Dif_comb
(N=1)
NonVert_fx
(N=19)
Vert_fx
(N=63)
ClinVert_fx
(N=12)
Hip
(N=9)
Forearm
(N=2)
Overall
(N=129)
no_rand
Mean (SD) 1850 (423) 3580 (2630) 2780 (1580) 5020 (2680) NA 3930 (2380) 2690 (2320) 2820 (2490) 3950 (2300) 1740 (374) 3090 (2360)
Median [Q1, Q3] 1770 [1620, 2030] 3110 [1570, 5120] 3050 [1730, 4090] 5640 [3480, 7180] 2690 [2690, 2690] 4090 [1810, 5090] 1630 [1200, 4090] 1960 [1650, 2620] 3270 [2300, 4090] 1740 [1600, 1870] 1960 [1360, 4090]
Median [min, max] 1770 [1470, 2300] 3110 [549, 7740] 3050 [930, 4090] 5640 [1650, 7180] 2690 [2690, 2690] 4090 [450, 7870] 1630 [549, 7870] 1960 [549, 7870] 3270 [1770, 7870] 1740 [1470, 2000] 1960 [450, 7870]
active_sample
Mean (SD) 1830 (439) 3100 (2480) 2670 (1490) 4320 (2410) NA 3450 (2200) 2370 (2100) 2370 (2380) 3260 (1920) 1160 (810) 2700 (2140)
Median [Q1, Q3] 1770 [1600, 2030] 2820 [946, 4930] 2890 [1690, 3870] 4820 [2970, 6170] 2690 [2690, 2690] 3560 [1700, 4940] 1350 [1050, 3520] 1650 [975, 2270] 2380 [1980, 3320] 1160 [876, 1450] 1860 [1130, 3700]
Median [min, max] 1770 [1430, 2300] 2820 [426, 6690] 2890 [930, 3980] 4820 [1270, 6380] 2690 [2690, 2690] 3560 [389, 6670] 1350 [426, 7390] 1650 [339, 7810] 2380 [1770, 6600] 1160 [590, 1740] 1860 [339, 7810]
n_event
Mean (SD) 354 (290) 255 (217) 334 (251) 170 (135) NA 295 (211) 125 (145) 86.4 (62.5) 158 (86.9) 111 (16.3) 174 (176)
Median [Q1, Q3] 475 [249, 519] 210 [87.3, 385] 318 [245, 407] 140 [86.8, 222] 147 [147, 147] 249 [116, 433] 73.0 [36.5, 125] 63.0 [57.0, 108] 140 [106, 190] 111 [105, 116] 101 [51.0, 246]
Median [min, max] 475 [23.0, 563] 210 [31.0, 764] 318 [44.0, 658] 140 [44.0, 355] 147 [147, 147] 249 [37.0, 680] 73.0 [10.0, 696] 63.0 [19.0, 207] 140 [58.0, 315] 111 [99.0, 122] 101 [10.0, 764]
FI_final
Mean (SD) 16.7 (11.9) 18.0 (24.4) 32.3 (26.2) 13.8 (9.14) NA 10.9 (11.5) 21.8 (31.2) 12.3 (14.1) 6.67 (5.34) 5.50 (4.95) 17.5 (24.8)
Median [Q1, Q3] 22.0 [12.5, 23.5] 7.50 [5.00, 17.8] 31.5 [22.8, 41.0] 12.0 [8.00, 17.8] 4.00 [4.00, 4.00] 5.00 [2.00, 17.5] 11.0 [4.00, 23.5] 6.50 [3.50, 13.5] 5.00 [2.00, 11.0] 5.50 [3.75, 7.25] 9.00 [4.00, 22.0]
Median [min, max] 22.0 [3.00, 25.0] 7.50 [4.00, 89.0] 31.5 [1.00, 65.0] 12.0 [5.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] 5.50 [2.00, 9.00] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00847 (0.00558) 0.00710 (0.00471) 0.0106 (0.00776) 0.00443 (0.00331) NA 0.00340 (0.00299) 0.0115 (0.0146) 0.00517 (0.00325) 0.00254 (0.00247) 0.00429 (0.00127) 0.00815 (0.0111)
Median [Q1, Q3] 0.0109 [0.00647, 0.0117] 0.00731 [0.00275, 0.00975] 0.0122 [0.00592, 0.0169] 0.00478 [0.00204, 0.00717] 0.00149 [0.00149, 0.00149] 0.00255 [0.00108, 0.00454] 0.00666 [0.00302, 0.0153] 0.00456 [0.00305, 0.00542] 0.00150 [0.00101, 0.00337] 0.00429 [0.00384, 0.00474] 0.00499 [0.00230, 0.00928]
Median [min, max] 0.0109 [0.00209, 0.0125] 0.00731 [0.00124, 0.0146] 0.0122 [0.00108, 0.0169] 0.00478 [0.000783, 0.00736] 0.00149 [0.00149, 0.00149] 0.00255 [0.000203, 0.0105] 0.00666 [0.000151, 0.0966] 0.00456 [0.00205, 0.0125] 0.00150 [0.000303, 0.00695] 0.00429 [0.00339, 0.00519] 0.00499 [0.000151, 0.0966]
as.factor(missing_fi)
0 0 (0%) 1 (8.3%) 2 (50.0%) 0 (0%) 0 (0%) 1 (5.3%) 5 (7.9%) 0 (0%) 0 (0%) 1 (50.0%) 10 (7.8%)
1 1 (33.3%) 8 (66.7%) 2 (50.0%) 4 (100%) 1 (100%) 11 (57.9%) 35 (55.6%) 4 (33.3%) 6 (66.7%) 1 (50.0%) 73 (56.6%)
Missing 2 (66.7%) 3 (25.0%) 0 (0%) 0 (0%) 0 (0%) 7 (36.8%) 23 (36.5%) 8 (66.7%) 3 (33.3%) 0 (0%) 46 (35.7%)
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=15)
Osteoporotic
(N=9)
Non-Vertebrae
(N=19)
Vertebrae
(N=63)
Clinical Vertebrae
(N=12)
Hip
(N=9)
Forearm
(N=2)
Overall
(N=129)
no_rand
Mean (SD) 3230 (2440) 3770 (2250) 3930 (2380) 2690 (2320) 2820 (2490) 3950 (2300) 1740 (374) 3090 (2360)
Median [Q1, Q3] 2130 [1560, 4260] 4090 [2000, 4090] 4090 [1810, 5090] 1630 [1200, 4090] 1960 [1650, 2620] 3270 [2300, 4090] 1740 [1600, 1870] 1960 [1360, 4090]
Median [min, max] 2130 [549, 7740] 4090 [930, 7180] 4090 [450, 7870] 1630 [549, 7870] 1960 [549, 7870] 3270 [1770, 7870] 1740 [1470, 2000] 1960 [450, 7870]
active_sample
Mean (SD) 2850 (2270) 3410 (1940) 3450 (2200) 2370 (2100) 2370 (2380) 3260 (1920) 1160 (810) 2700 (2140)
Median [Q1, Q3] 2010 [1190, 4070] 3530 [1950, 3980] 3560 [1700, 4940] 1350 [1050, 3520] 1650 [975, 2270] 2380 [1980, 3320] 1160 [876, 1450] 1860 [1130, 3700]
Median [min, max] 2010 [426, 6690] 3530 [930, 6380] 3560 [389, 6670] 1350 [426, 7390] 1650 [339, 7810] 2380 [1770, 6600] 1160 [590, 1740] 1860 [339, 7810]
n_event
Mean (SD) 275 (225) 240 (196) 295 (211) 125 (145) 86.4 (62.5) 158 (86.9) 111 (16.3) 174 (176)
Median [Q1, Q3] 231 [83.5, 437] 178 [101, 323] 249 [116, 433] 73.0 [36.5, 125] 63.0 [57.0, 108] 140 [106, 190] 111 [105, 116] 101 [51.0, 246]
Median [min, max] 231 [23.0, 764] 178 [44.0, 658] 249 [37.0, 680] 73.0 [10.0, 696] 63.0 [19.0, 207] 140 [58.0, 315] 111 [99.0, 122] 101 [10.0, 764]
FI_final
Mean (SD) 17.7 (22.1) 20.9 (20.3) 10.9 (11.5) 21.8 (31.2) 12.3 (14.1) 6.67 (5.34) 5.50 (4.95) 17.5 (24.8)
Median [Q1, Q3] 8.00 [5.00, 23.5] 15.0 [5.00, 30.0] 5.00 [2.00, 17.5] 11.0 [4.00, 23.5] 6.50 [3.50, 13.5] 5.00 [2.00, 11.0] 5.50 [3.75, 7.25] 9.00 [4.00, 22.0]
Median [min, max] 8.00 [3.00, 89.0] 15.0 [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] 5.50 [2.00, 9.00] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00737 (0.00471) 0.00685 (0.00635) 0.00340 (0.00299) 0.0115 (0.0146) 0.00517 (0.00325) 0.00254 (0.00247) 0.00429 (0.00127) 0.00815 (0.0111)
Median [Q1, Q3] 0.00748 [0.00261, 0.0113] 0.00711 [0.00149, 0.00754] 0.00255 [0.00108, 0.00454] 0.00666 [0.00302, 0.0153] 0.00456 [0.00305, 0.00542] 0.00150 [0.00101, 0.00337] 0.00429 [0.00384, 0.00474] 0.00499 [0.00230, 0.00928]
Median [min, max] 0.00748 [0.00124, 0.0146] 0.00711 [0.000783, 0.0169] 0.00255 [0.000203, 0.0105] 0.00666 [0.000151, 0.0966] 0.00456 [0.00205, 0.0125] 0.00150 [0.000303, 0.00695] 0.00429 [0.00339, 0.00519] 0.00499 [0.000151, 0.0966]
as.factor(missing_fi)
0 1 (6.7%) 2 (22.2%) 1 (5.3%) 5 (7.9%) 0 (0%) 0 (0%) 1 (50.0%) 10 (7.8%)
1 9 (60.0%) 7 (77.8%) 11 (57.9%) 35 (55.6%) 4 (33.3%) 6 (66.7%) 1 (50.0%) 73 (56.6%)
Missing 5 (33.3%) 0 (0%) 7 (36.8%) 23 (36.5%) 8 (66.7%) 3 (33.3%) 0 (0%) 46 (35.7%)
kruskal.test(FI_final ~ fx_code2, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by fx_code2
## Kruskal-Wallis chi-squared = 8.475, df = 6, p-value = 0.2053
kruskal.test(FQ_final ~ fx_code2, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by fx_code2
## Kruskal-Wallis chi-squared = 19.86, df = 6, p-value = 0.002932

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")
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")

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=2)
Ibandronate
(N=6)
Risedronate
(N=5)
Minodronate
(N=3)
Zoledronate
(N=20)
Teriparatide
(N=22)
Abaloparatide
(N=4)
Romosozumab
(N=28)
Denosumab
(N=9)
Strontium_ranelate
(N=15)
Calcium_VitD
(N=15)
Overall
(N=129)
no_rand
Mean (SD) 4430 (0) 1960 (0) 1490 (308) 704 (0) 3490 (2870) 1010 (342) 1520 (253) 5420 (1560) 5020 (3370) 2610 (1570) 2320 (965) 3090 (2360)
Median [Q1, Q3] 4430 [4430, 4430] 1960 [1960, 1960] 1630 [1630, 1630] 704 [704, 704] 2000 [1200, 7740] 1090 [578, 1290] 1650 [1520, 1650] 4090 [4090, 7180] 7870 [1470, 7870] 1650 [1650, 3750] 2300 [1620, 3270] 1960 [1360, 4090]
Median [min, max] 4430 [4430, 4430] 1960 [1960, 1960] 1630 [939, 1630] 704 [704, 704] 2000 [1200, 7740] 1090 [549, 1640] 1650 [1140, 1650] 4090 [4090, 7180] 7870 [1470, 7870] 1650 [1220, 5090] 2300 [450, 3270] 1960 [450, 7870]
active_sample
Mean (SD) 4280 (211) 1950 (0) 1270 (317) 575 (27.7) 2810 (2350) 810 (288) 1260 (118) 4910 (1500) 4600 (3080) 2330 (1490) 1810 (830) 2700 (2140)
Median [Q1, Q3] 4280 [4210, 4360] 1950 [1950, 1950] 1330 [1280, 1370] 582 [563, 590] 1860 [1130, 5680] 882 [457, 1010] 1270 [1230, 1310] 4040 [3640, 6640] 6600 [1350, 7390] 1440 [1390, 3030] 1770 [1350, 2380] 1860 [1130, 3700]
Median [min, max] 4280 [4130, 4430] 1950 [1950, 1950] 1330 [759, 1630] 582 [544, 598] 1860 [339, 6550] 882 [426, 1430] 1270 [1110, 1400] 4040 [3240, 6910] 6600 [1350, 7810] 1440 [1150, 4940] 1770 [389, 2790] 1860 [339, 7810]
n_event
Mean (SD) 265 (204) 81.5 (23.1) 86.0 (39.3) 79.3 (20.5) 189 (219) 50.3 (26.7) 43.3 (24.1) 209 (146) 140 (180) 347 (221) 223 (163) 174 (176)
Median [Q1, Q3] 265 [193, 337] 70.5 [64.5, 101] 68.0 [65.0, 85.0] 79.0 [69.0, 89.5] 86.0 [38.5, 265] 44.0 [31.8, 75.5] 39.0 [30.3, 52.0] 173 [106, 272] 69.0 [29.0, 121] 330 [166, 504] 176 [96.0, 335] 101 [51.0, 246]
Median [min, max] 265 [121, 409] 70.5 [63.0, 112] 68.0 [58.0, 154] 79.0 [59.0, 100] 86.0 [13.0, 764] 44.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] 101 [10.0, 764]
FI_final
Mean (SD) 10.0 (4.24) 8.50 (4.68) 5.80 (4.87) 10.0 (9.17) 25.5 (40.6) 9.32 (7.65) 7.50 (4.36) 22.7 (19.2) 25.1 (43.7) 25.1 (29.2) 9.67 (9.01) 17.5 (24.8)
Median [Q1, Q3] 10.0 [8.50, 11.5] 7.50 [4.50, 12.0] 4.00 [2.00, 11.0] 8.00 [5.00, 14.0] 9.50 [3.50, 34.3] 7.00 [2.25, 14.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, 22.0]
Median [min, max] 10.0 [7.00, 13.0] 7.50 [4.00, 15.0] 4.00 [1.00, 11.0] 8.00 [2.00, 20.0] 9.50 [1.00, 171] 7.00 [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.00236 (0.00111) 0.00435 (0.00240) 0.00475 (0.00356) 0.0180 (0.0171) 0.00720 (0.00710) 0.0120 (0.00941) 0.00578 (0.00293) 0.00501 (0.00481) 0.00432 (0.00546) 0.0171 (0.0246) 0.00508 (0.00378) 0.00815 (0.0111)
Median [Q1, Q3] 0.00236 [0.00197, 0.00275] 0.00384 [0.00231, 0.00615] 0.00527 [0.00156, 0.00801] 0.0137 [0.00855, 0.0253] 0.00535 [0.00268, 0.00800] 0.00897 [0.00450, 0.0185] 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.00499 [0.00230, 0.00928]
Median [min, max] 0.00236 [0.00158, 0.00314] 0.00384 [0.00205, 0.00768] 0.00527 [0.000615, 0.00828] 0.0137 [0.00334, 0.0368] 0.00535 [0.000887, 0.0301] 0.00897 [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.00499 [0.000151, 0.0966]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 0 (0%) 0 (0%) 5 (25.0%) 2 (9.1%) 0 (0%) 2 (7.1%) 0 (0%) 1 (6.7%) 0 (0%) 10 (7.8%)
1 0 (0%) 0 (0%) 4 (80.0%) 3 (100%) 15 (75.0%) 4 (18.2%) 4 (100%) 26 (92.9%) 4 (44.4%) 3 (20.0%) 10 (66.7%) 73 (56.6%)
Missing 2 (100%) 6 (100%) 1 (20.0%) 0 (0%) 0 (0%) 16 (72.7%) 0 (0%) 0 (0%) 5 (55.6%) 11 (73.3%) 5 (33.3%) 46 (35.7%)
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=36)
PTH analog
(N=26)
Romosozumab
(N=28)
Denosumab
(N=9)
Strontium_ranelate
(N=15)
Calcium_VitD
(N=15)
Overall
(N=129)
no_rand
Mean (SD) 2780 (2380) 1090 (375) 5420 (1560) 5020 (3370) 2610 (1570) 2320 (965) 3090 (2360)
Median [Q1, Q3] 1960 [1200, 2130] 1100 [705, 1360] 4090 [4090, 7180] 7870 [1470, 7870] 1650 [1650, 3750] 2300 [1620, 3270] 1960 [1360, 4090]
Median [min, max] 1960 [704, 7740] 1100 [549, 1650] 4090 [4090, 7180] 7870 [1470, 7870] 1650 [1220, 5090] 2300 [450, 3270] 1960 [450, 7870]
active_sample
Mean (SD) 2350 (1950) 880 (315) 4910 (1500) 4600 (3080) 2330 (1490) 1810 (830) 2700 (2140)
Median [Q1, Q3] 1860 [1130, 1970] 887 [567, 1090] 4040 [3640, 6640] 6600 [1350, 7390] 1440 [1390, 3030] 1770 [1350, 2380] 1860 [1130, 3700]
Median [min, max] 1860 [339, 6550] 887 [426, 1430] 4040 [3240, 6910] 6600 [1350, 7810] 1440 [1150, 4940] 1770 [389, 2790] 1860 [339, 7810]
n_event
Mean (SD) 152 (176) 49.2 (26.0) 209 (146) 140 (180) 347 (221) 223 (163) 174 (176)
Median [Q1, Q3] 76.0 [59.8, 144] 44.0 [31.8, 70.3] 173 [106, 272] 69.0 [29.0, 121] 330 [166, 504] 176 [96.0, 335] 101 [51.0, 246]
Median [min, max] 76.0 [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] 101 [10.0, 764]
FI_final
Mean (SD) 17.8 (31.4) 9.04 (7.20) 22.7 (19.2) 25.1 (43.7) 25.1 (29.2) 9.67 (9.01) 17.5 (24.8)
Median [Q1, Q3] 8.50 [4.00, 15.0] 7.00 [3.25, 13.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, 22.0]
Median [min, max] 8.50 [1.00, 171] 7.00 [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.00701 (0.00774) 0.0111 (0.00898) 0.00501 (0.00481) 0.00432 (0.00546) 0.0171 (0.0246) 0.00508 (0.00378) 0.00815 (0.0111)
Median [Q1, Q3] 0.00523 [0.00205, 0.00776] 0.00864 [0.00381, 0.0157] 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.00499 [0.00230, 0.00928]
Median [min, max] 0.00523 [0.000615, 0.0368] 0.00864 [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.00499 [0.000151, 0.0966]
as.factor(missing_fi)
0 5 (13.9%) 2 (7.7%) 2 (7.1%) 0 (0%) 1 (6.7%) 0 (0%) 10 (7.8%)
1 22 (61.1%) 8 (30.8%) 26 (92.9%) 4 (44.4%) 3 (20.0%) 10 (66.7%) 73 (56.6%)
Missing 9 (25.0%) 16 (61.5%) 0 (0%) 5 (55.6%) 11 (73.3%) 5 (33.3%) 46 (35.7%)
kruskal.test(FI_final ~ interv_code2, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by interv_code2
## Kruskal-Wallis chi-squared = 12.27, df = 5, p-value = 0.03126
kruskal.test(FQ_final ~ interv_code2, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by interv_code2
## Kruskal-Wallis chi-squared = 13.403, df = 5, p-value = 0.01988

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")
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 = "Pharmacological interventions", y = "Fragility quotine")

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.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=21)
3
(N=17)
4
(N=39)
5
(N=34)
6
(N=6)
7
(N=5)
8
(N=7)
Overall
(N=129)
no_rand
Mean (SD) 3500 (2440) 1780 (1210) 3040 (2320) 3820 (2870) 2340 (1650) 3640 (1980) 2100 (259) 3090 (2360)
Median [Q1, Q3] 4090 [1470, 4090] 1650 [578, 3270] 1470 [1120, 4090] 2050 [1650, 7740] 1650 [1120, 3740] 5090 [1470, 5090] 2000 [2000, 2000] 1960 [1360, 4090]
Median [min, max] 4090 [578, 7180] 1650 [549, 3270] 1470 [704, 7180] 2050 [450, 7870] 1650 [930, 4430] 5090 [1470, 5090] 2000 [2000, 2690] 1960 [450, 7870]
active_sample
Mean (SD) 3170 (2280) 1320 (872) 2710 (2150) 3310 (2490) 2090 (1710) 2930 (2210) 2000 (315) 2700 (2140)
Median [Q1, Q3] 3400 [1280, 4090] 1280 [451, 1770] 1350 [971, 3660] 1950 [1440, 6240] 1150 [985, 3390] 3650 [590, 4940] 1890 [1860, 1980] 1860 [1130, 3700]
Median [min, max] 3400 [476, 6910] 1280 [426, 2790] 1350 [544, 6690] 1950 [339, 7810] 1150 [759, 4430] 3650 [567, 4940] 1890 [1740, 2690] 1860 [339, 7810]
n_event
Mean (SD) 100 (78.7) 105 (112) 141 (147) 239 (198) 257 (252) 418 (301) 186 (127) 174 (176)
Median [Q1, Q3] 75.0 [53.0, 147] 48.0 [34.0, 163] 86.0 [41.5, 200] 147 [82.8, 346] 163 [81.3, 358] 537 [122, 671] 147 [85.5, 281] 101 [51.0, 246]
Median [min, max] 75.0 [10.0, 323] 48.0 [19.0, 375] 86.0 [14.0, 658] 147 [23.0, 764] 163 [44.0, 696] 537 [70.0, 691] 147 [48.0, 377] 101 [10.0, 764]
FI_final
Mean (SD) 9.19 (8.95) 8.35 (6.26) 18.0 (17.9) 27.5 (37.8) 24.7 (42.5) 8.20 (11.7) 13.6 (9.85) 17.5 (24.8)
Median [Q1, Q3] 5.00 [3.00, 11.0] 8.00 [4.00, 11.0] 14.0 [4.50, 24.0] 15.5 [4.00, 38.8] 9.50 [4.75, 12.8] 3.00 [2.00, 5.00] 10.0 [7.50, 16.5] 9.00 [4.00, 22.0]
Median [min, max] 5.00 [1.00, 30.0] 8.00 [1.00, 25.0] 14.0 [1.00, 77.0] 15.5 [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.00366 (0.00333) 0.00885 (0.00788) 0.00857 (0.00878) 0.00902 (0.00918) 0.0197 (0.0378) 0.00330 (0.00292) 0.00703 (0.00510) 0.00815 (0.0111)
Median [Q1, Q3] 0.00259 [0.00136, 0.00440] 0.00711 [0.00340, 0.0105] 0.00532 [0.00271, 0.0123] 0.00656 [0.00236, 0.0125] 0.00421 [0.00197, 0.00915] 0.00339 [0.00101, 0.00353] 0.00537 [0.00421, 0.00851] 0.00499 [0.00230, 0.00928]
Median [min, max] 0.00259 [0.000151, 0.0137] 0.00711 [0.000567, 0.0288] 0.00532 [0.000554, 0.0368] 0.00656 [0.000203, 0.0361] 0.00421 [0.00108, 0.0966] 0.00339 [0.000608, 0.00795] 0.00537 [0.00149, 0.0169] 0.00499 [0.000151, 0.0966]
as.factor(missing_fi)
0 1 (4.8%) 0 (0%) 3 (7.7%) 1 (2.9%) 0 (0%) 0 (0%) 5 (71.4%) 10 (7.8%)
1 17 (81.0%) 11 (64.7%) 25 (64.1%) 15 (44.1%) 1 (16.7%) 2 (40.0%) 2 (28.6%) 73 (56.6%)
Missing 3 (14.3%) 6 (35.3%) 11 (28.2%) 18 (52.9%) 5 (83.3%) 3 (60.0%) 0 (0%) 46 (35.7%)
kruskal.test(FI_final ~ timing, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by timing
## Kruskal-Wallis chi-squared = 9.2682, df = 6, p-value = 0.159
kruskal.test(FQ_final ~ timing, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by timing
## Kruskal-Wallis chi-squared = 10.638, df = 6, p-value = 0.1002

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=5)
BMJ
(N=5)
JAMA
(N=10)
JBMR
(N=6)
JCEM
(N=12)
Other
(N=12)
Overall
(N=129)
no_rand
Mean (SD) 3880 (2550) 1360 (0) 2160 (397) 2190 (1180) 1960 (0) 1320 (1340) 2120 (1820) 3090 (2360)
Median [Q1, Q3] 3270 [1560, 7180] 1360 [1360, 1360] 2300 [1770, 2300] 1640 [1630, 1650] 1960 [1960, 1960] 578 [571, 1410] 1470 [874, 2510] 1960 [1360, 4090]
Median [min, max] 3270 [450, 7870] 1360 [1360, 1360] 2300 [1770, 2690] 1640 [1630, 4430] 1960 [1960, 1960] 578 [549, 5090] 1470 [704, 5090] 1960 [450, 7870]
active_sample
Mean (SD) 3360 (2330) 1080 (48.9) 2160 (397) 1950 (1230) 1950 (0) 1230 (1350) 1700 (1740) 2700 (2140)
Median [Q1, Q3] 2790 [1350, 6240] 1050 [1050, 1100] 2300 [1770, 2300] 1390 [1290, 1580] 1950 [1950, 1950] 464 [445, 1410] 845 [588, 1770] 1860 [1130, 3700]
Median [min, max] 2790 [339, 7810] 1050 [1050, 1160] 2300 [1770, 2690] 1390 [1270, 4430] 1950 [1950, 1950] 464 [426, 4930] 845 [544, 4940] 1860 [339, 7810]
n_event
Mean (SD) 177 (165) 70.0 (36.2) 352 (167) 108 (112) 81.5 (23.1) 118 (151) 278 (279) 174 (176)
Median [Q1, Q3] 117 [54.5, 248] 91.0 [53.0, 92.0] 315 [262, 475] 70.5 [47.5, 112] 70.5 [64.5, 101] 38.0 [28.5, 145] 111 [69.5, 571] 101 [51.0, 246]
Median [min, max] 117 [10.0, 764] 91.0 [14.0, 100] 315 [147, 563] 70.5 [34.0, 409] 70.5 [63.0, 112] 38.0 [19.0, 471] 111 [44.0, 696] 101 [10.0, 764]
FI_final
Mean (SD) 21.3 (28.3) 9.40 (6.80) 15.6 (8.44) 8.20 (4.47) 8.50 (4.68) 9.67 (12.8) 16.6 (30.9) 17.5 (24.8)
Median [Q1, Q3] 12.0 [4.50, 26.0] 10.0 [3.00, 15.0] 16.0 [11.0, 22.0] 10.0 [4.75, 11.0] 7.50 [4.50, 12.0] 4.00 [2.00, 11.5] 4.50 [2.00, 14.0] 9.00 [4.00, 22.0]
Median [min, max] 12.0 [1.00, 171] 10.0 [2.00, 17.0] 16.0 [4.00, 25.0] 10.0 [1.00, 13.0] 7.50 [4.00, 15.0] 4.00 [1.00, 45.0] 4.50 [1.00, 111] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00727 (0.00800) 0.00882 (0.00654) 0.00760 (0.00430) 0.00504 (0.00332) 0.00435 (0.00240) 0.0113 (0.00964) 0.0153 (0.0275) 0.00815 (0.0111)
Median [Q1, Q3] 0.00393 [0.00226, 0.00831] 0.00908 [0.00259, 0.0143] 0.00695 [0.00623, 0.0109] 0.00513 [0.00197, 0.00793] 0.00384 [0.00231, 0.00615] 0.00864 [0.00423, 0.0187] 0.00440 [0.00278, 0.0113] 0.00499 [0.00230, 0.00928]
Median [min, max] 0.00393 [0.000151, 0.0361] 0.00908 [0.00191, 0.0162] 0.00695 [0.00149, 0.0125] 0.00513 [0.000615, 0.00928] 0.00384 [0.00205, 0.00768] 0.00864 [0.000203, 0.0288] 0.00440 [0.000608, 0.0966] 0.00499 [0.000151, 0.0966]
as.factor(missing_fi)
0 7 (8.9%) 2 (40.0%) 0 (0%) 0 (0%) 0 (0%) 1 (8.3%) 0 (0%) 10 (7.8%)
1 51 (64.6%) 3 (60.0%) 1 (20.0%) 8 (80.0%) 0 (0%) 4 (33.3%) 6 (50.0%) 73 (56.6%)
Missing 21 (26.6%) 0 (0%) 4 (80.0%) 2 (20.0%) 6 (100%) 7 (58.3%) 6 (50.0%) 46 (35.7%)
kruskal.test(FI_final ~ journal_code2, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by journal_code2
## Kruskal-Wallis chi-squared = 7.8264, df = 6, p-value = 0.2511
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.192, df = 6, p-value = 0.6507

Box plots

p1 = ggplot(data = fi_sig, 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

(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=12)
Men
(N=10)
Women
(N=107)
Overall
(N=129)
no_rand
Mean (SD) 1020 (798) 1310 (139) 3490 (2380) 3090 (2360)
Median [Q1, Q3] 578 [549, 1230] 1200 [1200, 1470] 2300 [1640, 4760] 1960 [1360, 4090]
Median [min, max] 578 [450, 2690] 1200 [1200, 1470] 2300 [704, 7870] 1960 [450, 7870]
active_sample
Mean (SD) 661 (655) 1220 (137) 3070 (2160) 2700 (2140)
Median [Q1, Q3] 451 [426, 477] 1130 [1130, 1350] 1980 [1300, 4280] 1860 [1130, 3700]
Median [min, max] 451 [339, 2690] 1130 [1060, 1430] 1980 [544, 7810] 1860 [339, 7810]
n_event
Mean (SD) 62.3 (62.8) 26.5 (9.06) 200 (181) 174 (176)
Median [Q1, Q3] 39.0 [33.3, 51.0] 26.0 [21.5, 34.3] 121 [71.0, 314] 101 [51.0, 246]
Median [min, max] 39.0 [19.0, 231] 26.0 [13.0, 39.0] 121 [10.0, 764] 101 [10.0, 764]
FI_final
Mean (SD) 4.67 (3.87) 2.90 (1.66) 20.3 (26.4) 17.5 (24.8)
Median [Q1, Q3] 4.00 [2.00, 5.50] 3.00 [1.25, 4.00] 12.0 [5.00, 24.5] 9.00 [4.00, 22.0]
Median [min, max] 4.00 [1.00, 13.0] 3.00 [1.00, 6.00] 12.0 [1.00, 171] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00984 (0.00913) 0.00236 (0.00140) 0.00851 (0.0116) 0.00815 (0.0111)
Median [Q1, Q3] 0.00677 [0.00406, 0.0125] 0.00216 [0.00115, 0.00296] 0.00527 [0.00242, 0.0100] 0.00499 [0.00230, 0.00928]
Median [min, max] 0.00677 [0.00108, 0.0288] 0.00216 [0.000887, 0.00532] 0.00527 [0.000151, 0.0966] 0.00499 [0.000151, 0.0966]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 10 (9.3%) 10 (7.8%)
1 4 (33.3%) 10 (100%) 59 (55.1%) 73 (56.6%)
Missing 8 (66.7%) 0 (0%) 38 (35.5%) 46 (35.7%)
kruskal.test(FI_final ~ sex, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by sex
## Kruskal-Wallis chi-squared = 23.592, df = 2, p-value = 7.534e-06
kruskal.test(FQ_final ~ sex, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by sex
## Kruskal-Wallis chi-squared = 8.7259, df = 2, p-value = 0.01274

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=26)
Placebo
(N=103)
Overall
(N=129)
no_rand
Mean (SD) 3080 (1320) 3100 (2560) 3090 (2360)
Median [Q1, Q3] 4090 [1640, 4090] 1960 [1200, 5090] 1960 [1360, 4090]
Median [min, max] 4090 [1140, 4090] 1960 [450, 7870] 1960 [450, 7870]
active_sample
Mean (SD) 2700 (1240) 2700 (2320) 2700 (2140)
Median [Q1, Q3] 3400 [1270, 3660] 1770 [994, 4680] 1860 [1130, 3700]
Median [min, max] 3400 [1050, 4090] 1770 [339, 7810] 1860 [339, 7810]
n_event
Mean (SD) 191 (162) 169 (179) 174 (176)
Median [Q1, Q3] 144 [65.5, 306] 99.0 [48.0, 228] 101 [51.0, 246]
Median [min, max] 144 [14.0, 658] 99.0 [10.0, 764] 101 [10.0, 764]
FI_final
Mean (SD) 18.3 (19.6) 17.3 (26.1) 17.5 (24.8)
Median [Q1, Q3] 10.5 [5.00, 24.0] 8.00 [3.50, 21.5] 9.00 [4.00, 22.0]
Median [min, max] 10.5 [2.00, 77.0] 8.00 [1.00, 171] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00685 (0.00539) 0.00848 (0.0121) 0.00815 (0.0111)
Median [Q1, Q3] 0.00575 [0.00260, 0.00923] 0.00499 [0.00226, 0.00931] 0.00499 [0.00230, 0.00928]
Median [min, max] 0.00575 [0.000554, 0.0188] 0.00499 [0.000151, 0.0966] 0.00499 [0.000151, 0.0966]
as.factor(missing_fi)
0 4 (15.4%) 6 (5.8%) 10 (7.8%)
1 22 (84.6%) 51 (49.5%) 73 (56.6%)
Missing 0 (0%) 46 (44.7%) 46 (35.7%)
kruskal.test(FI_final ~ placebo, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by placebo
## Kruskal-Wallis chi-squared = 1.3147, df = 1, p-value = 0.2515
kruskal.test(FQ_final ~ placebo, data = fi_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by placebo
## Kruskal-Wallis chi-squared = 0.12409, df = 1, p-value = 0.7246

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=30)
no_rand
Mean (SD) 3110 (2350)
Median [Q1, Q3] 1980 [1430, 4090]
Median [min, max] 1980 [549, 7870]
active_sample
Mean (SD) 2670 (2130)
Median [Q1, Q3] 1860 [1070, 3980]
Median [min, max] 1860 [426, 7390]
n_event
Mean (SD) 186 (158)
Median [Q1, Q3] 117 [77.0, 292]
Median [min, max] 117 [29.0, 671]
FI_final
Mean (SD) 29.0 (38.3)
Median [Q1, Q3] 14.0 [11.0, 31.3]
Median [min, max] 14.0 [1.00, 171]
FQ_final
Mean (SD) 0.0137 (0.0116)
Median [Q1, Q3] 0.00864 [0.00404, 0.0240]
Median [min, max] 0.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 3 (10.0%)
1 16 (53.3%)
Missing 11 (36.7%)
# 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=30)
Secondary endpoint
(N=99)
Overall
(N=129)
no_rand
Mean (SD) 3110 (2350) 3090 (2370) 3090 (2360)
Median [Q1, Q3] 1980 [1430, 4090] 1960 [1360, 4090] 1960 [1360, 4090]
Median [min, max] 1980 [549, 7870] 1960 [450, 7870] 1960 [450, 7870]
active_sample
Mean (SD) 2670 (2130) 2710 (2150) 2700 (2140)
Median [Q1, Q3] 1860 [1070, 3980] 1860 [1130, 3690] 1860 [1130, 3700]
Median [min, max] 1860 [426, 7390] 1860 [339, 7810] 1860 [339, 7810]
n_event
Mean (SD) 186 (158) 170 (181) 174 (176)
Median [Q1, Q3] 117 [77.0, 292] 91.0 [47.0, 236] 101 [51.0, 246]
Median [min, max] 117 [29.0, 671] 91.0 [10.0, 764] 101 [10.0, 764]
FI_final
Mean (SD) 29.0 (38.3) 14.0 (17.9) 17.5 (24.8)
Median [Q1, Q3] 14.0 [11.0, 31.3] 7.00 [3.50, 18.0] 9.00 [4.00, 22.0]
Median [min, max] 14.0 [1.00, 171] 7.00 [1.00, 111] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.0137 (0.0116) 0.00648 (0.0104) 0.00815 (0.0111)
Median [Q1, Q3] 0.00864 [0.00404, 0.0240] 0.00360 [0.00208, 0.00751] 0.00499 [0.00230, 0.00928]
Median [min, max] 0.00864 [0.000567, 0.0368] 0.00360 [0.000151, 0.0966] 0.00499 [0.000151, 0.0966]
as.factor(missing_fi)
0 3 (10.0%) 7 (7.1%) 10 (7.8%)
1 16 (53.3%) 57 (57.6%) 73 (56.6%)
Missing 11 (36.7%) 35 (35.4%) 46 (35.7%)
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=30              N=99                  
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
## no_rand       1982 [1427;4093]  1964 [1360;4093]    0.880   
## active_sample 1856 [1074;3984]  1861 [1127;3690]    0.980   
## n_event        116 [77.0;292]   91.0 [47.0;236]     0.219   
## FI_final      14.0 [11.0;31.2]  7.00 [3.50;18.0]    0.004   
## FQ_final      0.01 [0.00;0.02]  0.00 [0.00;0.01]    0.001   
## missing_fi:                                         0.689   
##     0            3 (15.8%)         7 (10.9%)                
##     1            16 (84.2%)        57 (89.1%)               
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

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=22)
Hip
(N=4)
Overall
(N=30)
no_rand
Mean (SD) 3110 (1390) NA NA 2840 (2490) 4390 (2230) 3110 (2350)
Median [Q1, Q3] 3110 [2620, 3600] 2000 [2000, 2000] 5090 [5090, 5090] 1650 [1200, 4090] 3270 [3270, 4390] 1980 [1430, 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 2530 (2240) 3340 (2110) 2670 (2130)
Median [Q1, Q3] 2060 [1270, 2850] 1950 [1950, 1950] 4940 [4940, 4940] 1440 [1050, 3980] 2580 [2220, 3700] 1860 [1070, 3980]
Median [min, max] 2060 [479, 3640] 1950 [1950, 1950] 4940 [4940, 4940] 1440 [426, 7390] 2580 [1770, 6450] 1860 [426, 7390]
n_event
Mean (SD) 348 (165) NA NA 151 (129) 141 (59.2) 186 (158)
Median [Q1, Q3] 348 [289, 406] 312 [312, 312] 671 [671, 671] 103 [54.8, 204] 158 [120, 180] 117 [77.0, 292]
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 35.4 (42.6) 6.00 (4.97) 29.0 (38.3)
Median [Q1, Q3] 16.5 [11.8, 21.3] 33.0 [33.0, 33.0] 3.00 [3.00, 3.00] 17.5 [13.0, 41.5] 5.50 [2.50, 9.00] 14.0 [11.0, 31.3]
Median [min, max] 16.5 [7.00, 26.0] 33.0 [33.0, 33.0] 3.00 [3.00, 3.00] 17.5 [1.00, 171] 5.50 [1.00, 12.0] 14.0 [1.00, 171]
FQ_final
Mean (SD) 0.0109 (0.00529) NA NA 0.0166 (0.0117) 0.00172 (0.00122) 0.0137 (0.0116)
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.0277] 0.00147 [0.000948, 0.00224] 0.00864 [0.00404, 0.0240]
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.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 1 (100%) 0 (0%) 2 (9.1%) 0 (0%) 3 (10.0%)
1 2 (100%) 0 (0%) 0 (0%) 10 (45.5%) 4 (100%) 16 (53.3%)
Missing 0 (0%) 0 (0%) 1 (100%) 10 (45.5%) 0 (0%) 11 (36.7%)
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=22)
Hip
(N=4)
Overall
(N=30)
no_rand
Mean (SD) 3110 (1390) NA NA 2840 (2490) 4390 (2230) 3110 (2350)
Median [Q1, Q3] 3110 [2620, 3600] 2000 [2000, 2000] 5090 [5090, 5090] 1650 [1200, 4090] 3270 [3270, 4390] 1980 [1430, 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 2530 (2240) 3340 (2110) 2670 (2130)
Median [Q1, Q3] 2060 [1270, 2850] 1950 [1950, 1950] 4940 [4940, 4940] 1440 [1050, 3980] 2580 [2220, 3700] 1860 [1070, 3980]
Median [min, max] 2060 [479, 3640] 1950 [1950, 1950] 4940 [4940, 4940] 1440 [426, 7390] 2580 [1770, 6450] 1860 [426, 7390]
n_event
Mean (SD) 348 (165) NA NA 151 (129) 141 (59.2) 186 (158)
Median [Q1, Q3] 348 [289, 406] 312 [312, 312] 671 [671, 671] 103 [54.8, 204] 158 [120, 180] 117 [77.0, 292]
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 35.4 (42.6) 6.00 (4.97) 29.0 (38.3)
Median [Q1, Q3] 16.5 [11.8, 21.3] 33.0 [33.0, 33.0] 3.00 [3.00, 3.00] 17.5 [13.0, 41.5] 5.50 [2.50, 9.00] 14.0 [11.0, 31.3]
Median [min, max] 16.5 [7.00, 26.0] 33.0 [33.0, 33.0] 3.00 [3.00, 3.00] 17.5 [1.00, 171] 5.50 [1.00, 12.0] 14.0 [1.00, 171]
FQ_final
Mean (SD) 0.0109 (0.00529) NA NA 0.0166 (0.0117) 0.00172 (0.00122) 0.0137 (0.0116)
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.0277] 0.00147 [0.000948, 0.00224] 0.00864 [0.00404, 0.0240]
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.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 1 (100%) 0 (0%) 2 (9.1%) 0 (0%) 3 (10.0%)
1 2 (100%) 0 (0%) 0 (0%) 10 (45.5%) 4 (100%) 16 (53.3%)
Missing 0 (0%) 0 (0%) 1 (100%) 10 (45.5%) 0 (0%) 11 (36.7%)
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.85, df = 4, p-value = 0.06496
kruskal.test(FQ_final ~ fx_code2, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by fx_code2
## Kruskal-Wallis chi-squared = 10.855, df = 4, p-value = 0.02824

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")
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")

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=1)
Ibandronate
(N=2)
Risedronate
(N=1)
Minodronate
(N=1)
Zoledronate
(N=6)
Teriparatide
(N=6)
Abaloparatide
(N=1)
Romosozumab
(N=5)
Denosumab
(N=1)
Strontium_ranelate
(N=3)
Calcium_VitD
(N=3)
Overall
(N=30)
no_rand
Mean (SD) NA 1960 (0) NA NA 3670 (3180) 1050 (429) NA 5330 (1690) NA 2800 (1990) 3270 (0) 3110 (2350)
Median [Q1, Q3] 4430 [4430, 4430] 1960 [1960, 1960] 1630 [1630, 1630] 704 [704, 704] 2060 [1400, 6330] 1090 [705, 1290] 1650 [1650, 1650] 4090 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 3370] 3270 [3270, 3270] 1980 [1430, 4090]
Median [min, max] 4430 [4430, 4430] 1960 [1960, 1960] 1630 [1630, 1630] 704 [704, 704] 2060 [1200, 7740] 1090 [549, 1640] 1650 [1650, 1650] 4090 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 5090] 3270 [3270, 3270] 1980 [549, 7870]
active_sample
Mean (SD) NA 1950 (0) NA NA 2790 (2590) 855 (378) NA 4940 (1570) NA 2610 (2020) 2310 (516) 2670 (2130)
Median [Q1, Q3] 4130 [4130, 4130] 1950 [1950, 1950] 1370 [1370, 1370] 544 [544, 544] 1540 [1070, 4740] 887 [559, 1010] 1400 [1400, 1400] 4090 [3660, 6640] 7390 [7390, 7390] 1440 [1440, 3190] 2380 [2070, 2580] 1860 [1070, 3980]
Median [min, max] 4130 [4130, 4130] 1950 [1950, 1950] 1370 [1370, 1370] 544 [544, 544] 1540 [479, 6450] 887 [426, 1430] 1400 [1400, 1400] 4090 [3640, 6650] 7390 [7390, 7390] 1440 [1440, 4940] 2380 [1770, 2790] 1860 [426, 7390]
n_event
Mean (SD) NA 111 (1.41) NA NA 192 (151) 64.3 (25.3) NA 247 (168) NA 463 (182) 141 (72.5) 186 (158)
Median [Q1, Q3] 121 [121, 121] 111 [111, 112] 154 [154, 154] 100 [100, 100] 186 [62.8, 292] 65.5 [42.8, 85.3] 34.0 [34.0, 34.0] 221 [105, 370] 350 [350, 350] 387 [360, 529] 176 [117, 183] 117 [77.0, 292]
Median [min, max] 121 [121, 121] 111 [110, 112] 154 [154, 154] 100 [100, 100] 186 [29.0, 402] 65.5 [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) NA 14.0 (1.41) NA NA 38.3 (65.9) 16.3 (6.15) NA 41.8 (21.3) NA 33.3 (26.5) 4.00 (3.61) 29.0 (38.3)
Median [Q1, Q3] 13.0 [13.0, 13.0] 14.0 [13.5, 14.5] 11.0 [11.0, 11.0] 20.0 [20.0, 20.0] 9.50 [6.25, 27.8] 14.0 [11.5, 21.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] 14.0 [11.0, 31.3]
Median [min, max] 13.0 [13.0, 13.0] 14.0 [13.0, 15.0] 11.0 [11.0, 11.0] 20.0 [20.0, 20.0] 9.50 [1.00, 171] 14.0 [11.0, 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] 14.0 [1.00, 171]
FQ_final
Mean (SD) NA 0.00717 (0.000724) NA NA 0.0116 (0.0112) 0.0218 (0.00871) NA 0.00941 (0.00598) NA 0.0226 (0.0192) 0.00167 (0.00149) 0.0137 (0.0116)
Median [Q1, Q3] 0.00314 [0.00314, 0.00314] 0.00717 [0.00692, 0.00743] 0.00801 [0.00801, 0.00801] 0.0368 [0.0368, 0.0368] 0.00997 [0.00273, 0.0164] 0.0258 [0.0172, 0.0277] 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.00864 [0.00404, 0.0240]
Median [min, max] 0.00314 [0.00314, 0.00314] 0.00717 [0.00666, 0.00768] 0.00801 [0.00801, 0.00801] 0.0368 [0.0368, 0.0368] 0.00997 [0.000946, 0.0301] 0.0258 [0.00770, 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.00864 [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%) 1 (20.0%) 0 (0%) 0 (0%) 0 (0%) 3 (10.0%)
1 0 (0%) 0 (0%) 1 (100%) 1 (100%) 5 (83.3%) 1 (16.7%) 1 (100%) 4 (80.0%) 0 (0%) 0 (0%) 3 (100%) 16 (53.3%)
Missing 1 (100%) 2 (100%) 0 (0%) 0 (0%) 0 (0%) 4 (66.7%) 0 (0%) 0 (0%) 1 (100%) 3 (100%) 0 (0%) 11 (36.7%)
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=11)
PTH analog
(N=7)
Romosozumab
(N=5)
Denosumab
(N=1)
Strontium_ranelate
(N=3)
Calcium_VitD
(N=3)
Overall
(N=30)
no_rand
Mean (SD) 2970 (2540) 1140 (451) 5330 (1690) NA 2800 (1990) 3270 (0) 3110 (2350)
Median [Q1, Q3] 1960 [1410, 3280] 1100 [832, 1500] 4090 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 3370] 3270 [3270, 3270] 1980 [1430, 4090]
Median [min, max] 1960 [704, 7740] 1100 [549, 1650] 4090 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 5090] 3270 [3270, 3270] 1980 [549, 7870]
active_sample
Mean (SD) 2430 (2060) 933 (402) 4940 (1570) NA 2610 (2020) 2310 (516) 2670 (2130)
Median [Q1, Q3] 1950 [1090, 3040] 892 [667, 1230] 4090 [3660, 6640] 7390 [7390, 7390] 1440 [1440, 3190] 2380 [2070, 2580] 1860 [1070, 3980]
Median [min, max] 1950 [479, 6450] 892 [426, 1430] 4090 [3640, 6650] 7390 [7390, 7390] 1440 [1440, 4940] 2380 [1770, 2790] 1860 [426, 7390]
n_event
Mean (SD) 159 (114) 60.0 (25.8) 247 (168) NA 463 (182) 141 (72.5) 186 (158)
Median [Q1, Q3] 121 [105, 193] 48.0 [38.5, 84.5] 221 [105, 370] 350 [350, 350] 387 [360, 529] 176 [117, 183] 117 [77.0, 292]
Median [min, max] 121 [29.0, 402] 48.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) 27.5 (48.3) 15.9 (5.76) 41.8 (21.3) NA 33.3 (26.5) 4.00 (3.61) 29.0 (38.3)
Median [Q1, Q3] 13.0 [9.00, 17.5] 13.0 [12.0, 19.0] 40.0 [26.0, 42.0] 137 [137, 137] 45.0 [24.0, 48.5] 3.00 [2.00, 5.50] 14.0 [11.0, 31.3]
Median [min, max] 13.0 [1.00, 171] 13.0 [11.0, 25.0] 40.0 [24.0, 77.0] 137 [137, 137] 45.0 [3.00, 52.0] 3.00 [1.00, 8.00] 14.0 [1.00, 171]
FQ_final
Mean (SD) 0.0120 (0.0118) 0.0200 (0.00925) 0.00941 (0.00598) NA 0.0226 (0.0192) 0.00167 (0.00149) 0.0137 (0.0116)
Median [Q1, Q3] 0.00768 [0.00423, 0.0158] 0.0258 [0.0118, 0.0271] 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.00864 [0.00404, 0.0240]
Median [min, max] 0.00768 [0.000946, 0.0368] 0.0258 [0.00770, 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.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 1 (9.1%) 1 (14.3%) 1 (20.0%) 0 (0%) 0 (0%) 0 (0%) 3 (10.0%)
1 7 (63.6%) 2 (28.6%) 4 (80.0%) 0 (0%) 0 (0%) 3 (100%) 16 (53.3%)
Missing 3 (27.3%) 4 (57.1%) 0 (0%) 1 (100%) 3 (100%) 0 (0%) 11 (36.7%)
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.133, df = 5, p-value = 0.02216
kruskal.test(FQ_final ~ interv_code2, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by interv_code2
## Kruskal-Wallis chi-squared = 9.1436, df = 5, p-value = 0.1035

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")
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 = "Pharmacological interventions", y = "Fragility quotine")

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=7)
4
(N=10)
5
(N=9)
6
(N=1)
7
(N=1)
8
(N=1)
Overall
(N=30)
no_rand
Mean (SD) NA 2030 (1240) 2610 (2140) 3810 (2980) NA NA NA 3110 (2350)
Median [Q1, Q3] 7180 [7180, 7180] 1650 [1110, 3270] 1280 [1120, 4090] 1960 [1650, 7740] 4430 [4430, 4430] 5090 [5090, 5090] 2000 [2000, 2000] 1980 [1430, 4090]
Median [min, max] 7180 [7180, 7180] 1650 [549, 3270] 1280 [704, 7180] 1960 [1630, 7870] 4430 [4430, 4430] 5090 [5090, 5090] 2000 [2000, 2000] 1980 [549, 7870]
active_sample
Mean (SD) NA 1520 (891) 2360 (2040) 3130 (2600) NA NA NA 2670 (2130)
Median [Q1, Q3] 6640 [6640, 6640] 1430 [926, 2070] 1090 [931, 3660] 1950 [1440, 5680] 4130 [4130, 4130] 4940 [4940, 4940] 1950 [1950, 1950] 1860 [1070, 3980]
Median [min, max] 6640 [6640, 6640] 1430 [426, 2790] 1090 [544, 6650] 1950 [479, 7390] 4130 [4130, 4130] 4940 [4940, 4940] 1950 [1950, 1950] 1860 [426, 7390]
n_event
Mean (SD) NA 83.3 (68.7) 159 (147) 246 (122) NA NA NA 186 (158)
Median [Q1, Q3] 75.0 [75.0, 75.0] 48.0 [38.5, 117] 96.0 [83.8, 192] 231 [140, 350] 121 [121, 121] 671 [671, 671] 312 [312, 312] 117 [77.0, 292]
Median [min, max] 75.0 [75.0, 75.0] 48.0 [34.0, 190] 96.0 [29.0, 464] 231 [110, 402] 121 [121, 121] 671 [671, 671] 312 [312, 312] 117 [29.0, 671]
FI_final
Mean (SD) NA 8.57 (4.83) 27.5 (21.7) 51.4 (60.9) NA NA NA 29.0 (38.3)
Median [Q1, Q3] 24.0 [24.0, 24.0] 11.0 [5.50, 12.0] 24.0 [16.3, 36.5] 15.0 [12.0, 52.0] 13.0 [13.0, 13.0] 3.00 [3.00, 3.00] 33.0 [33.0, 33.0] 14.0 [11.0, 31.3]
Median [min, max] 24.0 [24.0, 24.0] 11.0 [1.00, 13.0] 24.0 [1.00, 77.0] 15.0 [7.00, 171] 13.0 [13.0, 13.0] 3.00 [3.00, 3.00] 33.0 [33.0, 33.0] 14.0 [1.00, 171]
FQ_final
Mean (SD) NA 0.0109 (0.0117) 0.0155 (0.0117) 0.0172 (0.0125) NA NA NA 0.0137 (0.0116)
Median [Q1, Q3] 0.00361 [0.00361, 0.00361] 0.00770 [0.00222, 0.0176] 0.0129 [0.00629, 0.0240] 0.0146 [0.00768, 0.0301] 0.00314 [0.00314, 0.00314] 0.000608 [0.000608, 0.000608] 0.0169 [0.0169, 0.0169] 0.00864 [0.00404, 0.0240]
Median [min, max] 0.00361 [0.00361, 0.00361] 0.00770 [0.000567, 0.0288] 0.0129 [0.000946, 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.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 2 (20.0%) 0 (0%) 0 (0%) 0 (0%) 1 (100%) 3 (10.0%)
1 1 (100%) 5 (71.4%) 6 (60.0%) 4 (44.4%) 0 (0%) 0 (0%) 0 (0%) 16 (53.3%)
Missing 0 (0%) 2 (28.6%) 2 (20.0%) 5 (55.6%) 1 (100%) 1 (100%) 0 (0%) 11 (36.7%)
kruskal.test(FI_final ~ timing, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by timing
## Kruskal-Wallis chi-squared = 9.7937, df = 6, p-value = 0.1336
kruskal.test(FQ_final ~ timing, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by timing
## Kruskal-Wallis chi-squared = 6.4225, df = 6, p-value = 0.3776

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=1)
JAMA
(N=4)
JBMR
(N=2)
JCEM
(N=2)
Other
(N=2)
Overall
(N=30)
no_rand
Mean (SD) 3780 (2530) NA 2340 (1400) 1960 (0) 564 (20.5) 2900 (3100) 3110 (2350)
Median [Q1, Q3] 3270 [1650, 5640] 1360 [1360, 1360] 1640 [1640, 2340] 1960 [1960, 1960] 564 [556, 571] 2900 [1800, 3990] 1980 [1430, 4090]
Median [min, max] 3270 [1090, 7870] 1360 [1360, 1360] 1640 [1630, 4430] 1960 [1960, 1960] 564 [549, 578] 2900 [704, 5090] 1980 [549, 7870]
active_sample
Mean (SD) 3180 (2320) NA 2080 (1370) 1950 (0) 439 (17.7) 2740 (3100) 2670 (2130)
Median [Q1, Q3] 2380 [1280, 4880] 1050 [1050, 1050] 1410 [1390, 2100] 1950 [1950, 1950] 439 [432, 445] 2740 [1640, 3840] 1860 [1070, 3980]
Median [min, max] 2380 [479, 7390] 1050 [1050, 1050] 1410 [1370, 4130] 1950 [1950, 1950] 439 [426, 451] 2740 [544, 4940] 1860 [426, 7390]
n_event
Mean (SD) 213 (141) NA 86.3 (60.7) 111 (1.41) 44.5 (4.95) 386 (404) 186 (158)
Median [Q1, Q3] 190 [84.5, 341] 92.0 [92.0, 92.0] 78.5 [35.5, 129] 111 [111, 112] 44.5 [42.8, 46.3] 386 [243, 528] 117 [77.0, 292]
Median [min, max] 190 [29.0, 464] 92.0 [92.0, 92.0] 78.5 [34.0, 154] 111 [110, 112] 44.5 [41.0, 48.0] 386 [100, 671] 117 [29.0, 671]
FI_final
Mean (SD) 38.6 (45.7) NA 12.0 (1.15) 14.0 (1.41) 12.0 (1.41) 11.5 (12.0) 29.0 (38.3)
Median [Q1, Q3] 25.0 [7.50, 43.5] 15.0 [15.0, 15.0] 12.0 [11.0, 13.0] 14.0 [13.5, 14.5] 12.0 [11.5, 12.5] 11.5 [7.25, 15.8] 14.0 [11.0, 31.3]
Median [min, max] 25.0 [1.00, 171] 15.0 [15.0, 15.0] 12.0 [11.0, 13.0] 14.0 [13.0, 15.0] 12.0 [11.0, 13.0] 11.5 [3.00, 20.0] 14.0 [1.00, 171]
FQ_final
Mean (SD) 0.0138 (0.0118) NA 0.00703 (0.00268) 0.00717 (0.000724) 0.0273 (0.00212) 0.0187 (0.0256) 0.0137 (0.0116)
Median [Q1, Q3] 0.0115 [0.00349, 0.0223] 0.0143 [0.0143, 0.0143] 0.00785 [0.00656, 0.00832] 0.00717 [0.00692, 0.00743] 0.0273 [0.0266, 0.0281] 0.0187 [0.00965, 0.0277] 0.00864 [0.00404, 0.0240]
Median [min, max] 0.0115 [0.000567, 0.0361] 0.0143 [0.0143, 0.0143] 0.00785 [0.00314, 0.00928] 0.00717 [0.00666, 0.00768] 0.0273 [0.0258, 0.0288] 0.0187 [0.000608, 0.0368] 0.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 2 (10.5%) 1 (100%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 3 (10.0%)
1 12 (63.2%) 0 (0%) 3 (75.0%) 0 (0%) 0 (0%) 1 (50.0%) 16 (53.3%)
Missing 5 (26.3%) 0 (0%) 1 (25.0%) 2 (100%) 2 (100%) 1 (50.0%) 11 (36.7%)
kruskal.test(FI_final ~ journal_code2, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by journal_code2
## Kruskal-Wallis chi-squared = 2.8427, df = 5, p-value = 0.7242
kruskal.test(FQ_final ~ journal_code2, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by journal_code2
## Kruskal-Wallis chi-squared = 3.1363, df = 5, p-value = 0.679

Box plots

p1 = ggplot(data =  fx_prim, 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

(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=3)
Men
(N=2)
Women
(N=25)
Overall
(N=30)
no_rand
Mean (SD) 1080 (903) 1200 (0) 3510 (2370) 3110 (2350)
Median [Q1, Q3] 578 [564, 1350] 1200 [1200, 1200] 3270 [1650, 4430] 1980 [1430, 4090]
Median [min, max] 578 [549, 2130] 1200 [1200, 1200] 3270 [704, 7870] 1980 [549, 7870]
active_sample
Mean (SD) 452 (26.5) 1090 (49.5) 3060 (2130) 2670 (2130)
Median [Q1, Q3] 451 [439, 465] 1090 [1070, 1110] 1950 [1430, 4130] 1860 [1070, 3980]
Median [min, max] 451 [426, 479] 1090 [1060, 1130] 1950 [544, 7390] 1860 [426, 7390]
n_event
Mean (SD) 107 (108) 33.0 (5.66) 207 (161) 186 (158)
Median [Q1, Q3] 48.0 [44.5, 140] 33.0 [31.0, 35.0] 140 [92.0, 332] 117 [77.0, 292]
Median [min, max] 48.0 [41.0, 231] 33.0 [29.0, 37.0] 140 [34.0, 671] 117 [29.0, 671]
FI_final
Mean (SD) 10.3 (3.06) 3.50 (3.54) 33.3 (40.6) 29.0 (38.3)
Median [Q1, Q3] 11.0 [9.00, 12.0] 3.50 [2.25, 4.75] 20.0 [12.0, 40.0] 14.0 [11.0, 31.3]
Median [min, max] 11.0 [7.00, 13.0] 3.50 [1.00, 6.00] 20.0 [1.00, 171] 14.0 [1.00, 171]
FQ_final
Mean (SD) 0.0231 (0.00749) 0.00313 (0.00310) 0.0134 (0.0117) 0.0137 (0.0116)
Median [Q1, Q3] 0.0258 [0.0202, 0.0273] 0.00313 [0.00204, 0.00423] 0.00801 [0.00361, 0.0188] 0.00864 [0.00404, 0.0240]
Median [min, max] 0.0258 [0.0146, 0.0288] 0.00313 [0.000946, 0.00532] 0.00801 [0.000567, 0.0368] 0.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 3 (12.0%) 3 (10.0%)
1 1 (33.3%) 2 (100%) 13 (52.0%) 16 (53.3%)
Missing 2 (66.7%) 0 (0%) 9 (36.0%) 11 (36.7%)
kruskal.test(FI_final ~ sex, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by sex
## Kruskal-Wallis chi-squared = 6.2219, df = 2, p-value = 0.04456
kruskal.test(FQ_final ~ sex, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by sex
## Kruskal-Wallis chi-squared = 4.5128, df = 2, p-value = 0.1047

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=24)
Overall
(N=30)
no_rand
Mean (SD) 2820 (1400) 3180 (2550) 3110 (2350)
Median [Q1, Q3] 2870 [1640, 4090] 1980 [1200, 4600] 1980 [1430, 4090]
Median [min, max] 2870 [1360, 4090] 1980 [549, 7870] 1980 [549, 7870]
active_sample
Mean (SD) 2550 (1390) 2700 (2310) 2670 (2130)
Median [Q1, Q3] 2540 [1410, 3660] 1860 [1020, 4330] 1860 [1070, 3980]
Median [min, max] 2540 [1050, 4090] 1860 [426, 7390] 1860 [426, 7390]
n_event
Mean (SD) 203 (182) 181 (156) 186 (158)
Median [Q1, Q3] 157 [50.0, 333] 117 [81.0, 251] 117 [77.0, 292]
Median [min, max] 157 [34.0, 464] 117 [29.0, 671] 117 [29.0, 671]
FI_final
Mean (SD) 30.7 (25.5) 28.6 (41.3) 29.0 (38.3)
Median [Q1, Q3] 20.5 [13.5, 38.0] 13.0 [7.75, 27.0] 14.0 [11.0, 31.3]
Median [min, max] 20.5 [11.0, 77.0] 13.0 [1.00, 171] 14.0 [1.00, 171]
FQ_final
Mean (SD) 0.0115 (0.00447) 0.0142 (0.0128) 0.0137 (0.0116)
Median [Q1, Q3] 0.0104 [0.00810, 0.0136] 0.00785 [0.00331, 0.0265] 0.00864 [0.00404, 0.0240]
Median [min, max] 0.0104 [0.00714, 0.0188] 0.00785 [0.000567, 0.0368] 0.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 2 (33.3%) 1 (4.2%) 3 (10.0%)
1 4 (66.7%) 12 (50.0%) 16 (53.3%)
Missing 0 (0%) 11 (45.8%) 11 (36.7%)
kruskal.test(FI_final ~ placebo, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by placebo
## Kruskal-Wallis chi-squared = 1.19, df = 1, p-value = 0.2753
kruskal.test(FQ_final ~ placebo, data = fx_prim)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by placebo
## Kruskal-Wallis chi-squared = 0.096774, df = 1, p-value = 0.7557

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=44)
Significant
(N=85)
Overall
(N=129)
no_rand
Mean (SD) 3900 (2800) 2680 (1980) 3090 (2360)
Median [Q1, Q3] 2840 [1640, 7180] 1960 [1200, 4090] 1960 [1360, 4090]
Median [min, max] 2840 [549, 7870] 1960 [450, 7870] 1960 [450, 7870]
active_sample
Mean (SD) 3460 (2540) 2300 (1790) 2700 (2140)
Median [Q1, Q3] 2400 [1260, 6530] 1770 [1100, 3400] 1860 [1130, 3700]
Median [min, max] 2400 [426, 7810] 1770 [339, 6670] 1860 [339, 7810]
n_event
Mean (SD) 220 (193) 150 (162) 174 (176)
Median [Q1, Q3] 125 [80.5, 331] 79.0 [39.0, 178] 101 [51.0, 246]
Median [min, max] 125 [34.0, 764] 79.0 [10.0, 691] 101 [10.0, 764]
FI_final
Mean (SD) 37.9 (33.4) 6.93 (6.19) 17.5 (24.8)
Median [Q1, Q3] 25.5 [17.8, 42.3] 5.00 [2.00, 9.00] 9.00 [4.00, 22.0]
Median [min, max] 25.5 [9.00, 171] 5.00 [1.00, 29.0] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.0162 (0.0156) 0.00401 (0.00333) 0.00815 (0.0111)
Median [Q1, Q3] 0.0128 [0.00667, 0.0189] 0.00307 [0.00150, 0.00532] 0.00499 [0.00230, 0.00928]
Median [min, max] 0.0128 [0.00230, 0.0966] 0.00307 [0.000151, 0.0146] 0.00499 [0.000151, 0.0966]
as.factor(missing_fi)
0 6 (13.6%) 4 (4.7%) 10 (7.8%)
1 23 (52.3%) 50 (58.8%) 73 (56.6%)
Missing 15 (34.1%) 31 (36.5%) 46 (35.7%)
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=44              N=85                 
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
## no_rand        2843 [1636;7180]  1964 [1199;4093]   0.046   
## active_sample  2396 [1256;6533]  1765 [1101;3399]   0.020   
## n_event         124 [80.5;330]   79.0 [39.0;178]    0.006   
## FI_final       25.5 [17.8;42.2]  5.00 [2.00;9.00]  <0.001   
## FQ_final       0.01 [0.01;0.02]  0.00 [0.00;0.01]  <0.001   
## missing_fi:                                         0.090   
##     0             6 (20.7%)         4 (7.41%)               
##     1             23 (79.3%)        50 (92.6%)              
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
# 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=44)
no_rand
Mean (SD) 3900 (2800)
Median [Q1, Q3] 2840 [1640, 7180]
Median [min, max] 2840 [549, 7870]
active_sample
Mean (SD) 3460 (2540)
Median [Q1, Q3] 2400 [1260, 6530]
Median [min, max] 2400 [426, 7810]
n_event
Mean (SD) 220 (193)
Median [Q1, Q3] 125 [80.5, 331]
Median [min, max] 125 [34.0, 764]
FI_final
Mean (SD) 37.9 (33.4)
Median [Q1, Q3] 25.5 [17.8, 42.3]
Median [min, max] 25.5 [9.00, 171]
FQ_final
Mean (SD) 0.0162 (0.0156)
Median [Q1, Q3] 0.0128 [0.00667, 0.0189]
Median [min, max] 0.0128 [0.00230, 0.0966]
as.factor(missing_fi)
0 6 (13.6%)
1 23 (52.3%)
Missing 15 (34.1%)

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=30)
ClinVert_fx
(N=3)
Overall
(N=44)
no_rand
Mean (SD) 7460 (393) 3400 (1210) 2870 (1730) 6340 (2060) 3270 (2740) 5750 (3550) 3900 (2800)
Median [Q1, Q3] 7460 [7320, 7600] 4090 [3050, 4090] 2870 [2260, 3480] 7180 [6200, 7320] 1650 [1260, 6410] 7740 [4690, 7800] 2840 [1640, 7180]
Median [min, max] 7460 [7180, 7740] 4090 [2000, 4090] 2870 [1650, 4090] 7180 [3270, 7740] 1650 [549, 7870] 7740 [1650, 7870] 2840 [549, 7870]
active_sample
Mean (SD) 6620 (100) 3250 (1130) 2400 (1600) 5560 (2120) 2890 (2480) 5230 (3350) 3460 (2540)
Median [Q1, Q3] 6620 [6580, 6660] 3840 [2890, 3910] 2400 [1830, 2970] 6590 [5490, 6650] 1440 [1050, 5280] 6430 [3940, 7120] 2400 [1260, 6530]
Median [min, max] 6620 [6550, 6690] 3840 [1950, 3980] 2400 [1270, 3530] 6590 [2380, 6670] 1440 [426, 7390] 6430 [1440, 7810] 2400 [426, 7810]
n_event
Mean (SD) 505 (366) 431 (197) 200 (220) 357 (229) 171 (156) 144 (55.6) 220 (193)
Median [Q1, Q3] 505 [376, 635] 323 [318, 491] 200 [122, 277] 290 [211, 436] 100 [73.5, 260] 121 [112, 164] 125 [80.5, 331]
Median [min, max] 505 [246, 764] 323 [312, 658] 200 [44.0, 355] 290 [168, 680] 100 [34.0, 696] 121 [103, 207] 125 [34.0, 764]
FI_final
Mean (SD) 62.5 (37.5) 42.7 (19.4) 17.5 (12.0) 28.0 (10.1) 38.9 (38.2) 33.0 (13.1) 37.9 (33.4)
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] 23.5 [17.0, 44.3] 39.0 [28.5, 40.5] 25.5 [17.8, 42.3]
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] 23.5 [11.0, 171] 39.0 [18.0, 42.0] 25.5 [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.0177) 0.00800 (0.00395) 0.0162 (0.0156)
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.0174 [0.00785, 0.0258] 0.00653 [0.00576, 0.00951] 0.0128 [0.00667, 0.0189]
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.0174 [0.00230, 0.0966] 0.00653 [0.00499, 0.0125] 0.0128 [0.00230, 0.0966]
as.factor(missing_fi)
0 0 (0%) 2 (66.7%) 0 (0%) 0 (0%) 4 (13.3%) 0 (0%) 6 (13.6%)
1 2 (100%) 1 (33.3%) 2 (100%) 4 (100%) 13 (43.3%) 1 (33.3%) 23 (52.3%)
Missing 0 (0%) 0 (0%) 0 (0%) 0 (0%) 13 (43.3%) 2 (66.7%) 15 (34.1%)
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=30)
Clinical Vertebrae
(N=3)
Overall
(N=44)
no_rand
Mean (SD) 7460 (393) 3180 (1250) 6340 (2060) 3270 (2740) 5750 (3550) 3900 (2800)
Median [Q1, Q3] 7460 [7320, 7600] 4090 [2000, 4090] 7180 [6200, 7320] 1650 [1260, 6410] 7740 [4690, 7800] 2840 [1640, 7180]
Median [min, max] 7460 [7180, 7740] 4090 [1650, 4090] 7180 [3270, 7740] 1650 [549, 7870] 7740 [1650, 7870] 2840 [549, 7870]
active_sample
Mean (SD) 6620 (100) 2910 (1230) 5560 (2120) 2890 (2480) 5230 (3350) 3460 (2540)
Median [Q1, Q3] 6620 [6580, 6660] 3530 [1950, 3840] 6590 [5490, 6650] 1440 [1050, 5280] 6430 [3940, 7120] 2400 [1260, 6530]
Median [min, max] 6620 [6550, 6690] 3530 [1270, 3980] 6590 [2380, 6670] 1440 [426, 7390] 6430 [1440, 7810] 2400 [426, 7810]
n_event
Mean (SD) 505 (366) 338 (218) 357 (229) 171 (156) 144 (55.6) 220 (193)
Median [Q1, Q3] 505 [376, 635] 323 [312, 355] 290 [211, 436] 100 [73.5, 260] 121 [112, 164] 125 [80.5, 331]
Median [min, max] 505 [246, 764] 323 [44.0, 658] 290 [168, 680] 100 [34.0, 696] 121 [103, 207] 125 [34.0, 764]
FI_final
Mean (SD) 62.5 (37.5) 32.6 (20.4) 28.0 (10.1) 38.9 (38.2) 33.0 (13.1) 37.9 (33.4)
Median [Q1, Q3] 62.5 [49.3, 75.8] 30.0 [26.0, 33.0] 24.0 [22.5, 29.5] 23.5 [17.0, 44.3] 39.0 [28.5, 40.5] 25.5 [17.8, 42.3]
Median [min, max] 62.5 [36.0, 89.0] 30.0 [9.00, 65.0] 24.0 [21.0, 43.0] 23.5 [11.0, 171] 39.0 [18.0, 42.0] 25.5 [9.00, 171]
FQ_final
Mean (SD) 0.00949 (0.00580) 0.0112 (0.00526) 0.00593 (0.00343) 0.0196 (0.0177) 0.00800 (0.00395) 0.0162 (0.0156)
Median [Q1, Q3] 0.00949 [0.00743, 0.0115] 0.00754 [0.00736, 0.0169] 0.00502 [0.00338, 0.00757] 0.0174 [0.00785, 0.0258] 0.00653 [0.00576, 0.00951] 0.0128 [0.00667, 0.0189]
Median [min, max] 0.00949 [0.00538, 0.0136] 0.00754 [0.00711, 0.0169] 0.00502 [0.00315, 0.0105] 0.0174 [0.00230, 0.0966] 0.00653 [0.00499, 0.0125] 0.0128 [0.00230, 0.0966]
as.factor(missing_fi)
0 0 (0%) 2 (40.0%) 0 (0%) 4 (13.3%) 0 (0%) 6 (13.6%)
1 2 (100%) 3 (60.0%) 4 (100%) 13 (43.3%) 1 (33.3%) 23 (52.3%)
Missing 0 (0%) 0 (0%) 0 (0%) 13 (43.3%) 2 (66.7%) 15 (34.1%)
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.8727, df = 4, p-value = 0.7592
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.4802, df = 4, p-value = 0.05016

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")
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")

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]"))
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=44)
no_rand
Mean (SD) NA NA NA 6780 (2340) 1090 (354) 1650 (0) 5760 (1600) 7870 (0) 1700 (354) NA 3900 (2800)
Median [Q1, Q3] 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] 2840 [1640, 7180]
Median [min, max] 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] 2840 [549, 7870]
active_sample
Mean (SD) NA NA NA 5470 (1770) 883 (306) 1330 (95.5) 5360 (1510) 7530 (240) 1500 (421) NA 3460 (2540)
Median [Q1, Q3] 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] 2400 [1260, 6530]
Median [min, max] 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] 2400 [426, 7810]
n_event
Mean (SD) NA NA NA 389 (287) 64.8 (25.0) 39.0 (7.07) 245 (160) 184 (145) 334 (182) NA 220 (193)
Median [Q1, Q3] 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] 125 [80.5, 331]
Median [min, max] 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] 125 [34.0, 764]
FI_final
Mean (SD) 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.4)
Median [Q1, Q3] 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] 25.5 [17.8, 42.3]
Median [min, max] 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] 25.5 [9.00, 171]
FQ_final
Mean (SD) 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.0162 (0.0156)
Median [Q1, Q3] 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.0128 [0.00667, 0.0189]
Median [min, max] 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.0128 [0.00230, 0.0966]
as.factor(missing_fi)
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.6%)
1 0 (0%) 1 (100%) 1 (100%) 5 (83.3%) 1 (11.1%) 2 (100%) 11 (84.6%) 0 (0%) 1 (14.3%) 1 (100%) 23 (52.3%)
Missing 1 (100%) 0 (0%) 0 (0%) 0 (0%) 6 (66.7%) 0 (0%) 0 (0%) 3 (100%) 5 (71.4%) 0 (0%) 15 (34.1%)
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=9)
PTH analog
(N=11)
Romosozumab
(N=13)
Denosumab
(N=3)
Strontium_ranelate
(N=7)
Calcium_VitD
(N=1)
Overall
(N=44)
no_rand
Mean (SD) 5000 (3270) 1190 (387) 5760 (1600) 7870 (0) 1700 (354) NA 3900 (2800)
Median [Q1, Q3] 7740 [1960, 7740] 1100 [1090, 1500] 7180 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 1650] 3270 [3270, 3270] 2840 [1640, 7180]
Median [min, max] 7740 [704, 7740] 1100 [549, 1650] 7180 [4090, 7180] 7870 [7870, 7870] 1650 [1220, 2420] 3270 [3270, 3270] 2840 [549, 7870]
active_sample
Mean (SD) 4070 (2550) 965 (330) 5360 (1510) 7530 (240) 1500 (421) NA 3460 (2540)
Median [Q1, Q3] 5680 [1950, 6430] 892 [882, 1160] 6640 [3840, 6650] 7390 [7390, 7600] 1440 [1300, 1440] 2380 [2380, 2380] 2400 [1260, 6530]
Median [min, max] 5680 [544, 6550] 892 [426, 1430] 6640 [3530, 6910] 7390 [7390, 7810] 1440 [1150, 2420] 2380 [2380, 2380] 2400 [426, 7810]
n_event
Mean (SD) 289 (273) 60.1 (24.7) 245 (160) 184 (145) 334 (182) NA 220 (193)
Median [Q1, Q3] 110 [100, 402] 48.0 [42.5, 84.5] 225 [106, 323] 121 [102, 236] 330 [234, 360] 355 [355, 355] 125 [80.5, 331]
Median [min, max] 110 [58.0, 764] 48.0 [34.0, 100] 225 [75.0, 658] 121 [82.0, 350] 330 [128, 696] 355 [355, 355] 125 [34.0, 764]
FI_final
Mean (SD) 51.3 (50.4) 16.0 (5.35) 38.3 (16.9) 64.3 (63.9) 44.7 (32.4) NA 37.9 (33.4)
Median [Q1, Q3] 38.0 [20.0, 43.0] 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] 25.5 [17.8, 42.3]
Median [min, max] 38.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] 25.5 [9.00, 171]
FQ_final
Mean (SD) 0.0148 (0.0113) 0.0188 (0.00838) 0.00820 (0.00525) 0.00861 (0.00870) 0.0325 (0.0296) NA 0.0162 (0.0156)
Median [Q1, Q3] 0.00828 [0.00670, 0.0169] 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.0128 [0.00667, 0.0189]
Median [min, max] 0.00828 [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.0128 [0.00230, 0.0966]
as.factor(missing_fi)
0 1 (11.1%) 2 (18.2%) 2 (15.4%) 0 (0%) 1 (14.3%) 0 (0%) 6 (13.6%)
1 7 (77.8%) 3 (27.3%) 11 (84.6%) 0 (0%) 1 (14.3%) 1 (100%) 23 (52.3%)
Missing 1 (11.1%) 6 (54.5%) 0 (0%) 3 (100%) 5 (71.4%) 0 (0%) 15 (34.1%)
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.156, df = 5, p-value = 0.006412
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.135, df = 5, p-value = 0.00425

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")
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 = "Pharmacological interventions", y = "Fragility quotine")

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=17)
5
(N=14)
6
(N=1)
8
(N=1)
Overall
(N=44)
no_rand
Mean (SD) 4350 (2770) 1550 (993) 3770 (2600) 5200 (3110) NA NA 3900 (2800)
Median [Q1, Q3] 4090 [1650, 7180] 1640 [843, 1650] 4090 [1100, 7180] 7740 [1730, 7740] 1650 [1650, 1650] 2000 [2000, 2000] 2840 [1640, 7180]
Median [min, max] 4090 [1630, 7180] 1640 [549, 3270] 4090 [704, 7180] 7740 [1220, 7870] 1650 [1650, 1650] 2000 [2000, 2000] 2840 [549, 7870]
active_sample
Mean (SD) 4050 (2710) 1220 (726) 3430 (2480) 4530 (2660) NA NA 3460 (2540)
Median [Q1, Q3] 3980 [1390, 6640] 1330 [655, 1420] 3660 [892, 6650] 5680 [1570, 6540] 1150 [1150, 1150] 1950 [1950, 1950] 2400 [1260, 6530]
Median [min, max] 3980 [1330, 6910] 1330 [426, 2380] 3660 [544, 6690] 5680 [1220, 7810] 1150 [1150, 1150] 1950 [1950, 1950] 2400 [426, 7810]
n_event
Mean (SD) 132 (110) 93.0 (128) 192 (156) 300 (215) NA NA 220 (193)
Median [Q1, Q3] 76.0 [75.0, 128] 42.5 [37.3, 47.0] 106 [92.0, 246] 296 [113, 378] 696 [696, 696] 312 [312, 312] 125 [80.5, 331]
Median [min, max] 76.0 [58.0, 323] 42.5 [34.0, 355] 106 [46.0, 658] 296 [73.0, 764] 696 [696, 696] 312 [312, 312] 125 [34.0, 764]
FI_final
Mean (SD) 22.2 (7.46) 13.7 (5.75) 32.7 (17.6) 55.3 (46.3) NA NA 37.9 (33.4)
Median [Q1, Q3] 24.0 [19.0, 27.0] 12.0 [11.0, 13.0] 25.0 [21.0, 40.0] 42.5 [26.8, 50.3] 111 [111, 111] 33.0 [33.0, 33.0] 25.5 [17.8, 42.3]
Median [min, max] 24.0 [11.0, 30.0] 12.0 [9.00, 25.0] 25.0 [15.0, 77.0] 42.5 [15.0, 171] 111 [111, 111] 33.0 [33.0, 33.0] 25.5 [9.00, 171]
FQ_final
Mean (SD) 0.00741 (0.00410) 0.0149 (0.00976) 0.0151 (0.00970) 0.0153 (0.0108) NA NA 0.0162 (0.0156)
Median [Q1, Q3] 0.00754 [0.00391, 0.00828] 0.00990 [0.00810, 0.0220] 0.0143 [0.00601, 0.0193] 0.0130 [0.00661, 0.0187] 0.0966 [0.0966, 0.0966] 0.0169 [0.0169, 0.0169] 0.0128 [0.00667, 0.0189]
Median [min, max] 0.00754 [0.00361, 0.0137] 0.00990 [0.00711, 0.0288] 0.0143 [0.00315, 0.0368] 0.0130 [0.00230, 0.0361] 0.0966 [0.0966, 0.0966] 0.0169 [0.0169, 0.0169] 0.0128 [0.00230, 0.0966]
as.factor(missing_fi)
0 1 (20.0%) 0 (0%) 3 (17.6%) 1 (7.1%) 0 (0%) 1 (100%) 6 (13.6%)
1 3 (60.0%) 4 (66.7%) 10 (58.8%) 6 (42.9%) 0 (0%) 0 (0%) 23 (52.3%)
Missing 1 (20.0%) 2 (33.3%) 4 (23.5%) 7 (50.0%) 1 (100%) 0 (0%) 15 (34.1%)
kruskal.test(FI_final ~ timing, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by timing
## Kruskal-Wallis chi-squared = 16.328, df = 5, p-value = 0.005967
kruskal.test(FQ_final ~ timing, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by timing
## Kruskal-Wallis chi-squared = 5.6791, df = 5, p-value = 0.3387

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=2)
JAMA
(N=4)
JBMR
(N=1)
JCEM
(N=4)
Other
(N=2)
Overall
(N=44)
no_rand
Mean (SD) 4950 (2700) 1360 (0) 1640 (8.02) NA 1190 (874) 1180 (668) 3900 (2800)
Median [Q1, Q3] 4090 [1820, 7460] 1360 [1360, 1360] 1640 [1640, 1650] 1960 [1960, 1960] 901 [571, 1520] 1180 [940, 1410] 2840 [1640, 7180]
Median [min, max] 4090 [1090, 7870] 1360 [1360, 1360] 1640 [1630, 1650] 1960 [1960, 1960] 901 [549, 2420] 1180 [704, 1650] 2840 [549, 7870]
active_sample
Mean (SD) 4410 (2450) 1050 (0) 1360 (73.1) NA 1130 (934) 847 (428) 3460 (2540)
Median [Q1, Q3] 4090 [1700, 6650] 1050 [1050, 1050] 1370 [1310, 1410] 1950 [1950, 1950] 838 [445, 1520] 847 [695, 998] 2400 [1260, 6530]
Median [min, max] 4090 [882, 7810] 1050 [1050, 1050] 1370 [1270, 1430] 1950 [1950, 1950] 838 [426, 2420] 847 [544, 1150] 2400 [426, 7810]
n_event
Mean (SD) 250 (190) 96.0 (5.66) 43.0 (10.9) NA 170 (148) 398 (421) 220 (193)
Median [Q1, Q3] 221 [94.5, 353] 96.0 [94.0, 98.0] 40.0 [35.5, 47.5] 110 [110, 110] 155 [46.3, 278] 398 [249, 547] 125 [80.5, 331]
Median [min, max] 221 [46.0, 764] 96.0 [92.0, 100] 40.0 [34.0, 58.0] 110 [110, 110] 155 [41.0, 330] 398 [100, 696] 125 [34.0, 764]
FI_final
Mean (SD) 43.6 (34.3) 16.0 (1.41) 11.0 (1.63) NA 23.0 (15.6) 65.5 (64.3) 37.9 (33.4)
Median [Q1, Q3] 36.0 [23.5, 44.0] 16.0 [15.5, 16.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] 25.5 [17.8, 42.3]
Median [min, max] 36.0 [17.0, 171] 16.0 [15.0, 17.0] 11.0 [9.00, 13.0] 15.0 [15.0, 15.0] 18.0 [11.0, 45.0] 65.5 [20.0, 111] 25.5 [9.00, 171]
FQ_final
Mean (SD) 0.0134 (0.00951) 0.0153 (0.00135) 0.00809 (0.000924) NA 0.0230 (0.00512) 0.0667 (0.0423) 0.0162 (0.0156)
Median [Q1, Q3] 0.0115 [0.00594, 0.0187] 0.0153 [0.0148, 0.0157] 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.0128 [0.00667, 0.0189]
Median [min, max] 0.0115 [0.00230, 0.0361] 0.0153 [0.0143, 0.0162] 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.0128 [0.00230, 0.0966]
as.factor(missing_fi)
0 3 (9.7%) 2 (100%) 0 (0%) 0 (0%) 1 (25.0%) 0 (0%) 6 (13.6%)
1 17 (54.8%) 0 (0%) 4 (100%) 0 (0%) 1 (25.0%) 1 (50.0%) 23 (52.3%)
Missing 11 (35.5%) 0 (0%) 0 (0%) 1 (100%) 2 (50.0%) 1 (50.0%) 15 (34.1%)
kruskal.test(FI_final ~ journal_code2, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by journal_code2
## Kruskal-Wallis chi-squared = 18.002, df = 5, p-value = 0.002943
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.179, df = 5, p-value = 0.04794

Box plots

p1 = ggplot(data = p_sig, 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

(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=42)
Overall
(N=44)
no_rand
Mean (SD) 564 (20.5) 4060 (2760) 3900 (2800)
Median [Q1, Q3] 564 [556, 571] 3680 [1650, 7180] 2840 [1640, 7180]
Median [min, max] 564 [549, 578] 3680 [704, 7870] 2840 [549, 7870]
active_sample
Mean (SD) 439 (17.7) 3610 (2510) 3460 (2540)
Median [Q1, Q3] 439 [432, 445] 2980 [1340, 6540] 2400 [1260, 6530]
Median [min, max] 439 [426, 451] 2980 [544, 7810] 2400 [426, 7810]
n_event
Mean (SD) 44.5 (4.95) 229 (193) 220 (193)
Median [Q1, Q3] 44.5 [42.8, 46.3] 148 [83.8, 332] 125 [80.5, 331]
Median [min, max] 44.5 [41.0, 48.0] 148 [34.0, 764] 125 [34.0, 764]
FI_final
Mean (SD) 12.0 (1.41) 39.1 (33.7) 37.9 (33.4)
Median [Q1, Q3] 12.0 [11.5, 12.5] 26.5 [19.3, 42.8] 25.5 [17.8, 42.3]
Median [min, max] 12.0 [11.0, 13.0] 26.5 [9.00, 171] 25.5 [9.00, 171]
FQ_final
Mean (SD) 0.0273 (0.00212) 0.0156 (0.0158) 0.0162 (0.0156)
Median [Q1, Q3] 0.0273 [0.0266, 0.0281] 0.0120 [0.00661, 0.0187] 0.0128 [0.00667, 0.0189]
Median [min, max] 0.0273 [0.0258, 0.0288] 0.0120 [0.00230, 0.0966] 0.0128 [0.00230, 0.0966]
as.factor(missing_fi)
0 0 (0%) 6 (14.3%) 6 (13.6%)
1 0 (0%) 23 (54.8%) 23 (52.3%)
Missing 2 (100%) 13 (31.0%) 15 (34.1%)
kruskal.test(FI_final ~ sex, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by sex
## Kruskal-Wallis chi-squared = 4.2347, df = 1, p-value = 0.0396
kruskal.test(FQ_final ~ sex, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by sex
## Kruskal-Wallis chi-squared = 3.0508, df = 1, p-value = 0.0807

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=33)
Overall
(N=44)
no_rand
Mean (SD) 2930 (1340) 4230 (3080) 3900 (2800)
Median [Q1, Q3] 4090 [1640, 4090] 2420 [1630, 7180] 2840 [1640, 7180]
Median [min, max] 4090 [1360, 4090] 2420 [549, 7870] 2840 [549, 7870]
active_sample
Mean (SD) 2630 (1350) 3740 (2790) 3460 (2540)
Median [Q1, Q3] 3530 [1330, 3750] 2380 [1220, 6650] 2400 [1260, 6530]
Median [min, max] 3530 [1050, 4090] 2380 [426, 7810] 2400 [426, 7810]
n_event
Mean (SD) 226 (193) 218 (195) 220 (193)
Median [Q1, Q3] 221 [68.0, 339] 121 [82.0, 330] 125 [80.5, 331]
Median [min, max] 221 [34.0, 658] 121 [41.0, 764] 125 [34.0, 764]
FI_final
Mean (SD) 32.1 (23.1) 39.8 (36.3) 37.9 (33.4)
Median [Q1, Q3] 26.0 [14.0, 45.0] 25.0 [20.0, 42.0] 25.5 [17.8, 42.3]
Median [min, max] 26.0 [9.00, 77.0] 25.0 [11.0, 171] 25.5 [9.00, 171]
FQ_final
Mean (SD) 0.0118 (0.00431) 0.0176 (0.0177) 0.0162 (0.0156)
Median [Q1, Q3] 0.0115 [0.00762, 0.0153] 0.0136 [0.00601, 0.0258] 0.0128 [0.00667, 0.0189]
Median [min, max] 0.0115 [0.00711, 0.0188] 0.0136 [0.00230, 0.0966] 0.0128 [0.00230, 0.0966]
as.factor(missing_fi)
0 4 (36.4%) 2 (6.1%) 6 (13.6%)
1 7 (63.6%) 16 (48.5%) 23 (52.3%)
Missing 0 (0%) 15 (45.5%) 15 (34.1%)
kruskal.test(FI_final ~ placebo, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by placebo
## Kruskal-Wallis chi-squared = 0.42368, df = 1, p-value = 0.5151
kruskal.test(FQ_final ~ placebo, data = p_sig)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by placebo
## Kruskal-Wallis chi-squared = 0.097153, df = 1, p-value = 0.7553

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)

(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=112)
1
(N=17)
Overall
(N=129)
no_rand
Mean (SD) 3240 (2450) 2110 (1220) 3090 (2360)
Median [Q1, Q3] 1980 [1360, 4430] 1650 [1200, 3270] 1960 [1360, 4090]
Median [min, max] 1980 [450, 7870] 1650 [549, 4090] 1960 [450, 7870]
active_sample
Mean (SD) 2820 (2230) 1880 (1140) 2700 (2140)
Median [Q1, Q3] 1860 [1130, 4020] 1440 [1110, 2420] 1860 [1130, 3700]
Median [min, max] 1860 [339, 7810] 1440 [426, 4090] 1860 [339, 7810]
n_event
Mean (SD) 172 (181) 186 (133) 174 (176)
Median [Q1, Q3] 95.5 [52.5, 227] 190 [41.0, 330] 101 [51.0, 246]
Median [min, max] 95.5 [10.0, 764] 190 [19.0, 375] 101 [10.0, 764]
FI_final
Mean (SD) 17.4 (25.5) 18.1 (20.5) 17.5 (24.8)
Median [Q1, Q3] 9.00 [4.00, 21.3] 11.0 [4.00, 23.0] 9.00 [4.00, 22.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.00782 (0.0113) 0.0104 (0.00932) 0.00815 (0.0111)
Median [Q1, Q3] 0.00480 [0.00219, 0.00852] 0.00609 [0.00337, 0.0186] 0.00499 [0.00230, 0.00928]
Median [min, max] 0.00480 [0.000151, 0.0966] 0.00609 [0.000946, 0.0312] 0.00499 [0.000151, 0.0966]
as.factor(missing_fi)
0 8 (7.1%) 2 (11.8%) 10 (7.8%)
1 64 (57.1%) 9 (52.9%) 73 (56.6%)
Missing 40 (35.7%) 6 (35.3%) 46 (35.7%)
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=112              N=17                   
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
## no_rand       1982 [1360;4432]  1649 [1199;3270]     0.159   
## active_sample 1861 [1127;4017]  1442 [1112;2416]     0.338   
## n_event       95.5 [52.5;226]    190 [41.0;330]      0.442   
## FI_final      9.00 [4.00;21.2]  11.0 [4.00;23.0]     0.725   
## FQ_final      0.00 [0.00;0.01]  0.01 [0.00;0.02]     0.189   
## missing_fi:                                          0.615   
##     0            8 (11.1%)          2 (18.2%)                
##     1            64 (88.9%)         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=112)
no_rand
Mean (SD) 3240 (2450)
Median [Q1, Q3] 1980 [1360, 4430]
Median [min, max] 1980 [450, 7870]
active_sample
Mean (SD) 2820 (2230)
Median [Q1, Q3] 1860 [1130, 4020]
Median [min, max] 1860 [339, 7810]
n_event
Mean (SD) 172 (181)
Median [Q1, Q3] 95.5 [52.5, 227]
Median [min, max] 95.5 [10.0, 764]
FI_final
Mean (SD) 17.4 (25.5)
Median [Q1, Q3] 9.00 [4.00, 21.3]
Median [min, max] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00782 (0.0113)
Median [Q1, Q3] 0.00480 [0.00219, 0.00852]
Median [min, max] 0.00480 [0.000151, 0.0966]
as.factor(missing_fi)
0 8 (7.1%)
1 64 (57.1%)
Missing 40 (35.7%)

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=11)
OFx
(N=4)
MOF
(N=4)
Dif_comb
(N=1)
NonVert_fx
(N=17)
Vert_fx
(N=54)
ClinVert_fx
(N=10)
Hip
(N=6)
Forearm
(N=2)
Overall
(N=112)
no_rand
Mean (SD) 1850 (423) 3860 (2570) 2780 (1580) 5020 (2680) NA 4010 (2510) 2800 (2440) 3160 (2590) 4510 (2680) 1740 (374) 3240 (2450)
Median [Q1, Q3] 1770 [1620, 2030] 4090 [1820, 5810] 3050 [1730, 4090] 5640 [3480, 7180] 2690 [2690, 2690] 4090 [1630, 5090] 1630 [1200, 4090] 1980 [1730, 3600] 3680 [2540, 6830] 1740 [1600, 1870] 1980 [1360, 4430]
Median [min, max] 1770 [1470, 2300] 4090 [578, 7740] 3050 [930, 4090] 5640 [1650, 7180] 2690 [2690, 2690] 4090 [450, 7870] 1630 [578, 7870] 1980 [578, 7870] 3680 [1770, 7870] 1740 [1470, 2000] 1980 [450, 7870]
active_sample
Mean (SD) 1830 (439) 3340 (2450) 2670 (1490) 4320 (2410) NA 3550 (2310) 2440 (2200) 2660 (2510) 3700 (2260) 1160 (810) 2820 (2230)
Median [Q1, Q3] 1770 [1600, 2030] 3640 [1190, 5430] 2890 [1690, 3870] 4820 [2970, 6170] 2690 [2690, 2690] 3610 [1630, 4940] 1350 [1050, 3580] 1910 [1210, 2920] 2810 [1900, 5660] 1160 [876, 1450] 1860 [1130, 4020]
Median [min, max] 1770 [1430, 2300] 3640 [451, 6690] 2890 [930, 3980] 4820 [1270, 6380] 2690 [2690, 2690] 3610 [389, 6670] 1350 [451, 7390] 1910 [339, 7810] 2810 [1770, 6600] 1160 [590, 1740] 1860 [339, 7810]
n_event
Mean (SD) 354 (290) 275 (215) 334 (251) 170 (135) NA 287 (222) 114 (144) 81.1 (51.2) 159 (106) 111 (16.3) 172 (181)
Median [Q1, Q3] 475 [249, 519] 231 [120, 393] 318 [245, 407] 140 [86.8, 222] 147 [147, 147] 225 [85.0, 471] 72.0 [36.3, 109] 63.0 [60.5, 93.8] 124 [78.5, 232] 111 [105, 116] 95.5 [52.5, 227]
Median [min, max] 475 [23.0, 563] 231 [34.0, 764] 318 [44.0, 658] 140 [44.0, 355] 147 [147, 147] 225 [37.0, 680] 72.0 [10.0, 696] 63.0 [21.0, 204] 124 [58.0, 315] 111 [99.0, 122] 95.5 [10.0, 764]
FI_final
Mean (SD) 16.7 (11.9) 19.2 (25.3) 32.3 (26.2) 13.8 (9.14) NA 9.76 (11.5) 21.3 (32.2) 12.7 (15.0) 7.83 (6.05) 5.50 (4.95) 17.4 (25.5)
Median [Q1, Q3] 22.0 [12.5, 23.5] 8.00 [6.00, 20.5] 31.5 [22.8, 41.0] 12.0 [8.00, 17.8] 4.00 [4.00, 4.00] 5.00 [2.00, 17.0] 11.0 [4.00, 22.8] 6.50 [4.00, 11.5] 8.00 [2.75, 11.8] 5.50 [3.75, 7.25] 9.00 [4.00, 21.3]
Median [min, max] 22.0 [3.00, 25.0] 8.00 [4.00, 89.0] 31.5 [1.00, 65.0] 12.0 [5.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] 8.00 [1.00, 16.0] 5.50 [2.00, 9.00] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00847 (0.00558) 0.00668 (0.00469) 0.0106 (0.00776) 0.00443 (0.00331) NA 0.00282 (0.00247) 0.0110 (0.0151) 0.00448 (0.00254) 0.00290 (0.00292) 0.00429 (0.00127) 0.00782 (0.0113)
Median [Q1, Q3] 0.0109 [0.00647, 0.0117] 0.00714 [0.00236, 0.00898] 0.0122 [0.00592, 0.0169] 0.00478 [0.00204, 0.00717] 0.00149 [0.00149, 0.00149] 0.00239 [0.00101, 0.00346] 0.00634 [0.00299, 0.0136] 0.00383 [0.00298, 0.00504] 0.00168 [0.000801, 0.00514] 0.00429 [0.00384, 0.00474] 0.00480 [0.00219, 0.00852]
Median [min, max] 0.0109 [0.00209, 0.0125] 0.00714 [0.00124, 0.0146] 0.0122 [0.00108, 0.0169] 0.00478 [0.000783, 0.00736] 0.00149 [0.00149, 0.00149] 0.00239 [0.000203, 0.00955] 0.00634 [0.000151, 0.0966] 0.00383 [0.00205, 0.0104] 0.00168 [0.000303, 0.00695] 0.00429 [0.00339, 0.00519] 0.00480 [0.000151, 0.0966]
as.factor(missing_fi)
0 0 (0%) 1 (9.1%) 2 (50.0%) 0 (0%) 0 (0%) 1 (5.9%) 3 (5.6%) 0 (0%) 0 (0%) 1 (50.0%) 8 (7.1%)
1 1 (33.3%) 8 (72.7%) 2 (50.0%) 4 (100%) 1 (100%) 9 (52.9%) 31 (57.4%) 4 (40.0%) 3 (50.0%) 1 (50.0%) 64 (57.1%)
Missing 2 (66.7%) 2 (18.2%) 0 (0%) 0 (0%) 0 (0%) 7 (41.2%) 20 (37.0%) 6 (60.0%) 3 (50.0%) 0 (0%) 40 (35.7%)
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=14)
Osteoporotic
(N=9)
Non-Vertebrae
(N=17)
Vertebrae
(N=54)
Clinical Vertebrae
(N=10)
Hip
(N=6)
Forearm
(N=2)
Overall
(N=112)
no_rand
Mean (SD) 3430 (2410) 3770 (2250) 4010 (2510) 2800 (2440) 3160 (2590) 4510 (2680) 1740 (374) 3240 (2450)
Median [Q1, Q3] 2220 [1680, 4350] 4090 [2000, 4090] 4090 [1630, 5090] 1630 [1200, 4090] 1980 [1730, 3600] 3680 [2540, 6830] 1740 [1600, 1870] 1980 [1360, 4430]
Median [min, max] 2220 [578, 7740] 4090 [930, 7180] 4090 [450, 7870] 1630 [578, 7870] 1980 [578, 7870] 3680 [1770, 7870] 1740 [1470, 2000] 1980 [450, 7870]
active_sample
Mean (SD) 3020 (2250) 3410 (1940) 3550 (2310) 2440 (2200) 2660 (2510) 3700 (2260) 1160 (810) 2820 (2230)
Median [Q1, Q3] 2150 [1310, 4250] 3530 [1950, 3980] 3610 [1630, 4940] 1350 [1050, 3580] 1910 [1210, 2920] 2810 [1900, 5660] 1160 [876, 1450] 1860 [1130, 4020]
Median [min, max] 2150 [451, 6690] 3530 [930, 6380] 3610 [389, 6670] 1350 [451, 7390] 1910 [339, 7810] 2810 [1770, 6600] 1160 [590, 1740] 1860 [339, 7810]
n_event
Mean (SD) 292 (222) 240 (196) 287 (222) 114 (144) 81.1 (51.2) 159 (106) 111 (16.3) 172 (181)
Median [Q1, Q3] 239 [105, 450] 178 [101, 323] 225 [85.0, 471] 72.0 [36.3, 109] 63.0 [60.5, 93.8] 124 [78.5, 232] 111 [105, 116] 95.5 [52.5, 227]
Median [min, max] 239 [23.0, 764] 178 [44.0, 658] 225 [37.0, 680] 72.0 [10.0, 696] 63.0 [21.0, 204] 124 [58.0, 315] 111 [99.0, 122] 95.5 [10.0, 764]
FI_final
Mean (SD) 18.6 (22.7) 20.9 (20.3) 9.76 (11.5) 21.3 (32.2) 12.7 (15.0) 7.83 (6.05) 5.50 (4.95) 17.4 (25.5)
Median [Q1, Q3] 9.00 [5.50, 24.3] 15.0 [5.00, 30.0] 5.00 [2.00, 17.0] 11.0 [4.00, 22.8] 6.50 [4.00, 11.5] 8.00 [2.75, 11.8] 5.50 [3.75, 7.25] 9.00 [4.00, 21.3]
Median [min, max] 9.00 [3.00, 89.0] 15.0 [1.00, 65.0] 5.00 [1.00, 43.0] 11.0 [1.00, 171] 6.50 [1.00, 42.0] 8.00 [1.00, 16.0] 5.50 [2.00, 9.00] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00706 (0.00472) 0.00685 (0.00635) 0.00282 (0.00247) 0.0110 (0.0151) 0.00448 (0.00254) 0.00290 (0.00292) 0.00429 (0.00127) 0.00782 (0.0113)
Median [Q1, Q3] 0.00731 [0.00235, 0.0104] 0.00711 [0.00149, 0.00754] 0.00239 [0.00101, 0.00346] 0.00634 [0.00299, 0.0136] 0.00383 [0.00298, 0.00504] 0.00168 [0.000801, 0.00514] 0.00429 [0.00384, 0.00474] 0.00480 [0.00219, 0.00852]
Median [min, max] 0.00731 [0.00124, 0.0146] 0.00711 [0.000783, 0.0169] 0.00239 [0.000203, 0.00955] 0.00634 [0.000151, 0.0966] 0.00383 [0.00205, 0.0104] 0.00168 [0.000303, 0.00695] 0.00429 [0.00339, 0.00519] 0.00480 [0.000151, 0.0966]
as.factor(missing_fi)
0 1 (7.1%) 2 (22.2%) 1 (5.9%) 3 (5.6%) 0 (0%) 0 (0%) 1 (50.0%) 8 (7.1%)
1 9 (64.3%) 7 (77.8%) 9 (52.9%) 31 (57.4%) 4 (40.0%) 3 (50.0%) 1 (50.0%) 64 (57.1%)
Missing 4 (28.6%) 0 (0%) 7 (41.2%) 20 (37.0%) 6 (60.0%) 3 (50.0%) 0 (0%) 40 (35.7%)
kruskal.test(FI_final ~ fx_code2, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by fx_code2
## Kruskal-Wallis chi-squared = 7.5755, df = 6, p-value = 0.2709
kruskal.test(FQ_final ~ fx_code2, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by fx_code2
## Kruskal-Wallis chi-squared = 17.741, df = 6, p-value = 0.006914

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")
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")

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=2)
Ibandronate
(N=6)
Risedronate
(N=5)
Minodronate
(N=3)
Zoledronate
(N=19)
Teriparatide
(N=19)
Abaloparatide
(N=3)
Romosozumab
(N=26)
Denosumab
(N=9)
Strontium_ranelate
(N=9)
Calcium_VitD
(N=11)
Overall
(N=112)
no_rand
Mean (SD) 4430 (0) 1960 (0) 1490 (308) 704 (0) 3610 (2900) 1080 (309) 1650 (0) 5520 (1570) 5020 (3370) 3180 (1810) 1970 (899) 3240 (2450)
Median [Q1, Q3] 4430 [4430, 4430] 1960 [1960, 1960] 1630 [1630, 1630] 704 [704, 704] 2000 [1600, 7740] 1100 [1090, 1360] 1650 [1650, 1650] 4090 [4090, 7180] 7870 [1470, 7870] 1650 [1650, 5090] 1770 [1470, 2490] 1980 [1360, 4430]
Median [min, max] 4430 [4430, 4430] 1960 [1960, 1960] 1630 [939, 1630] 704 [704, 704] 2000 [1200, 7740] 1100 [578, 1640] 1650 [1650, 1650] 4090 [4090, 7180] 7870 [1470, 7870] 1650 [1650, 5090] 1770 [450, 3270] 1980 [450, 7870]
active_sample
Mean (SD) 4280 (211) 1950 (0) 1270 (317) 575 (27.7) 2900 (2370) 871 (261) 1310 (75.5) 4970 (1540) 4600 (3080) 2770 (1790) 1530 (789) 2820 (2230)
Median [Q1, Q3] 4280 [4210, 4360] 1950 [1950, 1950] 1330 [1280, 1370] 582 [563, 590] 1860 [1130, 5680] 882 [843, 1050] 1280 [1270, 1340] 3910 [3620, 6640] 6600 [1350, 7390] 1440 [1390, 4930] 1770 [760, 2030] 1860 [1130, 4020]
Median [min, max] 4280 [4130, 4430] 1950 [1950, 1950] 1330 [759, 1630] 582 [544, 598] 1860 [339, 6550] 882 [451, 1430] 1280 [1270, 1400] 3910 [3240, 6910] 6600 [1350, 7810] 1440 [1150, 4940] 1770 [389, 2690] 1860 [339, 7810]
n_event
Mean (SD) 265 (204) 81.5 (23.1) 86.0 (39.3) 79.3 (20.5) 197 (222) 53.4 (27.3) 51.3 (21.9) 203 (148) 140 (180) 428 (247) 205 (180) 172 (181)
Median [Q1, Q3] 265 [193, 337] 70.5 [64.5, 101] 68.0 [65.0, 85.0] 79.0 [69.0, 89.5] 99.0 [43.5, 281] 46.0 [34.5, 84.0] 44.0 [39.0, 60.0] 168 [105, 253] 69.0 [29.0, 121] 471 [204, 671] 147 [64.0, 289] 95.5 [52.5, 227]
Median [min, max] 265 [121, 409] 70.5 [63.0, 112] 68.0 [58.0, 154] 79.0 [59.0, 100] 99.0 [13.0, 764] 46.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] 95.5 [10.0, 764]
FI_final
Mean (SD) 10.0 (4.24) 8.50 (4.68) 5.80 (4.87) 10.0 (9.17) 26.7 (41.3) 9.84 (7.99) 8.67 (4.51) 20.8 (16.6) 25.1 (43.7) 26.6 (35.5) 8.36 (8.85) 17.4 (25.5)
Median [Q1, Q3] 10.0 [8.50, 11.5] 7.50 [4.50, 12.0] 4.00 [2.00, 11.0] 8.00 [5.00, 14.0] 10.0 [5.00, 35.5] 8.00 [2.50, 16.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, 21.3]
Median [min, max] 10.0 [7.00, 13.0] 7.50 [4.00, 15.0] 4.00 [1.00, 11.0] 8.00 [2.00, 20.0] 10.0 [1.00, 171] 8.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.00236 (0.00111) 0.00435 (0.00240) 0.00475 (0.00356) 0.0180 (0.0171) 0.00753 (0.00714) 0.0117 (0.00946) 0.00651 (0.00311) 0.00451 (0.00413) 0.00432 (0.00546) 0.0191 (0.0311) 0.00501 (0.00387) 0.00782 (0.0113)
Median [Q1, Q3] 0.00236 [0.00197, 0.00275] 0.00384 [0.00231, 0.00615] 0.00527 [0.00156, 0.00801] 0.0137 [0.00855, 0.0253] 0.00537 [0.00309, 0.00851] 0.00887 [0.00351, 0.0177] 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.00480 [0.00219, 0.00852]
Median [min, max] 0.00236 [0.00158, 0.00314] 0.00384 [0.00205, 0.00768] 0.00527 [0.000615, 0.00828] 0.0137 [0.00334, 0.0368] 0.00537 [0.000887, 0.0301] 0.00887 [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.00480 [0.000151, 0.0966]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 0 (0%) 0 (0%) 5 (26.3%) 2 (10.5%) 0 (0%) 1 (3.8%) 0 (0%) 0 (0%) 0 (0%) 8 (7.1%)
1 0 (0%) 0 (0%) 4 (80.0%) 3 (100%) 14 (73.7%) 4 (21.1%) 3 (100%) 25 (96.2%) 4 (44.4%) 1 (11.1%) 6 (54.5%) 64 (57.1%)
Missing 2 (100%) 6 (100%) 1 (20.0%) 0 (0%) 0 (0%) 13 (68.4%) 0 (0%) 0 (0%) 5 (55.6%) 8 (88.9%) 5 (45.5%) 40 (35.7%)
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=35)
PTH analog
(N=22)
Romosozumab
(N=26)
Denosumab
(N=9)
Strontium_ranelate
(N=9)
Calcium_VitD
(N=11)
Overall
(N=112)
no_rand
Mean (SD) 2820 (2400) 1160 (347) 5520 (1570) 5020 (3370) 3180 (1810) 1970 (899) 3240 (2450)
Median [Q1, Q3] 1960 [1410, 2130] 1100 [1090, 1360] 4090 [4090, 7180] 7870 [1470, 7870] 1650 [1650, 5090] 1770 [1470, 2490] 1980 [1360, 4430]
Median [min, max] 1960 [704, 7740] 1100 [578, 1650] 4090 [4090, 7180] 7870 [1470, 7870] 1650 [1650, 5090] 1770 [450, 3270] 1980 [450, 7870]
active_sample
Mean (SD) 2380 (1960) 932 (289) 4970 (1540) 4600 (3080) 2770 (1790) 1530 (789) 2820 (2230)
Median [Q1, Q3] 1860 [1130, 1980] 892 [856, 1090] 3910 [3620, 6640] 6600 [1350, 7390] 1440 [1390, 4930] 1770 [760, 2030] 1860 [1130, 4020]
Median [min, max] 1860 [339, 6550] 892 [451, 1430] 3910 [3240, 6910] 6600 [1350, 7810] 1440 [1150, 4940] 1770 [389, 2690] 1860 [339, 7810]
n_event
Mean (SD) 155 (177) 53.1 (26.2) 203 (148) 140 (180) 428 (247) 205 (180) 172 (181)
Median [Q1, Q3] 79.0 [61.5, 147] 45.0 [34.3, 81.3] 168 [105, 253] 69.0 [29.0, 121] 471 [204, 671] 147 [64.0, 289] 95.5 [52.5, 227]
Median [min, max] 79.0 [13.0, 764] 45.0 [14.0, 100] 168 [10.0, 658] 69.0 [15.0, 531] 471 [66.0, 696] 147 [37.0, 563] 95.5 [10.0, 764]
FI_final
Mean (SD) 18.2 (31.7) 9.68 (7.54) 20.8 (16.6) 25.1 (43.7) 26.6 (35.5) 8.36 (8.85) 17.4 (25.5)
Median [Q1, Q3] 9.00 [4.00, 15.0] 8.50 [3.25, 14.5] 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, 21.3]
Median [min, max] 9.00 [1.00, 171] 8.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.00719 (0.00778) 0.0110 (0.00900) 0.00451 (0.00413) 0.00432 (0.00546) 0.0191 (0.0311) 0.00501 (0.00387) 0.00782 (0.0113)
Median [Q1, Q3] 0.00527 [0.00250, 0.00785] 0.00864 [0.00346, 0.0157] 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.00480 [0.00219, 0.00852]
Median [min, max] 0.00527 [0.000615, 0.0368] 0.00864 [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.00480 [0.000151, 0.0966]
as.factor(missing_fi)
0 5 (14.3%) 2 (9.1%) 1 (3.8%) 0 (0%) 0 (0%) 0 (0%) 8 (7.1%)
1 21 (60.0%) 7 (31.8%) 25 (96.2%) 4 (44.4%) 1 (11.1%) 6 (54.5%) 64 (57.1%)
Missing 9 (25.7%) 13 (59.1%) 0 (0%) 5 (55.6%) 8 (88.9%) 5 (45.5%) 40 (35.7%)
kruskal.test(FI_final ~ interv_code2, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by interv_code2
## Kruskal-Wallis chi-squared = 9.2817, df = 5, p-value = 0.09834
kruskal.test(FQ_final ~ interv_code2, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by interv_code2
## Kruskal-Wallis chi-squared = 11.821, df = 5, p-value = 0.03732

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")
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 = "Pharmacological interventions", y = "Fragility quotine")

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.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=20)
3
(N=10)
4
(N=36)
5
(N=28)
6
(N=6)
7
(N=5)
8
(N=7)
Overall
(N=112)
no_rand
Mean (SD) 3470 (2500) 1560 (1030) 3110 (2360) 4260 (2980) 2340 (1650) 3640 (1980) 2100 (259) 3240 (2450)
Median [Q1, Q3] 2870 [1440, 4860] 1640 [610, 1650] 1720 [1100, 4090] 2220 [1770, 7740] 1650 [1120, 3740] 5090 [1470, 5090] 2000 [2000, 2000] 1980 [1360, 4430]
Median [min, max] 2870 [578, 7180] 1640 [578, 3270] 1720 [704, 7180] 2220 [450, 7870] 1650 [930, 4430] 5090 [1470, 5090] 2000 [2000, 2690] 1980 [450, 7870]
active_sample
Mean (SD) 3120 (2330) 1080 (545) 2760 (2190) 3660 (2610) 2090 (1710) 2930 (2210) 2000 (315) 2820 (2230)
Median [Q1, Q3] 2390 [1250, 4580] 1270 [484, 1420] 1650 [892, 3660] 2130 [1580, 6470] 1150 [985, 3390] 3650 [590, 4940] 1890 [1860, 1980] 1860 [1130, 4020]
Median [min, max] 2390 [476, 6910] 1270 [451, 1770] 1650 [544, 6690] 2130 [339, 7810] 1150 [759, 4430] 3650 [567, 4940] 1890 [1740, 2690] 1860 [339, 7810]
n_event
Mean (SD) 94.5 (76.5) 59.3 (40.9) 141 (145) 242 (215) 257 (252) 418 (301) 186 (127) 172 (181)
Median [Q1, Q3] 70.5 [48.5, 142] 46.0 [34.5, 71.5] 88.5 [44.0, 189] 131 [72.0, 391] 163 [81.3, 358] 537 [122, 671] 147 [85.5, 281] 95.5 [52.5, 227]
Median [min, max] 70.5 [10.0, 323] 46.0 [21.0, 163] 88.5 [14.0, 658] 131 [23.0, 764] 163 [44.0, 696] 537 [70.0, 691] 147 [48.0, 377] 95.5 [10.0, 764]
FI_final
Mean (SD) 8.75 (8.95) 7.10 (4.38) 17.2 (15.3) 28.5 (40.9) 24.7 (42.5) 8.20 (11.7) 13.6 (9.85) 17.4 (25.5)
Median [Q1, Q3] 5.00 [2.75, 9.50] 7.00 [4.00, 10.5] 14.5 [5.75, 23.5] 14.0 [4.00, 38.3] 9.50 [4.75, 12.8] 3.00 [2.00, 5.00] 10.0 [7.50, 16.5] 9.00 [4.00, 21.3]
Median [min, max] 5.00 [1.00, 30.0] 7.00 [1.00, 13.0] 14.5 [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.00362 (0.00342) 0.00871 (0.00801) 0.00864 (0.00885) 0.00792 (0.00850) 0.0197 (0.0378) 0.00330 (0.00292) 0.00703 (0.00510) 0.00782 (0.0113)
Median [Q1, Q3] 0.00240 [0.00136, 0.00419] 0.00741 [0.00366, 0.00918] 0.00535 [0.00283, 0.0119] 0.00638 [0.00225, 0.00872] 0.00421 [0.00197, 0.00915] 0.00339 [0.00101, 0.00353] 0.00537 [0.00421, 0.00851] 0.00480 [0.00219, 0.00852]
Median [min, max] 0.00240 [0.000151, 0.0137] 0.00741 [0.000567, 0.0288] 0.00535 [0.000554, 0.0368] 0.00638 [0.000203, 0.0361] 0.00421 [0.00108, 0.0966] 0.00339 [0.000608, 0.00795] 0.00537 [0.00149, 0.0169] 0.00480 [0.000151, 0.0966]
as.factor(missing_fi)
0 1 (5.0%) 0 (0%) 2 (5.6%) 0 (0%) 0 (0%) 0 (0%) 5 (71.4%) 8 (7.1%)
1 16 (80.0%) 7 (70.0%) 23 (63.9%) 13 (46.4%) 1 (16.7%) 2 (40.0%) 2 (28.6%) 64 (57.1%)
Missing 3 (15.0%) 3 (30.0%) 11 (30.6%) 15 (53.6%) 5 (83.3%) 3 (60.0%) 0 (0%) 40 (35.7%)
kruskal.test(FI_final ~ timing, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by timing
## Kruskal-Wallis chi-squared = 9.8301, df = 6, p-value = 0.132
kruskal.test(FQ_final ~ timing, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by timing
## Kruskal-Wallis chi-squared = 9.9307, df = 6, p-value = 0.1276

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=5)
BMJ
(N=5)
JAMA
(N=10)
JBMR
(N=6)
JCEM
(N=5)
Other
(N=12)
Overall
(N=112)
no_rand
Mean (SD) 4040 (2660) 1360 (0) 2160 (397) 2190 (1180) 1960 (0) 1480 (2020) 2120 (1820) 3240 (2450)
Median [Q1, Q3] 4090 [1470, 7180] 1360 [1360, 1360] 2300 [1770, 2300] 1640 [1630, 1650] 1960 [1960, 1960] 578 [578, 578] 1470 [874, 2510] 1980 [1360, 4430]
Median [min, max] 4090 [450, 7870] 1360 [1360, 1360] 2300 [1770, 2690] 1640 [1630, 4430] 1960 [1960, 1960] 578 [578, 5090] 1470 [704, 5090] 1980 [450, 7870]
active_sample
Mean (SD) 3500 (2430) 1080 (48.9) 2160 (397) 1950 (1230) 1950 (0) 1350 (2000) 1700 (1740) 2820 (2230)
Median [Q1, Q3] 3400 [1350, 6430] 1050 [1050, 1100] 2300 [1770, 2300] 1390 [1290, 1580] 1950 [1950, 1950] 451 [451, 476] 845 [588, 1770] 1860 [1130, 4020]
Median [min, max] 3400 [339, 7810] 1050 [1050, 1160] 2300 [1770, 2690] 1390 [1270, 4430] 1950 [1950, 1950] 451 [451, 4930] 845 [544, 4940] 1860 [339, 7810]
n_event
Mean (SD) 168 (170) 70.0 (36.2) 352 (167) 108 (112) 81.5 (23.1) 122 (195) 278 (279) 172 (181)
Median [Q1, Q3] 103 [48.0, 231] 91.0 [53.0, 92.0] 315 [262, 475] 70.5 [47.5, 112] 70.5 [64.5, 101] 35.0 [34.0, 48.0] 111 [69.5, 571] 95.5 [52.5, 227]
Median [min, max] 103 [10.0, 764] 91.0 [14.0, 100] 315 [147, 563] 70.5 [34.0, 409] 70.5 [63.0, 112] 35.0 [21.0, 471] 111 [44.0, 696] 95.5 [10.0, 764]
FI_final
Mean (SD) 21.3 (29.0) 9.40 (6.80) 15.6 (8.44) 8.20 (4.47) 8.50 (4.68) 4.80 (4.76) 16.6 (30.9) 17.4 (25.5)
Median [Q1, Q3] 10.0 [5.00, 26.0] 10.0 [3.00, 15.0] 16.0 [11.0, 22.0] 10.0 [4.75, 11.0] 7.50 [4.50, 12.0] 4.00 [2.00, 4.00] 4.50 [2.00, 14.0] 9.00 [4.00, 21.3]
Median [min, max] 10.0 [1.00, 171] 10.0 [2.00, 17.0] 16.0 [4.00, 25.0] 10.0 [1.00, 13.0] 7.50 [4.00, 15.0] 4.00 [1.00, 13.0] 4.50 [1.00, 111] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00700 (0.00778) 0.00882 (0.00654) 0.00760 (0.00430) 0.00504 (0.00332) 0.00435 (0.00240) 0.0101 (0.0110) 0.0153 (0.0275) 0.00782 (0.0113)
Median [Q1, Q3] 0.00391 [0.00222, 0.00748] 0.00908 [0.00259, 0.0143] 0.00695 [0.00623, 0.0109] 0.00513 [0.00197, 0.00793] 0.00384 [0.00231, 0.00615] 0.00840 [0.00443, 0.00887] 0.00440 [0.00278, 0.0113] 0.00480 [0.00219, 0.00852]
Median [min, max] 0.00391 [0.000151, 0.0361] 0.00908 [0.00191, 0.0162] 0.00695 [0.00149, 0.0125] 0.00513 [0.000615, 0.00928] 0.00384 [0.00205, 0.00768] 0.00840 [0.000203, 0.0288] 0.00440 [0.000608, 0.0966] 0.00480 [0.000151, 0.0966]
as.factor(missing_fi)
0 6 (8.7%) 2 (40.0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 8 (7.1%)
1 45 (65.2%) 3 (60.0%) 1 (20.0%) 8 (80.0%) 0 (0%) 1 (20.0%) 6 (50.0%) 64 (57.1%)
Missing 18 (26.1%) 0 (0%) 4 (80.0%) 2 (20.0%) 6 (100%) 4 (80.0%) 6 (50.0%) 40 (35.7%)
kruskal.test(FI_final ~ journal_code2, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by journal_code2
## Kruskal-Wallis chi-squared = 8.2654, df = 6, p-value = 0.2193
kruskal.test(FQ_final ~ journal_code2, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by journal_code2
## Kruskal-Wallis chi-squared = 2.733, df = 6, p-value = 0.8415

Box plots

p1 = ggplot(data = ori_st, 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.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=9)
Men
(N=9)
Women
(N=94)
Overall
(N=112)
no_rand
Mean (SD) 1180 (874) 1320 (142) 3630 (2490) 3240 (2450)
Median [Q1, Q3] 578 [578, 2130] 1200 [1200, 1470] 2150 [1630, 5090] 1980 [1360, 4430]
Median [min, max] 578 [450, 2690] 1200 [1200, 1470] 2150 [704, 7870] 1980 [450, 7870]
active_sample
Mean (SD) 739 (750) 1240 (132) 3180 (2260) 2820 (2230)
Median [Q1, Q3] 451 [451, 479] 1130 [1130, 1350] 1950 [1280, 4940] 1860 [1130, 4020]
Median [min, max] 451 [339, 2690] 1130 [1130, 1430] 1950 [544, 7810] 1860 [339, 7810]
n_event
Mean (SD) 73.0 (69.9) 26.2 (9.56) 195 (188) 172 (181)
Median [Q1, Q3] 44.0 [35.0, 60.0] 23.0 [21.0, 36.0] 107 [69.0, 260] 95.5 [52.5, 227]
Median [min, max] 44.0 [21.0, 231] 23.0 [13.0, 39.0] 107 [10.0, 764] 95.5 [10.0, 764]
FI_final
Mean (SD) 4.22 (3.80) 3.11 (1.62) 20.0 (27.0) 17.4 (25.5)
Median [Q1, Q3] 4.00 [2.00, 4.00] 3.00 [2.00, 4.00] 11.5 [5.00, 23.8] 9.00 [4.00, 21.3]
Median [min, max] 4.00 [1.00, 13.0] 3.00 [1.00, 6.00] 11.5 [1.00, 171] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00842 (0.00876) 0.00252 (0.00139) 0.00827 (0.0119) 0.00782 (0.0113)
Median [Q1, Q3] 0.00514 [0.00295, 0.00887] 0.00222 [0.00177, 0.00296] 0.00523 [0.00237, 0.00908] 0.00480 [0.00219, 0.00852]
Median [min, max] 0.00514 [0.00108, 0.0288] 0.00222 [0.000887, 0.00532] 0.00523 [0.000151, 0.0966] 0.00480 [0.000151, 0.0966]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 8 (8.5%) 8 (7.1%)
1 4 (44.4%) 9 (100%) 51 (54.3%) 64 (57.1%)
Missing 5 (55.6%) 0 (0%) 35 (37.2%) 40 (35.7%)
kruskal.test(FI_final ~ sex, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by sex
## Kruskal-Wallis chi-squared = 19.906, df = 2, p-value = 4.759e-05
kruskal.test(FQ_final ~ sex, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by sex
## Kruskal-Wallis chi-squared = 5.6754, df = 2, p-value = 0.05856

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=23)
Placebo
(N=89)
Overall
(N=112)
no_rand
Mean (SD) 3070 (1300) 3290 (2670) 3240 (2450)
Median [Q1, Q3] 4090 [1640, 4090] 1960 [1200, 7180] 1980 [1360, 4430]
Median [min, max] 4090 [1360, 4090] 1960 [450, 7870] 1980 [450, 7870]
active_sample
Mean (SD) 2650 (1210) 2870 (2430) 2820 (2230)
Median [Q1, Q3] 3400 [1270, 3650] 1770 [930, 5680] 1860 [1130, 4020]
Median [min, max] 3400 [1050, 3980] 1770 [339, 7810] 1860 [339, 7810]
n_event
Mean (SD) 190 (165) 167 (186) 172 (181)
Median [Q1, Q3] 140 [69.0, 289] 85.0 [48.0, 204] 95.5 [52.5, 227]
Median [min, max] 140 [14.0, 658] 85.0 [10.0, 764] 95.5 [10.0, 764]
FI_final
Mean (SD) 16.4 (16.3) 17.6 (27.5) 17.4 (25.5)
Median [Q1, Q3] 10.0 [5.00, 21.5] 8.00 [4.00, 21.0] 9.00 [4.00, 21.3]
Median [min, max] 10.0 [2.00, 65.0] 8.00 [1.00, 171] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.00658 (0.00507) 0.00814 (0.0124) 0.00782 (0.0113)
Median [Q1, Q3] 0.00711 [0.00232, 0.00918] 0.00461 [0.00222, 0.00828] 0.00480 [0.00219, 0.00852]
Median [min, max] 0.00711 [0.000554, 0.0169] 0.00461 [0.000151, 0.0966] 0.00480 [0.000151, 0.0966]
as.factor(missing_fi)
0 3 (13.0%) 5 (5.6%) 8 (7.1%)
1 20 (87.0%) 44 (49.4%) 64 (57.1%)
Missing 0 (0%) 40 (44.9%) 40 (35.7%)
kruskal.test(FI_final ~ placebo, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by placebo
## Kruskal-Wallis chi-squared = 0.86592, df = 1, p-value = 0.3521
kruskal.test(FQ_final ~ placebo, data = ori_st)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by placebo
## Kruskal-Wallis chi-squared = 0.17754, df = 1, p-value = 0.6735

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=24)
Secondary endpoint
(N=88)
Overall
(N=112)
no_rand
Mean (SD) 3300 (2520) 3230 (2450) 3240 (2450)
Median [Q1, Q3] 1980 [1560, 4600] 1980 [1360, 4180] 1980 [1360, 4430]
Median [min, max] 1980 [578, 7870] 1980 [450, 7870] 1980 [450, 7870]
active_sample
Mean (SD) 2830 (2290) 2820 (2230) 2820 (2230)
Median [Q1, Q3] 1860 [1110, 4330] 1860 [1130, 3870] 1860 [1130, 4020]
Median [min, max] 1860 [451, 7390] 1860 [339, 7810] 1860 [339, 7810]
n_event
Mean (SD) 185 (165) 168 (187) 172 (181)
Median [Q1, Q3] 111 [81.0, 251] 83.5 [47.5, 209] 95.5 [52.5, 227]
Median [min, max] 111 [34.0, 671] 83.5 [10.0, 764] 95.5 [10.0, 764]
FI_final
Mean (SD) 30.3 (40.4) 13.9 (18.4) 17.4 (25.5)
Median [Q1, Q3] 15.0 [11.8, 27.8] 7.00 [3.00, 17.0] 9.00 [4.00, 21.3]
Median [min, max] 15.0 [1.00, 171] 7.00 [1.00, 111] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.0137 (0.0114) 0.00621 (0.0108) 0.00782 (0.0113)
Median [Q1, Q3] 0.00864 [0.00584, 0.0203] 0.00343 [0.00205, 0.00717] 0.00480 [0.00219, 0.00852]
Median [min, max] 0.00864 [0.000567, 0.0368] 0.00343 [0.000151, 0.0966] 0.00480 [0.000151, 0.0966]
as.factor(missing_fi)
0 2 (8.3%) 6 (6.8%) 8 (7.1%)
1 13 (54.2%) 51 (58.0%) 64 (57.1%)
Missing 9 (37.5%) 31 (35.2%) 40 (35.7%)
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=24              N=88                  
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
## no_rand       1982 [1561;4597]  1982 [1360;4178]    0.817   
## active_sample 1856 [1108;4334]  1861 [1127;3872]    0.938   
## n_event        111 [81.0;251]   83.5 [47.5;209]     0.202   
## FI_final      15.0 [11.8;27.8]  7.00 [3.00;17.0]    0.001   
## FQ_final      0.01 [0.01;0.02]  0.00 [0.00;0.01]   <0.001   
## missing_fi:                                         0.669   
##     0            2 (13.3%)         6 (10.5%)                
##     1            13 (86.7%)        51 (89.5%)               
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
# 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=24)
no_rand
Mean (SD) 3300 (2520)
Median [Q1, Q3] 1980 [1560, 4600]
Median [min, max] 1980 [578, 7870]
active_sample
Mean (SD) 2830 (2290)
Median [Q1, Q3] 1860 [1110, 4330]
Median [min, max] 1860 [451, 7390]
n_event
Mean (SD) 185 (165)
Median [Q1, Q3] 111 [81.0, 251]
Median [min, max] 111 [34.0, 671]
FI_final
Mean (SD) 30.3 (40.4)
Median [Q1, Q3] 15.0 [11.8, 27.8]
Median [min, max] 15.0 [1.00, 171]
FQ_final
Mean (SD) 0.0137 (0.0114)
Median [Q1, Q3] 0.00864 [0.00584, 0.0203]
Median [min, max] 0.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 2 (8.3%)
1 13 (54.2%)
Missing 9 (37.5%)

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=18)
Hip
(N=2)
Overall
(N=24)
no_rand
Mean (SD) 3110 (1390) NA NA 3060 (2640) 5500 (3160) 3300 (2520)
Median [Q1, Q3] 3110 [2620, 3600] 2000 [2000, 2000] 5090 [5090, 5090] 1650 [1240, 4350] 5500 [4390, 6620] 1980 [1560, 4600]
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 2700 (2350) 4110 (3310) 2830 (2290)
Median [Q1, Q3] 2060 [1270, 2850] 1950 [1950, 1950] 4940 [4940, 4940] 1440 [1070, 4020] 4110 [2940, 5280] 1860 [1110, 4330]
Median [min, max] 2060 [479, 3640] 1950 [1950, 1950] 4940 [4940, 4940] 1440 [451, 7390] 4110 [1770, 6450] 1860 [451, 7390]
n_event
Mean (SD) 348 (165) NA NA 142 (119) 99.0 (58.0) 185 (165)
Median [Q1, Q3] 348 [289, 406] 312 [312, 312] 671 [671, 671] 103 [77.0, 146] 99.0 [78.5, 120] 111 [81.0, 251]
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 35.8 (45.1) 6.50 (7.78) 30.3 (40.4)
Median [Q1, Q3] 16.5 [11.8, 21.3] 33.0 [33.0, 33.0] 3.00 [3.00, 3.00] 17.5 [13.0, 36.3] 6.50 [3.75, 9.25] 15.0 [11.8, 27.8]
Median [min, max] 16.5 [7.00, 26.0] 33.0 [33.0, 33.0] 3.00 [3.00, 3.00] 17.5 [6.00, 171] 6.50 [1.00, 12.0] 15.0 [1.00, 171]
FQ_final
Mean (SD) 0.0109 (0.00529) NA NA 0.0160 (0.0117) 0.00121 (0.000916) 0.0137 (0.0114)
Median [Q1, Q3] 0.0109 [0.00901, 0.0127] 0.0169 [0.0169, 0.0169] 0.000608 [0.000608, 0.000608] 0.0104 [0.00692, 0.0277] 0.00121 [0.000890, 0.00154] 0.00864 [0.00584, 0.0203]
Median [min, max] 0.0109 [0.00714, 0.0146] 0.0169 [0.0169, 0.0169] 0.000608 [0.000608, 0.000608] 0.0104 [0.00314, 0.0368] 0.00121 [0.000567, 0.00186] 0.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 1 (100%) 0 (0%) 1 (5.6%) 0 (0%) 2 (8.3%)
1 2 (100%) 0 (0%) 0 (0%) 9 (50.0%) 2 (100%) 13 (54.2%)
Missing 0 (0%) 0 (0%) 1 (100%) 8 (44.4%) 0 (0%) 9 (37.5%)
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=18)
Hip
(N=2)
Overall
(N=24)
no_rand
Mean (SD) 3110 (1390) NA NA 3060 (2640) 5500 (3160) 3300 (2520)
Median [Q1, Q3] 3110 [2620, 3600] 2000 [2000, 2000] 5090 [5090, 5090] 1650 [1240, 4350] 5500 [4390, 6620] 1980 [1560, 4600]
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 2700 (2350) 4110 (3310) 2830 (2290)
Median [Q1, Q3] 2060 [1270, 2850] 1950 [1950, 1950] 4940 [4940, 4940] 1440 [1070, 4020] 4110 [2940, 5280] 1860 [1110, 4330]
Median [min, max] 2060 [479, 3640] 1950 [1950, 1950] 4940 [4940, 4940] 1440 [451, 7390] 4110 [1770, 6450] 1860 [451, 7390]
n_event
Mean (SD) 348 (165) NA NA 142 (119) 99.0 (58.0) 185 (165)
Median [Q1, Q3] 348 [289, 406] 312 [312, 312] 671 [671, 671] 103 [77.0, 146] 99.0 [78.5, 120] 111 [81.0, 251]
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 35.8 (45.1) 6.50 (7.78) 30.3 (40.4)
Median [Q1, Q3] 16.5 [11.8, 21.3] 33.0 [33.0, 33.0] 3.00 [3.00, 3.00] 17.5 [13.0, 36.3] 6.50 [3.75, 9.25] 15.0 [11.8, 27.8]
Median [min, max] 16.5 [7.00, 26.0] 33.0 [33.0, 33.0] 3.00 [3.00, 3.00] 17.5 [6.00, 171] 6.50 [1.00, 12.0] 15.0 [1.00, 171]
FQ_final
Mean (SD) 0.0109 (0.00529) NA NA 0.0160 (0.0117) 0.00121 (0.000916) 0.0137 (0.0114)
Median [Q1, Q3] 0.0109 [0.00901, 0.0127] 0.0169 [0.0169, 0.0169] 0.000608 [0.000608, 0.000608] 0.0104 [0.00692, 0.0277] 0.00121 [0.000890, 0.00154] 0.00864 [0.00584, 0.0203]
Median [min, max] 0.0109 [0.00714, 0.0146] 0.0169 [0.0169, 0.0169] 0.000608 [0.000608, 0.000608] 0.0104 [0.00314, 0.0368] 0.00121 [0.000567, 0.00186] 0.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 1 (100%) 0 (0%) 1 (5.6%) 0 (0%) 2 (8.3%)
1 2 (100%) 0 (0%) 0 (0%) 9 (50.0%) 2 (100%) 13 (54.2%)
Missing 0 (0%) 0 (0%) 1 (100%) 8 (44.4%) 0 (0%) 9 (37.5%)
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.705, df = 4, p-value = 0.1523
kruskal.test(FQ_final ~ fx_code2, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by fx_code2
## Kruskal-Wallis chi-squared = 7.83, df = 4, p-value = 0.09801

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")
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")

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=1)
Ibandronate
(N=2)
Risedronate
(N=1)
Minodronate
(N=1)
Zoledronate
(N=5)
Teriparatide
(N=5)
Abaloparatide
(N=1)
Romosozumab
(N=4)
Denosumab
(N=1)
Strontium_ranelate
(N=2)
Calcium_VitD
(N=1)
Overall
(N=24)
no_rand
Mean (SD) NA 1960 (0) NA NA 4160 (3280) 1150 (393) NA 5640 (1780) NA 3370 (2430) NA 3300 (2520)
Median [Q1, Q3] 4430 [4430, 4430] 1960 [1960, 1960] 1630 [1630, 1630] 704 [704, 704] 2130 [2000, 7740] 1100 [1090, 1360] 1650 [1650, 1650] 5640 [4090, 7180] 7870 [7870, 7870] 3370 [2510, 4230] 3270 [3270, 3270] 1980 [1560, 4600]
Median [min, max] 4430 [4430, 4430] 1960 [1960, 1960] 1630 [1630, 1630] 704 [704, 704] 2130 [1200, 7740] 1100 [578, 1640] 1650 [1650, 1650] 5640 [4090, 7180] 7870 [7870, 7870] 3370 [1650, 5090] 3270 [3270, 3270] 1980 [578, 7870]
active_sample
Mean (SD) NA 1950 (0) NA NA 3130 (2730) 940 (352) NA 5150 (1730) NA 3190 (2470) NA 2830 (2290)
Median [Q1, Q3] 4130 [4130, 4130] 1950 [1950, 1950] 1370 [1370, 1370] 544 [544, 544] 1950 [1130, 5680] 892 [882, 1050] 1400 [1400, 1400] 5150 [3660, 6650] 7390 [7390, 7390] 3190 [2320, 4060] 1770 [1770, 1770] 1860 [1110, 4330]
Median [min, max] 4130 [4130, 4130] 1950 [1950, 1950] 1370 [1370, 1370] 544 [544, 544] 1950 [479, 6450] 892 [451, 1430] 1400 [1400, 1400] 5150 [3640, 6650] 7390 [7390, 7390] 3190 [1440, 4940] 1770 [1770, 1770] 1860 [451, 7390]
n_event
Mean (SD) NA 111 (1.41) NA NA 224 (143) 69.0 (25.2) NA 216 (177) NA 529 (201) NA 185 (165)
Median [Q1, Q3] 121 [121, 121] 111 [111, 112] 154 [154, 154] 100 [100, 100] 231 [140, 312] 83.0 [48.0, 86.0] 34.0 [34.0, 34.0] 163 [97.5, 282] 350 [350, 350] 529 [458, 600] 58.0 [58.0, 58.0] 111 [81.0, 251]
Median [min, max] 121 [121, 121] 111 [110, 112] 154 [154, 154] 100 [100, 100] 231 [37.0, 402] 83.0 [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) NA 14.0 (1.41) NA NA 45.8 (70.8) 17.4 (6.23) NA 33.0 (9.31) NA 27.5 (34.6) NA 30.3 (40.4)
Median [Q1, Q3] 13.0 [13.0, 13.0] 14.0 [13.5, 14.5] 11.0 [11.0, 11.0] 20.0 [20.0, 20.0] 12.0 [7.00, 33.0] 15.0 [13.0, 23.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] 15.0 [11.8, 27.8]
Median [min, max] 13.0 [13.0, 13.0] 14.0 [13.0, 15.0] 11.0 [11.0, 11.0] 20.0 [20.0, 20.0] 12.0 [6.00, 171] 15.0 [11.0, 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] 15.0 [1.00, 171]
FQ_final
Mean (SD) NA 0.00717 (0.000724) NA NA 0.0138 (0.0111) 0.0210 (0.00948) NA 0.00706 (0.00329) NA 0.0183 (0.0251) NA 0.0137 (0.0114)
Median [Q1, Q3] 0.00314 [0.00314, 0.00314] 0.00717 [0.00692, 0.00743] 0.00801 [0.00801, 0.00801] 0.0368 [0.0368, 0.0368] 0.0146 [0.00532, 0.0169] 0.0258 [0.0143, 0.0283] 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.00864 [0.00584, 0.0203]
Median [min, max] 0.00314 [0.00314, 0.00314] 0.00717 [0.00666, 0.00768] 0.00801 [0.00801, 0.00801] 0.0368 [0.0368, 0.0368] 0.0146 [0.00186, 0.0301] 0.0258 [0.00770, 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.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (20.0%) 1 (20.0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2 (8.3%)
1 0 (0%) 0 (0%) 1 (100%) 1 (100%) 4 (80.0%) 1 (20.0%) 1 (100%) 4 (100%) 0 (0%) 0 (0%) 1 (100%) 13 (54.2%)
Missing 1 (100%) 2 (100%) 0 (0%) 0 (0%) 0 (0%) 3 (60.0%) 0 (0%) 0 (0%) 1 (100%) 2 (100%) 0 (0%) 9 (37.5%)
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=10)
PTH analog
(N=6)
Romosozumab
(N=4)
Denosumab
(N=1)
Strontium_ranelate
(N=2)
Calcium_VitD
(N=1)
Overall
(N=24)
no_rand
Mean (SD) 3150 (2600) 1230 (405) 5640 (1780) NA 3370 (2430) NA 3300 (2520)
Median [Q1, Q3] 1980 [1710, 3860] 1230 [1090, 1570] 5640 [4090, 7180] 7870 [7870, 7870] 3370 [2510, 4230] 3270 [3270, 3270] 1980 [1560, 4600]
Median [min, max] 1980 [704, 7740] 1230 [578, 1650] 5640 [4090, 7180] 7870 [7870, 7870] 3370 [1650, 5090] 3270 [3270, 3270] 1980 [578, 7870]
active_sample
Mean (SD) 2560 (2110) 1020 (366) 5150 (1730) NA 3190 (2470) NA 2830 (2290)
Median [Q1, Q3] 1950 [1190, 3590] 971 [885, 1310] 5150 [3660, 6650] 7390 [7390, 7390] 3190 [2320, 4060] 1770 [1770, 1770] 1860 [1110, 4330]
Median [min, max] 1950 [479, 6450] 971 [451, 1430] 5150 [3640, 6650] 7390 [7390, 7390] 3190 [1440, 4940] 1770 [1770, 1770] 1860 [451, 7390]
n_event
Mean (SD) 172 (111) 63.2 (26.7) 216 (177) NA 529 (201) NA 185 (165)
Median [Q1, Q3] 131 [111, 212] 65.5 [39.0, 85.3] 163 [97.5, 282] 350 [350, 350] 529 [458, 600] 58.0 [58.0, 58.0] 111 [81.0, 251]
Median [min, max] 131 [37.0, 402] 65.5 [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) 30.1 (50.1) 16.7 (5.85) 33.0 (9.31) NA 27.5 (34.6) NA 30.3 (40.4)
Median [Q1, Q3] 13.0 [11.3, 18.8] 14.0 [13.0, 21.0] 33.0 [25.5, 40.5] 137 [137, 137] 27.5 [15.3, 39.8] 1.00 [1.00, 1.00] 15.0 [11.8, 27.8]
Median [min, max] 13.0 [6.00, 171] 14.0 [11.0, 25.0] 33.0 [24.0, 42.0] 137 [137, 137] 27.5 [3.00, 52.0] 1.00 [1.00, 1.00] 15.0 [1.00, 171]
FQ_final
Mean (SD) 0.0131 (0.0118) 0.0190 (0.00974) 0.00706 (0.00329) NA 0.0183 (0.0251) NA 0.0137 (0.0114)
Median [Q1, Q3] 0.00785 [0.00566, 0.0164] 0.0200 [0.0105, 0.0277] 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.00864 [0.00584, 0.0203]
Median [min, max] 0.00785 [0.00186, 0.0368] 0.0200 [0.00770, 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.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 1 (10.0%) 1 (16.7%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2 (8.3%)
1 6 (60.0%) 2 (33.3%) 4 (100%) 0 (0%) 0 (0%) 1 (100%) 13 (54.2%)
Missing 3 (30.0%) 3 (50.0%) 0 (0%) 1 (100%) 2 (100%) 0 (0%) 9 (37.5%)
kruskal.test(FI_final ~ interv_code2, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by interv_code2
## Kruskal-Wallis chi-squared = 8.7285, df = 5, p-value = 0.1204
kruskal.test(FQ_final ~ interv_code2, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by interv_code2
## Kruskal-Wallis chi-squared = 6.313, df = 5, p-value = 0.2769

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")
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 = "Pharmacological interventions", y = "Fragility quotine")

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=4)
4
(N=8)
5
(N=8)
6
(N=1)
7
(N=1)
8
(N=1)
Overall
(N=24)
no_rand
Mean (SD) NA 1780 (1110) 2600 (2300) 4080 (3070) NA NA NA 3300 (2520)
Median [Q1, Q3] 7180 [7180, 7180] 1640 [1370, 2050] 1280 [1090, 4090] 2050 [1890, 7740] 4430 [4430, 4430] 5090 [5090, 5090] 2000 [2000, 2000] 1980 [1560, 4600]
Median [min, max] 7180 [7180, 7180] 1640 [578, 3270] 1280 [704, 7180] 2050 [1630, 7870] 4430 [4430, 4430] 5090 [5090, 5090] 2000 [2000, 2000] 1980 [578, 7870]
active_sample
Mean (SD) NA 1260 (565) 2310 (2160) 3340 (2700) NA NA NA 2830 (2290)
Median [Q1, Q3] 6640 [6640, 6640] 1410 [1160, 1510] 1090 [890, 3650] 1950 [1430, 5870] 4130 [4130, 4130] 4940 [4940, 4940] 1950 [1950, 1950] 1860 [1110, 4330]
Median [min, max] 6640 [6640, 6640] 1410 [451, 1770] 1090 [544, 6650] 1950 [479, 7390] 4130 [4130, 4130] 4940 [4940, 4940] 1950 [1950, 1950] 1860 [451, 7390]
n_event
Mean (SD) NA 44.0 (11.2) 149 (138) 236 (126) NA NA NA 185 (165)
Median [Q1, Q3] 75.0 [75.0, 75.0] 42.0 [35.5, 50.5] 96.0 [85.3, 134] 193 [133, 359] 121 [121, 121] 671 [671, 671] 312 [312, 312] 111 [81.0, 251]
Median [min, max] 75.0 [75.0, 75.0] 42.0 [34.0, 58.0] 96.0 [37.0, 464] 193 [110, 402] 121 [121, 121] 671 [671, 671] 312 [312, 312] 111 [34.0, 671]
FI_final
Mean (SD) NA 9.50 (5.74) 24.6 (12.0) 52.3 (65.0) NA NA NA 30.3 (40.4)
Median [Q1, Q3] 24.0 [24.0, 24.0] 12.0 [8.50, 13.0] 24.0 [18.8, 29.5] 14.0 [11.8, 73.3] 13.0 [13.0, 13.0] 3.00 [3.00, 3.00] 33.0 [33.0, 33.0] 15.0 [11.8, 27.8]
Median [min, max] 24.0 [24.0, 24.0] 12.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] 15.0 [1.00, 171]
FQ_final
Mean (SD) NA 0.0116 (0.0121) 0.0169 (0.0119) 0.0154 (0.0121) NA NA NA 0.0137 (0.0114)
Median [Q1, Q3] 0.00361 [0.00361, 0.00361] 0.00849 [0.00592, 0.0142] 0.0129 [0.00686, 0.0264] 0.0113 [0.00743, 0.0214] 0.00314 [0.00314, 0.00314] 0.000608 [0.000608, 0.000608] 0.0169 [0.0169, 0.0169] 0.00864 [0.00584, 0.0203]
Median [min, max] 0.00361 [0.00361, 0.00361] 0.00849 [0.000567, 0.0288] 0.0129 [0.00532, 0.0368] 0.0113 [0.00186, 0.0361] 0.00314 [0.00314, 0.00314] 0.000608 [0.000608, 0.000608] 0.0169 [0.0169, 0.0169] 0.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 1 (12.5%) 0 (0%) 0 (0%) 0 (0%) 1 (100%) 2 (8.3%)
1 1 (100%) 3 (75.0%) 5 (62.5%) 4 (50.0%) 0 (0%) 0 (0%) 0 (0%) 13 (54.2%)
Missing 0 (0%) 1 (25.0%) 2 (25.0%) 4 (50.0%) 1 (100%) 1 (100%) 0 (0%) 9 (37.5%)
kruskal.test(FI_final ~ timing, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by timing
## Kruskal-Wallis chi-squared = 7.7077, df = 6, p-value = 0.2603
kruskal.test(FQ_final ~ timing, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by timing
## Kruskal-Wallis chi-squared = 6.11, df = 6, p-value = 0.411

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=1)
JAMA
(N=4)
JBMR
(N=2)
JCEM
(N=1)
Other
(N=2)
Overall
(N=24)
no_rand
Mean (SD) 4170 (2790) NA 2340 (1400) 1960 (0) NA 2900 (3100) 3300 (2520)
Median [Q1, Q3] 3680 [1740, 7180] 1360 [1360, 1360] 1640 [1640, 2340] 1960 [1960, 1960] 578 [578, 578] 2900 [1800, 3990] 1980 [1560, 4600]
Median [min, max] 3680 [1090, 7870] 1360 [1360, 1360] 1640 [1630, 4430] 1960 [1960, 1960] 578 [578, 578] 2900 [704, 5090] 1980 [578, 7870]
active_sample
Mean (SD) 3470 (2580) NA 2080 (1370) 1950 (0) NA 2740 (3100) 2830 (2290)
Median [Q1, Q3] 2800 [1210, 6250] 1050 [1050, 1050] 1410 [1390, 2100] 1950 [1950, 1950] 451 [451, 451] 2740 [1640, 3840] 1860 [1110, 4330]
Median [min, max] 2800 [479, 7390] 1050 [1050, 1050] 1410 [1370, 4130] 1950 [1950, 1950] 451 [451, 451] 2740 [544, 4940] 1860 [451, 7390]
n_event
Mean (SD) 211 (147) NA 86.3 (60.7) 111 (1.41) NA 386 (404) 185 (165)
Median [Q1, Q3] 181 [83.8, 341] 92.0 [92.0, 92.0] 78.5 [35.5, 129] 111 [111, 112] 48.0 [48.0, 48.0] 386 [243, 528] 111 [81.0, 251]
Median [min, max] 181 [37.0, 464] 92.0 [92.0, 92.0] 78.5 [34.0, 154] 111 [110, 112] 48.0 [48.0, 48.0] 386 [100, 671] 111 [34.0, 671]
FI_final
Mean (SD) 42.8 (49.7) NA 12.0 (1.15) 14.0 (1.41) NA 11.5 (12.0) 30.3 (40.4)
Median [Q1, Q3] 25.5 [14.8, 41.5] 15.0 [15.0, 15.0] 12.0 [11.0, 13.0] 14.0 [13.5, 14.5] 13.0 [13.0, 13.0] 11.5 [7.25, 15.8] 15.0 [11.8, 27.8]
Median [min, max] 25.5 [1.00, 171] 15.0 [15.0, 15.0] 12.0 [11.0, 13.0] 14.0 [13.0, 15.0] 13.0 [13.0, 13.0] 11.5 [3.00, 20.0] 15.0 [1.00, 171]
FQ_final
Mean (SD) 0.0147 (0.0116) NA 0.00703 (0.00268) 0.00717 (0.000724) NA 0.0187 (0.0256) 0.0137 (0.0114)
Median [Q1, Q3] 0.0130 [0.00550, 0.0240] 0.0143 [0.0143, 0.0143] 0.00785 [0.00656, 0.00832] 0.00717 [0.00692, 0.00743] 0.0288 [0.0288, 0.0288] 0.0187 [0.00965, 0.0277] 0.00864 [0.00584, 0.0203]
Median [min, max] 0.0130 [0.000567, 0.0361] 0.0143 [0.0143, 0.0143] 0.00785 [0.00314, 0.00928] 0.00717 [0.00666, 0.00768] 0.0288 [0.0288, 0.0288] 0.0187 [0.000608, 0.0368] 0.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 1 (7.1%) 1 (100%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 2 (8.3%)
1 9 (64.3%) 0 (0%) 3 (75.0%) 0 (0%) 0 (0%) 1 (50.0%) 13 (54.2%)
Missing 4 (28.6%) 0 (0%) 1 (25.0%) 2 (100%) 1 (100%) 1 (50.0%) 9 (37.5%)
kruskal.test(FI_final ~ journal_code2, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by journal_code2
## Kruskal-Wallis chi-squared = 4.8553, df = 5, p-value = 0.4338
kruskal.test(FQ_final ~ journal_code2, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by journal_code2
## Kruskal-Wallis chi-squared = 2.6057, df = 5, p-value = 0.7605

Box plots

p1 = ggplot(data =  fx_prim2, 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.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=2)
Men
(N=1)
Women
(N=21)
Overall
(N=24)
no_rand
Mean (SD) 1350 (1100) NA 3590 (2560) 3300 (2520)
Median [Q1, Q3] 1350 [965, 1740] 1200 [1200, 1200] 2000 [1640, 5090] 1980 [1560, 4600]
Median [min, max] 1350 [578, 2130] 1200 [1200, 1200] 2000 [704, 7870] 1980 [578, 7870]
active_sample
Mean (SD) 465 (19.8) NA 3130 (2280) 2830 (2290)
Median [Q1, Q3] 465 [458, 472] 1130 [1130, 1130] 1950 [1400, 4940] 1860 [1110, 4330]
Median [min, max] 465 [451, 479] 1130 [1130, 1130] 1950 [544, 7390] 1860 [451, 7390]
n_event
Mean (SD) 140 (129) NA 196 (170) 185 (165)
Median [Q1, Q3] 140 [93.8, 185] 37.0 [37.0, 37.0] 112 [86.0, 312] 111 [81.0, 251]
Median [min, max] 140 [48.0, 231] 37.0 [37.0, 37.0] 112 [34.0, 671] 111 [34.0, 671]
FI_final
Mean (SD) 10.0 (4.24) NA 33.3 (42.4) 30.3 (40.4)
Median [Q1, Q3] 10.0 [8.50, 11.5] 6.00 [6.00, 6.00] 20.0 [13.0, 33.0] 15.0 [11.8, 27.8]
Median [min, max] 10.0 [7.00, 13.0] 6.00 [6.00, 6.00] 20.0 [1.00, 171] 15.0 [1.00, 171]
FQ_final
Mean (SD) 0.0217 (0.0100) NA 0.0134 (0.0116) 0.0137 (0.0114)
Median [Q1, Q3] 0.0217 [0.0182, 0.0253] 0.00532 [0.00532, 0.00532] 0.00801 [0.00601, 0.0185] 0.00864 [0.00584, 0.0203]
Median [min, max] 0.0217 [0.0146, 0.0288] 0.00532 [0.00532, 0.00532] 0.00801 [0.000567, 0.0368] 0.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 2 (9.5%) 2 (8.3%)
1 1 (50.0%) 1 (100%) 11 (52.4%) 13 (54.2%)
Missing 1 (50.0%) 0 (0%) 8 (38.1%) 9 (37.5%)
kruskal.test(FI_final ~ sex, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by sex
## Kruskal-Wallis chi-squared = 3.5661, df = 2, p-value = 0.1681
kruskal.test(FQ_final ~ sex, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by sex
## Kruskal-Wallis chi-squared = 2.3138, df = 2, p-value = 0.3145

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=19)
Overall
(N=24)
no_rand
Mean (SD) 2570 (1400) 3500 (2730) 3300 (2520)
Median [Q1, Q3] 1650 [1640, 4090] 2000 [1410, 6140] 1980 [1560, 4600]
Median [min, max] 1650 [1360, 4090] 2000 [578, 7870] 1980 [578, 7870]
active_sample
Mean (SD) 2240 (1300) 2980 (2490) 2830 (2290)
Median [Q1, Q3] 1430 [1400, 3640] 1950 [1010, 5310] 1860 [1110, 4330]
Median [min, max] 1430 [1050, 3660] 1950 [451, 7390] 1860 [451, 7390]
n_event
Mean (SD) 169 (181) 189 (165) 185 (165)
Median [Q1, Q3] 92.0 [36.0, 221] 112 [84.5, 272] 111 [81.0, 251]
Median [min, max] 92.0 [34.0, 464] 112 [37.0, 671] 111 [34.0, 671]
FI_final
Mean (SD) 21.4 (12.9) 32.6 (45.0) 30.3 (40.4)
Median [Q1, Q3] 15.0 [13.0, 26.0] 15.0 [11.5, 29.0] 15.0 [11.8, 27.8]
Median [min, max] 15.0 [11.0, 42.0] 15.0 [1.00, 171] 15.0 [1.00, 171]
FQ_final
Mean (SD) 0.00998 (0.00294) 0.0147 (0.0126) 0.0137 (0.0114)
Median [Q1, Q3] 0.00928 [0.00770, 0.0115] 0.00801 [0.00447, 0.0271] 0.00864 [0.00584, 0.0203]
Median [min, max] 0.00928 [0.00714, 0.0143] 0.00801 [0.000567, 0.0368] 0.00864 [0.000567, 0.0368]
as.factor(missing_fi)
0 1 (20.0%) 1 (5.3%) 2 (8.3%)
1 4 (80.0%) 9 (47.4%) 13 (54.2%)
Missing 0 (0%) 9 (47.4%) 9 (37.5%)
kruskal.test(FI_final ~ placebo, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by placebo
## Kruskal-Wallis chi-squared = 0.081266, df = 1, p-value = 0.7756
kruskal.test(FQ_final ~ placebo, data = fx_prim2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by placebo
## Kruskal-Wallis chi-squared = 0.0012632, df = 1, p-value = 0.9716

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=37)
Significant
(N=75)
Overall
(N=112)
no_rand
Mean (SD) 4240 (2890) 2750 (2050) 3240 (2450)
Median [Q1, Q3] 4090 [1640, 7180] 1960 [1360, 4090] 1980 [1360, 4430]
Median [min, max] 4090 [578, 7870] 1960 [450, 7870] 1980 [450, 7870]
active_sample
Mean (SD) 3750 (2630) 2370 (1850) 2820 (2230)
Median [Q1, Q3] 3660 [1270, 6640] 1770 [1110, 3480] 1860 [1130, 4020]
Median [min, max] 3660 [451, 7810] 1770 [339, 6670] 1860 [339, 7810]
n_event
Mean (SD) 211 (204) 153 (168) 172 (181)
Median [Q1, Q3] 106 [76.0, 312] 76.0 [44.0, 173] 95.5 [52.5, 227]
Median [min, max] 106 [34.0, 764] 76.0 [10.0, 691] 95.5 [10.0, 764]
FI_final
Mean (SD) 38.5 (35.3) 7.00 (6.23) 17.4 (25.5)
Median [Q1, Q3] 26.0 [17.0, 42.0] 5.00 [2.00, 9.50] 9.00 [4.00, 21.3]
Median [min, max] 26.0 [9.00, 171] 5.00 [1.00, 29.0] 9.00 [1.00, 171]
FQ_final
Mean (SD) 0.0155 (0.0167) 0.00402 (0.00337) 0.00782 (0.0113)
Median [Q1, Q3] 0.00928 [0.00653, 0.0185] 0.00296 [0.00153, 0.00535] 0.00480 [0.00219, 0.00852]
Median [min, max] 0.00928 [0.00230, 0.0966] 0.00296 [0.000151, 0.0146] 0.00480 [0.000151, 0.0966]
as.factor(missing_fi)
0 4 (10.8%) 4 (5.3%) 8 (7.1%)
1 21 (56.8%) 43 (57.3%) 64 (57.1%)
Missing 12 (32.4%) 28 (37.3%) 40 (35.7%)
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=37              N=75                 
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
## no_rand        4093 [1639;7180]  1964 [1360;4093]   0.030   
## active_sample  3659 [1266;6643]  1765 [1114;3479]   0.013   
## n_event         106 [76.0;312]   76.0 [44.0;173]    0.029   
## FI_final       26.0 [17.0;42.0]  5.00 [2.00;9.50]  <0.001   
## FQ_final       0.01 [0.01;0.02]  0.00 [0.00;0.01]  <0.001   
## missing_fi:                                         0.436   
##     0             4 (16.0%)         4 (8.51%)               
##     1             21 (84.0%)        43 (91.5%)              
## ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
# 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=37)
no_rand
Mean (SD) 4240 (2890)
Median [Q1, Q3] 4090 [1640, 7180]
Median [min, max] 4090 [578, 7870]
active_sample
Mean (SD) 3750 (2630)
Median [Q1, Q3] 3660 [1270, 6640]
Median [min, max] 3660 [451, 7810]
n_event
Mean (SD) 211 (204)
Median [Q1, Q3] 106 [76.0, 312]
Median [min, max] 106 [34.0, 764]
FI_final
Mean (SD) 38.5 (35.3)
Median [Q1, Q3] 26.0 [17.0, 42.0]
Median [min, max] 26.0 [9.00, 171]
FQ_final
Mean (SD) 0.0155 (0.0167)
Median [Q1, Q3] 0.00928 [0.00653, 0.0185]
Median [min, max] 0.00928 [0.00230, 0.0966]
as.factor(missing_fi)
0 4 (10.8%)
1 21 (56.8%)
Missing 12 (32.4%)

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=25)
ClinVert_fx
(N=2)
Overall
(N=37)
no_rand
Mean (SD) 7460 (393) 3400 (1210) 2870 (1730) 7370 (321) 3530 (2890) 7800 (93.3) 4240 (2890)
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) 3080 (2620) 7120 (975) 3750 (2630)
Median [Q1, Q3] 6620 [6580, 6660] 3840 [2890, 3910] 2400 [1830, 2970] 6650 [6590, 6660] 1430 [1050, 5680] 7120 [6770, 7460] 3660 [1270, 6640]
Median [min, max] 6620 [6550, 6690] 3840 [1950, 3980] 2400 [1270, 3530] 6650 [6530, 6670] 1430 [451, 7390] 7120 [6430, 7810] 3660 [451, 7810]
n_event
Mean (SD) 505 (366) 431 (197) 200 (220) 358 (281) 152 (156) 112 (12.7) 211 (204)
Median [Q1, Q3] 505 [376, 635] 323 [318, 491] 200 [122, 277] 225 [197, 453] 92.0 [73.0, 128] 112 [108, 117] 106 [76.0, 312]
Median [min, max] 505 [246, 764] 323 [312, 658] 200 [44.0, 355] 225 [168, 680] 92.0 [34.0, 696] 112 [103, 121] 106 [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 (40.8) 40.5 (2.12) 38.5 (35.3)
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.0 [17.0, 40.0] 40.5 [39.8, 41.3] 26.0 [17.0, 42.0]
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.0 [11.0, 171] 40.5 [39.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.00440 (0.00190) 0.0190 (0.0192) 0.00576 (0.00109) 0.0155 (0.0167)
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.0137 [0.00768, 0.0258] 0.00576 [0.00538, 0.00615] 0.00928 [0.00653, 0.0185]
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.0137 [0.00230, 0.0966] 0.00576 [0.00499, 0.00653] 0.00928 [0.00230, 0.0966]
as.factor(missing_fi)
0 0 (0%) 2 (66.7%) 0 (0%) 0 (0%) 2 (8.0%) 0 (0%) 4 (10.8%)
1 2 (100%) 1 (33.3%) 2 (100%) 3 (100%) 12 (48.0%) 1 (50.0%) 21 (56.8%)
Missing 0 (0%) 0 (0%) 0 (0%) 0 (0%) 11 (44.0%) 1 (50.0%) 12 (32.4%)
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=25)
Clinical Vertebrae
(N=2)
Overall
(N=37)
no_rand
Mean (SD) 7460 (393) 3180 (1250) 7370 (321) 3530 (2890) 7800 (93.3) 4240 (2890)
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) 3080 (2620) 7120 (975) 3750 (2630)
Median [Q1, Q3] 6620 [6580, 6660] 3530 [1950, 3840] 6650 [6590, 6660] 1430 [1050, 5680] 7120 [6770, 7460] 3660 [1270, 6640]
Median [min, max] 6620 [6550, 6690] 3530 [1270, 3980] 6650 [6530, 6670] 1430 [451, 7390] 7120 [6430, 7810] 3660 [451, 7810]
n_event
Mean (SD) 505 (366) 338 (218) 358 (281) 152 (156) 112 (12.7) 211 (204)
Median [Q1, Q3] 505 [376, 635] 323 [312, 355] 225 [197, 453] 92.0 [73.0, 128] 112 [108, 117] 106 [76.0, 312]
Median [min, max] 505 [246, 764] 323 [44.0, 658] 225 [168, 680] 92.0 [34.0, 696] 112 [103, 121] 106 [34.0, 764]
FI_final
Mean (SD) 62.5 (37.5) 32.6 (20.4) 29.0 (12.2) 38.7 (40.8) 40.5 (2.12) 38.5 (35.3)
Median [Q1, Q3] 62.5 [49.3, 75.8] 30.0 [26.0, 33.0] 23.0 [22.0, 33.0] 23.0 [17.0, 40.0] 40.5 [39.8, 41.3] 26.0 [17.0, 42.0]
Median [min, max] 62.5 [36.0, 89.0] 30.0 [9.00, 65.0] 23.0 [21.0, 43.0] 23.0 [11.0, 171] 40.5 [39.0, 42.0] 26.0 [9.00, 171]
FQ_final
Mean (SD) 0.00949 (0.00580) 0.0112 (0.00526) 0.00440 (0.00190) 0.0190 (0.0192) 0.00576 (0.00109) 0.0155 (0.0167)
Median [Q1, Q3] 0.00949 [0.00743, 0.0115] 0.00754 [0.00736, 0.0169] 0.00346 [0.00330, 0.00502] 0.0137 [0.00768, 0.0258] 0.00576 [0.00538, 0.00615] 0.00928 [0.00653, 0.0185]
Median [min, max] 0.00949 [0.00538, 0.0136] 0.00754 [0.00711, 0.0169] 0.00346 [0.00315, 0.00659] 0.0137 [0.00230, 0.0966] 0.00576 [0.00499, 0.00653] 0.00928 [0.00230, 0.0966]
as.factor(missing_fi)
0 0 (0%) 2 (40.0%) 0 (0%) 2 (8.0%) 0 (0%) 4 (10.8%)
1 2 (100%) 3 (60.0%) 3 (100%) 12 (48.0%) 1 (50.0%) 21 (56.8%)
Missing 0 (0%) 0 (0%) 0 (0%) 11 (44.0%) 1 (50.0%) 12 (32.4%)
kruskal.test(FI_final ~ fx_code2, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by fx_code2
## Kruskal-Wallis chi-squared = 3.1249, df = 4, p-value = 0.5371
kruskal.test(FQ_final ~ fx_code2, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by fx_code2
## Kruskal-Wallis chi-squared = 8.9632, df = 4, p-value = 0.06202

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")
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")

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]"))
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=37)
no_rand
Mean (SD) NA NA NA 6780 (2340) 1160 (309) 1650 (0) 5890 (1590) 7870 (0) 1650 (0) 4240 (2890)
Median [Q1, Q3] 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] 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 5470 (1770) 941 (271) 1330 (95.5) 5460 (1530) 7530 (240) 1330 (155) 3750 (2630)
Median [Q1, Q3] 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] 3660 [1270, 6640]
Median [min, max] 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] 3660 [451, 7810]
n_event
Mean (SD) NA NA NA 389 (287) 67.8 (24.9) 39.0 (7.07) 234 (163) 184 (145) 404 (284) 211 (204)
Median [Q1, Q3] 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] 106 [76.0, 312]
Median [min, max] 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] 106 [34.0, 764]
FI_final
Mean (SD) 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 (35.3)
Median [Q1, Q3] 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.0 [17.0, 42.0]
Median [min, max] 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.0 [9.00, 171]
FQ_final
Mean (SD) 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.0155 (0.0167)
Median [Q1, Q3] 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.00928 [0.00653, 0.0185]
Median [min, max] 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.00928 [0.00230, 0.0966]
as.factor(missing_fi)
0 0 (0%) 0 (0%) 0 (0%) 1 (16.7%) 2 (25.0%) 0 (0%) 1 (8.3%) 0 (0%) 0 (0%) 4 (10.8%)
1 0 (0%) 1 (100%) 1 (100%) 5 (83.3%) 1 (12.5%) 2 (100%) 11 (91.7%) 0 (0%) 0 (0%) 21 (56.8%)
Missing 1 (100%) 0 (0%) 0 (0%) 0 (0%) 5 (62.5%) 0 (0%) 0 (0%) 3 (100%) 3 (100%) 12 (32.4%)
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=9)
PTH analog
(N=10)
Romosozumab
(N=12)
Denosumab
(N=3)
Strontium_ranelate
(N=3)
Overall
(N=37)
no_rand
Mean (SD) 5000 (3270) 1260 (340) 5890 (1590) 7870 (0) 1650 (0) 4240 (2890)
Median [Q1, Q3] 7740 [1960, 7740] 1230 [1090, 1570] 7180 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 1650] 4090 [1640, 7180]
Median [min, max] 7740 [704, 7740] 1230 [578, 1650] 7180 [4090, 7180] 7870 [7870, 7870] 1650 [1650, 1650] 4090 [578, 7870]
active_sample
Mean (SD) 4070 (2550) 1020 (292) 5460 (1530) 7530 (240) 1330 (155) 3750 (2630)
Median [Q1, Q3] 5680 [1950, 6430] 971 [885, 1210] 6640 [3790, 6660] 7390 [7390, 7600] 1390 [1270, 1410] 3660 [1270, 6640]
Median [min, max] 5680 [544, 6550] 971 [451, 1430] 6640 [3530, 6910] 7390 [7390, 7810] 1390 [1150, 1440] 3660 [451, 7810]
n_event
Mean (SD) 289 (273) 62.0 (25.2) 234 (163) 184 (145) 404 (284) 211 (204)
Median [Q1, Q3] 110 [100, 402] 49.5 [44.5, 85.3] 223 [106, 272] 121 [102, 236] 387 [258, 542] 106 [76.0, 312]
Median [min, max] 110 [58.0, 764] 49.5 [34.0, 100] 223 [75.0, 658] 121 [82.0, 350] 387 [128, 696] 106 [34.0, 764]
FI_final
Mean (SD) 51.3 (50.4) 16.5 (5.36) 35.1 (12.8) 64.3 (63.9) 60.7 (46.6) 38.5 (35.3)
Median [Q1, Q3] 38.0 [20.0, 43.0] 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.0 [17.0, 42.0]
Median [min, max] 38.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.0 [9.00, 171]
FQ_final
Mean (SD) 0.0148 (0.0113) 0.0181 (0.00849) 0.00732 (0.00436) 0.00861 (0.00870) 0.0488 (0.0429) 0.0155 (0.0167)
Median [Q1, Q3] 0.00828 [0.00670, 0.0169] 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.00928 [0.00653, 0.0185]
Median [min, max] 0.00828 [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.00928 [0.00230, 0.0966]
as.factor(missing_fi)
0 1 (11.1%) 2 (20.0%) 1 (8.3%) 0 (0%) 0 (0%) 4 (10.8%)
1 7 (77.8%) 3 (30.0%) 11 (91.7%) 0 (0%) 0 (0%) 21 (56.8%)
Missing 1 (11.1%) 5 (50.0%) 0 (0%) 3 (100%) 3 (100%) 12 (32.4%)
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.378, df = 4, p-value = 0.009571
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.37, df = 4, p-value = 0.003992

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")
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 = "Pharmacological interventions", y = "Fragility quotine")

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=16)
5
(N=10)
6
(N=1)
8
(N=1)
Overall
(N=37)
no_rand
Mean (SD) 4350 (2770) 1380 (533) 3750 (2690) 6590 (2520) NA NA 4240 (2890)
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) 3390 (2560) 5680 (2220) NA NA 3750 (2630)
Median [Q1, Q3] 3980 [1390, 6640] 1330 [1060, 1410] 3600 [892, 6650] 6480 [5680, 7180] 1150 [1150, 1150] 1950 [1950, 1950] 3660 [1270, 6640]
Median [min, max] 3980 [1330, 6910] 1330 [451, 1430] 3600 [544, 6690] 6480 [1440, 7810] 1150 [1150, 1150] 1950 [1950, 1950] 3660 [451, 7810]
n_event
Mean (SD) 132 (110) 40.5 (6.61) 181 (154) 307 (255) NA NA 211 (204)
Median [Q1, Q3] 76.0 [75.0, 128] 40.0 [35.5, 45.0] 106 [90.5, 230] 236 [105, 398] 696 [696, 696] 312 [312, 312] 106 [76.0, 312]
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] 106 [34.0, 764]
FI_final
Mean (SD) 22.2 (7.46) 11.5 (1.91) 29.9 (13.8) 64.3 (52.0) NA NA 38.5 (35.3)
Median [Q1, Q3] 24.0 [19.0, 27.0] 12.0 [10.5, 13.0] 24.0 [20.8, 39.3] 42.5 [38.3, 79.8] 111 [111, 111] 33.0 [33.0, 33.0] 26.0 [17.0, 42.0]
Median [min, max] 24.0 [11.0, 30.0] 12.0 [9.00, 13.0] 24.0 [15.0, 65.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.0132 (0.0104) 0.0149 (0.00997) 0.0133 (0.0115) NA NA 0.0155 (0.0167)
Median [Q1, Q3] 0.00754 [0.00391, 0.00828] 0.00849 [0.00755, 0.0142] 0.0137 [0.00598, 0.0206] 0.00719 [0.00655, 0.0173] 0.0966 [0.0966, 0.0966] 0.0169 [0.0169, 0.0169] 0.00928 [0.00653, 0.0185]
Median [min, max] 0.00754 [0.00361, 0.0137] 0.00849 [0.00711, 0.0288] 0.0137 [0.00315, 0.0368] 0.00719 [0.00230, 0.0361] 0.0966 [0.0966, 0.0966] 0.0169 [0.0169, 0.0169] 0.00928 [0.00230, 0.0966]
as.factor(missing_fi)
0 1 (20.0%) 0 (0%) 2 (12.5%) 0 (0%) 0 (0%) 1 (100%) 4 (10.8%)
1 3 (60.0%) 3 (75.0%) 10 (62.5%) 5 (50.0%) 0 (0%) 0 (0%) 21 (56.8%)
Missing 1 (20.0%) 1 (25.0%) 4 (25.0%) 5 (50.0%) 1 (100%) 0 (0%) 12 (32.4%)
kruskal.test(FI_final ~ timing, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by timing
## Kruskal-Wallis chi-squared = 16.324, df = 5, p-value = 0.005977
kruskal.test(FQ_final ~ timing, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by timing
## Kruskal-Wallis chi-squared = 5.2068, df = 5, p-value = 0.3912

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=2)
JAMA
(N=4)
JBMR
(N=1)
JCEM
(N=1)
Other
(N=2)
Overall
(N=37)
no_rand
Mean (SD) 5280 (2700) 1360 (0) 1640 (8.02) NA NA 1180 (668) 4240 (2890)
Median [Q1, Q3] 7180 [3050, 7740] 1360 [1360, 1360] 1640 [1640, 1650] 1960 [1960, 1960] 578 [578, 578] 1180 [940, 1410] 4090 [1640, 7180]
Median [min, max] 7180 [1090, 7870] 1360 [1360, 1360] 1640 [1630, 1650] 1960 [1960, 1960] 578 [578, 578] 1180 [704, 1650] 4090 [578, 7870]
active_sample
Mean (SD) 4720 (2450) 1050 (0) 1360 (73.1) NA NA 847 (428) 3750 (2630)
Median [Q1, Q3] 5680 [2740, 6650] 1050 [1050, 1050] 1370 [1310, 1410] 1950 [1950, 1950] 451 [451, 451] 847 [695, 998] 3660 [1270, 6640]
Median [min, max] 5680 [882, 7810] 1050 [1050, 1050] 1370 [1270, 1430] 1950 [1950, 1950] 451 [451, 451] 847 [544, 1150] 3660 [451, 7810]
n_event
Mean (SD) 240 (200) 96.0 (5.66) 43.0 (10.9) NA NA 398 (421) 211 (204)
Median [Q1, Q3] 168 [84.5, 337] 96.0 [94.0, 98.0] 40.0 [35.5, 47.5] 110 [110, 110] 48.0 [48.0, 48.0] 398 [249, 547] 106 [76.0, 312]
Median [min, max] 168 [46.0, 764] 96.0 [92.0, 100] 40.0 [34.0, 58.0] 110 [110, 110] 48.0 [48.0, 48.0] 398 [100, 696] 106 [34.0, 764]
FI_final
Mean (SD) 44.0 (35.7) 16.0 (1.41) 11.0 (1.63) NA NA 65.5 (64.3) 38.5 (35.3)
Median [Q1, Q3] 36.0 [23.5, 42.5] 16.0 [15.5, 16.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.0 [17.0, 42.0]
Median [min, max] 36.0 [17.0, 171] 16.0 [15.0, 17.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.0 [9.00, 171]
FQ_final
Mean (SD) 0.0127 (0.00949) 0.0153 (0.00135) 0.00809 (0.000924) NA NA 0.0667 (0.0423) 0.0155 (0.0167)
Median [Q1, Q3] 0.00754 [0.00562, 0.0177] 0.0153 [0.0148, 0.0157] 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.00928 [0.00653, 0.0185]
Median [min, max] 0.00754 [0.00230, 0.0361] 0.0153 [0.0143, 0.0162] 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.00928 [0.00230, 0.0966]
as.factor(missing_fi)
0 2 (7.4%) 2 (100%) 0 (0%) 0 (0%) 0 (0%) 0 (0%) 4 (10.8%)
1 16 (59.3%) 0 (0%) 4 (100%) 0 (0%) 0 (0%) 1 (50.0%) 21 (56.8%)
Missing 9 (33.3%) 0 (0%) 0 (0%) 1 (100%) 1 (100%) 1 (50.0%) 12 (32.4%)
kruskal.test(FI_final ~ journal, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by journal
## Kruskal-Wallis chi-squared = 18.362, df = 5, p-value = 0.002526
kruskal.test(FQ_final ~ journal, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by journal
## Kruskal-Wallis chi-squared = 8.3947, df = 5, p-value = 0.1358

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=36)
Overall
(N=37)
no_rand
Mean (SD) NA 4340 (2860) 4240 (2890)
Median [Q1, Q3] 578 [578, 578] 4090 [1640, 7180] 4090 [1640, 7180]
Median [min, max] 578 [578, 578] 4090 [704, 7870] 4090 [578, 7870]
active_sample
Mean (SD) NA 3850 (2610) 3750 (2630)
Median [Q1, Q3] 451 [451, 451] 3660 [1310, 6640] 3660 [1270, 6640]
Median [min, max] 451 [451, 451] 3660 [544, 7810] 3660 [451, 7810]
n_event
Mean (SD) NA 215 (205) 211 (204)
Median [Q1, Q3] 48.0 [48.0, 48.0] 108 [80.5, 315] 106 [76.0, 312]
Median [min, max] 48.0 [48.0, 48.0] 108 [34.0, 764] 106 [34.0, 764]
FI_final
Mean (SD) NA 39.2 (35.5) 38.5 (35.3)
Median [Q1, Q3] 13.0 [13.0, 13.0] 26.5 [18.5, 42.0] 26.0 [17.0, 42.0]
Median [min, max] 13.0 [13.0, 13.0] 26.5 [9.00, 171] 26.0 [9.00, 171]
FQ_final
Mean (SD) NA 0.0152 (0.0168) 0.0155 (0.0167)
Median [Q1, Q3] 0.0288 [0.0288, 0.0288] 0.00878 [0.00640, 0.0173] 0.00928 [0.00653, 0.0185]
Median [min, max] 0.0288 [0.0288, 0.0288] 0.00878 [0.00230, 0.0966] 0.00928 [0.00230, 0.0966]
as.factor(missing_fi)
0 0 (0%) 4 (11.1%) 4 (10.8%)
1 0 (0%) 21 (58.3%) 21 (56.8%)
Missing 1 (100%) 11 (30.6%) 12 (32.4%)
kruskal.test(FI_final ~ sex, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by sex
## Kruskal-Wallis chi-squared = 1.8465, df = 1, p-value = 0.1742
kruskal.test(FQ_final ~ sex, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by sex
## Kruskal-Wallis chi-squared = 1.7193, df = 1, p-value = 0.1898

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=27)
Overall
(N=37)
no_rand
Mean (SD) 2810 (1350) 4770 (3140) 4240 (2890)
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) 4220 (2850) 3750 (2630)
Median [Q1, Q3] 2480 [1300, 3660] 5680 [1240, 6650] 3660 [1270, 6640]
Median [min, max] 2480 [1050, 3980] 5680 [451, 7810] 3660 [451, 7810]
n_event
Mean (SD) 212 (198) 210 (209) 211 (204)
Median [Q1, Q3] 161 [56.0, 306] 106 [79.0, 279] 106 [76.0, 312]
Median [min, max] 161 [34.0, 658] 106 [46.0, 764] 106 [34.0, 764]
FI_final
Mean (SD) 27.6 (18.7) 42.5 (39.3) 38.5 (35.3)
Median [Q1, Q3] 21.5 [13.5, 39.0] 27.0 [20.5, 41.0] 26.0 [17.0, 42.0]
Median [min, max] 21.5 [9.00, 65.0] 27.0 [11.0, 171] 26.0 [9.00, 171]
FQ_final
Mean (SD) 0.0111 (0.00383) 0.0172 (0.0193) 0.0155 (0.0167)
Median [Q1, Q3] 0.0104 [0.00758, 0.0140] 0.00828 [0.00562, 0.0252] 0.00928 [0.00653, 0.0185]
Median [min, max] 0.0104 [0.00711, 0.0169] 0.00828 [0.00230, 0.0966] 0.00928 [0.00230, 0.0966]
as.factor(missing_fi)
0 3 (30.0%) 1 (3.7%) 4 (10.8%)
1 7 (70.0%) 14 (51.9%) 21 (56.8%)
Missing 0 (0%) 12 (44.4%) 12 (32.4%)
kruskal.test(FI_final ~ placebo, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FI_final by placebo
## Kruskal-Wallis chi-squared = 1.3537, df = 1, p-value = 0.2446
kruskal.test(FQ_final ~ placebo, data = p_sig2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  FQ_final by placebo
## Kruskal-Wallis chi-squared = 0.018713, df = 1, p-value = 0.8912

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/1153595