# /******************************************************************
# Scale ID:          DISAB
# Scale Name:        DIS - Disability, functional impairment
# TILDA Variables:   DISadl; DISiadl; DISimpairments; DISdisab3; DISdisab4
# 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`.
#
# Note:
# The Stata source creates `disab4b` but then labels/renames `disab4`.
# This R version uses `disab4`, which appears to be the intended variable.
# ******************************************************************/

# Variable lists
impairment_vars <- sprintf("fl001_%02d", 1:11)
adl_vars        <- sprintf("fl002_%02d", 1:6)
iadl_vars       <- sprintf("fl025_%02d", 1:6)

# Stata egen rowtotal() treats missing component values as zero.
# rowSums(..., na.rm = TRUE) reproduces that behaviour, including
# returning 0 when all component items are missing.
data$impairments <- rowSums(data[impairment_vars], na.rm = TRUE)
data$adl         <- rowSums(data[adl_vars], na.rm = TRUE)

# Retained to mirror the Stata source exactly.
data$adl[data$impairments == 0] <- 0

data$iadl <- rowSums(data[iadl_vars], na.rm = TRUE)

# Disability: 3 categories (disab3)
data$disab3 <- NA_real_
data$disab3[!is.na(data$iadl) & !is.na(data$adl)] <- 0
data$disab3[!is.na(data$iadl) & data$iadl > 0] <- 1
data$disab3[!is.na(data$adl)  & data$adl  > 0] <- 2

attr(data$disab3, "label") <- "Disability"
attr(data$disab3, "labels") <- c(
  "Not disabled" = 0,
  "IADL disability only" = 1,
  "Any ADL disability" = 2
)
attr(data$disab3, "note") <- paste(
  "Disability in three groups, puts those with both IADL and ADL",
  "into the ADL group. Assumes an ordinality which probably does not hold."
)

print(table(data$disab3, useNA = "ifany"))

# Disability: 4 categories (disab4)
data$disab4 <- NA_real_
data$disab4[!is.na(data$iadl) & !is.na(data$adl)] <- 0
data$disab4[!is.na(data$iadl) & data$iadl > 0] <- 1
data$disab4[!is.na(data$adl) & data$adl > 0] <-
  data$disab4[!is.na(data$adl) & data$adl > 0] + 2

attr(data$disab4, "label") <- "Disability"
attr(data$disab4, "labels") <- c(
  "Not disabled" = 0,
  "IADL disability only" = 1,
  "ADL disability only" = 2,
  "IADL and ADL disability" = 3
)

print(table(data$disab4, useNA = "ifany"))

# Variable labels and notes
attr(data$impairments, "label") <- "Number of physical limitations (from fl001)"
attr(data$impairments, "note")  <- "uses list of impairments in fl001"

attr(data$adl, "label") <- "Number of ADL impairments"
attr(data$adl, "note")  <- "From list in q fl002"

attr(data$iadl, "label") <- "Number of IADL impairments"
attr(data$iadl, "note")  <- "From list in q fl025"

# Rename to TILDA scale variable names
names(data)[names(data) == "iadl"]        <- "DISiadl"
names(data)[names(data) == "adl"]         <- "DISadl"
names(data)[names(data) == "impairments"] <- "DISimpairments"
names(data)[names(data) == "disab3"]      <- "DISdisab3"
names(data)[names(data) == "disab4"]      <- "DISdisab4"
