Le test de somme de rang de Wilcoxon est-il le bon test pour voir si le total des dons diffère?

8

Contexte:

Mon logiciel demande aux utilisateurs des dons facultatifs de tout montant. J'ai divisé les demandes de don test entre les utilisateurs pour trouver la meilleure façon de demander: 50% obtiennent la version 1 de la demande, 50% obtiennent la version 2 de la demande, et nous voyons laquelle fait mieux.

Presque tous les utilisateurs donnent 0 $, mais quelques-uns donnent. Les résultats pourraient ressembler à ceci:

         Number of users  Number of donations   Dollar amounts donated
GROUP A  10,000           10                    40,20,20,20,15,10,10,5,5,5
GROUP B  10,000           15                    50,20,10,10,10,10,10,10,5,5,5,5,5,5,5

Je veux savoir si un groupe est gagnant, ou s'il s'agit d'une égalité, ou si nous avons besoin d'un plus grand échantillon pour être sûr. (Cet exemple, simple à discuter, a presque certainement besoin d'un plus grand échantillon pour obtenir des résultats significatifs.)

Ce que je mesure déjà:

  1. Un groupe avait-il un nombre de dons significativement plus élevé ? Combien plus grand? Je mesure cette valeur p et cet intervalle de confiance à l' aide de l'outil ABBA Thumbtack , en utilisant uniquement le nombre de dons et le nombre d'utilisateurs, en ignorant les montants en dollars. Sa méthodologie est décrite dans la section "Quelles sont les statistiques sous-jacentes?" section de ce lien. (C'est au-dessus de ma tête, mais je crois qu'il calcule l'intervalle de confiance en prenant la différence entre les taux de don comme des variables aléatoires normales sur l'intervalle Agresti-Couli.)
  2. Un groupe a-t-il donné un montant d' argent sensiblement différent ? Je mesure cette valeur de p en effectuant un test de permutation: réorganiser à plusieurs reprises tous les 2N sujets en 2 groupes de N-sujets, mesurer la différence d'argent total entre les groupes à chaque fois, et trouver la proportion de shuffles avec une différence> = l'observé différence. (Je crois que cela est valable sur la base de cette vidéo de la Khan Academy faisant la même chose pour les crackers au lieu de dollars.)

R wilcox.test:

Quelques questions maintenant sur wilcox.test()R:

  1. Si j'ai alimenté wilcox.test(paired=FALSE)le tableau de données ci-dessus, cela répondrait-il à de nouvelles questions auxquelles mes outils n'ont pas déjà répondu, ce qui me donnerait plus d'informations pour décider de continuer à exécuter mon test / déclarer un gagnant / déclarer une égalité?
  2. Si oui, à quelle question précise répondrait-elle?
Michael Gundlach
la source
Pourriez-vous décrire quelles sont les deux choses que vous faites actuellement dans la question, plutôt que de vous fier aux liens? La seconde, en particulier, renvoie à une vidéo que je, et j'attends d'autres, ne prendrai pas le temps de regarder pour comprendre ce que vous demandez.
Aaron a quitté Stack Overflow le
1
Cette question porte clairement sur la compréhension du lien entre les différents tests et les objectifs de l'étude. Il a à peine un lien avec le codage. C'est sur le sujet ici, et serait hors sujet sur Stack Overflow .
gung - Reinstate Monica
@Aaron: c'est fait. Merci pour les commentaires. J'avais peur que le mur de texte dissuade les gens de lire la question en premier lieu. Difficile de fractionner tester mes qusetions pour optimiser les réponses sur CrossValidated;)
Michael Gundlach

Réponses:

7

Si vous utilisez wilcox.test()l'argument paired(notez qu'il s'agit de minuscules et qui Rest sensible à la casse) défini sur FALSE, vous exécutez un test Mann-WhitneyU . Il s'agit d'un test de dominance stochastique . Si les distributions étaient égales et que vous choisissiez une observation de chaque version au hasard, l'observation de la version 2 aurait 50% à 50% de chances d'être supérieure à l'observation de la version 1. Par contre, la valeur tirée de la version 2 pourrait avoir plus de 50% de chances d'être supérieure (inférieure) à la valeur de la version 1. Il s'agit de la dominance stochastique. On ne dit rien de combien plus ou moins, seulement que c'est plus ou moins.

Cela ne me semble pas convenir à vos objectifs. Vous voulez le plus d'argent total, ce qui peut être compris comme le don moyen le plus important multiplié par le nombre d'utilisateurs. Il est possible, en raison de l'asymétrie, qu'une version puisse avoir la plus grande moyenne / total, mais que l'autre version soit stochastiquement supérieure. (Si tel était le cas, vous voudriez l'ancienne version.) Parce que c'est ce que vous voulez en fin de compte, un test spécifique à cet aspect des distributions est le plus approprié pour vous.

Je reconnais que vos données ne sont pas normales à distance, et donc, le test (qui pourrait être ce à quoi la plupart des gens penseraient en premier pour comparer deux groupes), serait inapproprié. Étant donné deux groupes continus, mais non normaux, la plupart des gens pourraient également suivre automatiquement le Mann-Whitney. Dans votre cas, j'irais avec un test de permutation, pour la raison ci-dessus. (Je suppose que c'est ce que vous avez fait, si j'ai bien compris.) Un test de permutation est valide ici, car vous avez affecté des utilisateurs au hasard aux deux groupes; par conséquent, ils sont échangeables. t

Pour effectuer un test de permutation, mélangez simplement l'indicateur de regroupement et calculez les moyennes et une différence entre les moyennes. Faire cela plusieurs fois vous permettra de créer une distribution d'échantillonnage de la différence entre les moyennes. Vous pouvez comparer votre différence observée à la distribution d'échantillonnage. Pour un test bilatéral, prenez la plus petite proportion au-delà de votre différence et multipliez-la par deux. Le produit est directement interprétable comme une valeur . Voici un exemple travaillé avec vos données: p

A            = c(rep(0, 9990), 40,20,20,20,15,10,10,5,5,5)
B            = c(rep(0, 9985), 50,20,10,10,10,10,10,10,5,5,5,5,5,5,5)
realized.dif = mean(B)-mean(A);  realized.dif  # [1] 0.0015

set.seed(6497)
donations = stack(list(A=A, B=B))
values    = donations$values
ind       = donations$ind
difs      = vector(length=1000)
for(i in 1:1000){
  ind     = sample(ind)
  difs[i] = mean(values[ind=="B"])-mean(values[ind=="A"])
}
difs = sort(difs)
mean(difs>=realized.dif)    # [1] 0.459  # a 1-tailed test, if Ha: B>A a-priori
mean(difs>=realized.dif)*2  # [1] 0.918  # a 2-tailed test

En ce qui concerne la première question d'étude, à savoir «quelle version a généré le plus grand nombre de dons», alors que j'accorde que tout le monde aime ABBA , vous pouvez également le faire R. J'utiliserais un test de la différence de deux proportions. En , c'est . Voici un exemple d'utilisation de vos données: zRprop.test()

prop.test(rbind(c(10, 9990),
                c(15, 9985) ))
#  2-sample test for equality of proportions with continuity correction
# 
# data:  rbind(c(10, 9990), c(15, 9985))
# X-squared = 0.6408, df = 1, p-value = 0.4234
# alternative hypothesis: two.sided
# 95 percent confidence interval:
#   -0.0015793448  0.0005793448
# sample estimates:
# prop 1 prop 2 
# 0.0010 0.0015 
gung - Réintégrer Monica
la source
Belle réponse, et +2 si je pouvais pour le lien ABBA. :)
Aaron a quitté Stack Overflow le
+1 Bonne discussion, en particulier sur la comparaison des moyennes. Notez que parce qu'il n'y a pas d'énormes dons, l'exemple dans la question a une distribution d'échantillonnage presque normale. Le nombre de dons d'une valeur donnée dans le groupe A est binomial et, avec une grande précision, tous ces nombres sont approximativement indépendants. Le test t devrait bien fonctionner. Voici un graphique de la distribution nulle: b <- function(n) dbinom(0:n, n, 1/2); p <- apply(expand.grid(b(1), b(1), b(4), b(6), b(10)), 1, prod); n <- as.matrix(expand.grid(0:1, 0:1, 0:4, 0:6, 0:10)) %*% c(50,40,20,10,5); plot(dist <- aggregate(p, list(n), sum)).
whuber
1
Je ne suis pas critique, mais voici où je vais: en examinant les quelques dons les plus élevés, vous pouvez rapidement décider d'utiliser ou non un test t. Si vous ne le pouvez pas, la différence de moyens dépendra fortement de ces quelques valeurs aberrantes et il est donc peu probable qu'elle soit significative. Ces observations simplifient l'analyse et suggèrent également que l'on pourrait s'appuyer sur des calculs de taille d'échantillon basés sur la théorie normale pour estimer la taille d'un échantillon nécessaire. Encore mieux, cependant, serait d'utiliser un plan d'échantillonnage séquentiel.
whuber
1
@Torvon pour les tests de permutation? Il y en a beaucoup, mais je doute que vous en ayez besoin - c'est une technique assez bien établie et courante.
gung - Rétablir Monica
1
@Torvon, au lieu de simplement calculer la différence moyenne et de la stocker, exécutez une UM et stockez-la.
gung - Réintégrer Monica
1

La réponse de @ gung est correcte. Mais j'ajouterais que, puisque vos données peuvent être biaisées, avec une énorme queue droite, la moyenne peut ne pas être robuste et en tant que telle, ce n'est peut-être pas le "bon" indice pour représenter la centralité de votre distribution. Par conséquent, j'essaierais également avec des solutions plus robustes telles que les médianes ou les moyens tronqués.

utobi
la source
4
L'un des points les plus importants de @ gung est que les moyennes et les moyennes tronquées ne sont probablement pas pertinentes. (Voir le paragraphe «bien adapté à vos objectifs».) Nous nous soucions le plus du don moyen. Ainsi, bien que vos solutions robustes puissent être simples à utiliser sur le plan de la procédure, obtenir la bonne réponse à la mauvaise question peut ne pas être très utile, voire pire.
whuber