distance du chi deux

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

camille mariot
Messages : 15
Enregistré le : 09 Nov 2006, 12:38

distance du chi deux

Messagepar camille mariot » 10 Jan 2007, 14:20

Existe-t-il avec R une fonction qui calcule, pour un tableau de contingence, une matrice des distances avec la distance du chi deux?

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 10 Jan 2007, 14:47

Bonjour,


Si tu cherches les valeurs de attendues pour un test de chi deux, utilise la fonction chisq.test :

Code : Tout sélectionner

t <- matrix(rpois(25,8),5,5)
t
     [,1] [,2] [,3] [,4] [,5]
[1,]    8    7    8   13   11
[2,]    8    7   11    7    7
[3,]    4    8    5    6    8
[4,]    9    6    7    4    5
[5,]    3    7    9    6    6

test <- chisq.test(t)$expected
test
         [,1]     [,2]      [,3] [,4]     [,5]
[1,] 8.355556 9.138889 10.444444  9.4 9.661111
[2,] 7.111111 7.777778  8.888889  8.0 8.222222
[3,] 5.511111 6.027778  6.888889  6.2 6.372222
[4,] 5.511111 6.027778  6.888889  6.2 6.372222
[5,] 5.511111 6.027778  6.888889  6.2 6.372222
# ce qui équivaut à :
cols <- colSums(t)
rows <- rowSums(t)
outer(rows,cols)/sum(t)
         [,1]     [,2]      [,3] [,4]     [,5]
[1,] 8.355556 9.138889 10.444444  9.4 9.661111
[2,] 7.111111 7.777778  8.888889  8.0 8.222222
[3,] 5.511111 6.027778  6.888889  6.2 6.372222
[4,] 5.511111 6.027778  6.888889  6.2 6.372222
[5,] 5.511111 6.027778  6.888889  6.2 6.372222


En espérant t'avoir aidé.

Maxime

Olivier Delaigue
Messages : 220
Enregistré le : 05 Déc 2006, 07:38

Messagepar Olivier Delaigue » 10 Jan 2007, 15:25

De manière générale il est assez instructif d'utiliser la fonction unclass() pour afficher les objets cachés :

Code : Tout sélectionner

#Avec l'exemple précédemment cité
unclass(chisq.test(t))


Et pour afficher les résultats comme on le fait lorsque l'on apprend à faire un test du chi deux à la main (ce qui est parfaitement inutile, mais ça aide à comprendre).

Code : Tout sélectionner

library(TeachingDemos)
chisq.detail(t)
#La fonction contient les même objets (à peu de choses près) que la précédante.
unclass(chisq.detail(t))

camille mariot
Messages : 15
Enregistré le : 09 Nov 2006, 12:38

Messagepar camille mariot » 11 Jan 2007, 07:27

En fait je ne cherche pas à avoir les effectifs théoriques d'un test de chi deux.

Je dispose d'une table de contingence et je voudrais obtenir la matrice des distances ente lignes et celle des distances entre colonnes, sachant que la distance utilisée n'est pas la distance euclidienne, mais la distance du chi deux.

Pour obtenir une matrice des distances, il existe la fonction dist() avec plusieurs types de distances (euclidienne, minkowski, etc...) mais qui ne permet pas de calculer la distance du chi deux.

Jusqu'ici j'ai écrit une fonction qui calcule cette matrice mais je suis étonnée qu'il n'en existe pas une toute prête avec R.

Olivier Delaigue
Messages : 220
Enregistré le : 05 Déc 2006, 07:38

Messagepar Olivier Delaigue » 11 Jan 2007, 08:32

Je vais peut-être dire une grosse bêtise, mais ce qu'on appelle distance du chi-deux ne serait-ce pas tout simplement la statistique du test ?

camille mariot
Messages : 15
Enregistré le : 09 Nov 2006, 12:38

Messagepar camille mariot » 12 Jan 2007, 07:52

Une statistique de chi deux compare les effectifs réels d'un tableau de contingence aux effectifs théoriques. Cette statistique sert à regarder le lien potentiel entre les variables.

La distance du chi deux est aussi calculée à partir du tableau des effectifs théoriques mais ça n'est pas la même chose. Elle sert à calculer la distance entre les lignes d'un tableau de contingence ou les colonnes. C'est pour effectuer une classification.

Donc non, ça n'est pas tout à fait la même chose!

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 12 Jan 2007, 13:25

Bonjour,


Il semblerait que tu puisses retomber sur des valeurs de distance de chi deux en utilisant la librairie ade4 et en passant par une analyse factorielle des correspondances :

Code : Tout sélectionner

library(ade4)
test <- as.data.frame(matrix(c(4,1,2,2),2,2))
test
  V1 V2
1  4  2
2  1  2

# l'AFC
test <- dudi.coa(test,scan=F)
# calcul de distance
testc <- dist.dudi(test)
testc
          1
2 0.6708204
testc^2
     1
2 0.45


Je serais curieux de savoir si les valeurs que tu obtiens avec ta fonction ou ton script sont les mêmes que pour cette méthode.

Maxime

camille mariot
Messages : 15
Enregistré le : 09 Nov 2006, 12:38

Messagepar camille mariot » 15 Jan 2007, 11:12

ça marche!!

Ce qui est logique car pour une AFC, c'est la distance du chi deux qui est utilisée.

Donc il ne me reste qu'à jeter ma fonction de 25 lignes et utiliser l'AFC.

Merci!


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

cron