Непараметрическая многофакторная анова с повторными измерениями в R?

16

Следующий вопрос - один из тех святых Граалей для меня в течение некоторого времени, я надеюсь, что кто-то сможет дать хороший совет.

Я хочу выполнить непараметрические повторные измерения многоходового анова с использованием R.

Некоторое время я занимался поиском и чтением в Интернете и до сих пор смог найти решения только для некоторых случаев: тест Фридмана для односторонних непараметрических повторных измерений anova, порядковая регрессия с функцией {car} Anova для многопараметрических непараметрических параметров анова и тд. Частичные решения - это НЕ то, что я ищу в этой теме. Я кратко изложил свои выводы в публикации, которую я опубликовал некоторое время назад (под названием: Повторные измерения ANOVA с помощью R (функции и учебные пособия) , на случай, если это кому-нибудь поможет)


Если то, что я читаю онлайн, верно, то эта задача может быть решена с использованием смешанной модели ординальной регрессии (иначе говоря, модели пропорциональных шансов).

Я нашел две посылки, которые кажутся актуальными, но не смог найти ни одной виньетки на эту тему:

Так что, будучи новичком в предмете, я надеялся на некоторые указания от людей здесь.

Есть ли какие-либо учебные пособия / предлагаемые чтения по этому вопросу? Более того, может ли кто-нибудь предложить простой пример кода для запуска и анализа этого в R (например, «непараметрические повторные измерения multiway anova»)?

Таль Галили
источник
Тал, могу я спросить, нашел ли ты решение для этого? У меня та же проблема, и приведенные ниже ответы могут помочь найти ответ, но на самом деле не дают однозначного ответа. У меня 9 порядковых DV и 2 временные точки, и я ищу тот же тест, который вы хотели выполнить.
Торвон
1
Привет Торвон. Я никогда не пришел к решению. Я предполагаю, что тесты перестановки будут самым безопасным маршрутом, но у меня никогда не было времени сидеть и заставлять это работать. Если вы это сделаете - пожалуйста, приходите еще раз, чтобы опубликовать свой ответ. Приветствия, Т
Тал Галили
Спасибо за ваш быстрый ответ. Я должен решить это и дам вам знать.
Торвон,

Ответы:

8

В пакете ez , автором которого я являюсь, есть функция ezPerm (), которая вычисляет тест перестановки, но, вероятно, не выполняет взаимодействия должным образом (документация допускает столько же). В последней версии есть функция ezBoot (), которая позволяет вам выполнить повторную выборку при начальной загрузке, которая учитывает повторяющиеся измерения (путем повторной выборки субъектов, а затем внутри объектов), либо используя традиционные средства ячейки в качестве статистики прогноза, либо используя моделирование смешанных эффектов для создания прогнозов для каждой ячейки в дизайне. Я до сих пор не уверен, насколько «непараметрически» загрузочные CI из предсказаний модели со смешанными эффектами; моя интуиция заключается в том, что их разумно считать непараметрическими, но моя уверенность в этой области низка, учитывая, что я все еще изучаю модели смешанных эффектов.

Майк Лоуренс
источник
Привет майк Спасибо за ответ, и за ваш пакет - это действительно здорово!
Тал Галили
@ Майк, Ваш пакет, кажется, работает только для смешанных многофакторных проектов. aovpАльтернатива - от сиротского lmpermпакета - производит огромные вариации для р-значений см это . У меня есть несколько вопросов: Где я могу найти библиографические ссылки для реализации ezPerm? Как я могу интерпретировать, что функция, вероятно, не выполняет взаимодействия должным образом ? Что может быть в этом случае специальным тестом? Благодарность!
toto_tico
@ Майк, что-то вроде бы ezPerm( data = DATA, dv = DV, wid = WID, within = interaction(A,B), perms = 1e3)имеет смысл дважды проверить, является ли взаимодействие значимым?
toto_tico
5

Если есть сомнения, начальная загрузка! На самом деле, я не знаю какой-либо постоянной процедуры для такого сценария.

Начальная загрузка является общепринятым способом генерации некоторых параметров ошибок из имеющихся данных. Вместо того, чтобы полагаться на типичные параметрические допущения, процедуры начальной загрузки используют характеристики выборки для создания эмпирического распределения, с которым можно сравнивать оценки выборки.

Google ученый - это золото ... это было сделано раньше ... хотя бы раз.

Луннеборг, Клиффорд Э .; Tousignant, Джеймс П .; 1985 «Бутстрап Эфрона с применением к дизайну повторных измерений». Многомерное поведенческое исследование; Apr85, Vol. 20 Выпуск 2, с161, 18р

Brett
источник
1
Спасибо за лидерство, Бретт! Интересно, должен ли кто-то реализовывать это сейчас в R (думаю, нет).
Тал Галили
1
Правильно. У R есть много подпрограмм для помощи с начальной загрузкой и другими методами рандомизации, но я не знаю, что вы найдете что-то конкретное для этой проблемы.
Бретт
Очень хорошее первое предложение. Я надеюсь, что это не защищено авторским правом, потому что я планирую использовать его: D
gui11aume
0

На некоторых форумах и в списках рассылки упоминается «трюк», о котором я также упоминал в книге Джупа Хокса «Многоуровневый анализ» (второе издание, 2010 г.), с. 189.

Идея такова: вы переформатируете свои длинные данные в длинный длинный набор данных, в котором вы создаете новый DV, который включает в себя все ваши ответы DV, и используете индексную переменную, которая содержит информацию о природе DV, чтобы предсказать этот результат.

Предположим, у вас есть 9 симптомов депрессии (порядковый номер), 2 точки измерения и 300 субъектов. Таким образом, в то время как у вас есть 300 строк в вашем обычном наборе данных, и в вашем длинном наборе данных у вас будет 600 строк, этот новый набор данных будет иметь 9 (симптомы) x 2 (время) x 300 (субъектов) строк.

Новая переменная DV «симптомы» теперь содержит серьезность симптомов участников по 9 симптомам, переменные «индекс» содержат информацию о характере симптома (от 1 до 9), а затем есть две переменные «время» и «время». ID пользователя".

Теперь вы можете использовать ordinalпакет для запуска этого.

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)

В моем конкретном случае мне было интересно, было ли существенное взаимодействие между индексом и временем, поэтому я запустил одну дополнительную модель и сравнил их:

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

CLMM2 использует модель случайного перехвата (насколько мне известно, пакет ordinalне делает случайных уклонов), если вы не используете модель случайного перехвата, вы можете вместо этого запускать модели с использованием CLM, например:

m3<-clm(symptoms ~ index+time, data = data)
Torvon
источник
1
не m1 и m2 не то же самое, может быть, вы имели в виду clmm2(symptoms ~ index*time, random=UserID, data = data, Hess=TRUE, nAGQ=10) anova(m1,m2). Знаете ли вы случайно, как выразить это с помощью новой функции clmm? Я не уверен насчет записи.
toto_tico