Nothing
## Testing simulate_gnls
require(nlme)
require(nlraa)
require(ggplot2)
require(car)
run.simulate.gnls.test <- Sys.info()[["user"]] == "fernandomiguez" && FALSE
if(run.simulate.gnls.test){
set.seed(101)
data(Orange)
fitg <- gnls(circumference ~ SSlogis(age, Asym, xmid, scal), data = Orange, weights = varPower())
system.time(fitg.bt0 <- boot_nlme(fitg, fitted, psim = 0, cores = 4))
lwr0.q <- apply(t(fitg.bt0$t), 1, quantile, probs = 0.05, na.rm = TRUE)
upr0.q <- apply(t(fitg.bt0$t), 1, quantile, probs = 0.95, na.rm = TRUE)
system.time(fitg.bt1 <- boot_nlme(fitg, fitted, psim = 1, cores = 4))
lwr1.q <- apply(t(fitg.bt1$t), 1, quantile, probs = 0.05, na.rm = TRUE)
upr1.q <- apply(t(fitg.bt1$t), 1, quantile, probs = 0.95, na.rm = TRUE)
ggplot() +
geom_point(data = Orange, aes(x = age, y = circumference)) +
geom_line(data = Orange, aes(x = age, y = fitted(fitg))) +
geom_ribbon(aes(x = Orange$age, ymin = lwr0.q, ymax = upr0.q), fill = "blue", alpha = 0.2) +
geom_ribbon(aes(x = Orange$age, ymin = lwr1.q, ymax = upr1.q), fill = "purple", alpha = 0.2)
## What about the model coefficients?
system.time(fitg.cfs.bt0 <- boot_nlme(fitg, psim = 0, cores = 4))
system.time(fitg.cfs.bt1 <- boot_nlme(fitg, psim = 1, cores = 4))
summary(fitg.cfs.bt0)
summary(fitg.cfs.bt1)
## Somewhat wider using bootstrap
## Wider when simulating the parameters
confint(fitg.cfs.bt0)
confint(fitg.cfs.bt1)
intervals(fitg)
hist(fitg.cfs.bt0)
hist(fitg.cfs.bt1)
sims0 <- simulate_gnls(fitg, psim = 0) ## Fitted values
sims1 <- simulate_gnls(fitg, psim = 1) ## One simulation from the mean or population-level
sims2 <- simulate_gnls(fitg, psim = 2) ## One simulation from the individual-level
Orange2 <- Orange
Orange2$sims0 <- sims0
Orange2$sims1 <- sims1
Orange2$sims2 <- sims2
ggplot() +
geom_point(data = Orange2, aes(x = age, y = circumference)) +
geom_line(data = Orange2, aes(x = age, y = sims0)) +
geom_point(data = Orange2, aes(x = age, y = sims1), color = "red") +
geom_point(data = Orange2, aes(x = age, y = sims2), color = "green3")
## What about a nlme?
fitL <- nlsList(circumference ~ SSlogis(age, Asym, xmid, scal), data = Orange)
fit.nm <- nlme(fitL, random = pdDiag(Asym + xmid + scal ~ 1))
plot(augPred(fit.nm, level = 0:1))
## Let's look at intervals first
system.time(fit.nm.bt <- boot_nlme(fit.nm, cores = 4))
confint(fit.nm.bt)
intervals(fit.nm, which = "fixed")
## Fitted values
prdf <- function(x) predict(x, level = 0, newdata = data.frame(age = 50:1600))
system.time(fit.nm.bt.f0 <- boot_nlme(fit.nm, prdf, psim = 0, cores = 4))
lwr0.q <- apply(t(fit.nm.bt.f0$t), 1, quantile, probs = 0.05, na.rm = TRUE)
upr0.q <- apply(t(fit.nm.bt.f0$t), 1, quantile, probs = 0.95, na.rm = TRUE)
Orange$fttd <- predict(fit.nm, level = 0)
system.time(fit.nm.bt.f1 <- boot_nlme(fit.nm, prdf, psim = 1, cores = 4))
lwr1.q <- apply(t(fit.nm.bt.f1$t), 1, quantile, probs = 0.05, na.rm = TRUE)
upr1.q <- apply(t(fit.nm.bt.f1$t), 1, quantile, probs = 0.95, na.rm = TRUE)
ggplot() +
geom_point(data = Orange, aes(x = age, y = circumference)) +
geom_line(data = Orange, aes(x = age, y = fttd)) +
geom_ribbon(aes(x = 50:1600, ymin = lwr0.q, ymax = upr0.q), fill = "blue", alpha = 0.2) +
geom_ribbon(aes(x = 50:1600, ymin = lwr1.q, ymax = upr1.q), fill = "purple", alpha = 0.2)
## Testing the feature of sampling correlated errors
## The way to really test this would be to look at the correlation
## structure in the new simulations. This is not a good dataset for this
## Need to check in Pinheiro and Bates for a good example
data("ChickWeight")
fitcw <- gnls(weight ~ SSlogis(Time, Asym, xmid, scal), data = ChickWeight,
correlation = corCAR1(form = ~ Time | Chick),
weights = varPower())
fitcw.vc <- var_cov(fitcw)
image(fitcw.vc[,ncol(fitcw.vc):1], xaxt = "n", yaxt = "n")
fitcw.vc2 <- fitcw.vc[1:36,1:36]
image(log(fitcw.vc2[,ncol(fitcw.vc2):1]), xaxt = "n", yaxt = "n")
## In this case, this is much slower, because of the huge matrix involved
fitcw.sim <- simulate_nlme(fitcw, nsim = 100, psim = 2, value = "data.frame")
fitcw.sim$Chick_ID <- with(fitcw.sim, paste0(Chick,"_",ii))
## It looks like this approach does not capture the specific
## Chick-level effect, but it does seem to produce
## correlated lines.
## Perhaps I cannot expect to reproduce the original data for this 'gnls'
## object, but rather, I should check if it creates correlated errors
## similar in structure to the ones in the original dataset
ggplot(data = fitcw.sim) +
facet_wrap(~ Chick) +
geom_line(aes(x = Time, y = sim.y, color = Chick, group = Chick_ID)) +
geom_point(aes(x = Time, y = weight)) +
theme(legend.position = "none")
}
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.