Модель змішаних ефектів: порівняйте компонент випадкової дисперсії за рівнями змінної групи


14

Припустимо, у мене є учасників, кожен з яких дає відповідь 20 разів, 10 в одній умові та 10 в іншій. Я підходить до лінійної моделі змішаних ефектів, порівнюючи в кожній умові. Ось відтворюваний приклад, що моделює цю ситуацію за допомогою пакета у :Y YNYYlme4R

library(lme4)
fml <- "~ condition + (condition | participant_id)"
d <- expand.grid(participant_id=1:40, trial_num=1:10)
d <- rbind(cbind(d, condition="control"), cbind(d, condition="experimental"))

set.seed(23432)
d <- cbind(d, simulate(formula(fml), 
                       newparams=list(beta=c(0, .5), 
                                      theta=c(.5, 0, 0), 
                                      sigma=1), 
                       family=gaussian, 
                       newdata=d))

m <- lmer(paste("sim_1 ", fml), data=d)
summary(m)

Модель mдає два фіксованих ефекту (перехоплення та нахил для умови) та три випадкові ефекти (випадковий перехоплення учасника, випадковий нахил учасника для умови та кореляція перехрестя-нахилу).

Я хотів би статистично порівняти розмір дисперсії випадкового перехоплення за учасником у групах, визначених condition(тобто обчислити компонент дисперсії, виділений червоним кольором окремо в контрольних та експериментальних умовах, а потім перевірити, чи різниця у розмірі компонентів дорівнює нулю). Як би я це зробив (бажано в R)?

введіть тут опис зображення


БОНУС

Скажімо, модель дещо складніша: кожен учасник відчуває 10 подразників 20 разів кожен, 10 в одній умові та 10 в іншій. Таким чином, існує два набори схрещених випадкових ефектів: випадкові ефекти для учасника та випадкові ефекти для стимулу. Ось відтворюваний приклад:

library(lme4)
fml <- "~ condition + (condition | participant_id) + (condition | stimulus_id)"
d <- expand.grid(participant_id=1:40, stimulus_id=1:10, trial_num=1:10)
d <- rbind(cbind(d, condition="control"), cbind(d, condition="experimental"))

set.seed(23432)
d <- cbind(d, simulate(formula(fml), 
                       newparams=list(beta=c(0, .5), 
                                      theta=c(.5, 0, 0, .5, 0, 0), 
                                      sigma=1), 
                       family=gaussian, 
                       newdata=d))

m <- lmer(paste("sim_1 ", fml), data=d)
summary(m)

Я хотів би статистично порівняти величину випадкової дисперсії перехоплення між учасниками у групах, визначених condition. Як би я це зробив, і чи відрізняється процес від описаного вище?


EDIT

Щоб бути трохи більш конкретним щодо того, що я шукаю, я хочу знати:

  1. Чи є питання "чи середньо-умовні відповіді в кожній умові (тобто випадкові значення перехоплення в кожній умові) істотно відрізняються один від одного, за винятком того, що ми могли б очікувати через помилку вибірки"? навіть теоретично відповідальний)? Якщо ні, то чому б і ні?
  2. Якщо відповідь на питання (1) - так, то як би я відповів на це? Я вважаю за краще Rреалізацію, але я не прив'язаний до lme4пакету - наприклад, здається, що OpenMxпакет має можливість вмістити багатогруповий та багаторівневий аналізи ( https: //openmx.ssri.psu). edu / openmx-особливості ), і це виглядає як таке питання, яке повинно відповідати в рамках SEM.

1
@MarkWhite, я оновив питання у відповідь на ваші коментарі. Я маю на увазі, що я хочу порівняти стандартне відхилення перехоплення учасника, коли вони дають відповіді в контрольному стані, і коли вони дають відповіді в експериментальному стані. Я хочу це зробити статистично, тобто перевірити, чи різниця в стандартному відхиленні перехоплення відрізняється від 0.
Патрік С. Форшер,

2
Я написав відповідь, але спатиму на ній, бо не впевнений, що це дуже корисно. Питання зводиться до того, що я не думаю, що можна зробити те, що ти просиш. Випадковий ефект перехоплення - це дисперсія в засобах учасників, коли вони перебувають у контрольному стані. Тому не можна дивитися на дисперсію спостережень в експериментальному стані. Перехоплення визначаються на рівні людини, а умова - на рівні спостереження. Якщо ви намагаєтеся порівняти відхилення між умовами, я б подумав про умовно-гетероскедастичні моделі.
Марк Уайт

2
Я працюю над переглядом і повторним поданням документа, де я маю учасників, які дають відповіді на набори стимулів. Кожен учасник стикається з різними умовами, і кожен стимул отримує відповідь у декількох умовах - іншими словами, моє дослідження імітує налаштування, яке я описую в моєму описі «БОНУС». В одному з моїх графіків виявляється, що середня відповідь учасника має більшу мінливість в одній із умов, ніж в інших. Рецензент попросив мене перевірити, чи це правда.
Патрік С. Форшер

2
Будь ласка, дивіться тут stats.stackexchange.com/questions/322213, як налаштувати модель lme4 з різними параметрами дисперсії для кожного рівня змінної групи. Я не впевнений, як зробити тест на гіпотезу щодо рівності двох параметрів дисперсії; особисто я завжди вважаю за краще перевантажувати теми та стимули, щоб отримати довірчий інтервал, чи, можливо, встановити якийсь тест гіпотези, що нагадує перестановку (на основі перестановки).
Амеба каже, що повернеться до Моніки

3
Я погоджуюся з коментарем @MarkWhite, що питання "випадкові відхилення перехоплення істотно відрізняються один від одного ..." в кращому випадку незрозумілий і в гіршому - безглуздий, тому що перехоплення обов'язково стосується значень Y в одній конкретній групі ( група присвоїла значення 0), тому порівнювати "перехоплення" по групах строго кажучи не має сенсу. Я думаю, що кращим способом переформулювати ваше запитання, як я його розумію, було б щось на кшталт: "чи відрізняються умовні середні відповіді учасників в умовах A проти умови B нерівними?"
Джейк Вестфалл

Відповіді:


6

Існує не один спосіб перевірити цю гіпотезу. Наприклад, процедура, окреслена @amoeba, повинна працювати. Але мені здається, що найпростішим, найбільш доцільним способом перевірити це є тестування старого хорошого коефіцієнта ймовірності порівняння двох вкладених моделей. Єдина потенційно складна частина цього підходу полягає в тому, щоб знати, як налаштувати пару моделей, щоб випадання одного параметра дозволило чітко перевірити бажану гіпотезу про неоднакові дисперсії. Нижче я пояснюю, як це зробити.

Коротка відповідь

Переключіться на контрастне (суми до нуля) кодування для вашої незалежної змінної, а потім зробіть тест коефіцієнта ймовірності, порівнюючи вашу повну модель з моделлю, яка змушує кореляцію між випадковими нахилами та випадковими перехопленнями до 0:

# switch to numeric (not factor) contrast codes
d$contrast <- 2*(d$condition == 'experimental') - 1

# reduced model without correlation parameter
mod1 <- lmer(sim_1 ~ contrast + (contrast || participant_id), data=d)

# full model with correlation parameter
mod2 <- lmer(sim_1 ~ contrast + (contrast | participant_id), data=d)

# likelihood ratio test
anova(mod1, mod2)

Візуальне пояснення / інтуїція

Для того, щоб ця відповідь мала сенс, потрібно мати інтуїтивне розуміння того, що різні значення параметра кореляції означають для спостережуваних даних. Розглянемо (випадково змінюються) регресійні лінії, що залежать від предмета. В основному, параметр кореляції контролює, чи регресійні лінії учасника "вентилятор направо" (позитивна кореляція) або "вентилятор зліва" (від'ємна кореляція) щодо точки Х=0 , де X - ваш кодований контраст незалежний змінна. Будь-яке з них передбачає неоднакове розходження в умовно-середніх відповідях учасників. Це проілюстровано нижче:

випадкова кореляція

У цьому сюжеті ми ігноруємо численні спостереження, які ми маємо за кожним суб'єктом у кожній умові, і замість цього просто побудуємо два випадкових засоби кожного суб'єкта з лінією, що з'єднує їх, представляючи випадковий нахил цього суб'єкта. (Це складені дані з 10 гіпотетичних суб'єктів, а не дані, розміщені в ОП.)

У стовпці ліворуч, де є сильна від'ємна кореляція нахилу-перехрестя, лінії регресії випромінюються вліво відносно точки Х=0 . Як видно на малюнку, це призводить до більшої розбіжності у випадкових засобах випробовуваних в умові Х=-1 ніж в умові Х=1 .

У стовпці праворуч зображено зворотне дзеркальне зображення цього малюнка. У цьому випадку існує більша дисперсія у випадкових засобах випробовуваних у умові Х=1 ніж у умові Х=-1 .

У стовпці в середині показано, що відбувається, коли випадкові нахили та випадкові перехоплення некорельовані. Це означає, що лінії регресії випромінюються ліворуч рівно стільки, скільки вони вентилятора праворуч, відносно точки Х=0 . Це означає, що дисперсії засобів суб'єктів у двох умовах рівні.

Тут важливо, що ми використовували контрастну схему кодування за сумою до нуля, а не фіктивні коди (тобто не встановлюючи групи на Х=0 проти Х=1 ). Це тільки по схемі кодування контрастною , що у нас є це співвідношення , в якому відхилення дорівнює тоді і тільки тоді , коли нахил відсікається кореляції дорівнює 0. На малюнку нижче намагається побудувати що інтуїція:

введіть тут опис зображення

Цей показник показує той самий точний набір даних в обох стовпцях, але з незалежною змінною кодується двома різними способами. У колонці зліва ми використовуємо контрастні коди - саме така ситуація є з першої цифри. У стовпці праворуч ми використовуємо фіктивні коди. Це змінює значення перехоплення - тепер перехоплення представляють передбачувані відповіді суб'єктів у контрольній групі. На нижній панелі показано наслідок цієї зміни, а саме те, що кореляція нахилу-перехрестя вже ніде не наближається до 0, хоча дані в глибокому розумінні однакові і умовні відхилення в обох випадках рівні. Якщо це все ще не має великого сенсу, вивчення цієї попередньої моєї відповіді, де я розповім більше про це явище, може допомогти.

Доказ

Нехай уijк - j а відповідь i го предмета за умови к . (У нас тут лише дві умови, тому к - це просто 1 або 2.) Тоді змішану модель можна записати

уijк=αi+βiхк+еijк,
де αi є суб'єктами ' випадкові перехоплення і мають дисперсію σα2 , βi- випадковий нахил випробовуваних і має дисперсію σβ2 , еijк - термін помилки рівня спостереження, а ков(αi,βi)=σαβ .

Хочемо показати, що

вар(αi+βiх1)=вар(αi+βiх2)σαβ=0.

Починаючи з лівої частини цього значення, ми маємо

вар(αi+βiх1)=вар(αi+βiх2)σα2+х12σβ2+2х1σαβ=σα2+х22σβ2+2х2σαβσβ2(х12-х22)+2σαβ(х1-х2)=0.

х1+х2=0х12=х22=х2

σβ2(х2-х2)+2σαβ(х1+х1)=0σαβ=0,

σαβ=0

х1=0х2=1

вар(αi)=вар(αi+βi)σαβ=-σβ22.


Це вже приголомшлива відповідь, дякую! Я думаю, що це найближче до відповіді на моє запитання, тому я приймаю його і даю вам щедрість (це скоро закінчиться), але я хотів би побачити алгебраїчне обгрунтування, якщо у вас є час і енергія на це.
Патрік С. Форшер

1
@ PatrickS.Forscher Я щойно додав доказ
Джейк Уестпад

1
а-а(1 | subject)dummyа-а

1
Я бачу, що ти правий @amoeba, дякую за пояснення. Я відповідно відредагую свою відповідь.
Джейк Вестпад

1
@amoeba Ви маєте рацію, що можливо, BLUP можуть вийти корельованими навіть без параметра кореляції в моделі. Але я вважаю, що для цілей тестування процедура все ще працює за призначенням (наприклад, вона має номінальний коефіцієнт помилок типу 1), оскільки лише модель з параметром кореляції здатна включити це у функцію ймовірності і тим самим "отримати кредит" для цього . Тобто, навіть якщо BLUP виявляться співвіднесеними у більш простої моделі, це все одно, ніби ефекти не співвідносяться, що стосується загальної ймовірності, тому тест LR буде працювати. Я думаю :)
Джейк Вестпад

6

Ви можете перевірити значущість параметрів моделі за допомогою оцінених довірчих інтервалів, для яких пакет lme4 має confint.merModфункцію.

завантажувальна програма (див., наприклад, Інтервал впевненості з завантажувальної програми )

> confint(m, method="boot", nsim=500, oldNames= FALSE)
Computing bootstrap confidence intervals ...
                                                           2.5 %     97.5 %
sd_(Intercept)|participant_id                         0.32764600 0.64763277
cor_conditionexperimental.(Intercept)|participant_id -1.00000000 1.00000000
sd_conditionexperimental|participant_id               0.02249989 0.46871800
sigma                                                 0.97933979 1.08314696
(Intercept)                                          -0.29669088 0.06169473
conditionexperimental                                 0.26539992 0.60940435 

профіль ймовірності (див. наприклад, яка залежність між вірогідністю профілю та довірчими інтервалами? )

> confint(m, method="profile", oldNames= FALSE)
Computing profile confidence intervals ...
                                                          2.5 %     97.5 %
sd_(Intercept)|participant_id                         0.3490878 0.66714551
cor_conditionexperimental.(Intercept)|participant_id -1.0000000 1.00000000
sd_conditionexperimental|participant_id               0.0000000 0.49076950
sigma                                                 0.9759407 1.08217870
(Intercept)                                          -0.2999380 0.07194055
conditionexperimental                                 0.2707319 0.60727448

  • Існує також метод, 'Wald'але він застосовується лише для фіксованих ефектів.

  • Існує також якийсь тип вираження anova (коефіцієнт ймовірності) в пакеті, lmerTestякий названий ranova. Але я, здається, не маю сенсу з цього. Розподіл відмінностей у logLikelihood, коли нульова гіпотеза (нульова дисперсія для випадкового ефекту) є істинною, не розподіляється в квадраті (можливо, коли кількість учасників і випробувань висока, тест на коефіцієнт ймовірності може мати сенс).


Різниця в конкретних групах

Щоб отримати результати для дисперсії в конкретних групах, ви могли б переузначити розмір

# different model with alternative parameterization (and also correlation taken out) 
fml1 <- "~ condition + (0 + control + experimental || participant_id) "

Там, де ми додали два стовпці до фрейму даних (це потрібно лише в тому випадку, якщо ви хочете оцінити некорельований «контроль» та «експериментальний», функція (0 + condition || participant_id)не призведе до оцінки різних факторів у стані як некорельованих)

#adding extra columns for control and experimental
d <- cbind(d,as.numeric(d$condition=='control'))
d <- cbind(d,1-as.numeric(d$condition=='control'))
names(d)[c(4,5)] <- c("control","experimental")

Тепер lmerдамо дисперсію для різних груп

> m <- lmer(paste("sim_1 ", fml1), data=d)
> m
Linear mixed model fit by REML ['lmerModLmerTest']
Formula: paste("sim_1 ", fml1)
   Data: d
REML criterion at convergence: 2408.186
Random effects:
 Groups           Name         Std.Dev.
 participant_id   control      0.4963  
 participant_id.1 experimental 0.4554  
 Residual                      1.0268  
Number of obs: 800, groups:  participant_id, 40
Fixed Effects:
          (Intercept)  conditionexperimental  
               -0.114                  0.439 

І ви можете застосувати методи профілів до них. Наприклад, тепер confint дає інтервали довіри для контролю та експериментальної дисперсії.

> confint(m, method="profile", oldNames= FALSE)
Computing profile confidence intervals ...
                                    2.5 %     97.5 %
sd_control|participant_id       0.3490873 0.66714568
sd_experimental|participant_id  0.3106425 0.61975534
sigma                           0.9759407 1.08217872
(Intercept)                    -0.2999382 0.07194076
conditionexperimental           0.1865125 0.69149396

Простота

Ви можете скористатися функцією ймовірності для отримання більш розширених порівнянь, але існує багато способів зробити наближення по дорозі (наприклад, ви могли б зробити консервативний тест anova / lrt-test, але це те, що ви хочете?).

У цей момент мене змушує замислитися, що насправді сенс цього (не настільки поширеного) порівняння між дисперсіями. Цікаво, чи не починає вона надто вишукано. Чому різниця між дисперсіями замість співвідношення між дисперсіями (що стосується класичного F-розподілу)? Чому б не просто повідомити про довірчі інтервали? Нам потрібно зробити крок назад і уточнити дані та історію, яку він повинен розповісти, перш ніж переходити до прогресивних шляхів, які можуть бути зайвими і неміцними у зв'язку зі статистичним питанням та статистичними міркуваннями, які насправді є основною темою.

Цікаво, чи варто робити набагато більше, ніж просто зазначати інтервали довіри (що насправді може означати набагато більше, ніж тест гіпотези. Тест на гіпотезу дає відповідь "так", але немає інформації про фактичне поширення населення. Надаючи достатньо даних, які ви можете внести будь-яку незначну різницю, яку слід повідомити як про значну різницю). Для більш глибокого вивчення справи (з будь-якою метою) потрібно, я вважаю, більш конкретний (вузько визначений) дослідницький питання, щоб керувати математичним механізмом, щоб зробити належні спрощення (навіть коли точний розрахунок може бути здійсненним або коли це можна наблизити за допомогою симуляції / завантаження, навіть тоді в деяких налаштуваннях все-таки потрібна відповідна інтерпретація). Порівняйте з точним тестом Фішера, щоб точно вирішити (конкретне) питання (щодо таблиць на випадок надзвичайних ситуацій),

Простий приклад

Щоб навести приклад простоти, яка можлива, я показую нижче порівняння (за допомогою моделювання) з простою оцінкою різниці між двома груповими дисперсіями на основі F-тесту, зробленого шляхом порівняння дисперсій у середніх середніх відповідях та виконаних шляхом порівняння змішані моделі отримують відхилення.

j

Y^i,jN(μj,σj2+σϵ210)

σϵσjj={1,2}

Це можна побачити на моделюванні графіку нижче, коли окрім F-балу на основі вибірки F-бал розраховується на основі прогнозованих відхилень (або сум квадратичної помилки) від моделі.

Приклад різниці в точності

σj=1=σj=2=0.5σϵ=1

Ви можете бачити, що є якась різниця. Ця різниця може бути пов'язана з тим, що лінійна модель змішаних ефектів отримує суми похибки квадрата (для випадкового ефекту) по-іншому. І ці терміни помилок у квадраті не (більше) добре виражені у вигляді простого розподілу Chi-квадрата, але все ще тісно пов’язані між собою і їх можна наблизити.

σj=1σj=2Y^i,jσjσϵ

Приклад різниці у потужності

σj=1=0,5σj=2=0,25σϵ=1

Тож модель на основі засобів дуже точна. Але вона менш потужна. Це показує, що правильна стратегія залежить від того, що ви хочете / потребуєте.

У наведеному вище прикладі, коли ви встановлюєте правильні межі хвоста у 2.1 та 3.1, ви отримуєте приблизно 1% сукупності у випадку рівної дисперсії (респ. 103 та 104 з 10 000 випадків), але у випадку неоднакової дисперсії ці межі відрізняються багато (даючи 5334 та 6716 справ)

код:

set.seed(23432)

# different model with alternative parameterization (and also correlation taken out)
fml1 <- "~ condition + (0 + control + experimental || participant_id) "
fml <- "~ condition + (condition | participant_id)"

n <- 10000

theta_m <- matrix(rep(0,n*2),n)
theta_f <- matrix(rep(0,n*2),n)

# initial data frame later changed into d by adding a sixth sim_1 column
ds <- expand.grid(participant_id=1:40, trial_num=1:10)
ds <- rbind(cbind(ds, condition="control"), cbind(ds, condition="experimental"))
  #adding extra columns for control and experimental
  ds <- cbind(ds,as.numeric(ds$condition=='control'))
  ds <- cbind(ds,1-as.numeric(ds$condition=='control'))
  names(ds)[c(4,5)] <- c("control","experimental")

# defining variances for the population of individual means
stdevs <- c(0.5,0.5) # c(control,experimental)

pb <- txtProgressBar(title = "progress bar", min = 0,
                    max = n, style=3)
for (i in 1:n) {

  indv_means <- c(rep(0,40)+rnorm(40,0,stdevs[1]),rep(0.5,40)+rnorm(40,0,stdevs[2]))
  fill <- indv_means[d[,1]+d[,5]*40]+rnorm(80*10,0,sqrt(1)) #using a different way to make the data because the simulate is not creating independent data in the two groups 
  #fill <- suppressMessages(simulate(formula(fml), 
  #                     newparams=list(beta=c(0, .5), 
  #                                    theta=c(.5, 0, 0), 
  #                                    sigma=1), 
  #                     family=gaussian, 
  #                     newdata=ds))
  d <- cbind(ds, fill)
  names(d)[6] <- c("sim_1")


  m <- lmer(paste("sim_1 ", fml1), data=d)
  m
  theta_m[i,] <- m@theta^2

  imeans <- aggregate(d[, 6], list(d[,c(1)],d[,c(3)]), mean)
  theta_f[i,1] <- var(imeans[c(1:40),3])
  theta_f[i,2] <- var(imeans[c(41:80),3])

  setTxtProgressBar(pb, i)
}
close(pb)

p1 <- hist(theta_f[,1]/theta_f[,2], breaks = seq(0,6,0.06))       
fr <- theta_m[,1]/theta_m[,2]
fr <- fr[which(fr<30)]
p2 <- hist(fr, breaks = seq(0,30,0.06))



plot(-100,-100, xlim=c(0,6), ylim=c(0,800), 
     xlab="F-score", ylab = "counts [n out of 10 000]")
plot( p1, col=rgb(0,0,1,1/4), xlim=c(0,6), ylim=c(0,800), add=T)  # means based F-score
plot( p2, col=rgb(1,0,0,1/4), xlim=c(0,6), ylim=c(0,800), add=T)  # model based F-score
fr <- seq(0, 4, 0.01)
lines(fr,df(fr,39,39)*n*0.06,col=1)
legend(2, 800, c("means based F-score","mixed regression based F-score"), 
       fill=c(rgb(0,0,1,1/4),rgb(1,0,0,1/4)),box.col =NA, bg = NA)
legend(2, 760, c("F(39,39) distribution"), 
       lty=c(1),box.col = NA,bg = NA)
title(expression(paste(sigma[1]==0.5, " , ", sigma[2]==0.5, " and ", sigma[epsilon]==1)))

Це корисно, але, здається, не вирішується питання про те, як порівняти відхилення в двох умовах.
амеба каже, що повернеться до Моніки

@amoeba Я виявив, що ця відповідь дає суть проблеми (про тестування випадкових дисперсійних компонентів). Чого точно хоче ОП, важко прочитати у всьому тексті. На що посилаються "випадкові відхилення перехоплення"? (множина стосовно перехоплення мене бентежить) Одним із можливих випадків може бути використання моделі, sim_1 ~ condition + (0 + condition | participant_id)"в цьому випадку ви отримуєте параметризацію на два параметри (по одному для кожної групи), а не два параметри, один для перехоплення та один для ефекту (який потрібно об'єднати для груп).
Секст Емпірік

Кожен суб'єкт має деяку середню відповідь у стані A та деяку середню відповідь у стані B. Питання полягає в тому, чи відрізняється дисперсія між суб'єктами в А від дисперсії між суб'єктами у Б.
amee каже Відновити Моніку

Це не виконує завдання, поставлене в заголовку "Порівняти компонент випадкової дисперсії за рівнями змінної групи". Я помітив, що в тілі питання, яке я виправив, було заплутане друкарське запитання. Я також намагався додатково уточнити формулювання питання.
Патрік С. Форшер

Відповісти на це питання можна, використовуючи car::linearHypothesisTest( math.furman.edu/~dcs/courses/math47/R/library/car/html/… ), що дозволяє користувачеві перевірити довільну гіпотезу за допомогою пристосованої моделі. Однак мені доведеться скористатися методом @ amoeba, щоб отримати обидва випадкові перехоплення в одній і тій же моделі, що відповідає моді, щоб їх можна порівняти з цією функцією. Я також трохи не впевнений у справедливості методу.
Патрік С. Форшер

5

Одним із прямих способів може бути використання тестів на коефіцієнт імовірності, anovaяк описано в lme4FAQ .

Ми починаємо з повної моделі, в якій дисперсії є необмеженими (тобто допускаються дві різні дисперсії), а потім підходить до однієї обмеженої моделі, в якій дві дисперсії вважаються рівними. Ми просто порівнюємо їх з anova()(зауважте, я встановив, REML = FALSEхоча REML = TRUEз anova(..., refit = FALSE)цілком здійсненним ).

m_full <- lmer(sim_1 ~ condition + (condition | participant_id), data=d, REML = FALSE)
summary(m_full)$varcor
 # Groups         Name                  Std.Dev. Corr  
 # participant_id (Intercept)           0.48741        
 #                conditionexperimental 0.26468  -0.419
 # Residual                             1.02677     

m_red <- lmer(sim_1 ~ condition + (1 | participant_id), data=d, REML = FALSE)
summary(m_red)$varcor
 # Groups         Name        Std.Dev.
 # participant_id (Intercept) 0.44734 
 # Residual                   1.03571 

anova(m_full, m_red)
# Data: d
# Models:
# m_red: sim_1 ~ condition + (1 | participant_id)
# m_full: sim_1 ~ condition + (condition | participant_id)
#        Df    AIC    BIC  logLik deviance  Chisq Chi Df Pr(>Chisq)
# m_red   4 2396.6 2415.3 -1194.3   2388.6                         
# m_full  6 2398.7 2426.8 -1193.3   2386.7 1.9037      2      0.386

Однак цей тест, ймовірно, консервативний . Наприклад, FAQ задає:

Майте на увазі, що тести гіпотез на основі LRT є консервативними, коли нульове значення (наприклад, σ2 = 0) знаходиться на межі можливого простору; у найпростішому випадку (одиночна дисперсія випадкових ефектів) р-значення приблизно вдвічі більше, ніж воно повинно бути (Pinheiro та Bates 2000).

Є кілька альтернатив:

  1. χ2

  2. Моделюйте правильний розподіл за допомогою RLRsim(як це також описано у FAQ).

Я продемонструю другий варіант у наступному:

library("RLRsim")
## reparametrize model so we can get one parameter that we want to be zero:
afex::set_sum_contrasts() ## warning, changes contrasts globally
d <- cbind(d, difference = model.matrix(~condition, d)[,"condition1"])

m_full2 <- lmer(sim_1 ~ condition + (difference | participant_id), data=d, REML = FALSE)
all.equal(deviance(m_full), deviance(m_full2))  ## both full models are identical

## however, we need the full model without correlation!
m_full2b <- lmer(sim_1 ~ condition + (1| participant_id) + 
                   (0 + difference | participant_id), data=d, REML = FALSE)
summary(m_full2b)$varcor
 # Groups           Name        Std.Dev.
 # participant_id   (Intercept) 0.44837 
 # participant_id.1 difference  0.13234 
 # Residual                     1.02677 

## model that only has random effect to be tested
m_red <- update(m_full2b,  . ~ . - (1 | participant_id), data=d, REML = FALSE)
summary(m_red)$varcor
 # Groups         Name       Std.Dev.
 # participant_id difference 0.083262
 # Residual                  1.125116

## Null model 
m_null <- update(m_full2b,  . ~ . - (0 + difference | participant_id), data=d, REML = FALSE)
summary(m_null)$varcor
 # Groups         Name        Std.Dev.
 # participant_id (Intercept) 0.44734 
 # Residual                   1.03571 

exactRLRT(m_red, m_full2b, m_null)
# Using restricted likelihood evaluated at ML estimators.
# Refit with method="REML" for exact results.
# 
#   simulated finite sample distribution of RLRT.
#   
#   (p-value based on 10000 simulated values)
# 
# data:  
# RLRT = 1.9698, p-value = 0.0719

Як ми бачимо, результати свідчать про те, що REML = TRUEми мали б отримати точні результати. Але це залишається як вправа для читача.

Щодо бонусу, я не впевнений, чи RLRsimдозволяє одночасне тестування декількох компонентів, але якщо так, то це можна зробити так само.


Відповідь на коментар:

θХθ0Х

Я не впевнений, що на це питання можна отримати розумну відповідь.

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

То чи впливають випадкові нахили на випадковий перехоплення? У певному сенсі це може мати сенс, оскільки вони дозволяють кожному рівню групуючого фактору повністю ідіосинкратичного ефекту для кожної умови. Зрештою, ми оцінюємо два ідіосинкратичні параметри для двох умов. Однак, я вважаю, що різниця між загальним рівнем, захопленим перехопленням, і специфічним для умови ефектом, захопленим випадковим нахилом, є важливим, і тоді випадковий нахил дійсно не може вплинути на випадковий перехоплення. Однак він все ще дозволяє кожному рівню групуючого фактора ідентифікувати окремо для кожного рівня умови.

Тим не менш, мій тест все ще робить те, що хоче оригінальне запитання. Він перевіряє, чи різниця у відхиленнях між двома умовами дорівнює нулю. Якщо він дорівнює нулю, то дисперсії в обох умовах рівні. Іншими словами, лише якщо немає необхідності у випадковому нахилі, дисперсія в обох умовах однакова. Сподіваюся, це має сенс.


1
Ви використовуєте контрасти лікування ( contr.treatment), для яких умовою контролю є еталон (тобто для яких обчислюється випадковий перехоплення). Я пропоную використовувати параметризацію сумарних контрастів (тобто contr.sum), і перехоплення є великою середньою. Я відчуваю, що має сенс перевірити, чи є різниця нульовою, коли перехоплення є великим значенням замість умови управління (але написання цього зроблено дозволяє припустити, що це може бути відносно невдалим). Ви можете прочитати с. 24–26 від: singmann.org/download/publications/…
Генрік

1
Спасибі! Мої запитання дещо відрізняються: (1) Ваша відповідь, мабуть, означає, що моє запитання зводиться до "- випадковий нахил для умови, відмінної від 0". Це правда? (2) Якщо відповідь на (1) - "так", це говорить про іншу інтерпретацію випадкового нахилу для condition: це дозволяє випадковому перехопленню змінюватися в різних рівнях condition. Це правда?
Патрік С. Форшер

2
Мій 2 ¢: контрприклад @amoeba щодо запропонованої Генріком процедури є правильним. Генрік майже коректний, але він порівнює неправильну пару моделей. Модель порівняння , що питання - відповідь Патрік є порівняння між моделями Хенрік званих m_fullпроти m_full2b. Тобто: відхилення середніх умовних відповідей учасників в А проти В є неоднаковими, якщо випадкова кореляція перехоплення-нахилу не є нульовою - що важливо, під параметризацією контрастного кодування сума-нуль . Тестувати випадкову дисперсію нахилу не потрібно. Намагаюсь подумати, як це пояснити лаконічно ...
Джейк Вестфаль

2
Це насправді не належне пояснення, але вивчення моєї відповіді тут може пролити трохи світла на це питання. В основному, параметр кореляції регулює, чи регресійні лінії учасника "вентилятор направо" (позитивна корекція) або "вентилятор зліва" (від'ємна корр.). Будь-яке з них передбачає неоднакове розходження в умовно-середніх відповідях учасників. Кодування за сумою до нуля тоді гарантує, що ми шукаємо кореляцію у правильній точці на X
Джейк Вестфаль

2
Я розглядаю можливість розміщення відповіді з фотографіями, якщо зможу знайти час ...
Джейк Вестфалл

5

Ваша модель

m = lmer(sim_1 ~ condition + (condition | participant_id), data=d)

вже дозволяє різницю між суб'єктом в умові контролю відрізнятись від дисперсії між суб'єктами в експериментальному стані. Це можна зробити більш явним шляхом еквівалентної повторної параметризації:

m = lmer(sim_1 ~ 0 + condition + (0 + condition | participant_id), data=d)

Випадкова матриця коваріації тепер має більш просту інтерпретацію:

Random effects:
 Groups         Name                  Variance Std.Dev. Corr
 participant_id conditioncontrol      0.2464   0.4963       
                conditionexperimental 0.2074   0.4554   0.83

Ось ці дві дисперсії - це саме дві дисперсії, які вас цікавлять: дисперсія [попереду суб'єктів] умовно-середніх відгуків у контрольному стані та однакова в експериментальному стані. У імітованому наборі даних вони складають 0,25 та 0,21. Різниця задається методом

delta = as.data.frame(VarCorr(m))[1,4] - as.data.frame(VarCorr(m))[2,4]

і дорівнює 0,039. Ви хочете перевірити, чи він суттєво відрізняється від нуля.

EDIT: Я зрозумів, що тест на перестановку, який я описую нижче, є неправильним; він не працюватиме за призначенням, якщо засоби, що знаходяться в контрольно-експериментальному стані, не однакові (адже тоді спостереження не підлягають обміну під нулем). Можливо, буде кращою ідеєю завантажувати теми (або предмети / предмети у випадку "Бонус") та отримувати інтервал довіри для delta.

Я спробую виправити код нижче, щоб це зробити.


Оригінальна пропозиція на основі перестановки (неправильна)

Я часто виявляю, що можна врятувати себе багато клопоту, зробивши тест на перестановку. Дійсно, в цьому випадку налаштувати це дуже просто. Давайте перестанемо контрольно-експериментальні умови для кожного предмета окремо; то будь-яку різницю у відхиленнях слід усунути. Повторення цього багато разів призведе до нульового розподілу для відмінностей.

(Я не програмую на R; всі, будь ласка, сміливо переписуйте наступне в кращому стилі R.)

set.seed(42)
nrep = 100
v = matrix(nrow=nrep, ncol=1)
for (i in 1:nrep)
{
   dp = d
   for (s in unique(d$participant_id)){             
     if (rbinom(1,1,.5)==1){
       dp[p$participant_id==s & d$condition=='control',]$condition = 'experimental'
       dp[p$participant_id==s & d$condition=='experimental',]$condition = 'control'
     }
   }
  m <- lmer(sim_1 ~ 0 + condition + (0 + condition | participant_id), data=dp)
  v[i,] = as.data.frame(VarCorr(m))[1,4] - as.data.frame(VarCorr(m))[2,4]
}
pvalue = sum(abs(v) >= abs(delta)) / nrep

p=0,7nrep

Точно така ж логіка може бути застосована і у вашому бонусному випадку.


Супер цікаво, дякую! Мені доведеться більше подумати над тим, чому працює ваша репараметрізація, оскільки це, здається, є ключовим розумінням цієї відповіді.
Патрік С. Форшер

Як не дивно, значення перехоплення для кожної групи у вашій відповіді, схоже, відрізняються від значень у відповіді @MartijnWeterings.
Патрік С. Форшер

@ PatrickS.Forscher Це тому, що він, я думаю, генерує інший набір даних. Я можу використовувати sim_1 ~ 0 + condition + (0 + dummy(condition, "control") + dummy(condition, "experimental") | participant_id)формулювання і отримати той же результат, що і у моїй відповіді.
Амеба каже: Відновити Моніку

1
@ PatrickS.Forscher Ні, я використовував дані, згенеровані вашим кодом (з вашим насінням). Я встановив насіння в 42 лише під час тестування перестановки. Це Мартійн, який змінив набір даних, а не я.
амеба каже, що повернеться до Моніки

1
Ця пропозиція, безумовно, є здоровою. Як я думаю, ви вже переживали, встановлення перестановочних тестів для даних на рівні рівнів не зовсім однозначне. Подібний підхід, який було б трохи легше здійснити, був би параметричним завантаженням, що досить просто зробити з lme4, використовуючи метод simulate () встановлених lmer-об'єктів, тобто викликати імітацію (m) багато разів для нарощування завантажувальної програми розповсюдження. Просто ідея, з якою пограти.
Джейк Вестфалл

0

уijк=мк+αj+гij+еijк,гiN(0,Σ),еijкN(0,σ2)
αjjгi=(гi1,,гiJ)ij
уi1куi2кАБгi

Σ=[σА2σАБσАБσБ2]

σА2σБ2

Σ

Варіант перехоплення, що відповідає великій середній, є

σ12: =Var (велике значення)=Вар(12(А+Б))=14(Вар(А)+Вар(Б)+2Ков(А,Б)).

Варіантність контрасту є

σ22: =Var (контраст)=Вар(12(А-Б))=14(Вар(А)+Вар(Б)-2Ков(А,Б)).

І коваріація між перехопленням і контрастом є

σ12: =Ков(велике значення, контраст)=Ков(12(А+Б),12(А-Б))=14(Вар(А)-Вар(Б)).

Σ

Σ=[σ12+σ22+2σ12σ12-σ22σ12-σ22σ12+σ22-2σ12]=[σА2σАБσАБσБ2].

Σ

Σ=[σ12σ12σ12σ12]+[σ22-σ22-σ22σ22]+2[σ1200-σ12].

σ12

Σ=[σ12σ12σ12σ12]+[σ22-σ22-σ22σ22]=[σ12+σ22σ12-σ22σ12-σ22σ12+σ22]

яка, як походить @Jake Westfall дещо інакше, перевіряє гіпотезу рівних дисперсій, коли ми порівнюємо модель без цього параметра коваріації з моделлю, де параметр коваріації все ще включений / не встановлений на нуль.

Зокрема, введення іншого перекресленого фактора групування випадкових випадків (наприклад, стимулів) не змінює порівняння моделі, яке потрібно зробити, тобто anova(mod1, mod2)(необов'язково з аргументом, refit = FALSEколи ви використовуєте оцінку REML), де mod1і mod2визначається як @Jake Westfall.

σ12σ22

Σ=[σ12σ12σ12σ12]

який перевіряє гіпотезу про те, що дисперсії в двох умовах рівні та що вони рівні (позитивній) коваріації між двома умовами.


Коли ми маємо дві умови, модель, яка відповідає матриці коваріації з двома параметрами в симетричній структурі (позитивної) сполуки, також може бути записана як

# code snippet from Jake Westfall
d$contrast <- 2*(d$condition == 'experimental') - 1

# new model
mod3 <- lmer(sim_1 ~ contrast + (1 | participant_id) + (1 | contrast:participant_id), 
             data = d, REML = FALSE) 

або (використовуючи категоричну змінну / коефіцієнт condition)

mod4 <- lmer(sim_1 ~ condition + (1 | participant_id) + (1 | condition:participant_id), 
             data = d, REML = FALSE)

з

Σ=[σ12+σ22σ12σ12σ12+σ22]=[σ12σ12σ12σ12]+[σ2200σ22]

σ12σ22Σ

Нижче ми бачимо , що mod1, mod3і mod4дають еквівалентні припадки:

# code snippet from Jake Westfall
d$contrast <- 2*(d$condition == 'experimental') - 1

mod1 <- lmer(sim_1 ~ contrast + (contrast || participant_id),
             data = d, REML = FALSE)

mod2 <- lmer(sim_1 ~ contrast + (contrast | participant_id),
             data = d, REML = FALSE)

# new models 
mod3 <- lmer(sim_1 ~ contrast + (1 | participant_id) + (1 | contrast:participant_id), 
             data = d, REML = FALSE) 

mod4 <- lmer(sim_1 ~ condition + (1 | participant_id) + (1 | condition:participant_id), 
             data = d, REML = FALSE)

anova(mod3, mod1)
# Data: d
# Models:
# mod3: sim_1 ~ contrast + (1 | participant_id) + (1 | contrast:participant_id)
# mod1: sim_1 ~ contrast + ((1 | participant_id) + (0 + contrast | participant_id))
#      Df    AIC    BIC  logLik deviance Chisq Chi Df Pr(>Chisq)
# mod3  5 2396.9 2420.3 -1193.5   2386.9                        
# mod1  5 2396.9 2420.3 -1193.5   2386.9     0      0          1

anova(mod4, mod3)
# Data: d
# Models:
# mod4: sim_1 ~ condition + (1 | participant_id) + (1 | condition:participant_id)
# mod3: sim_1 ~ contrast + (1 | participant_id) + (1 | contrast:participant_id)
#      Df    AIC    BIC  logLik deviance Chisq Chi Df Pr(>Chisq)
# mod4  5 2396.9 2420.3 -1193.5   2386.9                        
# mod3  5 2396.9 2420.3 -1193.5   2386.9     0      0          1

Σ

Σ=[σ12σ12+σ12σ12+σ12σ12+σ22+2σ12]=[σ12σ12σ12σ12]+[000σ22]+[0σ12σ122σ12]

σ12Аσ22А-Бσ12

σ12σ22

mod4Σ

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.