# /******************************************************************
# Scale ID:          CAGE
# Scale Name:        C (Cut Down) A (Annoyed) G (Guilty) E (Eye-opener)
# TILDA Variables:   BEHcage; BEHcage2
# Dataset:           TILDA Waves 1-7
# Author:
# Institution:       The Irish Longitudinal Study on Ageing (TILDA)
#
# Description:
# Creates disability variables from functional impairments, activities of daily living, and instrumental activities of daily living.
#
# Version:           1.0
# Date:              2026-09-01
# Language:          R
#
# Assumption:
# The working data frame is called `data`.
#
# This translation preserves the Stata logic as written.
# ******************************************************************/

cage_vars <- c("SCQCAGE1", "SCQCAGE2", "SCQCAGE3", "SCQCAGE4")

# Recode No from 2 to 0 and not answered (-99 or 4) to missing
# for CAGE variables so they can be added up.
for (var in cage_vars) {
  rvar <- paste0(var, "_r")
  data[[rvar]] <- data[[var]]

  data[[rvar]][data[[rvar]] %in% c(-99, 4)] <- NA
  data[[rvar]][data[[rvar]] == 2] <- 0

  attr(data[[rvar]], "labels") <- c("No" = 0, "Yes" = 1)
}

cage_r_vars <- paste0(cage_vars, "_r")

# Number of missing CAGE items
data$miss_cage <- rowSums(is.na(data[cage_r_vars]))
print(table(data$miss_cage, useNA = "ifany"))

# Number of -1 values across the CAGE items
data$na_cage <- rowSums(data[cage_r_vars] == -1, na.rm = TRUE)
print(table(data$na_cage, useNA = "ifany"))

# Item distributions
for (var in cage_r_vars) {
  print(table(data[[var]], useNA = "ifany"))
}

# CAGE total.
# This mirrors Stata arithmetic addition, so any true missing value
# in one of the four recoded items makes BEHcage missing.
data$BEHcage <- data$SCQCAGE1_r +
                data$SCQCAGE2_r +
                data$SCQCAGE3_r +
                data$SCQCAGE4_r

attr(data$BEHcage, "label") <- "CAGE alcohol scale"
print(table(data$BEHcage, useNA = "ifany"))

# Drop temporary recoded item variables
data[cage_r_vars] <- NULL

# Always have -1 for all 4 items - coded to -1 for the scale
# (missing by design)
data$BEHcage[data$BEHcage %in% c(-4, -3)] <- -1
print(table(data$BEHcage, useNA = "ifany"))

# Set -1 to 0 if no to ever drinking or no to drinking in last 6 months
idx_route <- !is.na(data$BEHcage) &
             data$BEHcage == -1 &
             (
               (!is.na(data$SCQAlcoHis1) & data$SCQAlcoHis1 == 2) |
               (!is.na(data$SCQAlcoHis2) & data$SCQAlcoHis2 == 2)
             )

data$BEHcage[idx_route] <- 0
print(table(data$BEHcage, useNA = "ifany"))

attr(data$BEHcage, "note") <- "CAGE total - excludes those with any missing on the CAGE"


# ******************************************************************
# Alcohol problem
# ******************************************************************

data$BEHcage2 <- NA_real_
data$BEHcage2[!is.na(data$BEHcage)] <- 0
data$BEHcage2[data$BEHcage %in% c(2, 3, 4)] <- 1

attr(data$BEHcage2, "label") <- "Alcohol problem"
attr(data$BEHcage2, "labels") <- c("No" = 0, "Yes" = 1)

print(table(data$BEHcage2, useNA = "ifany"))

attr(data$BEHcage2, "note") <- "Score of 2 or more on the CAGE questionnaire"

# Did not do SCQ
data$BEHcage[!is.na(data$in_scq) & data$in_scq == 0] <- NA
data$BEHcage2[!is.na(data$in_scq) & data$in_scq == 0] <- NA
