J'exécute plusieurs modèles mixtes linéaires pour une étude sur les oiseaux avec le nid variable comme variable aléatoire. Le fait est que dans certains de ces modèles, j'obtiens ce qu'on appelle "ajustement singulier": ma variable aléatoire nid a une variance et une erreur de 0,00.
Quelques antécédents: je travaille avec des oiseaux sauvages pour voir l'effet de la vie dans des environnements bruyants sur certains paramètres de stress oxydatif. Pour cela, nous avons prélevé un échantillon de sang pour chacun des oisillons de chaque nid afin d'effectuer les travaux de laboratoire. En raison de l'échantillon de sang limité, certains paramètres de stress oxydatif n'ont pas pu être mesurés pour chaque nidification.
model <- lmer(antioxidant_capacity~age+sex+clutch+zone+(1|nestID),
data=data, contrasts=list(sex=contr.sum, zon=contr.sum, clutch=contr.sum))
Ensuite, je reçois:
singular fit
Voici le tableau:
REML criterion at convergence: 974.3
Scaled residuals:
Min 1Q Median 3Q Max
-2.72237 -0.61737 0.06171 0.69429 2.88008
Random effects:
Groups Name Variance Std.Dev.
nestID (Intercept) 0 0.00
Residual 363 19.05
Number of obs: 114, groups: nido_mod, 46
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 294.5970 36.8036 109.0000 8.005 1.41e-12 ***
age -0.2959 3.0418 109.0000 -0.097 0.922685
clutch1 -0.5242 2.0940 109.0000 -0.250 0.802804
sex1 2.3167 1.8286 109.0000 1.267 0.207885
zone1 6.2274 1.7958 109.0000 3.468 0.000752 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) age clutch1 sex1
age -0.999
clutch1 0.474 -0.465
sex1 0.060 -0.054 -0.106
zone1 -0.057 0.061 -0.022 0.058
convergence code: 0
singular fit
J'ai lu sur les problèmes de singularité et si j'ai bien compris, la singularité est liée au sur-ajustement. Cela pourrait-il être dû au fait que pour certaines variables de réponse, j'ai des nids avec un seul nid alors qu'il y a des nids avec plus de nichés? Comment puis-je resoudre ceci? Une recommandation?
Merci beaucoup.
Dans lmer, un ajustement singulier pourrait être causé par la colinéarité dans les effets fixes, comme dans tout autre modèle linéaire. Ce serait besoin de réviser votre modèle en supprimant les termes. Mais dans lmer, cet avertissement (ou un avertissement de "contour (singulier)") peut également être déclenché dans des modèles assez simples lorsqu'une variance d'effet aléatoire est estimée très près de zéro et (très lâchement) les données ne sont pas suffisamment informatives pour faire glisser le estimation loin de la valeur de départ zéro.
La réponse formelle est globalement similaire dans les deux cas; supprimer les termes qui estiment que zéro. Et cela reste raisonnable au moins jusqu'à ce que vous sachiez quel terme est à l'origine du problème. Mais il y a des moments où une variance négligeable est raisonnablement probable, mais vous souhaitez la conserver dans le modèle; par exemple, parce que vous cherchez délibérément des intervalles sur des variances éventuellement petites ou que vous faites peut-être plusieurs expériences similaires et que vous préférez extraire toutes les variances de manière cohérente. Si vous êtes sûr de ce qui se passe, vous pouvez supprimer ces avertissements via lmerControl, qui peut être configuré pour ne pas utiliser les tests appropriés. Par exemple, vous pouvez inclure
control=lmerControl(check.conv.singular = .makeCC(action = "ignore", tol = 1e-4))
dans votre appel lmer. Cela laisse la tolérance par défaut (dont makeCC a besoin) mais supprime le test d'ajustement singulier. (La valeur par défaut est action = "warning", qui exécute le test et émet l'avertissement).
Êtes-vous réellement intéressé à savoir si chacun des effets fixes de votre modèle a un effet? Par exemple, l'âge ou le sexe peut expliquer une partie de la variation, mais vous pourriez peut-être l'inclure comme un effet aléatoire plutôt que comme un effet fixe. Le changer en un effet aléatoire (si cela est rationnel) pourrait résoudre le problème de la dispersion excessive.
Mon interprétation du problème de singularité, qui pourrait certainement être incorrect, est que chacune des combinaisons de votre modèle n'a qu'une seule observation/mesure. Par conséquent, vous pouvez ne pas avoir suffisamment d'observations pour inclure toutes ces variables en tant qu'effets fixes.