glmer () сходится с одним уровнем фактора в качестве базового, но не может сходиться при изменении базового уровня на другой уровень

Предпосылки: я подбираю смешанную логистическую модель с двумя фиксированными эффектами и двумя перекрещенными случайными эффектами. Две переменные, составляющие фиксированные эффекты, являются двоичными категориальными переменными (т. Е. Числовых предикторов нет).

Данные взяты с айтрекера, и каждый объект имеет тысячи нулей и единиц с течением времени. Одна из моделей, которую я хотел рассмотреть, - это логистическая смешанная модель, учитывающая корреляцию нулей и единиц внутри человека и внутри изображения, на которое человек смотрит в данный момент времени (в течение всего эксперимента они смотрят на шесть разных изображений, из 12 возможных). (Кстати, я планирую также проанализировать эти данные с помощью анализа кривой роста, но мне также было любопытно попробовать это, временно игнорируя динамику времени.)

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

Затем я хотел подогнать модель, параметризованную с одним из предикторов на его другом уровне базовой линии, чтобы получить связанное значение p (см., Например: https://stats.stackexchange.com/questions/449723/calculating-simple-effects-from-standard-regression-output). Я использовал relevel() для этого, а затем снова установил ту же самую модель. Однако на этот раз было предупреждение о сближении. Я попробовал еще раз (почему бы и нет), и снова ничего не вышло. Я не могу придумать причину, по которой базовый уровень должен влиять на конвергенцию (или ее отсутствие).

Структура данных: вот небольшой фиктивный набор данных, показывающий общую структуру данных (значительно уменьшенную по сравнению с фактическим набором данных, который имеет ~ 5000 наблюдений (нулей и единиц) на человека. на изображение, а общая длина составляет более 1 миллиона строк (в фактическом наборе данных ~ 60 объектов)). Обратите внимание: Time_stamp не входит в модель, так как я не рассматриваю временной ход в этом анализе. AOI в AOI_look обозначает область интереса, общий термин в данных отслеживания взгляда.

structure(list(Subject = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), Image = c("A", "A", 
"A", "B", "B", "B", "C", "C", "C", "D", "D", "D", "E", "E", "E", 
"F", "F", "F", "G", "G", "G", "E", "E", "E", "D", "D", "D", "A", 
"A", "A", "J", "J", "J", "L", "L", "L"), Time_stamp = c(0L, 1L, 
10L, 0L, 8L, 16L, 0L, 7L, 16L, 0L, 1L, 10L, 0L, 8L, 16L, 0L, 
7L, 16L, 0L, 8L, 16L, 0L, 7L, 16L, 0L, 1L, 9L, 0L, 8L, 16L, 0L, 
8L, 16L, 0L, 1L, 9L), Intervention = c("Pre", "Pre", "Pre", "Pre", 
"Pre", "Pre", "Pre", "Pre", "Pre", "Post", "Post", "Post", "Post", 
"Post", "Post", "Post", "Post", "Post", "Pre", "Pre", "Pre", 
"Pre", "Pre", "Pre", "Pre", "Pre", "Pre", "Post", "Post", "Post", 
"Post", "Post", "Post", "Post", "Post", "Post"), Sex = c("Female", 
"Female", "Female", "Female", "Female", "Female", "Female", "Female", 
"Female", "Female", "Female", "Female", "Female", "Female", "Female", 
"Female", "Female", "Female", "Male", "Male", "Male", "Male", 
"Male", "Male", "Male", "Male", "Male", "Male", "Male", "Male", 
"Male", "Male", "Male", "Male", "Male", "Male"), AOI_look = c(1L, 
1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 
1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 
1L, 1L, 1L)), class = "data.frame", row.names = c(NA, -36L))

Модель 1: Вмешательство = Публикация в качестве базового показателя: предупреждение о конвергенции отсутствует

logit_model01 <- glmer(AOI_look ~ factor(Sex)*factor(Intervention) + 
                                  (1 | Image) + 
                                  (1 | Subject), 
                       data = data01, 
                       family="binomial")

Выход модели 1 (конвергентный):

summary(logit_model01)

Generalized linear mixed model fit by maximum likelihood (Laplace Approximation) [glmerMod]
Family: binomial  ( logit )
Formula: AOI_look ~ factor(Sex) * factor(Intervention) + (1 | Image) +  
         (1 | Subject)
Data: data01

      AIC       BIC    logLik  deviance  df.resid 
1519023.6 1519095.5 -759505.8 1519011.6   1182007 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.6200 -0.9733  0.5504  0.8444  2.2317 

Random effects:
 Groups   Name        Variance Std.Dev.
 Subject  (Intercept) 0.2320   0.4816  
 Image    (Intercept) 0.1318   0.3631  
Number of obs: 1182013, groups:  Subject, 59; Image, 9

Fixed effects:
                                          Estimate Std. Error z value Pr(>|z|)    
(Intercept)                               0.052133   0.036172   1.441     0.15    
factor(Sex)Male                           0.187736   0.039967   4.697 2.64e-06 ***
factor(Intervention)Pre                   0.257262   0.006136  41.924  < 2e-16 ***
factor(Sex)Male:factor(Intervention)Pre  -0.220240   0.007932 -27.766  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
              (Intr) fc(S)M fc(I)P
fctr(Sex)M    -0.006               
factr(Int)Pr   0.011  0.012        
f(S)M:(I)P    -0.013 -0.018  -0.747

Модель 2: то же, что и Модель 1, но Вмешательство = Предварительно было установлено на базовое значение перед запуском: получить предупреждение о конвергенции:

logit_model02 <- glmer(AOI_look ~ factor(Sex)*factor(Intervention) + 
                                  (1 | Image) + 
                                  (1 | Subject), 
                       data = data01, 
                       family="binomial")

Предупреждение о сходимости:

Warning message:
In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.00210935 (tol = 0.002, component 1)

Хотя было предупреждение, я все еще могу получить результат для Модели 2 с summary():

summary(logit_model02)

Generalized linear mixed model fit by maximum likelihood (Laplace Approximation) [glmerMod]
Family: binomial  ( logit )
Formula: AOI_look ~ factor(Sex) * factor(Intervention) + (1 | Image) +  
         (1 | Subject)
Data: data01

      AIC       BIC    logLik  deviance  df.resid 
1519023.6 1519095.5 -759505.8 1519011.6   1182007 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.6200 -0.9733  0.5504  0.8444  2.2317 

Random effects:
 Groups    Name        Variance Std.Dev.
 Subject   (Intercept) 0.2320   0.4816  
 Image     (Intercept) 0.1318   0.3631  
Number of obs: 1182013, groups:  Subject, 59; Image, 9

Fixed effects:
                                          Estimate Std. Error z value Pr(>|z|)    
(Intercept)                               0.309400   0.038106   8.120 4.68e-16 ***
factor(Sex)Male                          -0.032522   0.042520  -0.765    0.444    
factor(Intervention)Post                 -0.257262   0.006158 -41.774  < 2e-16 ***
factor(Sex)Male:factor(Intervention)Post  0.220234   0.007926  27.787  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Correlation of Fixed Effects:
              (Intr) fc(S)M fc(I)P
fctr(Sex)M    -0.107               
fctr(Int)Pst   0.009  0.024        
f(S)M:(I)P    -0.013 -0.025  -0.748
convergence code: 0
Model failed to converge with max|grad| = 0.00210935 (tol = 0.002, component 1)

Для ясности / полноты добавлена ​​информация, найденная в комментариях под ответом Бена Болкера:

Модель 3: то же, что и Модель 1, но для агрегированных данных (нули и единицы суммированы в успехи и неудачи по Тема и Изображение < / em> комбинация):

Результаты не такие же, как у Модели 1 (соответствие неагрегированным данным 0/1), хотя в Модели 1 не было предупреждения о конвергенции. А именно, все точечные оценки аналогичны, но не для всех SE: SE для взаимодействия и вмешательства (внутри субъектов) аналогичны, но для пола (между -subjects) и перехват заметно отличаются:

logit_model03 <- glmer(cbind(Successes, Failures) ~ factor(Sex)*factor(Intervention) +
                                                    (1 | Image) + 
                                                    (1 | Subject), 
                       data = data01_agg, 
                       family="binomial")

summary(logit_model03)

Fixed effects:
                                         Estimate Std. Error z value Pr(>|z|)    
(Intercept)                              0.052151   0.150564   0.346    0.729    
factor(Sex)Male                          0.187734   0.125563   1.495    0.135    
factor(Intervention)Pre                  0.257261   0.006227  41.314   <2e-16 ***
factor(Sex)Male:factor(Intervention)Pre -0.220239   0.008061 -27.322   <2e-16 ***

Чтобы увидеть, может ли явный размер необработанного набора данных (более 1,67 миллиона строк) вызывать проблему, я взял случайную выборку из 15000 наблюдений из моего исходного набора данных и обновил модель, используя как неагрегированные (0/1), так и агрегированные (успех, неудача) данные. (Я сделал это для обоих уровней базового уровня для Вмешательства, но я просто показываю это для Вмешательства = Опубликовать здесь.):

Модель 4: случайная выборка из 15000 наблюдений. из фактического набора данных, неагрегированный (0/1) результат, вмешательство = Опубликовать как базовый:

logit_model04 <- glmer(AOI_look ~ factor(Sex)*factor(Intervention) + 
                                  (1 | Image) + 
                                  (1 | Subject), 
                       data = smaller_raw_data, 
                       family="binomial")

summary(logit_model04)

Fixed effects:
                                        Estimate Std. Error z value Pr(>|z|)    
(Intercept)                             -0.03212    0.15564  -0.206 0.836505    
factor(Sex)Male                          0.28384    0.14121   2.010 0.044429 *  
factor(Intervention)Pre                  0.22727    0.06449   3.524 0.000425 ***
factor(Sex)Male:factor(Intervention)Pre -0.25061    0.08410  -2.980 0.002884 ** 

Модель 5: случайная выборка из 15000 наблюдений. из фактического набора данных, агрегированный результат (успех, неудача), вмешательство = Опубликовать как базовый:

logit_model05 <- glmer(cbind(Successes, Failures) ~ factor(Sex)*factor(Intervention) + 
                                                    (1 | Image) + 
                                                    (1 | Subject), 
                       data = smaller_agg_data, 
                       family="binomial")

summary(logit_model05)

Fixed effects:
                                        Estimate Std. Error z value Pr(>|z|)    
(Intercept)                             -0.03211    0.15569  -0.206 0.836582    
factor(Sex)Male                          0.28383    0.14126   2.009 0.044500 *  
factor(Intervention)Pre                  0.22727    0.06450   3.524 0.000425 ***
factor(Sex)Male:factor(Intervention)Pre -0.25061    0.08412  -2.979 0.002890 ** 

Как видите, точечные оценки и SE для фиксированных эффектов для моделей 4 и 5 одинаковы, по крайней мере, до пятого знака после запятой. Я также повторил это для Intervention = Pre as baseline, и результаты эквивалентны в отношении их сходства в неагрегированных и агрегированных моделях (как я и ожидал).


Таким образом, использование неагрегированных или агрегированных данных не должно иметь значения в теории, по крайней мере, для набора данных разумного размера (т. Е. Не слишком большого). Это заставляет меня задаться вопросом, есть ли нестабильность в моделях, когда набор данных становится слишком большим. Согласно ?lme4::convergence, есть основания полагать, что это могло быть так: «Исследовательский анализ показывает, что (1) наивная оценка Гессе может потерпеть неудачу для больших наборов данных (количество наблюдений больше, чем приблизительно 1e5)». Так что, возможно, это корень того, что я наблюдал в моделях 1-3 выше.

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


person Meg    schedule 10.08.2020    source источник
comment
1/2 @Ben Bolker - это напрямую связано с вопросом, на который вы только что ответили (stackoverflow.com/questions/63360751/). На самом деле я написал этот вопрос, чтобы поддержать этот, на случай, если это будет проблема с тем, как я закодировал модель. Поскольку, отвечая на мой другой вопрос, вы считали, что код, который я использовал, был разумным, мне интересно, есть ли у вас какие-либо представления о том, почему это происходит.   -  person Meg    schedule 12.08.2020
comment
2/2 Я попробую добавить (1|Subject:Trial) в качестве случайного эффекта и посмотрю, решит ли это проблему. Обратите внимание, что этот тот же сценарий, что и stackoverflow.com/questions/63360751/, я только что упомянул, что это глаз данные отслеживания, поэтому результат называется AOI_look вместо Binary_outcome. В очередной раз благодарим за помощь. (Кроме того, следует ли перенести этот вопрос и на CrossValidated, или здесь все в порядке? Для меня этот вопрос более четко касался кодирования.)   -  person Meg    schedule 12.08.2020
comment
Думаю, я могу что-то понять: когда я запускаю модель на агрегированных, а не на необработанных данных, я получаю очень похожие оценки параметров (такие же до 5-го или 6-го десятичного знака) для модели выше, которая сходилась (первая, с Post в качестве базовой линии. ), но значение p для Sex сильно отличается (0,135 против 2,64e-06, приведенного выше), как и для члена перехвата. Это заставляет меня задаться вопросом, не истекает ли тайм-аут lmer () (или, в последней модели выше, проблема сходимости) из-за размера необработанных данных (~ 1,6 миллиона строк) и, таким образом, дает неточный вывод. Работаем над этим ... Отчитаюсь.   -  person Meg    schedule 13.08.2020


Ответы (2)


не воспринимайте проверку сходимости как главное и конечное

Хотя, безусловно, теоретически верно, что такие корректировки, как изменение порядка случайных членов, коэффициенты выравнивания, центрирование / масштабирование и т. Д., Вообще не должны влиять на результат подгонки модели, они действительно изменяют линейный алгебры, и поэтому диагностика модели может оказаться выше порогового значения, при котором она сообщает о несовпадении. Главное помнить, что предупреждения о сходимости модели следует воспринимать с небольшой долей скептицизма: они не обязательно означают, что с моделью что-то не так, просто вам следует дважды: проверить. Фактически, если вы внимательно просмотрели итоговый результат (например, сравнивая логарифмическую вероятность и дисперсию случайного эффекта, которые должны быть почти идентичными) и прогнозы (то же самое), то вы можете сделать вывод, что предупреждение о конвергенции на самом деле не имеет значения. . Вот мой код для проверки некоторых простых прогнозов:

cc1 <- c(0.052133, 0.187736, 0.257262, -0.220240)
cc2 <- c(0.309400,-0.032522,-0.257262,0.220234)

df2 <- expand.grid(Sex=c("Female","Male"),Intervention=c("Pre","Post"))
df1 <- transform(df2,Intervention=relevel(Intervention,"Post"))


X1 <- model.matrix(~Sex*Intervention, data=df1)
X2 <- model.matrix(~Sex*Intervention, data=df2)
cbind(drop(X1 %*% cc1), drop(X2 %*% cc2))
##       [,1]     [,2]
## 1 0.309395 0.309400
## 2 0.276891 0.276878
## 3 0.052133 0.052138
## 4 0.239869 0.239850

all.equal(drop(X1 %*% cc1), drop(X2 %*% cc2))
## [1] "Mean relative difference: 4.78203e-05"

Они различаются на уровне примерно 4e-05, поэтому, если вы не ожидаете и не нуждаетесь в прогнозах с таким уровнем точности, я бы не беспокоился об этом. (Учитывая то, что вы сказали в комментариях ниже о различиях в расчетах стандартной ошибки, я мог бы также попробовать merTools::predictInterval() поискать различия в неопределенности.) См. Также: ?lme4::convergence, ?lme4::troubleshooting, ?lme4::allFit

не утруждайте себя повторной регулировкой и переоборудованием

Поскольку все настройки уровней могут быть выполнены с помощью простой линейной алгебры, существует множество удобных последующих инструментов, которые позволяют проводить сравнения, подобные тому, который вы хотите, без повторного выравнивания и переоборудования. Это намного быстрее и удобнее! Я бы начал с пакета emmeans; пакет effects также может быть полезен.

person Ben Bolker    schedule 13.08.2020
comment
Комментарии не подлежат расширенному обсуждению; этот разговор был перешел в чат. - person Samuel Liew♦; 15.08.2020

Изменение параметров одного фактора для получения другого эталонного уровня не должно иметь никакого значения ни для сходимости модели, ни для интерпретации ее результатов.

Если сначала разобраться с результатами, Intervention - это двухуровневый фактор. Следовательно, эффект или reorder его изменение так, что Pre является опорным уровнем (очевидно, что это разумная вещь), заключается в изменении знака соответствующей оценки параметра. (Итак, в ваших результатах 0.257262 меняется на -0.257262.) Больше ничего не должно измениться: p-значения, стандартные ошибки и т. Д. Остаются прежними. Не только для вмешательства, но и для любого другого термина в модели.

Тот факт, что не только вещи меняются, но и модель не может сходиться, говорит о том, что с вашей моделью что-то не так.

logit_model <- glmer(AOI_look ~ factor(Sex)*factor(Intervention) + 
                                (1 | Image) + 
                                (1 | Subject)

Думаю, здесь может быть несколько проблем. Разве Intervention не должен быть эффектом внутри субъекта? (Вы не можете рандомизировать порядок вмешательства внутри субъекта.) Разве Image не должно быть промежуточным эффектом? (Изображение А, показанное пациенту 1, является таким же изображением А, показанным пациенту 2.) Также может быть случай для включения эффекта внутри пациента Image.

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

person Limey    schedule 10.08.2020
comment
1/9 @Limey Спасибо за ваши комментарии. Обратите внимание, что я предполагал, что это правильная модель не потому, что она сходится, а потому, что я долгое время думал о каждой переменной, которую следует включить, учитывал два уровня корреляции (субъект и исследование), и модель давала разумные оценки и p-значения, основанные на том, что данные показали мне на графиках (которые я обсуждаю во многих комментариях ниже, поскольку ответ длинный). - person Meg; 10.08.2020
comment
2/9 Вы правы насчет Вмешательства - это внутри предмета. Я не знал / не знал, как дополнительно учесть это, кроме как указав случайный эффект для участника и испытания. Есть ли у вас предложение? - person Meg; 10.08.2020
comment
3/9 И да, след A всегда является испытанием A, например, но само испытание не является интересующей переменной, поэтому я не использовал его как фиксированный эффект, а только случайный. Я просто хотел учесть тот факт, что когда данный участник смотрит на определенное изображение, он или она могут быть более или менее заинтересованы в этом изображении, чем другое, поэтому может быть дополнительная кластерная корреляция из-за изображения, помимо корреляции. уже присутствует в человеке. Дополнительные мысли о том, как лучше / соответствующим образом смоделировать / учесть это? - person Meg; 10.08.2020
comment
4/9 Вот оставшаяся часть моего ответа на то, что вы написали, которое продолжает охватывать несколько комментариев: Изменение базовой линии влияет больше, чем на знак оценки для этого параметра, из-за взаимодействия. Как вы говорите, для «Вмешательства» величина останется прежней, и изменится только знак. Однако все другие оценки меняются (с этой целью я обновил свой пост, чтобы показать результат репараметризованной модели с Intervention = Pre в качестве базовой линии). Это важно, потому что я хочу сравнить оценочные ln (шансы) для различных комбинаций двух бинарных предикторов. - person Meg; 10.08.2020
comment
5/9 Вот почему я даже хотел изменить базовый уровень - хотя я могу получить все оценки ln (шансов), которые мне когда-либо понадобились, от первой модели с алгеброй, мне нужно значение p для пола как до, так и после вмешательства. Например, с первой параметризацией («Пост» в качестве базовой линии) я могу сделать следующий вывод: для Intervention = Post (baseline) существует значительная разница в ln (шансы) между мужчинами и женщинами, согласно p -значение, связанное с полом (2.64e-06 ‹0,0001). - person Meg; 10.08.2020
comment
6/9 Теперь я хочу изменить базовый уровень вмешательства на «Pre», чтобы я мог получить эквивалентное связанное значение p между мужчинами и женщинами, но для предварительного -вмешательства. Графики моих данных говорят, что не должно быть значительной разницы между полами до вмешательства, и - даже если я получил эту ошибку конвергенции - так же и в результате summary () модели с «Pre» в качестве базового уровня (p = 0,444 для секса; опять же, я обновил свой пост, чтобы показать этот результат). - person Meg; 10.08.2020
comment
7/9 Кроме того, оценка ln (шансов), которую я получаю из второй модели для сравнения мужчин и женщин, когда Intervention = Pre (базовый уровень), совпадает с тем, что я вычисляю из моей первой модели с использованием алгебры. А именно, во второй модели оценка Пола (которая представляет собой разницу в ln (шансы) между мужчинами и женщинами при сохранении константы вмешательства на уровне «Pre» (базовый уровень)) составляет -0,032522. - person Meg; 10.08.2020
comment
8/9 Это также можно найти с помощью первой модели: для предварительного вмешательства, сравнивая мужчин и женщин, теперь вступает в игру взаимодействие: beta1 ^ + beta3 ^ = 0,187736 + (-0,220240) = -0,032504 (при значениях выключенных только из-за ошибки округления). - person Meg; 10.08.2020
comment
9/9 Таким образом, даже с неудачной сходимостью во второй параметризации, вывод, который дает summary () для обеих моделей, является разумным / тем, что я ожидал на основе графиков моих данных, и поэтому я хотел бы думать, что я нахожусь на правильный трек, но может потребоваться указать случайные эффекты немного по-другому, например - person Meg; 10.08.2020
comment
Вы можете сделать все это намного проще с пакетом emmeans ... - person Ben Bolker; 14.08.2020
comment
Так что пакет emmeans довольно хорош;) Мне все еще нравится заниматься алгеброй для различных моделей, ха-ха. Но emmeans определенно более эффективен. Спасибо за предложение. - person Meg; 15.08.2020