Je ne suis pas un expert, alors pardonnez-moi si une partie de la terminologie est un peu maladroite. Heureux de fournir plus d'informations si nécessaire.
J'ai deux vecteurs de 50 valeurs numériques appariées dans R. Je veux effectuer un test de randomisation ou de permutation bilatéral pour déterminer si leurs différences sont dues au hasard ou non.
Un test de permutation (également appelé test de randomisation, test de re-randomisation ou test exact) est un type de test de signification statistique dans lequel la distribution de la statistique de test sous l'hypothèse nulle est obtenue en calculant toutes les valeurs possibles de la statistique de test sous réarrangements des étiquettes sur les points de données observés.
Je veux faire ce type de test car je pense que les distributions des valeurs dans les vecteurs violent les hypothèses d'autres tests tels que le test t (par exemple, la plupart des valeurs numériques dans le vecteur sont 0).
La permtest
fonction de la bibliothèque BHH2 fait presque ce que je veux, mais elle fonctionne sur toutes les permutations, ce qui prendra trop de temps. Au lieu de cela, je veux estimer la valeur de p, en échantillonnant un grand nombre des permutations possibles. J'ai jeté un coup d'œil dans le paquet de pièces , mais rien ne semble faire de test de permutation avec un échantillonnage à partir de vecteurs numériques appariés.
Certains googleurs m'ont conduit à cet e-mail , ce qui suggère que la raison pour laquelle je ne trouve pas de package pour le faire est que c'est un one-liner en R. Malheureusement, je n'ai pas assez d'expérience avec R pour pouvoir produire celui-là -doublure.
Existe-t-il un package ou une méthode qui effectuera un test de permutation apparié bilatéral en utilisant uniquement un échantillon de l'espace de permutation?
Sinon, quelqu'un pourrait-il partager un petit bout de code R pour le faire?
la source
coin
(parmi plusieurs autres) fait des tests de randomisation. par exemple voir la réponse à cette question (lire le tout) . Si je comprends bien, les exemples couvrent des cas approximatifs et exacts et couvrent des échantillons indépendants et dépendants.oneway_test(y ~ x | pairs, distribution=approximate(B=9999))
aveclibrary(coin)
.Réponses:
Bien que j'aie souligné dans les commentaires l'utilisation du
coin
package, je pense qu'il vaut la peine d'illustrer qu'un test de permutation / randomisation est vraiment assez simple, donc je l'ai fait.Ici, j'écris du code R pour faire un test de randomisation pour un test de localisation d'un échantillon. Le test retourne au hasard les signes sur les différences et calcule la moyenne; cela revient à attribuer aléatoirement chaque paire de valeurs aux groupes x et y. Le code ci-dessous pourrait être considérablement raccourci (je pourrais le faire en deux lignes assez facilement, ou même une si cela ne vous dérangeait pas).
Ce code prend quelques secondes sur ma machine:
Voilà tout.
Notez que cela
rbinom(length(d),1,.5)*2-1)
donne un signe aléatoire-1
ou1
... c'est-à-dire un signe aléatoire, donc quand nous multiplions par n'importe quel ensemble de signéd
, cela équivaut à assigner au hasard+
ou des-
signes aux différences absolues. [Peu importe la distribution des signes sur laquelled
vous commencez, maintenantd
ils auront des signes aléatoires.]Ici, je le compare avec un test t sur certaines données composées:
Lorsque le test t est valide, il donne généralement une valeur p très similaire au test de permutation complètement énuméré, et une valeur p simulée comme ci-dessus (lorsque le nombre de simulations est suffisamment grand) convergera vers cette deuxième valeur p.
Au nombre de réplications utilisé ci-dessus, une vraie valeur p de permutation (c.-à-d. À partir d'un dénombrement complet) de 0,05 sera estimée à moins de 0,001 (c'est-à-dire, donnera une valeur p de randomisation entre 0,049 et 0,051) dans environ 85% des cas. et à 0,002% près de 99,5% du temps.
la source
d
, car c'est ainsi que fonctionne un test de permutation de la différence moyenne pour les données appariées. Voir de nouveaux commentaires supplémentaires après ce morceau de code.Voici le code pour effectuer un test de permutation. J'ai des données par exemple. x est la différence entre les deux vecteurs.
la source