--- title: "Mixed ANOVA Analysis for Domain Means" author: "Irina" date: "`r Sys.Date()`" output: html_document: toc: true toc_float: true code_folding: hide theme: flatly highlight: tango fig_width: 10 fig_height: 6 --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE) ``` # Introduction This analysis examines domain-level differences in mean scores across time periods using a mixed ANOVA design. The analysis focuses on four domains (Preferences, Personality, Values, Life) across two time periods (Past, Future) with a between-subjects factor (TEMPORAL_DO). # Data Preparation and Setup ```{r libraries} library(tidyverse) library(ez) library(car) library(nortest) # For normality tests library(emmeans) # For post-hoc comparisons library(purrr) # For map functions library(effsize) # For Cohen's d calculations library(ggplot2) # For plotting options(scipen = 999) options(contrasts = c("contr.sum", "contr.poly")) setwd("C:/Users/irina/Documents/DND/EOHI/eohi1") ``` ```{r data-loading} # Read the data data <- read.csv("exp1.csv") required_vars <- c("NPast_mean_pref", "NPast_mean_pers", "NPast_mean_val", "NPast_mean_life", "NFut_mean_pref", "NFut_mean_pers", "NFut_mean_val", "NFut_mean_life") # Define domain mapping domain_mapping <- data.frame( variable = c("NPast_mean_pref", "NPast_mean_pers", "NPast_mean_val", "NPast_mean_life", "NFut_mean_pref", "NFut_mean_pers", "NFut_mean_val", "NFut_mean_life"), time = c(rep("Past", 4), rep("Future", 4)), domain = rep(c("Preferences", "Personality", "Values", "Life"), 2), stringsAsFactors = FALSE ) ``` ```{r data-reshaping} long_data <- data %>% select(pID, ResponseId, TEMPORAL_DO, all_of(required_vars)) %>% pivot_longer( cols = all_of(required_vars), names_to = "variable", values_to = "MEAN_DIFFERENCE" ) %>% left_join(domain_mapping, by = "variable") %>% # Convert to factors with proper levels (note: columns are 'time' and 'domain' from mapping) mutate( TIME = factor(time, levels = c("Past", "Future")), DOMAIN = factor(domain, levels = c("Preferences", "Personality", "Values", "Life")), pID = as.factor(pID), TEMPORAL_DO = as.factor(TEMPORAL_DO) ) %>% # Select final columns and remove any rows with missing values select(pID, ResponseId, TEMPORAL_DO, TIME, DOMAIN, MEAN_DIFFERENCE) %>% filter(!is.na(MEAN_DIFFERENCE)) # Create clean dataset for analysis (fixing the reference issue) long_data_clean <- long_data ``` # Descriptive Statistics ## Overall Descriptive Statistics by TIME and DOMAIN ```{r descriptive-stats} desc_stats <- long_data %>% group_by(TIME, DOMAIN) %>% summarise( n = n(), mean = round(mean(MEAN_DIFFERENCE, na.rm = TRUE), 5), variance = round(var(MEAN_DIFFERENCE, na.rm = TRUE), 5), sd = round(sd(MEAN_DIFFERENCE, na.rm = TRUE), 5), median = round(median(MEAN_DIFFERENCE, na.rm = TRUE), 5), q1 = round(quantile(MEAN_DIFFERENCE, 0.25, na.rm = TRUE), 5), q3 = round(quantile(MEAN_DIFFERENCE, 0.75, na.rm = TRUE), 5), min = round(min(MEAN_DIFFERENCE, na.rm = TRUE), 5), max = round(max(MEAN_DIFFERENCE, na.rm = TRUE), 5), .groups = 'drop' ) print(desc_stats) ``` ## Descriptive Statistics by Between-Subjects Factors ```{r descriptive-stats-temporal} desc_stats_by_temporal <- long_data %>% group_by(TEMPORAL_DO, TIME, DOMAIN) %>% summarise( n = n(), mean = round(mean(MEAN_DIFFERENCE, na.rm = TRUE), 5), variance = round(var(MEAN_DIFFERENCE, na.rm = TRUE), 5), sd = round(sd(MEAN_DIFFERENCE, na.rm = TRUE), 5), .groups = 'drop' ) print(desc_stats_by_temporal) ``` # Assumption Testing ## Missing Values Check ```{r missing-values} missing_summary <- long_data %>% group_by(TIME, DOMAIN) %>% summarise( n_total = n(), n_missing = sum(is.na(MEAN_DIFFERENCE)), pct_missing = round(100 * n_missing / n_total, 2), .groups = 'drop' ) print(missing_summary) ``` ## Outlier Detection ```{r outlier-detection} outlier_summary <- long_data_clean %>% group_by(TIME, DOMAIN) %>% summarise( n = n(), mean = mean(MEAN_DIFFERENCE), sd = sd(MEAN_DIFFERENCE), q1 = quantile(MEAN_DIFFERENCE, 0.25), median = median(MEAN_DIFFERENCE), q3 = quantile(MEAN_DIFFERENCE, 0.75), iqr = q3 - q1, lower_bound = q1 - 1.5 * iqr, upper_bound = q3 + 1.5 * iqr, n_outliers = sum(MEAN_DIFFERENCE < lower_bound | MEAN_DIFFERENCE > upper_bound), .groups = 'drop' ) print(outlier_summary) ``` ## Anderson-Darling Normality Test ```{r normality-test} normality_results <- long_data_clean %>% group_by(TIME, DOMAIN) %>% summarise( n = n(), ad_statistic = ad.test(.data$MEAN_DIFFERENCE)$statistic, ad_p_value = ad.test(.data$MEAN_DIFFERENCE)$p.value, .groups = 'drop' ) print(normality_results) ```