#### Testing Examples --- related to the new "sigma = fixed" feature #### ================================================================ ## library(nlme,lib.loc=lib.loc) library(nlme) nlme:::doExtras() ## used below {when activated by the tester, e.g., MM..r} ## isSun <- Sys.info()[["sysname"]] == "SunOS" ##=== example 1 general linear model page 251 gls ML and LME ================ ## ex <- "ex1_gls_page251"; .pt <- proc.time() ## cat("\n example ", ex,"\n") sigma <- 2 cat("\nFixed sigma= ",sigma," estimation method 'ML'\n") t1.fix.ML.gls <- gls(distance ~ Sex *I(age-11), data = Orthodont, correlation = corSymm(form = ~1 | Subject), weights = varIdent(form = ~1 |age), control = glsControl(sigma = sigma), method = "ML") (s1M <- summary(t1.fix.ML.gls)) (a1M <- anova(t1.fix.ML.gls)) # sequential (a1Mm<- anova(t1.fix.ML.gls, type = "marginal")) ## t_{n} ^2 == F_{1,n}: stopifnot(all.equal(as.vector(s1M$tTable[,"t-value"] ^ 2), a1Mm[,"F-value"], tolerance = 1e-14), identical(2, sigma(t1.fix.ML.gls))) ## cat("\nFixed sigma= ",sigma," estimation method 'REML'\n") t1.fix.REML.gls <- gls(distance ~ Sex*I(age-11), data = Orthodont, correlation = corSymm(form = ~1 | Subject), weights = varIdent(form = ~1 |age), control = glsControl(sigma = sigma, maxIter = 1000, msMaxIter = 200), method = "REML") (s1R <- summary(t1.fix.REML.gls)) (a1R <- anova(t1.fix.REML.gls)) (a1Rm <- anova(t1.fix.REML.gls, type="marginal")) intervals(t1.fix.REML.gls) # now work (via 'apVar') ## t_{n} ^2 == F_{1,n}: stopifnot(all.equal(as.vector(s1R$tTable[,"t-value"] ^ 2), a1Rm[,"F-value"], tolerance = 1e-14)) cat("Time elapsed: ", (proc.time() - .pt)[1:3], "\n") ##=== example 2 linear mixed model page 147 lme ML and REML ================ ex <- "ex2_lme_page147"; .pt <- proc.time() ## cat("\n example ", ex,"\n") ## method <- "ML" sigma <- 1 cat("\nFixed sigma= ",sigma," estimation method ", method,"\n") t1.fix.ML.lme <- lme(distance ~ I(age-11), data = Orthodont, control = lmeControl(sigma = sigma), method = method) summary (t1.fix.ML.lme) anova (t1.fix.ML.lme) intervals(t1.fix.ML.lme) stopifnot(sigma(t1.fix.ML.lme) == 1) method <- "REML" cat("\nFixed sigma= ",sigma," estimation method ", method,"\n") t1.fix.REML.lme <- lme(distance ~ I(age-11), data = Orthodont, control = lmeControl(sigma = sigma), method = method) summary (t1.fix.REML.lme) anova (t1.fix.REML.lme) intervals(t1.fix.REML.lme) cat("Time elapsed: ", (proc.time() - .pt)[1:3], "\n") ##=== example 3 general non-linear model page 402/ page 512 gnls ls ======== ex <- "ex3_gnls_page402"; .pt <- proc.time() ## cat("\n example ", ex,"\n") ## method <- "LS" sigma <- 1 cat("\nFixed sigma= ",sigma," estimation method ", method,"\n") t1.fix.gnls <- gnls( rate ~SSasympOff(pressure, Asym, lrc, c0), data = Dialyzer, params = list(Asym + lrc ~ QB, c0 ~ 1), start = c(53.6,8.6,0.51,-0.26, 0.225), control = gnlsControl(sigma = 1)) stopifnot(is.null(t1.fix.gnls$apVar)) ## as is has *no* varying ranef-parameters summary (t1.fix.gnls) anova (t1.fix.gnls) cat("Time elapsed: ", (proc.time() - .pt)[1:3], "\n"); .pt <- proc.time() t1.fix.w <- update(t1.fix.gnls, weights = varPower()) summary (t1.fix.w) anova (t1.fix.w) (it1fw <- intervals(t1.fix.w)) stopifnot(all.equal(it1fw$varStruct["power",], c(lower = 0.33147895, est. = 0.36474755, upper = 0.39801614), tol = 1e-6)) cat("Time elapsed: ", (proc.time() - .pt)[1:3], "\n") ##=== example 4 mixed non-linear model page 363 nlme ======================= ex <- "ex4_nlme_page363"; .pt <- proc.time() ## cat("\n example ", ex,"\n") method <- "ML" cat("\nVariable sigma; estimation method ", method,"\n") t1.ML.nlme <- nlme(conc ~ SSfol(Dose, Time, lKe, lKa, lCl), data = Theoph, fixed = lKe + lKa + lCl ~ 1, method = method, start = c(-2.4,0.45,-3.2)) ## default control, no fixed sigma t1.ML.nlme$numIter # 23 (32-bit) stopifnot(all.equal(as.vector(t1.ML.nlme$sigma), 0.6818253, tol = 1e-5)) sigma <- 0.7 cat("\nFixed sigma= ",sigma," estimation method ", method,"\n") set.seed(44) system.time(# *not* fast : t1.fix.ML.nlme <- nlme(conc ~ SSfol(Dose, Time, lKe, lKa, lCl), data = Theoph, fixed = lKe + lKa + lCl ~ 1, method = method, start = c(-2.4,0.45,-3.2), control = nlmeControl(sigma=sigma, maxIter = 200), verbose = interactive()) ) t1.fix.ML.nlme$numIter # 58 or 61 (and now 22).. (sM4 <- summary(t1.fix.ML.nlme)) (aM4 <- anova (t1.fix.ML.nlme)) t1.fix.ML.nlme$apVar ## "Non-positive definite approximate variance-covariance" ##(iM4 <- intervals(t1.fix.ML.nlme)) stopifnot( all.equal(fixef(t1.fix.ML.nlme), c(lKe = -2.432512, lKa = 0.450163, lCl = -3.2144713), tol= 8e-6) , all.equal(sM4$tTable[,"Std.Error"], # aarch64/linux gave 5.915e-5 c(lKe = 0.0640155, lKa = 0.196058, lCl = 0.0808379), tol = 1e-4) , all.equal(aM4[,"F-value"], c(65.439, 9.09557, 1581.21), tol = 1e-4) # ATLAS had 7.86e-05 ) ## ## REML method if(nlme:::doExtras()) { ## -- takes 2--3 minutes method <- "REML" sigma <- 0.7 cat("\nFixed sigma= ", sigma," estimation method ", method,"\n") ## ## only converges when tolerance is not small (and still takes long!) : t1.fix.REML.nlme <- update(t1.fix.ML.nlme, method = method, control = nlmeControl(tolerance = 0.0005, sigma=sigma, pnlsMaxIter = 20, # not just 7 maxIter = 1000), verbose = interactive()) cat(" -> numIter: ", t1.fix.REML.nlme$numIter, "\n") # 380 or so print(summary(t1.fix.REML.nlme)) print( anova(t1.fix.REML.nlme)) it1.fRn <- try( intervals(t1.fix.REML.nlme) ) ## cannot get .. Non-positive ... }# only if(nlme:::doExtras()) cat("Time elapsed: ", (proc.time() - .pt)[1:3], "\n") ##=== example 5 mixed non-linear model page 358 nlme ======================= ## ## ex <- "ex5_nlme_page365"; .pt <- proc.time() cat("\n example ", ex,"\n") ## method <- "ML" sigma <- 1 cat("\nFixed sigma= ",sigma," estimation method ", method,"\n") t5.fix.ML.nlme <- nlme(circumference ~ SSlogis(age,Asym,xmid,scal), data = Orange, fixed = Asym + xmid + scal ~ 1, method = method, start = c(192,727,356), control = nlmeControl(sigma = sigma)) (sM5 <- summary(t5.fix.ML.nlme)) (aM5 <- anova (t5.fix.ML.nlme)) (t5.fix.ML.nlme$apVar) ## Non-positive definite [FIXME?] stopifnot( all.equal(fixef(t5.fix.ML.nlme), c(Asym= 192.79023, xmid= 726.36351, scal= 355.62941), tol= 1e-7) , all.equal(sM5$tTable[,"Std.Error"], c(Asym= 14.1688, xmid= 35.3425, scal=16.3637), tol = 5e-5) , all.equal(aM5[,"F-value"], c(4879.5, 208.534, 472.316), tol = 5e-5) ) ## REML method method <-"REML" cat("\nFixed sigma= ",sigma," estimation method ", method,"\n") t5.fix.REML.nlme <- update(t5.fix.ML.nlme, method = method, control = nlmeControl(sigma=sigma), verbose = interactive()) ## converges very quickly (when started from ML!) (sR5 <- summary(t5.fix.REML.nlme)) (aR5 <- anova (t5.fix.REML.nlme)) ( t5.fix.REML.nlme$apVar) ## Non-positive definite [FIXME?] stopifnot( ## ML and REML : fixed effects are very close all.equal(fixef(t5.fix.REML.nlme), fixef(t5.fix.ML.nlme), tol = 1e-6) , all.equal(sR5$tTable[,"Std.Error"], c(Asym= 13.548, xmid= 33.794, scal=15.6467), tol = 5e-5) , all.equal(aR5[,"F-value"], c(5336.29, 228.076, 516.594), tol = 5e-5) ) cat("Time elapsed: ", (proc.time() - .pt)[1:3], "\n") ##=== example 6 linear mixed model page 177 lme ML and REML ================ ## ex <- "ex6_lme_page177"; .pt <- proc.time() cat("\n example ", ex,"\n") ## method <- "ML" sigma <- 1 cat("\nFixed sigma= ",sigma," estimation method ", method,"\n") t6.fix.ML.lme <- lme(distance ~ I(age-11), data = Orthodont, weights = varIdent(form = ~1 | Sex), method = method, control = lmeControl(sigma = sigma)) (sM6 <- summary (t6.fix.ML.lme)) (aM6 <- anova (t6.fix.ML.lme)) (iM6 <- intervals(t6.fix.ML.lme)) stopifnot( all.equal(fixef(t6.fix.ML.lme), c("(Intercept)"= 24.009565, "I(age - 11)"= 0.64760432), tol= 1e-7) , all.equal(sM6$tTable[,"Std.Error"], c("(Intercept)"= 0.426561, "I(age - 11)"= 0.066832), tol = 5e-5) , all.equal(aM6[,"F-value"], c(3162.47, 93.8969), tol = 5e-5) , all.equal(iM6$varStruct["Female",], ## Win 32 c(lower = 0.51230063, ## 0.51226722 est. = 0.65065925, ## 0.65065925 upper = 0.82638482), ## 0.82643872 ## was tol = if(isSun) 4e-4 else 6e-5)#= 4.39e-5 tol = 4e-4) ## seen 5.35e-5 (Sparc Sol., no long double); later, 6e-5 was not ok ## Windows 64bit w/ OpenBLAS 0.2.18 gave 5.721e-05 (Avi A) ## Win-builder (i386) gave 9.584157e-05 ) ##------------- method <- "REML" sigma <- 1 cat("\nFixed sigma= ",sigma," estimation method ", method,"\n") t6.fix.REML.lme <- lme(distance ~I(age-11), data = Orthodont, weights = varIdent(form = ~1 | Sex), method = method, control = lmeControl(sigma = sigma)) (sR6 <- summary (t6.fix.REML.lme)) (aR6 <- anova (t6.fix.REML.lme)) (iR6 <- intervals(t6.fix.REML.lme)) stopifnot( all.equal(fixef(t6.fix.REML.lme), c("(Intercept)"= 24.010662, "I(age - 11)"= 0.64879966), tol= 1e-7) , all.equal(sR6$tTable[,"Std.Error"], c("(Intercept)"= 0.436365, "I(age - 11)"= 0.0687549), tol = 5e-5) , all.equal(aR6[,"F-value"], c(3019.86, 89.046), tol = 5e-5) , all.equal(iR6$varStruct["Female",], ## Win 32 c(lower = 0.51774671, ## 0.51778038 est. = 0.66087796, ## 0.66087807 upper = 0.8435779), ## 0.84352331 ## was tol = if(isSun) 4e-4 else 5e-5)# 4.37e-5 tol = 4e-4) # was 5.63e-5 without long doubles. ) cat("Time elapsed: ", (proc.time() - .pt)[1:3], "\n") ##=== example 7 linear mixed model page 172 lme ML and REML ================ ex <- "ex7_lme_page172"; .pt <- proc.time() cat("\n example ", ex,"\n") method <- "ML" sigma <- 1 cat("\nFixed sigma= ",sigma," estimation method ", method,"\n") set.seed(107) t7.fix.ML.lme <- lme( current ~ voltage + I(voltage^2), data = Wafer, random = list(Wafer = pdDiag(~voltage + I(voltage^2)), Site = pdDiag(~voltage + I(voltage^2)) ), method = method, control = lmeControl(sigma = 1, ## nlminb: false convergence on 32-bit msVerbose = TRUE, opt = "optim")) (ss7 <- summary(t7.fix.ML.lme)) (aa7 <- anova(t7.fix.ML.lme)) stopifnot( all.equal(fixef(t7.fix.ML.lme), c("(Intercept)" = -4.4611657, "voltage" = 5.9033709, "I(voltage^2)" = 1.1704027), tol = 1e-7) , all.equal(ss7$tTable[,"Std.Error"], c("(Intercept)" = 0.446086, "voltage" = 0.608571, "I(voltage^2)"= 0.187459), tol = 5e-5) , all.equal(aa7[,"F-value"], c(2634.2137, 8851.0513, 38.981463), tol = 5e-5) ) ##------------------------------------------------------ REML --- method <- "REML" cat("\nFixed sigma= ",sigma," estimation method ", method,"\n") ## This had 'false convergence' on Solaris using nlminb, and ## optim found a portable answer t7.fix.REML.lme <- lme( current ~ voltage + I(voltage^2), data = Wafer, random = list(Wafer = pdDiag(~voltage + I(voltage^2)), Site = pdDiag(~voltage + I(voltage^2)) ), control = lmeControl(sigma = 1, opt = "optim"), method = method) (sR7 <- summary(t7.fix.REML.lme)) (aR7 <- anova(t7.fix.REML.lme)) stopifnot( all.equal(fixef(t7.fix.REML.lme), fixef(t7.fix.ML.lme), ## should not change much from ML to REML ! tol = 1e-6) , all.equal(sR7$tTable[,"Std.Error"], c("(Intercept)" = 0.44441, "voltage" = 0.606321, "I(voltage^2)"= 0.186754), tol = 5e-5) , all.equal(aR7[,"F-value"], c(2584.9515, 8885.0, 39.2760), tol = 1e-6) ) cat("Time elapsed: ", (proc.time() - .pt)[1:3], "\n") ##=== example 8 mixed non-linear model page 364 nlme ======================= ## ex <- "ex8_nlme_page364"; .pt <- proc.time() ## cat("\n example ", ex,"\n") method <- "ML" sigma <- 1 cat("\nFixed sigma= ",sigma," estimation method ", method,"\n") set.seed(8^2) t8.fix.ML.nlme <- nlme(conc ~ SSfol(Dose, Time, lKe, lKa, lCl), data = Theoph, fixed = lKe + lKa + lCl ~ 1, random = pdDiag(lKe + lKa + lCl ~ 1), method = method, start = c(-2.4,0.5,-3.3), control = nlmeControl(sigma = 1)) (sM8 <- summary(t8.fix.ML.nlme)) (aM8 <- anova (t8.fix.ML.nlme)) stopifnot( all.equal(fixef(t8.fix.ML.nlme), c(lKe = -2.4554999, lKa = 0.44870292, lCl = -3.2296957), tol = 1e-7) , all.equal(sM8$tTable[,"Std.Error"], c(lKe = 0.0739269, lKa = 0.197524, lCl = 0.0683049), tol = 5e-5) , all.equal(aM8[,"F-value"], c(10.9426, 17.4101, 2235.73), tol = 5e-5) ) ## REML method method <- "REML" cat("\nFixed sigma= ",sigma," estimation method ", method,"\n") t8.fix.REML.nlme <- update(t8.fix.ML.nlme, method = method) (sR8 <- summary(t8.fix.REML.nlme)) (aR8 <- anova (t8.fix.REML.nlme)) stopifnot( all.equal(fixef(t8.fix.REML.nlme), fixef(t8.fix.ML.nlme), ## should not change much from ML to REML ! tol = 1e-6) , all.equal(sR8$tTable[,"Std.Error"], c(lKe = 0.073082, lKa = 0.195266, lCl = 0.0675243), tol = 5e-5) , all.equal(aR8[,"F-value"], c(11.1971, 17.815, 2287.72), tol = 5e-5) ) cat("Time elapsed: ", (proc.time() - .pt)[1:3], "\n") ##=== example 9 mixed non-linear model page 365 nlme ======================= ## ex <- "ex9_nlme_page365"; .pt <- proc.time() ## cat("\n example ", ex,"\n") method <- "ML" sigma <- 1 cat("\nFixed sigma= ",sigma," estimation method ", method,"\n") set.seed(909) t9.fix.ML.nlme <- nlme(conc ~ SSfol(Dose, Time, lKe, lKa, lCl), data = Theoph, fixed = lKe + lKa + lCl ~ 1, random = pdDiag( lKa + lCl ~ 1), method = method, start = c(-2.4,0.5,-3.3), control = nlmeControl(sigma = 1)) (sM9 <- summary(t9.fix.ML.nlme)) (aM9 <- anova (t9.fix.ML.nlme)) stopifnot( all.equal(fixef(t9.fix.ML.nlme), c(lKe = -2.4555745, lKa = 0.44894103, lCl = -3.2297273), tol = 1e-7) , all.equal(sM9$tTable[,"Std.Error"], c(lKe = 0.0739266, lKa = 0.197459, lCl = 0.0683082), tol = 5e-5) , all.equal(aM9[,"F-value"], c(10.9669, 17.4108, 2235.56), tol = 5e-5) ) ## REML method method <- "REML" cat("\nFixed sigma= ",sigma," estimation method ", method,"\n") t9.fix.REML.nlme <- update(t9.fix.ML.nlme, method = method) (sR9 <- summary(t9.fix.REML.nlme)) (aR9 <- anova (t9.fix.REML.nlme)) stopifnot( all.equal(fixef(t9.fix.REML.nlme), fixef(t9.fix.ML.nlme), ## should not change much from ML to REML ! tol = 1e-6) , all.equal(sR9$tTable[,"Std.Error"], c(lKe = 0.0730817, lKa = 0.195202, lCl = 0.0675275), tol = 5e-5) , all.equal(aR9[,"F-value"], c(11.2219, 17.8157, 2287.55), tol = 5e-5) ) cat("Time elapsed: ", (proc.time() - .pt)[1:3], "\n")