Comment les effets aléatoires avec une seule observation affecteront-ils un modèle mixte linéaire généralisé?

14

J'ai un ensemble de données dans lequel la variable que j'aimerais utiliser comme effet aléatoire n'a qu'une seule observation pour certains niveaux. Sur la base des réponses aux questions précédentes, j'ai compris que, en principe, cela peut convenir.

Puis-je adapter un modèle mixte avec des sujets qui n'ont qu'une seule observation?

Modèle d'interception aléatoire - une mesure par sujet

Cependant, dans le deuxième lien, la première réponse indique:

"... en supposant que vous n'utilisez pas un modèle GLMM mixte linéaire généralisé où dans ce cas des problèmes de sur-dispersion entrent en jeu"

J'envisage d'utiliser un GLMM, mais je ne comprends pas vraiment comment les niveaux d'effets aléatoires avec des observations uniques affecteront le modèle.


Voici un exemple de l'un des modèles que j'essaie d'adapter. J'étudie les oiseaux et j'aimerais modéliser les effets de la population et de la saison sur le nombre d'arrêts pendant la migration. J'aimerais utiliser l'individu comme un effet aléatoire, car pour certaines personnes j'ai jusqu'à 5 ans de données.

library(dplyr)
library(lme4)
pop <- as.character(c("BF", "BF", "BF", "BF", "BF", "BF", "BF", "BF", "BF", "BF", "BF", "BF", "BF", "BF", "BF", "BF", "BF", "BF", "BF", "BF", "BF", "MA", "MA", "MA", "MA", "MA", "MA", "MA", "MA", "MA", "MA", "MA", "MA", "MA", "MA", "MA", "NU", "NU", "NU", "NU", "NU", "NU", "NU", "NU", "NU", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA"))
id <- "2 2 4 4 7 7 9 9 10 10 84367 84367 84367 84368 84368 84368 84368 84368 84368 84369 84369 33073 33073 33073 33073 33073 33073 33073 33073 33073 80149 80149 80149 80150 80150 80150 57140 57141 126674 126677 126678 126680 137152 137152 137157 115925 115925 115925 115925 115925 115925 115925 115925 115926 115926 115926 115926 115926 115926 115927 115928 115929 115929 115929 115930 115930 115930 115930 115931 115931 115931 115932 115932 115932"
id <- strsplit(id, " ")
id <- as.numeric(unlist(id))
year <- "2014 2015 2014 2015 2014 2015 2014 2015 2014 2015 2009 2010 2010 2009 2010 2010 2011 2011 2012 2009 2010 2009 2009 2010 2010 2011 2011 2012 2012 2013 2008 2008 2009 2008 2008 2009 2008 2008 2013 2013 2013 2013 2014 2015 2014 2012 2013 2013 2014 2014 2015 2015 2016 2012 2013 2013 2014 2014 2015 2013 2012 2012 2013 2013 2012 2013 2013 2014 2013 2014 2014 2013 2014 2014"
year <- strsplit(year, " ")
year <- as.numeric(unlist(year))
season <- as.character(c("fall", "spring", "fall", "spring", "fall", "spring", "fall", "spring", "fall", "spring", "fall", "fall", "spring", "fall", "fall", "spring", "fall", "spring", "spring", "fall", "spring", "fall", "spring", "fall", "spring", "fall", "spring", "fall", "spring", "spring", "fall", "spring", "spring", "fall", "spring", "spring", "fall", "fall", "fall", "fall", "fall", "fall", "fall", "spring", "fall", "fall", "fall", "spring", "fall", "spring", "fall", "spring", "spring", "fall", "fall", "spring", "fall", "spring", "spring", "fall", "fall", "fall", "fall", "spring", "fall", "fall", "spring", "spring","fall", "fall", "spring", "fall", "fall", "spring"))
stops <- "0 0 0 0 0 0 1 0 2 1 1 0 0 3 2 0 1 1 0 1 1 2 0 1 0 2 0 4 0 0 2 1 1 2 5 2 1 0 9 6 2 3 4 7 2 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 0"
stops <- strsplit(stops, " ")
stops <- as.numeric(unlist(stops))

stopdata <- data.frame(pop = pop, id = id, year = year, season = season, stops = stops, stringsAsFactors = FALSE)


stopdata <- group_by(stopdata, pop, id)
summary1 <- summarise(stopdata, n.years = length(year))
table(summary1$n.years)

Il y a 27 individus. 9 individus ont une seule observation. 18 individus ont 2-9 observations.

De quoi devrait-on s'inquiéter si 1/3 des niveaux d'effets aléatoires n'ont qu'une seule observation?


J'ai envisagé:

Option 1: GLMM comme décrit ci-dessus

stops.glmm <- glmer(stops ~ pop + season + (1|id), data=stopdata, family = poisson)

Option 2: modèle linéaire généralisé pondéré GLM utilisant des moyennes pour les individus à observations multiples

aggfun <- function(data, idvars=c("pop", "season", "id"), response){
#select id variables, response variable, and year
sub1 <- na.omit(data[,c(idvars, "year", response)])
#aggregate for mean response by year
agg1 <- aggregate(sub1[names(sub1) == response],by=sub1[idvars],FUN=mean)
#sample size for each aggregated group
aggn <- aggregate(sub1[response],by=sub1[idvars],FUN=length)
#rename sample size column
names(aggn)[4] <- "n"
agg2 <- merge(agg1, aggn)
agg2}


#Create weighted dataset
stops.weight <- aggfun(data = stopdata, response = "stops")
stops.weight$stops <- round(stops.weight$stops)

#Weighted GLM
stops.glm <- glm(stops~pop + season, data=stops.weight, family = poisson, weights = n)
canderson156
la source
D'où vient la citation? Je ne trouve pas la réponse correspondante.
amibe dit Réintégrer Monica
Deuxième lien, première réponse, entre parenthèses
canderson156
3
brève réponse pas tout à fait: je ne pense pas qu'il y aurait de problème. Je ne sais pas exactement ce que signifiait le premier répondant à la deuxième question liée ci-dessus: avez-vous envisagé de laisser un commentaire là-bas pour demander (si vous avez suffisamment de représentants)? Dans la limite où vous avez exactement 1 observation par groupe, la variabilité intra-groupe et résiduelle sera complètement confondue. Je ne m'embêterais peut-être pas avec des modèles mixtes si vous aviez une minorité de groupes avec> 1 observation (et un petit nombre dans ces groupes), mais votre cas sonne bien ...
Ben Bolker
Je ne suis pas sûr que votre deuxième option (Poisson pondéré) fonctionne vraiment correctement, mais je devrais y réfléchir plus attentivement.
Ben Bolker
@BenBolker Que choisiriez-vous de faire dans le cas que vous décrivez, où il n'y a qu'une minorité de groupes avec> 1 observation?
mkt

Réponses:

3

En général, vous avez un problème d'identification. Les modèles linéaires avec un effet aléatoire attribué à un paramètre avec une seule mesure ne peuvent pas faire la distinction entre l'effet aléatoire et l'erreur résiduelle.

Une équation à effet mixte linéaire typique ressemblera à:

E=β+ηi+ϵj

βηiiϵjjηϵηϵSD(η)SD(ϵ)vuner(η)+vuner(ϵ)

S(η)S(ϵ)et ces personnes devraient globalement être des contributeurs mineurs. D'un autre côté, si vous avez tous les individus à un effet fixe spécifique et à un effet aléatoire avec une seule mesure (par exemple pour votre exemple, peut-être toute une population - peut-être que cela signifie des espèces pour vous), alors vous feriez moins confiance au résultat .

Bill Denney
la source