# Scale ID: 			EQ-5D-5L
# Scale Name: 		EQ-5D-5L
# TILDA Variables: 	EQ5DHealthStateScore; EQ5DMobilityScore; EQ5DSelfCareScore; EQ5DUsualActScore; EQ5DPainScore; EQ5DAnxietyScore
# Dataset:      		TILDA Waves 3,4,5,6
# Author:       		Brendan O'Maoileidgh
# Institution:  		The Irish Longitudinal Study on Ageing (TILDA)
# 
# Description:
# Generates total and subscale scoring for the EQ-5D-5L Scale.
# 
# Version:      1.0
# Date:         2026-09-01
# Language:     R
#
# Assumption: the working data frame is called `data`.

eq_items <- c("EQMobility", "EQSelfCare", "EQUsualAct", "EQPain", "EQAnxDep")

for (v in eq_items) print(table(data[[v]], useNA = "ifany"))

for (v in eq_items) {
  data[[v]][data[[v]] %in% c(-99, -812, -823, -834, -845)] <- NA_real_
}

# These are initialized to zero exactly as in the Stata source.
# Consequently, a missing source component remains at coefficient 0 unless
# it equals one of the explicitly scored levels 2-5.
data$EQ5DMobilityScore <- 0
data$EQ5DMobilityScore[data$EQMobility == 2 & !is.na(data$EQMobility)] <- 0.063
data$EQ5DMobilityScore[data$EQMobility == 3 & !is.na(data$EQMobility)] <- 0.097
data$EQ5DMobilityScore[data$EQMobility == 4 & !is.na(data$EQMobility)] <- 0.215
data$EQ5DMobilityScore[data$EQMobility == 5 & !is.na(data$EQMobility)] <- 0.344

data$EQ5DSelfCareScore <- 0
data$EQ5DSelfCareScore[data$EQSelfCare == 2 & !is.na(data$EQSelfCare)] <- 0.055
data$EQ5DSelfCareScore[data$EQSelfCare == 3 & !is.na(data$EQSelfCare)] <- 0.088
data$EQ5DSelfCareScore[data$EQSelfCare == 4 & !is.na(data$EQSelfCare)] <- 0.229
data$EQ5DSelfCareScore[data$EQSelfCare == 5 & !is.na(data$EQSelfCare)] <- 0.287

data$EQ5DUsualActScore <- 0
data$EQ5DUsualActScore[data$EQUsualAct == 2 & !is.na(data$EQUsualAct)] <- 0.049
data$EQ5DUsualActScore[data$EQUsualAct == 3 & !is.na(data$EQUsualAct)] <- 0.072
data$EQ5DUsualActScore[data$EQUsualAct == 4 & !is.na(data$EQUsualAct)] <- 0.154
data$EQ5DUsualActScore[data$EQUsualAct == 5 & !is.na(data$EQUsualAct)] <- 0.187

data$EQ5DPainScore <- 0
data$EQ5DPainScore[data$EQPain == 2 & !is.na(data$EQPain)] <- 0.068
data$EQ5DPainScore[data$EQPain == 3 & !is.na(data$EQPain)] <- 0.093
data$EQ5DPainScore[data$EQPain == 4 & !is.na(data$EQPain)] <- 0.373
data$EQ5DPainScore[data$EQPain == 5 & !is.na(data$EQPain)] <- 0.510

data$EQ5DAnxietyScore <- 0
data$EQ5DAnxietyScore[data$EQAnxDep == 2 & !is.na(data$EQAnxDep)] <- 0.080
data$EQ5DAnxietyScore[data$EQAnxDep == 3 & !is.na(data$EQAnxDep)] <- 0.202
data$EQ5DAnxietyScore[data$EQAnxDep == 4 & !is.na(data$EQAnxDep)] <- 0.535
data$EQ5DAnxietyScore[data$EQAnxDep == 5 & !is.na(data$EQAnxDep)] <- 0.646

data$EQ5DHealthStateScore <- 1 - (
  data$EQ5DMobilityScore + data$EQ5DSelfCareScore +
  data$EQ5DUsualActScore + data$EQ5DPainScore + data$EQ5DAnxietyScore
)

attr(data$EQ5DMobilityScore, "label") <- "EQ-5D-5L: Mobility Score"
attr(data$EQ5DSelfCareScore, "label") <- "EQ-5D-5L: Self Care Score"
attr(data$EQ5DUsualActScore, "label") <- "EQ-5D-5L: Usual Activities Score"
attr(data$EQ5DPainScore, "label") <- "EQ-5D-5L: Pain Score"
attr(data$EQ5DAnxietyScore, "label") <- "EQ-5D-5L: Anxiety Score"
attr(data$EQ5DHealthStateScore, "label") <- "EQ-5D-5L: Total Health State Score"
