Nothing
"[.mcmc" <- function (x, i, j, drop = missing(i))
{
## In S-PLUS the code is altered so that the user can
## pick out particular parameters by calling mcmc.obj[,c("param1", "param2")]
xstart <- start(x)
xthin <- thin(x)
if (is.R()) {
y <- NextMethod("[")
}
else {
y <- as.matrix(x)[i,j]
}
if (length(y) == 0 || is.null(y))
return(y)
if (missing(i))
return(mcmc(y, start = xstart, thin = xthin))
else
return(y)
}
"as.mcmc" <- function (x, ...)
UseMethod("as.mcmc")
"as.mcmc.default" <- function (x, ...)
if (is.mcmc(x)) x else mcmc(x)
"as.ts.mcmc" <- function (x, ...)
{
x <- as.mcmc(x)
y <- ts(x, start = start(x), end = end(x), deltat = thin(x))
attr(y, "mcpar") <- NULL
return(y)
}
"start.mcmc" <- function (x, ...)
{
mcpar(as.mcmc(x))[1]
}
"end.mcmc" <- function (x, ...)
{
mcpar(as.mcmc(x))[2]
}
"frequency.mcmc" <- function (x, ...)
{
1/thin.mcmc(x)
}
"thin.mcmc" <- function (x, ...)
{
mcpar(as.mcmc(x))[3]
}
"is.mcmc" <- function (x)
{
if (inherits(x, "mcmc"))
if (length(dim(x)) == 3)
stop("Obsolete mcmc object\nUpdate with a command like\nx <- mcmcUpgrade(x)")
else TRUE
else FALSE
}
"mcmc" <- function (data = NA, start = 1, end = numeric(0), thin = 1)
{
if (is.matrix(data)) {
niter <- nrow(data)
nvar <- ncol(data)
}
else if (is.data.frame(data)) {
if (!all(sapply(data, is.numeric))) {
stop ("Data frame contains non-numeric values")
}
data <- as.matrix(data)
niter <- nrow(data)
nvar <- ncol(data)
}
else {
niter <- length(data)
nvar <- 1
}
thin <- round(thin)
if (length(start) > 1)
stop("Invalid start")
if (length(end) > 1)
stop("Invalid end")
if (length(thin) != 1)
stop("Invalid thin")
if (missing(end))
end <- start + (niter - 1) * thin
else if (missing(start))
start <- end - (niter - 1) * thin
nobs <- floor((end - start)/thin + 1.0) ### patch
if (niter < nobs)
stop("Start, end and thin incompatible with data")
else {
end <- start + thin * (nobs - 1)
if (nobs < niter)
data <- data[1:nobs, , drop = FALSE]
}
attr(data, "mcpar") <- c(start, end, thin)
attr(data, "class") <- "mcmc"
data
}
"print.mcmc" <- function (x, ...)
{
x.orig <- x
cat("Markov Chain Monte Carlo (MCMC) output:\nStart =", start(x),
"\nEnd =", end(x), "\nThinning interval =", thin(x), "\n")
attr(x, "mcpar") <- NULL
attr(x, "class") <- NULL
NextMethod("print", ...)
invisible(x.orig)
}
"as.matrix.mcmc" <- function (x, iters = FALSE, ...)
{
y <- matrix(nrow = niter(x), ncol = nvar(x) + iters)
var.cols <- iters + 1:nvar(x)
if (iters)
y[, 1] <- as.vector(time(x))
y[, var.cols] <- x
rownames <- character(ncol(y))
if (iters)
rownames[1] <- "ITER"
rownames[var.cols] <- varnames(x, allow.null = FALSE)
dimnames(y) <- list(NULL, rownames)
return(y)
}
"time.mcmc" <- function (x, ...)
{
x <- as.mcmc(x)
ts(seq(from = start(x), to = end(x), by = thin(x)), start = start(x),
end = end(x), deltat = thin(x))
}
"window.mcmc" <- function (x, start, end, thin, ...)
{
ts.eps <- getOption("ts.eps")
xmcpar <- mcpar(x)
xstart <- xmcpar[1]
xend <- xmcpar[2]
xthin <- xmcpar[3]
if (missing(thin))
thin <- xthin
else if (thin%%xthin != 0) {
thin <- xthin
warning("Thin value not changed")
}
xtime <- as.vector(time(x))
if (missing(start))
start <- xstart
else if (length(start) != 1)
stop("bad value for start")
else if (start < xstart) {
start <- xstart
warning("start value not changed")
}
if (missing(end))
end <- xend
else if (length(end) != 1)
stop("bad value for end")
else if (end > xend) {
end <- xend
warning("end value not changed")
}
if (start > end)
stop("start cannot be after end")
if (all(abs(xtime - start) > abs(start) * ts.eps)) {
start <- xtime[(xtime > start) & ((start + xthin) > xtime)]
}
if (all(abs(end - xtime) > abs(end) * ts.eps)) {
end <- xtime[(xtime < end) & ((end - xthin) < xtime)]
}
use <- 1:niter(x)
use <- use[use >= trunc((start - xstart)/xthin + 1.5) &
use <= trunc((end - xstart)/xthin + 1.5) &
(use - trunc((start- xstart)/xthin + 1.5))%%(thin%/%xthin) == 0]
y <- if (is.matrix(x))
x[use, , drop = FALSE]
else x[use]
return(mcmc(y, start=start, end=end, thin=thin))
}
"mcpar" <- function (x)
{
attr(x, "mcpar")
}
"mcmcUpgrade" <- function (x)
{
if (inherits(x, "mcmc")) {
if (length(dim(x)) == 3) {
nchain <- dim(x)[3]
xtspar <- attr(x, "tspar")
xstart <- xtspar[1]
xend <- xtspar[2]
xthin <- xtspar[3]
out <- vector("list", nchain)
for (i in 1:nchain) {
y <- unclass(x)[, , 1, drop = TRUE]
attr(y, "title") <- NULL
attr(y, "tspar") <- NULL
out[[i]] <- mcmc(y, start = xstart, end = xend,
thin = xthin)
}
if (nchain == 1)
return(out[[1]])
else return(mcmc.list(out))
}
else return(x)
}
else stop("Can't upgrade")
}
"thin" <-
function (x, ...)
UseMethod("thin")
"set.mfrow" <-
function (Nchains = 1, Nparms = 1, nplots = 1, sepplot = FALSE)
{
## Set up dimensions of graphics window:
## If only density plots OR trace plots are requested, dimensions are:
## 1 x 1 if Nparms = 1
## 1 X 2 if Nparms = 2
## 2 X 2 if Nparms = 3 or 4
## 3 X 2 if Nparms = 5 or 6 or 10 - 12
## 3 X 3 if Nparms = 7 - 9 or >= 13
## If both density plots AND trace plots are requested, dimensions are:
## 1 x 2 if Nparms = 1
## 2 X 2 if Nparms = 2
## 3 X 2 if Nparms = 3, 5, 6, 10, 11, or 12
## 4 x 2 if Nparms otherwise
## If separate plots are requested for each chain, dimensions are:
## 1 x 2 if Nparms = 1 & Nchains = 2
## 2 X 2 if Nparms = 2 & Nchains = 2 OR Nparms = 1 & Nchains = 3 or 4
## 3 x 2 if Nparms = 3 or >= 5 & Nchains = 2
## OR Nchains = 5 or 6 or 10 - 12 (and any Nparms)
## 2 x 3 if Nparms = 2 or 4 & Nchains = 3
## 4 x 2 if Nparms = 4 & Nchains = 2
## OR Nchains = 4 & Nparms > 1
## 3 x 3 if Nparms = 3 or >= 5 & Nchains = 3
## OR Nchains = 7 - 9 or >= 13 (and any Nparms)
mfrow <- if (sepplot && Nchains > 1 && nplots == 1) {
## Separate plots per chain
## Only one plot per variable
if (Nchains == 2) {
switch(min(Nparms, 5),
c(1,2),
c(2,2),
c(3,2),
c(4,2),
c(3,2))
}
else if (Nchains == 3) {
switch(min(Nparms, 5),
c(2,2),
c(2,3),
c(3,3),
c(2,3),
c(3,3))
}
else if (Nchains == 4) {
if (Nparms == 1)
c(2,2)
else
c(4,2)
}
else if (any(Nchains == c(5,6,10,11,12)))
c(3,2)
else if (any(Nchains == c(7,8,9)) || Nchains >=13)
c(3,3)
}
else {
if (nplots==1) {
## One plot per variable
mfrow <- switch(min(Nparms,13),
c(1,1),
c(1,2),
c(2,2),
c(2,2),
c(3,2),
c(3,2),
c(3,3),
c(3,3),
c(3,3),
c(3,2),
c(3,2),
c(3,2),
c(3,3))
}
else {
## Two plot per variable
##
mfrow <- switch(min(Nparms, 13),
c(1,2),
c(2,2),
c(3,2),
c(4,2),
c(3,2),
c(3,2),
c(4,2),
c(4,2),
c(4,2),
c(3,2),
c(3,2),
c(3,2),
c(4,2))
}
}
return(mfrow)
}
head.mcmc <- function(x, n = 6L, ...) {
window.mcmc(x, end=min(start.mcmc(x) + n * thin.mcmc(x), end.mcmc(x)))
}
tail.mcmc <- function(x, n = 6L, ...) {
window.mcmc(x, start=max(end.mcmc(x) - n * thin.mcmc(x), start.mcmc(x)))
}
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.