web-dev-qa-db-fra.com

Comment faire face à un ajustement singulier dans un modèle mixte linéaire (lme4)?

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.

3
Iraida

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).

8
S Ellison

Ê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.

0
bicyclerider