[R-sig-ME] bug or numerical problem in nlme's corCAR1

Ferenci Tamas tamas.ferenci at medstat.hu
Thu Jan 25 22:17:55 CET 2018


Dear John,

That's a possible solution IF you realize something is wrong, but what
I find problematic is that one might not realize at all that such
measures are needed!

Tamas


2018. január 25., 19:18:40, írtad:

> Hi Ben,

> A possible solution would be to see whether the estimated
> autoregressive parameter is stuck at the start value and then try
> something like a bisection search. That's pretty crude and I bet there's a smarter way to do it.

> Best,
>  John

>> -----Original Message-----
>> From: Ben Bolker [mailto:bbolker at gmail.com]
>> Sent: Thursday, January 25, 2018 12:57 PM
>> To: Fox, John <jfox at mcmaster.ca>
>> Cc: Ferenci Tamas <tamas.ferenci at medstat.hu>; r-sig-mixed-models at r-
>> project.org
>> Subject: Re: [R-sig-ME] bug or numerical problem in nlme's corCAR1
>> 
>> The alarming part is the lack of any warning.  I don't know whether there's
>> any easy way to detect this case, though ...  FWIW the starting value has to
>> be above about 0.62 before it works
>> 
>> ff <- function(rhostart) {
>>   m <- lme(distance ~ agemos + factor(Sex),random = ~ 1 | Subject,
>>     cor=corCAR1(rhostart,form=~agemos|Subject),
>>     data = Orthodont)
>>   return(coef(m$modelStruct$corStruct,unconstrained=FALSE))
>> }
>> 
>> startvec <- seq(0.02,0.98,by=0.02)
>> estvec <- sapply(startvec,ff)
>> 
>> plot(startvec,estvec)
>> 
>> On Thu, Jan 25, 2018 at 12:40 PM, Fox, John <jfox at mcmaster.ca> wrote:
>> > Dear Tamas Farenci,
>> >
>> > You're mistaken: For the continuous first-order AR process, the unit of time
>> matters. Measuring time in months implies a much larger autocorrelation at
>> lag 1 than measuring time in years. As it turns out, 0.2 is a poor start values
>> for the former:
>> >
>> >> library(nlme)
>> >> lme(distance ~ age + factor(Sex),random = ~ 1 | Subject,
>> > +     cor=corCAR1(form=~age|Subject),data = Orthodont)
>> > Linear mixed-effects model fit by REML
>> >   Data: Orthodont
>> >   Log-restricted-likelihood: -218.6984
>> >   Fixed: distance ~ age + factor(Sex)
>> >       (Intercept)               age factor(Sex)Female
>> >        17.7214161         0.6594049        -2.3274848
>> >
>> > Random effects:
>> >  Formula: ~1 | Subject
>> >         (Intercept) Residual
>> > StdDev:    1.788899 1.454494
>> >
>> > Correlation Structure: Continuous AR(1)
>> >  Formula: ~age | Subject
>> >  Parameter estimate(s):
>> >       Phi
>> > 0.2418536
>> > Number of Observations: 108
>> > Number of Groups: 27
>> >
>> >> Orthodont$agemos <- Orthodont$age*12
>> >> lme(distance ~ agemos + factor(Sex),random = ~ 1 | Subject,
>> > +     cor=corCAR1(0.8, form=~agemos|Subject),data = Orthodont)
>> > Linear mixed-effects model fit by REML
>> >   Data: Orthodont
>> >   Log-restricted-likelihood: -221.1833
>> >   Fixed: distance ~ agemos + factor(Sex)
>> >       (Intercept)            agemos factor(Sex)Female
>> >       17.72141619        0.05495041       -2.32748480
>> >
>> > Random effects:
>> >  Formula: ~1 | Subject
>> >         (Intercept) Residual
>> > StdDev:    1.788899 1.454494
>> >
>> > Correlation Structure: Continuous AR(1)
>> >  Formula: ~agemos | Subject
>> >  Parameter estimate(s):
>> >       Phi
>> > 0.8884427
>> > Number of Observations: 108
>> > Number of Groups: 27
>> >
>> >> .8884427^12
>> > [1] 0.2418539
>> >
>> > Thus, the two solutions agree. I agree, however, that it's slightly
>> disconcerting that lme() can't overcome the poor start value.
>> >
>> > I hope this helps,
>> >  John
>> >
>> > -----------------------------
>> > John Fox, Professor Emeritus
>> > McMaster University
>> > Hamilton, Ontario, Canada
>> > Web: socialsciences.mcmaster.ca/jfox/
>> >
>> >
>> >
>> >
>> >> -----Original Message-----
>> >> From: R-sig-mixed-models [mailto:r-sig-mixed-models-bounces at r-
>> >> project.org] On Behalf Of Ferenci Tamas
>> >> Sent: Thursday, January 25, 2018 12:05 PM
>> >> To: r-sig-mixed-models at r-project.org
>> >> Subject: [R-sig-ME] bug or numerical problem in nlme's corCAR1
>> >>
>> >> Dear list members,
>> >>
>> >> Consider the following example (yes, I haven't centered age, corCAR1
>> >> is not necessarily needed here etc., so it is perhaps not the most
>> >> meaningful model, I use it just to show the problem):
>> >>
>> >> lme(distance ~ age + factor(Sex),random = ~ 1 | Subject,
>> >>    cor=corCAR1(form=~age|Subject),data = Orthodont)
>> >>
>> >> Everything works perfectly.
>> >>
>> >> Let's now multiply age, say, we measure it in months:
>> >>
>> >> Orthodont$agemos <- Orthodont$age*12
>> >> lme(distance ~ agemos + factor(Sex),random = ~ 1 | Subject,
>> >>     cor=corCAR1(form=~agemos|Subject),data = Orthodont)
>> >>
>> >> It shouldn't make any difference, but check the autocorrelation
>> coefficient!
>> >> It changed from 0.2418536 to 0.2... i.e. it stuck at its default
>> >> value, as if it was not optimized at all! (One can verify that it is
>> >> indeed the case, and 0.2 was not a coincidence by calling
>> >> lme(distance ~ agemos + factor(Sex),random = ~ 1 | Subject,
>> >> cor=corCAR1(0.1234,form=~agemos|Subject),data = Orthodont) which
>> will
>> >> return a coefficient of 0.1234 and so on.)
>> >>
>> >> What's going on...?
>> >>
>> >> Thank you in advance,
>> >> Tamas Ferenci
>> >>
>> >> _______________________________________________
>> >> R-sig-mixed-models at r-project.org mailing list
>> >> https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models
>> >
>> > _______________________________________________
>> > R-sig-mixed-models at r-project.org mailing list
>> > https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models



More information about the R-sig-mixed-models mailing list