В nlme, как указать вложенный фиксированный эффект в модели - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть два фактора в модели нелинейного смешанного эффекта. Один фактор вложен в другой, как и в данном случае: «Specie» вложен в «category».

library(nlme)
exp_decay <- function(a, b, x){
  return(a*exp(-b*x))
}

specie <- rep(c("A", "B", "C", "D", "E", "F"), each=6)
line <- paste(specie, rep(c(1,1,1,2,2,2), 6), sep="-")
category <- rep(c("Big", "Small"), each=18)
x <- rnorm(36, 0, 1)
y <- exp_decay(1, 0.2, x)
da <- data.frame(y,x,specie=as.factor(specie), category=as.factor(category), line=as.factor(line) )

a.nlme <- nlme(y~exp_decay(a, b, x), 
                data=da,  
                fixed=list(a~category+category:specie, b~category+category:specie), 
                random = list(line=pdDiag(a+b~1)), 
                start = c(1,rep(0,11),0.2,rep(0,11)),
                control = nlmeControl(pnlsTol = 0.001, msVerbose = TRUE))

Но nlme не удалось запустить.Выдает ошибку: «Ошибка в MEEM (объект, conLin, control $ niterEM): особенность в обратном разрешении на уровне 0, блок 1».

Я думаю, что сингулярность происходит от вложенного проекта.Поскольку «Specie» вложено в «category», «category: specie» не является полным рангом.Если мы используем «lm» для запуска линейной модели, она просто выдаст «NA» несуществующим комбинациям «category» и «specie».

Итак, как справиться с этим вложенным фиксированным эффектом в 'nlme'?

...