ошибка nlmer: ошибка в initializePtr(): заниженный VtV не является положительно определенным

Я повторил измерения данных, изучая лес Biomass в лесу Age для нескольких Plots:

Другими словами: Biomass ~ Age | Plot

#Reproducible Example data:

biom.dat <- c(unlist(lapply(1:7, function(x){ set.seed(x) ; sort(sample(2:500,15))})),
  unlist(lapply(8:15, function(x){ set.seed(x) ;  c(sort(sample(2:500,12)),(sample(90:500,3)))})))
dat <- data.frame(Plot = rep(1:5,each = 15), Age = rep(c((1:75)[(1:5)%%5 == 0])+8,5), Biomass = biom.dat)

> head(dat)
  Plot Age Biomass
1    1  13      32
2    1  18      88
3    1  23     101
4    1  28     102
5    1  33     134
6    1  38     187

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

Я пытаюсь запустить расширение модели, показанное здесь, которое использует эту пользовательскую функцию:

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

который я закодировал в R как:

function(Age,C,Ao,s,wd,ph) C + Ao * exp(-s*Age) * cos(wd*Age + ph)

Однако при запуске кода nlmer (см. ниже) я получаю следующую ошибку:

Error in initializePtr() : Downdated VtV is not positive definite

Это обсуждение подсказало мне, что у меня могут быть проблемы с масштабированием? (на что намекнул здесь).

Поэтому я попытался масштабировать переменные (сначала только предиктор Age, но затем и ответ Biomass). Даже после масштабирования обеих переменных я все равно получаю ту же ошибку...

Вопросы:

  1. Что еще может пойти не так? (Что еще я должен проверить?)

  2. Куда мне идти отсюда?


Мой код:

Обновление: на основе удаленных комментариев @42 я скорректировал код (первоначально вдохновленный здесь) для более точного соответствия коду с nlmer страницы справки (Пример №3): [Note: the errors still occur]

  #Create equation:
    LTI.eqn <- ~ C + Ao * exp(-s*Age) * cos(wd * Age + ph)

  #Build function (incorporating a "gradient" attribute in the formula using deriv():
    LTI.func <- deriv(LTI.eqn, namevec = c('C', 'Ao', 's', 'wd', 'ph'),
                  function.arg = c('Age', 'C', 'Ao', 's', 'wd', 'ph'))

  #Load package:  
    library(lme4)

  #Create named vector of starting values for my constants:
    nlmer.start <- c(C = 0,Ao = -1,s = 1,wd = 1,ph = 0)

  #Run model:
    nlmer(Biomass ~ LTI.func(Age, C, Ao, s, wd, ph) ~ (Age | Plot), 
          data = dat, start=nlmer.start)

     #Error in initializePtr() : Downdated VtV is not positive definite

  #So let's rescale the continuous predictor variables (in this case we'll center Age):
    nlmer(Biomass ~ LTI.func(Age, C, Ao, s, wd, ph) ~ (Age | Plot), 
          data = transform(dat,Age = Age - 51), start = nlmer.start)

     #Error in initializePtr() : Downdated VtV is not positive definite

  #Still a problem. What if I scale Biomass, too???
    datt <- transform(dat,Age = (Age - 51), Biomass = scale(Biomass, center = F))
    nlmer(Biomass ~ LTI.func(Age, C, Ao, s, wd, ph) ~ (Age | Plot),
          data = datt, start = nlmer.start)

     #Error in initializePtr() : Downdated VtV is not positive definite

person theforestecologist    schedule 05.05.2018    source источник
comment
Я выбрал nlmer против nlme, потому что у меня есть множество других моделей, уже сгенерированных с использованием lme4 для сравнения (конечно, с использованием REML = F).   -  person theforestecologist    schedule 05.05.2018
comment
Я не уверен, что мне следует комментировать дальше, и у меня действительно нет опыта, чтобы подтвердить ответ, но, возможно, следуя совету БенБолкера здесь: rpubs.com/bbolker/3423 . Я удалю свои предыдущие комментарии, чтобы освободить место для других вкладов.   -  person IRTFM    schedule 05.05.2018
comment
@42 спасибо за ваше время и комментарии! Просто к вашему сведению, я настроил функцию и все еще получаю те же ошибки. Я проверю вашу ссылку Bolker, чтобы увидеть, поможет ли это. Спасибо!   -  person theforestecologist    schedule 05.05.2018
comment
@42 Я попробовал подход Бена tmpstr <- deparse( по ссылке, которой вы поделились. К сожалению, хотя это определенно изменило вызов функции, это не помогло устранить причину ошибки. Спасибо хоть!   -  person theforestecologist    schedule 06.05.2018