setwd("C:/Users/irina/Documents/DND/EOHI/eohi2")

options(scipen = 999)

df <- read.csv("eohi2.csv")
library(psych)
library(dplyr)
library(knitr)

# Your named variable sets (replace df with your actual dataframe name)
present_pref_vars <- c("present_pref_read", "present_pref_music", "present_pref_tv", "present_pref_nap", "present_pref_travel")
past_5_pref_vars  <- c("past_5_pref_read", "past_5_pref_music", "past_5_pref_TV", "past_5_pref_nap", "past_5_pref_travel")
past_10_pref_vars <- c("past_10_pref_read", "past_10_pref_music", "past_10_pref_TV", "past_10_pref_nap", "past_10_pref_travel")
fut_5_pref_vars   <- c("fut_5_pref_read", "fut_5_pref_music", "fut_5_pref_TV", "fut_5_pref_nap", "fut_5_pref_travel")
fut_10_pref_vars  <- c("fut_10_pref_read", "fut_10_pref_music", "fut_10_pref_TV", "fut_10_pref_nap", "fut_10_pref_travel")

present_pers_vars <- c("present_pers_extravert", "present_pers_critical", "present_pers_dependable", "present_pers_anxious", "present_pers_complex")
past_5_pers_vars  <- c("past_5_pers_extravert", "past_5_pers_critical", "past_5_pers_dependable", "past_5_pers_anxious", "past_5_pers_complex")
past_10_pers_vars <- c("past_10_pers_extravert", "past_10_pers_critical", "past_10_pers_dependable", "past_10_pers_anxious", "past_10_pers_complex")
fut_5_pers_vars   <- c("fut_5_pers_extravert", "fut_5_pers_critical", "fut_5_pers_dependable", "fut_5_pers_anxious", "fut_5_pers_complex")
fut_10_pers_vars  <- c("fut_10_pers_extravert", "fut_10_pers_critical", "fut_10_pers_dependable", "fut_10_pers_anxious", "fut_10_pers_complex")

present_val_vars <- c("present_val_obey", "present_val_trad", "present_val_opinion", "present_val_performance", "present_val_justice")
past_5_val_vars  <- c("past_5_val_obey", "past_5_val_trad", "past_5_val_opinion", "past_5_val_performance", "past_5_val_justice")
past_10_val_vars <- c("past_10_val_obey", "past_10_val_trad", "past_10_val_opinion", "past_10_val_performance", "past_10_val_justice")
fut_5_val_vars   <- c("fut_5_val_obey", "fut_5_val_trad", "fut_5_val_opinion", "fut_5_val_performance", "fut_5_val_justice")
fut_10_val_vars  <- c("fut_10_val_obey", "fut_10_val_trad", "fut_10_val_opinion", "fut_10_val_performance", "fut_10_val_justice")

all_scales <- list(
  "Present_Preferences" = present_pref_vars,
  "Past5_Preferences"   = past_5_pref_vars,
  "Past10_Preferences"  = past_10_pref_vars,
  "Fut5_Preferences"    = fut_5_pref_vars,
  "Fut10_Preferences"   = fut_10_pref_vars,
  "Present_Personality" = present_pers_vars,
  "Past5_Personality"   = past_5_pers_vars,
  "Past10_Personality"  = past_10_pers_vars,
  "Fut5_Personality"    = fut_5_pers_vars,
  "Fut10_Personality"   = fut_10_pers_vars,
  "Present_Values"      = present_val_vars,
  "Past5_Values"        = past_5_val_vars,
  "Past10_Values"       = past_10_val_vars,
  "Fut5_Values"         = fut_5_val_vars,
  "Fut10_Values"        = fut_10_val_vars
)

# Reliability analysis loop
alpha_results <- list()
summary_tbl <- data.frame(
  Scale = character(),
  RawAlpha = numeric(),
  StdAlpha = numeric(),
  AvgItemRestCor = numeric()
)

for(scale_name in names(all_scales)) {
  vars <- all_scales[[scale_name]]
  scale_data <- df %>% select(all_of(vars))
  
  # Only run if there is more than one column present
  if(ncol(scale_data) > 1) {
    alpha_out <- psych::alpha(scale_data, check.keys = TRUE)
    alpha_results[[scale_name]] <- alpha_out
    
    # Print full output for diagnostics
    cat("\n----------", scale_name, "----------\n")
    print(alpha_out$total)
    print(alpha_out$item.stats)
    print(alpha_out$alpha.drop)
    
    # Collect summary stats for table
    raw_alpha <- round(alpha_out$total$raw_alpha, 3)
    std_alpha <- round(alpha_out$total$std.alpha, 3)
    avg_ir <- round(mean(alpha_out$item.stats$r.drop, na.rm=TRUE), 3)
    summary_tbl <- rbind(summary_tbl, data.frame(
      Scale = scale_name,
      RawAlpha = raw_alpha,
      StdAlpha = std_alpha,
      AvgItemRestCor = avg_ir
    ))
  }
}

# Create detailed alpha if dropped table
alpha_dropped_tbl <- data.frame(
  Scale = character(),
  Item = character(),
  AlphaIfDropped = numeric(),
  stringsAsFactors = FALSE
)

for(scale_name in names(all_scales)) {
  vars <- all_scales[[scale_name]]
  scale_data <- df %>% select(all_of(vars))
  
  if(ncol(scale_data) > 1) {
    alpha_out <- alpha_results[[scale_name]]
    
    # Extract alpha if dropped for each item
    for(i in 1:length(vars)) {
      item_name <- vars[i]
      alpha_dropped <- alpha_out$alpha.drop$raw_alpha[i]
      
      alpha_dropped_tbl <- rbind(alpha_dropped_tbl, data.frame(
        Scale = scale_name,
        Item = item_name,
        AlphaIfDropped = round(alpha_dropped, 4),
        stringsAsFactors = FALSE
      ))
    }
  }
}

# Summary table for reporting
cat("\n=== SUMMARY TABLE ===\n")
print(summary_tbl)

cat("\n=== ALPHA IF DROPPED TABLE ===\n")
print(alpha_dropped_tbl)

# Export tables to CSV
#write.csv(summary_tbl, "reliability_summary_table.csv", row.names = FALSE)
#write.csv(alpha_dropped_tbl, "alpha_if_dropped_table.csv", row.names = FALSE)
