Далее следует попытка диагностировать, что может быть не так с вашей моделью. Для этого обсуждения будет использоваться набор данных 1:
Как описано в вашем вопросе, когда запускается исходная модель с набором данных 1, они получают предупреждения:
# original model
fm1 <- lme4::lmer(Log_Ca_Mg ~ 1 + kelvin + I(kelvin^-1) + I(log10(kelvin)) + I(kelvin^-2) + (1|FIELD) +(1|DepthID),data=dat1)
Некоторые переменные предиктора находятся в очень разных масштабах: рассмотрим масштабирование кода сходимости: 0 Модель не удалось сходиться с max | grad | = 0,0196619 (толь = 0,002, компонент 1)
Эта и другая информация указывает на наличие проблем в вашей модели, возможно, связанных с тем, что предикторы находятся в другом масштабе.
Поскольку fm1
имеет несколько предикторов, которые являются преобразованиями переменной 'kelvin', мы также можем проверить модель на коллинеарность с помощью функции car
package vif
:
# examine collinearity with the vif (variance inflation factors)
> car::vif(fm1)
kelvin I(kelvin^-1) I(log10(kelvin)) I(kelvin^-2)
716333 9200929 7688348 1224275
Эти значения vif предполагают модель fm1
страдает от высокой коллинеарности.
Мы можем попытаться отбросить некоторые из этих предикторов, чтобы изучить более простую модель:
fm1_b <- lme4::lmer(Log_Ca_Mg ~ 1 + kelvin + I(kelvin^-1) + (1|FIELD) +(1|DepthID),data=dat1)
Когда мы запускаем код, мы все равно получаем предупреждение о Предикторы находятся в разных масштабах:
Предупреждающее сообщение: Некоторые переменные предиктора находятся в очень разных масштабах: рассмотрите возможность масштабирования
В то же время значения VIF намного меньше:
# examine collinearity with the vif (variance inflation factors)
> car::vif(fm1_b)
kelvin I(kelvin^-1)
46.48406 46.48406
Следуя предложению Ганга, которое я упомянул в комментариях, мы можем видеть, что происходит, когда мы центрируем наши переменные Кельвина:
dat1$kelvin_centered <- as.vector(scale(dat1$kelvin, center= TRUE, scale = FALSE ))
# Make a power transformation on the kelvin_centered variable
dat1$kelvin_centered_pwr <- dat1$kelvin_centered^-1
A и проверьте, не коррелированы ли они
# check the correlation of the centered vars
cor(dat1$kelvin_centered, dat1$kelvin_centered_pwr)
> cor(dat1$kelvin_centered, dat1$kelvin_centered_pwr)
[1] 0.08056641
И создайте другую модель с центрированными переменными:
# construct a modifed model
fm1_c <- lme4::lmer(Log_Ca_Mg ~ 1 + kelvin_centered + kelvin_centered_pwr + (1|FIELD) +(1|DepthID),data=dat1)
Примечательно, что мы не видим никаких предупреждений, когда запускаем код с эта модель. И значения VIF довольно низки:
car::vif(fm1_c)
> car::vif(fm1_c)
kelvin_centered kelvin_centered_pwr
1.005899 1.005899
Заключение
Исходная модель имеет высокую степень коллинеарности. Коллинеарность может сделать модели нестабильными, что может объяснить, почему fm1
не удалось сойтись, и почему вы видите странные предсказания на графиках. Модель fm1_c
может быть или не быть подходящей моделью для ваших целей. Это, по крайней мере, обеспечивает объектив, чтобы понять проблему с вашей оригинальной моделью.