In this tutorial, we will explore the percentage-change approach to
clinical significance using R. The distribution-based approach is
centered around the distribution of the outcome of interest. This is
used to calculate the minimal detectable change (MDC), which is the
change that has to be achieved to be (likely) greater than the inherent
measurement error of the used instrument. We will be working with the
claus_2020 dataset and the cs_percentage()
function to demonstrate various aspects of these approaches.
Before we begin, ensure that you have the following prerequisites in place:
First, let’s have a look at the datasets, which come with the package.
library(clinicalsignificance)
antidepressants
#> # A tibble: 1,110 × 4
#>    patient condition measurement mom_di
#>    <chr>   <fct>     <fct>        <dbl>
#>  1 S001    Wait List Before          50
#>  2 S001    Wait List After           36
#>  3 S002    Wait List Before          40
#>  4 S002    Wait List After           32
#>  5 S003    Wait List Before          38
#>  6 S003    Wait List After           41
#>  7 S004    Wait List Before          29
#>  8 S004    Wait List After           44
#>  9 S005    Wait List Before          37
#> 10 S005    Wait List After           45
#> # ℹ 1,100 more rows
claus_2020
#> # A tibble: 172 × 9
#>       id   age sex    treatment  time   bdi shaps   who  hamd
#>    <dbl> <dbl> <fct>  <fct>     <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1     1    54 Male   TAU           1    33     9     0    25
#>  2     1    54 Male   TAU           2    28     6     3    17
#>  3     1    54 Male   TAU           3    28     9     7    13
#>  4     1    54 Male   TAU           4    27     8     3    13
#>  5     2    52 Female PA            1    26    11     2    15
#>  6     2    52 Female PA            2    26    10     0    16
#>  7     2    52 Female PA            3    25    10     0     7
#>  8     2    52 Female PA            4    19     9     3    11
#>  9     3    54 Male   PA            1    15     2     0    28
#> 10     3    54 Male   PA            2    13     5     9    17
#> # ℹ 162 more rowsThe cs_distribution() function allows us to analyze the
clinical significance by considering the distribution of patient
measurements. We can specify various parameters to customize the
analysis. Let’s explore the key aspects of this function through
examples.
Let’s start with a basic clinical significance distribution analysis
using the antidepressants dataset. We are interested in the
Mind over Mood Depression Inventory (mom_di) measurements
and want to set a reliability threshold of 0.80.
# Basic clinical significance distribution analysis
antidepressants |>
  cs_distribution(patient, measurement, mom_di, reliability = 0.80)
#> ℹ Your "Before" was set as pre measurement and and your "After" as post.
#> 
#> ── Clinical Significance Results ──
#> 
#> Distribution-based approach using the JT method.
#> • If that is not correct, please specify the pre measurement with the argument
#>   "pre".
#> Category     |   n | Percent
#> ----------------------------
#> Improved     | 274 |  49.37%
#> Unchanged    | 237 |  42.70%
#> Deteriorated |  44 |   7.93%Sometimes, you may encounter warnings when using this function. You can turn off the warning by explicitly specifying the pre-measurement time point using the pre parameter. This can be helpful when your data lacks clear pre-post measurement labels.
summary(cs_results)
#> 
#> ── Clinical Significance Results ──
#> 
#> Distribution-based analysis of clinical significance using the JT method for
#> calculating the RCI.
#> There were 555 participants in the whole dataset of which 555 (100%) could be
#> included in the analysis.
#> The outcome was mom_di and the reliability was set to 0.8.
#> 
#> ── Individual Level Results
#> Category     |   n | Percent
#> ----------------------------
#> Improved     | 274 |  49.37%
#> Unchanged    | 237 |  42.70%
#> Deteriorated |  44 |   7.93%
plot(cs_results)When working with data that has more than two measurements, you must explicitly define the pre and post measurement time points using the pre and post parameters.
# Clinical significance distribution analysis with more than two measurements
cs_results <- claus_2020 |>
  cs_distribution(
    id,
    time,
    hamd,
    pre = 1,
    post = 4,
    reliability = 0.80
  )
# Display the results
cs_results
#> 
#> ── Clinical Significance Results ──
#> 
#> Distribution-based approach using the JT method.
#> Category     |  n | Percent
#> ---------------------------
#> Improved     | 29 |  72.50%
#> Unchanged    | 10 |  25.00%
#> Deteriorated |  1 |   2.50%
summary(cs_results)
#> 
#> ── Clinical Significance Results ──
#> 
#> Distribution-based analysis of clinical significance using the JT method for
#> calculating the RCI.
#> There were 43 participants in the whole dataset of which 40 (93%) could be
#> included in the analysis.
#> The outcome was hamd and the reliability was set to 0.8.
#> 
#> ── Individual Level Results
#> Category     |  n | Percent
#> ---------------------------
#> Improved     | 29 |  72.50%
#> Unchanged    | 10 |  25.00%
#> Deteriorated |  1 |   2.50%
plot(cs_results)You can change the Reliable Change Index (RCI) method by specifying
the rci_method parameter. In this example, we use the “HA”
method.
# Clinical significance distribution analysis with a different RCI method
cs_results_ha <- claus_2020 |>
  cs_distribution(
    id,
    time,
    hamd,
    pre = 1,
    post = 4,
    reliability = 0.80,
    rci_method = "HA"
  )
# Display the results
summary(cs_results_ha)
#> 
#> ── Clinical Significance Results ──
#> 
#> Distribution-based analysis of clinical significance using the HA method for
#> calculating the RCI.
#> There were 43 participants in the whole dataset of which 40 (93%) could be
#> included in the analysis.
#> The outcome was hamd and the reliability was set to 0.8.
#> 
#> ── Individual Level Results
#> Category     |  n | Percent
#> ---------------------------
#> Improved     | 32 |  80.00%
#> Unchanged    |  7 |  17.50%
#> Deteriorated |  1 |   2.50%
plot(cs_results_ha)You can also perform a grouped analysis by providing a grouping variable. This is useful when comparing different treatment groups or categories.
# Grouped analysis
cs_results_grouped <- claus_2020 |>
  cs_distribution(
    id,
    time,
    hamd,
    pre = 1,
    post = 4,
    group = treatment,
    reliability = 0.80
  )
# Display the results
summary(cs_results_grouped)
#> 
#> ── Clinical Significance Results ──
#> 
#> Distribution-based analysis of clinical significance using the JT method for
#> calculating the RCI.
#> There were 43 participants in the whole dataset of which 40 (93%) could be
#> included in the analysis.
#> The outcome was hamd and the reliability was set to 0.8.
#> 
#> ── Individual Level Results
#> Group |     Category |  n | Percent
#> -----------------------------------
#> TAU   |     Improved |  9 |  22.50%
#> TAU   |    Unchanged |  9 |  22.50%
#> TAU   | Deteriorated |  1 |   2.50%
#> PA    |     Improved | 20 |  50.00%
#> PA    |    Unchanged |  1 |   2.50%
#> PA    | Deteriorated |  0 |   0.00%
plot(cs_results_grouped)In some cases, higher values of an outcome may be considered better.
You can specify this using the better_is argument. Let’s
see an example with the WHO-5 score where higher values are considered
better. Suppose the reliability for the WHO-5 is 0.85.
distribution_results_who <- claus_2020 |> 
  cs_distribution(
    id = id,
    time = time,
    outcome = who,
    pre = 1,
    post = 4,
    reliability = 0.85,
    better_is = "higher"
  )
distribution_results_who
#> 
#> ── Clinical Significance Results ──
#> 
#> Distribution-based approach using the JT method.
#> Category     |  n | Percent
#> ---------------------------
#> Improved     | 21 |  52.50%
#> Unchanged    | 18 |  45.00%
#> Deteriorated |  1 |   2.50%
# And plot the groups
plot(distribution_results_who)If you have more than two measurements and want to use the
Hierarchical Linear Modeling (HLM) method, you can specify the
rci_method argument accordingly.
# Clinical significance distribution analysis with HLM method
cs_results_hlm <- claus_2020 |>
  cs_distribution(
    id,
    time,
    hamd,
    rci_method = "HLM"
  )
# Display the results
summary(cs_results_hlm)
#> 
#> ── Clinical Significance Results ──
#> 
#> Distribution-based analysis of clinical significance using the HLM method for
#> calculating the RCI.
#> There were 43 participants in the whole dataset of which 40 (93%) could be
#> included in the analysis.
#> The outcome was hamd.
#> 
#> ── Individual Level Results
#> Category     |  n | Percent
#> ---------------------------
#> Improved     | 11 |  27.50%
#> Unchanged    | 20 |  50.00%
#> Deteriorated |  9 |  22.50%
plot(cs_results_hlm)In this tutorial, you’ve learned how to perform clinical significance distribution analysis using the cs_distribution function in R. This analysis is valuable for understanding the practical significance of changes in patient measurements. By customizing parameters and considering group-level analysis, you can gain valuable insights for healthcare and clinical research applications.