# 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"))
