Nothing
library(nlme)
is64bit <- .Machine$sizeof.pointer == 8
options(digits = 10)# <- see more, as we have *no* *.Rout.save file here
## https://stat.ethz.ch/pipermail/r-help/2014-September/422123.html
nfm <- nlme(circumference ~ SSlogis(age, Asym, xmid, scal),
data = Orange,
fixed = Asym + xmid + scal ~ 1)
(sO <- summary(nfm))
vc <- VarCorr(nfm, rdig = 5)# def. 3
storage.mode(vc) <- "double" # -> (correct) NA warning
cfO <- sO$tTable
if(FALSE)
dput(signif(cfO[,c("Std.Error", "t-value")], 8))
if(FALSE)
dput(signif(as.numeric(vc[,"StdDev"]), 8))
cfO.Ts <- list(
stdE.T = cbind(
b64nx = ## R-devel 2016-01-11, 2017-09-18; [lynne]:
c(14.052671, 34.587947, 30.497593, 13.669776, 21.036087, 11.692943)
, b32nx = ## R-devel 2016-01-11, 2017-09-18 [florence, Fedora 24 Linux]:
c(14.053663, 34.589821, 30.49412, 13.668653, 21.034544, 11.693889)
, b32Win1 = ## R-devel 2017-09-17, i386-w64-mingw32/i386,
## Windows Server 2008 R2 x64 (build 7601) Service Pack 1
c(14.053047, 34.588589, 30.4963, 13.669349, 21.035542, 11.693282)
, b32Win = ## R-devel 2017-09-18, Tomas K (Win.10)
c(14.051902, 34.579819, 30.499807, 13.670797, 21.041722, 11.692694)
),
stdDev = cbind(
b64nx = ## R-devel 2016-01-11; [lynne]:
c(27.051312, 24.258159, 36.597078, 7.321525)
, b32nx = ## R-devel 2017-09-18; [florence, Fedora 24 Linux]:
c(27.053964, 24.275286, 36.58682, 7.3213653)
, b32Win = ## R-devel 2017-09-17, i386-w64-mingw32/i386, W.Server 2008 R2..
c(27.05234, 24.264936, 36.593554, 7.3214448)
## for now
)
)
## Average number of decimal digits agreement :
lapply(cfO.Ts, function(cc) round(-log10(apply(cc - rowMeans(cc), 1, sd)), 2))
## $ stdE.T: num [1:6] 3.13 2.34 2.62 3.05 2.49 3.29
## $ stdDev: num [1:4] 2.87 2.06 2.28 4.1
## Pairwise distances (formatted, easier to read off):
round(dist(1000 * t(cfO.Ts[["stdE.T"]])), 1)
## b64nx b32nx b32Win1
## b32nx 4.6
## b32Win1 1.7 2.9
## b32Win 10.2 13.9 11.5
round(dist(1000 * t(cfO.Ts[["stdDev"]])), 1)
## b64nx b32nx
## b32nx 20.1
## b32Win 7.7 12.5
cName <- (if(is64bit) "b64nx"
else if(.Platform$OS.type == "Windows") {
if(grepl("Server 2008 R2", win.version(), fixed=TRUE))
"b32Win1"
else
"b32Win"
}
else "b32nx" ## 32-bit, non-Windows
)
cfO.T <- array(cfO.Ts[["stdE.T"]][, cName], dim = 3:2,
dimnames = list(c("Asym", "xmid", "scal"),
c("Std.Error", "t-value")))
vcSD <- setNames(cfO.Ts[["stdDev"]][, switch(cName, b64nx=, b32nx=, b32Win=cName,
b32Win1 = "b32Win")],
c("Asym", "xmid", "scal", "Residual"))
stopifnot(
identical(cfO[,"Value"], fixef(nfm)),
all.equal(cfO[,c("Std.Error", "t-value")], cfO.T, tol = 3e-4)
,
cfO[,"DF"] == 28,
all.equal(vc[,"Variance"], vc[,"StdDev"]^2, tol= 5e-7)
,
all.equal(vc[,"StdDev"], vcSD, tol = 6e-4) # 3.5e-4 (R 3.0.3, 32b)
,
all.equal(unname(vc[2:3, 3:4]), # "Corr"
rbind(c(-0.3273, NA),
c(-0.9920, 0.4430)), tol = 2e-3)# ~ 2e-4 / 8e-4
)
## Confirm predict(*, newdata=.) works
(n <- nrow(Orange)) # 35
set.seed(17)
newOr <- within(Orange[sample(n, 64, replace=TRUE), ],
age <- round(jitter(age, amount = 50)))
fit.v <- predict(nfm, newdata = newOr)
resiv <- newOr$circumference - fit.v
res.T <- c(48, 115, 74, 15, 44, -94, 47, -51, 20, -52, -16, 12, -135,
-85, 136, 100, 24, 181, -88, -102, -26, 52, -148, 8, -83, 73,
-27, -34, 91, 42, 34, -8, 0, 83, 84, -90, -123, 94, -157, -11,
56, -164, -28, 72, 15, 148, 95, -122, 169, 84, -19, -124, 45,
-66, -10, 119, -110, -43, 12, 94, -108, 45, 48, 46)
if(!all((res10 <- round(10 * as.vector(resiv))) == res.T)) {
iD <- which(res10 != res.T)
cat("Differing rounded residuals, at indices", paste(iD, collapse=", "),
"; with values:\n")
print(cbind(resiv, res10, res.T)[iD,])
}
## -> indices 14 [64-bit] or 27 [32-bit], respectively
## [Bug 16715] New: nlme: unable to use predict and augPredict ..
## Date: 17 Feb 2016 -- part 2 -- predict():
##
## Comment 4 daveauty@gmail.com 2016-03-08 -- modified by MM --
## simulate density data then fit Michaelis-Menten equation of density as
## function of ring age. TreeIDs grouped by SP (spacing)
set.seed(1)
df <- data.frame(SP = rep(LETTERS[1:5], 60),
expand.grid(TreeID = factor(1:12),
age = seq(2, 50, 2)),
stringsAsFactors = TRUE)
df[,"dens"] <- with(df, (runif(1,10,20)*age)/(runif(1,9,10)+age)) + rnorm(25, 0, 1)
str(df)
## 'data.frame': 300 obs. of 4 variables:
## $ SP : Factor w/ 5 levels "A","B","C","D",..: 1 2 3 4 5 1 2 3 4 5 ...
## $ TreeID: Factor w/ 12 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ age : num 2 2 2 2 2 2 2 2 2 2 ...
## $ dens : num 2.41 1.39 3.82 2.56 1.41 ...
## mixed-effects model
fit1 <- nlme(dens ~ a*age/(b+age),
fixed = a+b ~ 1, random= a ~ 1|TreeID,
start = c(a=15, b=5), data=df)
summary(fit1)
fit1R <- update(fit1, method = "REML")
## allow fixed effects parameters to vary by 'SP':
fit2 <- update(fit1, fixed = list(a ~ SP, b ~ SP),
start = c(a = rep(14, 5), b = rep(4, 5)))
summary(fit2)
## make new data for predictions
newdat <- expand.grid(SP = LETTERS[1:5], age = seq(1, 50, 1))
n.pred1 <- predict(fit1, newdat, level=0) # works fine
n.pred2 <- predict(fit2, newdat, level=0)
## in nlme 3.1-124, throws the error:
## Error in eval(expr, envir, enclos) : object 'SP' not found
## New data with never-yet observed levels of a random effect -- PR#16614 :
set.seed(47)
newD <- expand.grid(SP = LETTERS[2:4], age = runif(16, 1,50),
TreeID = sample(c(sample(1:12, 7), 100:102)))
n1prD0 <- predict(fit1, newD, level=0)
n2prD0 <- predict(fit2, newD, level=0)
n1prD1 <- predict(fit1, newD, level=1) # failed in nlme <= 3.1-126
n2prD1 <- predict(fit2, newD, level=1) # ditto
(n1prD01 <- predict(fit1, newD, level=0:1))# "
(n2prD01 <- predict(fit2, newD, level=0:1))# "
## consistency :
stopifnot(
identical(is.na(n1prD1), is.na(n2prD1)),
identical(sort(unique(newD[is.na(n2prD1), "TreeID"])), 100:102),
sort(unique( newD[is.na(n2prD1), "TreeID"] )) %in% 100:102 ,
all.equal(as.vector(n1prD0), n1prD01[,"predict.fixed"], tolerance= 1e-15),
all.equal(as.vector(n2prD0), n2prD01[,"predict.fixed"], tolerance= 1e-15),
all.equal(as.vector(n1prD1), n1prD01[,"predict.TreeID"],tolerance= 1e-15),
all.equal(as.vector(n2prD1), n2prD01[,"predict.TreeID"],tolerance= 1e-15))
## new data with factor levels stored as character
stopifnot(all.equal(predict(fit2, data.frame(SP="A", age=2), level = 0),
predict(fit2, level = 0)[1], check.attributes = FALSE))
## in nlme <= 3.1-155, failed with
## Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
## contrasts can be applied only to factors with 2 or more levels
## model without intercept
fit3 <- update(fit2, fixed = a + b ~ SP - 1)
stopifnot(all.equal(predict(fit3, head(df, 3)),
head(predict(fit3), 3), check.attributes = FALSE))
## in nlme <= 3.1-155, prediction failed if not all levels occurred
## Error in f %*% beta[fmap[[nm]]] : non-conformable arguments
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.