Pour 1 000 000 d'observations, j'ai observé un événement discret, X, 3 fois pour le groupe témoin et 10 fois pour le groupe test. Comment déterminer, pour un grand nombre d'observations (1 000 000), si trois est statistiquement différent de dix?
Pour 1 000 000 d'observations, j'ai observé un événement discret, X, 3 fois pour le groupe témoin et 10 fois pour le groupe test. Comment déterminer, pour un grand nombre d'observations (1 000 000), si trois est statistiquement différent de dix?
Les dénominateurs énormes bouleversent l'intuition. Étant donné que les tailles d'échantillon sont identiques et les proportions faibles, le problème peut être remanié: 13 événements se sont produits et devaient (par hypothèse nulle) se produire de la même manière dans les deux groupes. En fait, la répartition était de 3 dans un groupe et de 10 dans l'autre. À quel point est-ce rare? Le test binomial répond.
Entrez cette ligne dans R: binom.test (3,13,0.5, alternative = "two.sided")
La valeur P à deux queues est 0,09229, identique à quatre chiffres aux résultats du test de Fisher.
Vu de cette façon, les résultats ne sont pas surprenants. Le problème est équivalent à celui-ci: si vous jetiez une pièce 13 fois, à quel point ce serait surprenant de voir trois têtes ou moins, ou dix ou plus. L'un de ces résultats se produirait 9,23% du temps.
Un test exact de Fisher (bilatéral) donne p-value = 0.092284 Pour votre exemple, essayez
function p = fexact (k, x, m, n)% FEXACT Test exact de Fisher.% Y = FEXACT (K, X, M, N) calcule la valeur P pour le test% exact de Fisher.% K, X, M et N doivent être des vecteurs entiers non négatifs de même% de longueur. Les éléments suivants doivent également contenir:% X < = N < = M, X < = K < = M et K + N - M < = X. Ici:% K est le nombre d'éléments dans le groupe,% X est le nombre d'éléments dans le groupe avec la fonctionnalité,% M est le nombre total d'éléments,% N est le nombre total d'éléments avec la fonctionnalité, si nargin < 4 help (mfilename); return; endnr = longueur (k); si nr ~ = longueur (x) | nr ~ = longueur (m) | nr ~ = longueur (n) help (mfilename); return; endna = nan; v = na (uns (nr, 1)); mi = max (0, k + n - m); ma = min (k, n); d = hygepdf (x, m, k, n) * (1 + 5,8e-11); pour i = 1: nr y = hygepdf (mi (i): ma (i), m (i), k (i), n (i)); v (i) = somme (y (y < = d (i))); endp = max (min (v, 1), 0); p (isnan (v)) = nan;
fexact (1e6, 3, 2e6, 13)
.
Je pense qu'un simple test du chi carré fera l'affaire. Avez-vous 1 000 000 d'observations pour le contrôle et le test? Si oui, votre table d'observations sera (en code R)
Edit: Woops! A laissé un zéro!
m <- rbind (c (3, 1000000-3), c (10, 1000000-10)) # [, 1] [, 2] # [1 ,] 3 999997 # [2,] 10 999990
Et le test du chi carré sera
chisq.test (m)
Ce qui renvoie chi-carré = 2,7692, df = 1, p-value = 0,0961, ce qui n'est pas statistiquement significatif au niveau p < 0,05. Je serais surpris si ceux-ci pouvaient être cliniquement significatifs de toute façon.
Dans ce cas, Poisson est une bonne approximation de la distribution pour le nombre de cas. Il existe une formule simple pour approximer la variance du log RR (méthode delta).
log RR = 10/3 = 1.2, se log RR = sqrt (1/3 + 1/10) = 0,66, donc IC à 95% = (-0,09; 2,5)
Ce n'est pas une différence significative au niveau de 0,05 en utilisant le test bilatéral. -square test pour le modèle de Poisson donne p = 0,046 et le test de Wald p = 0,067.Ces résultats sont similaires au test de Pearson Chi-carré sans correction de continuité (Chi2 avec correction p = 0,096) .Une autre possibilité est chisq.test avec l'option simulate.p .value = T, dans ce cas p = 0,092 (pour 100 000 simulations).
Dans ce cas, les statistiques de test sont plutôt discrètes, donc le test de Fisher peut être prudent.Il existe des preuves que la différence peut être significative . Avant la conclusion finale, le processus de collecte des données doit être pris en compte.
Je serais vraiment surpris si vous trouviez la différence statistiquement significative. Cela dit, vous voudrez peut-être utiliser un test pour une différence de proportions (3 sur 1M vs 10 sur 1M).
En plus des autres réponses: si vous avez 1 000 000 d'observations et que votre événement n'apparaît que quelques fois, vous voudrez probablement regarder de nombreux événements différents. Si vous regardez 100 événements différents, vous allez organiser en problèmes si vous travaillez avec p<0.05 comme critère de signification.
Si vous vouliez vérifier de manière non paramétrique la signification, vous pouvez amorcer les intervalles de confiance sur le rapport, ou vous pouvez faire un test de permutation sur les deux classes. Par exemple, pour faire le bootstrap, créez deux tableaux: un avec 3 uns et 999 997 zéros, et un avec 10 uns et 999 990 zéros. Ensuite, tirez avec remplacement un échantillon de 1 million d'éléments de la première population et un échantillon de 1 million d'éléments de la deuxième population. Le ratio qui nous intéresse est le ratio de "hits" dans le premier groupe par rapport au ratio de "hits" dans le second groupe, ou: (proportion de uns dans le premier échantillon) / (proportion de uns dans le deuxième échantillon) ). Nous faisons cela 1000 fois. Je n'ai pas matlab sous la main mais voici le code R pour le faire:
# générer les données de test à échantillonner à partir de v1 <- c (rep (1,3), rep (0,999997 )) v2 <- c (rep (1,10), rep (0,999990)) # configurer les vecteurs qui contiendront notre proportionst1 <- vector () t2 <- vector () # boucle 1000 fois à chaque fois l'échantillon avec remplacement des données de test et # enregistrez la proportion de 1 de chaque échantillon # remarque: cette étape prend quelques minutes. Il y a des façons de l'écrire de telle sorte que # ça ira plus vite dans R (s'applique), mais c'est plus évident ce qui se passe de cette façon: for (i in 1: 1000) {t1 [i] <- length (qui (sample ( v1,1000000, replace = TRUE) == 1)) / 1000000 t2 [i] <- length (which (sample (v2,1000000, replace = TRUE) == 1)) / 1000000} # quel était le rapport du proportion de 1 entre chaque groupe pour chaque tirage au sort? ratios <- t1 / t2 # saisir l'intervalle de confiance à 95% sur les échantillons bootstrapés quantile (ratios, c (.05, .95)) # et l'intervalle de confiance à 99% quantile (ratios, c (.01, .99))
La sortie est: 5% 95% 0,0000000 0,8333333 et: 1% 99% 0,00 1,25 Étant donné que l'intervalle de confiance à 95% ne chevauche pas l'hypothèse nulle (1), mais que l'intervalle de confiance à 99% le fait, je pense qu'il serait correct de dire que cela est significatif à un alpha de 0,05 mais pas à 0,01.
Une autre façon de voir les choses est d'utiliser un test de permutation pour estimer la distribution des ratios étant donné l'hypothèse nulle. Dans ce cas, vous mélangez les deux échantillons et les divisez au hasard en deux groupes de 1 000 000 d'éléments. Ensuite, vous verriez à quoi ressemble la distribution des ratios sous l'hypothèse nulle, et votre p-value empirique est à quel point le vrai ratio est extrême étant donné cette distribution de ratios nuls. Encore une fois, le code R:
# génère les données de test à échantillonner à partir de v1 <- c (rep (1,3), rep (0,999997)) v2 <- c (rep (1 , 10), rep (0,999990)) v3 <- c (v1, v2) # vecteurs pour tenir l'hypothèse nulle ratiost1 <- vector () t2 <- vector () # boucle 1000 fois; chaque fois, divisez au hasard les échantillons # en 2 groupes et voyez quelles sont les proportions de ces deux groupes aléatoires pour (i dans 1: 1000) {idxs <- sample (1: 2000000,1000000, replace = FALSE) s1 <- v3 [idxs] s2 <- v3 [-idxs] t1 [i] <- longueur (qui (s1 == 1)) / 1000000 t2 [i] <- longueur (qui (s2 == 1))) / 1000000} # vecteur des ratios ratios <- t1 / t2 # jetez un œil au diagramme de distribution (densité (ratios)) # calculez le rapport échantillonné des proportions échantillon.ratio <- ((3/1000000) / (10/1000000)) # d'où cela tombe-t-il sur la distribution de proportions nulles? plot (abline (v = sample.ratio)) # ce rapport (r + 1) / (n + 1) donne la valeur p du vrai échantillon (length (qui (ratios < = sample.ratio) ) + 1) / (1001)
La sortie est ~ .0412 (bien sûr, cela variera d'une exécution à l'autre car elle est basée sur des tirages aléatoires). Encore une fois, vous pourriez potentiellement appeler cela significatif à la valeur 0,05.
Je devrais émettre des mises en garde: cela dépend aussi de la manière dont vos données ont été collectées et du type d'étude, et je ne suis qu'un étudiant diplômé, alors ne prenez pas ma parole pour de l'or. Si quelqu'un a des critiques sur mes méthodes, je serais ravi de les entendre puisque je fais aussi ce genre de choses pour mon propre travail et j'aimerais découvrir que les méthodes sont imparfaites ici plutôt que dans la revue par les pairs. Pour plus de trucs comme celui-ci, consultez Efron & Tibshirani 1993, ou le chapitre 14 de Introduction à la pratique des statistiques de David Moore (un bon manuel général pour les praticiens).