Avertissement dans R - L’approximation du chi carré peut être incorrecte


40

J'ai des données montrant les résultats de l'examen d'entrée des pompiers. Je teste l'hypothèse selon laquelle les résultats des examens et l'appartenance ethnique ne sont pas mutuellement indépendants. Pour tester cela, j’ai effectué un test du chi-carré de Pearson dans R. Les résultats montrent ce à quoi j’attendais, mais il a averti que " In chisq.test(a) : Chi-squared approximation may be incorrect."

> a
       white black asian hispanic
pass       5     2     2        0
noShow     0     1     0        0
fail       0     2     3        4
> chisq.test(a)

    Pearson's Chi-squared test

data:  a
X-squared = 12.6667, df = 6, p-value = 0.04865

Warning message:
In chisq.test(a) : Chi-squared approximation may be incorrect

Est-ce que quelqu'un sait pourquoi il a donné un avertissement? Est-ce parce que j'utilise une mauvaise méthode?


2
Ne faites jamais confiance à un résultat avec si peu de mesures. Lorsque vous avez des centaines de personnes dans chaque colonne, vous pouvez avoir une certaine confiance dans vos résultats. Néanmoins, le résultat pourrait être davantage dû au voisinage ou à la richesse qu'à la race elle-même.
Rodrigo

Réponses:


41

Cela a donné l'avertissement, car bon nombre des valeurs attendues seront très petites et donc les approximations de p risquent de ne pas être correctes.

Dans Rvous pouvez utiliser chisq.test(a, simulate.p.value = TRUE)pour utiliser simuler des valeurs p.

Cependant, avec de si petites tailles de cellules, toutes les estimations seront médiocres. Il pourrait être bon de simplement tester succès contre échec (en supprimant "no show") avec une régression Khi-deux ou logistique. En effet, comme il est assez clair que la note de passage / échec est une variable dépendante, la régression logistique pourrait être meilleure.


Que fait réellement simulate.p.value = TRUEquand ajouté à chisq.test?
Al14

1
Il utilise des simulations pour trouver la valeur p
Peter Flom - Réintégrer Monica

1
Notez que la simulate.p.value = TRUEsimulation est conditionnelle aux marges , ce qui en fait une version du test exact de Fisher.
kjetil b halvorsen le

23

Le problème est que l'approximation du khi-deux de la distribution de la statistique de test repose sur le fait que les comptes sont distribués à peu près normalement. Si nombre des dénombrements prévus sont très faibles, l’approximation peut être médiocre.

Notez que la distribution réelle de la statistique chi-carré d'indépendance dans les tableaux de contingence est discrète et non continue.

La catégorie noshow contribuera grandement au problème; Une chose à considérer est de fusionner noshow et échouer. Vous aurez toujours l'avertissement mais cela n'affectera pas les résultats et la distribution devrait être assez raisonnable (la règle appliquée avant que l'avertissement ne soit donné est trop stricte).

Toutefois, dans tous les cas, si vous êtes prêt à conditionner vos marges (comme vous le faites lorsque vous exécutez le test exact de Fisher), vous pouvez traiter le problème très facilement dans R; définir l' simulate.p.valueargument à TRUE; alors vous ne vous fiez pas à l'approximation du Khi-deux pour la distribution de la statistique de test.


pouvez-vous m'expliquer, pourquoi "... l'approximation du khi-deux de la distribution de la statistique de test repose sur le fait que les comptes sont approximativement normalement distribués"? Je ne comprends pas comment cela peut être vrai si on a par exemple un tableau de contingence 2x2. Comment les nombres peuvent-ils être (approximativement) distribués normalement? Comment des comptes blancs, noirs, hispaniques et asiatiques peuvent-ils être normalement distribués? Voulez-vous dire juste légèrement égal? Et quel est le lien avec cette question? : stats.stackexchange.com/questions/141407/…
Erosennin

La distribution multivariée des variables aléatoires de comptage doit être approximativement normale (bien qu'elle soit dégénérée). L'ensemble des comptes observés ne représente qu'une seule observation vectorielle à partir de cette normale multivariée - vous ne pouvez pas juger la distribution à partir d'une observation. Pour procéder à l'évaluation dont je parle, vous devez vous appuyer sur les hypothèses. il est relativement facile de le faire pour les cellules individuelles (c'est-à-dire la distribution marginale pour une cellule donnée, sous le zéro). Vous semblez combiner les comptages entre les cellules, mais cela n'a aucun sens, car ils proviennent tous de distributions différentes
Glen_b -Reinstate Monica

Tout d'abord, merci d'avoir pris le temps! Vous dites donc que les chiffres "à la baisse" du tableau de contingence devraient être normaux (de manière dégénérative) multivariés, si nous examinons de nombreuses observations? Cela ne signifie-t-il pas que les comptages de chaque cellule individuelle doivent également être normaux et comptent également "de côté" dans le tableau de contingence (je suppose que c'est ce que vous voulez dire par "en face")? F.ex une cellule avec la valeur attendue 5, devrait être normalement distribuée autour de 5, non? Donc, si une cellule a une valeur attendue de 40, cette cellule doit être normalement distribuée autour de 40 et, ensemble, une normale multivariée de moyenne 5 et 40, non?
Erosennin

1
En général r×crc(r-1)(c-1)
Glen_b -Reinstate Monica

C'est lourd et très intéressant. Si vous avez le temps, j'ai republié ma première question ici: stats.stackexchange.com/questions/142429/… .
Erosennin

12

Pour de tels comptes, vous pouvez utiliser le test exact de Fisher:

> fisher.test(a)

        Fisher's Exact Test for Count Data

data:  a 
p-value = 0.02618
alternative hypothesis: two.sided 

3

Veuillez vous reporter à la section "Hypothèses" de l'article de test du chi-carré de Pearson .

En un mot, lorsque le nombre de cellules dans votre tableau est inférieur à 5, l’une des hypothèses est cassée. Je pense que c'est ce que le message d'erreur fait référence. Dans l'article lié, vous pouvez également trouver des informations sur la correction à appliquer.


6
χ2

0

Votre question principale parle de la taille de l'échantillon, mais je vois que plus de deux groupes sont comparés. Si la valeur p du test est de 0,05 ou moins, il serait difficile d'interpréter les résultats. Par conséquent, je partage un bref script que j'utilise dans de telles situations:

# Load the required packages:
library(MASS) # for chisq
library(descr) # for crosstable

CrossTable(a$exam_result, a$ethnicity
       fisher = T, chisq = T, expected = T,
       prop.c = F, prop.t = F, prop.chisq = F, 
       sresid = T, format = 'SPSS')

Ce code générera à la fois le Chi-carré de Pearson et le Chi-carré de Fisher. Il produit des nombres ainsi que des proportions de chacune des entrées de la table. Sur la base des valeurs résiduelles ou z standardisées, c’est-à-dire:

sresid

Si c'est en dehors de la plage | 1,96 | c'est-à-dire inférieur à -1,96 ou supérieur à 1,96, il est significatif p <0,05. Le signe indiquerait alors s'il est lié positivement ou négativement.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.