единственное соответствие в одной простой модели, но не в другой, используя lmer R - PullRequest
0 голосов
/ 15 января 2020

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

library(lme4)
summary(m0_ev_io <- lmer(exer_vig ~ 1 + (1 | team_num) + (1 | dept_client), data = clean_data_0))


Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: exer_vig ~ 1 + (1 | team_num) + (1 | dept_client)
   Data: clean_data_0

REML criterion at convergence: 527.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.6783 -0.6071 -0.2324  0.4233  2.1587 

Random effects:
 Groups      Name        Variance Std.Dev.
 team_num    (Intercept) 0.16687  0.4085  
 dept_client (Intercept) 0.03047  0.1746  
 Residual                1.14821  1.0715  
Number of obs: 169, groups:  team_num, 58; dept_client, 33

Fixed effects:
            Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)   2.6743     0.1081 14.6284   24.74  2.4e-13 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

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


summary(m0_el_io <- lmer(exer_lite ~ 1 + (1 | team_num) + (1 | dept_client), data = clean_data_0))


boundary (singular) fit: see ?isSingular
Linear mixed model fit by REML. t-tests use Satterthwaite's method [
lmerModLmerTest]
Formula: exer_lite ~ 1 + (1 | team_num) + (1 | dept_client)
   Data: clean_data_0

REML criterion at convergence: 542

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.6403 -0.5925 -0.3208  0.4440  2.0776 

Random effects:
 Groups      Name        Variance Std.Dev.
 team_num    (Intercept) 0.1471   0.3835  
 dept_client (Intercept) 0.0000   0.0000  
 Residual                1.3027   1.1414  
Number of obs: 169, groups:  team_num, 58; dept_client, 33

Fixed effects:
            Estimate Std. Error      df t value Pr(>|t|)    
(Intercept)   2.7160     0.1037 42.5453    26.2   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
convergence code: 0
boundary (singular) fit: see ?isSingular 

За исключением зависимой переменной, данные одинаковы, поэтому я очень смущен, почему это так. Я уверен, что это не из-за переоснащения (как в этой теме ( Как справиться с единичным подгонкой в ​​линейной смешанной модели (lme4)? )), потому что, даже когда модель энергичных упражнений содержит гораздо больше переменных, это никогда не дает особого предупреждения.

Есть ли у вас какие-либо идеи о том, почему это происходит и как я могу исправить эту проблему, не удаляя членство в отделе? Я пробовал рекомендации с других сайтов, включая поворот REML = FALSE и изменение оптимизатора [control = lmerControl (optimizer = 'optimx', optCtrl = list (method = 'L-BFGS-B')], но ничего не помогло.

Спасибо!

РЕДАКТИРОВАТЬ: Вот пример данных. Примечание: team_num и dept_client являются факторами.

library(tidyverse)
clean_data_0 <- tibble(
  exer_lite = c(5, 4, 4, 5, 2, 4, 3, 1, 2, 2, 5,3, 4, 5, 2, 2, 2, 5, 5, 2, 3, 3, 1, 2, 5),
  exer_vig = c(4, 2, 4, 1, 2, 2, 3, 1, 2, 2, 5, 3, 3, 5, 2, 2, 3, 5, 5, 2, 3, 2, 1, 3, 5),
  dept_client = factor(c(17, 17, 45, 45, 80, 100, 90, 14, 2, 80, 100, 90, 121, 121, 121, 2, 90, 90, 90, 2, 100, 14, 14, 76, 76)),
  team_num = factor(c(509, 509, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 13, 13, 14, 14)),
  id = c(1:25))
...