Пространственно-временные смешанные эффекты в R: слишком большие группы в корреляционной структуре
Я пытаюсь подогнать модель смешанного эффекта к пространственно-временной корреляционной структуре, используя
lme {nlme}
Данные включают 37936 ячеек сетки lon (x) + lat (y) (18968 мужчин + 18968 женщин) с плотностью (kde), выше / ниже долгосрочного среднего количества осадков (rainAB) и расстояния до воды (wDist), повторяемых каждый год. с 2001 по 2010 год (год F=10).
Я хочу смоделировать, как на kde влияют rainAB и wDist для самцов и самок животных, при этом позволяя каждому sexF иметь свой собственный перехват и свой собственный наклон для yearF, которые, в свою очередь, коррелируют в пространстве (x+y) и времени. ( годF).
Модель отлично работает с небольшим набором данных (n=3780), но есть
Too large groups in the correlation structure
с большим набором данных (n=379360). Буду признателен за любой совет о том, как с этим справиться - см. Воспроизводимый пример ниже.
# LOAD LIBRARIES
library(nlme)
library(car)
library(dplyr)
library(ggstatsplot)
#----------------------------------------------------------------------------------------------
# SMALL DATASET
set.seed(1)
(nGrid_s = 189) #Number of 1km grid cells in study area
(nYrs = 10) #Number of years
(nGrps = 2) #Number of groups i.e. male and female
dat_s = data.frame(x=rep(seq(from=283, to=401, length.out=nGrid_s),each=nYrs),
y=rep(seq(from=7176, to=7529, length.out=nGrid_s),each=nYrs),
yearF=as.factor(rep(2001:2010, nGrid_s)),
sexF=as.factor(rep(c('male','female'), each=nGrid_s*nYrs)),
kde=runif(nGrid_s*nYrs, 0, 8),
rainAB=runif(nGrid_s*nYrs, -70, 247),
wDist=runif(nGrid_s*nYrs, 0, 14))
str(dat_s)
# LME WITH SMALL DATASET (n=3780)
lmeS = lme(kde~rainAB/sexF+wDist/sexF, #What about how rainAB affects wDist
# random=~y+x|yearF,
random=~yearF|sexF,
correlation=corSpatial(form=~x+y|sexF/yearF),
control=lmeControl(maxIter=50, msMaxIter=50, niterEM=50, opt='optim',msVerbose=TRUE),
method="REML",
data=dat_s)
summary(lmeS)
Anova(lmeS, type=c("III"))
ggcoefstats(x = lmeS, title = "Small LME mixed-effects model")
##############################################################################################
# GENERATE LARGE DATASET
set.seed(2)
(nGrid_l = 18968) #Number of 1km grid cells in study area
dat_l = data.frame(x=rep(seq(from=283, to=401, length.out=nGrid_l),each=nYrs),
y=rep(seq(from=7176, to=7529, length.out=nGrid_l),each=nYrs),
yearF=as.factor(rep(2001:2010, nGrid_l)),
sexF=as.factor(rep(c('male','female'), each=nGrid_l*nYrs)),
kde=runif(nGrid_l*nYrs, 0, 8),
rainAB=runif(nGrid_l*nYrs, -70, 247),
wDist=runif(nGrid_l*nYrs, 0, 14))
# LME WITH LARGE DATASET (n=379360)
lmeL = lme(kde~rainAB/sexF+wDist/sexF, #What about how rainAB affects wDist
# random=~y+x|yearF,
random=~yearF|sexF,
correlation=corSpatial(form=~x+y|sexF/yearF),
control=lmeControl(maxIter=50, msMaxIter=50, niterEM=50, opt='optim',msVerbose=TRUE),
method="REML",
data=dat_l)
# Error: 'sumLenSq := sum(table(groups)^2)' = 1.43914e+10 is too large.
# Too large or no groups in your correlation structure?
#-------------------------------------------------------------------------------