# Cross-Language Analysis: Four Brain Regions Integration

# Load required packages
pacman::p_load(
  tidyverse,
  gt,
  psych,
  ggdist,
  gghalves)

# Data loading and integration
base_dir <- "/Users/tohokusla/Dropbox/fMRI_VWFA/Python_Code_Komuro/20251019/Results"

# Set file paths
file_paths <- list(
  Left_Fusiform = file.path(base_dir, "Left_Fusiform_default_thr04_patch4mm/MainTask_Results/Main_WordBetas_CrossLanguage.csv"),
  Left_Occipital_Fusiform = file.path(base_dir, "Left_Occipital_Fusiform_default_thr04_patch4mm/MainTask_Results/Main_WordBetas_CrossLanguage.csv"),
  Right_Fusiform = file.path(base_dir, "Right_Fusiform_default_thr04_patch4mm/MainTask_Results/Main_WordBetas_CrossLanguage.csv"),
  Right_Occipital_Fusiform = file.path(base_dir, "Right_Occipital_Fusiform_default_thr04_patch4mm/MainTask_Results/Main_WordBetas_CrossLanguage.csv"))

# Load data and append ROI names
data_list <- map2(file_paths, names(file_paths), function(path, roi_name) {
  read_csv(path, show_col_types = FALSE) |>
    mutate(brain_region = roi_name)
})

# Combine data
integrated_data <- bind_rows(data_list)

# Data preprocessing
integrated_data <- integrated_data |>
  mutate(
    condition_type = if_else(roi_language == stimulus_language, 
                             "Same Language", 
                             "Cross Language"),
    brain_region = factor(brain_region, levels = c(
      "Left_Fusiform",
      "Left_Occipital_Fusiform",
      "Right_Fusiform",
      "Right_Occipital_Fusiform")),
    roi_stim_pair = paste0(roi_language, " ROI × ", stimulus_language, " Stim"),
    stimulus_language = factor(stimulus_language, levels = c("English", "Kanji", "Katakana")))

# Create descriptive statistics tables
# Descriptive stats by brain region × ROI language × stimulus language
integrated_data |>
  group_by(brain_region, roi_language, stimulus_language, condition_type) |>
  summarise(
    N = n(),
    Mean = mean(beta_value, na.rm = TRUE),
    SD = sd(beta_value, na.rm = TRUE),
    SE = SD / sqrt(N),
    Median = median(beta_value, na.rm = TRUE),
    Min = min(beta_value, na.rm = TRUE),
    Max = max(beta_value, na.rm = TRUE),
    Q1 = quantile(beta_value, 0.25, na.rm = TRUE),
    Q3 = quantile(beta_value, 0.75, na.rm = TRUE),
    .groups = "drop") |>
  arrange(brain_region, roi_language, stimulus_language) |>
  gt() |>
  tab_header(
    title = "Descriptive Statistics: All Four Brain Regions",
    subtitle = "By Brain Region × ROI Language × Stimulus Language") |>
  cols_label(
    brain_region = "Brain Region",
    roi_language = "ROI Language",
    stimulus_language = "Stimulus Language",
    condition_type = "Condition Type",
    N = "N",
    Mean = "Mean",
    SD = "SD",
    SE = "SE",
    Median = "Median",
    Min = "Min",
    Max = "Max",
    Q1 = "Q1",
    Q3 = "Q3") |>
  fmt_number(
    columns = c(Mean, SD, SE, Median, Min, Max, Q1, Q3),
    decimals = 3) |>
  tab_style(
    style = cell_fill(color = "#E8F4F8"),
    locations = cells_body(
      columns = everything(),
      rows = condition_type == "Same Language")) |>
  tab_options(
    table.font.size = 11,
    heading.title.font.size = 16,
    heading.subtitle.font.size = 13)
Descriptive Statistics: All Four Brain Regions
By Brain Region × ROI Language × Stimulus Language
Brain Region ROI Language Stimulus Language Condition Type N Mean SD SE Median Min Max Q1 Q3
Left_Fusiform English English Same Language 26 2.226 1.217 0.239 2.071 0.443 5.408 1.512 2.583
Left_Fusiform English Kanji Cross Language 26 2.534 1.127 0.221 2.501 −0.109 4.917 1.908 3.078
Left_Fusiform English Katakana Cross Language 26 2.030 0.930 0.182 1.919 0.513 4.106 1.266 2.627
Left_Fusiform Kanji English Cross Language 26 2.258 1.179 0.231 2.339 0.443 5.408 1.534 2.616
Left_Fusiform Kanji Kanji Same Language 26 2.788 1.017 0.200 2.784 0.307 4.900 2.246 3.621
Left_Fusiform Kanji Katakana Cross Language 26 2.185 0.994 0.195 2.271 0.513 4.118 1.386 2.715
Left_Fusiform Katakana English Cross Language 26 2.014 1.178 0.231 1.973 0.532 5.408 1.061 2.554
Left_Fusiform Katakana Kanji Cross Language 26 2.352 1.085 0.213 2.473 0.155 4.357 1.535 3.058
Left_Fusiform Katakana Katakana Same Language 26 2.059 1.053 0.206 1.830 0.335 4.268 1.328 2.774
Left_Occipital_Fusiform English English Same Language 26 2.670 1.163 0.228 2.641 0.500 5.408 1.726 3.542
Left_Occipital_Fusiform English Kanji Cross Language 26 2.913 1.113 0.218 3.041 0.722 4.729 2.281 3.791
Left_Occipital_Fusiform English Katakana Cross Language 26 2.431 1.079 0.212 2.372 0.513 4.393 1.885 3.066
Left_Occipital_Fusiform Kanji English Cross Language 26 2.696 1.278 0.251 2.703 0.593 5.408 1.668 3.264
Left_Occipital_Fusiform Kanji Kanji Same Language 26 3.057 1.193 0.234 3.111 0.307 5.689 2.374 3.827
Left_Occipital_Fusiform Kanji Katakana Cross Language 26 2.467 1.106 0.217 2.458 0.513 4.780 1.794 3.139
Left_Occipital_Fusiform Katakana English Cross Language 26 2.590 1.240 0.243 2.550 0.487 5.408 1.591 3.477
Left_Occipital_Fusiform Katakana Kanji Cross Language 26 2.843 1.356 0.266 2.835 0.155 5.689 1.999 3.898
Left_Occipital_Fusiform Katakana Katakana Same Language 26 2.482 1.048 0.206 2.297 0.870 4.393 1.885 3.240
Right_Fusiform English English Same Language 26 1.723 0.666 0.131 1.499 0.584 3.111 1.208 2.187
Right_Fusiform English Kanji Cross Language 26 2.127 1.150 0.226 2.035 0.122 6.260 1.430 2.486
Right_Fusiform English Katakana Cross Language 26 1.564 0.748 0.147 1.527 0.181 3.313 1.150 1.951
Right_Fusiform Kanji English Cross Language 26 1.621 0.773 0.152 1.422 0.158 3.421 1.026 2.110
Right_Fusiform Kanji Kanji Same Language 26 2.241 0.963 0.189 2.160 0.997 4.841 1.588 2.706
Right_Fusiform Kanji Katakana Cross Language 26 1.576 0.952 0.187 1.347 0.136 3.394 1.027 2.417
Right_Fusiform Katakana English Cross Language 26 1.503 0.860 0.169 1.385 0.072 3.421 0.990 2.148
Right_Fusiform Katakana Kanji Cross Language 26 1.868 1.245 0.244 1.817 0.087 6.260 1.292 2.357
Right_Fusiform Katakana Katakana Same Language 26 1.417 0.815 0.160 1.327 0.067 3.394 0.918 1.766
Right_Occipital_Fusiform English English Same Language 26 2.059 1.023 0.201 2.140 0.639 4.962 1.244 2.523
Right_Occipital_Fusiform English Kanji Cross Language 26 2.544 1.258 0.247 2.532 0.718 6.260 1.734 3.094
Right_Occipital_Fusiform English Katakana Cross Language 26 1.861 0.981 0.192 1.447 0.307 3.877 1.234 2.398
Right_Occipital_Fusiform Kanji English Cross Language 26 2.090 0.945 0.185 2.021 0.895 4.962 1.455 2.498
Right_Occipital_Fusiform Kanji Kanji Same Language 26 2.613 0.973 0.191 2.601 0.974 4.990 2.070 3.094
Right_Occipital_Fusiform Kanji Katakana Cross Language 26 1.930 0.929 0.182 1.779 0.177 3.540 1.187 2.452
Right_Occipital_Fusiform Katakana English Cross Language 26 1.852 0.954 0.187 1.553 0.195 4.220 1.148 2.485
Right_Occipital_Fusiform Katakana Kanji Cross Language 26 2.296 1.275 0.250 2.119 0.499 6.260 1.327 2.919
Right_Occipital_Fusiform Katakana Katakana Same Language 26 1.794 0.933 0.183 1.547 0.307 3.877 1.151 2.354
# Summary stats by brain region × condition type
integrated_data |>
  group_by(brain_region, condition_type) |>
  summarise(
    N = n(),
    N_subjects = length(unique(subject_id)),
    Mean = mean(beta_value, na.rm = TRUE),
    SD = sd(beta_value, na.rm = TRUE),
    SE = SD / sqrt(N),
    Median = median(beta_value, na.rm = TRUE),
    Min = min(beta_value, na.rm = TRUE),
    Max = max(beta_value, na.rm = TRUE),
    IQR = IQR(beta_value, na.rm = TRUE),
    .groups = "drop") |>
  gt() |>
  tab_header(
    title = "Summary Statistics by Brain Region",
    subtitle = "Same Language vs. Cross Language") |>
  cols_label(
    brain_region = "Brain Region",
    condition_type = "Condition Type",
    N = "N Obs",
    N_subjects = "N Subj",
    Mean = "Mean",
    SD = "SD",
    SE = "SE",
    Median = "Median",
    Min = "Min",
    Max = "Max",
    IQR = "IQR") |>
  fmt_number(
    columns = c(Mean, SD, SE, Median, Min, Max, IQR),
    decimals = 3) |>
  tab_style(
    style = cell_fill(color = "#FFE5E5"),
    locations = cells_body(
      columns = everything(),
      rows = condition_type == "Same Language")) |>
  tab_options(
    table.font.size = 12,
    heading.title.font.size = 16)
Summary Statistics by Brain Region
Same Language vs. Cross Language
Brain Region Condition Type N Obs N Subj Mean SD SE Median Min Max IQR
Left_Fusiform Cross Language 156 26 2.229 1.084 0.087 2.302 −0.109 5.408 1.407
Left_Fusiform Same Language 78 26 2.357 1.129 0.128 2.269 0.307 5.408 1.495
Left_Occipital_Fusiform Cross Language 156 26 2.657 1.194 0.096 2.615 0.155 5.689 1.672
Left_Occipital_Fusiform Same Language 78 26 2.736 1.147 0.130 2.728 0.307 5.689 1.743
Right_Fusiform Cross Language 156 26 1.710 0.982 0.079 1.503 0.072 6.260 1.211
Right_Fusiform Same Language 78 26 1.794 0.882 0.100 1.598 0.067 4.841 1.192
Right_Occipital_Fusiform Cross Language 156 26 2.095 1.080 0.086 2.081 0.177 6.260 1.363
Right_Occipital_Fusiform Same Language 78 26 2.155 1.024 0.116 2.203 0.307 4.990 1.379
# Visualization: overlay four brain regions with colors

# Set color palette
region_colors <- c(
  "Left_Fusiform" = "#E74C3C",
  "Left_Occipital_Fusiform" = "#F39C12",
  "Right_Fusiform" = "#3498DB",
  "Right_Occipital_Fusiform" = "#9B59B6")

# Comparison plot for same vs cross language
ggplot(integrated_data,
       aes(x = stimulus_language, y = beta_value, 
           fill = brain_region, alpha = condition_type)) +
  geom_violin(position = position_dodge(width = 0.9), trim = TRUE) +
  geom_boxplot(width = 0.15, position = position_dodge(width = 0.9),
               outlier.shape = NA, color = "black", linewidth = 0.3) +
  facet_wrap(~ roi_language, ncol = 3, scales = "free_y") +
  scale_fill_manual(values = region_colors, name = "Brain Region") +
  scale_alpha_manual(values = c("Same Language" = 0.7, "Cross Language" = 0.3),
                     name = "Condition Type") +
  labs(
    title = "Same Language vs. Cross Language Comparison",
    subtitle = "Alpha transparency indicates condition type",
    x = "Stimulus Language",
    y = "Beta Value") +
  theme_bw(base_size = 12) +
  theme(
    legend.position = "top",
    legend.box = "vertical",
    strip.text = element_text(face = "bold", size = 11),
    strip.background = element_rect(fill = "gray90", color = NA),
    panel.grid.major.x = element_blank(),
    plot.title = element_text(face = "bold", size = 15),
    plot.subtitle = element_text(size = 11, color = "gray40"))

# Mean value plot by brain region
integrated_data |>
  group_by(brain_region, roi_language, stimulus_language, condition_type) |>
  summarise(
    mean_beta = mean(beta_value, na.rm = TRUE),
    se_beta = sd(beta_value, na.rm = TRUE) / sqrt(n()),
    .groups = "drop") |>
  ggplot(aes(x = stimulus_language, y = mean_beta, 
             color = brain_region, group = brain_region)) +
  geom_line(linewidth = 1, position = position_dodge(width = 0.2)) +
  geom_point(size = 3, position = position_dodge(width = 0.2)) +
  geom_errorbar(aes(ymin = mean_beta - se_beta, ymax = mean_beta + se_beta),
                width = 0.2, linewidth = 0.8, position = position_dodge(width = 0.2)) +
  facet_wrap(~ roi_language, ncol = 3, scales = "free_y") +
  scale_color_manual(values = region_colors, name = "Brain Region") +
  labs(
    title = "Mean Beta Values with Standard Error",
    subtitle = "Comparison across brain regions and stimulus languages",
    x = "Stimulus Language",
    y = "Mean Beta Value") +
  theme_bw(base_size = 12) +
  theme(
    legend.position = "top",
    legend.title = element_text(face = "bold"),
    strip.text = element_text(face = "bold", size = 11),
    strip.background = element_rect(fill = "gray90", color = NA),
    panel.grid.major.x = element_blank(),
    plot.title = element_text(face = "bold", size = 15),
    plot.subtitle = element_text(size = 11, color = "gray40"))