Un Anova multi-voies à mesures répétées non paramétrique dans R?


16

La question suivante est l'un de ces Saint Graal pour moi depuis un certain temps maintenant, j'espère que quelqu'un pourrait être en mesure d'offrir un bon conseil.

Je souhaite réaliser un anova multi-voies à mesures répétées non paramétriques en utilisant R.

Je fais des recherches et de la lecture en ligne depuis un certain temps et jusqu'à présent, je n'ai trouvé de solutions que pour certains cas: test de Friedman pour les mesures répétées non paramétriques unidirectionnelles anova, régression ordinale avec {car} fonction Anova pour la fonction non paramétrique multivoie anova, etc. Les solutions partielles ne sont PAS ce que je recherche dans ce fil de question. J'ai résumé mes résultats jusqu'à présent dans un article que j'ai publié il y a quelque temps (intitulé: Mesures répétées ANOVA avec R (fonctions et tutoriels) , au cas où cela aiderait quelqu'un)


Si ce que je lis en ligne est vrai, cette tâche peut être réalisée en utilisant un modèle de régression ordinale mixte (alias: Proportional Odds Model).

J'ai trouvé deux packages qui semblent pertinents, mais je n'ai trouvé aucune vignette sur le sujet:

Donc, étant nouveau dans le sujet, j'espérais des indications de la part des gens d'ici.

Existe-t-il des tutoriels / lectures suggérées sur le sujet? Encore mieux, quelqu'un peut-il suggérer un exemple de code simple pour savoir comment exécuter et analyser cela dans R (par exemple: "anova multi-mesures à mesures répétées non paramétriques")?


Tal, puis-je vous demander si vous avez trouvé une solution à cela? J'ai le même problème, et les réponses ci-dessous pourraient être utiles pour aider à trouver une réponse, mais ne fournissent pas vraiment une réponse définitive. J'ai 9 DV ordinaux et 2 points dans le temps, et je recherche le même test que vous vouliez effectuer.
Torvon

1
Salut Torvon. Je n'ai jamais trouvé de solution. Je suppose que les tests de permutation seront la voie la plus sûre, mais je n'ai jamais eu le temps de m'asseoir et de le faire fonctionner. Si vous le faites, veuillez revenir pour poster votre réponse. Cheers, T
Tal Galili

Merci pour votre réponse rapide. Je vais devoir régler ça et je vous le ferai savoir.
Torvon

Réponses:


8

Le paquet ez , dont je suis l'auteur, a une fonction appelée ezPerm () qui calcule un test de permutation, mais ne fait probablement pas correctement les interactions (la documentation en admet autant). La dernière version a une fonction appelée ezBoot (), qui vous permet de faire un rééchantillonnage bootstrap qui prend en compte les mesures répétées (en rééchantillonnant les sujets, puis au sein des sujets), soit en utilisant des moyens cellulaires traditionnels comme statistique de prédiction, soit en utilisant une modélisation à effets mixtes pour faire des prédictions pour chaque cellule de la conception. Je ne sais toujours pas à quel point les CI d'amorçage des prévisions de modèles à effets mixtes sont «non paramétriques»; mon intuition est qu'ils pourraient raisonnablement être considérés comme non paramétriques, mais ma confiance dans ce domaine est faible étant donné que j'apprends toujours sur les modèles d'effets mixtes.


Bonjour Mike. Merci pour la réponse et pour votre colis - c'est vraiment super!
Tal Galili

@Mike, Votre package semble être le seul qui fonctionne pour les conceptions mixtes à plusieurs facteurs. L' aovpalternative - du lmpermpackage orphelin - produit d'énormes variations pour les valeurs de p, voyez ceci . J'ai quelques questions: Où puis-je trouver des références bibliographiques pour la mise en œuvre de ezPerm? Comment puis-je interpréter que la fonction ne fait probablement pas correctement les interactions ? Quel pourrait être un test post-hoc dans ce cas? Merci!
toto_tico

@Mike, quelque chose comme ça aurait du ezPerm( data = DATA, dv = DV, wid = WID, within = interaction(A,B), perms = 1e3)sens de vérifier si l'interaction est significative?
toto_tico

5

En cas de doute, bootstrap! Vraiment, je ne connais pas de procédure standard pour gérer un tel scénario.

L'amorçage est un moyen généralement applicable de générer certains paramètres d'erreur à partir des données disponibles. Plutôt que de s'appuyer sur les hypothèses paramétriques typiques, les procédures de bootstrap capitalisent sur les caractéristiques de l'échantillon pour générer une distribution empirique à laquelle vos estimations d'échantillon peuvent être comparées.

Google scholar est or ... cela a été fait avant ... au moins une fois.

Lunneborg, Clifford E .; Tousignant, James P .; 1985 "Bootstrap d'Efron avec application à la conception de mesures répétées." Recherche comportementale multivariée; Avr85, vol. 20 Numéro 2, p161, 18p


1
Merci pour le plomb Brett! Je me demande si quelqu'un a pu l'implémenter maintenant dans R (je suppose que non).
Tal Galili

1
Droite. R a beaucoup de routines pour aider avec le bootstrap et d'autres méthodes de randomisation, mais je ne sais pas que vous trouverez quelque chose de spécifique à ce problème.
Brett

Très belle première phrase. J'espère qu'il n'est pas protégé par copyright, car j'ai l'intention de l'utiliser: D
gui11aume

0

Il y a un "truc" mentionné dans certains forums et listes de diffusion - je l'ai également trouvé mentionné dans le livre de Joop Hox "Multilevel Analysis" (deuxième édition, 2010), pp. 189.

L'idée est la suivante: vous reformatez vos données longues en un long ensemble de données dans lequel vous créez un nouveau DV qui inclut toutes vos réponses DV, et utilisez une variable d'index qui contient des informations sur la nature des DV pour prédire ce résultat.

Supposons que vous ayez 9 symptômes de dépression (ordinaux), 2 points de mesure et 300 sujets. Ainsi, alors que vous avez 300 lignes dans votre jeu de données normal, et dans votre long jeu de données, vous aurez 600 lignes, ce nouveau jeu de données aura 9 (symptômes) x 2 (temps) x 300 (sujets) lignes.

La nouvelle variable DV "symptômes" contient maintenant la gravité des symptômes des participants sur 9 symptômes, les variables "index" contiennent les informations sur la nature du symptôme (1 à 9), et puis il y a les deux variables "temps" et " Identifiant d'utilisateur".

Vous pouvez maintenant utiliser le ordinalpackage pour l'exécuter.

data<-read.csv("data_long_long.csv", head=T)

data$symptoms <- factor(data$symptoms)
data$time <- factor(data$time)
data$index <-factor(data$index)

m1<-clmm2(symptoms ~ index+time, random=UserID, data = data, Hess=TRUE, nAGQ=10)

Dans mon cas spécifique, je voulais savoir s'il y avait une interaction significative entre l'indice et le temps, j'ai donc exécuté un modèle supplémentaire et les ai comparés:

m2<-clmm2(symptoms ~ index+time, random=UserID, data = data, Hess=TRUE, nAGQ=10)
anova(m1,m2)

CLMM2 utilise un modèle d'interception aléatoire (à ma connaissance, le package ordinalne fait pas de pentes aléatoires), si vous ne le faites pas pour un modèle d'interception aléatoire, vous pouvez exécuter les modèles à la place en utilisant CLM, par exemple:

m3<-clm(symptoms ~ index+time, data = data)

1
ne sont pas exactement les mêmes m1 et m2, peut-être que vous vouliez dire clmm2(symptoms ~ index*time, random=UserID, data = data, Hess=TRUE, nAGQ=10) anova(m1,m2). Savez-vous par hasard comment exprimer cela avec la nouvelle fonction clmm? Je ne suis pas sûr de la notation.
toto_tico
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.