Initiation à R (3/3)

Caractères à valeur nominale

χ-2

On s'intéresse au test de l'indépendance de deux descriptions statistiques. Prenons par exemples les données suivantes :

sujet rebelle sujet obéissant
catégorie 1230139
catégorie 28375
catégorie 32218
catégorie 42847
catégorie 5511

Ces données sont issues de Stanley Milgram, Soumission à l'autorité, Calmann-Lévy, 1974 (originalement, Obedience to authority, an experimental view, Harper & Row, 1974), tableau VII, page 213.
Elles indiquent la répartition entre 5 catégories de deux types de sujets dans une expérience de psychologie sociale.

On se demande si la répartition entre les 5 catégories est significativement différente entre les deux groupes de sujets.
On sait que la réponse à cette question fait appel à un test du χ-2.

On va résoudre cette question de deux manières : en faisant les calculs à la main (et avec R) et en utilisant la fonction R qui fait directement le test.

Avant toute chose, mettez ces données dans un data.frame (utilisez la fonction edit() vue à la première séance).

  1. calcul à la main : faites les calculs comme vous avez appris à les faire en cours de stats. Pour cela,
    • vous calculez la statistique χ-2 en calculant les effectifs marginaux pour chaque ligne et chaque colonne puis χ2 = Σi,j(Ni,j - ni,j)2 / ni,j où :
      • Ni,j est l'effectif de la case i, j
      • ni,j = i,. * .,j / N
      • Ni,. est la somme des effectifs de la ligne i
      • N.,j est la somme des effectifs de la colonne j
      • N est l'effectif complet.
    • vous déterminez le nombre de degrés de liberté
    • vous faites un test, au seuil α = ,05 par exemple. Pour cela, vous avez besoin de connaître χα, ν qui se calcule par la fonction qchisq(1 - α, ν) où ν est le nombre de degrés de liberté. Si χ-2 > χα, ν, le test d'indépendence au seuil α est positif.
    • solution possibleà tout cela :
      milgram.Ni. <- numeric (nrow (milgram))
      for (i in 1:nrow (milgram))
        milgram.Ni. <- sum (milgram [i, ])
      milgram.N.j <- numeric (ncol (milgram))
      for (i in 1:ncol (milgram))
        milgram.N.j <- sum (milgram [, i])
      milgram.N <- sum (milgram)
      milgram.nij <- milgram
      milgram.nij <- outer (milgram.Ni., milgram.N.j) / milgram.N
      milgram.chi2 <- sum ((milgram - milgram.nij)^2 / milgram.nij)
      
  2. calcul direct : pour savoir quelle fonction R utiliser, consultez l'excellent Using R for Introductory Statistics, pages 74-75, et faites-le.

Traitement des valeurs non disponibles

On reprend le jeu de données vu lors de la première séance concernant le sommeil des mammifères.
On veut traiter les NA. Ce que l'on va voir ici n'est pas forcément une bonne manière de traiter ces NA ; le but est de faire quelques manipulations en R.

Question : comment faites-vous pour remplacer les NA d'un caractère par la moyenne de ce caractère ?

On va essayer de faire mieux. On a vu la fonction cor(a, b) qui calcule le coefficient de corrélation linéaire entre deux caractères a et b. Question :

Pour faire un peu plus subtil pour le remplacement des NA, on va estimer une bonne valeur en considérant la corrélation entre les caractères.
Plus précisément, supposons que l'on veuille remplacer les NA de l'attribut Dreaming. On va déterminer le caractère le mieux corrélé linéairement avec Dreaming (pour les valeurs dont on dispose). Ensuite, on estimera la valeur de Dreaming grace à cette corrélation.

  1. si vous avez effectivement remplacer les NA plus haut, rechargez le jeu de données ;
  2. déterminer le coefficient de corrélation linéaire entre Dreaming et chacun des autres caractères ;
  3. déterminez le caractère le mieux corrélé avec Dreaming ;
  4. remplacez les NA de Dreaming.