P03: Laboratoire de développement de la petite enfance

Sevda Montakhaby Nodeh

Laboratoire de développement de la petite enfance

Vous êtes chercheur au Centre de recherche sur le développement de la petite enfance. Votre dernier projet porte sur la manière dont les nourrissons réagissent à différentes combinaisons de visages, de races et d’émotions musicales. Plus précisément, vous vous intéressez à la question de savoir si les enfants associent des visages de leur propre race et d’autres races à des musiques de différentes valences émotionnelles (musique joyeuse et musique triste).

Votre projet a été réalisé en collaboration avec vos collègues en Chine. Alors que vous étiez responsable de la conception de votre expérience, vos collaborateurs étaient chargés de recruter les participants et de collecter les données.

Des bébés chinois (âgés de 3 à 9 mois) ont été recrutés pour participer à votre expérience. Chaque enfant a été assigné au hasard à l’une des quatre conditions visage-race + musique dans lesquelles il voyait une série de visages neutres de sa propre race ou d’une autre race associés à des extraits musicaux joyeux ou tristes.

  1. Propre race + condition de musique joyeuse (own-happy)
  2. Propre race + musique triste (own-sad)
  3. Autre race + musique heureuse (autre-heureux)
  4. Autre race + musique triste (autre-mal)

Dans le cadre de l’expérience “own-happy”, les enfants ont regardé six vidéos de visages asiatiques associées de manière séquentielle à six extraits musicaux joyeux. Dans l’autre condition, les enfants ont regardé six vidéos de visages africains associés séquentiellement à des extraits musicaux joyeux. En général, les conditions étaient identiques sur le plan procédural, à l’exception de la composition du visage et de la musique. Les mouvements oculaires des enfants ont été enregistrés à l’aide d’un système de suivi des yeux.

Votre objectif est de déterminer comment la race du visage et l’émotion de la musique, ainsi que leur interaction, influencent le comportement des nourrissons en matière de regard.

Vos variables indépendantes :

  1. Visage.race(chinois/africain)
  2. Musique.émotion(joyeux/triste)

Vos variables dépendantes :

  1. First.Face.Looking.Time : il s’agit du temps de regard sur la vidéo du premier visage dans les quatre conditions.
  2. Total.Looking.Time : Somme des temps de regard de chaque enfant sur les cinq visages suivants pour créer une mesure de leur temps de regard total sur les cinq visages après.

Commençons par charger les bibliothèques nécessaires et le jeu de données “BabyData”. Pour ce faire, téléchargez le fichier “infant_eye_tracking_study.csv” et exécutez le code suivant. N’oubliez pas de remplacer ‘path_to_your_downloaded_file’ par le chemin réel du jeu de données sur votre système.

Remarque : les cases grisées contiennent le code R, le signe “#” indiquant un commentaire qui ne s’exécutera pas dans RStudio.

BabyData  <- read.csv('path_to_your_downloaded_file/infant_eye_tracking_study.csv')

library(rstatix) #for performing basic statistical tests                         

library(dplyr) #for sorting data                                                

library(tidyr) #for data sorting and structure

library(ggplot2) #for visualizing your data

library(readr)

library(ggpubr)

library(gridExtra)

Fichiers à télécharger :

  1. infant_eye_tracking_study.csv

Veuillez compléter les exercices ci-joints au mieux de vos capacités.

 

 


Solutions

Exercice 1 – Préparation et exploration des données

Remarque : les cases grisées contiennent le code R, tandis que les cases blanches affichent la sortie du code, telle qu’elle apparaît dans RStudio.
Le signe “#” indique un commentaire qui ne sera pas exécuté dans RStudio.

1. Affichez les premières lignes pour comprendre votre jeu de données.

summary(BabyData) # Viewing the summary of the dataset to check for inconsistencies

##   Age.in.Days              Condition Face.Race Music.Emotion Age.Group
## 1          93 Other-Race Happy Music   African         happy         3
## 2          98 Other-Race Happy Music   African         happy         3
## 3          93 Other-Race Happy Music   African         happy         3
## 4          93 Other-Race Happy Music   African         happy         3
## 5          93 Other-Race Happy Music   African         happy         3
## 6         100 Other-Race Happy Music   African         happy         3
##   Total.Looking.Time First.Face.Looking.Time Participant.ID
## 1             44.035                   8.273     HJOGM7704U
## 2             18.324                   6.938     JHSEG5414N
## 3             24.600                   4.225     OCQFX4970K
## 4             12.919                   7.537     KLDOF5559R
## 5             12.755                   4.230     HHPGJ9661Y
## 6             38.777                   9.351     NVCPX9518V

 

2. Utilisez relocate() pour réorganiser vos colonnes de manière à ce que la colonne “Participant.ID” apparaisse comme la première colonne de votre ensemble de données.

BabyData <- BabyData %>% relocate(Participant.ID, .before = Age.in.Days) 

3. Vérifiez que vos données ne comportent pas de valeurs manquantes. Supprimez de l’ensemble de données toutes les lignes contenant des valeurs manquantes ou NA.

sum(is.na(BabyData)) # Checking for missing values in the dataset 

## [1] 3

BabyData <- BabyData[!is.na(BabyData$First.Face.Looking.Time), ]

##  Participant.ID      Age.in.Days     Condition          Face.Race       
##  Length:193         Min.   : 79.0   Length:193         Length:193       
##  Class :character   1st Qu.:127.0   Class :character   Class :character 
##  Mode  :character   Median :185.0   Mode  :character   Mode  :character 
##                     Mean   :189.3                                       
##                     3rd Qu.:246.0                                       
##                     Max.   :316.0                                        
##                                                                         
##  Music.Emotion        Age.Group     Total.Looking.Time First.Face.Looking.Time
##  Length:193         Min.   :3.000   Min.   : 1.654     Min.   : 0.160        
##  Class :character   1st Qu.:3.000   1st Qu.:20.671     1st Qu.: 5.309        
##  Mode  :character   Median :6.000   Median :30.381     Median : 7.495        
##                     Mean   :6.093   Mean   :29.196     Mean   : 7.041         
##                     3rd Qu.:9.000   3rd Qu.:38.196     3rd Qu.: 9.185        
##                     Max.   :9.000   Max.   :50.000     Max.   :11.823        
##                                                        NA's   :3

 

4. Vérifiez à nouveau que vos données ne comportent pas de valeurs manquantes et que les données sont cohérentes.

sum(is.na(BabyData)) # Checking for missing values in the dataset

## [1] 0

summary(BabyData) # Viewing the summary of the dataset to check for inconsistencies

##  Participant.ID      Age.in.Days     Condition          Face.Race       
##  Length:193         Min.   : 79.0   Length:193         Length:193       
##  Class :character   1st Qu.:127.0   Class :character   Class :character 
##  Mode  :character   Median :185.0   Mode  :character   Mode  :character 
##                     Mean   :189.3                                       
##                     3rd Qu.:246.0                                       
##                     Max.   :316.0                                        
##                                                                         
##  Music.Emotion        Age.Group     Total.Looking.Time First.Face.Looking.Time
##  Length:193         Min.   :3.000   Min.   : 1.654     Min.   : 0.160        
##  Class :character   1st Qu.:3.000   1st Qu.:20.671     1st Qu.: 5.309        
##  Mode  :character   Median :6.000   Median :30.381     Median : 7.495        
##                     Mean   :6.093   Mean   :29.196     Mean   : 7.041         
##                     3rd Qu.:9.000   3rd Qu.:38.196     3rd Qu.: 9.185        
##                     Max.   :9.000   Max.   :50.000     Max.   :11.823        
##                                                        NA's   :0

 

5. Vérifiez la structure et assurez-vous que vos colonnes factorielles (Music.Emotion, Face.Race et Condition) sont correctement configurées.

str(BabyData)

## 'data.frame':    190 obs. of  8 variables:
##  $ Participant.ID         : chr  "HJOGM7704U" "JHSEG5414N" "OCQFX4970K" "KLDOF5559R" ...
##  $ Age.in.Days            : int  93 98 93 93 93 100 93 91 98 100 ...
##  $ Condition              : chr  "Other-Race Happy Music" "Other-Race Happy Music" "Other-Race Happy Music" "Other-Race Happy Music" ...
##  $ Face.Race              : chr  "African" "African" "African" "African" ...
##  $ Music.Emotion          : chr  "happy" "happy" "happy" "happy" ...
##  $ Age.Group              : int  3 3 3 3 3 3 3 3 3 3 ...
##  $ Total.Looking.Time     : num  44 18.3 24.6 12.9 12.8 ...
##  $ First.Face.Looking.Time: num  8.27 6.94 4.22 7.54 4.23 ...

BabyData$Face.Race <- as.factor(BabyData$Face.Race)

BabyData$Music.Emotion <- as.factor(BabyData$Music.Emotion)

BabyData$Condition <- as.factor(BabyData$Condition)

 

6. Vérifiez si votre modèle est équilibré ou déséquilibré.

table(BabyData$Age.Group, BabyData$Condition) #unbalanced design

##   
##     Other-Race Happy Music Other-Race Sad Music Own-Race Happy Music
##   3                     16                   12                   12
##   6                     15                   19                   19
##   9                     14                   17                   17
##   
##     Own-Race Sad Music
##   3                 17
##   6                 15
##   9                 17

 

Exercice 2 : Réalisation d’une analyse de régression linéaire multi-variable

7. Effectuez une régression linéaire multi-variable sur le temps de regard du premier visage en tant que variable prédite, avec le groupe, la race du visage et leurs interactions en tant que variables prédictives. Affichez le résultat.

lm_model1 <- lm(First.Face.Looking.Time ~ Age.Group*Face.Race, data = BabyData)

summary(lm_model1)

##
## Call:
## lm(formula = First.Face.Looking.Time ~ Age.Group * Face.Race,
##     data = BabyData)
##
## Residuals:
##     Min      1Q  Median      3Q     Max
## -7.4524 -1.4478  0.3645  2.0507  4.5670
##
## Coefficients:
##                            Estimate Std. Error t value Pr(>|t|)   
## (Intercept)                 5.50710    0.75573   7.287 8.75e-12 ***
## Age.Group                   0.22815    0.11542   1.977   0.0496 * 
## Face.RaceChinese           -0.04233    1.05722  -0.040   0.9681    
## Age.Group:Face.RaceChinese  0.05036    0.16071   0.313   0.7544   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.658 on 186 degrees of freedom
## Multiple R-squared:  0.05411,    Adjusted R-squared:  0.03885
## F-statistic: 3.546 on 3 and 186 DF,  p-value: 0.01564

 

8. Effectuez une régression linéaire multivariable similaire à celle décrite dans la question précédente. La variable prédite doit être le temps total de recherche, avec comme prédicteurs le groupe d’âge, la race du visage, l’émotion musicale et leurs interactions.

lm_model2 <- model <- lm(Total.Looking.Time ~ Age.Group * Face.Race * Music.Emotion, data = BabyData)

summary(lm_model2)

##
## Call:
## lm(formula = Total.Looking.Time ~ Age.Group * Face.Race * Music.Emotion,
##     data = BabyData)
##
## Residuals:
##      Min       1Q   Median       3Q      Max
## -24.8431  -8.0316  -0.1786   8.2809  27.7472
##
## Coefficients:
##                                             Estimate Std. Error t value
## (Intercept)                                  28.0472     4.5406   6.177
## Age.Group                                    -0.5167     0.7144  -0.723
## Face.RaceChinese                            -11.5424     6.6960  -1.724
## Music.Emotionsad                            -15.2955     6.6960  -2.284
## Age.Group:Face.RaceChinese                    3.0376     1.0229   2.970
## Age.Group:Music.Emotionsad                    3.4057     1.0229   3.330
## Face.RaceChinese:Music.Emotionsad            26.8342     9.3820   2.860
## Age.Group:Face.RaceChinese:Music.Emotionsad  -5.7421     1.4252  -4.029
##                                             Pr(>|t|)   
## (Intercept)                                 4.16e-09 ***
## Age.Group                                    0.47045   
## Face.RaceChinese                             0.08645 . 
## Music.Emotionsad                             0.02351 * 
## Age.Group:Face.RaceChinese                   0.00338 **
## Age.Group:Music.Emotionsad                   0.00105 **
## Face.RaceChinese:Music.Emotionsad            0.00473 **
## Age.Group:Face.RaceChinese:Music.Emotionsad 8.22e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 11.72 on 182 degrees of freedom
## Multiple R-squared:  0.1742, Adjusted R-squared:  0.1425
## F-statistic: 5.486 on 7 and 182 DF,  p-value: 9.76e-06

 

9. Compte tenu de l’interaction significative à trois voies, effectuer des analyses de corrélation de Pearson pour examiner la relation linéaire entre le temps total passé à regarder un visage et l’âge du participant en jours dans chaque condition.

  • (a) Commence par identifier toutes les conditions uniques présentes dans l’ensemble de données.
  • (b) Effectue une analyse de corrélation de Pearson entre le groupe d’âge et la durée totale d’observation pour chaque condition unique.
  • (c) Enregistre et imprime les résultats de la corrélation, y compris les coefficients de corrélation et les valeurs p, pour chaque condition.

unique_conditions <- unique(BabyData$Condition) #Get unique conditions

correlation_results <- list() ## Initialize a list to store results

# Loop through each condition and perform Pearson correlation
for (condition in unique_conditions) {
  # Subset data for the current condition
  subset_data <- subset(BabyData, Condition == condition)
 
  subset_data$Age.Group <- as.numeric(as.character(subset_data$Age.Group))
 
  # Perform Pearson correlation
  correlation_test <- cor.test(subset_data$Age.Group, subset_data$Total.Looking.Time, method = "pearson")

  # Store the result
  correlation_results[[condition]] <- correlation_test
}

# Print the results
correlation_results

## $`Other-Race Happy Music`
##
##  Pearson's product-moment correlation
##
## data:  subset_data$Age.Group and subset_data$Total.Looking.Time
## t = -0.64059, df = 43, p-value = 0.5252
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.3799180  0.2020743
## sample estimates:
##         cor
## -0.09722666
##
##
## $`Other-Race Sad Music`
##
##  Pearson's product-moment correlation
##
## data:  subset_data$Age.Group and subset_data$Total.Looking.Time
## t = 4.4535, df = 46, p-value = 5.356e-05
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.3136678 0.7206311
## sample estimates:
##       cor
## 0.5488839
##
##
## $`Own-Race Happy Music`
##
##  Pearson's product-moment correlation
##
## data:  subset_data$Age.Group and subset_data$Total.Looking.Time
## t = 3.8943, df = 46, p-value = 0.0003166
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.2490419 0.6851408
## sample estimates:
##       cor
## 0.4979416
##
##
## $`Own-Race Sad Music`
##
##  Pearson's product-moment correlation
##
## data:  subset_data$Age.Group and subset_data$Total.Looking.Time
## t = 0.25438, df = 47, p-value = 0.8003
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.2466891  0.3149919
## sample estimates:
##        cor
## 0.03707966

Exercice 3 : Visualisation des données

10. Visualisez la relation entre le temps total passé à regarder un visage et l’âge du participant en jours, en fonction des différentes conditions expérimentales. Chaque condition doit être représentée dans son propre panneau à l’intérieur d’une seule figure. En outre, pour chaque panneau :

  • (a) Tracez le temps total passé par chaque enfant à regarder le visage en fonction de son âge en jours.
  • (b) Ajoutez une ligne de régression linéaire bleue pour indiquer la tendance.
  • (c) Affichez le coefficient de corrélation de Pearson que vous avez calculé à la question précédente dans le coin supérieur droit de chaque panneau. Pour l’affichage, arrondissez vos calculs à deux décimales.
  • (d) Utilisez des panneaux différents pour chaque condition expérimentale et disposez-les en grille.
  • (e) Veillez à ce qu’une corrélation significative (p < 0,05) soit indiquée par un astérisque.

# Get unique conditions
conditions <- unique(BabyData$Condition)

# Create a list to store plots
plot_list <- list()

# Loop through each condition and create a plot
for (condition in conditions) {
    # Subset data for the condition
    subset_data <- subset(BabyData, Condition == condition)

    # Perform linear regression
    fit <- lm(Total.Looking.Time ~ Age.in.Days, data = subset_data)

    # Calculate Pearson correlation
    cor_test <- cor.test(subset_data$Age.in.Days, subset_data$Total.Looking.Time)

    # Create a scatter plot with regression line
    p <- ggplot(subset_data, aes(x = Age.in.Days, y = Total.Looking.Time)) +
        geom_point() +
        geom_smooth(method = 'lm', color = 'blue') +
        ggtitle(paste('Condition:', condition)) +
        annotate("text", x = Inf, y = Inf, label = paste('r =', round(cor_test$estimate, 2), ifelse(cor_test$p.value < 0.05, "*", "")),
hjust = 1.1, vjust = 1.1, size = 5)
    # Add plot to list
    plot_list[[condition]] <- p
}

do.call(grid.arrange, c(plot_list, ncol = 2))

Exercice 4 : réalisation de tests T sur des échantillons indépendants

11. Analysez l’impact de la valence émotionnelle de la musique sur le temps de regard des visages de sa propre race et d’autres races dans différents groupes d’âge de nourrissons (3, 6 et 9 mois). Plus précisément, vous devez effectuer une série de tests t sur des échantillons indépendants.

  • (a) En utilisant la colonne Age.Group, effectuez des tests t d’échantillons indépendants pour examiner les effets de la valence émotionnelle de la musique (Music. Emotion) sur le temps de regard (Total.Looking.Time) pour les visages de sa propre race et d’autres races (Face.Race) dans chaque groupe d’âge.
  • (b) Assurez-vous que votre script tient compte des différentes combinaisons de groupes d’âge et de valences émotionnelles de la musique.
  • (c) Stockez et affichez les résultats de ces tests t de manière organisée.

# Ensure Age.Group is treated as a factor
BabyData$Age.Group <- as.factor(BabyData$Age.Group)

# Perform t-tests for each combination of Age.Group, Music.Emotion, and Face.Race
results <- list()
for(age_group in levels(BabyData$Age.Group)) {
  for(music_emotion in unique(BabyData$Music.Emotion)) {
    # Filter data for specific age group and music emotion
    subset_data <- BabyData %>%
      filter(Age.Group == age_group, Music.Emotion == music_emotion)
   
    # Perform the t-test comparing Total.Looking.Time for own- vs. other-race faces
    t_test_result <- t.test(Total.Looking.Time ~ Face.Race, data = subset_data)

    # Store the results
    result_name <- paste(age_group, music_emotion, sep="_")
    results[[result_name]] <- t_test_result
  }
}

# Print results
print(results)

## $`3_happy`
##
##  Welch Two Sample t-test
##
## data:  Total.Looking.Time by Face.Race
## t = -0.3153, df = 22.294, p-value = 0.7555
## alternative hypothesis: true difference in means between group African and group Chinese is not equal to 0
## 95 percent confidence interval:
##  -12.465591   9.173257
## sample estimates:
## mean in group African mean in group Chinese
##              22.76875              24.41492
##
##
## $`3_sad`
##
##  Welch Two Sample t-test
##
## data:  Total.Looking.Time by Face.Race
## t = -1.0492, df = 22.86, p-value = 0.3051
## alternative hypothesis: true difference in means between group African and group Chinese is not equal to 0
## 95 percent confidence interval:
##  -17.297369   5.658457
## sample estimates:
## mean in group African mean in group Chinese
##              21.32725              27.14671
##
##
## $`6_happy`
##
##  Welch Two Sample t-test
##
## data:  Total.Looking.Time by Face.Race
## t = 0.43226, df = 27.324, p-value = 0.6689
## alternative hypothesis: true difference in means between group African and group Chinese is not equal to 0
## 95 percent confidence interval:
##  -6.401791  9.821475
## sample estimates:
## mean in group African mean in group Chinese
##              32.90100              31.19116
##
##
## $`6_sad`
##
##  Welch Two Sample t-test
##
## data:  Total.Looking.Time by Face.Race
## t = -0.62019, df = 27.075, p-value = 0.5403
## alternative hypothesis: true difference in means between group African and group Chinese is not equal to 0
## 95 percent confidence interval:
##  -9.635393  5.162123
## sample estimates:
## mean in group African mean in group Chinese
##              30.20163              32.43827
##
##
## $`9_happy`
##
##  Welch Two Sample t-test
##
## data:  Total.Looking.Time by Face.Race
## t = -6.0414, df = 21.29, p-value = 5.08e-06
## alternative hypothesis: true difference in means between group African and group Chinese is not equal to 0
## 95 percent confidence interval:
##  -27.28467 -13.31931
## sample estimates:
## mean in group African mean in group Chinese
##              19.13607              39.43806
##
##
## $`9_sad`
##
##  Welch Two Sample t-test
##
## data:  Total.Looking.Time by Face.Race
## t = 3.0179, df = 26.642, p-value = 0.005546
## alternative hypothesis: true difference in means between group African and group Chinese is not equal to 0
## 95 percent confidence interval:
##   3.335708 17.533234
## sample estimates:
## mean in group African mean in group Chinese
##              38.68853              28.25406

 

Exercice 5 Création d’un diagramme à barres

12. Créez un diagramme à barres pour visualiser les effets de la valence émotionnelle de la musique sur le temps de regard des nourrissons à différents âges pour les visages de leur propre race et ceux d’une autre race.

  • (a) Le graphique doit montrer le temps total moyen passé à regarder les visages de sa propre race et ceux d’une autre race associés à une musique joyeuse ou triste pour chaque groupe d’âge.
  • (b) Incluez les barres d’erreur standard dans votre graphique.
  • (c) Organisez les barres de manière à ce que les barres représentant les visages de votre propre race soient regroupées et étiquetées “Visages asiatiques de votre propre race”, suivies des barres représentant les visages d’autres races regroupées et étiquetées “Visages africains d’autres races”.
  • (d) La couleur des barres doit représenter l’émotion musicale : utilisez le bleu pour la musique triste et l’orange pour la musique joyeuse.
  • (e) Inscrivez sur l’axe des x “Âge (mois)” et sur l’axe des y “Temps de regard moyen (secondes)”.
  • (f) Intitulez votre graphique “Analyse du temps de regard par tranche d’âge, par race de visage et par émotion musicale”
  • (g) Définissez le thème de votre graphique comme étant minimal. Assurez-vous que les lignes des axes x et y sont des lignes noires pleines.
  • (h) Votre graphique ne doit pas afficher de lignes de grille mineures, mais uniquement des lignes de grille majeures.

# Calculate means and standard errors
data_summary <- BabyData %>%
  group_by(Age.Group, Face.Race, Music.Emotion) %>%
  summarize(Mean = mean(Total.Looking.Time),
            SE = sd(Total.Looking.Time)/sqrt(n())) %>%
  ungroup()

## `summarise()` has grouped output by 'Age.Group', 'Face.Race'. You can override
## using the `.groups` argument.

# Create the bar plot
ggplot(data_summary, aes(x = factor(Age.Group), y = Mean, fill = Music.Emotion)) +
  geom_bar(stat = "identity", position = position_dodge()) +
  geom_errorbar(aes(ymin = Mean - SE, ymax = Mean + SE),
                position = position_dodge(0.9), width = 0.25) +
  scale_fill_manual(values = c("happy" = "orange", "sad" = "blue")) +
  facet_wrap(~ Face.Race, scales = "free_x", labeller = labeller(Face.Race = c(Chinese = "Own Race Asian Faces", African = "Other Race African Faces"))) +
  labs(x = "Age (months)", y = "Mean Looking Time (seconds)", title = "Analysis of Looking Time by Age Group, Face Race, and Music Emotion") +
  theme_minimal() +
  theme(
    panel.grid.minor = element_blank(),
    panel.grid.major = element_line(color = "gray", size = 0.5, linetype = "solid"),  # Major grid lines
    axis.line = element_line(color = "black", size = 0.5)  # Axis lines
  )

License

Icon for the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License

P03: Laboratoire de développement de la petite enfance Copyright © 2024 by Sevda Montakhaby Nodeh is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License, except where otherwise noted.

Share This Book