library(tidyverse)
library(psych)

Données à traiter dans ce TP

En 1966, Sternberg a mené une étude simple dans laquelle il cherche à étudier la dynamique de la mémoire à court terme. Il a présenté un ensemble d’items (listes d’items de longueur variable de chiffres à mémoriser) sur un écran en face du sujet. Tout de suite après la présentation de cette liste, il présente au sujet un item test pour lequel le sujet doit dire si oui ou non il faisait partie de la liste qui venait d’être présentée. Les donnéesde ce TP ont été recueillies dans une expérience similaire à celle de Sternberg mais avec un seul sujet (Les données se trouvent dans le fichier Tab2-1.dat).

Les donnéesde ce TP ont été recueillies dans une expérience similaire à celle de Sternberg mais avec un seul sujet (Les données se trouvent dans le fichier Tab2-1.dat).

Le variables sont les suivantes :

Analyse des données et statistiques descriptives

  1. Enregistrement des commandes. Création d’un script R.

Plutôt que de saisir les commandes directement dans la console, il est tout à fait possible de les enregistrer directement dans un script de commandes R, ce qui permet de reproduire les analyses ultérieurement. Dans l’éditeur interne à R, il suffit d’écrire les commandes telles qu’on les entrerait sous la console et il est possible de transférer directement la ligne sur laquelle le curseur se situe ou une sélection multiple à la console.

2.Acquérir les données et les visualiser par les commandes suivantes

Stimuli <- read.table("Tab2-1.dat",header=TRUE)
head(Stimuli)
##   Trial RxTime NStim YesNo
## 1     1     40     1     1
## 2     2     41     1     1
## 3     3     47     1     1
## 4     4     38     1     1
## 5     5     40     1     1
## 6     6     37     1     1
summary(Stimuli)
##      Trial            RxTime           NStim       YesNo    
##  Min.   :  1.00   Min.   : 36.00   Min.   :1   Min.   :1.0  
##  1st Qu.: 75.75   1st Qu.: 51.00   1st Qu.:1   1st Qu.:1.0  
##  Median :150.50   Median : 59.50   Median :3   Median :1.5  
##  Mean   :150.50   Mean   : 60.26   Mean   :3   Mean   :1.5  
##  3rd Qu.:225.25   3rd Qu.: 67.00   3rd Qu.:5   3rd Qu.:2.0  
##  Max.   :300.00   Max.   :125.00   Max.   :5   Max.   :2.0
  1. Recodage de variables
Stimuli <- Stimuli %>% mutate(NStim = factor(NStim), 
                              YesNo = factor(YesNo,labels=c("Yes","No")))
 
summary(Stimuli)
##      Trial            RxTime       NStim   YesNo    
##  Min.   :  1.00   Min.   : 36.00   1:100   Yes:150  
##  1st Qu.: 75.75   1st Qu.: 51.00   3:100   No :150  
##  Median :150.50   Median : 59.50   5:100            
##  Mean   :150.50   Mean   : 60.26                    
##  3rd Qu.:225.25   3rd Qu.: 67.00                    
##  Max.   :300.00   Max.   :125.00
  1. Utiliser la variable temps de réaction RxTime. Calculer la moyenne, le minimum, le maximum et les trois quartiles de la variable cette variable en exécutant la commande summary(Stimuli$RxTime).
summary(Stimuli$RxTime)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   36.00   51.00   59.50   60.26   67.00  125.00

Que peut-on en remarquer ?

  1. Combien de fois chaque temps de réaction eu lieu ?
tab_RxTime <- Stimuli %>%  group_by(RxTime) %>%   summarise(n=n())
View(tab_RxTime)
  1. Calculer la moyenne observée du temps de réaction pour chaque condition expérimentale (nombre de stimuli sans distinguer le Yes et No).
Stimuli %>% group_by(NStim) %>% summarise(n=n())
## # A tibble: 3 x 2
##   NStim     n
##   <fct> <int>
## 1 1       100
## 2 3       100
## 3 5       100
Stimuli %>% group_by(NStim) %>% summarise(Moygroupe =mean(RxTime))
## # A tibble: 3 x 2
##   NStim Moygroupe
##   <fct>     <dbl>
## 1 1          53.3
## 2 3          60.6
## 3 5          66.9
StimuliMoygroup <- Stimuli %>% group_by(NStim) %>% summarise(Moygroupe =mean(RxTime))
StimuliMoygroup
## # A tibble: 3 x 2
##   NStim Moygroupe
##   <fct>     <dbl>
## 1 1          53.3
## 2 3          60.6
## 3 5          66.9
Stimuli %>% group_by(NStim) %>% summarise(Moygroupe =mean(RxTime),ETgroupe=sd(RxTime))
## # A tibble: 3 x 3
##   NStim Moygroupe ETgroupe
##   <fct>     <dbl>    <dbl>
## 1 1          53.3    13.4 
## 2 3          60.6     9.41
## 3 5          66.9    12.3
  1. Tracer la densité de la variable temps de réaction, RxTime, pour chaque modalité.
ggplot(data=Stimuli, aes(x=RxTime, color=NStim, fill=NStim))  +
  geom_density(alpha=0.5)

A vous de jouer !

ggplot(data=Stimuli, aes(x=RxTime, color=NStim, fill=NStim)) +
  geom_density(alpha=0.5) +
  geom_vline(data=StimuliMoygroup , aes(xintercept=Moygroupe, color=NStim),
             linetype="dashed")

ggplot(data=Stimuli, aes(x=RxTime)) + geom_density() +
  facet_grid(NStim ~ .)

  1. Visualiser le temps de réaction en fonction du nombre de stimuli grâce à une boite à moustaches (boxplot en anglais) et grâce à un nuage de points.
ggplot(data = Stimuli, aes(x = NStim, y = RxTime)) + geom_boxplot()

Modele Linéare

Nous avons remarqué dans cet experience que le temps de réaction observée (sur l’echantillon) augmente avec le nombre d’items à memoriser. Un modèle linéaire semble-t-il pertinent ? Quel type des questions peut-on se poser ?

Interpréter les résultats des commandes suivantes (pour chaque cas traité).

Modèle linéaire simple

Qu’est qui se passe si on considère la variable NStim comme une variable qualitative à 3 modalités ? Est-ce que c’est logique ? Y a-t-il une différence significative entre les temps de réactions des 3 catégories ? Peut-on “expliquer” RxTime par NStim ?

Anova à un facteur

Le modèle d’Anova à un factor correspond à un modèle linéaire simple avec une variable explicative qualitative.

fit1 <- aov(RxTime ~ NStim, data = Stimuli)
coef(fit1)
## (Intercept)      NStim3      NStim5 
##       53.27        7.38       13.59
summary(fit1)
##              Df Sum Sq Mean Sq F value  Pr(>F)    
## NStim         2   9257    4629   33.24 9.4e-14 ***
## Residuals   297  41357     139                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
fit2 <- lm(RxTime ~ NStim , data = Stimuli)
coef(fit2)
## (Intercept)      NStim3      NStim5 
##       53.27        7.38       13.59
anova(fit2)
## Analysis of Variance Table
## 
## Response: RxTime
##            Df Sum Sq Mean Sq F value    Pr(>F)    
## NStim       2   9257  4628.6   33.24 9.395e-14 ***
## Residuals 297  41357   139.2                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Qu’est-ce que font fit1 et le fit2? Qu’est-ce que font summary(fit1) et anova(fit2)? Est-ce qu’on obtient les mêmes résultats ?

Prédiction

Rxtime_hat <- predict(fit2,data = Stimuli)
head(Rxtime_hat)
##     1     2     3     4     5     6 
## 53.27 53.27 53.27 53.27 53.27 53.27

Validation des hypothèses

Normalité

shapiro.test(Stimuli$RxTime[Stimuli$NStim=="1"])
## 
##  Shapiro-Wilk normality test
## 
## data:  Stimuli$RxTime[Stimuli$NStim == "1"]
## W = 0.84388, p-value = 7.094e-09
shapiro.test(Stimuli$RxTime[Stimuli$NStim=="3"])
## 
##  Shapiro-Wilk normality test
## 
## data:  Stimuli$RxTime[Stimuli$NStim == "3"]
## W = 0.95867, p-value = 0.003236
shapiro.test(Stimuli$RxTime[Stimuli$NStim=="5"])
## 
##  Shapiro-Wilk normality test
## 
## data:  Stimuli$RxTime[Stimuli$NStim == "5"]
## W = 0.92433, p-value = 2.406e-05
residus<-residuals(fit2)
shapiro.test(residus)
## 
##  Shapiro-Wilk normality test
## 
## data:  residus
## W = 0.90859, p-value = 1.59e-12

Homogeneité des variances

lawstat::levene.test(Stimuli$RxTime,Stimuli$NStim)
## 
##  modified robust Brown-Forsythe Levene-type test based on the
##  absolute deviations from the median
## 
## data:  Stimuli$RxTime
## Test Statistic = 1.9511, p-value = 0.1439

ANOVA non paramètrique

Le test de Kruskal Wallis, kruskal.test(), est la forme non paramétrique de l’ANOVA.

kruskal.test(RxTime ~ NStim ,data = Stimuli)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  RxTime by NStim
## Kruskal-Wallis chi-squared = 73.704, df = 2, p-value < 2.2e-16