[R-sig-ME] lme4: constrain sigma to 0

Vincent Dorie vjd4 at nyu.edu
Wed Feb 12 00:48:22 CET 2014


Any chance someone could write out the specifics of such a model? If I can wrap my head around it and its not too hard, I could try to throw it into blme.

On Feb 11, 2014, at 6:18 PM, Rolf Turner wrote:

> 
> Several millennia ago I put in a feature-request that the facility for constraining sigma to 0 be added.  So far, as far as I can tell, it hasn't been.
> 
> Apparently it is (very) difficult to add such a constraint due to the way that lmer approaches the maximization of the likelihood.  (This, rather than any intrinsic mathematical block to such a constraint.)
> 
> I wanted to be able to fit a fairly simple repeated measures model with the covariance over time being an "arbitrary" n-x-n positive definite matrix (where "n" is the number of time points).  This can't be done
> using lmer() unless one can constrain the "overall" variance to be zero,
> otherwise the diagonal of the covariance matrix is un-identifiable.
> 
> Since one cannot constrain sigma to be 0, one can't fit this model with lmer().  Bummer.
> 
> cheers,
> 
> Rolf Turner
> 
> On 12/02/14 11:25, Asaf Weinstein wrote:
>> Dear lme4 community (and Ben),
>> 
>> I am interested in obtaining estimates for the usual linear model but with
>> a known/ fixed value of residual variance.
>> When searching for an answer in the forum I came across this question by
>> Maya (machunsky at uni-mannheim.de), and it looks like there still isn't a
>> built-in method to obtain MLEs under constraints. Is that correct?
>> 
>> Thank you so much,
>> Asaf
>> 
>> 
>> On 21 November 2013 14:48, Ben Bolker <bbolker at gmail.com> wrote:
>> 
>>> On 13-11-21 12:42 PM, Maya Machunsky wrote:
>>>>  Dear Dr. Bolker,
>>>> 
>>>> I am using lmer to estimate fixed effects for exerimental data (in
>>>> Psychology). At the moment I am trying to run a model in which the
>>>> residual variance is fixed to 0 and I am wondering whether it is
>>>> possible to run such a model with lmer. I found messages from 2011 (a
>>>> discussion between you and Rolf Turner) according to which it was not
>>>> possible to constrain sigma to 0. Now I am asking myself whether it is
>>>> now with a new version of the lme4 package possible.
>>>> 
>>>> Thanks a lot in advance and
>>>> best regards,
>>>> Maya Machunsky
>>> 
>>>   No, still not possible (or at least not easy), because the
>>> residual variance is profiled out, so it doesn't enter directly
>>> into the calculations -- it's not a parameter you can set.
>>> 
>>>   You can sort of achieve this using blmer to set a 'point' prior
>>> on sigma (i.e. fix it at a specific value) -- but you can't set the
>>> residual variance to *exactly* zero.
>>> 
>>> library(lme4)
>>> ## fit model
>>> fm0 <- lmer(Reaction ~ Days + (1 | Subject), sleepstudy)
>>> library(blme)
>>> fm1 <- blmer(Reaction ~ Days + (1 | Subject), sleepstudy,
>>>        cov.prior=NULL,
>>>        resid.prior=point(0.0001))
>>> 
>>> sumfun <- function(fm) {
>>>     c(sd_Subject=unname(sqrt(unlist(VarCorr(fm)))),
>>>       sd_Residual=sigma(fm),
>>>       REMLdev=unname(deviance(fm)))
>>> 
>>> }
>>> cfun <- function(sigma=1) {
>>>     fm <- blmer(Reaction ~ Days + (1 | Subject), sleepstudy,
>>>                 cov.prior=NULL,
>>>                 resid.prior=point(sigma))
>>>     sumfun(fm)
>>> }
>>> svec <- c(10^seq(-5,2,by=0.25),20:60)
>>> sigmaprof <- rbind(sumfun(fm0),t(sapply(svec,cfun)))
>>> 
>>> sigmaprof <- as.data.frame(sigmaprof[order(sigmaprof[,"sd_Residual"]),])
>>> par(las=1,bty="l")
>>> 
>>> ## REML deviance vs. residual value -- LOG scale
>>> plot(REMLdev~sd_Residual,data=sigmaprof,type="b",log="xy")
>>> abline(v=sigma(fm0),col=2)
>>> ## leave out last point to improve scaling
>>> plot(sd_Subject~sd_Residual,data=sigmaprof[-30,],type="b",log="x")
>>> abline(v=sigma(fm0),col=2)
>>> 
>>> plot(REMLdev~sd_Residual,data=sigmaprof,
>>>     subset=REMLdev-min(REMLdev)<30,type="b",log="xy")
>>> 
>>> Compare with the likelihood profile:
>>> 
>>> pp <- profile(fm1)
>>> xyplot(pp)
>>> 
>>> 
>>> There *might* also be a way to do this by digging into the
>>> profiling machinery a bit more.
>>> 
>>>   As always, corrections and improvements are welcome.
>>> 
>>> _______________________________________________
>>> 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
>> 
> 
> _______________________________________________
> 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