# Scale ID: 			International Physical Activity Questionnaire
# Scale Name: 		IPAQ
# TILDA Variables: 	FRipaqmetminutes; FRexercise3; FRipaqkcal
# Dataset:      		TILDA Waves 2,3,4,5,6r
# Author:
# Institution:  		The Irish Longitudinal Study on Ageing (TILDA)
# 
# Description:
# Cleans and codes up summed score from the Depression subscale of the Composite International Diagnostic Interview.
# 
# Version:      1.0
# Date:         2026-09-01
# Language:     R
#
# Assumption: the working data frame is called `data`.

# Source frequency checks are omitted here; scoring logic is preserved.

# Match bh101 bh102* bh103 bh104* bh105 bh106*.
ipaq_raw <- unique(c(
  "bh101",
  grep("^bh102", names(data), value = TRUE),
  "bh103",
  grep("^bh104", names(data), value = TRUE),
  "bh105",
  grep("^bh106", names(data), value = TRUE)
))
ipaq_raw <- ipaq_raw[ipaq_raw %in% names(data)]

for (v in ipaq_raw) {
  data[[v]][data[[v]] %in% c(-98, -99)] <- NA_real_
  data[[v]][!is.na(data[[v]]) & data[[v]] == -1] <- 0
}

# Wave 3+ naming used by the source.
data$minswalking <- 60 * data$bh106h + data$bh106m
data$minsmoderate <- 60 * data$bh104h + data$bh104m
data$minsvigorous <- 60 * data$bh102h + data$bh102m

data$minswalking[
  is.na(data$bh106m) | is.na(data$bh106h) | is.na(data$bh105)
] <- NA_real_
data$minsmoderate[
  is.na(data$bh104m) | is.na(data$bh104h) | is.na(data$bh103)
] <- NA_real_
data$minsvigorous[
  is.na(data$bh102m) | is.na(data$bh102h) | is.na(data$bh101)
] <- NA_real_

data$minswalking[!is.na(data$minswalking) & data$minswalking > 180] <- 180
data$minsmoderate[!is.na(data$minsmoderate) & data$minsmoderate > 180] <- 180
data$minsvigorous[!is.na(data$minsvigorous) & data$minsvigorous > 180] <- 180

data$walkingmet <- 3.3 * data$minswalking * data$bh105
data$moderatemet <- 4.0 * data$minsmoderate * data$bh103
data$vigorousmet <- 8.0 * data$minsvigorous * data$bh101

# Ordinary addition: any missing activity component makes the total missing.
data$FRipaqmetminutes <-
  data$walkingmet + data$moderatemet + data$vigorousmet

attr(data$FRipaqmetminutes, "label") <-
  "IPAQ Met minutes of physical activity"
attr(data$FRipaqmetminutes, "note") <- paste(
  "Walking MET-minutes/week = 3.3 * walking minutes * walking days;",
  "Moderate MET-minutes/week = 4.0 * moderate-intensity activity minutes * moderate days;",
  "Vigorous MET-minutes/week = 8.0 * vigorous-intensity activity minutes * vigorous-intensity days;",
  "Total physical activity MET-minutes/week = sum of Walking + Moderate + Vigorous METminutes/week scores."
)

# Weight values 0-30 are set to missing in the source.
data$SR_Weight_Kilogrammes[
  !is.na(data$SR_Weight_Kilogrammes) &
  data$SR_Weight_Kilogrammes >= 0 &
  data$SR_Weight_Kilogrammes <= 30
] <- NA_real_

data$FRipaqkcal <-
  data$FRipaqmetminutes * data$SR_Weight_Kilogrammes / 60

attr(data$FRipaqkcal, "label") <-
  "IPAQ kcal equals IPAQ metminutes multiplied by self report capi weight (kg) divided by 60 kg"

# Exercise summary variable.
data$FRexercise3 <- 0

cond <- !is.na(data$minsvigorous) & data$minsvigorous > 20 &
        !is.na(data$bh101) & data$bh101 > 3
data$FRexercise3[cond] <- 1

sum_walk_mod <- data$minswalking + data$minsmoderate
sum_days_wm <- data$bh103 + data$bh105
cond <- !is.na(sum_walk_mod) & sum_walk_mod > 30 &
        !is.na(sum_days_wm) & sum_days_wm >= 5
data$FRexercise3[cond] <- 1

sum_days_all <- data$bh105 + data$bh103 + data$bh101
cond <- !is.na(sum_days_all) & sum_days_all >= 5 &
        !is.na(data$FRipaqmetminutes) & data$FRipaqmetminutes > 600
data$FRexercise3[cond] <- 1

cond <- !is.na(data$bh101) & data$bh101 > 3 &
        !is.na(data$FRipaqmetminutes) & data$FRipaqmetminutes >= 1500
data$FRexercise3[cond] <- 2

cond <- !is.na(sum_days_all) & sum_days_all >= 7 &
        !is.na(data$FRipaqmetminutes) & data$FRipaqmetminutes > 3000
data$FRexercise3[cond] <- 2

data$FRexercise3[is.na(data$FRipaqmetminutes)] <- NA_real_

attr(data$FRexercise3, "label") <- "Physical Activity"
attr(data$FRexercise3, "labels") <- c("Low" = 0, "Moderate" = 1, "High" = 2)
attr(data$FRexercise3, "note") <-
  "Exercise in three groups reported according the IPAQ (short form) scoring protocol."

print(table(data$FRexercise3, useNA = "ifany"))
