Ошибки в glmer: Ошибка в eval(expr, envir, enclos): не удается найти допустимые начальные › значения: укажите некоторые

Я пытаюсь запустить модель glmer:

Это модель, которую я собираюсь запустить

md$count<-as.integer(md$count)
Model1 <- glmer (count ~ distance_nest_tag + ep_nest  + (1|tag_ID), 
              family = gaussian (link="log"),           
              data=md )
  • count — целое число от 0 до 19, которое указывает количество посещений.
  • distance_nest_tag - непрерывная переменная в метрах
  • ep_nest - это двоичные переменные (1, 0)

а условия случайного эффекта - это просто количество гнезд и особей.

Я также пробовал это

Model1 <- glmer (count ~ distance_nest_tag + ep_nest + (1|tag_ID), 
              family = gaussian (link="log"),
               start = coef (lm(md$count ~ md$distance_nest_tag + md$ep_nest)),                 
              data=md )

Но я всегда получаю это

> Error in eval(expr, envir, enclos) :    cannot find valid starting
> values: please specify some

Какие-нибудь мысли???

dput



       Generalized linear mixed model fit by maximum likelihood (Laplace Approximation) ['glmerMod']
 Family: binomial  ( logit )
Formula: EP0 ~ counts + dist_mean_hour + nest_reproductive_period + X.vistors +  
    (1 | nest_ID) + (1 | tag_ring_ID) + (1 | distance_nesttag_nest) +      (1 | date)
   Data: only_visits_encounternet
     AIC      BIC   logLik deviance df.resid 
 34.7643  81.1238  -7.3822  14.7643      752 
Random effects:
 Groups                Name        Std.Dev.
 date                  (Intercept)  8.507  
 distance_nesttag_nest (Intercept) 68.095  
 tag_ring_ID           (Intercept) 64.491  
 nest_ID               (Intercept)  2.251  
Number of obs: 762, groups:  date, 96; distance_nesttag_nest, 35; tag_ring_ID, 20; nest_ID, 19
Fixed Effects:
              (Intercept)                     counts             dist_mean_hour  
                -13.08952                   -1.80786                   -0.04528  
nest_reproductive_periodI  nest_reproductive_periodP                  X.vistors  
                 -4.04944                   -1.56264                    0.06601  
convergence code 0; 1 optimizer warnings; 0 lme4 warnings 
> dput(R)
structure(list(nest_ID = c(6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L), nest_reproductive_period = structure(c(3L, 
1L, 2L, 3L, 1L, 2L, 3L, 1L), .Label = c("F", "I", "P"), class = "factor"), 
    tag_ID = c(23L, 23L, 23L, 4L, 4L, 4L, 5L, 5L), ring_tag_id = structure(c(3L, 
    3L, 3L, 1L, 1L, 1L, 2L, 2L), .Label = c("AU34180", "AU70442", 
    "BD12273"), class = "factor"), age_tag = c(5L, 5L, 5L, 4L, 
    4L, 4L, NA, NA), p3_tag = c(590L, 590L, 590L, 585L, 585L, 
    585L, 590L, 590L), weight_tag = c(1770L, 1770L, 1770L, 1843L, 
    1843L, 1843L, 1856L, 1856L), next_box_tag = c(42L, 42L, 42L, 
    56L, 56L, 56L, 0L, 0L), dist_mean = c(NA, NA, NA, NA, NA, 
    NA, NA, NA), count = c(3L, 2L, 1L, 0L, 0L, 0L, 0L, 0L), comb = structure(c(2L, 
    2L, 2L, 3L, 3L, 3L, 1L, 1L), .Label = c("6_0", "6_42", "6_56"
    ), class = "factor"), distance_nest_tag = c(0.189813484, 
    0.189813484, 0.189813484, 0.649465717, 0.649465717, 0.649465717, 
    NA, NA), epp_male_comb = c(NA, NA, NA, NA, NA, NA, NA, NA
    ), epp_male = c(NA, NA, NA, NA, NA, NA, NA, NA), nest_epmale = c(NA, 
    NA, NA, NA, NA, NA, NA, NA), neighbour = c(0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L), ep_nest = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L), roost_nextbox_tag = c(8L, 8L, 8L, 335L, 335L, 335L, 
    332L, 332L), nestroost = structure(c(3L, 3L, 3L, 2L, 2L, 
    2L, 1L, 1L), .Label = c("6_332", "6_335", "6_8"), class = "factor"), 
    neighbours_roost = c(1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L)), .Names = c("nest_ID", 
"nest_reproductive_period", "tag_ID", "ring_tag_id", "age_tag", 
"p3_tag", "weight_tag", "next_box_tag", "dist_mean", "count", 
"comb", "distance_nest_tag", "epp_male_comb", "epp_male", "nest_epmale", 
"neighbour", "ep_nest", "roost_nextbox_tag", "nestroost", "neighbours_roost"
), class = "data.frame", row.names = c(NA, -8L))

Изменить

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

dat = structure(list(y = c(0, 13.0988072077744, 1.53920266020577, 12.1207857178524, 
33.9470080593601, 0, 0, 3.46572339150589, 1.05917038733605, 14.295924854232, 
11.2930736701237, 8.1866351980716, 0.0106620794860646, 0.731016675010324, 
5.99548577982932, 0, 0, 3.15404516097624, 7.62275500199758, 0.604545763926581, 
0, 2.37143378704786, 2.39386320579797, 0.800569675164297), x = c(0, 
0, 0, 0, 0, 0, 2.43684896701947, 0.808418724797666, 0.672910050840583, 
0, 0.763154948372394, 1.44573423753027, 0.96113385074772, 0, 
0.498556550480425, 2.43977373047965, 1.55665618954226, 0.88557694968069, 
4.12758995011915, 3.16827587767271, 2.55354765986558, 3.99502024875255, 
1.71053826174466, 3.59887218330055), tag = c(1, 1, 1, 1, 1, 1, 
2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5)), .Names = c("y", 
"x", "tag"), row.names = c(NA, -24L), class = "data.frame")

mod2 = glmer(y ~ x + (1|tag),
           data = dat, family = gaussian(link = log), 
           start = list(theta = 1, coef(lm(y ~ x, data = dat))))

person Marita Ruiz Miñano    schedule 13.07.2016    source источник
comment
имеет ли count нулевые значения?   -  person Ben Bolker    schedule 13.07.2016
comment
Да, идет от 0...   -  person Marita Ruiz Miñano    schedule 13.07.2016
comment
Пожалуйста, предоставьте данные, чтобы сделать этот пример воспроизводимым. stackoverflow.com/help/mcve Спасибо за только что сделанное вами обновление, но данные должны быть в воспроизводимом формате, таком как dput сделать его легко импортируемым в наши сеансы R, чтобы помочь нам помочь вам.   -  person Hack-R    schedule 13.07.2016
comment
Извините Hack-R сделано!   -  person Marita Ruiz Miñano    schedule 13.07.2016
comment
также, по-видимому, это не все ваши данные - было бы действительно полезно иметь все это (вам может потребоваться опубликовать ссылку на данные, а не сбрасывать их все на этой странице )   -  person Ben Bolker    schedule 13.07.2016
comment
Да, я ничего не хотел говорить, но проблема специфична для ваших данных, а данных так мало, что мы не можем воспроизвести ошибку. Я пытался смоделировать это, но больше строк действительно помогло бы. Вы можете использовать dput, чтобы нам было проще. Г-н Болкер может меня поправить, если я не прав, но я думаю, что даже 150 - 200 строк, скорее всего, будет достаточно. Вы можете поместить dput на pastebin.com и дать нам ссылку.   -  person Hack-R    schedule 13.07.2016
comment
Во всяком случае, я думаю, что проблема просто в использовании 0 со ссылкой на журнал, верно? @BenBolker не может ли она просто добавить небольшое раздражение, чтобы это сработало? Нравится .Machine$double.eps?   -  person Hack-R    schedule 13.07.2016
comment
сейчас занят... нужно вернуться к этому чуть позже   -  person Ben Bolker    schedule 13.07.2016
comment
Хорошо, я сделаю .. спасибо, я пытался разместить это здесь, но не получилось, я собираюсь сделать это как можно скорее, спасибо   -  person Marita Ruiz Miñano    schedule 13.07.2016
comment
pastebin.com/k0y5CSAu   -  person Marita Ruiz Miñano    schedule 13.07.2016
comment
Спасибо вам обоим за все! Я читал, когда искал решение, что проблема может быть в нулях, но не совсем уверен, как это сделать.   -  person Marita Ruiz Miñano    schedule 13.07.2016
comment
Model1 ‹- glmer (посетители ~ Distance_nest_tag + ep_nest + (1|tag_ID), family = Gaussian (link=log), start = coef (lm(md$count ~ md$distance_nest_tag + md$ep_nest)), data=md )   -  person Marita Ruiz Miñano    schedule 13.07.2016
comment
Model1 ‹- glm (md$ посетители ( y+.Machine$double.eps)~ md$distance_nest_tag + md$ep_nest + (1| идентификатор гнезда) + (1|ID_тега), семья = гауссиан (ссылка = журнал), данные = md )   -  person Marita Ruiz Miñano    schedule 13.07.2016
comment
Сейчас я пробую этот код Model1 ‹- glm (I (посетители + .Machine$double.eps)~ Distance_nest_tag + ep_nest + (1| nest_ID) + (1|tag_ID), family = Gaussian (link=log), data= md ) Но также не работает. Теперь я получаю следующую ошибку: Ошибка: не найден допустимый набор коэффициентов: пожалуйста, укажите начальные значения   -  person Marita Ruiz Miñano    schedule 13.07.2016
comment
ваш pastebin выглядит неполным: он начинается 151L, 151L,... ???   -  person Ben Bolker    schedule 14.07.2016
comment
В этом ответе при перекрестной проверке обсуждается довольно похожая проблема в пакете mgcv. В этом случае проблема может быть связана с ошибкой.   -  person aosmith    schedule 14.07.2016


Ответы (1)


tl;dr Чтобы это работало, вам нужно установить параметр mustart на что-то разумное; аналогичная проблема с mgcv сообщается здесь . В текущих версиях glmer вам просто нужно включить

mustart=pmax(dd$count,1e-3)

в вызове glmer.

Объяснение: итеративный алгоритм, обычно используемый в GLM (итеративно перевзвешенный метод наименьших квадратов), должен установить начальную точку не только для параметров, но и для прогнозируемых значений отклика. По умолчанию для гауссовских моделей прогнозируемые значения устанавливаются равными наблюдаемым; если наблюдаемое значение является невозможным прогнозируемым (средним) значением для конкретной функции связи (например, нулевое значение становится отрицательно-бесконечным при логарифмическом преобразовании), то это приведет к поломке (даже если наблюдаемое значение допустимо (т. е. мы можем наблюдать нулевое значение, даже если среднее значение должно быть положительным). Следовательно, компонент $initialize элемента семейства gaussian(link="log"):

if (is.null(etastart) && is.null(start) && is.null(mustart) && 
    ((family$link == "inverse" && any(y == 0)) || (family$link == 
        "log" && any(y <= 0)))) 
    stop("cannot find valid starting values: please specify some")
mustart <- y

Итак, что мы действительно хотим сделать, так это установить mustart, чтобы все значения были положительными.

Тогда возникает вопрос, является ли это правильным статистическим подходом. Это не безумие; также может быть разумно попробовать модель Пуассона, или простую линейную модель, основанную на log(1+x), или порядковую модель... в зависимости от того, что вы думаете о процессе, управляющем посещениями, и о том, что вы наблюдаете в отношении распределения/условного распределения счета...

person Ben Bolker    schedule 15.07.2016