Imprimer
Catégorie parente: Logiciel R
Catégorie : Facteurs et tableaux

Pour commencer à explorer les tables R, considérez cet exemple:

  1. > u <- c(22,8,33,6,8,29,-2)
  2. > fl <- list(c(5,12,13,12,13,5,13),c("a","bc","a","a","bc","a","a"))
  3. > tapply(u,fl,length)
  4. a bc
  5. 5 2 NA
  6. 12 1 1
  7. 13 2 1
Source code
Ici, tapply () interrompt temporairement u en sous-secteurs, comme vous l'avez vu plus tôt, puis applique la fonction length () à chaque sous-vecteur. (Notez que ceci est indépendant de ce qui est dans u.) Notre attention est maintenant purement sur les facteurs.) Ces longueurs de sous-vecteurs sont les comptes des occurrences de chacune des 3 x 2 = 6 combinaisons des deux facteurs. Par exemple, 5 sont survenus deux fois avec "a" et pas du tout avec "bc"; d'où les entrées 2 et NA dans la première ligne de la sortie. En statistique, cela s'appelle un tableau de contingence.
Il y a un problème dans cet exemple: la valeur NA. Il devrait vraiment être 0, ce qui signifie que dans aucun cas le premier facteur n'a le niveau 5 et le second le niveau "bc". La fonction table () crée des tables de contingence correctement.
  1. > table(fl)
  2. fl.2
  3. fl.1 a bc
  4. 5 2 1
  5. 12 1 1
  6. 13 1 0
Source code
Le premier argument d'un appel à table () est un facteur ou une liste de facteurs. Les deux facteurs étaient (5,12,13,12,13,5,13) et («a», «bc», «a», «a», «bc», «a», «a») . Dans ce cas, un objet qui peut être interprété comme un facteur est compté comme un.
Typiquement, une trame de données sert d'argument de données table (). Supposons par exemple que le fichier ct.dat se compose de données d'interrogation d'élection, dans lesquelles le candidat X est en cours de réélection. Le fichier ct.dat ressemble à ceci:
  1. "Vote for X" "Voted For X Last Time"
  2. "Yes" "Yes"
  3. "Yes" "No"
  4. "No" "No"
  5. "Not Sure" "Yes"
  6. "No" "No"
Source code

Selon la méthode statistique habituelle, chaque ligne de ce fichier représente un sous-projet à l'étude. Dans ce cas, nous avons posé à cinq personnes les deux questions suivantes:
• Prévoyez-vous voter pour le candidat X?
• Avez-vous voté pour X aux dernières élections?
Cela nous donne cinq lignes dans le fichier de données.
Lisons dans le fichier:

  1. > ct <- read.table("ct.dat",header=T)
  2. > ct
  3. Vote.for.X Voted.for.X.Last.Time
  4. 1 Yes Yes
  5. 2 Yes No
  6. 3 No No
  7. 4 Not Sure Yes
  8. 5 No No
Source code
Nous pouvons utiliser la fonction table () pour calculer la table de contingence pour ces données:

  1. > cttab <- table(ct)
  2. > cttab
  3. Voted.for.X.Last.Time
  4. Vote.for.X No Yes
  5. No 2 0
  6. Not Sure 0 1
  7. Yes 1 1
Source code
Voté.à.X.Vote.à.temps.par.X Non Oui Non 2 0
Pas sûr 0 1 Oui 1 1
Le 2 dans le coin supérieur gauche du tableau montre que nous avons eu, par exemple, deux personnes qui ont répondu «non» aux première et deuxième questions. Le 1 au milieu à droite indique qu'une personne a répondu «pas sûr» à la première question et «oui» à la deuxième question.
Nous pouvons également obtenir des dénombrements unidimensionnels, qui sont des dénombrements sur un seul facteur, comme suit:

  1. > table(c(5,12,13,12,8,5))
  2. 5 8 12 13
  3. 2 1 2 1
Source code
Voici un exemple d'une table tridimensionnelle impliquant les génies des électeurs, la race (blanche, noire, asiatique et autre) et les opinions politiques (libérales ou conservatrices):

  1. > v # the data frame
  2. gender race pol
  3. 1 M W L
  4. 2 M W L
  5. 3 F A C
  6. 4 M O L
  7. 5 F B L
  8. 6 F B C
  9. > vt <- table(v)
  10. > vt
  11. , , pol = C
  12. race
  13. gender A B O W
  14. F 1 1 0 0
  15. M 0 0 0 0
  16. , , pol = L
  17. race
  18. gender A B O W
  19. F 0 1 0 0
  20. M 0 0 1 2
Source code
R imprime une table tridimensionnelle sous la forme d'une série de tables bidimensionnelles. Dans ce cas, il génère un tableau de genre et de race pour les conservateurs puis un tableau correspondant pour les libéraux. Par exemple, la deuxième table à deux dimensions dit qu'il y avait deux libéraux blancs.

 

1 Opérations Matrix / Array-Like sur les tables
Tout comme la plupart des opérations matricielles / matricielles (non mathématiques) peuvent être utilisées sur les trames de données, elles peuvent également être appliquées aux tables. (Cela n'est pas surprenant, étant donné que la partie de nombre de cellules d'un objet de table est un tableau.)
Par exemple, nous pouvons accéder au nombre de cellules de la table en utilisant la notation matricielle. Appliquons ceci à notre exemple de vote de la section précédente.
  1. > class(cttab)
  2. [1] "table"
  3. > cttab[1,1]
  4. [1] 2
  5. > cttab[1,]
  6. No Yes
  7. 2 0
Source code
Dans la deuxième commande, même si la première commande avait montré que cttab avait la classe "cttab", nous l'avons traitée comme une matrice et imprimé son "élément [1,1]". En continuant cette idée, la troisième commande imprimait la première colonne de cette "matrice".
Nous pouvons multiplier la matrice par un scalaire. Par exemple, voici comment changer le nombre de cellules en proportions:
  1. > ctt/5
  2. Voted.for.X.Last.Time
  3. Vote.for.X No Yes
  4. No 0.4 0.0
  5. Not Sure 0.0 0.2
  6. Yes 0.2 0.2
Source code
En statistique, les valeurs marginales d'une variable sont celles obtenues lorsque cette variable est maintenue constante alors que d'autres sont additionnées. Dans l'exemple de vote, les valeurs marginales de la variable Vote.for.X sont 2 + 0 = 2, 0 + 1 = 1, et
1 + 1 = 2. On peut bien sûr les obtenir via la matrice la fonction apply ():
  1. > apply(ctt,1,sum)
  2. No Not Sure Yes
  3. 2 1 2
Source code
Notez que les étiquettes ici, telles que Non, proviennent des noms de lignes de la matrice, dont table () produit.
Mais R fournit une fonction addmargins () à cet effet, c'est-à-dire pour trouver des totaux marginaux. Voici un exemple:
  1. > addmargins(cttab)
  2. Voted.for.X.Last.Time
  3. Vote.for.X No Yes Sum
  4. No 2 0 2
  5. Not Sure 0 1 1
  6. Yes 1 1 2
  7. Sum 3 2 5
Source code
Ici, nous avons obtenu les données marginales pour les deux dimensions à la fois, superposées conve- nablement sur la table originale.
Nous pouvons obtenir les noms des dimensions et des niveaux à travers dimnames (), comme suit:
  1. > dimnames(cttab)
  2. $Vote.for.X
  3. [1] "No" "Not Sure" "Yes"
  4. $Voted.for.X.Last.Time
  5. [1] "No" "Yes"
Source code