eohi/.history/eohi2/reliability analysis_20251028141504.r
2025-12-23 15:47:09 -05:00

130 lines
6.3 KiB
R
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

setwd("C:/Users/irina/Documents/DND/EOHI/eohi2")
options(scipen = 999)
df <- read.csv("eohi2.csv")
library(psych)
library(dplyr)
library(knitr)
# CORRECTED variable sets with exact names from your data
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
)
# Verify all variables exist in dataset
cat("Checking variable availability:\n")
for(scale_name in names(all_scales)) {
vars <- all_scales[[scale_name]]
missing_vars <- vars[!vars %in% names(df)]
if(length(missing_vars) > 0) {
cat("MISSING in", scale_name, ":", paste(missing_vars, collapse=", "), "\n")
} else {
cat("✓ All variables found for", scale_name, "\n")
}
}
# Reliability analysis
reliability_results <- data.frame(Scale=character(), Alpha=double(), Omega=double(), stringsAsFactors=FALSE)
for(scale_name in names(all_scales)) {
vars <- all_scales[[scale_name]]
# Check if all variables exist
missing_vars <- vars[!vars %in% names(df)]
if(length(missing_vars) > 0) {
cat("Skipping", scale_name, "- missing variables:", paste(missing_vars, collapse=", "), "\n")
next
}
dat <- df[, vars]
# Calculate Alpha
alpha_val <- tryCatch({
alpha_result <- psych::alpha(dat, check.keys = TRUE)
alpha_result$total$raw_alpha
}, error = function(e) {
cat("Alpha calculation failed for", scale_name, ":", e$message, "\n")
NA
})
# Calculate Omega with proper settings
omega_val <- tryCatch({
omega_result <- psych::omega(dat, nfactors = 1, check.keys = TRUE)
omega_result$omega.tot
}, error = function(e) {
cat("Omega calculation failed for", scale_name, ":", e$message, "\n")
NA
})
reliability_results <- rbind(reliability_results,
data.frame(Scale = scale_name,
Alpha = alpha_val,
Omega = omega_val))
}
print(kable(reliability_results, digits = 3, caption = "Internal Consistency (Alpha & Omega)"))
# Test-retest reliability
df$pref_present <- rowMeans(df[, present_pref_vars], na.rm = TRUE)
df$pref_past5 <- rowMeans(df[, past_5_pref_vars], na.rm = TRUE)
df$pref_past10 <- rowMeans(df[, past_10_pref_vars], na.rm = TRUE)
df$pref_fut5 <- rowMeans(df[, fut_5_pref_vars], na.rm = TRUE)
df$pref_fut10 <- rowMeans(df[, fut_10_pref_vars], na.rm = TRUE)
pref_mat <- df[, c("pref_present", "pref_past5", "pref_past10", "pref_fut5", "pref_fut10")]
df$pers_present <- rowMeans(df[, present_pers_vars], na.rm = TRUE)
df$pers_past5 <- rowMeans(df[, past_5_pers_vars], na.rm = TRUE)
df$pers_past10 <- rowMeans(df[, past_10_pers_vars], na.rm = TRUE)
df$pers_fut5 <- rowMeans(df[, fut_5_pers_vars], na.rm = TRUE)
df$pers_fut10 <- rowMeans(df[, fut_10_pers_vars], na.rm = TRUE)
pers_mat <- df[, c("pers_present", "pers_past5", "pers_past10", "pers_fut5", "pers_fut10")]
df$val_present <- rowMeans(df[, present_val_vars], na.rm = TRUE)
df$val_past5 <- rowMeans(df[, past_5_val_vars], na.rm = TRUE)
df$val_past10 <- rowMeans(df[, past_10_val_vars], na.rm = TRUE)
df$val_fut5 <- rowMeans(df[, fut_5_val_vars], na.rm = TRUE)
df$val_fut10 <- rowMeans(df[, fut_10_val_vars], na.rm = TRUE)
val_mat <- df[, c("val_present", "val_past5", "val_past10", "val_fut5", "val_fut10")]
# Calculate ICC
icc_pref <- psych::ICC(pref_mat)
icc_pers <- psych::ICC(pers_mat)
icc_val <- psych::ICC(val_mat)
print(kable(icc_pref$results["Single_raters_absolute", , drop = FALSE], caption = "TestRetest ICC: Preferences"))
print(kable(icc_pers$results["Single_raters_absolute", , drop = FALSE], caption = "TestRetest ICC: Personality"))
print(kable(icc_val$results["Single_raters_absolute", , drop = FALSE], caption = "TestRetest ICC: Values"))