Est-ce mal de trembler avant d'effectuer le test de Wilcoxon?


9

J'ai écrit un script teste les données en utilisant le wilcox.test, mais quand j'ai obtenu les résultats, toutes les valeurs de p étaient égales à 1. J'ai lu sur certains sites Web que vous pouviez utiliser la gigue avant de tester les données (pour éviter les liens comme ils le disaient), Je l'ai fait et j'ai maintenant un résultat acceptable. Est-ce mal de faire ça?

test<- function(column,datacol){
    library(ggplot2)
t=read.table("data.txt", stringsAsFactors=FALSE)
uni=unique(c(t$V9))
    for (xp in uni) { 
          for(yp in uni) {
            testx <- subset(t, V9==xp)
            testy <- subset(t, V9==yp)
            zz <- wilcox.test(testx[[datacol]],jitter(testy[[datacol]]))
            p.value <- zz$p.value
          }
        }
}


Ceci est la sortie de dput(head(t))

structure(list(V1 = c(0.268912,
0.314681, 0.347078, 0.286945, 
0.39562, 0.282182), V2 = c(0.158921, 0.210526, 0.262024, 0.322006, 
0.133417, 0.283025), V3 = c(0.214082, 0.166895, 0.132547, 0.147361, 
0.09174, 0.169093), V4 = c(0.358085, 0.307898, 0.258352, 0.243688, 
0.379224, 0.2657), V5= c(-0.142223, 0.010895, 0.14655, 
0.08152, 0.02116, 0.030083), V6 = c(0.096408, -0.091896,

-0.331229, -0.446603, -0.088493, -0.262037), V7` = c(1.680946, 
1.649559, 1.534401, 1.130529, 3.441356, 1.211815), V8 = c("NC_000834",  "NC_000844",
"NC_000845", "NC_000846", "NC_000857",
"NC_000860" ), V9 = c("Chordata",
"Arthropoda", "Chordata", "Chordata", 
"Arthropoda", "Chordata"), V10 =
c("???:???", "Diplostraca", 
"???:???", "Rheiformes", "Diptera",
"Salmoniformes"), V11 = c("???:???",
"Branchiopoda", "Mammalia", "Aves",
"Insecta", "Actinopterygii" )), .Names
= c("V1", "V2", "V3", "V4", "V5", "V6",  "V7",
"V8", "V9", "V10",
"V11"), row.names = c(NA,  6L),
class = "data.frame")

Les données sont très volumineuses, et c'est le fil que j'ai commencé et ils m'ont dit qu'il pourrait être faux de le faire

Remarque Cette question provient de tex.SE: générer une sortie PDFcontain R dans une table en latex


2
Vous ne nous dites pas quelles sont vos données, mais je me méfierais de toute procédure qui ajoute du bruit aléatoire aux données, puis exécute un test statistique sur celles-ci. De plus, êtes-vous sûr que votre code fait ce que vous pensez qu'il fait? Ma lecture est que malgré votre boucle, elle renverra une seule valeur p - celle de x = y = {lastvaluof} (uni)
Andrie

@Andrie: merci pour votre aide, mais ce n'est pas le code complet, c'est une partie de la fonction qui calcule le test wilcox, et le code produisant différentes valeurs de p-value pour chacun (xp, yp), c'est un lien d'un une partie de mes données, vous pouvez les consulter et vérifier si je peux le faire, merci d'avance. mediafire.com/?mnj26kp4bv5lcr5

1
Je serais très méfiant à l'égard des liens vers des données qui nécessitent une redirection vers d'autres liens, en particulier lorsque R fournit la dput()fonction très utile qui élimine tout besoin de le faire. Veuillez fournir un exemple reproductible pour recevoir de l'aide.
Chase


@weblover Lorsque j'ai suggéré (sur tex.SE) de poser votre question sur les statistiques ici, je ne savais pas que vous l'aviez déjà demandé sur SO. Veuillez supprimer l'un de vos deux messages (probablement sur SO, car il s'agit d'une question de statistiques).
chl

Réponses:


6

Il y a un fil sur la liste R-help à ce sujet; voir par exemple: http://tolstoy.newcastle.edu.au/R/e8/help/09/12/9200.html

La première suggestion consiste à répéter le test un grand nombre de fois avec des oscillations différentes, puis à combiner les valeurs de p pour obtenir une valeur de p globale, en prenant une moyenne ou un maximum. Ils suggèrent également qu'un test de permutation simple pourrait être utilisé à la place (des deux, c'est ce que je préférerais). Voir la question Quelle implémentation de test de permutation dans R utiliser au lieu des tests t (appariés et non appariés)? pour quelques exemples de tests de permutation.

Ailleurs dans ce fil, Greg Snow écrit: Ajouter du bruit aléatoire aux données afin d'éviter un avertissement, c'est comme retirer les piles d'un détecteur de fumée pour le faire taire plutôt que d'enquêter sur la cause du déclenchement de l'alarme. (Voir http://tolstoy.newcastle.edu.au/R/e8/help/09/12/9195.html )


merci pour votre réponse, mais je n'ai pas compris, que dois-je faire maintenant? changer le test, ou ajuster les données en fonction de quelque chose, et quel est ce quelque chose ???
weblover

Je vais résumer la page à laquelle j'ai lié.
Aaron a quitté Stack Overflow le

3

(avertissement: je n'ai pas vérifié le code, ma réponse est uniquement basée sur votre description)

J'ai le sentiment que ce que tu veux faire est une très mauvaise idée . Wilcoxon est un test de rééchantillonnage (ou de randomisation) pour les rangs. C'est-à-dire qu'il prend le rang des valeurs et compare ces rangs à toutes les permutations possibles des rangs (voir par exemple ici ).

Donc, comme vous vous en êtes rendu compte, les liens sont assez mauvais car vous n'en obtenez pas de rangs. Cependant, l'ajout de bruit aléatoire (gigue) à vos données transformera tous les rangs, afin qu'ils aient des rangs aléatoires! Autrement dit, cela déforme gravement vos données.

Par conséquent: c'est mal de le faire .


merci pour votre réponse, mais que dois-je faire dans ce cas ??
weblover

2

Vous avez demandé à plusieurs personnes ce que vous devriez faire maintenant. À mon avis, ce que vous devez faire maintenant, c'est accepter que la valeur de p appropriée ici est de 1.000. Vos groupes ne diffèrent pas.


bonjour, est-ce rationnel d'accepter ça ?? parce que tous les groupes et sous-groupes lorsqu'ils sont comparés ensemble, donne la même valeur de p, ce n'est pas logique car dans chaque cas, je teste 1 variable, par exemple: test ("Ph", V1), soo la valeur de p ne devrait pas être la même pour tout . des idées ??
weblover

Bien sûr, cela pourrait être rationnel. Une valeur de p de 1 signifie que les deux groupes sont aussi proches que possible des mêmes. Si vous avez presque tous les liens, cela pourrait être vrai.
Aaron a quitté Stack Overflow le

@Aaron @Web Ces données (V1 à V7) ne sont pas liées. Une erreur doit avoir été commise quelque part lors de l'obtention de valeurs de p de 1. J'obtiens beaucoup de valeurs de p de 0,036 lorsque je les compare avec le test de rang signé de Wilcoxon.
whuber

L'OP n'a publié que les premières lignes des données; apparemment, il doit y avoir des liens plus loin, bien que cela semble peu probable car les données vont à six décimales. Alors oui, il semble qu'il puisse y avoir une erreur dans l'analyse, mais pas exactement celle que vous signalez.
Aaron a quitté Stack Overflow le
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.