Rev 6909 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
"[.mcmc.list" <- function (x, i, j, drop = TRUE){## In S-PLUS the code is altered so that the user can## pick out particular parameters by calling## mcmc.obj[,c("param1", "param2")]## Trying to squeeze too much functionality in here## x[p:q] will subset the list## x[p,], x[,q], x[p,q] will be recursively applied to## the elements of the list, even if they are vectorsif (nargs() < 3 + !missing(drop)) {## Subset the listif (is.R()) {y <- NextMethod("[")}else {y <- as.matrix(x)[i,j]}}else {## Subset the elements of the listy <- vector("list", length(x))names(y) <- names(x)for (k in 1:length(y)) {y[[k]] <- if (missing(i) && missing(j)) {x[[k]]}else if (is.matrix(x[[k]])) {if (missing(i)) {x[[k]][, j, drop = drop]}else if (missing(j)) {x[[k]][i, , drop = drop]}else {x[[k]][i, j, drop = drop]}}else {### Coerce x[[k]] to matrix before subsettingz <- as.matrix.mcmc(x[[k]])if (missing(i)) {mcmc(z[, j, drop = TRUE], start(x), end(x), thin(x))}else if (missing(j)) {z[i, , drop = TRUE]}else {z[i, j, drop = TRUE]}}}}if (is.list(y) && all(sapply(y, is.mcmc, simplify = TRUE))) {y <- mcmc.list(y)}return(y)}"mcmc.list" <- function (...){x <- list(...)if (length(x) == 1 && is.list(x[[1]]))x <- x[[1]]if (!all(unlist(lapply(x, is.mcmc))))stop("Arguments must be mcmc objects")nargs <- length(x)if (nargs >= 2) {xmcpar <- lapply(x, mcpar)if (!all(unlist(lapply(xmcpar, "==", xmcpar[[1]]))))stop("Different start, end or thin values in each chain")xnvar <- lapply(x, nvar)if (!all(unlist(lapply(xnvar, "==", xnvar[[1]]))))stop("Different number of variables in each chain")xvarnames <- lapply(x, varnames, allow.null = FALSE)if (!all(unlist(lapply(xvarnames, "==", xvarnames[[1]]))))stop("Different variable names in each chain")}if (is.R())class(x) <- "mcmc.list"elseoldClass(x) <- "mcmc.list"return(x)}"start.mcmc.list" <- function (x, ...){start(x[[1]])}"end.mcmc.list" <- function (x, ...){end(x[[1]])}"thin.mcmc.list" <- function (x, ...){thin(x[[1]])}"is.mcmc.list" <- function (x)inherits(x, "mcmc.list")"plot.mcmc.list" <-function (x, trace = TRUE, density = TRUE, smooth = TRUE, bwf,auto.layout = TRUE, ask = par("ask"), ...){## RGA fixed to use default ask value.oldpar <- NULLon.exit(par(oldpar))if (auto.layout) {mfrow <- set.mfrow(Nchains = nchain(x), Nparms = nvar(x),nplots = trace + density)oldpar <- par(mfrow = mfrow)}for (i in 1:nvar(x)) {if (trace)## RGA fixed to propagate ... argument.traceplot(x[, i, drop = FALSE], smooth = smooth, ...)if (density) {if (missing(bwf))## RGA fixed to propagate ... argument.densplot(x[, i, drop = FALSE], ...)else densplot(x[, i, drop = FALSE], bwf = bwf, ...)}if (i==1)oldpar <- c(oldpar, par(ask = ask))}}"summary.mcmc.list" <-function (object, quantiles = c(0.025, 0.25, 0.5, 0.75, 0.975), ...){x <- mcmc.list(object)statnames <- c("Mean", "SD", "Naive SE", "Time-series SE")varstats <- matrix(nrow = nvar(x), ncol = length(statnames),dimnames = list(varnames(x), statnames))xtsvar <- matrix(nrow = nchain(x), ncol = nvar(x))if (is.matrix(x[[1]])) {for (i in 1:nchain(x))for(j in 1:nvar(x))xtsvar[i, j] <- safespec0(x[[i]][,j])xlong <- do.call("rbind", x)}else {for (i in 1:nchain(x))xtsvar[i, ] <- safespec0(x[[i]])xlong <- as.matrix(x)}xmean <- apply(xlong, 2, mean)xvar <- apply(xlong, 2, var)xtsvar <- apply(xtsvar, 2, mean)varquant <- t(apply(xlong, 2, quantile, quantiles))varstats[, 1] <- xmeanvarstats[, 2] <- sqrt(xvar)##RGA fixed so now give correct std error for pooled (across chains).varstats[, 3] <- sqrt(xvar/(niter(x)*nchain(x)))varstats[, 4] <- sqrt(xtsvar/(niter(x)*nchain(x)))varquant <- drop(varquant)varstats <- drop(varstats)out <- list(statistics = varstats, quantiles = varquant,start = start(x), end = end(x), thin = thin(x),nchain = nchain(x))class(out) <- "summary.mcmc"return(out)}"as.matrix.mcmc.list" <-function (x, iters = FALSE, chains = FALSE, ...){x <- mcmc.list(x)y <- matrix(nrow = niter(x) * nchain(x), ncol = nvar(x) +chains + iters)var.cols <- chains + iters + 1:nvar(x)for (i in 1:nchain(x)) {use.rows <- niter(x) * (i - 1) + 1:niter(x)if (chains)y[use.rows, 1] <- iif (iters)y[use.rows, chains + 1] <- as.vector(time(x))y[use.rows, var.cols] <- x[[i]]}rownames <- character(ncol(y))if (chains)rownames[1] <- "CHAIN"if (iters)rownames[1 + chains] <- "ITER"rownames[var.cols] <- varnames(x, allow.null = FALSE)dimnames(y) <- list(NULL, rownames)return(y)}"as.mcmc.mcmc.list" <- function (x, ...){if (nchain(x) == 1)return(x[[1]])else stop("Can't coerce mcmc.list to mcmc object:\n more than 1 chain")}"time.mcmc.list" <- function (x, ...)time(x[[1]])"window.mcmc.list" <- function (x, ...){structure(lapply(x, window.mcmc, ...), class = "mcmc.list")}"head.mcmc.list" <- function (x, ...){structure(lapply(x, head.mcmc, ...), class = "mcmc.list")}"tail.mcmc.list" <- function (x, ...){structure(lapply(x, tail.mcmc, ...), class = "mcmc.list")}"as.mcmc.list" <- function (x, ...)UseMethod("as.mcmc.list")"as.mcmc.list.default" <- function (x, ...)if (is.mcmc.list(x)) x else mcmc.list(x)"as.array.mcmc.list" <- function(x, drop=TRUE, ...){y <- array(dim=c(niter(x), nvar(x), nchain(x)),dimnames = list(iter=time(x), var=varnames(x), chain=chanames(x)))for(i in 1:nchain(x))y[,,i] <- x[[i]]if(drop)return(drop(y))elsereturn(y)}