Effect of Dexamethasone as Analgesic Treatment After Total Knee Arthroplasty: Subgroup Analyses of The DEX-2-TKA Randomized Clinical Trial
Phase: PHASE4
Conditions: Postoperative Pain
Sponsor: Naestved Hospital

Effect of dexamethasone on morphine consumption after total knee 
arthroplasty: a statistical analysis plan for post-hoc subgroup analyses of 
the multicenter, randomized DEX-2-TKA trial 
Kasper Smidt Gasbjerg, Daniel Hägi-Pedersen, Troels Haxholdt Lunn, Markus Harboe Olsen, Ole Mathiesen 
and Janus Christian Jakobsen 
Objective 
The objective of this study is to assess the intervention effect of the three groups in any of the subgroups 
according to sex, age, use of paracetamol and/or NSAID prior to surgery, ASA-score, type of anesthesia, 
level of pain at rest prior to surgery and level of pain when active prior to surgery. 
Subgroups 
The subgroups are dichotomized based on the following pre-randomization patient characteristics: 
 
Sex (male versus female) 
 
Age (≤ 65 years versus > 65 years) 
 
ASA group (ASA I and II versus III) 
 
Preoperative pain at rest measured using visual analogue scale (VAS) (≤ 30 mm versus > 30 mm) 
 
Preoperative pain when active measured using VAS (≤ 30 mm versus > 30 mm) 
 
Type of anesthesia (spinal anesthesia versus general anesthesia and converted to general 
anesthesia) 
 
Prior daily use of paracetamol and/or NSAID (either paracetamol or NSAID versus neither) 
Population 
We will include all randomized participants with useful data in all analyses (intention-to treat population). 
Outcome 
48-hour morphine consumption as defined as the primary outcome in the original trial. 
Baseline variables  
Continuous data will be presented with mean and standard deviations (SD) or median and interquartile 
range when appropriate; while categorical data will be presented as number and percentage. 
Statistical methods 
Statistical analyses will be carried out using R (R Core Team, Vienna, Austria) and Stata (StataCop LLC, 
Texas, USA) by two independent statisticians (MHO and JCJ). The two statisticians will independently 
prepare a statistical report, which will be compared for any discrepancies. The discrepancies will be logged, 
and any changes for the final report will be described. The final report, the two original reports, and the 
discrepancies log, will be approved by the co-authors. All reports will be added as supplemental material in 
the final paper. 
We will perform pairwise comparisons of the three groups, i.e., three comparisons. We plan to test for 
subgroup heterogeneity of the intervention effect by assessing whether the interaction between the 
subgroup and the treatment group is significantly different. We will use quantile regression adjusted for 
site to test for significant interaction between the predefined dichotomized subgroups and treatment 
group using a threshold of 0.05 for subsequent Wald test.  

We will assess the effects of dexamethasone for each of the predefined subgroups analyzed separately 
using van Elteren test adjusted for site. As these subgroup analyses will be interpreted as exploratory, and 
with the purpose of generating hypotheses, we will use the same threshold for significance as used in the 
main trial. The threshold for significance will therefore be multiplicity corrected using Bonferroni correction 
and is based on the three groups. Thus, the level of significance will be 0.017. We will quantify and report 
differences between the groups using Hodges-Lehmann median difference and the corresponding 98.3% 
confidence intervals.  
The subgroup analyses will be presented in forest plots.  
Attached is an example of the planned analyses for one subgroup analysis (Supplemental Material) 
Further information 
- 
Clinicaltrails.gov identifier for the main trial: NCT03506789 
- 
Clinicaltrails.gov identifier for this subgroup analyses: NCT05008367 
- 
Published protocol article for the main trial: https://doi.org/10.1111/aas.13481 
- 
Published statistical analyses plan for the main trial: https://doi.org/10.1111/aas.13560 
 

DEX2TKA simulations
Markus Harboe Olsen
18/8/2021
Simulated data
#Number of participants
n_part <- 485
df <- NULL
#Random assignment to the three groups
df$group <- as.factor(sample(c(1:3),n_part, replace=TRUE))
#Random assignment to the sites
df$site <- sample(c("A","B","C"),n_part, replace=TRUE)
#Random assignment to age
df$bc_age <- rnorm(n_part, mean=65, sd=8)
df$bc_ASA_above_2 <- sample(c(0,1),n_part, replace=TRUE)
df$bc_High_pain_at_rest <- rnorm(n_part, mean=30, sd=10)
df$bc_High_pain_when_active <- rnorm(n_part, mean=30, sd=10)
df$bc_Only_spinal <- sample(c(0,1),n_part, replace=TRUE)
df$bc_Prior_pain_med <- sample(c(0,1),n_part, replace=TRUE)
df$bc_BMI <- rnorm(n_part, mean=30, sd=4)
df <- data.frame(df)
df$age <- 0
df$age[df$bc_age > 65] <- 1
df_mc <- df
#The simulated outcome depending on the median for each group:
n_dd <- 35
n_dp <- 38
n_pp <- 43
df$outcome[df$group==1] <- rnorm(sum((df$group==1)*1),mean=n_dd,sd=5)
df$outcome[df$group==2] <- rnorm(sum((df$group==2)*1),mean=n_dp,sd=5)
df$outcome[df$group==3] <- rnorm(sum((df$group==3)*1),mean=n_pp,sd=5)
#The simulated RRR of age:
rrr_age <- 0.1
df$outcome[df$age == 1] <- df$outcome[df$age == 1]-df$outcome[df$age == 1]*rrr_age
1

Baseline characteristics for subgroup
library(tableone)
CreateTableOne(c("bc_age","bc_BMI","bc_ASA_above_2","bc_High_pain_at_rest","bc_High_pain_when_active",
"bc_Only_spinal","bc_Prior_pain_med"), strata = c("age","group"),
factorVars = c("bc_ASA_above_2","bc_Only_spinal","bc_Prior_pain_med"),
data=df, test=FALSE)
##
Stratified by age:group
##
0:1
1:1
##
n
81
76
##
bc_age (mean (SD))
58.40 (4.65)
71.01 (4.90)
##
bc_BMI (mean (SD))
30.00 (3.79)
29.30 (3.79)
##
bc_ASA_above_2 = 1 (%)
41 (50.6)
45 (59.2)
##
bc_High_pain_at_rest (mean (SD))
29.28 (9.40)
30.50 (9.56)
##
bc_High_pain_when_active (mean (SD)) 31.05 (10.00) 29.55 (8.84)
##
bc_Only_spinal = 1 (%)
38 (46.9)
36 (47.4)
##
bc_Prior_pain_med = 1 (%)
39 (48.1)
34 (44.7)
##
Stratified by age:group
##
0:2
1:2
##
n
71
78
##
bc_age (mean (SD))
59.49 (4.42)
70.93 (4.92)
##
bc_BMI (mean (SD))
29.95 (4.24)
29.99 (4.23)
##
bc_ASA_above_2 = 1 (%)
27 (38.0)
38 (48.7)
##
bc_High_pain_at_rest (mean (SD))
32.68 (12.43) 31.61 (10.56)
##
bc_High_pain_when_active (mean (SD)) 29.73 (9.50)
30.52 (10.82)
##
bc_Only_spinal = 1 (%)
36 (50.7)
35 (44.9)
##
bc_Prior_pain_med = 1 (%)
28 (39.4)
37 (47.4)
##
Stratified by age:group
##
0:3
1:3
##
n
86
93
##
bc_age (mean (SD))
58.59 (4.81)
71.68 (4.97)
##
bc_BMI (mean (SD))
29.53 (3.67)
30.12 (3.97)
##
bc_ASA_above_2 = 1 (%)
41 (47.7)
42 (45.2)
##
bc_High_pain_at_rest (mean (SD))
31.73 (9.62)
30.29 (9.94)
##
bc_High_pain_when_active (mean (SD)) 30.49 (11.03) 29.38 (9.56)
##
bc_Only_spinal = 1 (%)
41 (47.7)
42 (45.2)
##
bc_Prior_pain_med = 1 (%)
43 (50.0)
47 (50.5)
2

Quantile regression for interaction only
#https://cran.r-project.org/web/packages/quantreg/vignettes/rq.pdf
#install.packages("quantreg")
suppressMessages(suppressWarnings(library(quantreg)))
fit_rq <- rq(outcome ~ group*age,data=df)
## Warning in rq.fit.br(x, y, tau = tau, ...): Solution may be nonunique
summary(fit_rq,se="nid")
##
## Call: rq(formula = outcome ~ group * age, data = df)
##
## tau: [1] 0.5
##
## Coefficients:
##
Value
Std. Error t value
Pr(>|t|)
## (Intercept) 34.64455
0.62947
55.03749
0.00000
## group2
3.65202
1.23630
2.95398
0.00329
## group3
8.70705
1.00415
8.67107
0.00000
## age
-3.10804
0.82288
-3.77702
0.00018
## group2:age
-0.47171
1.46960
-0.32098
0.74837
## group3:age
-1.31063
1.23464
-1.06155
0.28897
#https://www.rdocumentation.org/packages/aod/versions/1.3.1/topics/wald.test
#install.packages("aod")
suppressMessages(suppressWarnings(library(aod)))
#https://www.rdocumentation.org/packages/Zelig/versions/5.1.7/topics/vcov_rq
#install.packages("Zelig")
suppressMessages(suppressWarnings(library(Zelig)))
wald.test(b = coef(fit_rq), Sigma = vcov_rq(fit_rq), Terms = 5:6)
## Wald test:
## ----------
##
## Chi-squared test:
## X2 = 1.1, df = 2, P(> X2) = 0.57
3

Van Elteren p-values
#https://cran.r-project.org/web/packages/sanon/sanon.pdf
#install.packages("sanon")
suppressMessages(suppressWarnings(library(sanon)))
df_test <- df[df$age == 0 & (df$group == "1" | df$group == "2"),]
summary(sanon(outcome ~ grp(group, ref="1") + strt(site), data=df_test))
## Call:
## sanon.formula(formula = outcome ~ grp(group, ref = "1") + strt(site),
##
data = df_test)
##
##
##
Estimate Std.Err Chisq Pr(>Chisq)
## outcome
0.1707
0.0455
14.1
0.00017 ***
## ---
## Signif. codes:
0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
## Note that the estimates of responses are for the (MW estimate - 0.5).
df_test <- df[df$age == 0 & (df$group == "1" | df$group == "3"),]
summary(sanon(outcome ~ grp(group, ref="1") + strt(site), data=df_test))
## Call:
## sanon.formula(formula = outcome ~ grp(group, ref = "1") + strt(site),
##
data = df_test)
##
##
##
Estimate Std.Err Chisq Pr(>Chisq)
## outcome
0.3992
0.0242
273
<2e-16 ***
## ---
## Signif. codes:
0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
## Note that the estimates of responses are for the (MW estimate - 0.5).
df_test <- df[df$age == 0 & (df$group == "2" | df$group == "3"),]
summary(sanon(outcome ~ grp(group, ref="2") + strt(site), data=df_test))
## Call:
## sanon.formula(formula = outcome ~ grp(group, ref = "2") + strt(site),
##
data = df_test)
##
##
##
Estimate Std.Err Chisq Pr(>Chisq)
## outcome
0.2663
0.0377
49.8
1.7e-12 ***
## ---
## Signif. codes:
0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
## Note that the estimates of responses are for the (MW estimate - 0.5).
df_test <- df[df$age == 1 & (df$group == "1" | df$group == "2"),]
summary(sanon(outcome ~ grp(group, ref="1") + strt(site), data=df_test))
4

## Call:
## sanon.formula(formula = outcome ~ grp(group, ref = "1") + strt(site),
##
data = df_test)
##
##
##
Estimate Std.Err Chisq Pr(>Chisq)
## outcome
0.1978
0.0443
19.9
8.1e-06 ***
## ---
## Signif. codes:
0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
## Note that the estimates of responses are for the (MW estimate - 0.5).
df_test <- df[df$age == 1 & (df$group == "1" | df$group == "3"),]
summary(sanon(outcome ~ grp(group, ref="1") + strt(site), data=df_test))
## Call:
## sanon.formula(formula = outcome ~ grp(group, ref = "1") + strt(site),
##
data = df_test)
##
##
##
Estimate Std.Err Chisq Pr(>Chisq)
## outcome
0.4040
0.0234
297
<2e-16 ***
## ---
## Signif. codes:
0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
## Note that the estimates of responses are for the (MW estimate - 0.5).
df_test <- df[df$age == 1 & (df$group == "2" | df$group == "3"),]
summary(sanon(outcome ~ grp(group, ref="2") + strt(site), data=df_test))
## Call:
## sanon.formula(formula = outcome ~ grp(group, ref = "2") + strt(site),
##
data = df_test)
##
##
##
Estimate Std.Err Chisq Pr(>Chisq)
## outcome
0.2445
0.0392
39
4.2e-10 ***
## ---
## Signif. codes:
0 ’***’ 0.001 ’**’ 0.01 ’*’ 0.05 ’.’ 0.1 ’ ’ 1
## Note that the estimates of responses are for the (MW estimate - 0.5).
5

Hodges-Lemann median differences
#https://rdrr.io/cran/DescTools/man/HodgesLehmann.html
#install.packages("DescTools")
suppressMessages(suppressWarnings(library("DescTools")))
#Sammenligning mellem aldersgrupper i hver gruppe
HodgesLehmann(df$outcome[df$group == 1 & df$age == 0],
df$outcome[df$group == 2 & df$age == 0],
conf.level = 0.983)
##
est
lwr.ci
upr.ci
## -3.0577938 -5.1431926 -0.9508709
HodgesLehmann(df$outcome[df$group == 1 & df$age == 0],
df$outcome[df$group == 3 & df$age == 0],
conf.level = 0.983)
##
est
lwr.ci
upr.ci
##
-8.405907 -10.300894
-6.602105
HodgesLehmann(df$outcome[df$group == 2 & df$age == 0],
df$outcome[df$group == 3 & df$age == 0],
conf.level = 0.983)
##
est
lwr.ci
upr.ci
## -5.402509 -7.479059 -3.298164
HodgesLehmann(df$outcome[df$group == 1 & df$age == 1],
df$outcome[df$group == 2 & df$age == 1],
conf.level = 0.983)
##
est
lwr.ci
upr.ci
## -3.204365 -4.797497 -1.397309
HodgesLehmann(df$outcome[df$group == 1 & df$age == 1],
df$outcome[df$group == 3 & df$age == 1],
conf.level = 0.983)
##
est
lwr.ci
upr.ci
## -7.287141 -8.749119 -5.665037
HodgesLehmann(df$outcome[df$group == 2 & df$age == 1],
df$outcome[df$group == 3 & df$age == 1],
conf.level = 0.983)
##
est
lwr.ci
upr.ci
## -4.068798 -5.736961 -2.477672
6