Модель смешанных эффектов: сравнить компонент случайной дисперсии по уровням группирующей переменной


14

Предположим, у меня есть участников, каждый из которых дает ответ 20 раз, 10 в одном состоянии и 10 в другом. Я подхожу к линейной модели смешанных эффектов, сравнивая в каждом условии. Вот воспроизводимый пример, моделирующий эту ситуацию с использованием пакета в :NYYlme4R

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. Как бы я это сделал, и отличается ли этот процесс от процесса, описанного выше?


РЕДАКТИРОВАТЬ

Чтобы быть более точным в том, что я ищу, я хочу знать:

  1. Является ли вопрос, «являются ли условные средние ответы в каждом условии (т. Е. Случайными значениями перехвата в каждом условии), существенно отличающимися друг от друга, помимо того, что мы ожидаем из-за ошибки выборки», является четко определенным вопросом (т. Е. Является ли этот вопрос хотя бы теоретически отвечать)? Если нет, то почему нет?
  2. Если ответ на вопрос (1) положительный, как бы я на него ответил? Я бы предпочел Rреализацию, но я не привязан к lme4пакету - например, кажется, что OpenMxпакет имеет возможность проводить многоуровневый и многоуровневый анализ ( https: //openmx.ssri.psu. edu / openmx-features ), и это похоже на вопрос, который должен отвечать в рамках SEM.

1
@MarkWhite, я обновил вопрос в ответ на ваши комментарии. Я имею в виду, что я хочу сравнить стандартное отклонение перехватов участников, когда они дают ответы в контрольном условии, и когда они дают ответы в экспериментальном условии. Я хочу сделать это статистически, т
. Е.

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)

Визуальное объяснение / интуиция

Для того чтобы этот ответ имел смысл, вам необходимо иметь интуитивное понимание того, что различные значения параметра корреляции подразумевают для наблюдаемых данных. Рассмотрим (случайно меняющиеся) предметно-специфические регрессионные линии. По сути, параметр корреляции определяет, будут ли линии регрессии участника «разворачиваться вправо» (положительная корреляция) или «разворачиваться влево» (отрицательная корреляция) относительно точки X=0 , где X - это ваша независимая от контраста кодированная переменная. Любое из этих значений подразумевает неравномерную дисперсию условных средних ответов участников. Это показано ниже:

случайная корреляция

На этом графике мы игнорируем множественные наблюдения, которые мы имеем для каждого субъекта в каждом состоянии, и вместо этого просто наносим на график два случайных средних каждого субъекта с линией, соединяющей их, представляющей случайный наклон этого субъекта. (Это данные из 10 гипотетических субъектов, а не данные, опубликованные в ОП.)

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

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

Столбец в середине показывает, что происходит, когда случайные наклоны и случайные перехваты некоррелированы. Это означает, что линии регрессии разветвляются влево точно так же, как и разветвляются вправо относительно точки X=0 . Это подразумевает, что различия средств субъектов в этих двух условиях равны.

Здесь важно, чтобы мы использовали схему кодирования с суммированием до нуля, а не фиктивные коды (то есть, не устанавливая группы в X=0 против X=1 ). Это только по схеме кодирования контрастной , что у нас есть это соотношение , в котором отклонение равно тогда и только тогда , когда наклон отсекаемого корреляции равен 0. На рисунке ниже пытается построить что интуиция:

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

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

доказательство

Пусть yijk будет y i j k = α i + β i x k + e i j k , α i σ 2 α β i σ 2 β e i j k cov ( α i , β i ) = σ α βj м ответомi го субъекта при условииk . (У нас здесь только два условия, поэтомуk равно 1 или 2.) Тогда смешанную модель можно записать где- случайные перехваты субъектов и имеют дисперсию,- случайный наклони имеют дисперсию,- термин ошибки уровня наблюдения, а.

yijk=αi+βixk+eijk,
αiσα2βiσβ2eijkcov(αi,βi)=σαβ

Мы хотим показать, что

вар(αя+βяИкс1)знак равновар(αя+βяИкс2)σαβзнак равно0.

Начиная с левой стороны этого значения, мы имеем

var(αi+βix1)=var(αi+βix2)σα2+x12σβ2+2x1σαβ=σα2+x22σβ2+2x2σαβσβ2(x12x22)+2σαβ(x1x2)=0.

Контрастные коды с суммой в ноль подразумевают, что и . Затем мы можем еще больше уменьшить последнюю строку вышеупомянутого до что мы и хотели доказать. (Чтобы установить другое направление следствия, мы можем просто выполнить те же самые шаги в обратном порядке.)x1+x2=0x12=x22=x2

σβ2(x2x2)+2σαβ(x1+x1)=0σαβ=0,

Повторим еще раз: это показывает, что если независимая переменная закодирована с контрастом (суммой к нулю) , то дисперсии случайных средних субъектов в каждом условии равны тогда и только тогда, когда корреляция между случайными наклонами и случайными перехватами равна 0. Ключ Из этого следует, что проверка нулевой гипотезы о том, что , проверит нулевую гипотезу о равных дисперсиях, описываемых ОП.σαβ=0

Это НЕ работает, если независимая переменная, скажем, фиктивно закодирована. В частности, если мы вставим значения и в вышеприведенные уравнения, мы обнаружим, что x1=0x2=1

var(αi)=var(αi+βi)σαβ=σβ22.


Это уже потрясающий ответ, спасибо! Я думаю, что это ближе всего к ответу на мой вопрос, поэтому я принимаю его и даю вам награду (срок ее действия истекает), но я бы хотел увидеть алгебраическое оправдание, если у вас есть время и энергия для этого.
Патрик С. Форшер

1
@ PatrickS.Forscher Я только что добавил доказательство
Джейк Уэстфолл

1
@JakeWestfall В моем игрушечном примере испытуемые перевернули ответы в двух условиях. Если у субъекта есть ответ в условии A и в условии B, то каким будет значение BLUP случайного перехвата для этого субъекта, когда мы используем модель? Я думаю, что это может быть только 0. Если все объекты имеют BLUP, равные нулю, то дисперсия случайного перехвата также равна нулю. Так что эта модель вообще не подходит под этот игрушечный образец. В отличие от этого , модель определено выше , с помощью будет иметь два BLUPs для каждого субъекта, и они могут быть легко и . Я что-то здесь упускаю? aa(1 | subject)dummyaa
говорит амеба, восстанови Монику

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'но он применяется только к фиксированным эффектам.

  • Также в пакете, 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-тест, но вы этого хотите?).

На данный момент это заставляет меня задуматься, в чем же смысл этого (не очень распространенного) сравнения между дисперсиями. Интересно, не станет ли это слишком сложным? Почему разница между дисперсиями, а не соотношение между дисперсиями (что относится к классическому F-распределению)? Почему бы просто не сообщить доверительные интервалы? Мы должны сделать шаг назад и прояснить данные и историю, которую они должны рассказать, прежде чем идти по продвинутым путям, которые могут быть излишними и плохо связаны со статистическим вопросом и статистическими соображениями, которые фактически являются главной темой.

Интересно, нужно ли делать гораздо больше, чем просто указывать доверительные интервалы (которые на самом деле могут сказать гораздо больше, чем тест на гипотезу. Тест на гипотезу дает ответ «да, нет», но не дает информации о фактическом разбросе населения. При наличии достаточного количества данных вы можете сделать небольшую разницу, которая будет отмечена как существенная разница). Для более глубокого изучения вопроса (для каких-либо целей), как мне кажется, требуется более конкретный (узко определенный) исследовательский вопрос для того, чтобы научить математические механизмы делать надлежащие упрощения (даже когда точный расчет возможен или когда он может быть аппроксимирован симуляцией / начальной загрузкой, даже в некоторых случаях это требует некоторой соответствующей интерпретации). Сравните с точным тестом Фишера, чтобы точно решить (конкретный) вопрос (о таблицах непредвиденных обстоятельств),

Простой пример

Чтобы представить пример возможной простоты, я приведу ниже сравнение (путем моделирования) с простой оценкой разницы между двумя групповыми отклонениями на основе F-теста, выполненного путем сравнения отклонений в отдельных средних ответах и ​​выполненного путем сравнения На смешанной модели выведены дисперсии.

J

Y^я,J~N(μJ,σJ2+σε210)

σεσJJзнак равно{1,2}

Вы можете увидеть это в моделировании приведенного ниже графика, где помимо F-показателя, основанного на выборке, F-показатель рассчитывается на основе прогнозируемых отклонений (или сумм квадратов ошибок) из модели.

примерная разница в точности

σJзнак равно1знак равноσJзнак равно2знак равно0,5σεзнак равно1

Вы можете видеть, что есть некоторая разница. Эта разница может быть связана с тем, что линейная модель смешанных эффектов получает суммы квадратов ошибок (для случайного эффекта) другим способом. И эти квадратные условия ошибки (больше) не выражены как простое распределение хи-квадрат, но все же тесно связаны, и их можно аппроксимировать.

σJзнак равно1σJзнак равно2Y^я,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. Вопрос в том, отличается ли дисперсия между субъектами в A от дисперсии между субъектами в B.
говорит амеба Reinstate Monica

Это не завершает задачу, поставленную в заголовке «Сравнить компонент случайной дисперсии по уровням группирующей переменной». Я заметил, что в тексте вопроса была запутанная опечатка, которую я исправил. Я также попытался уточнить формулировку вопроса.
Патрик С. Форшер

Можно было бы ответить на вопрос, используя 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

Тем не менее, этот тест, скорее всего, консервативный . Например, часто задаваемые вопросы говорят:

Имейте в виду, что тесты нулевой гипотезы на основе LRT являются консервативными, когда нулевое значение (например, σ2 = 0) находится на границе допустимого пространства; в простейшем случае (единичная случайная дисперсия эффекта) значение p приблизительно в два раза больше, чем должно быть (Pinheiro and 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
Хенрик,

1
Благодарность! Мои вопросы немного отличаются, хотя: (1) Ваш ответ, по-видимому, подразумевает, что мой вопрос сводится к «является случайным наклоном для условия, отличного от 0». Это правда? (2) Если ответом на (1) является «да», это предлагает другую интерпретацию случайного наклона для condition: это позволяет случайному перехвату изменяться на разных уровнях condition. Это правда?
Патрик С. Форшер

2
Мой 2 ¢: контрпример @amoeba к предложенной Хенриком процедуре верен. Хенрик почти прав, но сравнивает не ту пару моделей. Сравнение моделей, которое отвечает на вопрос Патрика, - это сравнение моделей, которые Хенрик назвал « m_fullпротив» m_full2b. То есть: отклонения условных средних ответов участников в A и B неравны, если случайная корреляция между точками пересечения и наклона не равна нулю - что важно, при параметризации кодирования с суммированием до нуля . Проверка случайной дисперсии наклона не требуется. Пытаясь подумать, как объяснить это лаконично ...
Джейк Уэстфолл,

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. Вы хотите проверить, значительно ли оно отличается от нуля.

РЕДАКТИРОВАТЬ: я понял, что тест перестановки, который я описываю ниже, является неправильным; он не будет работать должным образом, если средства в контрольном / экспериментальном состоянии не совпадают (потому что тогда наблюдения не подлежат обмену при нулевом). Может быть, лучше начать загрузку предметов (или предметов / предметов в бонусном случае) и получить доверительный интервал для 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

пзнак равно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, т.е. много раз вызывать simulate (m) для создания начальной загрузки распределение. Просто идея поиграть.
Джейк Уэстфолл

0

YяJКзнак равноμ+αJ+dяJ+еяJК,dя~N(0,Σ),еяJК~N(0,σ2)
αJJи состояние dязнак равно(dя1,...,dяJ) случайный вектор (некоторые называют его векторным случайным эффектом, я думаю) для яУчастник Jсостояние
В вашем примере у нас есть два условияYя1К и Yя2К который я обозначу как A и Вв дальнейшем. Таким образом, ковариационная матрица двумерного случайного вектораdя имеет общий вид

Σзнак равно[σA2σAВσAВσВ2]

с неотрицательным σA2 и σВ2,

Давайте сначала посмотрим, как повторно параметризованная версия Σ выглядит, когда мы используем контрасты суммы.

Дисперсия точки пересечения, которая соответствует большому среднему значению, равна

σ12знак равноВар (великое среднее)знак равноVar(12(A+В))знак равно14(Var(A)+Var(В)+2Cov(A,В)),

Дисперсия контраста

σ22знак равноВар (контраст)знак равноVar(12(A-В))знак равно14(Var(A)+Var(В)-2Cov(A,В)),

И ковариация между перехватом и контрастом

σ12знак равноCov(великое среднее, контраст)знак равноCov(12(A+В),12(A-В))знак равно14(Var(A)-Var(В)),

Таким образом, повторно параметризованный Σ является

Σзнак равно[σ12+σ22+2σ12σ12-σ22σ12-σ22σ12+σ22-2σ12]знак равно[σA2σAВσAВσВ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 (что предлагает @Henrik) приводит к

Σзнак равно[σ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

С контрастами лечения (по умолчанию в R ) повторно параметризованныйΣ является

Σзнак равно[σ12σ12+σ12σ12+σ12σ12+σ22+2σ12]знак равно[σ12σ12σ12σ12]+[000σ22]+[0σ12σ122σ12]

где σ12 параметр дисперсии для перехвата (условие A), σ22 параметр дисперсии для контраста (A-В), и σ12 соответствующий параметр ковариации.

Мы можем видеть, что ни настройка σ12 в ноль, ни установка σ22 к нулю проверяет (только) гипотезу равных дисперсий.

Однако, как показано выше, мы все еще можем использовать mod4для проверки гипотезы, поскольку изменение контрастов не влияет на параметризациюΣ для этой модели.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.