A nieparametryczna Anova wielokrotnych pomiarów wielokrotnego działania w R?

16

Poniższe pytanie jest dla mnie jednym z tych świętych Graali. Mam nadzieję, że ktoś może udzielić dobrej porady.

Chciałbym wykonać nieparametryczne powtarzane pomiary wielokierunkowe anova przy użyciu R.

Od pewnego czasu szukam i czytam online i do tej pory udało mi się znaleźć rozwiązania tylko w niektórych przypadkach: test Friedmana dla jednokierunkowej nieparametrycznej powtarzanej miary anova, regresja porządkowa z funkcją {car} Anova dla wieloparametrowej nieparametrycznej anova i tak dalej. Częściowe rozwiązania NIE są tym, czego szukam w tym wątku pytania. Podsumowałem swoje dotychczasowe odkrycia w poście, który opublikowałem jakiś czas temu (zatytułowanym: Powtarzane miary ANOVA z R (funkcje i samouczki) , na wypadek gdyby komukolwiek to pomogło)


Jeśli to, co czytam online, jest prawdą, to zadanie można wykonać przy użyciu mieszanego modelu regresji porządkowej (aka: Proporcjonalny model szans).

Znalazłem dwa pakiety, które wydają się odpowiednie, ale nie mogłem znaleźć winiety na ten temat:

Będąc nowym tematem, liczyłem na wskazówki od ludzi tutaj.

Czy są jakieś samouczki / sugerowane lektury na ten temat? Jeszcze lepiej, czy ktoś może zasugerować prosty przykładowy kod, jak uruchomić i przeanalizować to w R (np .: „nieparametryczne powtarzane pomiary wielostopniowe anova”)?

Tal Galili
źródło
Tal, mogę zapytać, czy znalazłeś rozwiązanie tego problemu? Mam ten sam problem, a poniższe odpowiedzi mogą być pomocne w znalezieniu odpowiedzi, ale tak naprawdę nie zawierają ostatecznej odpowiedzi. Mam 9 porządkowych DV i 2 punkty czasowe i szukam tego samego testu, który chciałbyś wykonać.
Torvon
1
Cześć Torvon. Nigdy nie znalazłem rozwiązania. Sądzę, że testy permutacyjne będą najbezpieczniejszą drogą, ale nigdy nie miałem czasu usiąść i sprawić, by działała. Jeśli tak, proszę przyjść ponownie, aby opublikować odpowiedź. Pozdrawiam, T
Tal Galili
Dziękuję za szybką odpowiedź. Będę musiał to wypracować i dam ci znać.
Torvon,

Odpowiedzi:

8

Ez pakiet, którego jestem autorem, ma funkcję o nazwie ezPerm (), która oblicza test permutacji, ale prawdopodobnie nie zrobić interakcje prawidłowo (z Przyznaje dokumentacja tyle). Najnowsza wersja ma funkcję o nazwie ezBoot (), która pozwala wykonać ponowne próbkowanie bootstrap, które uwzględnia powtarzane miary (poprzez ponowne próbkowanie podmiotów, a następnie w obrębie podmiotów), albo za pomocą tradycyjnych metod komórek jako statystyki prognozowania lub za pomocą modelowania efektów mieszanych do prognozowania dla każdej komórki w projekcie. Nadal nie jestem pewien, jak „nieparametryczne” parametry CI ładowania początkowego z prognoz modelu mieszanych efektów; mam intuicję, że można je zasadnie uznać za nieparametryczne, ale moje zaufanie do tego obszaru jest niskie, biorąc pod uwagę, że wciąż uczę się o modelach efektów mieszanych.

Mike Lawrence
źródło
Część Mike. Dziękuję za odpowiedź i za pakiet - jest naprawdę świetny!
Tal Galili
@ Mike, Twój pakiet wydaje się być jedynym działającym w przypadku mieszanych projektów wieloskładnikowych. aovpAlternatywa - od osieroconej lmpermpakietu - produkuje ogromne różnice dla wartości p, zobacz to . Mam kilka pytań: Gdzie mogę znaleźć odniesienia bibliograficzne do wdrożenia ezPerm? Jak mogę zinterpretować, że funkcja prawdopodobnie nie wykonuje poprawnie interakcji ? Co może być testem post hoc w tym przypadku? Dzięki!
toto_tico,
@Mike, czy coś takiego ezPerm( data = DATA, dv = DV, wid = WID, within = interaction(A,B), perms = 1e3)ma sens, aby dokładnie sprawdzić, czy interakcja jest znacząca?
toto_tico,
5

W razie wątpliwości bootstrap! Naprawdę nie znam procedury standardowej do obsługi takiego scenariusza.

Bootstrapping to ogólnie stosowany sposób generowania niektórych parametrów błędów z dostępnych danych. Zamiast opierać się na typowych założeniach parametrycznych, procedury ładowania początkowego wykorzystują właściwości próbki, aby wygenerować rozkład empiryczny, z którym można porównać szacunki próbki.

Google Scholar jest złotem ... zrobiono to wcześniej ... przynajmniej raz.

Lunneborg, Clifford E .; Tousignant, James P .; 1985 „Bootstrap Efrona z zastosowaniem do projektowania powtarzanych pomiarów”. Wielowymiarowe badania behawioralne; 85 kwietnia, t. 20 Wydanie 2, s. 161, 18 str

Brett
źródło
1
Dziękujemy za prowadzenie Brett! Zastanawiam się, czy ktoś może go teraz zaimplementować w R (chyba nie).
Tal Galili
1
Dobrze. R ma wiele procedur pomagających w bootstrapie i innych metodach losowych, ale nie wiem, czy znajdziesz coś specyficznego dla tego problemu.
Brett,
Bardzo fajne pierwsze zdanie. Mam nadzieję, że nie jest chroniony prawem autorskim, ponieważ planuję go użyć: D
gui11aume
0

Na niektórych forach i listach dyskusyjnych wspomniano o „sztuczce” - znalazłem ją także w książce Joopa Hoxa „Analiza wielopoziomowa” (drugie wydanie, 2010), s. 189.

Chodzi o to: sformatujesz swoje długie dane w długi, długi zestaw danych, w którym utworzysz nowy DV, który zawiera wszystkie twoje odpowiedzi DV, i użyjesz zmiennej indeksu, która przechowuje informacje o naturze DV, aby przewidzieć ten wynik.

Załóżmy, że masz 9 objawów depresji (porządkowych), 2 punkty pomiarowe i 300 pacjentów. Więc jeśli masz 300 wierszy w swoim normalnym zestawie danych, a w długim zestawie danych będziesz mieć 600 wierszy, ten nowy zestaw danych będzie miał 9 (objawy) x 2 (czas) x 300 (podmioty) wierszy.

Nowa zmienna DV „objawy” zawiera teraz nasilenie objawów u uczestników na 9 objawach, zmienne „indeks” zawiera informacje o naturze objawu (od 1 do 9), a następnie są dwie zmienne „czas” i „ Identyfikator użytkownika".

Możesz teraz użyć tego ordinalpakietu do uruchomienia tego.

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)

W moim konkretnym przypadku byłem zainteresowany, czy istnieje znacząca interakcja między indeksem a czasem, więc uruchomiłem jeden dodatkowy model i porównałem je:

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

CLMM2 używa modelu przechwytywania losowego (według mojej najlepszej wiedzy, pakiet ordinalnie wykonuje losowych nachyleń), jeśli nie używasz modelu przechwytywania losowego, możesz uruchomić modele zamiast tego przy użyciu CLM, np .:

m3<-clm(symptoms ~ index+time, data = data)
Torvon
źródło
1
nie są m1 i m2 dokładnie takie same, może miałeś na myśli clmm2(symptoms ~ index*time, random=UserID, data = data, Hess=TRUE, nAGQ=10) anova(m1,m2). Czy wiesz przypadkiem, jak to wyrazić dzięki nowej funkcji clmm? Nie jestem pewien co do zapisu.
toto_tico,