Beck Depression Inventory-II (BDI-II) is one of the most widely used instruments for measuring the severity of self-reported depression in adolescents and adults. As a general rule, BDI-II is administrated in LCBC to adults with an upper cut off around 60 years, while depression in older adults is assessed with the Geriatric Depression Scale (GDS). However, please consult the instructions for each project, as this guideline has been implemented at different time points across the projects.The questionnaire consists of 21 statements, each reflecting a depression symptom or attitude which could be rated from 0 to 3 in terms of intensity. The answers should be based the participant´s feelings throughout the last week, including the day of filling out the form. The sum of the scores of the items (0-3) yields one total score, with a possible range between 0 and 62.

Interpretation of the scores (Total scores)

ScoreCategory
0-10These ups and downs are considered to be normal
11-16Mild mood disturbance
17 – 20Borderline clinical disturbance
21 – 30Moderate depression
31 – 40Severe depression
Above 40Extreme depression

If a participant scores >= 17, we should consider contacting the participant to follow up on this and offer making a note for the participant's doctor describing the scores.

Data requirements

Column names

By default, the functions assume that columns have names in the manner of bdi_XX where XX is a zero-padded (i.e. zero in front of numbers below 9, eg. 09) question number of the inventory. You may have column names in another format, but in that case you will need to supply to the functions the names of those columns using tidy-selectors (see the tidyverse packages for this). The columns should adhere to some naming logic that is easy to specify.

Data values

The values in the columns should be the item number of the question that was answered (i.e. 0, 1, 2, or 3). The inventory allows subjects to respond to several options per question, in the case of this, the mean of the responded alternatives should be applied.

References

Aaron T.Beck, Robert A.Steer, Margery G.Carbin (1988) Psychometric properties of the Beck Depression Inventory: Twenty-five years of evaluation, Clinical Psychology Review, Volume 8, Issue 1, Pages 77-100, doi: 10.1016/0272-7358(88)90050-5

Robert A.Steer, David J.Rissmiller, Aaron T.Beck (2000) Use of the Beck Depression Inventory-II with depressed geriatric inpatients Behaviour Research and Therapy Volume 38, Issue 3,Pages 311-318, doi: https://doi.org/10.1016/S0005-7967(99)00068-6

Groth-Marnat G. (1990). The handbook of psychological assessment (2nd ed.). New York: John Wiley & Sons.

bdi_compute(
  data,
  cols = matches("bdi_[0-9][0-9]$"),
  max_missing = 0,
  prefix = "bdi_",
  keep_all = TRUE
)

bdi_compute_sum(data, cols = matches("bdi_[0-9][0-9]$"), max_missing = 0)

bdi_factorise(bdi_sum)

Arguments

data

Data containing BDI data

cols

Columns that contain BDI data

max_missing

Maximum number of components allowed to be missing. Defaults to "0", and will return NA if missing any question. If set to NULL any missing component counts as 0, meaning if all BDI components are missing, the sum is still 0, not NA.

prefix

string to prefix column names of computed values

keep_all

logical, append to data.frame

bdi_sum

Sum of BDI questions, as summed by bdi_compute_sum

Value

data.frame

Functions

  • bdi_compute_sum(): Compute the BDI sum based on a data.frame containing the BDI data. Returns a numeric vector.

  • bdi_factorise(): Create a factor based on the BDI sum, with the cut-off points as described in original paper.

Examples

# Example of treatment of missing values
library(dplyr)
#> 
#> Attaching package: ‘dplyr’
#> The following objects are masked from ‘package:stats’:
#> 
#>     filter, lag
#> The following objects are masked from ‘package:base’:
#> 
#>     intersect, setdiff, setequal, union
library(questionnaires)
data <- tibble(
bdi_01 = c(1, NA_real_, NA_real_, 2, 1),
bdi_02 = c(1, 1, NA_real_, 2, NA_real_)
)

# Row with all components missing, gets sum 0
  bind_cols(data,
      bdi_sum = bdi_compute_sum(data))
#> # A tibble: 5 × 3
#>   bdi_01 bdi_02 bdi_sum
#>    <dbl>  <dbl>   <dbl>
#> 1      1      1       2
#> 2     NA      1      NA
#> 3     NA     NA      NA
#> 4      2      2       4
#> 5      1     NA      NA

# Do not allow any missing values
  bind_cols(data,
      bdi_sum = bdi_compute_sum(data, max_missing = 0))
#> # A tibble: 5 × 3
#>   bdi_01 bdi_02 bdi_sum
#>    <dbl>  <dbl>   <dbl>
#> 1      1      1       2
#> 2     NA      1      NA
#> 3     NA     NA      NA
#> 4      2      2       4
#> 5      1     NA      NA
      
# Allow one missing value
  bind_cols(data,
      bdi_sum = bdi_compute_sum(data, max_missing = 2))
#> # A tibble: 5 × 3
#>   bdi_01 bdi_02 bdi_sum
#>    <dbl>  <dbl>   <dbl>
#> 1      1      1       2
#> 2     NA      1       1
#> 3     NA     NA       0
#> 4      2      2       4
#> 5      1     NA       1