Доверительный интервал случайных эффектов с lmer

Я использую lmer от lme4 пакет для расчета доверительного интервала для дисперсионного компонента.

Когда я подгоняю модель есть предупреждающие сообщения:

fit <- lmer(Y~X+Z+X:Z+(X|group),data=sim_data)
Warning messages:
1: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  unable to evaluate scaled gradient
2: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge: degenerate  Hessian with 1 negative eigenvalues

Я много искал, чтобы понять, почему возникает ошибка, и, наконец, пришел к решению, что there is difference between error and warning in the R world,

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

 confint.merMod(fit,oldNames=FALSE)
 Computing profile confidence intervals ...
 Error in if (all(x[iu <- upper.tri(x)] == 0)) t(x[!iu]) else t(x)[!iu] : 
 missing value where TRUE/FALSE needed

Есть ли другой способ получения КИ случайных эффектов с помощью lmer?

РЕДАКТИРОВАТЬ:

simfun <- function(J,n_j,g00,g10,g01,g11,sig2_0,sig01,sig2_1){
    N <- sum(rep(n_j,J))  
    x <- rnorm(N)         
    z <- rnorm(J)        

    mu <- c(0,0)
    sig <- matrix(c(sig2_0,sig01,sig01,sig2_1),ncol=2)
    u   <- rmvnorm(J,mean=mu,sigma=sig)

    b_0j <- g00 + g01*z + u[,1]
    b_1j <- g10 + g11*z + u[,2]

    y <- rep(b_0j,each=n_j)+rep(b_1j,each=n_j)*x + rnorm(N,0,0.5)
    data <- data.frame(Y=y,X=x,Z=rep(z,each=n_j),group=rep(1:J,each=n_j))
  } 

noncoverage <- function(J,n_j,g00,g10,g01,g11,sig2_0,sig01,sig2_1){
    dat <- simfun(J,n_j,g00,g10,g01,g11,sig2_0,sig01,sig2_1)
    fit <- lmer(Y~X+Z+X:Z+(X|group),data=dat)
 }

comb1 = replicate(1000,noncoverage(10,5,1,.3,.3,.3,(1/18),0,(1/18)))
comb26 = replicate(1000,noncoverage(100,50,1,.3,.3,.3,(1/8),0,(1/8)))

2 ответа

Это зависит от того, что вы ищете именно от доверительных интервалов, но функция sim в arm пакет обеспечивает отличный способ получить повторные образцы из задней части lmer или же glmer Объект, чтобы получить представление об изменчивости коэффициентов как фиксированных, так и случайных членов.

в merTools В пакете мы написали оболочку, которая упрощает процесс извлечения этих значений и взаимодействия с ними:

library(merTools)
randomSims <- REsim(fit, n.sims = 500)
# and to plot it
plotREsim(REsim(fit, n.sims = 500))

Существует ряд других инструментов для их изучения в merTools, Если вы хотите получить фактические результаты моделирования, вам лучше использовать arm::sim,

Модель Лмера показывает результаты в матрице. Вы можете получить доступ к оценкам и стандартным ошибкам модели для расчета доверительных интервалов.

Поскольку первая строка - это оценка пересечения модели, вторая строка - это оценка вашей управляемой переменной. Первый столбец - это оценка эффекта, а второй столбец - стандартная ошибка.

Так меняется MyModel для названия вашей модели и округления числа до двух, round(coef(summary(MyModel))[2,1],2)-round(coef(summary(MyModel))[2,2],2)*2 даст вам нижний предел доверительного интервала, в то время как простое изменение вычитания для сложения в предыдущей формуле даст вам верхний предел оценки: round(coef(summary(MyModel))[2,1],2)+round(coef(summary(MyModel))[2,2],2)*2

Вы можете использовать пакет параметров, который предлагает вам методы для вычисления CI для фиксированных эффектов, включая приближение Кенварда-Роджера для небольших размеров выборки, или стандартные ошибки для фиксированных и случайных эффектов, или полные сводки моделей. См. Примеры ниже.

library(parameters)
library(lme4)
#> Loading required package: Matrix
model <- lmer(mpg ~ wt + (1 | gear), data = mtcars)

ci(model)
#>     Parameter CI   CI_low   CI_high
#> 1 (Intercept) 95 31.89749 40.482616
#> 2          wt 95 -6.29877 -3.791242

ci_kenward(model)
#>     Parameter CI    CI_low   CI_high
#> 1 (Intercept) 95 31.208589 41.171513
#> 2          wt 95 -6.573142 -3.516869

standard_error(model)
#>     Parameter        SE
#> 1 (Intercept) 2.1901246
#> 2          wt 0.6396873

standard_error(model, effects = "random")
#> $gear
#>   (Intercept)
#> 3   0.6457169
#> 4   0.6994964
#> 5   0.9067223

model_parameters(model, df_method = "satterthwaite")
#> Parameter   | Coefficient |   SE |         95% CI |     t |    df |      p
#> --------------------------------------------------------------------------
#> (Intercept) |       36.19 | 2.19 | [31.90, 40.48] | 16.52 | 13.85 | < .001
#> wt          |       -5.05 | 0.64 | [-6.30, -3.79] | -7.89 | 21.92 | < .001

Создано 07.02.2020 с помощью пакета REPEX (v0.3.0)

Проблема здесь в том, что ваш случайный эффект (X | группа), и я предполагаю, что это должна быть (1 | группа), модель случайного перехвата или включать обе как (1+X| группа). Наличие только (X|group) вызовет проблемы, поскольку вы допускаете разные уклоны, но не позволяете изменяться перехвату.

Другие вопросы по тегам