Nicht-parametrische MANOVA mit Posthoc test

Varianzanalyse, Diskriminanzanalyse, Kontingenzanalyse, Faktorenanalyse, Clusteranalyse, MDS, ....

Moderator: EDi

Antworten
eimichae
Beiträge: 36
Registriert: Mo Okt 10, 2016 8:48 pm

Nicht-parametrische MANOVA mit Posthoc test

Beitrag von eimichae »

Hallo zusammen,
Ich bin auf der Suche nach einer nicht-parametrischen Test als Alternative für MANOVA der zudem Post-hoc Analysen erlaubt (also z.B. mir nicht nur einen P-Wert für die komplette MANOVA liefert sondern in einem 2ten Schritt auch noch aufschlüsselt wie sich die verschiedenen treatments der predictive-Variable zueinander verhalten) (ähnlich wie der Kruskal-Wallis Test für ANOVA).

In meinem Buch (Discovering Statistic Using R) werden 2 Tests beschrieben (mulrank() und cmanova()) beide stammen allerdings aus dem WRS package welches es nicht mehr gibt (und WRS2 scheint diese Tests nicht zu beinhalten).
Zudem scheine keine Post-hoc tests durchführbar zu sein.

Kennt jemand eine gute Alternative?

Alternativ dazu: Wäre es erlaubt meine 3 dependent variables einfach zu "rank-transformieren" (rank (dependent-variable_1) etc.) und dann an diesen Daten eine MANOVA durchzuführen?

Vielen Dank,
Michi
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Nicht-parametrische MANOVA mit Posthoc test

Beitrag von EDi »

Wie wäre es mit einer Permanova + individuelle Kontraste (Beispiel).

Wie eigentlich nicht-parametrisch? Gut Multivariate Normalverteilung gibt es sogut wie nie... Aber auch nicht-parametrische Methoden machen annahmen (z.B. sollte die Streuung gleich sein).
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
eimichae
Beiträge: 36
Registriert: Mo Okt 10, 2016 8:48 pm

Re: Nicht-parametrische MANOVA mit Posthoc test

Beitrag von eimichae »

Hoi Edi,
vielen Dank für den Tipp mit der Permanova!

Wegen der Multivariaten Normalverteilung bin ich etwas unsicher. Ich habe mit einem Shapiro-Test auf Mult. Normalverteilung getestet und in einigen Fällen das Resultat erhalten, dass keine Normalverteilung vorhanden ist. Allerdings habe ich auch gelesen, dass Sahpiros-Test extrem konservativ ist und MANOVA ein relativ robuster Ansatz ist. Daher bin ich unsicher, ob es nicht trotzdem erlaubt ist eine MANOVA durchzuführen, die verlässliche Resultate liefert (viele Leute scheinen das zu machen).
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Nicht-parametrische MANOVA mit Posthoc test

Beitrag von EDi »

mshapiro.test() produziert nach meiner Auffassung zu große Type-I Fehler.

Hier eine Quick & Dirty Simulation:

Ich erzeugte 5-dimensionale multivariat normalverteilte Daten (Mittelwert = 0, SD=1, keine korrelation) verschiedener sample size (zwischen 10 und 5000) und lass darauf den mshapiro.test los und schau was er sagt.
Das ganze mach ich dann jeweils 100x.

Man würde erwarten (da die Daten m-normalverteilt sind), dass der test in nur 5% der Fälle anschlägt.
Ist aber nicht, er schlägt viel viel öfters aus (=Fehler erster Art).

Das gleiche gilt auch für den univariaten shapiro-test (aber nicht so gravierend).

HIer der Code:
Vielleicht hab ich ja auch einen Denk- oder Programmierfehler fehler drin - bitte bescheid geben falls dies der Fall sein sollte.

Der Code läuft parallel of 7 Kernen, falls ihr weniger habt: cl= gibt die Anzahl der Kerne an
Bei mir dauert es knapp 3 Minuten (hab aber noch andere Sachen im Hintergrund laufen, deshalb auch nur 7 Kerne...)

Code: Alles auswählen

### Simulation of performance of mvnormtest
## Sample sizes
# setup 
require(MASS)
require(mvnormtest)
require(pbapply)



# Effect of sample size
set.seed(578)
n <- seq(10, 5000, 100)  # different samplesizes
nn <- length(n)    
di <- 5   # dimensions
v <- 1 # Variances


# use pbsapply for parallel processing
system.time(propfalse <- pbsapply(1:nn, function(i){
  test <- replicate(100,{ # generates 100 different tests for each sample size
    mshapiro.test(t(mvrnorm(n[i], rep(0,di), diag(v, di, di))))$p.value  # takes sample from normal multi and tests on normal
  })
  mean(test < 0.05) 
},
cl = 7)
)


# plot results
plot(n, propfalse)
abline(lm(propfalse ~ n))
summary(lm(propfalse ~ n))
plot(density(propfalse))      
summary(propfalse)          # Minimimum (!) = 34%
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Antworten