Robert,
I have this quick hack to obtain approximate "Shewhart" prediction intervals
for variance component models fit with lme (to nitpick slightly,
"confidence" intervals have the interpretation of containing parameters,
while "prediction" and "tolerance" intervals have the interpretation of
containing future observations or statistics).
Back of the envelope documentation: the only argument that probably needs
explaining is the "reps" argument to shewhart(). If your model is, e.g.
fixed = Y ~ 1, random = ~ 1 | Batch
then specify reps = c(1, 1) if you want to predict a single future
observation from a single future batch, reps = c(1, 2) if you want to
predict the mean of two future observations from a single future batch, reps
= c(2, 2) if you want to predict the mean of 4 observations spread evenly
over 2 future batches, ...
Leave mult.check = 1, unless you want to do a Bonferroni correction.
HTH,
Jim Rogers
valStats2 <-
function (x, fixed, random, ...)
{
mod <- lme(fixed = fixed, data = x, random = random, ...)
mn <- fixef(mod)
vc <- VarCorr(mod)
err <- "Expecting only random intercept terms and a single fixed
intercept.\n"
if (length(mn) > 1 || ncol(vc) > 2)
stop(err)
rn <- rownames(vc)
skip <- regexpr("=", rn) > 0
if (!any(skip))
vnms <- attr(vc, "title")
else vnms <- grep("=", rn, value = TRUE)
vc <- vc[!skip, ]
vnms <- trim(sub("=.*", "", vnms))
vnms <- c(vnms, "Residual")
vnms <- paste("V", vnms, sep = ".")
vars <- as.numeric(vc[, "Variance"])
stats <- c(mn, vars)
names(stats) <- c("Intercept", vnms)
stats
}
shewhart <-
function (x, meancol = "Intercept", varcols = grep("^V\\.", names(x), value
= TRUE), reps = c(1, 1), alpha = 0.02, mult.check = 1)
{
mn <- x[[meancol]]
vr <- as.matrix(x[varcols])
totvar <- vr %*% (1/reps)
totsd <- sqrt(totvar)
LL.mean <- mn + qnorm(alpha/2/mult.check) * totsd
UL.mean <- mn + qnorm(1 - alpha/2/mult.check) * totsd
out <- data.frame(V.Total = totvar, LL.mean = LL.mean, UL.mean =
UL.mean)
out
}
### Example, where x is your data.frame:
foo <- valStats2(x, fixed = Y ~ 1, random = ~ 1|Batch)
foo <- as.data.frame(t(as.matrix(foo)))
data.frame(foo, shewhart(foo))
-----Original Message-----
From: r-help-bounces at stat.math.ethz.ch
[mailto:r-help-bounces at stat.math.ethz.ch]On Behalf Of Spencer Graves
Sent: Friday, September 03, 2004 11:58 AM
To: bates at wisc.edu
Cc: Robert Waters; r-help at stat.math.ethz.ch
Subject: Re: [R] confidence intervals
Hi, Robert:
While it may be difficult to program this in general
(as suggested
by it's position on Doug's "To Do" list), all the pieces should be
available to support a special script for your specific application.
What fixed and random model(s) interest you most?
hope this helps. spencer graves
Douglas Bates wrote:
Robert Waters wrote:
Dear R users;
Im working with lme and Id like to have an idea of how
can I get CI for the predictions made with the model.
Im not a stats guy but, if Im not wrong, the CIs
should be different if Im predicting a new data point
or a new group. Ive been searching through the web and
in help-lists with no luck. I know this topic had been
asked before but without replies. Can anyone give an
idea of where can I found information about this or
how can I get it from R?
Thanks for any hint
That's not currently implemented in lme. It's on the "To
Do" list but
it is not very close to the top.
LEGAL NOTICE\ Unless expressly stated otherwise, this messag...{{dropped}}