OSCR

The naive brain detects face-to-face biological motion.

Code ↔ Paper

4 matches between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 4 matches
  1. [1] § STAR★Methods › Quantification and statistical analysis ↔ biomotion_cFos_analysis.Rmd, lines 280–356 · score 0.70 · partial eta squared, permutation ANOVA, models, aovperm, permuco, Hemisphere
  2. [2] § STAR★Methods › Quantification and statistical analysis ↔ biomotion_cFos_analysis.Rmd, lines 280–356 · score 0.64 · post hoc, rank biserial, pairwise, raw, MD, correlation
  3. [3] § STAR★Methods › Quantification and statistical analysis ↔ biomotion_cFos_analysis.Rmd, lines 358–449 · score 0.63 · FOV lateralization, Fos activity, bootstrapping, Pearson, Wilcoxon, rank
  4. [4] § Results › Stronger right NCL activation is associated with greater left visual field use ↔ biomotion_cFos_analysis.Rmd, lines 358–449 · score 0.54 · FOV lateralization, fos activity, bootstrapped, Pearson, eye, correlated

Paper

Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

R Markdown · 452 lines · 15 KB · CC-BY-4.0 · 4 matches

  1. ---
  2. title: "biomotion"
  3. author: "Mirko Zanon"
  4. date: '2024-11-05'
  5. output: html_document
  6. ---
  7. ```{r setup, include=FALSE}
  8. knitr::opts_chunk$set(echo = TRUE)
  9. ```
  10. ```{r cars}
  11. # ==== LOAD PACKAGES ====
  12. library(readxl)
  13. library(dplyr)
  14. library(tidyr)
  15. library(ggplot2)
  16. library(emmeans)
  17. library(ez)
  18. library(afex)
  19. library(ggpubr)
  20. library(ggeffects)
  21. library(car)
  22. library(rstatix)
  23. library(lmPerm)
  24. library(perm)
  25. library(effectsize)
  26. library(boot)
  27. library(permuco)
  28. # ==== LOAD AND CLEAN DATA ====
  29. data <- read_excel("biomotion.xlsx") %>%
  30. filter(preferred_looking_side != "x") %>% # remove invalid trials
  31. filter(Group %in% c("face2face", "back2back")) # keep only selected groups
  32. # ==== Define which transformation to use ====
  33. cfos_transform <- "raw" # ← # Options for activity transformation: "raw", "sqrt", "log"
  34. # ==== COMPUTE MEAN PER HEMISPHERE ====
  35. data_avg <- data %>%
  36. group_by(Brain, Group, Area, Hemi, preferred_looking_side, lateralization_eye_DLC) %>%
  37. summarise(
  38. avg_cfos = mean(cfos, na.rm = TRUE),
  39. avg_cfos_sqrt = mean(sqrt(cfos), na.rm = TRUE),
  40. avg_cfos_log = mean(log1p(cfos), na.rm = TRUE), # log1p per gestire eventuali zeri
  41. .groups = "drop"
  42. ) %>%
  43. mutate(
  44. activity = case_when(
  45. cfos_transform == "raw" ~ avg_cfos,
  46. cfos_transform == "sqrt" ~ avg_cfos_sqrt,
  47. cfos_transform == "log" ~ avg_cfos_log,
  48. TRUE ~ NA_real_
  49. )
  50. )
  51. # ==== COUNT UNIQUE SUBJECTS PER GROUP ====
  52. subject_counts <- data %>%
  53. group_by(Group) %>%
  54. summarise(num_subjects = n_distinct(Brain), .groups = "drop")
  55. print(subject_counts)
  56. ```
  57. # CHECK WITHOUT OUTLIERS
  58. ```{r pressure, echo=FALSE}
  59. # ==== PARAMETERS ====
  60. outlier_sigma <- 2
  61. # ==== 1. Compute mean and SE for each Group × Area × Hemi ====
  62. summary_df <- data_avg %>%
  63. group_by(Group, Area, Hemi) %>%
  64. summarise(
  65. mean_cfos = mean(activity, na.rm = TRUE),
  66. se_cfos = sd(activity, na.rm = TRUE) / sqrt(n()),
  67. .groups = "drop"
  68. )
  69. # ==== 2. Count subjects per Group ====
  70. subject_counts <- data_avg %>%
  71. group_by(Group) %>%
  72. summarise(num_subjects = n_distinct(Brain), .groups = "drop")
  73. # ==== 3. Merge counts and compute SD ====
  74. summary_df2 <- summary_df %>%
  75. left_join(subject_counts, by = "Group") %>%
  76. mutate(cfos_sd = se_cfos * sqrt(num_subjects))
  77. # ==== 4. Flag outliers (by Group × Area × Hemi) ====
  78. data_flagged <- data_avg %>%
  79. left_join(
  80. summary_df2 %>% select(Group, Area, Hemi, mean_cfos, se_cfos, cfos_sd),
  81. by = c("Group", "Area", "Hemi")
  82. ) %>%
  83. rename(cfos_avg = mean_cfos, cfos_se = se_cfos) %>%
  84. mutate(outlier = abs(activity - cfos_avg) > (outlier_sigma * cfos_sd))
  85. # ==== 5. Identify outlier subjects ====
  86. outlier_subjects <- data_flagged %>%
  87. filter(outlier) %>%
  88. pull(Brain) %>%
  89. unique()
  90. # ==== 6. Remove all rows for outlier Brains ====
  91. data_no_outliers <- data_avg %>%
  92. filter(!Brain %in% outlier_subjects)
  93. # Keep only Area "NCL" and "NRL"
  94. data_no_outliers_filtered <- data_no_outliers %>%
  95. filter(Area %in% c("NCL", "NRL"))
  96. # ==== Count subjects per Group after exclusion ====
  97. subject_counts <- data_no_outliers %>%
  98. group_by(Group) %>%
  99. summarise(num_subjects = n_distinct(Brain), .groups = "drop")
  100. print(subject_counts)
  101. # ==== 7. Boxplot ====
  102. p0 <- ggplot(data_no_outliers, aes(x = Area, y = activity, fill = Group)) +
  103. geom_boxplot(na.rm = TRUE, position = position_dodge(width = 0.9)) +
  104. facet_wrap(~ Hemi) +
  105. theme_minimal() +
  106. theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  107. labs(
  108. title = "Distribution of cfos by Area and Group",
  109. x = "Area", y = "avg_cfos"
  110. )
  111. print(p0)
  112. # ==== 8. Summary for bar plot ====
  113. summary_df_no_outliers <- data_no_outliers %>%
  114. group_by(Group, Area, Hemi) %>%
  115. summarise(
  116. mean_cfos = mean(activity, na.rm = TRUE),
  117. se_cfos = sd(activity, na.rm = TRUE) / sqrt(n()),
  118. .groups = "drop"
  119. )
  120. # ==== 9. Bar and violin plot ====
  121. p1 <- ggplot(summary_df_no_outliers, aes(x = Area, y = mean_cfos, fill = Group)) +
  122. geom_bar(stat = "identity", position = position_dodge(width = 0.9)) +
  123. geom_errorbar(
  124. aes(ymin = mean_cfos - se_cfos, ymax = mean_cfos + se_cfos),
  125. width = 0.2, position = position_dodge(width = 0.9)
  126. ) +
  127. facet_wrap(~ Hemi) +
  128. theme_minimal() +
  129. theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  130. labs(
  131. title = "Mean cfos by Area and Group",
  132. x = "Area", y = "Mean cfos"
  133. )
  134. print(p1)
  135. # Create a numeric x-position with custom spacing
  136. data_no_outliers$Area_numeric <- as.numeric(factor(data_no_outliers$Area)) * 2 # Multiply by 1.5 for more space
  137. summary_df_no_outliers$Area_numeric <- as.numeric(factor(summary_df_no_outliers$Area)) * 2
  138. # Get area labels for the axis
  139. data_no_outliers$Group <- factor(data_no_outliers$Group, levels = c("face2face", "back2back"))
  140. summary_df_no_outliers$Group <- factor(summary_df_no_outliers$Group, levels = c("face2face", "back2back"))
  141. area_levels <- levels(factor(data_no_outliers$Area))
  142. area_positions <- seq(1, by = 1.5, length.out = length(area_levels))
  143. # Increase spacing significantly
  144. dodge_width <- 1.2
  145. violin_width <- 1.0
  146. # Violin plot with colorblind-friendly colors that print well in grayscale
  147. p2 <- ggplot(data_no_outliers, aes(x = Area_numeric, y = avg_cfos, fill = Group)) +
  148. geom_violin(aes(group = interaction(Area, Group)),
  149. color = NA, alpha = 0.7, trim = FALSE,
  150. width = violin_width,
  151. position = position_dodge(width = dodge_width),
  152. scale = "width") +
  153. geom_pointrange(
  154. data = summary_df_no_outliers,
  155. aes(x = Area_numeric, y = mean_cfos, ymin = mean_cfos - se_cfos,
  156. ymax = mean_cfos + se_cfos, group = Group),
  157. color = "black", size = 0.1, fatten = 1,
  158. position = position_dodge(width = dodge_width)
  159. ) +
  160. facet_wrap(~ Hemi) +
  161. scale_x_continuous(
  162. breaks = area_positions,
  163. labels = area_levels,
  164. expand = expansion(mult = 0.05)
  165. ) +
  166. scale_fill_manual(values = c("face2face" = "#D55E00", "back2back" = "#0072B2")) + # Blue and orange
  167. theme_minimal(base_size = 12) +
  168. theme(
  169. axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1, size = 11),
  170. panel.grid.major.x = element_blank(),
  171. panel.grid.minor = element_blank(),
  172. panel.spacing = unit(2, "lines"),
  173. plot.margin = margin(15, 25, 15, 15),
  174. strip.text = element_text(face = "bold", size = 13)
  175. ) +
  176. labs(
  177. title = "Mean cfos by Area and Group",
  178. x = "Area",
  179. y = "Mean cfos"
  180. )
  181. ggsave("cfos_violinplot.svg", p2, width = 10, height = 6)
  182. print(p2)
  183. ```
  184. # CHECK NORMALITY
  185. ```{r pressure, echo=FALSE}
  186. df <- data_no_outliers %>%
  187. mutate(Group = as.factor(Group),
  188. Area = as.factor(Area),
  189. Hemi = as.factor(Hemi))
  190. # ==== 1. Test per normalità e omoschedasticità ====
  191. results <- data.frame()
  192. areas <- unique(df$Area)
  193. for (a in areas) {
  194. for (h in unique(df$Hemi)) {
  195. # subset per area/emisfero
  196. sub_df <- df %>% filter(Area == a, Hemi == h)
  197. # test di Levene per omoschedasticità (tra gruppi)
  198. if (length(unique(sub_df$Group)) > 1) {
  199. lev <- car::leveneTest(avg_cfos ~ Group, data = sub_df)
  200. p_levene <- lev[1, "Pr(>F)"]
  201. } else {
  202. p_levene <- NA
  203. }
  204. # loop su ogni gruppo per test di normalità
  205. for (g in unique(sub_df$Group)) {
  206. dat <- sub_df %>% filter(Group == g) %>% pull(avg_cfos)
  207. # Shapiro test
  208. p_shapiro <- if (length(dat) >= 3 && length(dat) <= 5000) {
  209. tryCatch(shapiro.test(dat)$p.value, error = function(e) NA)
  210. } else {
  211. NA
  212. }
  213. # suggerimento: parametric se entrambi i test > 0.05
  214. suggestion <- if (!is.na(p_shapiro) && p_shapiro > 0.05 &&
  215. (is.na(p_levene) || p_levene > 0.05)) {
  216. "-"
  217. } else {
  218. "*"
  219. }
  220. results <- rbind(results, data.frame(
  221. Area = a,
  222. Hemi = h,
  223. Group = g,
  224. n = length(dat),
  225. p_shapiro = round(p_shapiro, 4),
  226. p_levene = round(p_levene, 4),
  227. normality_violation = suggestion
  228. ))
  229. }
  230. }
  231. }
  232. # ==== 2. Ordina e stampa tabella finale ====
  233. results <- results %>%
  234. arrange(Area, Hemi, Group)
  235. print(results)
  236. ```
  237. # PERMUCO 10000
  238. ```{r pressure, echo=FALSE}
  239. # =====================================================================
  240. # c-Fos Analysis & Behavioral Correlations
  241. # =====================================================================
  242. # ==== 1. PERMUTATION ANOVAS & POST-HOCS PER AREA ====
  243. areas <- unique(data_no_outliers$Area)
  244. for (a in areas) {
  245. cat("\n============================\n")
  246. cat("Area:", a, " - permuco::aovperm: Group × Hemi\n")
  247. cat("============================\n")
  248. df_sub <- subset(data_no_outliers, Area == a)
  249. # The Modern Permutation ANOVA (Guarantees exactly 10,000 iterations)
  250. set.seed(123)
  251. perm_model <- aovperm(activity ~ Group * Hemi + Error(Brain/Hemi),
  252. data = df_sub,
  253. np = 10000) # 'np' stands for number of permutations
  254. print(perm_model)
  255. # Post-hoc pairwise comparisons (This part stays exactly the same)
  256. df_sub <- df_sub %>% mutate(GroupHemi = paste(Group, Hemi, sep = "_"))
  257. combo_groups <- combn(unique(df_sub$GroupHemi), 2, simplify = FALSE)
  258. posthoc_area <- data.frame()
  259. for (pair in combo_groups) {
  260. dat1 <- df_sub %>% filter(GroupHemi == pair[1]) %>% pull(activity)
  261. dat2 <- df_sub %>% filter(GroupHemi == pair[2]) %>% pull(activity)
  262. if (length(dat1) > 1 && length(dat2) > 1) {
  263. wt <- wilcox.test(dat1, dat2, exact = FALSE)
  264. posthoc_area <- rbind(posthoc_area, data.frame(
  265. Area = a,
  266. Comparison = paste(pair, collapse = "_vs_"),
  267. W = wt$statistic,
  268. p_raw = wt$p.value
  269. ))
  270. }
  271. }
  272. if (nrow(posthoc_area) > 0) {
  273. posthoc_area <- posthoc_area %>%
  274. mutate(p_fdr_BH = p.adjust(p_raw, method = "BH"), p_holm = p.adjust(p_raw, method = "holm"))
  275. }
  276. print(posthoc_area)
  277. }
  278. # ==== 2. EFFECT SIZES EXTRACTION (NCL FOCUS) ====
  279. df_ncl <- data_no_outliers %>% filter(Area == "NCL")
  280. cat("\n=========================================\n")
  281. cat("NCL EFFECT SIZES (ANOVA Partial Eta Squared)\n")
  282. cat("=========================================\n")
  283. aov_ncl <- aov(activity ~ Group * Hemi + Error(Brain/Hemi), data = df_ncl)
  284. print(eta_squared(aov_ncl, partial = TRUE))
  285. cat("\n=========================================\n")
  286. cat("NCL POST-HOC EFFECT SIZES (MD and r_rb)\n")
  287. cat("=========================================\n")
  288. # Right NCL (Face-to-Face vs Back-to-Back)
  289. dat_f2f_R <- df_ncl %>% filter(Group == "face2face", Hemi == "R") %>% pull(activity)
  290. dat_b2b_R <- df_ncl %>% filter(Group == "back2back", Hemi == "R") %>% pull(activity)
  291. cat("\n--- Right Hemisphere: Face-to-Face vs Back-to-Back ---\n")
  292. cat("Mean Difference:", round(mean(dat_f2f_R) - mean(dat_b2b_R), 3), "\n")
  293. print(rank_biserial(dat_f2f_R, dat_b2b_R))
  294. # Face-to-Face Group (Right vs Left Hemisphere)
  295. dat_f2f_L <- df_ncl %>% filter(Group == "face2face", Hemi == "L") %>% pull(activity)
  296. cat("\n--- Face-to-Face Group: Right vs Left Hemisphere ---\n")
  297. cat("Mean Difference:", round(mean(dat_f2f_R) - mean(dat_f2f_L), 3), "\n")
  298. print(rank_biserial(dat_f2f_R, dat_f2f_L))
  299. ```
  300. # LINKING BEHAVIOUR
  301. ```{r pressure, echo=FALSE}
  302. # ==== 1. FOV LATERALIZATION DISTRIBUTION ====
  303. df_behav <- data_no_outliers %>%
  304. filter(Group %in% c("face2face", "back2back")) %>%
  305. distinct(Brain, Group, lateralization_eye_DLC)
  306. cat("\n======================================================\n")
  307. cat("LATERALIZATION INDEX DISTRIBUTION: face2face vs back2back\n")
  308. cat("======================================================\n")
  309. wt_fov <- wilcox.test(lateralization_eye_DLC ~ Group, data = df_behav, exact = FALSE)
  310. cat("Wilcoxon p-value:", round(wt_fov$p.value, 4), "\n")
  311. print(rank_biserial(lateralization_eye_DLC ~ Group, data = df_behav))
  312. # ==== 2. BRAIN-BEHAVIOR CORRELATIONS (PEARSON + CIs) ====
  313. # Changed to Pearson
  314. pearson_func <- function(data, indices) {
  315. d <- data[indices, ]
  316. if(sd(d$activity) == 0 || sd(d$lateralization_eye_DLC) == 0) return(NA)
  317. cor(d$lateralization_eye_DLC, d$activity, method = "pearson", use = "complete.obs")
  318. }
  319. master_boot_table <- data.frame()
  320. data_corr <- data_no_outliers %>% filter(Group %in% c("face2face", "back2back"))
  321. areas <- unique(data_corr$Area)
  322. for(a in areas) {
  323. df_area <- data_corr %>% filter(Area == a)
  324. for(h in unique(df_area$Hemi)) {
  325. for(g in unique(df_area$Group)) {
  326. df_sub <- df_area %>% filter(Hemi == h, Group == g)
  327. if(nrow(df_sub) > 4) {
  328. # Standard Pearson
  329. cor_test <- cor.test(df_sub$lateralization_eye_DLC, df_sub$activity, method = "pearson")
  330. # Bootstrapped CI (10,000 iterations)
  331. set.seed(123)
  332. boot_res <- boot(data = df_sub, statistic = pearson_func, R = 10000)
  333. boot_ci <- boot.ci(boot_res, type = "perc")
  334. # Add to master table (changed rho to r)
  335. master_boot_table <- rbind(master_boot_table, data.frame(
  336. Area = a,
  337. Hemi = h,
  338. Group = g,
  339. r = round(cor_test$estimate, 3),
  340. CI_low = round(boot_ci$percent[4], 3),
  341. CI_high = round(boot_ci$percent[5], 3),
  342. p_value = round(cor_test$p.value, 4),
  343. n = nrow(df_sub)
  344. ))
  345. }
  346. }
  347. }
  348. }
  349. # ==== 3. PRINT FINAL SUMMARY TABLE ====
  350. cat("\n======================================================\n")
  351. cat("FINAL MASTER BOOTSTRAPPED CORRELATION TABLE (PEARSON)\n")
  352. cat("======================================================\n")
  353. print(master_boot_table, row.names = FALSE)
  354. # ==== 4. GLOBAL CORRELATION PLOT ====
  355. p_global <- ggplot(data_corr, aes(x = lateralization_eye_DLC, y = activity, color = Group, fill = Group)) +
  356. geom_point(alpha = 0.7, size = 2) +
  357. geom_smooth(method = "lm", se = TRUE, alpha = 0.2) +
  358. facet_grid(Hemi ~ Area) +
  359. scale_color_manual(values = c("face2face" = "#D55E00", "back2back" = "#0072B2")) +
  360. scale_fill_manual(values = c("face2face" = "#D55E00", "back2back" = "#0072B2")) +
  361. theme_minimal(base_size = 11) +
  362. theme(strip.text = element_text(face = "bold"),
  363. panel.spacing = unit(1, "lines"),
  364. legend.position = "bottom") +
  365. labs(title = "c-Fos vs Eye Lateralization (Pearson Linear Trends)",
  366. x = "Lateralization (Eye Index)", y = "c-Fos Activity")
  367. print(p_global)
  368. ggsave("correlation_plot_pearson.svg", p_global, width = 18, height = 7)
  369. # ==== 5. PERMUTATION ANCOVA ====
  370. # This tests the linear interaction across all areas
  371. cat("\n======================================================\n")
  372. cat("GLOBAL LINEAR INTERACTION (PERMUTATION ANCOVA)\n")
  373. cat("======================================================\n")
  374. global_perm_ancova <- aovperm(activity ~ Group * Hemi * lateralization_eye_DLC,
  375. data = data_corr,
  376. np = 10000)
  377. summary(global_perm_ancova)
  378. ```

biomotion_cFos_analysis.Rmd, under CC-BY-4.0 · at the source

Overview

Authors: Anastasia Morandi-Raikova1, Mirko Zanon1, Giorgio Vallortigara1
  1. Center for Mind/Brain Sciences, University of Trento, Rovereto, Italy
Institutions: University of Trento (Italy)
Journal: iScience, volume 29, issue 8, article 116695
Dates: received 9 December 2025; accepted 19 June 2026; published online 10 July 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1016/j.isci.2026.116695 · PMID 42472101 · PMCID PMC13380427 · OpenAlex W7167942959
Open access: gold, a free copy (OpenAlex)
Status: code verified
Methods: Connectivity, Statistics
Keywords: Social predisposition, animacy detection, agency perception, pallial processing, evolution of social cognition
Topic: Action Observation and Synchronization (Social Psychology, Psychology), according to OpenAlex
Funding: Ministero dell&apos;Istruzione dell&apos;Universita e della Ricerca
Citations: not cited yet (Europe PMC); 61 references in the paper

Abstract

Detecting agents and their interactions is a cornerstone of social cognition. Vertebrates are known to possess innate sensitivity to animacy cues, such as self-propelled or biological motion, supported by subpallial circuits within the social behavior network (SBN). However, the neural mechanisms distinguishing the detection of animate motion from the recognition of socially meaningful relations remain unclear. Using visually naive female domestic chicks, we investigated the brain regions activated when observing point-light displays of hens moving face-to-face or back-to-back, a behavioral paradigm previously shown to reveal spontaneous sensitivity to social interaction. We found selective immediate early-gene expression in the nidopallium caudolaterale, homologous to the mammalian prefrontal cortex, but not in the nucleus taeniae of the amygdala and septum, subpallial areas in the SBN. This pattern suggests that while basic sensitivity to animate motion may rely on evolutionarily ancient subpallial circuits, the detection of socially relevant relations engages higher order pallial processing.

Reproduced under the paper's license (CC BY), from the paper cited above.

Repository

Its files are read in the Code ↔ Paper reader above, with 4 matches between paragraphs and lines of code.

figshare 30490487

License: CC-BY-4.0
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Languages: R (1)
Size: 4 files, 1 script
Software Heritage: not checked
Found in: “Data and code availability”
Holds: 1 notebook
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: afex (1 file), car (1 file), easystats (1 file), emmeans (1 file), ggplot2 (1 file), ggpubr (1 file), permuco (1 file), rstatix (1 file), tidyverse (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
  • 27 September 2026: the link answers (HTTP 200)
1 file

The paper's code and data availability statement is in the Data section.

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

  • 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 1 script, each with its path and the digest of its content;
  • 4 matches between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.

Data

No dataset and no data link were found in the paper.

Data and code availability

Data are available in Figshare: https://doi.org/10.6084/m9.figshare.30490487.

Code used for the analysis of this work is available in Figshare: https://doi.org/10.6084/m9.figshare.30490487.

Any additional information required to reanalyze the data reported in this paper is available from the corresponding contact upon request.

Reproduced under the paper's license (CC BY), from the paper cited above.

Versions

The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.

Version 1, 27 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 3 authors, 5 keywords, 1 funder, 59 references.

Cite

This paper

Morandi-Raikova, A., Zanon, M., & Vallortigara, G. (2026). The naive brain detects face-to-face biological motion. iScience, 29(8), 116695. https://doi.org/10.1016/j.isci.2026.116695

BibTeX

@article{morandiraikova2026naive,
author = {Morandi-Raikova, Anastasia and Zanon, Mirko and Vallortigara, Giorgio},
title = {{The naive brain detects face-to-face biological motion}},
journal = {iScience},
year = {2026},
month = jul,
volume = {29},
number = {8},
pages = {116695},
publisher = {Elsevier},
issn = {2589-0042},
doi = {10.1016/j.isci.2026.116695},
url = {https://doi.org/10.1016/j.isci.2026.116695},
pmid = {42472101},
pmcid = {PMC13380427}
}

RIS

TY - JOUR
AU - Morandi-Raikova, Anastasia
AU - Zanon, Mirko
AU - Vallortigara, Giorgio
TI - The naive brain detects face-to-face biological motion
T2 - iScience
J2 - iScience
PY - 2026
DA - 2026/07/10
VL - 29
IS - 8
SP - 116695
SN - 2589-0042
PB - Elsevier
DO - 10.1016/j.isci.2026.116695
UR - https://doi.org/10.1016/j.isci.2026.116695
LA - en
ER -

CSL-JSON

{
"id": "10.1016/j.isci.2026.116695",
"type": "article-journal",
"title": "The naive brain detects face-to-face biological motion",
"container-title": "iScience",
"author": [
{
"family": "Morandi-Raikova",
"given": "Anastasia"
},
{
"family": "Zanon",
"given": "Mirko"
},
{
"family": "Vallortigara",
"given": "Giorgio"
}
],
"container-title-short": "iScience",
"volume": "29",
"issue": "8",
"page": "116695",
"DOI": "10.1016/j.isci.2026.116695",
"PMID": "42472101",
"PMCID": "PMC13380427",
"ISSN": "2589-0042",
"publisher": "Elsevier",
"URL": "https://doi.org/10.1016/j.isci.2026.116695",
"language": "en",
"issued": {
"date-parts": [
[
2026,
7,
10
]
]
}
}

The tracing map gets a citation of its own once an author has validated it and it has a DOI.

Similar papers

The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.

[1] doi:10.1126/sciadv.aec9291 [code]
Computational mechanisms of perception in autism revealed using games inspired by rodent operant tasks.
Journal: Science advances
In common: afex, rstatix, easystats, 5 other tools
[2] doi:10.1038/s41398-026-04141-z [code]
Effects on hippocampal activity following novel 5-HT4 receptor agonism in unmedicated patients with depression: the RESTAND study.
Journal: Translational psychiatry
In common: afex, rstatix, easystats, 5 other tools
[3] doi:10.1192/bjp.2026.10664 [code]
Early effects of a novel 5-HT&lt;sub&gt;4&lt;/sub&gt;R agonist (PF-04995274) and the SSRI citalopram on emotional cognition in unmedicated depression: RESTAND study.
Journal: The British journal of psychiatry : the journal of mental science
In common: afex, rstatix, easystats, 5 other tools
[4] doi:10.1016/j.isci.2026.116287 [code]
Neural selectivity for social interactions in the infant brain.
Journal: iScience
In common: 7 references
[5] doi:10.1073/pnas.2603114123 [code]
The human hippocampus can pattern separate memories by meaning.
Journal: Proceedings of the National Academy of Sciences of the United States of America
In common: afex, rstatix, easystats, 4 other tools
[6] doi:10.1093/nc/niag029 [code]
A data-driven approach to identifying and evaluating connectivity-based neural correlates of conscious visual perception.
Journal: Neuroscience of consciousness
In common: afex, easystats, car, 4 other tools
[7] doi:10.1162/opmi.a.358 [code]
Tracking Visual Statistical Learning with Steady-State Visual Evoked Potentials: Effects of Exemplar and Category Information.
Journal: Open mind : discoveries in cognitive science
In common: afex, easystats, car, 3 other tools, 1 reference
[8] doi:10.1016/j.neuroimage.2026.122115 [code]
Midfrontal theta power relates to response speeding following frustrative nonreward.
Journal: NeuroImage
In common: rstatix, easystats, car, 4 other tools
[9] doi:10.1038/s41467-026-73865-9 [code]
Histamine shapes the neurocomputational dynamics of human learning.
Journal: Nature communications
In common: rstatix, easystats, car, 4 other tools
[10] doi:10.1126/sciadv.aeb8106 [code]
A thyroid hormone-mediated opsin switch initiates metamorphosis in a proto-vertebrate.
Journal: Science advances
In common: rstatix, easystats, car, 4 other tools

Contribute

The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.

Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.

Request its removal

To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).

Discussion, reproductions, activity

Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.

Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.

Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.