# Re: [R] Extracting elements from an reStruct

From: Andrew Perrin (clists@perrin.socsci.unc.edu)
Date: Wed 21 May 2003 - 05:58:04 EST

```Message-id: <Pine.LNX.4.53.0305201557140.29959@perrin.socsci.unc.edu>

```

Thanks to Renaud Lancelot, here's a working solution:

icc<-function(x) {
v<-as.numeric(VarCorr(x)[,2])
v<-as.numeric(na.omit(v))
v^2 / sum(v^2)
}

Best,
Andy

----------------------------------------------------------------------
Andrew J Perrin - http://www.unc.edu/~aperrin
Assistant Professor of Sociology, U of North Carolina, Chapel Hill
clists@perrin.socsci.unc.edu * andrew_perrin (at) unc.edu

On Tue, 20 May 2003, Renaud Lancelot wrote:

> Andrew Perrin wrote:
> > Sorry if this is obvious, but my S skills aren't great and I haven't been
> > able to find it documented anywhere.
> >
> > I want to write a new function for use with lme objects; the function will
> > simply calculate an ICC (aka "rho") for each level of a mixed-effects
> > model. What I need for this is pretty simple:
> >
> > (c(var1..varn, residual)) / sum(c(var1..varn, residual))
> >
> > where var1..varn are the variances of the intercepts of each level's
> > equation, and residual is the residual variance. The problem is getting
> > access to var1..varn (or, as R generally reports it, sd1..sdn)
> > programmatically. I can get the residual standard deviation with:
> >
> > print(model\$sigma)
> >
> > and I can view the standard deviations with:
> >
> > summary(model\$modelStruct\$lmeStruct)
> >
> > But I can't figure out how to get at the standard deviations without the
> >
> > Thanks-
> > Andy Perrin
> >
> > ----------------------------------------------------------------------
> > Andrew J Perrin - http://www.unc.edu/~aperrin
> > Assistant Professor of Sociology, U of North Carolina, Chapel Hill
> > clists@perrin.socsci.unc.edu * andrew_perrin (at) unc.edu
> >
> > ______________________________________________
> > R-help@stat.math.ethz.ch mailing list
> > https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> >
>
> Here is an example:
>
> > library(nlme)
> > data(Orthodont)
> > fm <- lme(distance ~ age + Sex, data = Orthodont, random = ~ 1)
> > summary(fm)
> [...]
> Random effects:
> Formula: ~1 | Subject
> (Intercept) Residual
> StdDev: 1.807425 1.431592
> [...]
>
> > ## std dev.
> > fm\$sigma
> [1] 1.431592
>
> > ## var-cov
> > VarCorr(fm)
> Subject = pdLogChol(1)
> Variance StdDev
> (Intercept) 3.266784 1.807425
> Residual 2.049456 1.431592
>
> > ## variance components
> > v <- sqrt(as.numeric(VarCorr(fm)[,1]))
> > v
> [1] 1.807425 1.431592
> > v/sum(v)
> [1] 0.5580165 0.4419835
>
> Best,
>
> Renaud
>
> --
> Dr Renaud Lancelot, vétérinaire
> Programme Productions Animales