TT FF
2024-May-06 07:11 UTC
[R] [R-sig-ME] lmer error: number of observations <= number of random effects
See if this paper may help If it helps reducing the model when you have few observations. the (1|ID) may increase the type 1 error. https://journals.sagepub.com/doi/10.1177/25152459231214454 <https://journals.sagepub.com/doi/10.1177/25152459231214454> Best> On 6 May 2024, at 07:45, Thierry Onkelinx via R-sig-mixed-models <r-sig-mixed-models at r-project.org> wrote: > > Dear Srinidhi, > > You are trying to fit 1 random intercept and 2 random slopes per > individual, while you have at most 3 observations per individual. You > simply don't have enough data to fit the random slopes. Reduce the random > part to (1|ID). > > Best regards, > > Thierry > > ir. Thierry Onkelinx > Statisticus / Statistician > > Vlaamse Overheid / Government of Flanders > INSTITUUT VOOR NATUUR- EN BOSONDERZOEK / RESEARCH INSTITUTE FOR NATURE AND > FOREST > Team Biometrie & Kwaliteitszorg / Team Biometrics & Quality Assurance > thierry.onkelinx at inbo.be > Havenlaan 88 bus 73, 1000 Brussel > *Postadres:* Koning Albert II-laan 15 bus 186, 1210 Brussel > *Poststukken die naar dit adres worden gestuurd, worden ingescand en > digitaal aan de geadresseerde bezorgd. Zo kan de Vlaamse overheid haar > dossiers volledig digitaal behandelen. Poststukken met de vermelding > ?vertrouwelijk? worden niet ingescand, maar ongeopend aan de geadresseerde > bezorgd.* > www.inbo.be > > /////////////////////////////////////////////////////////////////////////////////////////// > To call in the statistician after the experiment is done may be no more > than asking him to perform a post-mortem examination: he may be able to say > what the experiment died of. ~ Sir Ronald Aylmer Fisher > The plural of anecdote is not data. ~ Roger Brinner > The combination of some data and an aching desire for an answer does not > ensure that a reasonable answer can be extracted from a given body of data. > ~ John Tukey > /////////////////////////////////////////////////////////////////////////////////////////// > > <https://www.inbo.be> > > > Op ma 6 mei 2024 om 01:59 schreef Srinidhi Jayakumar via R-sig-mixed-models > <r-sig-mixed-models at r-project.org>: > >> I am running a multilevel growth curve model to examine predictors of >> social anhedonia (SA) trajectory through ages 12, 15 and 18. SA is a >> continuous numeric variable. The age variable (Index1) has been coded as 0 >> for age 12, 1 for age 15 and 2 for age 18. I am currently using a time >> varying predictor, stress (LSI), which was measured at ages 12, 15 and 18, >> to examine whether trajectory/variation in LSI predicts difference in SA >> trajectory. LSI is a continuous numeric variable and was grand-mean >> centered before using in the models. The data has been converted to long >> format with SA in 1 column, LSI in the other, ID in another, and age in >> another column. I used the code below to run my model using lmer. However, >> I get the following error. Please let me know how I can solve this error. >> Please note that I have 50% missing data in SA at age 12. >> modelLSI_maineff_RE <- lmer(SA ~ Index1* LSI+ (1 + Index1+LSI |ID), data >> LSIDATA, control = lmerControl(optimizer ="bobyqa"), REML=TRUE) >> summary(modelLSI_maineff_RE) >> Error: number of observations (=1080) <= number of random effects (=1479) >> for term (1 + Index1 + LSI | ID); the random-effects parameters and the >> residual variance (or scale parameter) are probably unidentifiable >> >> I did test the within-person variance for the LSI variable and the >> within-person variance is significant from the Greenhouse-Geisser, >> Hyunh-Feidt tests. >> >> I also tried control = lmerControl(check.nobs.vs.nRE = "ignore") which gave >> me the following output. modelLSI_maineff_RE <- lmer(SA ~ Index1* LSI+ (1 + >> Index1+LSI |ID), data = LSIDATA, control = lmerControl(check.nobs.vs.nRE >> "ignore", optimizer ="bobyqa", check.conv.singular = .makeCC(action >> "ignore", tol = 1e-4)), REML=TRUE) >> >> summary(modelLSI_maineff_RE) >> Linear mixed model fit by REML. t-tests use Satterthwaite's method >> ['lmerModLmerTest'] >> Formula: SA ~ Index1 * LSI + (1 + Index1 + LSI | ID) >> Data: LSIDATA >> Control: lmerControl(check.nobs.vs.nRE = "ignore", optimizer = "bobyqa", >> check.conv.singular = .makeCC(action = "ignore", tol = 1e-04)) >> >> REML criterion at convergence: 7299.6 >> >> Scaled residuals: >> Min 1Q Median 3Q Max >> -2.7289 -0.4832 -0.1449 0.3604 4.5715 >> >> Random effects: >> Groups Name Variance Std.Dev. Corr >> ID (Intercept) 30.2919 5.5038 >> Index1 2.4765 1.5737 -0.15 >> LSI 0.1669 0.4085 -0.23 0.70 >> Residual 24.1793 4.9172 >> Number of obs: 1080, groups: ID, 493 >> >> Fixed effects: >> Estimate Std. Error df t value Pr(>|t|) >> (Intercept) 24.68016 0.39722 313.43436 62.133 < 2e-16 *** >> Index1 0.98495 0.23626 362.75018 4.169 3.83e-05 *** >> LSI -0.05197 0.06226 273.85575 -0.835 0.4046 >> Index1:LSI 0.09797 0.04506 426.01185 2.174 0.0302 * >> Signif. codes: 0 ?? 0.001 ?? 0.01 ?? 0.05 ?.? 0.1 ? ? 1 >> >> Correlation of Fixed Effects: >> (Intr) Index1 LSI >> Index1 -0.645 >> LSI -0.032 0.057 >> Index1:LSI 0.015 0.037 -0.695 >> >> I am a little vary of the output still as the error states that I have >> equal observations as the number of random effects (i.e., 3 observations >> per ID and 3 random effects). Hence, I am wondering whether I can simplify >> the model as either of the below models and choose the one with the >> best-fit statistics: >> >> modelLSI2 <- lmer(SA ~ Index1* LSI+ (1 |ID)+ (Index1+LSI -1|ID),data >> LSIDATA, control = lmerControl(optimizer ="bobyqa"), REML=TRUE) *OR* >> >> modelLSI3 <- lmer(SA ~ Index1* LSI+ (1+LSI |ID),data = LSIDATA, control >> lmerControl(optimizer ="bobyqa"), REML=TRUE) [image: example of dataset] >> <https://i.sstatic.net/JcRKS2C9.png> >> >> [[alternative HTML version deleted]] >> >> _______________________________________________ >> R-sig-mixed-models at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models >> > > [[alternative HTML version deleted]] > > _______________________________________________ > R-sig-mixed-models at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models[[alternative HTML version deleted]]
Srinidhi Jayakumar
2024-May-06 13:53 UTC
[R] [R-sig-ME] lmer error: number of observations <= number of random effects
Thank you very much for your responses! What if I reduce the model to modelLSI3 <- lmer(SA ~ Index1* LSI+ (1+LSI |ID),data = LSIDATA, control lmerControl(optimizer ="bobyqa"), REML=TRUE). This would allow me to see the random effects of LSI and I can drop the random effect of age (Index1) since I can see that in the unconditional model [model0 <- lmer(SA ~ Index1+ (1+Index1|ID),data = LSIDATA, control lmerControl(optimizer ="bobyqa"), REML=TRUE)]. Would the modelLSI3 also have a type 1 error? Thank you, Srinidhi On Mon, 6 May 2024, 03:11 TT FF, <trashfaket at gmail.com> wrote:> See if this paper may help If it helps reducing the model when you have > few observations. the (1|ID) may increase the type 1 error. > https://journals.sagepub.com/doi/10.1177/25152459231214454 > > Best > > On 6 May 2024, at 07:45, Thierry Onkelinx via R-sig-mixed-models < > r-sig-mixed-models at r-project.org> wrote: > > Dear Srinidhi, > > You are trying to fit 1 random intercept and 2 random slopes per > individual, while you have at most 3 observations per individual. You > simply don't have enough data to fit the random slopes. Reduce the random > part to (1|ID). > > Best regards, > > Thierry > > ir. Thierry Onkelinx > Statisticus / Statistician > > Vlaamse Overheid / Government of Flanders > INSTITUUT VOOR NATUUR- EN BOSONDERZOEK / RESEARCH INSTITUTE FOR NATURE AND > FOREST > Team Biometrie & Kwaliteitszorg / Team Biometrics & Quality Assurance > thierry.onkelinx at inbo.be > Havenlaan 88 bus 73, 1000 Brussel > *Postadres:* Koning Albert II-laan 15 bus 186, 1210 Brussel > *Poststukken die naar dit adres worden gestuurd, worden ingescand en > digitaal aan de geadresseerde bezorgd. Zo kan de Vlaamse overheid haar > dossiers volledig digitaal behandelen. Poststukken met de vermelding > ?vertrouwelijk? worden niet ingescand, maar ongeopend aan de geadresseerde > bezorgd.* > www.inbo.be > > > /////////////////////////////////////////////////////////////////////////////////////////// > To call in the statistician after the experiment is done may be no more > than asking him to perform a post-mortem examination: he may be able to say > what the experiment died of. ~ Sir Ronald Aylmer Fisher > The plural of anecdote is not data. ~ Roger Brinner > The combination of some data and an aching desire for an answer does not > ensure that a reasonable answer can be extracted from a given body of data. > ~ John Tukey > > /////////////////////////////////////////////////////////////////////////////////////////// > > <https://www.inbo.be> > > > Op ma 6 mei 2024 om 01:59 schreef Srinidhi Jayakumar via R-sig-mixed-models > <r-sig-mixed-models at r-project.org>: > > I am running a multilevel growth curve model to examine predictors of > social anhedonia (SA) trajectory through ages 12, 15 and 18. SA is a > continuous numeric variable. The age variable (Index1) has been coded as 0 > for age 12, 1 for age 15 and 2 for age 18. I am currently using a time > varying predictor, stress (LSI), which was measured at ages 12, 15 and 18, > to examine whether trajectory/variation in LSI predicts difference in SA > trajectory. LSI is a continuous numeric variable and was grand-mean > centered before using in the models. The data has been converted to long > format with SA in 1 column, LSI in the other, ID in another, and age in > another column. I used the code below to run my model using lmer. However, > I get the following error. Please let me know how I can solve this error. > Please note that I have 50% missing data in SA at age 12. > modelLSI_maineff_RE <- lmer(SA ~ Index1* LSI+ (1 + Index1+LSI |ID), data > LSIDATA, control = lmerControl(optimizer ="bobyqa"), REML=TRUE) > summary(modelLSI_maineff_RE) > Error: number of observations (=1080) <= number of random effects (=1479) > for term (1 + Index1 + LSI | ID); the random-effects parameters and the > residual variance (or scale parameter) are probably unidentifiable > > I did test the within-person variance for the LSI variable and the > within-person variance is significant from the Greenhouse-Geisser, > Hyunh-Feidt tests. > > I also tried control = lmerControl(check.nobs.vs.nRE = "ignore") which gave > me the following output. modelLSI_maineff_RE <- lmer(SA ~ Index1* LSI+ (1 + > Index1+LSI |ID), data = LSIDATA, control = lmerControl(check.nobs.vs.nRE > "ignore", optimizer ="bobyqa", check.conv.singular = .makeCC(action > "ignore", tol = 1e-4)), REML=TRUE) > > summary(modelLSI_maineff_RE) > Linear mixed model fit by REML. t-tests use Satterthwaite's method > ['lmerModLmerTest'] > Formula: SA ~ Index1 * LSI + (1 + Index1 + LSI | ID) > Data: LSIDATA > Control: lmerControl(check.nobs.vs.nRE = "ignore", optimizer = "bobyqa", > check.conv.singular = .makeCC(action = "ignore", tol = 1e-04)) > > REML criterion at convergence: 7299.6 > > Scaled residuals: > Min 1Q Median 3Q Max > -2.7289 -0.4832 -0.1449 0.3604 4.5715 > > Random effects: > Groups Name Variance Std.Dev. Corr > ID (Intercept) 30.2919 5.5038 > Index1 2.4765 1.5737 -0.15 > LSI 0.1669 0.4085 -0.23 0.70 > Residual 24.1793 4.9172 > Number of obs: 1080, groups: ID, 493 > > Fixed effects: > Estimate Std. Error df t value Pr(>|t|) > (Intercept) 24.68016 0.39722 313.43436 62.133 < 2e-16 *** > Index1 0.98495 0.23626 362.75018 4.169 3.83e-05 *** > LSI -0.05197 0.06226 273.85575 -0.835 0.4046 > Index1:LSI 0.09797 0.04506 426.01185 2.174 0.0302 * > Signif. codes: 0 ?? 0.001 ?? 0.01 ?? 0.05 ?.? 0.1 ? ? 1 > > Correlation of Fixed Effects: > (Intr) Index1 LSI > Index1 -0.645 > LSI -0.032 0.057 > Index1:LSI 0.015 0.037 -0.695 > > I am a little vary of the output still as the error states that I have > equal observations as the number of random effects (i.e., 3 observations > per ID and 3 random effects). Hence, I am wondering whether I can simplify > the model as either of the below models and choose the one with the > best-fit statistics: > > modelLSI2 <- lmer(SA ~ Index1* LSI+ (1 |ID)+ (Index1+LSI -1|ID),data > LSIDATA, control = lmerControl(optimizer ="bobyqa"), REML=TRUE) *OR* > > modelLSI3 <- lmer(SA ~ Index1* LSI+ (1+LSI |ID),data = LSIDATA, control > lmerControl(optimizer ="bobyqa"), REML=TRUE) [image: example of dataset] > <https://i.sstatic.net/JcRKS2C9.png> > > [[alternative HTML version deleted]] > > _______________________________________________ > R-sig-mixed-models at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-sig-mixed-models at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models > > >[[alternative HTML version deleted]]