[R] VarComp in R

Douglas Bates bates at stat.wisc.edu
Wed Jul 18 13:58:57 CEST 2001


Richard Scott <rscott at rochester.rr.com> writes:

> How do I do a Variance Components Analysis?
> 
> Example Problem
>    Given: A gage study is run with three randomly selected OPERATORS,
> two randomly selected FIXTURES and five randomly selected PARTS. All
> possible combinations are studied (full factorial or fully crossed
> experiment). The response is some measurement take for each of the 30
> combinations.
> 
>    How do I use R to find an estimate for the contribution each factor
> makes to the overall measurement variation? In other words how do I do a
> Variance Components analysis in R?
> 
> The model is
> Expected(Var(Measurements)) = Var(due to OPERATORS) + Var(due to
> FIXTURES) + Var(due to PARTS)+Var(due to NOISE)

You can do this with lme but, as I mentioned in our private
correspondence, lme is better designed for nested random effects than
for crossed random effects like this.  You need to use the pdIdent
form of the variance-covariance matrix on the matrix of indicator
columns, created with formulas like ~ PARTS - 1, and combine those
with pdBlocked.

Do you really have a fully crossed design with random effects?  It
seems strange to pick the PART at random then reuse that particular
part 6 times.

Anyway, here is how you would do it.

> gage <- data.frame(OPERATORS = gl(3, 1, 30), FIXTURES = gl(2, 3, 30),
+    PARTS = gl(5, 6, 30))
> summary(gage)
 OPERATORS FIXTURES PARTS
 1:10      1:15     1:6  
 2:10      2:15     2:6  
 3:10               3:6  
                    4:6  
                    5:6  
> gage[1:10,]
   OPERATORS FIXTURES PARTS
1          1        1     1
2          2        1     1
3          3        1     1
4          1        2     1
5          2        2     1
6          3        2     1
7          1        1     2
8          2        1     2
9          3        1     2
10         1        2     2
> gage$Grp <- gl(1,1,30)     # trivial factor representing a single group
> # create the simulated random effects
> Op <- rnorm(3, 0, 1); Fix <- rnorm(2, 0, 2); Par <- rnorm(5, 0, 0.5)
> attach(gage)
> gage$Meas <- Op[OPERATORS] + Fix[FIXTURES] + Par[PARTS] + rnorm(30, 12, 0.3)
> detach()
> gr <- groupedData(Meas ~ 1 | Grp, gage)
> fm <- lme(Meas ~ 1, data = gr,
+           random = pdBlocked(list(pdIdent(~ OPERATORS - 1),
+                                   pdIdent(~ FIXTURES - 1),
+                                   pdIdent(~ PARTS - 1))))
> fm
Linear mixed-effects model fit by REML
  Data: gr 
  Log-restricted-likelihood: -13.95199
  Fixed: Meas ~ 1 
(Intercept) 
   12.73601 

Random effects:
 Composite Structure: Blocked

 Block 1: OPERATORS1, OPERATORS2, OPERATORS3
 Formula: ~OPERATORS - 1 | Grp
 Structure: Multiple of an Identity
        OPERATORS1 OPERATORS2 OPERATORS3
StdDev:  0.5424059  0.5424059  0.5424059

 Block 2: FIXTURES1, FIXTURES2
 Formula: ~FIXTURES - 1 | Grp
 Structure: Multiple of an Identity
        FIXTURES1 FIXTURES2
StdDev:  1.723611  1.723611

 Block 3: PARTS1, PARTS2, PARTS3, PARTS4, PARTS5
 Formula: ~PARTS - 1 | Grp
 Structure: Multiple of an Identity
           PARTS1    PARTS2    PARTS3    PARTS4    PARTS5 Residual
StdDev: 0.3006655 0.3006655 0.3006655 0.3006655 0.3006655 0.245659

Number of Observations: 30
Number of Groups: 1 
> VarCorr(fm)
Grp = pdIdent(OPERATORS - 1), pdIdent(FIXTURES - 1), pdIdent(PARTS - 1) 
           Variance   StdDev   
OPERATORS1 0.29420413 0.5424059
OPERATORS2 0.29420413 0.5424059
OPERATORS3 0.29420413 0.5424059
FIXTURES1  2.97083530 1.7236111
FIXTURES2  2.97083530 1.7236111
PARTS1     0.09039977 0.3006655
PARTS2     0.09039977 0.3006655
PARTS3     0.09039977 0.3006655
PARTS4     0.09039977 0.3006655
PARTS5     0.09039977 0.3006655
Residual   0.06034835 0.2456590

-- 
Douglas Bates                            bates at stat.wisc.edu
Statistics Department                    608/262-2598
University of Wisconsin - Madison        http://www.stat.wisc.edu/~bates/
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list