Comment puis-je tester la même variable catégorielle sur deux populations?

8

J'ai des données qui ressemblent un peu à ceci:

ID         Status
01         A
02         G
03         E
...        ...
100        G

Vous voyez l'idée, je pense. J'ai ces données de deux populations distinctes (cohortes) et je veux comparer la distribution de la variable de statut dans une population à la distribution dans une autre. La question à laquelle je réponds est quelque chose comme ceci: si vous ne saviez pas mieux, pourraient-ils provenir de la même population? Je pense que cela signifie que je devrais exécuter le chi d'une personne au carré, bien que je ne sois pas sûr. Je ne suis pas sûr non plus de la méthodologie de transformation de la variable d'une manière qui vous permet d'exécuter le test. (Je voudrais surtout savoir comment faire cela dans R.)

Zelbinian
la source

Réponses:

10

Permettez-moi (a) d'expliquer d'abord l'idée sous-jacente plutôt que la mécanique - elles deviennent plus évidentes rétrospectivement. Ensuite (b) je parlerai du chi carré (et si c'est approprié - ce n'est peut-être pas le cas!), Puis (c) je parlerai de la façon de le faire en R.

(a) Sous le nul, les populations sont les mêmes. Imaginez que vous regroupiez vos deux cohortes dans un seul ensemble de données volumineux mais que vous ajoutiez une colonne contenant les étiquettes de cohorte. Ensuite, sous le zéro, l'étiquette de cohorte n'est en fait qu'une étiquette aléatoire qui ne vous dit rien de plus sur la distribution d'où provient l'observation.

Dans l'alternative, bien sûr, les étiquettes de cohorte sont importantes - connaître l'étiquette de cohorte vous en dit plus qu'ignorer car les distributions sous les deux étiquettes sont différentes.

(Cela suggère immédiatement une sorte de test de permutation / test de randomisation où une statistique - sensible à l'alternative - calculée sur l'échantillon est comparée à la distribution de la même statistique avec les étiquettes de cohorte réaffectées aux lignes au hasard. Si vous avez fait tout les réaffectations possibles sont un test de permutation, si vous ne les échantillonnez que c'est un test de randomisation.)

(b) Alors maintenant, comment faire un chi carré?

Vous calculez les valeurs attendues sous le null. Étant donné que les étiquettes de cohorte n'ont pas d'importance sous la valeur nulle, vous calculez le nombre attendu dans chaque cellule en fonction de la distribution globale:

                       Status
                 A   B   ...  E   ...  G ...      Total
  Cohort 1:     10  15       18                    84
  Cohort 2:      9   7       25                    78

  Total:        19  22   ... 43 ...               162

Donc, si la distribution était la même, il n'y aurait pas d'association entre la cohorte et le statut, et (sous réserve des totaux des lignes ainsi que des totaux des colonnes) le nombre attendu dans la cellule(je,j) est row-total-i colonne-total-j / total-total×

Donc, vous obtenez juste un ordinaire test d'indépendance chi carré .

TOUTEFOIS!

Si les étiquettes d'état forment un ordre catégorie , ce test du chi carré jette beaucoup d'informations - il aura une faible puissance contre des alternatives intéressantes (comme un léger glissement vers des catégories supérieures ou inférieures). Dans cette situation, vous devriez faire quelque chose de plus approprié, c'est-à-dire qui prend en compte cet ordre. Il existe de nombreuses options.

-

(c) Maintenant, comment le faire dans R - cela dépend de la façon dont vos données sont actuellement configurées dans R - ce serait vraiment d'avoir un exemple reproductible comme un sous-ensemble de vos données!

Je suppose que vous l'avez dans un bloc de données avec deux colonnes, une avec le statut (un facteur) et une avec la cohorte (un deuxième facteur).

Ainsi:

  status  cohort
1      B Cohort1
2      B Cohort1
3      D Cohort1
4      B Cohort1
5      C Cohort1
6      D Cohort1
. 
.
. 
25      G Cohort2
26      E Cohort2
27      E Cohort2
28      D Cohort2
29      C Cohort2
30      G Cohort2

Ensuite, si c'était un bloc de données appelé, statusresultsvous obtiendrez un tableau comme celui que j'ai fait plus tôt avec:

> with(statusresults,table(cohort,status))
         status
cohort    A B C D E F G
  Cohort1 2 6 7 3 0 0 0
  Cohort2 0 0 2 2 4 1 3

Et pour le test chisquare, il vous suffirait d'aller:

> with(statusresults, chisq.test(status, cohort))

    Pearson's Chi-squared test

data:  status and cohort 
X-squared = 18.5185, df = 6, p-value = 0.005059

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

(l'avertissement est dû au fait que les comptes attendus sont faibles dans certaines cellules, étant donné que j'ai utilisé un très petit échantillon)

Si vous avez ordonné des catégories de statut, vous devez le dire, afin que nous puissions discuter d'autres possibilités pour l'analyse que le simple chisquare.

Glen_b -Reinstate Monica
la source
Merci pour l'exemple chi-2! Que recommanderiez-vous si le nombre de cellules est en fait aussi bas que dans votre exemple? C'est-à-dire que les conditions préalables à un test du khi carré sont violées?
Mark Heckmann
@MarkHeckmann Il n'y a vraiment pas de "prérequis" en tant que tels. La distribution du chi carré est toujours une approximation de la vraie distribution nulle du chi carré, et c'est une question de savoir à quel point une approximation approximative vous pouvez tolérer (par exemple, combien d'inexactitude dans les valeurs de p que vous pouvez tolérer dans quelles parties du Distribution). La règle d'or la plus courante est trop stricte, comme le mentionnent de nombreux articles. Mais si les nombres attendus étaient tout simplement trop petits, j'utiliserais une simulation à partir de la distribution nulle du test du chi carré, ou choisirais n'importe quelle statistique appropriée et utiliserais l'approche de permutation décrite en (a).
Glen_b -Reinstate Monica
1

Vous avez raison concernant l'idée de faire un test du chi carré. Voici donc:

#Create two data sets (id, outcome and group label)
Dat1 <- as.data.frame(cbind(1:999,sample(c("A","G","E"),999,replace=T,prob=c(.2,.4,.4)),"group1"))
Dat2 <- as.data.frame(cbind(1:500,sample(c("A","G","E"),500,replace=T,prob=c(.4,.2,.4)),"group2"))

#Combine data sets
Dat  <- rbind(Dat1,Dat2)

#Receive descriptive statistics and compute Chi-Square
attach(Dat)
table(V3,V2)
chisq.test(table(V3,V2))
detach(Dat)

S'il est correct, votre chi carré sera significatif, d'où une différence significative entre les distributions des deux groupes. Pour une référence pour commencer, voir: http://en.wikipedia.org/wiki/Pearson%27s_chi-squared_test http://www.statmethods.net/stats/frequencies.html

Huub Hoofs
la source
0

Vous pourriez être intéressé par cet article [1]. Extrait du résumé:
Le but du test à deux échantillons (alias le test d'homogénéité) est, à partir de deux ensembles d'échantillons, de juger si les distributions de probabilité derrière les échantillons sont identiques ou non. Dans cet article, nous proposons une nouvelle méthode non paramétrique de test à deux échantillons basée sur un estimateur du ratio de densité des moindres carrés. Grâce à diverses expériences, nous montrons que la méthode proposée produit globalement une erreur de type II plus petite (c.-à-d. La probabilité de juger les deux distributions identiques lorsqu'elles sont réellement différentes) qu'une méthode de pointe, avec légèrement erreur de type I plus grande (c.-à-d. la probabilité de juger les deux distributions différentes alors qu'elles sont en fait les mêmes).

Les auteurs fournissent également du code matlab pour le même [2].

[1] http://www.ms.ku-tokyo.ac.jp/2011/LSTT.pdf
[2] http://www.ms.ku-tokyo.ac.jp/software.html#uLSIF

TenaliRaman
la source