Я пытаюсь смоделировать влияние нескольких переменных на вероятность возникновения самоконтроля с использованием glmer в пакете lme4. Это очень большой набор данных с> 900 000 точек данных.
Когда я пытаюсь запустить модель, я получаю эту ошибку.
SLMod <- glmer(SL ~ species*season + (1|code), data=SL, family=binomial)
Warning message:
In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
Model failed to converge with max|grad| = 0.0013493 (tol = 0.001,
component 1)
И это вывод
summary(SLMod)
Generalized linear mixed model fit by maximum likelihood (Laplace
Approximation) ['glmerMod']
Family: binomial ( logit )
Formula: SL ~ species * season + (1 | code)
Data: SL
AIC BIC logLik deviance df.resid
708076.5 708135.1 -354033.2 708066.5 906441
Scaled residuals:
Min 1Q Median 3Q Max
-1.6224 -0.4324 -0.3136 -0.1983 5.0722
Random effects:
Groups Name Variance Std.Dev.
code (Intercept) 0.8571 0.9258
Number of obs: 906446, groups: code, 180
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.29729 0.05944 -21.824 < 2e-16 ***
speciesSilvertip Shark 0.05593 0.06390 0.875 0.381
seasonwet season 0.09617 0.01008 9.537 < 2e-16 ***
speciesSilvertip Shark:seasonwet season -0.10809 0.01354 -7.983 1.43e-15 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) spcsSS ssnwts
spcsSlvrtpS -0.585
seasonwtssn 0.009 -0.004
spcsSShrk:s -0.007 0.001 -0.744
convergence code: 0
Model failed to converge with max|grad| = 0.0013493 (tol = 0.001, component 1)
Это набор данных о перемещениях животных с последовательным обнаружением в одной и той же точке с вычисленной разницей во времени. Если разница во времени составляет> 10 минут, это было определено как самоконтроль и дано 1, если меньше десяти минут 0. Пример данных ниже.
structure(list(code = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label =
"2388", class = "factor"),
species = c("Silvertip Shark", "Silvertip Shark", "Silvertip Shark",
"Silvertip Shark", "Silvertip Shark", "Silvertip Shark"),
sex = c("F", "F", "F", "F", "F", "F"), TL = c(112, 112, 112,
112, 112, 112), datetime = structure(c(1466247120, 1466247420,
1467026100, 1469621400, 1469879640, 1470397200), class = c("POSIXct",
"POSIXt"), tzone = ""), year = c("2016", "2016", "2016",
"2016", "2016", "2016"), month = c(6, 6, 6, 7, 7, 8), hour = c(11,
11, 12, 13, 12, 12), season = c("dry season", "dry season",
"dry season", "dry season", "dry season", "dry season"),
daynight = c("day", "day", "day", "day", "day", "day"), SL = c(0,
0, 1, 1, 1, 1)), row.names = c(NA, 6L), class = "data.frame")
Я случайно выбрал свой набор данных только для 50% данных, используя этот код
SL50 <- SL %>% sample_frac(0.5)
И запускал тот же код для этого набора данных, и он работал нормально, без ошибок. Мне было интересно, если есть проблема с размером набора данных, который я работаю. Тем не менее, я получаю аналогичную ошибку с другой моделью, использующей 50% выборочных данных, которая исчезает, когда я запускаю этот код на 10% данных.
SLMod <- glmer(SL ~ species*daynight + (1|code), data=SL50,
family=binomial)
Warning message:
In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
Model failed to converge with max|grad| = 0.0010195 (tol = 0.001,
component1)
Возможно ли, что существует проблема с размером данных, которые он пытается обработать для каждой модели? И есть ли способы справиться с этим?