Я там. Я столкнулся с некоторыми проблемами с функцией lmer. Я пытаюсь проверить это на простых данных, и я получаю не то, что ожидал, а предупреждения и ошибки.
Вот пример
library(lme4)
library(lme4)
library(data.table)
library(ggplot2)
set.seed(115)
Nid = 20
Nx = 15
b <- 0
a <- 0.5
test <- data.table(ID = rep(LETTERS[1:Nid],each = Nx), X = rep(1:Nx,Nid))
test[,Y := rnorm(1,mean = b,sd = 1) + rnorm(1,mean = a,sd = 1*a)*X, by = ID]
Это набор индивидуумов с Y, имеющий случайный перехват и наклон с X
fitnonmixte <- lm(Y~X,data = test)
summary(fitnonmixte)
fitmixte <- lmer(Y~X + (1 + X |ID),data = test,REML = T)
summary(fitmixte)
Подход с lmer дает мне некоторые предупреждения, которые я не понимаю:
Warning messages:
1: In optwrap(optimizer, devfun, getStart(start, rho$lower, rho$pp), :
convergence code 3 from bobyqa: bobyqa -- a trust region step failed to reduce q
2: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
unable to evaluate scaled gradient
3: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
Model failed to converge: degenerate Hessian with 2 negative eigenvalues
и не дает лучшего результата, чем простая регрессия. Увеличение числа людей, кажется, не меняет поведение.
Когда я хочу сделать:
test <- data.table(ID = rep(LETTERS[1:Nid],each = Nx), X = rep(1:Nx,Nid))
test[,Y := rnorm(1,mean = b,sd = 2) + rnorm(1,mean = a,sd = 2*a)*X, by = ID]
fitmixte <- lmer(Y~X + (1 + X |ID),data = test,REML = T)
Я получаю:
Error in fn(x, ...) : Downdated VtV is not positive definite
что я не понимаю ...
Я понял после этого, если я добавлю шум к данным
test <- data.table(ID = rep(LETTERS[1:Nid],each = Nx), X = rep(1:Nx,Nid))
test[,Y := rnorm(1,mean = b,sd = 2) + rnorm(1,mean = a,sd = 2*a)*X + rnorm(.N,mean = 0,sd = 1), by = ID]
все отлично работает. Так почему же lmer не может дать правильный результат на данных без шума? Есть ли способ избежать такого поведения? В чем смысл ошибок?
Спасибо за помощь!