International Physical Activity Questionnaire (IPAQ)

Background

The Geriatric Depression Scale (GDS) is an instrument designed specifically for rating depression in the elderly. It can be administrated to healthy, medically ill, and mild to moderately cognitively impaired older adults. As a general rule, GDS is administrated in LCBC to older adults with a lower cut off around 60 years. 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 30 questions tapping into a wide variety of topics relevant to depression, including cognitive complaints, motivation, thoughts about the past and the future, self-image, and mood itself. The answers should be based the participants’ feelings throughout the last week.

Twenty of the questions indicate the presence of depression when answered positively, while the ten remaining indicate depression when answered negatively (see scoring instructions below). The questionnaire is scored accordingly, giving one point for each statement that affirms a depressive symptom. The sum of these scores yields one total score, with a possible range between 0 and 30.

Rationale

The public health burden of a sedentary lifestyle has been recognized globally, but until recently, the prevalence and impact of the problem has not been studied in a uniform and systematic fashion. The questionnaire is the most feasible instrument for measuring physical activity in large groups or populations. However, many of the existing instruments are not comparable in the type of activities surveyed (i.e., leisure-time activities only) and format for data collection.

In response to the global demand for comparable and valid measures of physical activity within and between countries, IPAQ was developed for surveillance activities and to guide policy development related to health-enhancing physical activity across various life domains.

Scoring

The GDS is quite straight forward in its format, a series of 30 questions that take a yes or no answer. This binary coding makes it quite easy to work with. Several of the questions, however, are formulated in such a way that they require a reversal of the coding before the total score can be summed. The questions which require reversal of coding are, 01, 05, 07, 09, 15, 19, 21, 27, 29, 30, meaning answering “yes” to these should be altered to 0, and “no” altered to 1, before calculating the sum score. The total GDS score is after reversal, a simple addition of all the answers into a single score.

One point is given for any “No” answered to the following questions:
1, 5, 7, 9, 15, 19, 21, 27, 29 and 30

and one point is given for every “Yes” answered on the following questions:
2, 3, 4, 6, 8, 10, 11, 12, 13, 14, 16, 17, 18, 20, 22, 23, 24, 25, 26, 28

Depression categories

There are 3 categories of severity for the GDS total score. Below or equal to 9 is “Normal”, above 19 is “Severe depression”, and the remaining fall within “Mild depression”.

GDS score Depression category
0-9 Normal
10-19 Mild depressive
20-30 Severe depressive

Using the ipaq functions

Altering times

First important notice is on how your time-data is coded. The IPAQ has three important questions on the number of minutes spent doing something. This can be recorded in many ways, and some might have given participants options to answer in specific ways to reduce inaccurate data. In LCBC we have online solutions for data collection, and for time questions we have forced an HH:MM format to make sure respondents are consistent in the way they answer. In order to use these with the remaining ipaq calculations, a conversion to minutes is necessary. The ipaq_time_atler function will alter the columns from HH:MM to minutes. If you have any NA in the time data, you will get a warning about not being able to parse the data, this is expected and wanted behaviour, but you may proceed, the METs will not be calculated where data is missing.

library(questionnaires)
library(dplyr)

dat <- data.frame(
  time_1  = c("02:34", "09:33", "01:14"),
  time_2  = c("00:55", NA, "00:30")
)

dat
#>   time_1 time_2
#> 1  02:34  00:55
#> 2  09:33   <NA>
#> 3  01:14  00:30

ipaq_time_alter(dat, cols = c(time_1, time_2))
#>   time_1 time_2
#> 1    154     55
#> 2    573     NA
#> 3     74     30

MET category scores

To calculate the MET score for an individual MET category the ipaq_compute_met is what you need. This function takes a vector of minutes, days and the MET-factor you want to apply. Default MET-factor can be found in the ipaq_mets() function.

ipaq_mets()
#> $light
#> [1] 3.3
#> 
#> $moderate
#> [1] 4
#> 
#> $vigorous
#> [1] 8

The different MET categories have different questions in the IPAQ, and should be calculated separately before combined to the total score.

vig_data <- data.frame(
 ipaq_vig_mins = c(60, 20, 60, 25, 90, 20, 0, 75, 60, 30),
 ipaq_vig_days = c(1, 3, 2, 5, 6, 1, 1, 2, 2, 4)
)

vig_data
#>    ipaq_vig_mins ipaq_vig_days
#> 1             60             1
#> 2             20             3
#> 3             60             2
#> 4             25             5
#> 5             90             6
#> 6             20             1
#> 7              0             1
#> 8             75             2
#> 9             60             2
#> 10            30             4

ipaq_compute_met(vig_data$ipaq_vig_mins, 
                 vig_data$ipaq_vig_days, 
                 met = 8.0)
#>  [1]  480  480  960 1000 4320  160    0 1200  960  960

The total MET score can be manually computed using the ipaq_compute_sum, where one supplies a vector for each of the three MET categories, containing the pre-calculates MET scores for the categories.

light = c(1300, 300)
moderate = c(200, 400)
vigurous = c(0, 1300)

ipaq_compute_sum(vigurous , moderate, light)
#> [1] 1500 2000

Finally, you can calculate everything in one go using the ipaq_compute function. This function has many arguments, as the minutes and days of each category (2x3) must be specified, and also the mets you want applied must be supplied. The easiest way to alter the default mets is by using the ipaq_mets function to alter them. The function takes an entire data frame with all columns of data necessary to compute the MET score.


data <- data.frame(
  ipaq_1a = c(NA, "No", "Yes", NA, NA, NA, NA, NA, NA, "Yes"), 
  ipaq_1b = c(0, NA, 3, 3, 0, 2, 4, 3, 0, 3), 
  ipaq_2 = c("00:00", "", "01:00", "01:00", "00:00", "03:30", "01:00", "00:25", "00:00", "00:45"), 
  ipaq_3a = c(NA, "Yes", "Yes", NA, NA, NA, NA, NA, NA, "No"), 
  ipaq_3b = c(1, 3, 1, 3, 1, 4, 0, 5, 4, NA), 
  ipaq_4 = c("00:30", "01:30", "01:00", "01:00", "01:00", "02:00", "00:00", "00:15", "03:00", ""), 
  ipaq_5a = c(NA, "Yes", "Yes", NA, NA, NA, NA, NA, NA, "Yes"), 
  ipaq_5b = c(7, 3, 7, 7, 3, 3, 0, 5, 7, 4), 
  ipaq_6 = c("01:00", "00:20", "01:00", "00:25", "01:30", "00:20", "00:00", "01:15",  "01:00", "00:30"), 
  ipaq_7 = c("05:00", "12:00", "05:00", "07:00", "00:18", "05:00", "00:00", "08:00", "04:00", "08:00"), 
  ipaq_8a = c(5, NA, NA, 4, 4, 6, 5, 4, 6, NA),
  ipaq_8b = c(5, NA, NA, 4, NA, 6, 5, 4, 6, NA), 
  ipaq_8c = c(5, NA, NA, 5, 3, 5, 5, 3, 6, NA)
)

data
#>    ipaq_1a ipaq_1b ipaq_2 ipaq_3a ipaq_3b ipaq_4 ipaq_5a ipaq_5b ipaq_6 ipaq_7
#> 1     <NA>       0  00:00    <NA>       1  00:30    <NA>       7  01:00  05:00
#> 2       No      NA            Yes       3  01:30     Yes       3  00:20  12:00
#> 3      Yes       3  01:00     Yes       1  01:00     Yes       7  01:00  05:00
#> 4     <NA>       3  01:00    <NA>       3  01:00    <NA>       7  00:25  07:00
#> 5     <NA>       0  00:00    <NA>       1  01:00    <NA>       3  01:30  00:18
#> 6     <NA>       2  03:30    <NA>       4  02:00    <NA>       3  00:20  05:00
#> 7     <NA>       4  01:00    <NA>       0  00:00    <NA>       0  00:00  00:00
#> 8     <NA>       3  00:25    <NA>       5  00:15    <NA>       5  01:15  08:00
#> 9     <NA>       0  00:00    <NA>       4  03:00    <NA>       7  01:00  04:00
#> 10     Yes       3  00:45      No      NA            Yes       4  00:30  08:00
#>    ipaq_8a ipaq_8b ipaq_8c
#> 1        5       5       5
#> 2       NA      NA      NA
#> 3       NA      NA      NA
#> 4        4       4       5
#> 5        4      NA       3
#> 6        6       6       5
#> 7        5       5       5
#> 8        4       4       3
#> 9        6       6       6
#> 10      NA      NA      NA

data %>% 
  ipaq_time_alter() %>% 
  # Keeping only calculated values for show, you like want this to be TRUE (default)
  ipaq_compute(keep_all = FALSE)
#> # A tibble: 10 × 5
#> # Rowwise: 
#>    ipaq_met_vigorous ipaq_met_moderate ipaq_met_light ipaq_met ipaq_coded
#>                <dbl>             <dbl>          <dbl>    <dbl> <chr>     
#>  1                NA               120          1386     1506  low       
#>  2                NA              1080           198     1278  low       
#>  3              1440               240          1386     3066  high      
#>  4              1440               720           578.    2738. moderate  
#>  5                NA               240           891     1131  low       
#>  6              3360              1920           198     5478  high      
#>  7              1920                NA            NA     1920  high      
#>  8               600               300          1238.    2138. moderate  
#>  9                NA              2880          1386     4266  high      
#> 10              1080                NA           396     1476  moderate

References

The GDS is quite straight forward in its format, a series of 30 questions that take a yes or no answer. This binary coding makes it quite easy to work with. Several of the questions, however, are formulated in such a way that they require a reversal of the coding before the total score can be summed. The questions which require reversal of coding are, 01, 05, 07, 09, 15, 19, 21, 27, 29, 30, meaning answering “yes” to these should be altered to 0, and “no” altered to 1, before calculating the sum score. The total GDS score is after reversal, a simple addition of all the answers into a single score.

One point is given for any “No” answered to the following questions:
1, 5, 7, 9, 15, 19, 21, 27, 29 and 30

and one point is given for every “Yes” answered on the following questions:
2, 3, 4, 6, 8, 10, 11, 12, 13, 14, 16, 17, 18, 20, 22, 23, 24, 25, 26, 28

Depression categories

There are 3 categories of severity for the GDS total score. Below or equal to 9 is “Normal”, above 19 is “Severe depression”, and the remaining fall within “Mild depression”.

GDS score Depression category
0-9 Normal
10-19 Mild depressive
20-30 Severe depressive