У меня есть два фактора в модели нелинейного смешанного эффекта. Один фактор вложен в другой, как и в данном случае: «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'?