This is due to a bias correction term; it's documented in ?summary.lme
.
adjustSigma: an optional logical value. If ‘TRUE’ and the estimation method used to obtain ‘object’ was maximum likelihood, the residual standard error is multiplied by sqrt(nobs/(nobs - npar)), converting it to a REML-like estimate. This argument is only used when a single fitted object is passed to the function. Default is ‘TRUE’.
If you look inside nlme:::summary.lme
(which is the method used to generate the summary of an nlme
object as well, since it has class c("nlme", "lme")
), you see:
...
stdFixed <- sqrt(diag(as.matrix(object$varFix)))
...
if (adjustSigma && object$method == "ML")
stdFixed <- stdFixed * sqrt(object$dims$N/(object$dims$N -
length(stdFixed)))
That is, the standard error is being scaled by sqrt(n/(n-p))
where n
is the number of observations and p
the number of fixed-effect parameters. Let's check this out:
library(nlme)
fm1 <- nlme(height ~ SSasymp(age, Asym, R0, lrc),
data = Loblolly,
fixed = Asym + R0 + lrc ~ 1,
random = Asym ~ 1,
start = c(Asym = 103, R0 = -8.5, lrc = -3.3))
summary(fm1)$tTable[,"Std.Error"]
## Asym R0 lrc
## 2.46169512 0.31795045 0.03427017
nrow(Loblolly) ## 84
sqrt(diag(vcov(fm1)))*sqrt(84/(84-3))
## Asym R0 lrc
## 2.46169512 0.31795045 0.03427017
I have to admit that I found the answer in the code and only then looked back to see that it was perfectly clearly stated in the documentation ...