Reputation: 9763
I am trying to extract the fixed effect Intercept (1.807425) and Residual (1.431592) from an nlme model, but nothing in the structure seems to have these values, despite the fact they show up in the summary. How can I get them?
library(nlme)
fm2 <- lme(distance ~ age + Sex, data = Orthodont, random = ~ 1)
summary(fm2)
> summary(fm2)
Linear mixed-effects model fit by REML
Data: Orthodont
AIC BIC logLik
447.5125 460.7823 -218.7563
Random effects:
Formula: ~1 | Subject
(Intercept) Residual
StdDev: 1.807425 1.431592
Fixed effects: distance ~ age + Sex
Value Std.Error DF t-value p-value
(Intercept) 17.706713 0.8339225 80 21.233044 0.0000
age 0.660185 0.0616059 80 10.716263 0.0000
SexFemale -2.321023 0.7614168 25 -3.048294 0.0054
Correlation:
(Intr) age
age -0.813
SexFemale -0.372 0.000
Standardized Within-Group Residuals:
Min Q1 Med Q3 Max
-3.74889609 -0.55034466 -0.02516628 0.45341781 3.65746539
Number of Observations: 108
Number of Groups: 27
> str(summary(fm2))
List of 22
$ modelStruct :List of 1
..$ reStruct:List of 1
.. ..$ Subject:Classes 'pdLogChol', 'pdSymm', 'pdMat' atomic [1:1] 0.233
.. .. .. ..- attr(*, "formula")=Class 'formula' language ~1
.. .. .. .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
.. .. .. ..- attr(*, "Dimnames")=List of 2
.. .. .. .. ..$ : chr "(Intercept)"
.. .. .. .. ..$ : chr "(Intercept)"
.. ..- attr(*, "settings")= num [1:4] 1 1 0 4
.. ..- attr(*, "class")= chr "reStruct"
.. ..- attr(*, "plen")= Named int 1
.. .. ..- attr(*, "names")= chr "Subject"
..- attr(*, "settings")= num [1:4] 1 0 1 4
..- attr(*, "class")= chr [1:3] "lmeStructInt" "lmeStruct" "modelStruct"
..- attr(*, "pmap")= logi [1, 1] TRUE
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : NULL
.. .. ..$ : chr "reStruct"
..- attr(*, "fixedSigma")= logi FALSE
$ dims :List of 5
..$ N : int 108
..$ Q : int 1
..$ qvec : Named num [1:3] 1 0 0
.. ..- attr(*, "names")= chr [1:3] "Subject" "" ""
..$ ngrps: Named int [1:3] 27 1 1
.. ..- attr(*, "names")= chr [1:3] "Subject" "X" "y"
..$ ncol : Named num [1:3] 1 3 1
.. ..- attr(*, "names")= chr [1:3] "Subject" "" ""
$ contrasts :List of 1
..$ Sex: num [1:2, 1] 0 1
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:2] "Male" "Female"
.. .. ..$ : chr "Female"
$ coefficients:List of 2
..$ fixed : Named num [1:3] 17.71 0.66 -2.32
.. ..- attr(*, "names")= chr [1:3] "(Intercept)" "age" "SexFemale"
..$ random:List of 1
.. ..$ Subject: num [1:27, 1] -1.7 -1.7 -1.38 -1.16 -1.05 ...
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : chr [1:27] "M16" "M05" "M02" "M11" ...
.. .. .. ..$ : chr "(Intercept)"
$ varFix : num [1:3, 1:3] 0.6954 -0.0417 -0.2362 -0.0417 0.0038 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:3] "(Intercept)" "age" "SexFemale"
.. ..$ : chr [1:3] "(Intercept)" "age" "SexFemale"
$ sigma : num 1.43
$ apVar : num [1:2, 1:2] 0.026925 -0.000981 -0.000981 0.00625
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:2] "reStruct.Subject" "lSigma"
.. ..$ : chr [1:2] "reStruct.Subject" "lSigma"
..- attr(*, "Pars")= Named num [1:2] 0.592 0.359
.. ..- attr(*, "names")= chr [1:2] "reStruct.Subject" "lSigma"
..- attr(*, "natural")= logi TRUE
$ logLik : num -219
$ numIter : NULL
$ groups :'data.frame': 108 obs. of 1 variable:
..$ Subject: Ord.factor w/ 27 levels "M16"<"M05"<"M02"<..: 15 15 15 15 3 3 3 3 7 7 ...
$ call : language lme.formula(fixed = distance ~ age + Sex, data = Orthodont, random = ~1)
$ terms :Classes 'terms', 'formula' language distance ~ age + Sex
.. ..- attr(*, "variables")= language list(distance, age, Sex)
.. ..- attr(*, "factors")= int [1:3, 1:2] 0 1 0 0 0 1
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : chr [1:3] "distance" "age" "Sex"
.. .. .. ..$ : chr [1:2] "age" "Sex"
.. ..- attr(*, "term.labels")= chr [1:2] "age" "Sex"
.. ..- attr(*, "order")= int [1:2] 1 1
.. ..- attr(*, "intercept")= int 1
.. ..- attr(*, "response")= int 1
.. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
.. ..- attr(*, "predvars")= language list(distance, age, Sex)
.. ..- attr(*, "dataClasses")= Named chr [1:3] "numeric" "numeric" "factor"
.. .. ..- attr(*, "names")= chr [1:3] "distance" "age" "Sex"
$ method : chr "REML"
$ fitted : num [1:108, 1:2] 23 24.3 25.6 26.9 23 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:108] "1" "2" "3" "4" ...
.. ..$ : chr [1:2] "fixed" "Subject"
$ residuals : Named num [1:5] -3.7489 -0.5503 -0.0252 0.4534 3.6575
..- attr(*, "names")= chr [1:5] "Min" "Q1" "Med" "Q3" ...
$ fixDF :List of 2
..$ X : Named num [1:3] 80 80 25
.. ..- attr(*, "names")= chr [1:3] "(Intercept)" "age" "SexFemale"
..$ terms: Named num [1:3] 80 80 25
.. ..- attr(*, "names")= chr [1:3] "(Intercept)" "age" "Sex"
..- attr(*, "assign")=List of 3
.. ..$ (Intercept): int 1
.. ..$ age : int 2
.. ..$ Sex : int 3
..- attr(*, "varFixFact")= num [1:3, 1:3] 0.3741 -0.6777 0.3102 0 0.0616 ...
$ na.action : NULL
$ data :Classes ‘nfnGroupedData’, ‘nfGroupedData’, ‘groupedData’ and 'data.frame': 108 obs. of 4 variables:
..$ distance: num [1:108] 26 25 29 31 21.5 22.5 23 26.5 23 22.5 ...
..$ age : num [1:108] 8 10 12 14 8 10 12 14 8 10 ...
..$ Subject : Ord.factor w/ 27 levels "M16"<"M05"<"M02"<..: 15 15 15 15 3 3 3 3 7 7 ...
..$ Sex : Factor w/ 2 levels "Male","Female": 1 1 1 1 1 1 1 1 1 1 ...
..- attr(*, "outer")=Class 'formula' language ~Sex
.. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
..- attr(*, "formula")=Class 'formula' language distance ~ age | Subject
.. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
..- attr(*, "labels")=List of 2
.. ..$ x: chr "Age"
.. ..$ y: chr "Distance from pituitary to pterygomaxillary fissure"
..- attr(*, "units")=List of 2
.. ..$ x: chr "(yr)"
.. ..$ y: chr "(mm)"
..- attr(*, "FUN")=function (x)
.. ..- attr(*, "source")= chr "function (x) max(x, na.rm = TRUE)"
..- attr(*, "order.groups")= logi TRUE
$ corFixed : num [1:3, 1:3] 1 -0.813 -0.372 -0.813 1 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:3] "(Intercept)" "age" "SexFemale"
.. ..$ : chr [1:3] "(Intercept)" "age" "SexFemale"
$ tTable : num [1:3, 1:5] 17.7067 0.6602 -2.321 0.8339 0.0616 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:3] "(Intercept)" "age" "SexFemale"
.. ..$ : chr [1:5] "Value" "Std.Error" "DF" "t-value" ...
$ BIC : num 461
$ AIC : num 448
- attr(*, "class")= chr [1:2] "summary.lme" "lme"
- attr(*, "units")=List of 2
..$ x: chr "(yr)"
..$ y: chr "(mm)"
- attr(*, "labels")=List of 2
..$ x: chr "Age"
..$ y: chr "Distance from pituitary to pterygomaxillary fissure"
- attr(*, "verbose")= logi FALSE
- attr(*, "oClass")= chr "lme"
Upvotes: 0
Views: 1198
Reputation: 25854
You are best to use the extractor functions for this.
To get the fixed effects and residuals use fixef(fm2)
and resid(fm2)
, respectively.
However, these are not the numbers you state in your question, that is the sd of the RE. To get the variance and correlation of the RE compenents you can use VarCorr(fm2)
(note that VarCorr
returns a character matrix)
For the residual variance you should try fm2$sigma
Upvotes: 2