library(tidyverse)
if (!requireNamespace("boot", quietly = TRUE)) install.packages("boot")
library(boot)

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

# Read data
data <- read.csv("exp1.csv")

# Select variables ending exactly with _T or _F
df <- data %>% select(matches("(_T|_F)$"))

# Remove demo_f variable (if present)
df <- df %>% select(-any_of("demo_f"))

str(df)

# Coerce to numeric where possible (without breaking non-numeric)
df_num <- df %>%
  mutate(across(everything(), ~ suppressWarnings(as.numeric(.))))

# Helper: bootstrap BCA CI for proportion correct
compute_prop_ci <- function(x, R = 1000, conf = 0.95) {
  x <- suppressWarnings(as.numeric(x))
  x <- x[!is.na(x)]
  n_total <- length(x)
  if (n_total == 0) {
    return(list(n_total = 0L, n_correct = NA_integer_, prop = NA_real_, ci_lower = NA_real_, ci_upper = NA_real_))
  }
  x01 <- ifelse(x == 1, 1, 0)
  n_correct <- sum(x01)
  prop <- n_correct / n_total
  stat <- function(data, indices) mean(data[indices])
  b <- boot::boot(data = x01, statistic = stat, R = R)
  ci <- tryCatch(boot::boot.ci(b, conf = conf, type = "bca"), error = function(e) NULL)
  if (is.null(ci) || is.null(ci$bca)) {
    lower <- NA_real_
    upper <- NA_real_
  } else {
    lower <- ci$bca[4]
    upper <- ci$bca[5]
  }
  list(n_total = n_total, n_correct = n_correct, prop = prop, ci_lower = lower, ci_upper = upper)
}

# Compute count, proportion correct, and 95% BCA CI per variable
descriptives <- purrr::imap_dfr(df_num, function(col, name) {
  res <- compute_prop_ci(col, R = 1000, conf = 0.95)
  tibble(
    variable = name,
    n_total = res$n_total,
    n_correct = res$n_correct,
    prop_correct = round(res$prop, 5),
    ci_lower = round(res$ci_lower, 5),
    ci_upper = round(res$ci_upper, 5)
  )
}) %>%
  arrange(variable)

# View
print(descriptives, n = Inf)

# Optionally save
# readr::write_csv(descriptives, "exp1_TF_descriptives.csv")