Eine nicht-parametrische Mehrweg-Anova mit wiederholten Messungen in R?


16

Die folgende Frage ist für mich seit einiger Zeit eine dieser heiligen Fragen, ich hoffe, jemand kann einen guten Rat geben.

Ich möchte eine nicht-parametrische wiederholte Multiway-Anova mit R durchführen.

Ich habe einige Zeit online gesucht und gelesen und konnte bisher nur für einige Fälle Lösungen finden: Friedman-Test für nichtparametrische Einweg-Wiederholungsmessungen anova, ordinale Regression mit {car} Anova-Funktion für nichtparametrische Mehrweg-Messungen Anova und so weiter. Die Teillösungen sind NICHT das, wonach ich in diesem Fragenthread suche. Ich habe meine bisherigen Ergebnisse in einem Beitrag zusammengefasst, den ich vor einiger Zeit veröffentlicht habe (Titel: ANOVA mit wiederholten Messungen mit R (Funktionen und Tutorials) , falls es jemandem helfen sollte).


Wenn das, was ich online gelesen habe, wahr ist, kann diese Aufgabe mit einem gemischten Ordinalen Regressionsmodell (auch bekannt als: Proportional Odds Model) gelöst werden.

Ich habe zwei Pakete gefunden, die relevant erscheinen, aber keine Vignette zu diesem Thema gefunden:

Ich war also neu in dem Thema und hoffte auf ein paar Anweisungen von den Leuten hier.

Gibt es Tutorials / Lesevorschläge zu diesem Thema? Noch besser, kann jemand einen einfachen Beispielcode vorschlagen, wie dies in R ausgeführt und analysiert werden soll (z. B .: "Nicht parametrische wiederholte Messungen mit Mehrweg-Anova")?


Tal, darf ich fragen, ob Sie eine Lösung dafür gefunden haben? Ich habe das gleiche Problem, und die folgenden Antworten können hilfreich sein, um eine Antwort zu finden, bieten jedoch keine endgültige Antwort. Ich habe 9 ordinale DVs und 2 Zeitpunkte und suche den gleichen Test, den Sie durchführen wollten.
Torvon

1
Hallo Torvon. Ich habe noch nie eine Lösung gefunden. Ich denke, Permutationstests werden die sicherste Route sein, aber ich hatte nie die Zeit, mich hinzusetzen und es zum Laufen zu bringen. Wenn ja - bitte kommen Sie erneut, um Ihre Antwort zu posten. Prost, T
Tal Galili

Vielen Dank für Ihre schnelle Antwort. Ich muss das klären und werde es dich wissen lassen.
Torvon

Antworten:


8

Das ez- Paket, dessen Autor ich bin, hat eine Funktion namens ezPerm (), die einen Permutationstest berechnet, aber Interaktionen wahrscheinlich nicht richtig ausführt (die Dokumentation gibt dies zu). Die neueste Version verfügt über eine Funktion namens ezBoot (), mit der Sie ein Bootstrap-Resampling durchführen können, bei dem wiederholte Messungen (durch erneutes Abtasten von Subjekten und dann innerhalb von Subjekten) berücksichtigt werden. Dabei werden entweder herkömmliche Zellenmittel als Vorhersagestatistik oder gemischte Effektmodelle zur Erstellung von Vorhersagen verwendet für jede Zelle im Design. Ich bin mir immer noch nicht sicher, wie "nicht parametrisch" die Bootstrap-CIs aus gemischten Effektmodellvorhersagen sind. Ich habe die Intuition, dass sie vernünftigerweise als nicht parametrisch angesehen werden können, aber mein Vertrauen in diesen Bereich ist gering, da ich immer noch etwas über Mixed-Effects-Modelle lerne.


Hallo Mike. Vielen Dank für die Antwort und für Ihr Paket - es ist wirklich toll!
Tal Galili

@ Mike, Ihr Paket scheint das einzige zu sein, das für gemischte Designs mit mehreren Faktoren geeignet ist. Die aovpAlternative - aus dem verwaisten lmpermPaket - erzeugt enorme Variationen für die p-Werte, siehe dies . Ich habe ein paar Fragen: Wo finde ich bibliografische Referenzen für die Umsetzung von ezPerm? Wie kann ich interpretieren, dass die Funktion Interaktionen wahrscheinlich nicht richtig ausführt ? Was könnte in diesem Fall ein Post-hoc-Test sein? Vielen Dank!
toto_tico

@Mike, ezPerm( data = DATA, dv = DV, wid = WID, within = interaction(A,B), perms = 1e3)macht es etwa Sinn, noch einmal zu überprüfen, ob die Interaktion signifikant ist?
toto_tico

5

Im Zweifelsfall Bootstrap! Wirklich, ich kenne keine Dosenprozedur, um mit einem solchen Szenario fertig zu werden.

Bootstrapping ist eine allgemein anwendbare Methode, um aus den vorliegenden Daten einige Fehlerparameter zu generieren. Anstatt sich auf die typischen parametrischen Annahmen zu verlassen, nutzen Bootstrap-Verfahren die Merkmale der Stichprobe, um eine empirische Verteilung zu generieren, mit der Ihre Stichprobenschätzungen verglichen werden können.

Google-Gelehrter ist Gold ... es wurde schon mal gemacht ... mindestens einmal.

Lunneborg, Clifford E .; Tousignant, James P .; 1985 "Efrons Bootstrap mit Anwendung auf das Repeated Measures Design." Multivariate Verhaltensforschung; Apr85, Vol. 20 Issue 2, S. 161, 18p


1
Vielen Dank für die Führung Brett! Ich frage mich, ob jemand es jetzt in R implementieren muss (ich würde nicht raten).
Tal Galili

1
Richtig. R hat viele Routinen zur Unterstützung von Bootstrap und anderen Randomisierungsmethoden, aber ich weiß nicht, dass Sie etwas Spezielles für dieses Problem finden werden.
Brett

Sehr schöner erster Satz. Ich hoffe, es ist nicht urheberrechtlich geschützt, da ich
beabsichtige,

0

In einigen Foren und Mailinglisten wird ein "Trick" erwähnt - ich habe ihn auch in Joop Hox 'Buch "Multilevel Analysis" (2. Auflage, 2010), S. 189, erwähnt.

Die Idee ist: Sie formatieren Ihre langen Daten in einen langen Datensatz, in dem Sie einen neuen DV erstellen, der alle Ihre DV-Antworten enthält, und eine Indexvariable verwenden, die Informationen über die Art der DVs enthält, um dieses Ergebnis vorherzusagen.

Angenommen, Sie haben 9 Depressionssymptome (Ordnungszahl), 2 Messpunkte und 300 Probanden. Während Sie also 300 Zeilen in Ihrem normalen Dataset und in Ihrem langen Dataset 600 Zeilen haben, hat dieses neue Dataset 9 (Symptome) x 2 (Zeit) x 300 (Probanden) Zeilen.

Die neue DV-Variable "Symptome" enthält nun die Symptomschwere der Teilnehmer an 9 Symptomen, die Variablen "Index" enthält die Information über die Art des Symptoms (1 bis 9), und dann gibt es die beiden Variablen "Zeit" und "Zeit". Benutzeridentifikation".

Sie können das ordinalPaket jetzt verwenden , um dies auszuführen.

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)

In meinem speziellen Fall war ich daran interessiert, ob es eine signifikante Wechselwirkung zwischen Index und Zeit gibt. Deshalb habe ich ein weiteres Modell ausgeführt und diese verglichen:

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

CLMM2 verwendet ein zufälliges Intercept-Modell (meines Wissens führt das Paket ordinalkeine zufälligen Steigungen durch). Wenn Sie kein zufälliges Intercept-Modell verwenden, können Sie die Modelle stattdessen mit CLM ausführen. Beispiel:

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

1
sind m1 und m2 nicht genau gleich, vielleicht meintest du es clmm2(symptoms ~ index*time, random=UserID, data = data, Hess=TRUE, nAGQ=10) anova(m1,m2). Wissen Sie zufällig, wie Sie dies mit der neuen Funktion clmm ausdrücken können? Ich bin mir bei der Schreibweise nicht sicher.
toto_tico
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.