From 2df30345120e4d36346978b127b486ca3276b942 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Wed, 10 May 2023 23:25:01 +0530 Subject: [PATCH 001/109] Update export.R --- R/export.R | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/R/export.R b/R/export.R index 680cdbd..13da2e6 100644 --- a/R/export.R +++ b/R/export.R @@ -368,8 +368,7 @@ ACF <- function(x, if(class(x) == "Smcmc") { x <- x$chains - } - else if(!is.list(x)) + }else if(!is.list(x)) { stop("x must be a matrix, list or an Smcmc object") } @@ -408,16 +407,18 @@ ACF <- function(x, } avgf <- chain.acf[[1]] + k = 100 avgf$acf <- 0 for(j in 1:m) { avgf$acf <- avgf$acf + chain.acf[[j]]$acf + k = min(k,min(chain.acf[[j]]$acf)) } avgf$acf <- avgf$acf/m if(plot) { - plot(avgf, ci = 0, main = varnames[i], lwd = .2, ylim = c( - 1.96/sqrt(n), max(avgf$acf))) + plot(avgf, ci = 0, main = varnames[i], lwd = .2, ylim = c( min(- 1.96/sqrt(n),min(avgf$acf),k), max(avgf$acf))) for(j in 1:m) { From fd46f3ac2c628b2d36303126fe7bd73908a7524f Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Tue, 23 May 2023 00:48:02 +0530 Subject: [PATCH 002/109] Update export.R --- R/export.R | 186 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 185 insertions(+), 1 deletion(-) diff --git a/R/export.R b/R/export.R index 13da2e6..db38b1f 100644 --- a/R/export.R +++ b/R/export.R @@ -388,7 +388,7 @@ ACF <- function(x, if(plot) { - setLayout(length(which)) + setLayout(length(which)) } for(i in which) @@ -432,3 +432,187 @@ ACF <- function(x, on.exit( par (ask = FALSE,mfrow=c(1,1))) invisible(list("combined" = avgf, "individual" = chain.acf)) } + + + + + + + +#' @title Trace Plot for Markov chain Monte Carlo +#' @description traceplot is a graphical tool commonly used in Bayesian statistics and Markov Chain Monte Carlo(MCMC) methods to diagnose the convergence and mixing properties of a chain. +#' @name traceplot +#' @usage function(x, fast = FALSE, xlim = NULL, ylim = NULL,component = NULL, +#' xlab = "Iteration",auto.layout = TRUE, +#' ask = dev.interactive(), +#' col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", +#' "springgreen2","skyblue3","khaki3", +#' "lightpink1","palegreen3","thistle3","aquamarine3","dimgrey", +#' "tomato3")) +#' +#'@param x : an `Smcmc' class object or a list of Markov chains or a Markov chain matrix +#'@param fast : a boolearn argument that will be auto set to TRUE when chain size is larger than 1e6 +#'@param xlim : range of x-axis +#'@param ylim : range of y-axis +#'@param component : a vector of integers indicating which components' ACF plots are needed. By default all components are drawn. +#'@param xlab : lables of x-axis +#'@param auto.layout : logical argument for an automatic layout of plots +#'@param ask : activating interactive plots +#'@param col : color vector for multiple chains +#' +#' +#' @return Returns the Trace Plots of Markov Chain(s) +#' @examples +#' # example code +#' # Defining a function to produce Markov chain with dimension p and size n +#' MakeChain <- function(p, n , h = .5) +#' { +#' chain <- matrix(0, nrow = n,ncol = p) +#' for (i in 2:n) +#' { +#' prop <- chain[i-1, ] + rnorm(p, mean = 0, sd = h) +#' log.ratio <- sum(dnorm(prop, log = TRUE) - dnorm(chain[i-1, ], log = TRUE)) +#' if(log(runif(1)) < log.ratio) +#' {chain[i, ] <- prop} +#' else{chain[i, ] <- chain[i - 1, ]} +#' } +#' v = vector(length = p) +#' for(i in 1:p){v[i] = paste("Comp ",i)} +#' colnames(chain) = v +#' return(chain) +#' } +#' +#' +#' chain1 <- MakeChain(p=4,n=1000) +#' chain2 <- MakeChain(p=4,n=1000) +#' chain3 <- MakeChain(p=4,n=1000) +#' out <- Smcmc(list(chain1,chain2,chain3)) +#' traceplot(out) +#' +#' +#' chain1 <- MakeChain(p=6,n=1000) +#' chain2 <- MakeChain(p=6,n=1000) +#' chain3 <- MakeChain(p=6,n=1000) +#' out <- Smcmc(list(chain1,chain2,chain3)) +#' traceplot(out) + +#' +#' +#' +#' +#' @export + +traceplot <- function(x, fast = FALSE, xlim = NULL, ylim = NULL,component = NULL, + xlab = "Iteration",auto.layout = TRUE, + ask = dev.interactive(), + col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", + "springgreen2","skyblue3","khaki3", + "lightpink1","palegreen3","thistle3","aquamarine3","dimgrey", + "tomato3")) +{ + if(is.matrix(x)) + { + x <- list(x) + } + if(class(x) == "Smcmc") + { + x <- x$chains + }else if(!is.list(x)) + { + stop("x must be a matrix, list or an Smcmc object") + } + + varnames <- colnames(x[[1]]) + dimn <- dim(x[[1]]) + n <- dimn[1] + p <- dimn[2] + m = length(x) + + if(dim(x[[1]])[1] > 100000) + { + fast = TRUE + } + + if(fast) + { + index = sample(1:n-1,10000,replace = FALSE) + index = c(index,n) + index = sort(index) + }else{index = 1:n} + + which <- as.numeric(component) + if(is.null(component)) which <- 1:p + xlim <- if (is.null(xlim)) c(0,n) else xlim + maxi = vector(length = p) + mini = vector(length = p) + vec = vector(length = m) + for(j in 1:m) + { + for(i in 1:p) + { + maxi[i] = max(maxi,max(x[[j]][,i])) + mini[i] = min(mini,min(x[[j]][,i])) + } + vec[j] = paste("Chain",j) + } + + spacest = NULL + spacesb = NULL + if(p<6) + { + par(mfrow = c(p, 1)) + spacest = c(3,rep(0,p-1)) + spacesb = c(rep(0,p-1),4) + + for(i in which) + { + par(mar = c(spacesb[i], 4.1, spacest[i], 2.1)) + ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim + plot(x= index, y = x[[1]][index,i], xlab = xlab, ylab =varnames[i], + type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, + col = adjustcolor(col[1],alpha.f = 0.9), xaxt = if(i==p) 's' else 'n') + for(j in 2:m) + { + lines(x= index, y=x[[j]][index,i], type = "l", + col = adjustcolor(col[j],alpha.f = 0.9), + ylim = ylim, xlim = xlim, lwd = 1, lty = 1, + yaxt = 'n', xaxt = 'n') + } + } + }else + { + setLayout(length(which)) + k = setLayout(length(which)) + print(k) + spacest = c(rep(3,k$mfrow[2]),rep(0,p-2)) + spacesb = c(rep(0,p-2),rep(4.2,k$mfrow[2])) + print(spacest) + print(spacesb) + for(i in which) + { + par(mar = c(spacesb[i],4.2,spacest[i],2)) + ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim + plot(x= index, y = x[[1]][index,i], + xlab = if(i > p-2) xlab else"", ylab = varnames[i], + type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, + col = adjustcolor(col[1],alpha.f = 0.9), + xaxt = if(i > p-2)'s' else'n') + for(j in 2:m) + { + lines(x= index, y=x[[j]][index,i], type = "l", + col = adjustcolor(col[j],alpha.f = 0.9), + ylim = ylim, xlim = xlim, lwd = 1, lty = 1, + yaxt = 'n', xaxt = 'n') + } + } + } + par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) + plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') + legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, + horiz = TRUE,cex = 1, seg.len=1, bty = 'n') + on.exit(par(ask = FALSE, mfrow = c(1,1))) + par(mar = c(5.1, 4.1, 4.1, 2.1)) + par(fig = c(0, 1, 0, 1)) + par(oma = c(0, 0, 0, 0)) + if(fast){message("Chain size is very large, fast changed to TRUE.")} +} From 4fd7a8a0c4328e5d60e27ce8adc89b384d5bb1e3 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Tue, 23 May 2023 00:49:47 +0530 Subject: [PATCH 003/109] Add files via upload --- man/traceplot.Rd | 80 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 man/traceplot.Rd diff --git a/man/traceplot.Rd b/man/traceplot.Rd new file mode 100644 index 0000000..1088a10 --- /dev/null +++ b/man/traceplot.Rd @@ -0,0 +1,80 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/export.R + +\name{traceplot} +\alias{traceplot} +\title{ +Trace Plot for Markov chain Monte Carlo +} +\description{ +traceplot is a graphical tool commonly used in Bayesian statistics and Markov Chain Monte Carlo(MCMC) methods to diagnose the convergence and mixing properties of a chain. +} +\usage{ +traceplot(x, fast = FALSE, xlim = NULL, ylim = NULL,component = NULL, + xlab = "Iteration",auto.layout = TRUE, + ask = dev.interactive(), + col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", + "springgreen2","skyblue3","khaki3", + "lightpink1","palegreen3","thistle3","aquamarine3", + "dimgrey","tomato3")) +} +\arguments{ + \item{x}{: an `Smcmc' class object or a list of Markov chains or a Markov chain matrix} + + \item{fast}{: a boolean argument that will be auto set to TRUE when chain size is larger than 1e6} + + \item{xlim}{: range of x-axis} + + \item{ylim}{: range of y-axis} + + \item{component}{: a vector of integers indicating which components' ACF plots are needed. By default all components are drawn.} + + \item{xlab}{: lables of x-axis} + + \item{auto.layout}{: logical argument for an automatic layout of plots} + + \item{ask}{: activating interactive plots} + + \item{col}{: color vector for multiple chains} +} + +\value{ +Returns the Trace Plots of Markov Chain(s). +} + +\examples{ + +# Defining a function to produce Markov chain with dimension p and size n +MakeChain <- function(p, n , h = .5) +{ +chain <- matrix(0, nrow = n,ncol = p) +for (i in 2:n) +{ + prop <- chain[i-1, ] + rnorm(p, mean = 0, sd = h) + log.ratio <- sum(dnorm(prop, log = TRUE) - dnorm(chain[i-1, ], log = TRUE)) + if(log(runif(1)) < log.ratio) + {chain[i, ] <- prop} + else{chain[i, ] <- chain[i - 1, ]} +} + v = vector(length = p) + for(i in 1:p){v[i] = paste("Comp ",i)} + colnames(chain) = v + return(chain) +} + + +chain1 <- MakeChain(p=4,n=1000) +chain2 <- MakeChain(p=4,n=1000) +chain3 <- MakeChain(p=4,n=1000) +out <- Smcmc(list(chain1,chain2,chain3)) +traceplot(out) + + +chain1 <- MakeChain(p=6,n=1000) +chain2 <- MakeChain(p=6,n=1000) +chain3 <- MakeChain(p=6,n=1000) +out <- Smcmc(list(chain1,chain2,chain3)) +traceplot(out) + +} + From 49c8338b64ef07856ef955d35a8f3a39f7ffdcc1 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Tue, 23 May 2023 11:07:24 +0530 Subject: [PATCH 004/109] Update export.R --- R/export.R | 117 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 72 insertions(+), 45 deletions(-) diff --git a/R/export.R b/R/export.R index db38b1f..15babaf 100644 --- a/R/export.R +++ b/R/export.R @@ -442,7 +442,7 @@ invisible(list("combined" = avgf, "individual" = chain.acf)) #' @title Trace Plot for Markov chain Monte Carlo #' @description traceplot is a graphical tool commonly used in Bayesian statistics and Markov Chain Monte Carlo(MCMC) methods to diagnose the convergence and mixing properties of a chain. #' @name traceplot -#' @usage function(x, fast = FALSE, xlim = NULL, ylim = NULL,component = NULL, +#' @usage function(x, fast = FALSE,which = NULL, xlim = NULL, ylim = NULL,component = NULL, #' xlab = "Iteration",auto.layout = TRUE, #' ask = dev.interactive(), #' col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", @@ -451,7 +451,8 @@ invisible(list("combined" = avgf, "individual" = chain.acf)) #' "tomato3")) #' #'@param x : an `Smcmc' class object or a list of Markov chains or a Markov chain matrix -#'@param fast : a boolearn argument that will be auto set to TRUE when chain size is larger than 1e6 +#'@param fast : a boolean argument that will be auto set to TRUE when chain size is larger than 1e6 +#'@param which : if we want full size traceplots of specific dimensions of chain, we can pass a vector of respective dimension/components. #'@param xlim : range of x-axis #'@param ylim : range of y-axis #'@param component : a vector of integers indicating which components' ACF plots are needed. By default all components are drawn. @@ -502,7 +503,7 @@ invisible(list("combined" = avgf, "individual" = chain.acf)) #' #' @export -traceplot <- function(x, fast = FALSE, xlim = NULL, ylim = NULL,component = NULL, +traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,component = NULL, xlab = "Iteration",auto.layout = TRUE, ask = dev.interactive(), col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", @@ -540,8 +541,8 @@ traceplot <- function(x, fast = FALSE, xlim = NULL, ylim = NULL,component = NULL index = sort(index) }else{index = 1:n} - which <- as.numeric(component) - if(is.null(component)) which <- 1:p + dimen <- as.numeric(component) + if(is.null(component)) dimen <- 1:p xlim <- if (is.null(xlim)) c(0,n) else xlim maxi = vector(length = p) mini = vector(length = p) @@ -556,21 +557,15 @@ traceplot <- function(x, fast = FALSE, xlim = NULL, ylim = NULL,component = NULL vec[j] = paste("Chain",j) } - spacest = NULL - spacesb = NULL - if(p<6) + if(!is.null(which)) { - par(mfrow = c(p, 1)) - spacest = c(3,rep(0,p-1)) - spacesb = c(rep(0,p-1),4) - for(i in which) { - par(mar = c(spacesb[i], 4.1, spacest[i], 2.1)) - ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim - plot(x= index, y = x[[1]][index,i], xlab = xlab, ylab =varnames[i], + ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim + plot(x= index, y = x[[1]][index,i], + xlab = xlab, ylab = varnames[i], type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, - col = adjustcolor(col[1],alpha.f = 0.9), xaxt = if(i==p) 's' else 'n') + col = adjustcolor(col[1],alpha.f = 0.9)) for(j in 2:m) { lines(x= index, y=x[[j]][index,i], type = "l", @@ -578,41 +573,73 @@ traceplot <- function(x, fast = FALSE, xlim = NULL, ylim = NULL,component = NULL ylim = ylim, xlim = xlim, lwd = 1, lty = 1, yaxt = 'n', xaxt = 'n') } + + par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) + plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') + legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, + horiz = TRUE,cex = 1, seg.len=1, bty = 'n') + on.exit(par(ask = FALSE, mfrow = c(1,1))) + par(mar = c(5.1, 4.1, 4.1, 2.1)) + par(fig = c(0, 1, 0, 1)) + par(oma = c(0, 0, 0, 0)) } }else - { - setLayout(length(which)) - k = setLayout(length(which)) - print(k) - spacest = c(rep(3,k$mfrow[2]),rep(0,p-2)) - spacesb = c(rep(0,p-2),rep(4.2,k$mfrow[2])) - print(spacest) - print(spacesb) - for(i in which) + { + spacest = NULL + spacesb = NULL + if(p<6) { - par(mar = c(spacesb[i],4.2,spacest[i],2)) - ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim - plot(x= index, y = x[[1]][index,i], - xlab = if(i > p-2) xlab else"", ylab = varnames[i], - type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, - col = adjustcolor(col[1],alpha.f = 0.9), - xaxt = if(i > p-2)'s' else'n') - for(j in 2:m) + par(mfrow = c(p, 1)) + spacest = c(3,rep(0,p-1)) + spacesb = c(rep(0,p-1),4) + + for(i in dimen) { - lines(x= index, y=x[[j]][index,i], type = "l", - col = adjustcolor(col[j],alpha.f = 0.9), - ylim = ylim, xlim = xlim, lwd = 1, lty = 1, - yaxt = 'n', xaxt = 'n') + par(mar = c(spacesb[i], 4.1, spacest[i], 2.1)) + ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim + plot(x= index, y = x[[1]][index,i], xlab = xlab, ylab =varnames[i], + type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, + col = adjustcolor(col[1],alpha.f = 0.9), xaxt = if(i==p) 's' else 'n') + for(j in 2:m) + { + lines(x= index, y=x[[j]][index,i], type = "l", + col = adjustcolor(col[j],alpha.f = 0.9), + ylim = ylim, xlim = xlim, lwd = 1, lty = 1, + yaxt = 'n', xaxt = 'n') + } + } + }else + { + setLayout(length(dimen)) + k = setLayout(length(dimen)) + spacest = c(rep(3,k$mfrow[2]),rep(0,p-2)) + spacesb = c(rep(0,p-2),rep(4.2,k$mfrow[2])) + for(i in dimen) + { + par(mar = c(spacesb[i],4.2,spacest[i],2)) + ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim + plot(x= index, y = x[[1]][index,i], + xlab = if(i > p-2) xlab else"", ylab = varnames[i], + type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, + col = adjustcolor(col[1],alpha.f = 0.9), + xaxt = if(i > p-2)'s' else'n') + for(j in 2:m) + { + lines(x= index, y=x[[j]][index,i], type = "l", + col = adjustcolor(col[j],alpha.f = 0.9), + ylim = ylim, xlim = xlim, lwd = 1, lty = 1, + yaxt = 'n', xaxt = 'n') + } } } + par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) + plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') + legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, + horiz = TRUE,cex = 1, seg.len=1, bty = 'n') + on.exit(par(ask = FALSE, mfrow = c(1,1))) + par(mar = c(5.1, 4.1, 4.1, 2.1)) + par(fig = c(0, 1, 0, 1)) + par(oma = c(0, 0, 0, 0)) } - par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) - plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') - legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - horiz = TRUE,cex = 1, seg.len=1, bty = 'n') - on.exit(par(ask = FALSE, mfrow = c(1,1))) - par(mar = c(5.1, 4.1, 4.1, 2.1)) - par(fig = c(0, 1, 0, 1)) - par(oma = c(0, 0, 0, 0)) if(fast){message("Chain size is very large, fast changed to TRUE.")} } From d781acd8e3476f1ecd5fd8231164656cb1befb3f Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Tue, 23 May 2023 11:08:20 +0530 Subject: [PATCH 005/109] Update traceplot.Rd --- man/traceplot.Rd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/man/traceplot.Rd b/man/traceplot.Rd index 1088a10..92c7b44 100644 --- a/man/traceplot.Rd +++ b/man/traceplot.Rd @@ -10,7 +10,7 @@ Trace Plot for Markov chain Monte Carlo traceplot is a graphical tool commonly used in Bayesian statistics and Markov Chain Monte Carlo(MCMC) methods to diagnose the convergence and mixing properties of a chain. } \usage{ -traceplot(x, fast = FALSE, xlim = NULL, ylim = NULL,component = NULL, +traceplot(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,component = NULL, xlab = "Iteration",auto.layout = TRUE, ask = dev.interactive(), col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", @@ -23,6 +23,8 @@ traceplot(x, fast = FALSE, xlim = NULL, ylim = NULL,component = NULL, \item{fast}{: a boolean argument that will be auto set to TRUE when chain size is larger than 1e6} + \item{which}{: if we want full size traceplots of specific dimensions of chain, we can pass a vector of respective dimension/components. } + \item{xlim}{: range of x-axis} \item{ylim}{: range of y-axis} From 3970b0a35bf30db94574fe8be2f280a210303b0a Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sat, 27 May 2023 15:35:38 +0530 Subject: [PATCH 006/109] Update supp.R --- R/supp.R | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/R/supp.R b/R/supp.R index 85ca2bc..76e5eb9 100644 --- a/R/supp.R +++ b/R/supp.R @@ -176,3 +176,22 @@ setLayout <- function(p=1, auto.layout = TRUE,pars = NULL) } } + + +##setLayout for traceplot +setLayout_trace <- function(p, ask = FALSE) +{ + if(p%%2 == 0) + { + mfrow = c(p/2,2) + } + + else + { + mfrow = c((p+1)/2,2) + } + par(ask = FALSE, mfrow = mfrow) + k = list(ask,mfrow) + names(k) = c("ask","mfrow") + return(k) +} From d15a7b35d05e4a6c7b31ac08dd9093f5fc8cedb7 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sat, 27 May 2023 15:37:08 +0530 Subject: [PATCH 007/109] Update export.R --- R/export.R | 144 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 95 insertions(+), 49 deletions(-) diff --git a/R/export.R b/R/export.R index 15babaf..ffb47ae 100644 --- a/R/export.R +++ b/R/export.R @@ -511,6 +511,12 @@ traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,co "lightpink1","palegreen3","thistle3","aquamarine3","dimgrey", "tomato3")) { + ## Check for the Data Type + if(is.vector(x)) + { + x <- as.matrix(x) + x <- list(x) + } if(is.matrix(x)) { x <- list(x) @@ -557,23 +563,29 @@ traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,co vec[j] = paste("Chain",j) } - if(!is.null(which)) + ## this if condition is for plotting traceplots of chains, + ## when which not equal to NULL and Dimention of chain exceeds 12. + if(!is.null(which)|| p>12) { - for(i in which) + lay = par() + if(!isTRUE(all.equal(lay$mfrow, c(1,1)))) { - ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim - plot(x= index, y = x[[1]][index,i], + for(i in which) + { + ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim + plot(x= index, y = x[[1]][index,i], xlab = xlab, ylab = varnames[i], type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, col = adjustcolor(col[1],alpha.f = 0.9)) - for(j in 2:m) - { + for(j in 2:m) + { lines(x= index, y=x[[j]][index,i], type = "l", col = adjustcolor(col[j],alpha.f = 0.9), ylim = ylim, xlim = xlim, lwd = 1, lty = 1, yaxt = 'n', xaxt = 'n') + } } - + ##Setting of legend par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, @@ -583,23 +595,16 @@ traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,co par(fig = c(0, 1, 0, 1)) par(oma = c(0, 0, 0, 0)) } - }else - { - spacest = NULL - spacesb = NULL - if(p<6) + + else { - par(mfrow = c(p, 1)) - spacest = c(3,rep(0,p-1)) - spacesb = c(rep(0,p-1),4) - - for(i in dimen) + for(i in which) { - par(mar = c(spacesb[i], 4.1, spacest[i], 2.1)) - ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim - plot(x= index, y = x[[1]][index,i], xlab = xlab, ylab =varnames[i], + ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim + plot(x= index, y = x[[1]][index,i], + xlab = xlab, ylab = varnames[i], type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, - col = adjustcolor(col[1],alpha.f = 0.9), xaxt = if(i==p) 's' else 'n') + col = adjustcolor(col[1],alpha.f = 0.9)) for(j in 2:m) { lines(x= index, y=x[[j]][index,i], type = "l", @@ -607,39 +612,80 @@ traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,co ylim = ylim, xlim = xlim, lwd = 1, lty = 1, yaxt = 'n', xaxt = 'n') } + ##Setting of legend + par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) + plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') + legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, + horiz = TRUE,cex = 1, seg.len=1, bty = 'n') + on.exit(par(ask = FALSE, mfrow = c(1,1))) + par(mar = c(5.1, 4.1, 4.1, 2.1)) + par(fig = c(0, 1, 0, 1)) + par(oma = c(0, 0, 0, 0)) } - }else + + } + + } + else + { + spacest = NULL + spacesb = NULL + if(p<6) + { + par(mfrow = c(p, 1)) + spacest = c(3,rep(0,p-1)) + spacesb = c(rep(0,p-1),4) + + for(i in dimen) { - setLayout(length(dimen)) - k = setLayout(length(dimen)) - spacest = c(rep(3,k$mfrow[2]),rep(0,p-2)) - spacesb = c(rep(0,p-2),rep(4.2,k$mfrow[2])) - for(i in dimen) + j = 2 + par(mar = c(spacesb[i], 4.1, spacest[i], 2.1)) + ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim + plot(x= index, y = x[[1]][index,i], xlab = xlab, ylab =varnames[i], + type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, + col = adjustcolor(col[1],alpha.f = 0.9), xaxt = if(i==p) 's' else 'n') + while(j<=m) { - par(mar = c(spacesb[i],4.2,spacest[i],2)) - ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim - plot(x= index, y = x[[1]][index,i], - xlab = if(i > p-2) xlab else"", ylab = varnames[i], - type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, - col = adjustcolor(col[1],alpha.f = 0.9), - xaxt = if(i > p-2)'s' else'n') - for(j in 2:m) - { - lines(x= index, y=x[[j]][index,i], type = "l", - col = adjustcolor(col[j],alpha.f = 0.9), - ylim = ylim, xlim = xlim, lwd = 1, lty = 1, - yaxt = 'n', xaxt = 'n') - } + lines(x= index, y=x[[j]][index,i], type = "l", + col = adjustcolor(col[j],alpha.f = 0.9), + ylim = ylim, xlim = xlim, lwd = 1, lty = 1, + yaxt = 'n', xaxt = 'n') + j = j + 1 } } - par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) - plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') - legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - horiz = TRUE,cex = 1, seg.len=1, bty = 'n') - on.exit(par(ask = FALSE, mfrow = c(1,1))) - par(mar = c(5.1, 4.1, 4.1, 2.1)) - par(fig = c(0, 1, 0, 1)) - par(oma = c(0, 0, 0, 0)) + }else + { + setLayout_trace(length(dimen)) + k = setLayout_trace(length(dimen)) + spacest = c(rep(3,k$mfrow[2]),rep(0,p-2)) + spacesb = c(rep(0,p-2),rep(4.2,k$mfrow[2])) + for(i in dimen) + { + par(mar = c(spacesb[i],4.2,spacest[i],2)) + ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim + plot(x= index, y = x[[1]][index,i], + xlab = if(i > p- k$mfrow[2]) xlab else "", ylab = varnames[i], + type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, + col = adjustcolor(col[1],alpha.f = 0.9), + xaxt = if(i > p-k$mfrow[2])'s' else'n') + for(j in 2:m) + { + lines(x= index, y=x[[j]][index,i], type = "l", + col = adjustcolor(col[j],alpha.f = 0.9), + ylim = ylim, xlim = xlim, lwd = 1, lty = 1, + yaxt = 'n', xaxt = 'n') + } + } + } + ##Setting of legend + par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) + plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') + legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, + horiz = TRUE,cex = 1, seg.len=1, bty = 'n') + on.exit(par(ask = FALSE, mfrow = c(1,1))) + par(mar = c(5.1, 4.1, 4.1, 2.1)) + par(fig = c(0, 1, 0, 1)) + par(oma = c(0, 0, 0, 0)) } if(fast){message("Chain size is very large, fast changed to TRUE.")} } From 0a96fbcbc85132693d7d2759f46189b53b77db66 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sat, 27 May 2023 15:37:34 +0530 Subject: [PATCH 008/109] Update NAMESPACE --- NAMESPACE | 1 + 1 file changed, 1 insertion(+) diff --git a/NAMESPACE b/NAMESPACE index 8899cb0..b1dc18c 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -6,6 +6,7 @@ S3method(boxplot,Siid) S3method(plot,Siid) S3method(plot,Smcmc) export(ACF) +export(traceplot) export(Siid) export(Smcmc) export(addCI) From 594f26c6c21eab70dc2541a93071e1ee67a19393 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Mon, 29 May 2023 16:01:37 +0530 Subject: [PATCH 009/109] Update export.R --- R/export.R | 46 ++++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/R/export.R b/R/export.R index ffb47ae..e52f2f1 100644 --- a/R/export.R +++ b/R/export.R @@ -555,12 +555,9 @@ traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,co vec = vector(length = m) for(j in 1:m) { - for(i in 1:p) - { - maxi[i] = max(maxi,max(x[[j]][,i])) - mini[i] = min(mini,min(x[[j]][,i])) - } - vec[j] = paste("Chain",j) + maxi = max(maxi, apply(x[[j]],2,max)) + mini = min(mini,apply(x[[j]],2,min)) + vec[j] = paste("Chain",j) } ## this if condition is for plotting traceplots of chains, @@ -589,7 +586,7 @@ traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,co par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - horiz = TRUE,cex = 1, seg.len=1, bty = 'n') + horiz = TRUE,cex = 1.25, seg.len=1, bty = 'n') on.exit(par(ask = FALSE, mfrow = c(1,1))) par(mar = c(5.1, 4.1, 4.1, 2.1)) par(fig = c(0, 1, 0, 1)) @@ -613,10 +610,10 @@ traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,co yaxt = 'n', xaxt = 'n') } ##Setting of legend - par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) + par(fig = c(0,1, 0,1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - horiz = TRUE,cex = 1, seg.len=1, bty = 'n') + horiz = TRUE,cex = 1.25, seg.len=1, bty = 'n') on.exit(par(ask = FALSE, mfrow = c(1,1))) par(mar = c(5.1, 4.1, 4.1, 2.1)) par(fig = c(0, 1, 0, 1)) @@ -628,18 +625,15 @@ traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,co } else { - spacest = NULL - spacesb = NULL if(p<6) { par(mfrow = c(p, 1)) - spacest = c(3,rep(0,p-1)) - spacesb = c(rep(0,p-1),4) + par(oma = c(4,0,3,0)) - for(i in dimen) + for(i in 1:p) { j = 2 - par(mar = c(spacesb[i], 4.1, spacest[i], 2.1)) + par(mar = c(0, 4.1,0, 2.1)) ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim plot(x= index, y = x[[1]][index,i], xlab = xlab, ylab =varnames[i], type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, @@ -653,35 +647,39 @@ traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,co j = j + 1 } } + mtext("Iteration", side = 1, line = 3, outer = TRUE, cex= 1) }else { setLayout_trace(length(dimen)) - k = setLayout_trace(length(dimen)) - spacest = c(rep(3,k$mfrow[2]),rep(0,p-2)) - spacesb = c(rep(0,p-2),rep(4.2,k$mfrow[2])) + par(oma = c(4,0,3,0)) + for(i in dimen) { - par(mar = c(spacesb[i],4.2,spacest[i],2)) + j = 2 + par(mar = c(0,4.2,0,2)) ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim plot(x= index, y = x[[1]][index,i], - xlab = if(i > p- k$mfrow[2]) xlab else "", ylab = varnames[i], + xlab = if(i > p-2) xlab else "", ylab = varnames[i], type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, col = adjustcolor(col[1],alpha.f = 0.9), - xaxt = if(i > p-k$mfrow[2])'s' else'n') - for(j in 2:m) + xaxt = if(i > p-2)'s' else'n') + while(j <= m) { lines(x= index, y=x[[j]][index,i], type = "l", col = adjustcolor(col[j],alpha.f = 0.9), ylim = ylim, xlim = xlim, lwd = 1, lty = 1, yaxt = 'n', xaxt = 'n') + j = j +1 } } + } + ##Setting of legend - par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) + par(fig = c(0,1,0,1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - horiz = TRUE,cex = 1, seg.len=1, bty = 'n') + horiz = TRUE,cex = 1.25, seg.len=1, bty = 'n') on.exit(par(ask = FALSE, mfrow = c(1,1))) par(mar = c(5.1, 4.1, 4.1, 2.1)) par(fig = c(0, 1, 0, 1)) From 1ea3c0cd2b6bc5f9e8794b0147081a2da10b0060 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Thu, 1 Jun 2023 10:29:27 +0530 Subject: [PATCH 010/109] Update export.R --- R/export.R | 153 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 103 insertions(+), 50 deletions(-) diff --git a/R/export.R b/R/export.R index e52f2f1..60339d4 100644 --- a/R/export.R +++ b/R/export.R @@ -502,7 +502,6 @@ invisible(list("combined" = avgf, "individual" = chain.acf)) #' #' #' @export - traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,component = NULL, xlab = "Iteration",auto.layout = TRUE, ask = dev.interactive(), @@ -512,16 +511,14 @@ traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,co "tomato3")) { ## Check for the Data Type - if(is.vector(x)) - { + if(is.vector(x) && !is.list(x)) + {class x <- as.matrix(x) x <- list(x) - } - if(is.matrix(x)) + }else if(is.matrix(x) && !is.list(x)) { x <- list(x) - } - if(class(x) == "Smcmc") + }else if(TRUE %in% (class(x) == "Smcmc")) { x <- x$chains }else if(!is.list(x)) @@ -529,64 +526,93 @@ traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,co stop("x must be a matrix, list or an Smcmc object") } - varnames <- colnames(x[[1]]) + dimn <- dim(x[[1]]) n <- dimn[1] p <- dimn[2] m = length(x) + if(m>12){stop("Maximum 12 chains are allowed")} + varnames <- vector(length = p) + for(i in 1:p) + { + varnames[i] = paste("Comp ",i) + } - if(dim(x[[1]])[1] > 100000) + if(dim(x[[1]])[1] > 100000 && fast == FALSE) { fast = TRUE } if(fast) { - index = sample(1:n-1,10000,replace = FALSE) - index = c(index,n) + index = sample(1:n,10000,replace = FALSE) index = sort(index) }else{index = 1:n} dimen <- as.numeric(component) if(is.null(component)) dimen <- 1:p xlim <- if (is.null(xlim)) c(0,n) else xlim - maxi = vector(length = p) - mini = vector(length = p) + maxi = rep(-1e9,p) + mini = rep(1e9,p) vec = vector(length = m) for(j in 1:m) { - maxi = max(maxi, apply(x[[j]],2,max)) - mini = min(mini,apply(x[[j]],2,min)) + mat = as.matrix(x[[j]]) + tempx = rbind(apply(mat,2,max), maxi) + tempn = rbind(apply(mat,2,min),mini) + maxi = apply(tempx,2,max) + mini = apply(tempn,2, min) vec[j] = paste("Chain",j) } ## this if condition is for plotting traceplots of chains, ## when which not equal to NULL and Dimention of chain exceeds 12. - if(!is.null(which)|| p>12) + if(!is.null(which)| p > 10) { + if(p>12 && is.null(which) ) + { + which = 1:p + message("Number of dimension of chain(s) is more than 12. Series of plot returned!") + + } + if(m>8){par(oma = c(0,0,4,0))} lay = par() if(!isTRUE(all.equal(lay$mfrow, c(1,1)))) { for(i in which) { - ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim + j = 2 + ylim = c(mini[i],maxi[i]) plot(x= index, y = x[[1]][index,i], - xlab = xlab, ylab = varnames[i], - type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, - col = adjustcolor(col[1],alpha.f = 0.9)) - for(j in 2:m) + xlab = xlab, ylab = varnames[i], + type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, + col = adjustcolor(col[1],alpha.f = 0.9)) + while(j <= m) { lines(x= index, y=x[[j]][index,i], type = "l", col = adjustcolor(col[j],alpha.f = 0.9), ylim = ylim, xlim = xlim, lwd = 1, lty = 1, yaxt = 'n', xaxt = 'n') + j = j + 1 } } ##Setting of legend - par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) - plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') - legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - horiz = TRUE,cex = 1.25, seg.len=1, bty = 'n') + if(m > 8) + + { + par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) + plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') + legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, + cex = 1, seg.len= 1, bty = 'n',x.intersp = 0.1,ncol = 6) + } + + else + { + par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) + plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') + legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, + horiz = TRUE,cex = 1.25, seg.len= 1, bty = 'n') + } on.exit(par(ask = FALSE, mfrow = c(1,1))) par(mar = c(5.1, 4.1, 4.1, 2.1)) par(fig = c(0, 1, 0, 1)) @@ -597,27 +623,41 @@ traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,co { for(i in which) { - ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim + j = 2 + ylim = c(mini[i],maxi[i]) plot(x= index, y = x[[1]][index,i], xlab = xlab, ylab = varnames[i], - type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, + type = "l", lwd = 1.3, lty = 1, ylim = ylim, xlim = xlim, col = adjustcolor(col[1],alpha.f = 0.9)) - for(j in 2:m) + while(j <= m) { lines(x= index, y=x[[j]][index,i], type = "l", col = adjustcolor(col[j],alpha.f = 0.9), - ylim = ylim, xlim = xlim, lwd = 1, lty = 1, + ylim = ylim, xlim = xlim, lwd = 1.3, lty = 1, yaxt = 'n', xaxt = 'n') + j = j+ 1 } ##Setting of legend - par(fig = c(0,1, 0,1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) - plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') - legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - horiz = TRUE,cex = 1.25, seg.len=1, bty = 'n') - on.exit(par(ask = FALSE, mfrow = c(1,1))) - par(mar = c(5.1, 4.1, 4.1, 2.1)) - par(fig = c(0, 1, 0, 1)) - par(oma = c(0, 0, 0, 0)) + if(m > 8) + + { + par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) + plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') + legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, + cex = 1, seg.len= 1, bty = 'n',x.intersp = 0.1,ncol = 6) + } + + else + { + par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) + plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') + legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, + horiz = TRUE,cex = 1.25, seg.len= 1, bty = 'n') + } + on.exit(par(ask = FALSE, mfrow = c(1,1))) + par(mar = c(5.1, 4.1, 4.1, 2.1)) + par(fig = c(0, 1, 0, 1)) + par(oma = c(0, 0, 0, 0)) } } @@ -628,21 +668,22 @@ traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,co if(p<6) { par(mfrow = c(p, 1)) - par(oma = c(4,0,3,0)) + if(m>8){par(oma = c(4,0,4,0))} + else {par(oma = c(4,0,3,0))} for(i in 1:p) { j = 2 par(mar = c(0, 4.1,0, 2.1)) - ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim + ylim <- c(mini[i],maxi[i]) plot(x= index, y = x[[1]][index,i], xlab = xlab, ylab =varnames[i], - type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, + type = "l", lwd = 1.3, lty = 1, ylim = ylim, xlim = xlim, col = adjustcolor(col[1],alpha.f = 0.9), xaxt = if(i==p) 's' else 'n') while(j<=m) { lines(x= index, y=x[[j]][index,i], type = "l", col = adjustcolor(col[j],alpha.f = 0.9), - ylim = ylim, xlim = xlim, lwd = 1, lty = 1, + ylim = ylim, xlim = xlim, lwd = 1.3, lty = 1, yaxt = 'n', xaxt = 'n') j = j + 1 } @@ -651,23 +692,23 @@ traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,co }else { setLayout_trace(length(dimen)) - par(oma = c(4,0,3,0)) + par(oma = c(4,0,4,0)) for(i in dimen) { j = 2 par(mar = c(0,4.2,0,2)) - ylim <- if (is.null(ylim)) c(mini[i],maxi[i]) else ylim + ylim <- c(mini[i],maxi[i]) plot(x= index, y = x[[1]][index,i], xlab = if(i > p-2) xlab else "", ylab = varnames[i], - type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, + type = "l", lwd = 1.3, lty = 1, ylim = ylim, xlim = xlim, col = adjustcolor(col[1],alpha.f = 0.9), xaxt = if(i > p-2)'s' else'n') while(j <= m) { lines(x= index, y=x[[j]][index,i], type = "l", col = adjustcolor(col[j],alpha.f = 0.9), - ylim = ylim, xlim = xlim, lwd = 1, lty = 1, + ylim = ylim, xlim = xlim, lwd = 1.3, lty = 1, yaxt = 'n', xaxt = 'n') j = j +1 } @@ -676,14 +717,26 @@ traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,co } ##Setting of legend - par(fig = c(0,1,0,1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) - plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') - legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - horiz = TRUE,cex = 1.25, seg.len=1, bty = 'n') + if(m > 8) + + { + par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) + plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') + legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, + cex = 1.25, seg.len= 1, bty = 'n',x.intersp = 1,ncol = 6, y.intersp = 0.7) + } + + else + { + par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) + plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') + legend("top",legend = vec[1:m], col = col[1:m],lty = 1,lwd =2, xpd = TRUE, + horiz = TRUE,cex = 1.25, seg.len= 1, bty = 'n') + } on.exit(par(ask = FALSE, mfrow = c(1,1))) par(mar = c(5.1, 4.1, 4.1, 2.1)) par(fig = c(0, 1, 0, 1)) par(oma = c(0, 0, 0, 0)) } - if(fast){message("Chain size is very large, fast changed to TRUE.")} + if(fast && n>1000000){message("Chain size is very large, fast changed to TRUE.")} } From f5ac81f6e0b7afebcbe2ff333e0b842688800ec8 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sat, 3 Jun 2023 09:40:20 +0530 Subject: [PATCH 011/109] Update export.R --- R/export.R | 241 ++++++++++++++++------------------------------------- 1 file changed, 74 insertions(+), 167 deletions(-) diff --git a/R/export.R b/R/export.R index 60339d4..0e927b6 100644 --- a/R/export.R +++ b/R/export.R @@ -502,8 +502,8 @@ invisible(list("combined" = avgf, "individual" = chain.acf)) #' #' #' @export -traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,component = NULL, - xlab = "Iteration",auto.layout = TRUE, +traceplot <- function(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,main = NULL, + xlab = "Iteration",ylab = NULL,alpha.f = 0.9, auto.layout = TRUE, ask = dev.interactive(), col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", "springgreen2","skyblue3","khaki3", @@ -511,232 +511,139 @@ traceplot <- function(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,co "tomato3")) { ## Check for the Data Type - if(is.vector(x) && !is.list(x)) - {class - x <- as.matrix(x) - x <- list(x) - }else if(is.matrix(x) && !is.list(x)) + if(TRUE %in% (class(x) == "Smcmc")){x <- x$chains}else if(is.list(x)) { - x <- list(x) - }else if(TRUE %in% (class(x) == "Smcmc")) + for(i in 1:length(x)) { x[[i]] = as.matrix(x[[i]]) } + }else if(is.vector(x)) { - x <- x$chains - }else if(!is.list(x)) - { - stop("x must be a matrix, list or an Smcmc object") - } + x <- as.matrix(x) + x <- list(x) + }else if(is.matrix(x)) + {x <- list(x)}else + {stop("x must be a matrix, list or an Smcmc object")} - dimn <- dim(x[[1]]) n <- dimn[1] p <- dimn[2] - m = length(x) - if(m>12){stop("Maximum 12 chains are allowed")} - varnames <- vector(length = p) - for(i in 1:p) - { - varnames[i] = paste("Comp ",i) - } + m <- length(x) - if(dim(x[[1]])[1] > 100000 && fast == FALSE) + if(m>5){stop("Maximum 5 chains are allowed")} + + if(is.null(ylab) | !is.vector(ylab) | length(ylab)!=p) { - fast = TRUE + if(!is.null(ylab) && (!is.vector(ylab) | length(ylab) != p )) + {message("ylab should be NULL, or vector of length no. of dimension. Default value of ylab applied.")} + ylab <- vector(length = p) + for(i in 1:p) { ylab[i] <- paste("Comp ",i) } } - if(fast) + if(dim(x[[1]])[1] > 100000 && is.na(fast)){ fast = TRUE } + if(!is.null(fast) && isTRUE(fast)) { - index = sample(1:n,10000,replace = FALSE) - index = sort(index) + if(n < 1e4){index = 1:n} + else + { + index <- sample(1:n,10000,replace = FALSE) + index <- sort(index) + } }else{index = 1:n} - dimen <- as.numeric(component) - if(is.null(component)) dimen <- 1:p xlim <- if (is.null(xlim)) c(0,n) else xlim - maxi = rep(-1e9,p) - mini = rep(1e9,p) - vec = vector(length = m) + maxi <- rep(-1e9,p) + mini <- rep(1e9,p) + vec <- vector(length = m) for(j in 1:m) { - mat = as.matrix(x[[j]]) - tempx = rbind(apply(mat,2,max), maxi) - tempn = rbind(apply(mat,2,min),mini) - maxi = apply(tempx,2,max) - mini = apply(tempn,2, min) - vec[j] = paste("Chain",j) + mat <- as.matrix(x[[j]]) + tempx <- rbind(apply(mat,2,max), maxi) + tempn <- rbind(apply(mat,2,min),mini) + maxi <- apply(tempx,2,max) + mini <- apply(tempn,2, min) + vec[j] <- paste("Chain",j) } ## this if condition is for plotting traceplots of chains, - ## when which not equal to NULL and Dimention of chain exceeds 12. + ## when which not equal to NULL and Dimension of chain exceeds 12. if(!is.null(which)| p > 10) { - if(p>12 && is.null(which) ) + if(p > 10 && is.null(which) ) { - which = 1:p - message("Number of dimension of chain(s) is more than 12. Series of plot returned!") + which <- 1:p + message("Number of dimension of chain(s) is more than 10. Series of plot returned!") } - if(m>8){par(oma = c(0,0,4,0))} - lay = par() - if(!isTRUE(all.equal(lay$mfrow, c(1,1)))) + lay <- par() + leg <- lay$mfrow[1]*lay$mfrow[2] + for(i in which) { - for(i in which) - { - j = 2 - ylim = c(mini[i],maxi[i]) - plot(x= index, y = x[[1]][index,i], - xlab = xlab, ylab = varnames[i], - type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, - col = adjustcolor(col[1],alpha.f = 0.9)) + par(mar = c(4, 4, 3, 2)) + j <- 1 + ylim <- c(mini[i],maxi[i]) + plot(x = index, y = x[[1]][index,i], + xlab = xlab, ylab = ylab[i], + type = "n", lwd = 1.3, lty = 1, ylim = ylim, xlim = xlim, + col = adjustcolor(col[1],alpha.f = alpha.f)) while(j <= m) { - lines(x= index, y=x[[j]][index,i], type = "l", - col = adjustcolor(col[j],alpha.f = 0.9), - ylim = ylim, xlim = xlim, lwd = 1, lty = 1, + lines( x= index, y=x[[j]][index,i], type = "l", + col = adjustcolor(col[j],alpha.f = alpha.f), + ylim = ylim, xlim = xlim, lwd = 1.3, lty = 1, yaxt = 'n', xaxt = 'n') - j = j + 1 - } - } - ##Setting of legend - if(m > 8) - - { - par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) - plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') - legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - cex = 1, seg.len= 1, bty = 'n',x.intersp = 0.1,ncol = 6) - } + j <- j + 1 + } - else - { + ##Setting of legend + if(i%%leg == 0|i == which[length(which)]) + { par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - horiz = TRUE,cex = 1.25, seg.len= 1, bty = 'n') - } - on.exit(par(ask = FALSE, mfrow = c(1,1))) - par(mar = c(5.1, 4.1, 4.1, 2.1)) - par(fig = c(0, 1, 0, 1)) - par(oma = c(0, 0, 0, 0)) - } - - else - { - for(i in which) - { - j = 2 - ylim = c(mini[i],maxi[i]) - plot(x= index, y = x[[1]][index,i], - xlab = xlab, ylab = varnames[i], - type = "l", lwd = 1.3, lty = 1, ylim = ylim, xlim = xlim, - col = adjustcolor(col[1],alpha.f = 0.9)) - while(j <= m) - { - lines(x= index, y=x[[j]][index,i], type = "l", - col = adjustcolor(col[j],alpha.f = 0.9), - ylim = ylim, xlim = xlim, lwd = 1.3, lty = 1, - yaxt = 'n', xaxt = 'n') - j = j+ 1 - } - ##Setting of legend - if(m > 8) - - { - par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) - plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') - legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - cex = 1, seg.len= 1, bty = 'n',x.intersp = 0.1,ncol = 6) + horiz = TRUE,cex = 1.25, seg.len= 1, bty = 'n') + par(mfrow = lay$mfrow) } - - else - { - par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) - plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') - legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - horiz = TRUE,cex = 1.25, seg.len= 1, bty = 'n') - } - on.exit(par(ask = FALSE, mfrow = c(1,1))) - par(mar = c(5.1, 4.1, 4.1, 2.1)) - par(fig = c(0, 1, 0, 1)) - par(oma = c(0, 0, 0, 0)) } + on.exit(par(ask = FALSE, mfrow = c(1,1))) + par(mar = c(5.1, 4.1, 4.1, 2.1)) + par(fig = c(0, 1, 0, 1)) + par(oma = c(0, 0, 0, 0)) - } - } else { - if(p<6) - { - par(mfrow = c(p, 1)) if(m>8){par(oma = c(4,0,4,0))} else {par(oma = c(4,0,3,0))} - + axs = p-1 + if(p <= 4){axs = p-1} + else {axs = p-2} + setLayout_trace(p) for(i in 1:p) { j = 2 par(mar = c(0, 4.1,0, 2.1)) ylim <- c(mini[i],maxi[i]) - plot(x= index, y = x[[1]][index,i], xlab = xlab, ylab =varnames[i], + plot(x= index, y = x[[1]][index,i], xlab = if(i>axs) xlab else "" , ylab =ylab[i], type = "l", lwd = 1.3, lty = 1, ylim = ylim, xlim = xlim, - col = adjustcolor(col[1],alpha.f = 0.9), xaxt = if(i==p) 's' else 'n') + col = adjustcolor(col[1],alpha.f = alpha.f), xaxt = if(i>axs) 's' else 'n') while(j<=m) { lines(x= index, y=x[[j]][index,i], type = "l", - col = adjustcolor(col[j],alpha.f = 0.9), + col = adjustcolor(col[j],alpha.f = alpha.f), ylim = ylim, xlim = xlim, lwd = 1.3, lty = 1, yaxt = 'n', xaxt = 'n') j = j + 1 } } - mtext("Iteration", side = 1, line = 3, outer = TRUE, cex= 1) - }else - { - setLayout_trace(length(dimen)) - par(oma = c(4,0,4,0)) + if(p<=4){mtext("Iteration", side = 1, line = 2, outer = TRUE, cex= 1)} - for(i in dimen) - { - j = 2 - par(mar = c(0,4.2,0,2)) - ylim <- c(mini[i],maxi[i]) - plot(x= index, y = x[[1]][index,i], - xlab = if(i > p-2) xlab else "", ylab = varnames[i], - type = "l", lwd = 1.3, lty = 1, ylim = ylim, xlim = xlim, - col = adjustcolor(col[1],alpha.f = 0.9), - xaxt = if(i > p-2)'s' else'n') - while(j <= m) - { - lines(x= index, y=x[[j]][index,i], type = "l", - col = adjustcolor(col[j],alpha.f = 0.9), - ylim = ylim, xlim = xlim, lwd = 1.3, lty = 1, - yaxt = 'n', xaxt = 'n') - j = j +1 - } - } - - } - - ##Setting of legend - if(m > 8) - - { - par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) - plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') - legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - cex = 1.25, seg.len= 1, bty = 'n',x.intersp = 1,ncol = 6, y.intersp = 0.7) - } - - else - { + ##Setting of legend par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') legend("top",legend = vec[1:m], col = col[1:m],lty = 1,lwd =2, xpd = TRUE, horiz = TRUE,cex = 1.25, seg.len= 1, bty = 'n') - } + } + if(isTRUE(fast) && n > 100000){message("Chain size is very large, fast changed to TRUE.")} on.exit(par(ask = FALSE, mfrow = c(1,1))) par(mar = c(5.1, 4.1, 4.1, 2.1)) par(fig = c(0, 1, 0, 1)) par(oma = c(0, 0, 0, 0)) - } - if(fast && n>1000000){message("Chain size is very large, fast changed to TRUE.")} } From 74ab21c1d1105133bbc669debc74c2234822facf Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sat, 3 Jun 2023 12:37:21 +0530 Subject: [PATCH 012/109] Update traceplot.Rd --- man/traceplot.Rd | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/man/traceplot.Rd b/man/traceplot.Rd index 92c7b44..84b86c7 100644 --- a/man/traceplot.Rd +++ b/man/traceplot.Rd @@ -10,18 +10,18 @@ Trace Plot for Markov chain Monte Carlo traceplot is a graphical tool commonly used in Bayesian statistics and Markov Chain Monte Carlo(MCMC) methods to diagnose the convergence and mixing properties of a chain. } \usage{ -traceplot(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,component = NULL, - xlab = "Iteration",auto.layout = TRUE, - ask = dev.interactive(), - col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", - "springgreen2","skyblue3","khaki3", - "lightpink1","palegreen3","thistle3","aquamarine3", - "dimgrey","tomato3")) +traceplot(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,main = NULL, + xlab = "Iteration",ylab = NULL,alpha.f = 0.9, auto.layout = TRUE, + ask = dev.interactive(), + col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", + "springgreen2","skyblue3","khaki3", + "lightpink1","palegreen3","thistle3","aquamarine3","dimgrey", + "tomato3")) } \arguments{ - \item{x}{: an `Smcmc' class object or a list of Markov chains or a Markov chain matrix} + \item{x}{: an `Smcmc' class object or a list of Markov chains or a Markov chain matrix or a vector} - \item{fast}{: a boolean argument that will be auto set to TRUE when chain size is larger than 1e6} + \item{fast}{: a Boolean argument that will be auto set to TRUE when chain size is larger than 1e6} \item{which}{: if we want full size traceplots of specific dimensions of chain, we can pass a vector of respective dimension/components. } @@ -29,10 +29,14 @@ traceplot(x, fast = FALSE, which = NULL, xlim = NULL, ylim = NULL,component = NU \item{ylim}{: range of y-axis} - \item{component}{: a vector of integers indicating which components' ACF plots are needed. By default all components are drawn.} + \item{main}{: usual heading for plot} \item{xlab}{: lables of x-axis} + \item{ylab}{: labels of y-axis(it should be a vector of length equal to dimension of chain)} + + \item{alpha.f}{: To fix the opacity of lines as per user convenience, by default it is 0.9.} + \item{auto.layout}{: logical argument for an automatic layout of plots} \item{ask}{: activating interactive plots} From dc35a07aa714879ef16aac48a0553ef1b8c08b02 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sat, 3 Jun 2023 12:38:40 +0530 Subject: [PATCH 013/109] Update export.R --- R/export.R | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/R/export.R b/R/export.R index 0e927b6..70bef4c 100644 --- a/R/export.R +++ b/R/export.R @@ -437,30 +437,29 @@ invisible(list("combined" = avgf, "individual" = chain.acf)) - - #' @title Trace Plot for Markov chain Monte Carlo #' @description traceplot is a graphical tool commonly used in Bayesian statistics and Markov Chain Monte Carlo(MCMC) methods to diagnose the convergence and mixing properties of a chain. #' @name traceplot -#' @usage function(x, fast = FALSE,which = NULL, xlim = NULL, ylim = NULL,component = NULL, -#' xlab = "Iteration",auto.layout = TRUE, -#' ask = dev.interactive(), +#' @usage function(x, fast = NULL,which = NULL, xlim = NULL, ylim = NULL, +#' xlab = "Iteration",ylab = NULL, auto.layout = TRUE, +#' alpha.f = 0.9, ask = dev.interactive(), #' col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", #' "springgreen2","skyblue3","khaki3", #' "lightpink1","palegreen3","thistle3","aquamarine3","dimgrey", #' "tomato3")) #' -#'@param x : an `Smcmc' class object or a list of Markov chains or a Markov chain matrix -#'@param fast : a boolean argument that will be auto set to TRUE when chain size is larger than 1e6 -#'@param which : if we want full size traceplots of specific dimensions of chain, we can pass a vector of respective dimension/components. +#'@param x : an `Smcmc' class object or a list of Markov chains or a Markov chain matrix or a vector. +#'@param fast : a Boolean argument that will be auto set to TRUE when chain size is larger than 1e6 +#'@param which : if we want full size trace plots of specific dimensions of chain, we can pass a vector of respective dimension/components. #'@param xlim : range of x-axis #'@param ylim : range of y-axis -#'@param component : a vector of integers indicating which components' ACF plots are needed. By default all components are drawn. -#'@param xlab : lables of x-axis +#'@param main : usual heading for plot +#'@param xlab : labels of x-axis +#'@param ylab : labels of y-axis(it should be a vector of length equal to dimension of chain) #'@param auto.layout : logical argument for an automatic layout of plots #'@param ask : activating interactive plots #'@param col : color vector for multiple chains -#' +#'@param alpha.f : To fix the opacity of lines as per user convenience, by default it is 0.9. #' #' @return Returns the Trace Plots of Markov Chain(s) #' @examples From 87d07b142e52fc73bdc5fbdee713b088ee8c3ff9 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sat, 3 Jun 2023 15:15:46 +0530 Subject: [PATCH 014/109] Update export.R --- R/export.R | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/R/export.R b/R/export.R index 70bef4c..b44359e 100644 --- a/R/export.R +++ b/R/export.R @@ -539,25 +539,30 @@ traceplot <- function(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,mai if(dim(x[[1]])[1] > 100000 && is.na(fast)){ fast = TRUE } if(!is.null(fast) && isTRUE(fast)) { - if(n < 1e4){index = 1:n} + if(n < 1e3){index = 1:n} else { - index <- sample(1:n,10000,replace = FALSE) + index <- sample(1:n,1000,replace = FALSE) index <- sort(index) } }else{index = 1:n} xlim <- if (is.null(xlim)) c(0,n) else xlim + maxi <- rep(-1e9,p) mini <- rep(1e9,p) vec <- vector(length = m) for(j in 1:m) { + if(is.null(ylim)){ mat <- as.matrix(x[[j]]) tempx <- rbind(apply(mat,2,max), maxi) tempn <- rbind(apply(mat,2,min),mini) maxi <- apply(tempx,2,max) mini <- apply(tempn,2, min) + } + else{mini = rep(ylim[1],p) + maxi = rep(ylim[2],p)} vec[j] <- paste("Chain",j) } @@ -609,8 +614,7 @@ traceplot <- function(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,mai } else { - if(m>8){par(oma = c(4,0,4,0))} - else {par(oma = c(4,0,3,0))} + par(oma = c(4,0,3,0)) axs = p-1 if(p <= 4){axs = p-1} else {axs = p-2} @@ -631,14 +635,18 @@ traceplot <- function(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,mai yaxt = 'n', xaxt = 'n') j = j + 1 } + if(p%%2 != 0 && i == p-1 && p>4){mtext("Iteration", side = 1, line = 2.3,cex = 1)} } - if(p<=4){mtext("Iteration", side = 1, line = 2, outer = TRUE, cex= 1)} - + if(p<=4){mtext(" Iteration", side = 1, line = 2.3, outer = TRUE, cex= 1)} + else{mtext("Iteration", side = 1, line = 2.3,at = 0.3,outer = TRUE,cex = 1) + if(p%%2 == 0){mtext("Iteration", side = 1, line = 2.3,at = 0.8,outer = TRUE,cex = 1)}} ##Setting of legend par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') legend("top",legend = vec[1:m], col = col[1:m],lty = 1,lwd =2, xpd = TRUE, horiz = TRUE,cex = 1.25, seg.len= 1, bty = 'n') + + } if(isTRUE(fast) && n > 100000){message("Chain size is very large, fast changed to TRUE.")} on.exit(par(ask = FALSE, mfrow = c(1,1))) From 92f1a7760ec26c3f94578bcb8c2e2f3c1964f80e Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sat, 3 Jun 2023 16:43:19 +0530 Subject: [PATCH 015/109] Update export.R --- R/export.R | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/R/export.R b/R/export.R index b44359e..7a19bb7 100644 --- a/R/export.R +++ b/R/export.R @@ -578,9 +578,13 @@ traceplot <- function(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,mai } lay <- par() leg <- lay$mfrow[1]*lay$mfrow[2] + space = 0 + if(is.null(main)){par(oma = c(0,0,2,0))} + else{par(oma = c(0,0,2.5,0)) + space = 1} for(i in which) { - par(mar = c(4, 4, 3, 2)) + par(mar = c(4, 4, 2, 3)) j <- 1 ylim <- c(mini[i],maxi[i]) plot(x = index, y = x[[1]][index,i], @@ -599,10 +603,15 @@ traceplot <- function(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,mai ##Setting of legend if(i%%leg == 0|i == which[length(which)]) { - par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) + if(!is.null(main)){mtext(main, side = 3, line = 1,outer = TRUE, cex = 1.5)} + par(fig = c(0, 1, 0, 1), oma = c(0, 0, space, 0), mar = c(0, 0, 0, 0), new = TRUE) plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, horiz = TRUE,cex = 1.25, seg.len= 1, bty = 'n') + if(is.null(main)){par(oma = c(0,0,2,0))} + else{par(oma = c(0,0,2.5,0)) + space = 1.1} + par(mar = c(4, 4, 2, 3)) par(mfrow = lay$mfrow) } } @@ -613,8 +622,11 @@ traceplot <- function(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,mai } else - { - par(oma = c(4,0,3,0)) + { + space = 0 + if(is.null(main)){par(oma = c(4,0,2.5,0))} + else{par(oma = c(4,0,4,0)) + space = 1.3} axs = p-1 if(p <= 4){axs = p-1} else {axs = p-2} @@ -637,11 +649,12 @@ traceplot <- function(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,mai } if(p%%2 != 0 && i == p-1 && p>4){mtext("Iteration", side = 1, line = 2.3,cex = 1)} } - if(p<=4){mtext(" Iteration", side = 1, line = 2.3, outer = TRUE, cex= 1)} + if(!is.null(main)){mtext(main, side = 3, line = 2,outer = TRUE, cex = 1.3)} + if(p<=4){mtext("Iteration", side = 1, line = 2.3,at =0.52, outer = TRUE, cex= 1)} else{mtext("Iteration", side = 1, line = 2.3,at = 0.3,outer = TRUE,cex = 1) - if(p%%2 == 0){mtext("Iteration", side = 1, line = 2.3,at = 0.8,outer = TRUE,cex = 1)}} + if(p%%2 == 0){mtext("Iteration", side = 1, line = 2.3,at = 0.8,outer = TRUE,cex = 1)}} ##Setting of legend - par(fig = c(0, 1, 0, 1), oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0), new = TRUE) + par(fig = c(0, 1, 0, 1), oma = c(0, 0, space, 0), mar = c(0, 0, 0, 0), new = TRUE) plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') legend("top",legend = vec[1:m], col = col[1:m],lty = 1,lwd =2, xpd = TRUE, horiz = TRUE,cex = 1.25, seg.len= 1, bty = 'n') From 7c8bd8910979f8b63e349260950b8a510a653034 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Mon, 5 Jun 2023 23:51:34 +0530 Subject: [PATCH 016/109] Update export.R --- R/export.R | 69 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 44 insertions(+), 25 deletions(-) diff --git a/R/export.R b/R/export.R index 7a19bb7..8a539df 100644 --- a/R/export.R +++ b/R/export.R @@ -321,6 +321,7 @@ boxCI <- function(x, #' @param component : a vector of integers indicating which components' ACF plots are needed. By default all components are drawn. #' @param type : the kind of ACF plot: "correlation" or "covariance" #' @param plot : TRUE if plots are required. If FALSE, raw values are returned +#' @param main : To add heading in the plot #' @param lag.max : Maximum lag for the ACF plot #' @param avg.col : color for the overall ACF of each component #' @param chain.col : color for the ACF of the individual chains. @@ -349,10 +350,12 @@ boxCI <- function(x, #' #' @export + ACF <- function(x, component = NULL, type = c("correlation", "covariance", "partial"), plot = TRUE, + main = NULL, lag.max = NULL, avgcol = "blue", chain.col = "red", @@ -360,52 +363,57 @@ ACF <- function(x, auto.layout = TRUE, ask = dev.interactive()) { - - if(is.matrix(x)) - { - x <- list(x) - } - if(class(x) == "Smcmc") + if(TRUE %in% (class(x) == "Smcmc")){x <- x$chains}else if(is.list(x)) { - x <- x$chains - }else if(!is.list(x)) + for(i in 1:length(x)) { x[[i]] = as.matrix(x[[i]]) } + }else if(is.vector(x)) { - stop("x must be a matrix, list or an Smcmc object") - } + x <- as.matrix(x) + x <- list(x) + }else if(is.matrix(x)) + {x <- list(x)}else + {stop("x must be a matrix, list or an Smcmc object")} + dimn <- dim(x[[1]]) n <- dimn[1] p <- dimn[2] - + m <- length(x) + + if(m>10){stop("Maximum 10 chains are allowed")} + which <- as.numeric(component) if(is.null(component)) which <- 1:p - + varnames <- colnames(x[[1]]) if (is.null(lag.max)) lag.max <- floor(10 * (log10(n)) ) lag.max <- as.integer(min(lag.max, n - 1L)) - m <- length(x) - - if(plot) - { - setLayout(length(which)) - } + np = length(which) + space = 0 + if(is.null(main)){par(oma = c(4,0,2,0))} + else{par(oma = c(4,0,3,0)) + space = 1.3} + axs = np-1 + if(np <= 4){axs = np-1} + else {axs = np-2} + setLayout_trace(np) + for(i in which) { xi <- matrix(data = 0, nrow = n, ncol = m) - + for (j in 1:m) { xi[,j] <- x[[j]][,i] } xi <- xi - mean(xi) # global mean chain.acf <- list(length = m) - for(j in 1:m) { chain.acf[[j]] <- acf(xi[,j], type = type, plot = FALSE, demean = FALSE, lag.max = lag.max) } - + avgf <- chain.acf[[1]] k = 100 avgf$acf <- 0 @@ -418,25 +426,36 @@ ACF <- function(x, if(plot) { - plot(avgf, ci = 0, main = varnames[i], lwd = .2, ylim = c( min(- 1.96/sqrt(n),min(avgf$acf),k), max(avgf$acf))) + par(mar = c(0, 4.1,0, 2.1)) + plot(avgf, ci = 0, main = varnames[i], lwd = .2, ylim = c( min(- 1.96/sqrt(n),min(avgf$acf),k), max(avgf$acf)),xlab = if(i>axs) "Lag" else "" , ylab = paste("ACF",i), + lty = 1, xaxt = if(i>axs) 's' else 'n') for(j in 1:m) { lines(0:lag.max, as.matrix(chain.acf[[j]]$acf), type = "l", col = adjustcolor(chain.col, alpha.f = .5), lwd = 1, lty = 1, yaxt = 'n', xaxt = 'n') } lines(0:lag.max, as.matrix(avgf$acf), type = "l", col = adjustcolor(avgcol, alpha.f = .6), lwd = 1, lty = 1, yaxt = 'n', xaxt = 'n') - + if(np%%2 != 0 && i == np-1 && np>4){mtext("Lag", side = 1, line = 2.3,cex = 0.8)} + } + + if(plot){ + if(!is.null(main)){mtext(main, side = 3, line = space,outer = TRUE, cex = 1.3)} + if(np <= 4){mtext("Lag", side = 1, line = 2.3,at =0.52, outer = TRUE, cex= 1)} + else{mtext("Lag", side = 1, line = 2.3,at = 0.3,outer = TRUE,cex = 0.8) + if(np %% 2 == 0){mtext("Lag", side = 1, line = 2.3,at = 0.8,outer = TRUE,cex = 0.8)}} } } -on.exit( par (ask = FALSE,mfrow=c(1,1))) -invisible(list("combined" = avgf, "individual" = chain.acf)) + on.exit( par (ask = FALSE,mfrow=c(1,1))) + invisible(list("combined" = avgf, "individual" = chain.acf)) } + + #' @title Trace Plot for Markov chain Monte Carlo #' @description traceplot is a graphical tool commonly used in Bayesian statistics and Markov Chain Monte Carlo(MCMC) methods to diagnose the convergence and mixing properties of a chain. #' @name traceplot From 6621abbe9f8ca51b91c4a3f1452304d58ce3c8e6 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Mon, 5 Jun 2023 23:52:38 +0530 Subject: [PATCH 017/109] Update ACF.Rd --- man/ACF.Rd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/man/ACF.Rd b/man/ACF.Rd index a1abdae..e475fcc 100644 --- a/man/ACF.Rd +++ b/man/ACF.Rd @@ -16,6 +16,8 @@ ACF(x,component = NULL, type = c("correlation", "covariance"), \item{type}{: the kind of ACF plot: "correlation" or "covariance"} \item{plot}{: TRUE if plots are required. If FALSE, raw values are returned} + + \item{main}{: To add heading ro the plot} \item{lag.max}{: Maximum lag for the ACF plot} From 6296e5f5c034d21e275764f996a629d9027c2443 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Mon, 12 Jun 2023 15:10:02 +0530 Subject: [PATCH 018/109] Update Smcmcclass.R --- R/Smcmcclass.R | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/R/Smcmcclass.R b/R/Smcmcclass.R index 3d67810..1019c75 100644 --- a/R/Smcmcclass.R +++ b/R/Smcmcclass.R @@ -86,6 +86,7 @@ Smcmc <- function(data, + #' @title Plot Smcmc #' #' @description Density plots with simultaenous error bars around means and quantiles @@ -103,6 +104,7 @@ Smcmc <- function(data, #' @param thresh : numeric typically less than .005 for the accuracy of the simulteaneous procedure #' @param iid : logical argument for constructing density plot for iid samples. Defaults to \code{FALSE} #' @param plot : logical argument for is plots are to be returned +#' @param main : to add main heading #' @param mean : logical argument whether the mean is to be plotted #' @param border : whether a border is required for the simultaneous confidence intervals #' @param mean.col : color for the mean confidence interval @@ -137,6 +139,7 @@ Smcmc <- function(data, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, + main = NULL, iid = FALSE, plot = TRUE, mean = TRUE, @@ -154,13 +157,10 @@ Smcmc <- function(data, if(plot == TRUE) { plot.CIs(x, dimn = length(x$stacked[1,]), CIs = out, bord = border, - mean.color = adjustcolor(mean.col, alpha.f = opaq), - quan.color = adjustcolor(quan.col, alpha.f = opaq), - mean = mean, auto.layout = auto.layout, rug = rug, - ask = ask, ...) + mean.color = adjustcolor(mean.col, alpha.f = opaq), + quan.color = adjustcolor(quan.col, alpha.f = opaq), + mean = mean, auto.layout = auto.layout, rug = rug, + ask = ask,main = main, ...) } invisible(out) } - - - From 55109a99ba51c25ada4d5d8f5ccd08bef3757d08 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Mon, 12 Jun 2023 15:13:20 +0530 Subject: [PATCH 019/109] Update supp.R --- R/supp.R | 115 +++++++++++++++++++++---------------------------------- 1 file changed, 44 insertions(+), 71 deletions(-) diff --git a/R/supp.R b/R/supp.R index 76e5eb9..edbed11 100644 --- a/R/supp.R +++ b/R/supp.R @@ -27,44 +27,18 @@ CIz <- function(z, p1 , p2, theta.hat, phi, ci.sigma.mat, n, mean = TRUE) return (list("lower.ci" = c(lower.ci.p1, lower.ci.p2), "upper.ci" = c(upper.ci.p1, upper.ci.p2))) } -"set.mfrow" <-function (Nparms = 1) -{ - ## Set up dimensions of graphics window: - ## 1 x 1 if Nparms = 1 - ## 1 X 2 if Nparms = 2 - ## 2 X 2 if Nparms = 3 or 4 - ## 3 X 2 if Nparmss = 5 or 6 or 10 - 12 - ## 3 X 3 if Nparms = 7 - 9 or >= 13 - ## 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)) - return(mfrow) -} - - - +## For plotting density plots and Histograms plot.CIs <- function(x, - dimn, - CIs, - bord = NULL, - mean.color, - quan.color, - rug, - mean = TRUE, - auto.layout, - ask, ...) + dimn, + CIs, + bord = NULL, + mean.color = 'plum4' , + quan.color = 'lightsteelblue3', + rug, + main, + mean = TRUE, + auto.layout, + ask, ...) { if(class(x) == "Smcmc") { @@ -87,20 +61,35 @@ plot.CIs <- function(x, data <- x$data } } - - setLayout(dimn) + if(is.null(main)){par(oma = c(2,0,2,0))}else{par(oma = c(2,0,4,0))} + setLayout_trace(dimn) for(i in 1:dimn) { - beta = ts(data[, i]) + ylab = paste("Density of ",i) + par(mar = c(1.2, 4.1,1.2, 2.1)) + beta = data[, i] + if (max(abs(beta - floor(beta))) == 0 || bndw(beta) == 0 || length(unique(beta)) == 1) + { + beta = as.vector(beta) + h = hist(beta, plot = F) # or hist(x,plot=FALSE) to avoid the plot of the histogram + h$density = h$counts/sum(h$counts) + plot(h,freq=FALSE,ylab=ylab, xlab = NA, main = NA, col = "lightgreen") + addCI(x, CIs, component = i, bord = bord, + mean.color = mean.color, quan.color = quan.color, + mean = mean) + } - main1 = paste("Density of ",varnames[i]) - plot(density(beta), main = main1, ...) - if(rug == TRUE) rug(beta, ticksize=0.03, side=1, lwd=0.5) - main1 = paste("Density of ",varnames[i]) - addCI(x, CIs, component = i, bord = bord, - mean.color = mean.color, quan.color = quan.color, - mean = mean, ...) + else + { + beta = ts(beta) + plot(density(beta),main = NA, xlab = NA, ylab = ylab) + if(rug == TRUE) rug(beta, ticksize=0.03, side=1, lwd=0.5) + addCI(x, CIs, component = i, bord = bord, + mean.color = mean.color, quan.color = quan.color, + mean = mean) + } } + if(!is.null(main)){mtext(main, side = 3, line = 1,outer = TRUE, cex = 1.5)} on.exit(par(ask = FALSE,mfrow=c(1,1))) } @@ -155,30 +144,7 @@ chain_stacker <- function(x) { return(list("b.size" = b.final, "stacked.data" = big.chain)) } -setLayout <- function(p=1, auto.layout = TRUE,pars = NULL) -{ - if(p < 4) { - par(mfrow = c(p,1)) - } - else if(p == 4) { - par(mfrow = c(2,2)) - } - else if(p == 5||p == 6){ - par(mfrow = c(3,2)) - } - else { - on.exit(par(pars)) - - if (auto.layout) { - mfrow <- set.mfrow(Nparms = 6) - pars <- par(ask=FALSE,mfrow = mfrow) - } - } - -} - - -##setLayout for traceplot +## setLayout for all plots setLayout_trace <- function(p, ask = FALSE) { if(p%%2 == 0) @@ -195,3 +161,10 @@ setLayout_trace <- function(p, ask = FALSE) names(k) = c("ask","mfrow") return(k) } + +## for calculating Bandwidth +bndw <- function(x) { + x <- x[!is.na(as.vector(x))] + return(1.06 * min(sd(x), IQR(x)/1.34) * length(x)^-0.2) +} + From 3716f7b39a85f759ddb53a0696e57dc1171db0f4 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Mon, 12 Jun 2023 15:14:29 +0530 Subject: [PATCH 020/109] Update plot.Smcmc.Rd --- man/plot.Smcmc.Rd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/man/plot.Smcmc.Rd b/man/plot.Smcmc.Rd index ab24247..0258c60 100644 --- a/man/plot.Smcmc.Rd +++ b/man/plot.Smcmc.Rd @@ -18,6 +18,8 @@ \item{thresh}{: numeric typically less than .005 for the accuracy of the simulteaneous procedure} +\item{main}{: to add main heading} + \item{iid}{: logical argument for constructing density plot for iid samples. Defaults to \code{FALSE}} \item{plot}{: logical argument for is plots are to be returned} From 443aac1e07078c717c0ff95e83f16df39f6e9cdb Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 09:05:21 +0530 Subject: [PATCH 021/109] Update export.R --- R/export.R | 211 +++++++++++++++++++++++++++-------------------------- 1 file changed, 109 insertions(+), 102 deletions(-) diff --git a/R/export.R b/R/export.R index 8a539df..427ef69 100644 --- a/R/export.R +++ b/R/export.R @@ -304,15 +304,12 @@ boxCI <- function(x, - - - #' @title ACF Plot for Markov chain Monte Carlo #' #' @description Autocorrelation function plots for MCMC data (including multiple chains) #' #' -#' @name ACF +#' @name acfplot #' @usage ACF(x,component = NULL, type = c("correlation", "covariance"), #' plot= TRUE, lag.max = NULL, avg.col = "blue", chain.col = "red", #' na.action = na.fail, auto.layout = TRUE, ask = dev.interactive()) @@ -321,7 +318,7 @@ boxCI <- function(x, #' @param component : a vector of integers indicating which components' ACF plots are needed. By default all components are drawn. #' @param type : the kind of ACF plot: "correlation" or "covariance" #' @param plot : TRUE if plots are required. If FALSE, raw values are returned -#' @param main : To add heading in the plot +#' @param main : main heading of plot #' @param lag.max : Maximum lag for the ACF plot #' @param avg.col : color for the overall ACF of each component #' @param chain.col : color for the ACF of the individual chains. @@ -342,7 +339,7 @@ boxCI <- function(x, #' chain[i,] <- .3*chain[i-1,] + err[i] #' } #' chain <- Smcmc(list(chain)) -#' ACF(chain) +#' acfplot(chain) #' #' @references #' Agarwal, M., and Vats, D., “Globally-centered autocovariances in MCMC”, @@ -351,23 +348,24 @@ boxCI <- function(x, #' @export -ACF <- function(x, - component = NULL, - type = c("correlation", "covariance", "partial"), - plot = TRUE, - main = NULL, - lag.max = NULL, - avgcol = "blue", - chain.col = "red", - na.action = na.fail, - auto.layout = TRUE, - ask = dev.interactive()) + +acfplot <- function(x, + which = NULL, + type = c("correlation", "covariance", "partial"), + plot = TRUE, + main = NULL, + lag.max = NULL, + avgcol = "blue", + chain.col = "red", + na.action = na.fail, + auto.layout = TRUE, + ask = dev.interactive()) { if(TRUE %in% (class(x) == "Smcmc")){x <- x$chains}else if(is.list(x)) { for(i in 1:length(x)) { x[[i]] = as.matrix(x[[i]]) } }else if(is.vector(x)) - { + {2 x <- as.matrix(x) x <- list(x) }else if(is.matrix(x)) @@ -380,73 +378,80 @@ ACF <- function(x, m <- length(x) if(m>10){stop("Maximum 10 chains are allowed")} - - which <- as.numeric(component) - if(is.null(component)) which <- 1:p - - varnames <- colnames(x[[1]]) if (is.null(lag.max)) lag.max <- floor(10 * (log10(n)) ) - lag.max <- as.integer(min(lag.max, n - 1L)) - np = length(which) + lay <- par() + leg <- lay$mfrow[1]*lay$mfrow[2] + if(is.null(which)) + {np = p}else + {np = length(which)} space = 0 - if(is.null(main)){par(oma = c(4,0,2,0))} - else{par(oma = c(4,0,3,0)) - space = 1.3} + if(is.null(main)){par(oma = c(4,0,2,0))}else + {par(oma = c(4,0,3,0)) + space = 1.3} axs = np-1 - if(np <= 4){axs = np-1} - else {axs = np-2} - setLayout_trace(np) - - - for(i in which) + if(np <= 4){axs = np-1}else {axs = np-2} + if(!is.null(which)){axs = 0} + if(is.null(which)){setLayout_trace(np) + dimen = 1:p} + else{dimen = which} + for(i in dimen) { xi <- matrix(data = 0, nrow = n, ncol = m) - - for (j in 1:m) { + for (j in 1:m) + { xi[,j] <- x[[j]][,i] } xi <- xi - mean(xi) # global mean chain.acf <- list(length = m) - for(j in 1:m) { + for(j in 1:m) + { chain.acf[[j]] <- acf(xi[,j], type = type, plot = FALSE, demean = FALSE, lag.max = lag.max) } avgf <- chain.acf[[1]] k = 100 + l = -100 avgf$acf <- 0 for(j in 1:m) { avgf$acf <- avgf$acf + chain.acf[[j]]$acf k = min(k,min(chain.acf[[j]]$acf)) + l = max(l,max(chain.acf[[j]]$acf)) } - avgf$acf <- avgf$acf/m + avgf$acf <- (avgf$acf)/m if(plot) { - par(mar = c(0, 4.1,0, 2.1)) - plot(avgf, ci = 0, main = varnames[i], lwd = .2, ylim = c( min(- 1.96/sqrt(n),min(avgf$acf),k), max(avgf$acf)),xlab = if(i>axs) "Lag" else "" , ylab = paste("ACF",i), - lty = 1, xaxt = if(i>axs) 's' else 'n') + if(is.null(which)){par(mar = c(0, 4.1,0, 2.1))} + plot(avgf, ci = 0, lwd = .2, ylim = c( min(- 1.96/sqrt(n),min(avgf$acf),k), max(max(avgf$acf),l)), ylab = paste("ACF",i), + lty = 1, xaxt = if(i>axs) 's' else 'n',main = NA, xlab = NA) for(j in 1:m) { lines(0:lag.max, as.matrix(chain.acf[[j]]$acf), type = "l", col = adjustcolor(chain.col, alpha.f = .5), lwd = 1, lty = 1, yaxt = 'n', xaxt = 'n') } lines(0:lag.max, as.matrix(avgf$acf), type = "l", col = adjustcolor(avgcol, alpha.f = .6), lwd = 1, lty = 1, yaxt = 'n', xaxt = 'n') - if(np%%2 != 0 && i == np-1 && np>4){mtext("Lag", side = 1, line = 2.3,cex = 0.8)} + if(is.null(which) && leg == 1){if(np%%2 != 0 && i == np-1 && np>4){mtext("Lag", side = 1, line = 2.3,cex = 0.8)}} + else if(!is.null(which)){mtext("Lag", side = 1, line = 2.3,cex = 0.8)} } if(plot){ if(!is.null(main)){mtext(main, side = 3, line = space,outer = TRUE, cex = 1.3)} - if(np <= 4){mtext("Lag", side = 1, line = 2.3,at =0.52, outer = TRUE, cex= 1)} - else{mtext("Lag", side = 1, line = 2.3,at = 0.3,outer = TRUE,cex = 0.8) - if(np %% 2 == 0){mtext("Lag", side = 1, line = 2.3,at = 0.8,outer = TRUE,cex = 0.8)}} + if(is.null(which)) + { + if(np <= 4){mtext("Lag", side = 1, line = 2.3,at =0.52, outer = TRUE, cex= 1)} + else{mtext("Lag", side = 1, line = 2.3,at = 0.3,outer = TRUE,cex = 0.8) + if(np %% 2 == 0){mtext("Lag", side = 1, line = 2.3,at = 0.8,outer = TRUE,cex = 0.8)}} + } } - } - on.exit( par (ask = FALSE,mfrow=c(1,1))) + par(mfrow=c(1,1)) + par(mar = c(5.1, 4.1, 4.1, 2.1)) + par(fig = c(0, 1, 0 , 1)) + par(oma = c(0, 0, 0, 0)) invisible(list("combined" = avgf, "individual" = chain.acf)) } @@ -456,6 +461,8 @@ ACF <- function(x, + + #' @title Trace Plot for Markov chain Monte Carlo #' @description traceplot is a graphical tool commonly used in Bayesian statistics and Markov Chain Monte Carlo(MCMC) methods to diagnose the convergence and mixing properties of a chain. #' @name traceplot @@ -468,7 +475,7 @@ ACF <- function(x, #' "tomato3")) #' #'@param x : an `Smcmc' class object or a list of Markov chains or a Markov chain matrix or a vector. -#'@param fast : a Boolean argument that will be auto set to TRUE when chain size is larger than 1e6 +#'@param fast : a Boolean argument that will be set to TRUE by default, to make plots faster. #'@param which : if we want full size trace plots of specific dimensions of chain, we can pass a vector of respective dimension/components. #'@param xlim : range of x-axis #'@param ylim : range of y-axis @@ -520,7 +527,7 @@ ACF <- function(x, #' #' #' @export -traceplot <- function(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,main = NULL, +traceplot <- function(x, fast = TRUE, which = NULL, xlim = NULL, ylim = NULL,main = NULL, xlab = "Iteration",ylab = NULL,alpha.f = 0.9, auto.layout = TRUE, ask = dev.interactive(), col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", @@ -538,7 +545,7 @@ traceplot <- function(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,mai x <- list(x) }else if(is.matrix(x)) {x <- list(x)}else - {stop("x must be a matrix, list or an Smcmc object")} + {stop("x must be a matrix, list or an Smcmc object")} dimn <- dim(x[[1]]) n <- dimn[1] @@ -555,13 +562,13 @@ traceplot <- function(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,mai for(i in 1:p) { ylab[i] <- paste("Comp ",i) } } - if(dim(x[[1]])[1] > 100000 && is.na(fast)){ fast = TRUE } - if(!is.null(fast) && isTRUE(fast)) + if(isTRUE(fast)) { if(n < 1e3){index = 1:n} else { - index <- sample(1:n,1000,replace = FALSE) + index <- c(1,n) + index <- c(index, sample(2:n-1,998,replace = FALSE)) index <- sort(index) } }else{index = 1:n} @@ -581,8 +588,8 @@ traceplot <- function(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,mai mini <- apply(tempn,2, min) } else{mini = rep(ylim[1],p) - maxi = rep(ylim[2],p)} - vec[j] <- paste("Chain",j) + maxi = rep(ylim[2],p)} + vec[j] <- paste("Chain",j) } ## this if condition is for plotting traceplots of chains, @@ -592,7 +599,7 @@ traceplot <- function(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,mai if(p > 10 && is.null(which) ) { which <- 1:p - message("Number of dimension of chain(s) is more than 10. Series of plot returned!") + message("Number of dimension of chain(s) is more than 10. Series of plot returned.") } lay <- par() @@ -600,52 +607,52 @@ traceplot <- function(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,mai space = 0 if(is.null(main)){par(oma = c(0,0,2,0))} else{par(oma = c(0,0,2.5,0)) - space = 1} + space = 1.8} for(i in which) { - par(mar = c(4, 4, 2, 3)) - j <- 1 - ylim <- c(mini[i],maxi[i]) - plot(x = index, y = x[[1]][index,i], - xlab = xlab, ylab = ylab[i], - type = "n", lwd = 1.3, lty = 1, ylim = ylim, xlim = xlim, - col = adjustcolor(col[1],alpha.f = alpha.f)) - while(j <= m) - { + par(mar = c(4,4, 2,2)) + j <- 1 + ylim <- c(mini[i],maxi[i]) + plot(x = index, y = x[[1]][index,i], + xlab = xlab, ylab = ylab[i], + type = "n", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, + col = adjustcolor(col[1],alpha.f = alpha.f)) + while(j <= m) + { lines( x= index, y=x[[j]][index,i], type = "l", - col = adjustcolor(col[j],alpha.f = alpha.f), - ylim = ylim, xlim = xlim, lwd = 1.3, lty = 1, - yaxt = 'n', xaxt = 'n') - j <- j + 1 - } + col = adjustcolor(col[j],alpha.f = alpha.f), + ylim = ylim, xlim = xlim, lwd = 1, lty = 1, + yaxt = 'n', xaxt = 'n') + j <- j + 1 + } - ##Setting of legend - if(i%%leg == 0|i == which[length(which)]) - { - if(!is.null(main)){mtext(main, side = 3, line = 1,outer = TRUE, cex = 1.5)} + ##Setting of legend + if(i%%leg == 0|i == which[length(which)]) + { + if(!is.null(main)){mtext(main, side = 3, line = 0.8,outer = TRUE, cex = 1.5)} par(fig = c(0, 1, 0, 1), oma = c(0, 0, space, 0), mar = c(0, 0, 0, 0), new = TRUE) plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - horiz = TRUE,cex = 1.25, seg.len= 1, bty = 'n') + horiz = TRUE,cex = 1 , seg.len= 1, bty = 'n') if(is.null(main)){par(oma = c(0,0,2,0))} else{par(oma = c(0,0,2.5,0)) - space = 1.1} - par(mar = c(4, 4, 2, 3)) + space = 1.8} + par(mar = c(4, 4, 2, 2)) par(mfrow = lay$mfrow) - } } - on.exit(par(ask = FALSE, mfrow = c(1,1))) - par(mar = c(5.1, 4.1, 4.1, 2.1)) - par(fig = c(0, 1, 0, 1)) - par(oma = c(0, 0, 0, 0)) - + } + on.exit(par(ask = FALSE, mfrow = c(1,1))) + par(mar = c(5.1, 4.1, 4.1, 2.1)) + par(fig = c(0, 1, 0, 1)) + par(oma = c(0, 0, 0, 0)) + } else { space = 0 - if(is.null(main)){par(oma = c(4,0,2.5,0))} - else{par(oma = c(4,0,4,0)) - space = 1.3} + if(is.null(main)){par(oma = c(3.5,0,2.5,0))} + else{par(oma = c(3.5,0,4,0)) + space = 1.3} axs = p-1 if(p <= 4){axs = p-1} else {axs = p-2} @@ -656,33 +663,33 @@ traceplot <- function(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,mai par(mar = c(0, 4.1,0, 2.1)) ylim <- c(mini[i],maxi[i]) plot(x= index, y = x[[1]][index,i], xlab = if(i>axs) xlab else "" , ylab =ylab[i], - type = "l", lwd = 1.3, lty = 1, ylim = ylim, xlim = xlim, + type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, col = adjustcolor(col[1],alpha.f = alpha.f), xaxt = if(i>axs) 's' else 'n') while(j<=m) { lines(x= index, y=x[[j]][index,i], type = "l", col = adjustcolor(col[j],alpha.f = alpha.f), - ylim = ylim, xlim = xlim, lwd = 1.3, lty = 1, + ylim = ylim, xlim = xlim, lwd = 1, lty = 1, yaxt = 'n', xaxt = 'n') j = j + 1 } - if(p%%2 != 0 && i == p-1 && p>4){mtext("Iteration", side = 1, line = 2.3,cex = 1)} + if(p%%2 != 0 && i == p-1 && p>4){mtext("Iteration", side = 1, line = 2.3,cex = 0.7)} } - if(!is.null(main)){mtext(main, side = 3, line = 2,outer = TRUE, cex = 1.3)} - if(p<=4){mtext("Iteration", side = 1, line = 2.3,at =0.52, outer = TRUE, cex= 1)} - else{mtext("Iteration", side = 1, line = 2.3,at = 0.3,outer = TRUE,cex = 1) - if(p%%2 == 0){mtext("Iteration", side = 1, line = 2.3,at = 0.8,outer = TRUE,cex = 1)}} + if(!is.null(main)){mtext(main, side = 3, line = 2.3 ,outer = TRUE, cex = 1)} + if(p<=4){mtext("Iteration", side = 1, line = 2.3,at =0.52,cex = 0.7, outer = TRUE)} + else{mtext("Iteration", side = 1, line = 2.3,at = 0.3,cex = 0.7,outer = TRUE) + if(p%%2 == 0){mtext("Iteration", side = 1, line = 2.3,at = 0.8,cex = 0.7,outer = TRUE)}} ##Setting of legend - par(fig = c(0, 1, 0, 1), oma = c(0, 0, space, 0), mar = c(0, 0, 0, 0), new = TRUE) - plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') - legend("top",legend = vec[1:m], col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - horiz = TRUE,cex = 1.25, seg.len= 1, bty = 'n') - - + par(fig = c(0, 1, 0, 1), oma = c(0, 0, space, 0), mar = c(0, 0, 0, 0), new = TRUE) + plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') + legend("top",legend = vec[1:m], col = col[1:m],lty = 1,lwd =2, xpd = TRUE, + horiz = TRUE,cex = 1.25, seg.len= 1, bty = 'n') + + } - if(isTRUE(fast) && n > 100000){message("Chain size is very large, fast changed to TRUE.")} + if(isFALSE(fast) && n > 10000){message("Chain size is very large and you choose to wait.")} on.exit(par(ask = FALSE, mfrow = c(1,1))) par(mar = c(5.1, 4.1, 4.1, 2.1)) - par(fig = c(0, 1, 0, 1)) + par(fig = c(0, 1, 0 , 1)) par(oma = c(0, 0, 0, 0)) } From 20a115adbb9c9a3d7465cd92b703b5e7abc32b38 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 09:06:57 +0530 Subject: [PATCH 022/109] Update supp.R --- R/supp.R | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/R/supp.R b/R/supp.R index edbed11..c6842f0 100644 --- a/R/supp.R +++ b/R/supp.R @@ -71,18 +71,15 @@ plot.CIs <- function(x, if (max(abs(beta - floor(beta))) == 0 || bndw(beta) == 0 || length(unique(beta)) == 1) { beta = as.vector(beta) - h = hist(beta, plot = F) # or hist(x,plot=FALSE) to avoid the plot of the histogram + h = hist(beta, plot = F,..) # or hist(x,plot=FALSE) to avoid the plot of the histogram h$density = h$counts/sum(h$counts) plot(h,freq=FALSE,ylab=ylab, xlab = NA, main = NA, col = "lightgreen") - addCI(x, CIs, component = i, bord = bord, - mean.color = mean.color, quan.color = quan.color, - mean = mean) } else { beta = ts(beta) - plot(density(beta),main = NA, xlab = NA, ylab = ylab) + plot(density(beta,...),main = NA, xlab = NA, ylab = ylab) if(rug == TRUE) rug(beta, ticksize=0.03, side=1, lwd=0.5) addCI(x, CIs, component = i, bord = bord, mean.color = mean.color, quan.color = quan.color, @@ -91,11 +88,13 @@ plot.CIs <- function(x, } if(!is.null(main)){mtext(main, side = 3, line = 1,outer = TRUE, cex = 1.5)} on.exit(par(ask = FALSE,mfrow=c(1,1))) + par(mar = c(5.1, 4.1, 4.1, 2.1)) + par(fig = c(0, 1, 0 , 1)) + par(oma = c(0, 0, 0, 0)) } - ## For boxplots plot.boxx <- function(x, dimn, CIs, quan.color, range, width, varwidth, notch, outline, plot, border, col, ann, horizontal, add,...) From 8ccb99d9a76cfc33a528b44d91adafe6be7950c7 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 09:08:28 +0530 Subject: [PATCH 023/109] Update Smcmcclass.R --- R/Smcmcclass.R | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/R/Smcmcclass.R b/R/Smcmcclass.R index 1019c75..132b521 100644 --- a/R/Smcmcclass.R +++ b/R/Smcmcclass.R @@ -87,13 +87,13 @@ Smcmc <- function(data, -#' @title Plot Smcmc +#' @title denity plot form Smcmc class #' #' @description Density plots with simultaenous error bars around means and quantiles #' for MCMC data. The error bars account for the correlated nature of the process. #' #' -#' @name plot.Smcmc +#' @name densityplot #' @usage \method{plot}{Smcmc}(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, iid = FALSE, #' plot = TRUE, mean = TRUE, border = NA, mean.col = 'plum4', #' quan.col = 'lightsteelblue3',rug = TRUE, opaq = 0.7, @@ -104,7 +104,7 @@ Smcmc <- function(data, #' @param thresh : numeric typically less than .005 for the accuracy of the simulteaneous procedure #' @param iid : logical argument for constructing density plot for iid samples. Defaults to \code{FALSE} #' @param plot : logical argument for is plots are to be returned -#' @param main : to add main heading +#' @param main : To add main heading #' @param mean : logical argument whether the mean is to be plotted #' @param border : whether a border is required for the simultaneous confidence intervals #' @param mean.col : color for the mean confidence interval @@ -112,7 +112,7 @@ Smcmc <- function(data, #' @param rug : logical indicating whether a rug plot is desired #' @param opaq : opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque. #' @param auto.layout : logical argument for an automatic layout of plots -#' @param ask : activating interactive plots +#' @param ask : activating inter active plots #' @param ... : arguments passed on to the \code{density} plot in base R #' @return returns a plot of the univariate density estimates with simultaneous #' confidence intervals wherever asked. If \code{plot == FALSE} a list of @@ -127,7 +127,7 @@ Smcmc <- function(data, #' chain[i,] <- .3*chain[i-1,] + err[i] #' } #' chain <- Smcmc(list(chain)) -#' plot(chain) +#' densityplot(chain) #' #' @references #' Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., @@ -135,7 +135,7 @@ Smcmc <- function(data, #' Journal of Computational and Graphical Statistics, 2020. #' #' @export -"plot.Smcmc" <- function(x, +"densityplot" <- function(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, @@ -146,7 +146,7 @@ Smcmc <- function(data, border = NA, mean.col = 'plum4', quan.col = 'lightsteelblue3', - rug = TRUE, + rug = FALSE, opaq = 0.7, auto.layout = TRUE, ask = dev.interactive(), ...) From cf7b2f245ec34290e9c150890fdc0b3473b2248e Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 10:01:20 +0530 Subject: [PATCH 024/109] Update Smcmcclass.R --- R/Smcmcclass.R | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/R/Smcmcclass.R b/R/Smcmcclass.R index 132b521..aa8230e 100644 --- a/R/Smcmcclass.R +++ b/R/Smcmcclass.R @@ -38,9 +38,19 @@ Smcmc <- function(data, if(missing(data)) stop("Data must be provided.") + if(!is.list(data)) + { + data = as.matrix(data) data <- list(data) - + }else + { + for(i in 1:length(data)) + { + data[[i]] = as.matrix(data[[i]]) + } + } + nsim <- dim(data[[1]])[1] if(is.null(varnames)) varnames <- colnames(data[[1]]) @@ -87,7 +97,7 @@ Smcmc <- function(data, -#' @title denity plot form Smcmc class +#' @title density plot form Smcmc class #' #' @description Density plots with simultaenous error bars around means and quantiles #' for MCMC data. The error bars account for the correlated nature of the process. From fdbc5834cea957b95b97efe358bc8806ed3c4f15 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 10:14:08 +0530 Subject: [PATCH 025/109] Delete man directory --- man/ACF.Rd | 57 ------------------------------ man/Siid.Rd | 28 --------------- man/Smcmc.Rd | 37 ------------------- man/addCI.Rd | 47 ------------------------- man/boxCI.Rd | 32 ----------------- man/boxplot.Siid.Rd | 64 --------------------------------- man/getCI.Rd | 48 ------------------------- man/plot.Siid.Rd | 62 -------------------------------- man/plot.Smcmc.Rd | 71 ------------------------------------- man/traceplot.Rd | 86 --------------------------------------------- 10 files changed, 532 deletions(-) delete mode 100644 man/ACF.Rd delete mode 100644 man/Siid.Rd delete mode 100644 man/Smcmc.Rd delete mode 100644 man/addCI.Rd delete mode 100644 man/boxCI.Rd delete mode 100644 man/boxplot.Siid.Rd delete mode 100644 man/getCI.Rd delete mode 100644 man/plot.Siid.Rd delete mode 100644 man/plot.Smcmc.Rd delete mode 100644 man/traceplot.Rd diff --git a/man/ACF.Rd b/man/ACF.Rd deleted file mode 100644 index e475fcc..0000000 --- a/man/ACF.Rd +++ /dev/null @@ -1,57 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/export.R -\name{ACF} -\alias{ACF} -\title{ACF Plot for Markov chain Monte Carlo} -\usage{ -ACF(x,component = NULL, type = c("correlation", "covariance"), - plot= TRUE, lag.max = NULL, avg.col = "blue", chain.col = "red", - na.action = na.fail, auto.layout = TRUE, ask = dev.interactive()) -} -\arguments{ -\item{x}{: an `Smcmc' class object or a list of Markov chains or a Markov chain matrix} - -\item{component}{: a vector of integers indicating which components' ACF plots are needed. By default all components are drawn.} - -\item{type}{: the kind of ACF plot: "correlation" or "covariance"} - -\item{plot}{: TRUE if plots are required. If FALSE, raw values are returned} - - \item{main}{: To add heading ro the plot} - -\item{lag.max}{: Maximum lag for the ACF plot} - -\item{chain.col}{: color for the ACF of the individual chains.} - -\item{na.action}{: function to be called to handle missing values. ‘na.pass’ can be used.} - -\item{auto.layout}{: logical argument for an automatic layout of plots} - -\item{ask}{: activating interactive plots} - -\item{avg.col}{: color for the overall ACF of each component} -} -\value{ -returns the autocorrelation function plots of the Markov chains. Uses the - more accurate globally-centered ACFs. -} -\description{ -Autocorrelation function plots for MCMC data (including multiple chains) -} -\examples{ -# Producing Markov chain -chain <- matrix(0, ncol = 1, nrow = 1e3) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -chain <- Smcmc(list(chain)) -ACF(chain) - -} -\references{ -Agarwal, M., and Vats, D., “Globally-centered autocovariances in MCMC”, -arxiv - 2009.01799, 2020. -} diff --git a/man/Siid.Rd b/man/Siid.Rd deleted file mode 100644 index 20f4bed..0000000 --- a/man/Siid.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Siidclass.R -\name{Siid} -\alias{Siid} -\alias{as.Siid} -\alias{as.Siid.default} -\alias{is.iid} -\title{Siid class} -\usage{ -Siid(data, varnames = colnames(data)) -} -\arguments{ -\item{data}{: an iid output matrix with nsim rows and p columns} - -\item{varnames}{: a character string equal to the number of columns in \code{data}} -} -\value{ -an Siid class object -} -\description{ -Class for independent and identically distributed (iid) samples -} -\examples{ -# Generating iid data -chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -siid.obj <- Siid(chain) - -} diff --git a/man/Smcmc.Rd b/man/Smcmc.Rd deleted file mode 100644 index b50f8ab..0000000 --- a/man/Smcmc.Rd +++ /dev/null @@ -1,37 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Smcmcclass.R -\name{Smcmc} -\alias{Smcmc} -\alias{as.Smcmc} -\alias{as.Smcmc.default} -\alias{is.mcmc} -\title{Smcmc class} -\usage{ -Smcmc(data, batch.size = TRUE, stacked = TRUE, varnames = colnames(data)) -} -\arguments{ -\item{data}{: a list of MCMC output matrices each with `nsim` rows and `p` columns} - -\item{batch.size}{: logical argument, if true, calculates the batch size appropriate for this Markov chain. Setting to TRUE saves time in future steps.} - -\item{stacked}{: recommended to be `TRUE`. logical argument, if true, stores a carefully stacked version of the MCMC output for use later.} - -\item{varnames}{: a character string equal to the number of columns in \code{data}} -} -\value{ -an Smcmc class object -} -\description{ -Smcmc class for simulated data using Markov chain Monte Carlo -} -\examples{ -# Producing Markov chain -chain <- matrix(0, nrow = 1e3, ncol = 1) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -smcmc.obj <- Smcmc(chain) -} diff --git a/man/addCI.Rd b/man/addCI.Rd deleted file mode 100644 index 25744b7..0000000 --- a/man/addCI.Rd +++ /dev/null @@ -1,47 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/export.R -\name{addCI} -\alias{addCI} -\title{Add simultaneous confidence interval to existing plot.} -\usage{ -addCI(x, CIs, component = 1, bord = NA, mean = TRUE, mean.color = 'plum4', - quan.color = 'lightsteelblue3', opaq = 0.7, ...) -} -\arguments{ -\item{x}{: a `Smcmc' class object} - -\item{CIs}{: the output from the `getCI` function} - -\item{component}{: numeric indicating which component to draw the confidence intervals for} - -\item{bord}{: logical for whether a border is desired around the confidence intervals} - -\item{mean}{: logical argument whether the mean is to be plotted} - -\item{mean.color}{: color for the mean confidence interval} - -\item{quan.color}{: color for the quantile confidence intervals} - -\item{opaq}{: opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque.} - -\item{...}{: arguments passed on to the boundaries of the confidence intervals in `segments`} -} -\value{ -adds segments for confidence intervals into an already existing plot environment -} -\description{ -Adds simultaneous confidence intervals for quantiles and means to an existing plot. -} -\examples{ -chain <- matrix(0, ncol = 1, nrow = 1e3) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -chain <- Smcmc(list(chain)) -plot(density(chain$stacked[,1])) -CIs <- getCI(chain) -addCI(chain, CIs, component = 1) -} diff --git a/man/boxCI.Rd b/man/boxCI.Rd deleted file mode 100644 index 496663b..0000000 --- a/man/boxCI.Rd +++ /dev/null @@ -1,32 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/export.R -\name{boxCI} -\alias{boxCI} -\title{Add simultaneous confidence interval to existing boxplot} -\usage{ -boxCI(x, CI, component = c(1), dimn = 1, - quan.color = 'lightsteelblue3', horizontal = FALSE) -} -\arguments{ -\item{x}{: a `Smcmc' class object} - -\item{CI}{: the output from the `getCI` function with `iid = TRUE`} - -\item{component}{: vector indicating which components to draw the confidence intervals for} - -\item{dimn}{: numeric for how many components are being plotted} - -\item{quan.color}{: color for the quantile confidence intervals} - -\item{horizontal}{: logical for whether boxplots are horizontal} -} -\value{ -adds segments for confidence intervals into an already existing plot environment -} -\description{ -Adds simultaneous confidence intervals for quantiles to an existing boxplot. -} -\examples{ -output <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) - -} diff --git a/man/boxplot.Siid.Rd b/man/boxplot.Siid.Rd deleted file mode 100644 index 8e1307b..0000000 --- a/man/boxplot.Siid.Rd +++ /dev/null @@ -1,64 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Siidclass.R -\name{boxplot.Siid} -\alias{boxplot.Siid} -\title{Boxplot for Siid} -\usage{ -\method{boxplot}{Siid}(x, ..., alpha = 0.05, thresh = 0.001, - quan.col = 'lightsteelblue3', opaq = .6, range = 1.5, - width = NULL, varwidth = FALSE, outline = TRUE, plot = TRUE, - border = par("fg"), col = 'white', ann = !add, - horizontal = FALSE, add = FALSE) -} -\arguments{ -\item{x}{: a `Siid' class object} - -\item{...}{: arguments sent to boxplot} - -\item{alpha}{: confidence level of simultaneous confidence intervals} - -\item{thresh}{: numeric typically less than .005 for the accuracy of the simulteaneous procedure} - -\item{quan.col}{: color for the quantile confidence intervals} - -\item{opaq}{: opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque.} - -\item{range}{: as defined for base \code{boxplot}} - -\item{width}{: as defined for base \code{boxplot}} - -\item{varwidth}{: as defined for base \code{boxplot}} - -\item{outline}{: as defined for base \code{boxplot}} - -\item{plot}{: logical indicating whether the plot is to be constructed} - -\item{border}{: as defined for base \code{boxplot}} - -\item{col}{: as defined for base \code{boxplot}} - -\item{ann}{: as defined for base \code{boxplot}} - -\item{horizontal}{: as defined for base \code{boxplot}} - -\item{add}{: as defined for base \code{boxplot}} -} -\value{ -returns the base \code{boxplot} with simultaneous confidence intervals around - all quantiles -} -\description{ -Boxplots with simultaenous error bars around all quantiles for iid data. -} -\examples{ -# Generating iid data -chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -siid.obj <- Siid(chain) -boxplot(siid.obj) - -} -\references{ -Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -“Assessing and Visualizing Simultaneous Simulation Error”, -Journal of Computational and Graphical Statistics, 2020. -} diff --git a/man/getCI.Rd b/man/getCI.Rd deleted file mode 100644 index a8ee1e0..0000000 --- a/man/getCI.Rd +++ /dev/null @@ -1,48 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/export.R -\name{getCI} -\alias{getCI} -\title{Calculates simultaneous confidence intervals.} -\usage{ -getCI(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, iid = FALSE, - mean = TRUE) -} -\arguments{ -\item{x}{: a `Smcmc' class object} - -\item{Q}{: vector of quantiles} - -\item{alpha}{: confidence levels of the simulatenous intervals} - -\item{thresh}{: threshold for the optimization methodology that calculates the simultaneous CIs} - -\item{iid}{: logical argument for constructing density plot for iid samples. Defaults to \code{FALSE}} - -\item{mean}{: logical indicating whether mean is to be plotted} -} -\value{ -adds segments for confidence intervals into an already existing plot environment -} -\description{ -Calculates simultaneous confidence intervals for means and - quantiles as indicated for the desired MCMC output -} -\examples{ -chain <- matrix(0, ncol = 1, nrow = 1e3) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -chain <- Smcmc(list(chain)) -plot(density(chain$stacked[,1])) -CIs <- getCI(chain) -addCI(chain, CIs, component = 1) - -} -\references{ -Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -“Assessing and Visualizing Simultaneous Simulation Error”, -Journal of Computational and Graphical Statistics, 2020. -} diff --git a/man/plot.Siid.Rd b/man/plot.Siid.Rd deleted file mode 100644 index 003ead4..0000000 --- a/man/plot.Siid.Rd +++ /dev/null @@ -1,62 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Siidclass.R -\name{plot.Siid} -\alias{plot.Siid} -\title{Plot Siid} -\usage{ -\method{plot}{Siid}(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, - rug = TRUE, plot = TRUE, mean = TRUE, border = NA, - mean.col = 'plum4', quan.col = 'lightsteelblue3', - opaq = 0.7, auto.layout = TRUE, - ask = dev.interactive(), ...) -} -\arguments{ -\item{x}{: a `Siid' class object} - -\item{Q}{: vector of quantiles} - -\item{alpha}{: confidence level of simultaneous confidence intervals} - -\item{thresh}{: numeric typically less than .005 for the accuracy of the simulteaneous procedure} - -\item{rug}{: logical indicating whether a rug plot is desired} - -\item{plot}{: logical argument for is plots are to be returned} - -\item{mean}{: logical argument whether the mean is to be plotted} - -\item{border}{: whether a border is required for the simultaneous confidence intervals} - -\item{mean.col}{: color for the mean confidence interval} - -\item{quan.col}{: color for the quantile confidence intervals} - -\item{opaq}{: opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque.} - -\item{auto.layout}{: logical argument for an automatic layout of plots} - -\item{ask}{: activating interactive plots} - -\item{...}{: arguments passed on to the \code{density} plot in base R} -} -\value{ -returns a plot of the univariate density estimates with simultaneous - confidence intervals wherever asked. If \code{plot == FALSE} a list of - estimates and simultaneous confidence intervals. -} -\description{ -Density plots with simultaenous error bars around means and quantiles - for iid data. -} -\examples{ -# Generating iid data -chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -siid.obj <- Siid(chain) -plot(siid.obj) - -} -\references{ -Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -“Assessing and Visualizing Simultaneous Simulation Error”, -Journal of Computational and Graphical Statistics, 2020. -} diff --git a/man/plot.Smcmc.Rd b/man/plot.Smcmc.Rd deleted file mode 100644 index 0258c60..0000000 --- a/man/plot.Smcmc.Rd +++ /dev/null @@ -1,71 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Smcmcclass.R -\name{plot.Smcmc} -\alias{plot.Smcmc} -\title{Plot Smcmc} -\usage{ -\method{plot}{Smcmc}(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, iid = FALSE, - plot = TRUE, mean = TRUE, border = NA, mean.col = 'plum4', - quan.col = 'lightsteelblue3',rug = TRUE, opaq = 0.7, - auto.layout = TRUE, ask = dev.interactive(),...) -} -\arguments{ -\item{x}{: a `Smcmc' class object} - -\item{Q}{: vector of quantiles} - -\item{alpha}{: confidence level of simultaneous confidence intervals} - -\item{thresh}{: numeric typically less than .005 for the accuracy of the simulteaneous procedure} - -\item{main}{: to add main heading} - -\item{iid}{: logical argument for constructing density plot for iid samples. Defaults to \code{FALSE}} - -\item{plot}{: logical argument for is plots are to be returned} - -\item{mean}{: logical argument whether the mean is to be plotted} - -\item{border}{: whether a border is required for the simultaneous confidence intervals} - -\item{mean.col}{: color for the mean confidence interval} - -\item{quan.col}{: color for the quantile confidence intervals} - -\item{rug}{: logical indicating whether a rug plot is desired} - -\item{opaq}{: opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque.} - -\item{auto.layout}{: logical argument for an automatic layout of plots} - -\item{ask}{: activating interactive plots} - -\item{...}{: arguments passed on to the \code{density} plot in base R} -} -\value{ -returns a plot of the univariate density estimates with simultaneous - confidence intervals wherever asked. If \code{plot == FALSE} a list of - estimates and simultaneous confidence intervals. -} -\description{ -Density plots with simultaenous error bars around means and quantiles - for MCMC data. The error bars account for the correlated nature of the process. -} -\examples{ -# Producing Markov chain -chain <- matrix(0, ncol = 1, nrow = 1e3) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -chain <- Smcmc(list(chain)) -plot(chain) - -} -\references{ -Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -“Assessing and Visualizing Simultaneous Simulation Error”, -Journal of Computational and Graphical Statistics, 2020. -} diff --git a/man/traceplot.Rd b/man/traceplot.Rd deleted file mode 100644 index 84b86c7..0000000 --- a/man/traceplot.Rd +++ /dev/null @@ -1,86 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/export.R - -\name{traceplot} -\alias{traceplot} -\title{ -Trace Plot for Markov chain Monte Carlo -} -\description{ -traceplot is a graphical tool commonly used in Bayesian statistics and Markov Chain Monte Carlo(MCMC) methods to diagnose the convergence and mixing properties of a chain. -} -\usage{ -traceplot(x, fast = NULL, which = NULL, xlim = NULL, ylim = NULL,main = NULL, - xlab = "Iteration",ylab = NULL,alpha.f = 0.9, auto.layout = TRUE, - ask = dev.interactive(), - col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", - "springgreen2","skyblue3","khaki3", - "lightpink1","palegreen3","thistle3","aquamarine3","dimgrey", - "tomato3")) -} -\arguments{ - \item{x}{: an `Smcmc' class object or a list of Markov chains or a Markov chain matrix or a vector} - - \item{fast}{: a Boolean argument that will be auto set to TRUE when chain size is larger than 1e6} - - \item{which}{: if we want full size traceplots of specific dimensions of chain, we can pass a vector of respective dimension/components. } - - \item{xlim}{: range of x-axis} - - \item{ylim}{: range of y-axis} - - \item{main}{: usual heading for plot} - - \item{xlab}{: lables of x-axis} - - \item{ylab}{: labels of y-axis(it should be a vector of length equal to dimension of chain)} - - \item{alpha.f}{: To fix the opacity of lines as per user convenience, by default it is 0.9.} - - \item{auto.layout}{: logical argument for an automatic layout of plots} - - \item{ask}{: activating interactive plots} - - \item{col}{: color vector for multiple chains} -} - -\value{ -Returns the Trace Plots of Markov Chain(s). -} - -\examples{ - -# Defining a function to produce Markov chain with dimension p and size n -MakeChain <- function(p, n , h = .5) -{ -chain <- matrix(0, nrow = n,ncol = p) -for (i in 2:n) -{ - prop <- chain[i-1, ] + rnorm(p, mean = 0, sd = h) - log.ratio <- sum(dnorm(prop, log = TRUE) - dnorm(chain[i-1, ], log = TRUE)) - if(log(runif(1)) < log.ratio) - {chain[i, ] <- prop} - else{chain[i, ] <- chain[i - 1, ]} -} - v = vector(length = p) - for(i in 1:p){v[i] = paste("Comp ",i)} - colnames(chain) = v - return(chain) -} - - -chain1 <- MakeChain(p=4,n=1000) -chain2 <- MakeChain(p=4,n=1000) -chain3 <- MakeChain(p=4,n=1000) -out <- Smcmc(list(chain1,chain2,chain3)) -traceplot(out) - - -chain1 <- MakeChain(p=6,n=1000) -chain2 <- MakeChain(p=6,n=1000) -chain3 <- MakeChain(p=6,n=1000) -out <- Smcmc(list(chain1,chain2,chain3)) -traceplot(out) - -} - From 15b54648484cd75d45f393dcf2c528682a0afc6d Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 10:14:50 +0530 Subject: [PATCH 026/109] Add files via upload --- Siid.Rd | 28 +++++++++++++++++ Smcmc.Rd | 37 ++++++++++++++++++++++ acfplot.Rd | 57 +++++++++++++++++++++++++++++++++ addCI.Rd | 47 ++++++++++++++++++++++++++++ boxCI.Rd | 32 +++++++++++++++++++ boxplot.Siid.Rd | 64 ++++++++++++++++++++++++++++++++++++++ densityplot.Rd | 71 ++++++++++++++++++++++++++++++++++++++++++ getCI.Rd | 48 ++++++++++++++++++++++++++++ plot.Siid.Rd | 62 ++++++++++++++++++++++++++++++++++++ traceplot.Rd | 83 +++++++++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 529 insertions(+) create mode 100644 Siid.Rd create mode 100644 Smcmc.Rd create mode 100644 acfplot.Rd create mode 100644 addCI.Rd create mode 100644 boxCI.Rd create mode 100644 boxplot.Siid.Rd create mode 100644 densityplot.Rd create mode 100644 getCI.Rd create mode 100644 plot.Siid.Rd create mode 100644 traceplot.Rd diff --git a/Siid.Rd b/Siid.Rd new file mode 100644 index 0000000..20f4bed --- /dev/null +++ b/Siid.Rd @@ -0,0 +1,28 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/Siidclass.R +\name{Siid} +\alias{Siid} +\alias{as.Siid} +\alias{as.Siid.default} +\alias{is.iid} +\title{Siid class} +\usage{ +Siid(data, varnames = colnames(data)) +} +\arguments{ +\item{data}{: an iid output matrix with nsim rows and p columns} + +\item{varnames}{: a character string equal to the number of columns in \code{data}} +} +\value{ +an Siid class object +} +\description{ +Class for independent and identically distributed (iid) samples +} +\examples{ +# Generating iid data +chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) +siid.obj <- Siid(chain) + +} diff --git a/Smcmc.Rd b/Smcmc.Rd new file mode 100644 index 0000000..db7e40a --- /dev/null +++ b/Smcmc.Rd @@ -0,0 +1,37 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/Smcmcclass.R +\name{Smcmc} +\alias{Smcmc} +\alias{as.Smcmc} +\alias{as.Smcmc.default} +\alias{is.mcmc} +\title{Smcmc class} +\usage{ +Smcmc(data, batch.size = TRUE, stacked = TRUE, varnames = colnames(data)) +} +\arguments{ +\item{data}{: a list of MCMC output matrices each with `nsim` rows and `p` columns} + +\item{batch.size}{: logical argument, if true, calculates the batch size appropriate for this Markov chain. Setting to TRUE saves time in future steps.} + +\item{stacked}{: recommended to be `TRUE`. logical argument, if true, stores a carefully stacked version of the MCMC output for use later.} + +\item{varnames}{: a character string equal to the number of columns in \code{data}} +} +\value{ +an Smcmc class object +} +\description{ +Smcmc class for simulated data using Markov chain Monte Carlo +} +\examples{ +# Producing Markov chain +chain <- matrix(0, nrow = 1e3, ncol = 1) +chain[1,] <- 0 +err <- rnorm(1e3) +for(i in 2:1e3) +{ + chain[i,] <- .3*chain[i-1,] + err[i] +} +smcmc.obj <- Smcmc(chain) +} diff --git a/acfplot.Rd b/acfplot.Rd new file mode 100644 index 0000000..f0c6365 --- /dev/null +++ b/acfplot.Rd @@ -0,0 +1,57 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/export.R +\name{acfplot} +\alias{acfplot} +\title{ACF Plot for Markov chain Monte Carlo} +\usage{ +acfplot(x,which = NULL, type = c("correlation", "covariance"), + plot= TRUE, lag.max = NULL,main, avg.col = "blue", chain.col = "red", + na.action = na.fail, auto.layout = TRUE, ask = dev.interactive()) +} +\arguments{ +\item{x}{: an `Smcmc' class object or a list of Markov chains or a Markov chain matrix} + +\item{which}{: a vector of integers indicating which components' ACF plots are needed. By default all components are drawn.} + +\item{type}{: the kind of ACF plot: "correlation" or "covariance"} + +\item{plot}{: TRUE if plots are required. If FALSE, raw values are returned} + +\item{main}{: main heading of plot} + +\item{lag.max}{: Maximum lag for the ACF plot} + +\item{chain.col}{: color for the ACF of the individual chains.} + +\item{na.action}{: function to be called to handle missing values. ‘na.pass’ can be used.} + +\item{auto.layout}{: logical argument for an automatic layout of plots} + +\item{ask}{: activating interactive plots} + +\item{avg.col}{: color for the overall ACF of each component} +} +\value{ +returns the autocorrelation function plots of the Markov chains. Uses the + more accurate globally-centered ACFs. +} +\description{ +Autocorrelation function plots for MCMC data (including multiple chains) +} +\examples{ +# Producing Markov chain +chain <- matrix(0, ncol = 1, nrow = 1e3) +chain[1,] <- 0 +err <- rnorm(1e3) +for(i in 2:1e3) +{ + chain[i,] <- .3*chain[i-1,] + err[i] +} +chain <- Smcmc(list(chain)) +acfplot(chain) + +} +\references{ +Agarwal, M., and Vats, D., “Globally-centered autocovariances in MCMC”, +arxiv - 2009.01799, 2020. +} diff --git a/addCI.Rd b/addCI.Rd new file mode 100644 index 0000000..25744b7 --- /dev/null +++ b/addCI.Rd @@ -0,0 +1,47 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/export.R +\name{addCI} +\alias{addCI} +\title{Add simultaneous confidence interval to existing plot.} +\usage{ +addCI(x, CIs, component = 1, bord = NA, mean = TRUE, mean.color = 'plum4', + quan.color = 'lightsteelblue3', opaq = 0.7, ...) +} +\arguments{ +\item{x}{: a `Smcmc' class object} + +\item{CIs}{: the output from the `getCI` function} + +\item{component}{: numeric indicating which component to draw the confidence intervals for} + +\item{bord}{: logical for whether a border is desired around the confidence intervals} + +\item{mean}{: logical argument whether the mean is to be plotted} + +\item{mean.color}{: color for the mean confidence interval} + +\item{quan.color}{: color for the quantile confidence intervals} + +\item{opaq}{: opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque.} + +\item{...}{: arguments passed on to the boundaries of the confidence intervals in `segments`} +} +\value{ +adds segments for confidence intervals into an already existing plot environment +} +\description{ +Adds simultaneous confidence intervals for quantiles and means to an existing plot. +} +\examples{ +chain <- matrix(0, ncol = 1, nrow = 1e3) +chain[1,] <- 0 +err <- rnorm(1e3) +for(i in 2:1e3) +{ + chain[i,] <- .3*chain[i-1,] + err[i] +} +chain <- Smcmc(list(chain)) +plot(density(chain$stacked[,1])) +CIs <- getCI(chain) +addCI(chain, CIs, component = 1) +} diff --git a/boxCI.Rd b/boxCI.Rd new file mode 100644 index 0000000..496663b --- /dev/null +++ b/boxCI.Rd @@ -0,0 +1,32 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/export.R +\name{boxCI} +\alias{boxCI} +\title{Add simultaneous confidence interval to existing boxplot} +\usage{ +boxCI(x, CI, component = c(1), dimn = 1, + quan.color = 'lightsteelblue3', horizontal = FALSE) +} +\arguments{ +\item{x}{: a `Smcmc' class object} + +\item{CI}{: the output from the `getCI` function with `iid = TRUE`} + +\item{component}{: vector indicating which components to draw the confidence intervals for} + +\item{dimn}{: numeric for how many components are being plotted} + +\item{quan.color}{: color for the quantile confidence intervals} + +\item{horizontal}{: logical for whether boxplots are horizontal} +} +\value{ +adds segments for confidence intervals into an already existing plot environment +} +\description{ +Adds simultaneous confidence intervals for quantiles to an existing boxplot. +} +\examples{ +output <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) + +} diff --git a/boxplot.Siid.Rd b/boxplot.Siid.Rd new file mode 100644 index 0000000..8e1307b --- /dev/null +++ b/boxplot.Siid.Rd @@ -0,0 +1,64 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/Siidclass.R +\name{boxplot.Siid} +\alias{boxplot.Siid} +\title{Boxplot for Siid} +\usage{ +\method{boxplot}{Siid}(x, ..., alpha = 0.05, thresh = 0.001, + quan.col = 'lightsteelblue3', opaq = .6, range = 1.5, + width = NULL, varwidth = FALSE, outline = TRUE, plot = TRUE, + border = par("fg"), col = 'white', ann = !add, + horizontal = FALSE, add = FALSE) +} +\arguments{ +\item{x}{: a `Siid' class object} + +\item{...}{: arguments sent to boxplot} + +\item{alpha}{: confidence level of simultaneous confidence intervals} + +\item{thresh}{: numeric typically less than .005 for the accuracy of the simulteaneous procedure} + +\item{quan.col}{: color for the quantile confidence intervals} + +\item{opaq}{: opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque.} + +\item{range}{: as defined for base \code{boxplot}} + +\item{width}{: as defined for base \code{boxplot}} + +\item{varwidth}{: as defined for base \code{boxplot}} + +\item{outline}{: as defined for base \code{boxplot}} + +\item{plot}{: logical indicating whether the plot is to be constructed} + +\item{border}{: as defined for base \code{boxplot}} + +\item{col}{: as defined for base \code{boxplot}} + +\item{ann}{: as defined for base \code{boxplot}} + +\item{horizontal}{: as defined for base \code{boxplot}} + +\item{add}{: as defined for base \code{boxplot}} +} +\value{ +returns the base \code{boxplot} with simultaneous confidence intervals around + all quantiles +} +\description{ +Boxplots with simultaenous error bars around all quantiles for iid data. +} +\examples{ +# Generating iid data +chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) +siid.obj <- Siid(chain) +boxplot(siid.obj) + +} +\references{ +Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., +“Assessing and Visualizing Simultaneous Simulation Error”, +Journal of Computational and Graphical Statistics, 2020. +} diff --git a/densityplot.Rd b/densityplot.Rd new file mode 100644 index 0000000..07530c3 --- /dev/null +++ b/densityplot.Rd @@ -0,0 +1,71 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/Smcmcclass.R +\name{densityplot} +\alias{densityplot} +\title{density plot form Smcmc class} +\usage{ +densityplot(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, iid = FALSE, + plot = TRUE, mean = TRUE, border = NA, mean.col = 'plum4', + quan.col = 'lightsteelblue3',rug = TRUE, opaq = 0.7, + auto.layout = TRUE, ask = dev.interactive(),...) +} +\arguments{ +\item{x}{: a `Smcmc' class object} + +\item{Q}{: vector of quantiles} + +\item{alpha}{: confidence level of simultaneous confidence intervals} + +\item{thresh}{: numeric typically less than .005 for the accuracy of the simulteaneous procedure} + +\item{main}{: To add main heading} + +\item{iid}{: logical argument for constructing density plot for iid samples. Defaults to \code{FALSE}} + +\item{plot}{: logical argument for is plots are to be returned} + +\item{mean}{: logical argument whether the mean is to be plotted} + +\item{border}{: whether a border is required for the simultaneous confidence intervals} + +\item{mean.col}{: color for the mean confidence interval} + +\item{quan.col}{: color for the quantile confidence intervals} + +\item{rug}{: logical indicating whether a rug plot is desired} + +\item{opaq}{: opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque.} + +\item{auto.layout}{: logical argument for an automatic layout of plots} + +\item{ask}{: activating inter active plots} + +\item{...}{: arguments passed on to the \code{density} plot in base R} +} +\value{ +returns a plot of the univariate density estimates with simultaneous + confidence intervals wherever asked. If \code{plot == FALSE} a list of + estimates and simultaneous confidence intervals. +} +\description{ +Density plots with simultaenous error bars around means and quantiles + for MCMC data. The error bars account for the correlated nature of the process. +} +\examples{ +# Producing Markov chain +chain <- matrix(0, ncol = 1, nrow = 1e3) +chain[1,] <- 0 +err <- rnorm(1e3) +for(i in 2:1e3) +{ + chain[i,] <- .3*chain[i-1,] + err[i] +} +chain <- Smcmc(list(chain)) +densityplot(chain) + +} +\references{ +Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., +“Assessing and Visualizing Simultaneous Simulation Error”, +Journal of Computational and Graphical Statistics, 2020. +} diff --git a/getCI.Rd b/getCI.Rd new file mode 100644 index 0000000..a8ee1e0 --- /dev/null +++ b/getCI.Rd @@ -0,0 +1,48 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/export.R +\name{getCI} +\alias{getCI} +\title{Calculates simultaneous confidence intervals.} +\usage{ +getCI(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, iid = FALSE, + mean = TRUE) +} +\arguments{ +\item{x}{: a `Smcmc' class object} + +\item{Q}{: vector of quantiles} + +\item{alpha}{: confidence levels of the simulatenous intervals} + +\item{thresh}{: threshold for the optimization methodology that calculates the simultaneous CIs} + +\item{iid}{: logical argument for constructing density plot for iid samples. Defaults to \code{FALSE}} + +\item{mean}{: logical indicating whether mean is to be plotted} +} +\value{ +adds segments for confidence intervals into an already existing plot environment +} +\description{ +Calculates simultaneous confidence intervals for means and + quantiles as indicated for the desired MCMC output +} +\examples{ +chain <- matrix(0, ncol = 1, nrow = 1e3) +chain[1,] <- 0 +err <- rnorm(1e3) +for(i in 2:1e3) +{ + chain[i,] <- .3*chain[i-1,] + err[i] +} +chain <- Smcmc(list(chain)) +plot(density(chain$stacked[,1])) +CIs <- getCI(chain) +addCI(chain, CIs, component = 1) + +} +\references{ +Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., +“Assessing and Visualizing Simultaneous Simulation Error”, +Journal of Computational and Graphical Statistics, 2020. +} diff --git a/plot.Siid.Rd b/plot.Siid.Rd new file mode 100644 index 0000000..003ead4 --- /dev/null +++ b/plot.Siid.Rd @@ -0,0 +1,62 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/Siidclass.R +\name{plot.Siid} +\alias{plot.Siid} +\title{Plot Siid} +\usage{ +\method{plot}{Siid}(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, + rug = TRUE, plot = TRUE, mean = TRUE, border = NA, + mean.col = 'plum4', quan.col = 'lightsteelblue3', + opaq = 0.7, auto.layout = TRUE, + ask = dev.interactive(), ...) +} +\arguments{ +\item{x}{: a `Siid' class object} + +\item{Q}{: vector of quantiles} + +\item{alpha}{: confidence level of simultaneous confidence intervals} + +\item{thresh}{: numeric typically less than .005 for the accuracy of the simulteaneous procedure} + +\item{rug}{: logical indicating whether a rug plot is desired} + +\item{plot}{: logical argument for is plots are to be returned} + +\item{mean}{: logical argument whether the mean is to be plotted} + +\item{border}{: whether a border is required for the simultaneous confidence intervals} + +\item{mean.col}{: color for the mean confidence interval} + +\item{quan.col}{: color for the quantile confidence intervals} + +\item{opaq}{: opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque.} + +\item{auto.layout}{: logical argument for an automatic layout of plots} + +\item{ask}{: activating interactive plots} + +\item{...}{: arguments passed on to the \code{density} plot in base R} +} +\value{ +returns a plot of the univariate density estimates with simultaneous + confidence intervals wherever asked. If \code{plot == FALSE} a list of + estimates and simultaneous confidence intervals. +} +\description{ +Density plots with simultaenous error bars around means and quantiles + for iid data. +} +\examples{ +# Generating iid data +chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) +siid.obj <- Siid(chain) +plot(siid.obj) + +} +\references{ +Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., +“Assessing and Visualizing Simultaneous Simulation Error”, +Journal of Computational and Graphical Statistics, 2020. +} diff --git a/traceplot.Rd b/traceplot.Rd new file mode 100644 index 0000000..48e909e --- /dev/null +++ b/traceplot.Rd @@ -0,0 +1,83 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/export.R +\name{traceplot} +\alias{traceplot} +\title{Trace Plot for Markov chain Monte Carlo} +\usage{ +traceplot(x, fast = TRUE,which = NULL, xlim = NULL, ylim = NULL, + xlab = "Iteration",ylab = NULL, auto.layout = TRUE, + alpha.f = 0.9, ask = dev.interactive(), + col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", + "springgreen2","skyblue3","khaki3", + "lightpink1","palegreen3","thistle3","aquamarine3","dimgrey", + "tomato3")) +} +\arguments{ +\item{x}{: an `Smcmc' class object or a list of Markov chains or a Markov chain matrix or a vector.} + +\item{fast}{: a Boolean argument that will be set to TRUE by default, to make plots faster.} + +\item{which}{: if we want full size trace plots of specific dimensions of chain, we can pass a vector of respective dimension/components.} + +\item{xlim}{: range of x-axis} + +\item{ylim}{: range of y-axis} + +\item{main}{: usual heading for plot} + +\item{xlab}{: labels of x-axis} + +\item{ylab}{: labels of y-axis(it should be a vector of length equal to dimension of chain)} + +\item{alpha.f}{: To fix the opacity of lines as per user convenience, by default it is 0.9.} + +\item{auto.layout}{: logical argument for an automatic layout of plots} + +\item{ask}{: activating interactive plots} + +\item{col}{: color vector for multiple chains} +} +\value{ +Returns the Trace Plots of Markov Chain(s) +} +\description{ +traceplot is a graphical tool commonly used in Bayesian statistics and Markov Chain Monte Carlo(MCMC) methods to diagnose the convergence and mixing properties of a chain. +} +\examples{ +# example code +# Defining a function to produce Markov chain with dimension p and size n +MakeChain <- function(p, n , h = .5) +{ + chain <- matrix(0, nrow = n,ncol = p) + for (i in 2:n) + { + prop <- chain[i-1, ] + rnorm(p, mean = 0, sd = h) + log.ratio <- sum(dnorm(prop, log = TRUE) - dnorm(chain[i-1, ], log = TRUE)) + if(log(runif(1)) < log.ratio) + {chain[i, ] <- prop} + else{chain[i, ] <- chain[i - 1, ]} + } + v = vector(length = p) + for(i in 1:p){v[i] = paste("Comp ",i)} + colnames(chain) = v + return(chain) +} + + +chain1 <- MakeChain(p=4,n=1000) +chain2 <- MakeChain(p=4,n=1000) +chain3 <- MakeChain(p=4,n=1000) +out <- Smcmc(list(chain1,chain2,chain3)) +traceplot(out) + + +chain1 <- MakeChain(p=6,n=1000) +chain2 <- MakeChain(p=6,n=1000) +chain3 <- MakeChain(p=6,n=1000) +out <- Smcmc(list(chain1,chain2,chain3)) +traceplot(out) + + + + +} From f54adbb225c0f6c5d1f0652a64b6055846949627 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:00:34 +0530 Subject: [PATCH 027/109] Rename traceplot.Rd to main/traceplot.Rd --- traceplot.Rd => main/traceplot.Rd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename traceplot.Rd => main/traceplot.Rd (100%) diff --git a/traceplot.Rd b/main/traceplot.Rd similarity index 100% rename from traceplot.Rd rename to main/traceplot.Rd From b8d1b587774f02620e1d15e2451a6e195421136b Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:00:54 +0530 Subject: [PATCH 028/109] Rename main/traceplot.Rd to traceplot.Rd --- main/traceplot.Rd => traceplot.Rd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename main/traceplot.Rd => traceplot.Rd (100%) diff --git a/main/traceplot.Rd b/traceplot.Rd similarity index 100% rename from main/traceplot.Rd rename to traceplot.Rd From be4ccab977f4d4b590da4a14f8c5b11ece91ef8f Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:01:45 +0530 Subject: [PATCH 029/109] Add files via upload From 122516caf63ab1dba63f2722766ffbeced74b61e Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:02:07 +0530 Subject: [PATCH 030/109] Rename Siid.Rd to man/Siid.Rd --- Siid.Rd => man/Siid.Rd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Siid.Rd => man/Siid.Rd (100%) diff --git a/Siid.Rd b/man/Siid.Rd similarity index 100% rename from Siid.Rd rename to man/Siid.Rd From 2fb7de5f815bfccea228051b9d886c4c4b5777fb Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:02:29 +0530 Subject: [PATCH 031/109] Rename Smcmc.Rd to man/Smcmc.Rd --- Smcmc.Rd => man/Smcmc.Rd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Smcmc.Rd => man/Smcmc.Rd (100%) diff --git a/Smcmc.Rd b/man/Smcmc.Rd similarity index 100% rename from Smcmc.Rd rename to man/Smcmc.Rd From 9a11d73642b1becdd8ab598a5fef88fbb41e6729 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:02:51 +0530 Subject: [PATCH 032/109] Rename acfplot.Rd to man/acfplot.Rd --- acfplot.Rd => man/acfplot.Rd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename acfplot.Rd => man/acfplot.Rd (100%) diff --git a/acfplot.Rd b/man/acfplot.Rd similarity index 100% rename from acfplot.Rd rename to man/acfplot.Rd From e782f06a4969fe4b32d0788d0c22b0c54344c7aa Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:03:09 +0530 Subject: [PATCH 033/109] Rename addCI.Rd to man/addCI.Rd --- addCI.Rd => man/addCI.Rd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename addCI.Rd => man/addCI.Rd (100%) diff --git a/addCI.Rd b/man/addCI.Rd similarity index 100% rename from addCI.Rd rename to man/addCI.Rd From a1c47164f4d71f57ec772414f13b1e7ec05db92b Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:03:25 +0530 Subject: [PATCH 034/109] Rename boxCI.Rd to man/boxCI.Rd --- boxCI.Rd => man/boxCI.Rd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename boxCI.Rd => man/boxCI.Rd (100%) diff --git a/boxCI.Rd b/man/boxCI.Rd similarity index 100% rename from boxCI.Rd rename to man/boxCI.Rd From 393f43f08636510879086967ea79b79693e7c4c4 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:03:44 +0530 Subject: [PATCH 035/109] Rename boxplot.Siid.Rd to man/boxplot.Siid.Rd --- boxplot.Siid.Rd => man/boxplot.Siid.Rd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename boxplot.Siid.Rd => man/boxplot.Siid.Rd (100%) diff --git a/boxplot.Siid.Rd b/man/boxplot.Siid.Rd similarity index 100% rename from boxplot.Siid.Rd rename to man/boxplot.Siid.Rd From 91b9f4f1694c76f174792d526aae6d15912ff723 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:04:00 +0530 Subject: [PATCH 036/109] Rename densityplot.Rd to man/densityplot.Rd --- densityplot.Rd => man/densityplot.Rd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename densityplot.Rd => man/densityplot.Rd (100%) diff --git a/densityplot.Rd b/man/densityplot.Rd similarity index 100% rename from densityplot.Rd rename to man/densityplot.Rd From 979d8f72ab8287ad1349112f42fdd6ec29672fa7 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:04:20 +0530 Subject: [PATCH 037/109] Rename getCI.Rd to man/getCI.Rd --- getCI.Rd => man/getCI.Rd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename getCI.Rd => man/getCI.Rd (100%) diff --git a/getCI.Rd b/man/getCI.Rd similarity index 100% rename from getCI.Rd rename to man/getCI.Rd From becc0dc24e1276d886ee678672e5b95450fd307c Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:04:39 +0530 Subject: [PATCH 038/109] Rename plot.Siid.Rd to man/plot.Siid.Rd --- plot.Siid.Rd => man/plot.Siid.Rd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename plot.Siid.Rd => man/plot.Siid.Rd (100%) diff --git a/plot.Siid.Rd b/man/plot.Siid.Rd similarity index 100% rename from plot.Siid.Rd rename to man/plot.Siid.Rd From a4410bde3d07a3407d30b742c466ca60306503e3 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:05:03 +0530 Subject: [PATCH 039/109] Rename traceplot.Rd to man/traceplot.Rd --- traceplot.Rd => man/traceplot.Rd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename traceplot.Rd => man/traceplot.Rd (100%) diff --git a/traceplot.Rd b/man/traceplot.Rd similarity index 100% rename from traceplot.Rd rename to man/traceplot.Rd From 08e9b0a042ab0987237812c8d58320971c5be458 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:14:07 +0530 Subject: [PATCH 040/109] Add files via upload --- DESCRIPTION | 2 +- NAMESPACE | 62 ++++++++++++++++++++++++++--------------------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index b3fc1cd..532c1f3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -11,4 +11,4 @@ Imports: mcmcse, mvtnorm Description: Toolkit for simulation output including Monte Carlo and Markov chain Monte Carlo. Tools for reliable visualisations are available, and support for multiple chain MCMC is integrated. License: GPL (>= 2) Encoding: UTF-8 -RoxygenNote: 7.1.1 +RoxygenNote: 7.2.3 diff --git a/NAMESPACE b/NAMESPACE index b1dc18c..587a3b5 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,31 +1,31 @@ -# Generated by roxygen2: do not edit by hand - -S3method(as.Siid,default) -S3method(as.Smcmc,default) -S3method(boxplot,Siid) -S3method(plot,Siid) -S3method(plot,Smcmc) -export(ACF) -export(traceplot) -export(Siid) -export(Smcmc) -export(addCI) -export(as.Siid) -export(as.Smcmc) -export(boxCI) -export(getCI) -importFrom(grDevices,adjustcolor) -importFrom(grDevices,dev.interactive) -importFrom(graphics,boxplot) -importFrom(graphics,boxplot.matrix) -importFrom(graphics,par) -importFrom(graphics,polygon) -importFrom(graphics,segments) -importFrom(mcmcse,batchSize) -importFrom(mcmcse,mcse.multi) -importFrom(mvtnorm,pmvnorm) -importFrom(stats,cov) -importFrom(stats,density) -importFrom(stats,qnorm) -importFrom(stats,quantile) -importFrom(stats,ts) +# Generated by roxygen2: do not edit by hand + +S3method(as.Siid,default) +S3method(as.Smcmc,default) +S3method(boxplot,Siid) +S3method(plot,Siid) +export(Siid) +export(Smcmc) +export(acfplot) +export(addCI) +export(as.Siid) +export(as.Smcmc) +export(boxCI) +export(densityplot) +export(getCI) +export(traceplot) +importFrom(grDevices,adjustcolor) +importFrom(grDevices,dev.interactive) +importFrom(graphics,boxplot) +importFrom(graphics,boxplot.matrix) +importFrom(graphics,par) +importFrom(graphics,polygon) +importFrom(graphics,segments) +importFrom(mcmcse,batchSize) +importFrom(mcmcse,mcse.multi) +importFrom(mvtnorm,pmvnorm) +importFrom(stats,cov) +importFrom(stats,density) +importFrom(stats,qnorm) +importFrom(stats,quantile) +importFrom(stats,ts) From 3305490ae5bf79addb7eba611b34de9a1afc5586 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:17:32 +0530 Subject: [PATCH 041/109] Add files via upload --- R/Smcmcclass.R | 5 ++--- R/export.R | 15 ++++++++------- R/supp.R | 22 +++++++++++++--------- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/R/Smcmcclass.R b/R/Smcmcclass.R index aa8230e..44e9316 100644 --- a/R/Smcmcclass.R +++ b/R/Smcmcclass.R @@ -96,7 +96,6 @@ Smcmc <- function(data, - #' @title density plot form Smcmc class #' #' @description Density plots with simultaenous error bars around means and quantiles @@ -104,7 +103,7 @@ Smcmc <- function(data, #' #' #' @name densityplot -#' @usage \method{plot}{Smcmc}(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, iid = FALSE, +#' @usage densityplot(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, iid = FALSE, #' plot = TRUE, mean = TRUE, border = NA, mean.col = 'plum4', #' quan.col = 'lightsteelblue3',rug = TRUE, opaq = 0.7, #' auto.layout = TRUE, ask = dev.interactive(),...) @@ -173,4 +172,4 @@ Smcmc <- function(data, ask = ask,main = main, ...) } invisible(out) -} +} \ No newline at end of file diff --git a/R/export.R b/R/export.R index 427ef69..e2c689d 100644 --- a/R/export.R +++ b/R/export.R @@ -270,7 +270,7 @@ getCI <- function(x, #' @export boxCI <- function(x, CI, - component = 1, + component = c(1), dimn = 1, quan.color = 'lightsteelblue3', horizontal = FALSE) @@ -304,18 +304,21 @@ boxCI <- function(x, + + + #' @title ACF Plot for Markov chain Monte Carlo #' #' @description Autocorrelation function plots for MCMC data (including multiple chains) #' #' #' @name acfplot -#' @usage ACF(x,component = NULL, type = c("correlation", "covariance"), -#' plot= TRUE, lag.max = NULL, avg.col = "blue", chain.col = "red", +#' @usage acfplot(x,which = NULL, type = c("correlation", "covariance"), +#' plot= TRUE, lag.max = NULL,main, avg.col = "blue", chain.col = "red", #' na.action = na.fail, auto.layout = TRUE, ask = dev.interactive()) #' #' @param x : an `Smcmc' class object or a list of Markov chains or a Markov chain matrix -#' @param component : a vector of integers indicating which components' ACF plots are needed. By default all components are drawn. +#' @param which : a vector of integers indicating which components' ACF plots are needed. By default all components are drawn. #' @param type : the kind of ACF plot: "correlation" or "covariance" #' @param plot : TRUE if plots are required. If FALSE, raw values are returned #' @param main : main heading of plot @@ -461,12 +464,10 @@ acfplot <- function(x, - - #' @title Trace Plot for Markov chain Monte Carlo #' @description traceplot is a graphical tool commonly used in Bayesian statistics and Markov Chain Monte Carlo(MCMC) methods to diagnose the convergence and mixing properties of a chain. #' @name traceplot -#' @usage function(x, fast = NULL,which = NULL, xlim = NULL, ylim = NULL, +#' @usage traceplot(x, fast = TRUE,which = NULL, xlim = NULL, ylim = NULL, #' xlab = "Iteration",ylab = NULL, auto.layout = TRUE, #' alpha.f = 0.9, ask = dev.interactive(), #' col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", diff --git a/R/supp.R b/R/supp.R index c6842f0..595529c 100644 --- a/R/supp.R +++ b/R/supp.R @@ -27,7 +27,8 @@ CIz <- function(z, p1 , p2, theta.hat, phi, ci.sigma.mat, n, mean = TRUE) return (list("lower.ci" = c(lower.ci.p1, lower.ci.p2), "upper.ci" = c(upper.ci.p1, upper.ci.p2))) } -## For plotting density plots and Histograms + + plot.CIs <- function(x, dimn, CIs, @@ -71,7 +72,7 @@ plot.CIs <- function(x, if (max(abs(beta - floor(beta))) == 0 || bndw(beta) == 0 || length(unique(beta)) == 1) { beta = as.vector(beta) - h = hist(beta, plot = F,..) # or hist(x,plot=FALSE) to avoid the plot of the histogram + h = hist(beta, plot = F) # or hist(x,plot=FALSE) to avoid the plot of the histogram h$density = h$counts/sum(h$counts) plot(h,freq=FALSE,ylab=ylab, xlab = NA, main = NA, col = "lightgreen") } @@ -126,7 +127,7 @@ chain_stacker <- function(x) { p <- as.integer(ncol(x[[1]])) b.final <- floor(mean(sapply(x, batchSize))) # mean batch size - + a <- floor(n/b.final) ab <- a*b.final trash <- n-ab @@ -143,17 +144,21 @@ chain_stacker <- function(x) { return(list("b.size" = b.final, "stacked.data" = big.chain)) } -## setLayout for all plots + setLayout_trace <- function(p, ask = FALSE) { - if(p%%2 == 0) + if(p <= 4) { - mfrow = c(p/2,2) + mfrow <- c(p,1) + } + else if(p%%2 != 0) + { + mfrow = c((p+1)/2,2) } else { - mfrow = c((p+1)/2,2) + mfrow = c(p/2,2) } par(ask = FALSE, mfrow = mfrow) k = list(ask,mfrow) @@ -161,9 +166,8 @@ setLayout_trace <- function(p, ask = FALSE) return(k) } -## for calculating Bandwidth + bndw <- function(x) { x <- x[!is.na(as.vector(x))] return(1.06 * min(sd(x), IQR(x)/1.34) * length(x)^-0.2) } - From a5a138dddfa195707e1a07ed6aa944f032603862 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:18:49 +0530 Subject: [PATCH 042/109] Add files via upload From 7be00ce11af4c0eeaecffb706c51a10c916806f4 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Thu, 29 Jun 2023 17:59:47 +0530 Subject: [PATCH 043/109] Delete man directory --- man/Siid.Rd | 28 --------------- man/Smcmc.Rd | 37 -------------------- man/acfplot.Rd | 57 ------------------------------- man/addCI.Rd | 47 ------------------------- man/boxCI.Rd | 32 ----------------- man/boxplot.Siid.Rd | 64 ---------------------------------- man/densityplot.Rd | 71 -------------------------------------- man/getCI.Rd | 48 -------------------------- man/plot.Siid.Rd | 62 --------------------------------- man/traceplot.Rd | 83 --------------------------------------------- 10 files changed, 529 deletions(-) delete mode 100644 man/Siid.Rd delete mode 100644 man/Smcmc.Rd delete mode 100644 man/acfplot.Rd delete mode 100644 man/addCI.Rd delete mode 100644 man/boxCI.Rd delete mode 100644 man/boxplot.Siid.Rd delete mode 100644 man/densityplot.Rd delete mode 100644 man/getCI.Rd delete mode 100644 man/plot.Siid.Rd delete mode 100644 man/traceplot.Rd diff --git a/man/Siid.Rd b/man/Siid.Rd deleted file mode 100644 index 20f4bed..0000000 --- a/man/Siid.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Siidclass.R -\name{Siid} -\alias{Siid} -\alias{as.Siid} -\alias{as.Siid.default} -\alias{is.iid} -\title{Siid class} -\usage{ -Siid(data, varnames = colnames(data)) -} -\arguments{ -\item{data}{: an iid output matrix with nsim rows and p columns} - -\item{varnames}{: a character string equal to the number of columns in \code{data}} -} -\value{ -an Siid class object -} -\description{ -Class for independent and identically distributed (iid) samples -} -\examples{ -# Generating iid data -chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -siid.obj <- Siid(chain) - -} diff --git a/man/Smcmc.Rd b/man/Smcmc.Rd deleted file mode 100644 index db7e40a..0000000 --- a/man/Smcmc.Rd +++ /dev/null @@ -1,37 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Smcmcclass.R -\name{Smcmc} -\alias{Smcmc} -\alias{as.Smcmc} -\alias{as.Smcmc.default} -\alias{is.mcmc} -\title{Smcmc class} -\usage{ -Smcmc(data, batch.size = TRUE, stacked = TRUE, varnames = colnames(data)) -} -\arguments{ -\item{data}{: a list of MCMC output matrices each with `nsim` rows and `p` columns} - -\item{batch.size}{: logical argument, if true, calculates the batch size appropriate for this Markov chain. Setting to TRUE saves time in future steps.} - -\item{stacked}{: recommended to be `TRUE`. logical argument, if true, stores a carefully stacked version of the MCMC output for use later.} - -\item{varnames}{: a character string equal to the number of columns in \code{data}} -} -\value{ -an Smcmc class object -} -\description{ -Smcmc class for simulated data using Markov chain Monte Carlo -} -\examples{ -# Producing Markov chain -chain <- matrix(0, nrow = 1e3, ncol = 1) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -smcmc.obj <- Smcmc(chain) -} diff --git a/man/acfplot.Rd b/man/acfplot.Rd deleted file mode 100644 index f0c6365..0000000 --- a/man/acfplot.Rd +++ /dev/null @@ -1,57 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/export.R -\name{acfplot} -\alias{acfplot} -\title{ACF Plot for Markov chain Monte Carlo} -\usage{ -acfplot(x,which = NULL, type = c("correlation", "covariance"), - plot= TRUE, lag.max = NULL,main, avg.col = "blue", chain.col = "red", - na.action = na.fail, auto.layout = TRUE, ask = dev.interactive()) -} -\arguments{ -\item{x}{: an `Smcmc' class object or a list of Markov chains or a Markov chain matrix} - -\item{which}{: a vector of integers indicating which components' ACF plots are needed. By default all components are drawn.} - -\item{type}{: the kind of ACF plot: "correlation" or "covariance"} - -\item{plot}{: TRUE if plots are required. If FALSE, raw values are returned} - -\item{main}{: main heading of plot} - -\item{lag.max}{: Maximum lag for the ACF plot} - -\item{chain.col}{: color for the ACF of the individual chains.} - -\item{na.action}{: function to be called to handle missing values. ‘na.pass’ can be used.} - -\item{auto.layout}{: logical argument for an automatic layout of plots} - -\item{ask}{: activating interactive plots} - -\item{avg.col}{: color for the overall ACF of each component} -} -\value{ -returns the autocorrelation function plots of the Markov chains. Uses the - more accurate globally-centered ACFs. -} -\description{ -Autocorrelation function plots for MCMC data (including multiple chains) -} -\examples{ -# Producing Markov chain -chain <- matrix(0, ncol = 1, nrow = 1e3) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -chain <- Smcmc(list(chain)) -acfplot(chain) - -} -\references{ -Agarwal, M., and Vats, D., “Globally-centered autocovariances in MCMC”, -arxiv - 2009.01799, 2020. -} diff --git a/man/addCI.Rd b/man/addCI.Rd deleted file mode 100644 index 25744b7..0000000 --- a/man/addCI.Rd +++ /dev/null @@ -1,47 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/export.R -\name{addCI} -\alias{addCI} -\title{Add simultaneous confidence interval to existing plot.} -\usage{ -addCI(x, CIs, component = 1, bord = NA, mean = TRUE, mean.color = 'plum4', - quan.color = 'lightsteelblue3', opaq = 0.7, ...) -} -\arguments{ -\item{x}{: a `Smcmc' class object} - -\item{CIs}{: the output from the `getCI` function} - -\item{component}{: numeric indicating which component to draw the confidence intervals for} - -\item{bord}{: logical for whether a border is desired around the confidence intervals} - -\item{mean}{: logical argument whether the mean is to be plotted} - -\item{mean.color}{: color for the mean confidence interval} - -\item{quan.color}{: color for the quantile confidence intervals} - -\item{opaq}{: opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque.} - -\item{...}{: arguments passed on to the boundaries of the confidence intervals in `segments`} -} -\value{ -adds segments for confidence intervals into an already existing plot environment -} -\description{ -Adds simultaneous confidence intervals for quantiles and means to an existing plot. -} -\examples{ -chain <- matrix(0, ncol = 1, nrow = 1e3) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -chain <- Smcmc(list(chain)) -plot(density(chain$stacked[,1])) -CIs <- getCI(chain) -addCI(chain, CIs, component = 1) -} diff --git a/man/boxCI.Rd b/man/boxCI.Rd deleted file mode 100644 index 496663b..0000000 --- a/man/boxCI.Rd +++ /dev/null @@ -1,32 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/export.R -\name{boxCI} -\alias{boxCI} -\title{Add simultaneous confidence interval to existing boxplot} -\usage{ -boxCI(x, CI, component = c(1), dimn = 1, - quan.color = 'lightsteelblue3', horizontal = FALSE) -} -\arguments{ -\item{x}{: a `Smcmc' class object} - -\item{CI}{: the output from the `getCI` function with `iid = TRUE`} - -\item{component}{: vector indicating which components to draw the confidence intervals for} - -\item{dimn}{: numeric for how many components are being plotted} - -\item{quan.color}{: color for the quantile confidence intervals} - -\item{horizontal}{: logical for whether boxplots are horizontal} -} -\value{ -adds segments for confidence intervals into an already existing plot environment -} -\description{ -Adds simultaneous confidence intervals for quantiles to an existing boxplot. -} -\examples{ -output <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) - -} diff --git a/man/boxplot.Siid.Rd b/man/boxplot.Siid.Rd deleted file mode 100644 index 8e1307b..0000000 --- a/man/boxplot.Siid.Rd +++ /dev/null @@ -1,64 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Siidclass.R -\name{boxplot.Siid} -\alias{boxplot.Siid} -\title{Boxplot for Siid} -\usage{ -\method{boxplot}{Siid}(x, ..., alpha = 0.05, thresh = 0.001, - quan.col = 'lightsteelblue3', opaq = .6, range = 1.5, - width = NULL, varwidth = FALSE, outline = TRUE, plot = TRUE, - border = par("fg"), col = 'white', ann = !add, - horizontal = FALSE, add = FALSE) -} -\arguments{ -\item{x}{: a `Siid' class object} - -\item{...}{: arguments sent to boxplot} - -\item{alpha}{: confidence level of simultaneous confidence intervals} - -\item{thresh}{: numeric typically less than .005 for the accuracy of the simulteaneous procedure} - -\item{quan.col}{: color for the quantile confidence intervals} - -\item{opaq}{: opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque.} - -\item{range}{: as defined for base \code{boxplot}} - -\item{width}{: as defined for base \code{boxplot}} - -\item{varwidth}{: as defined for base \code{boxplot}} - -\item{outline}{: as defined for base \code{boxplot}} - -\item{plot}{: logical indicating whether the plot is to be constructed} - -\item{border}{: as defined for base \code{boxplot}} - -\item{col}{: as defined for base \code{boxplot}} - -\item{ann}{: as defined for base \code{boxplot}} - -\item{horizontal}{: as defined for base \code{boxplot}} - -\item{add}{: as defined for base \code{boxplot}} -} -\value{ -returns the base \code{boxplot} with simultaneous confidence intervals around - all quantiles -} -\description{ -Boxplots with simultaenous error bars around all quantiles for iid data. -} -\examples{ -# Generating iid data -chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -siid.obj <- Siid(chain) -boxplot(siid.obj) - -} -\references{ -Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -“Assessing and Visualizing Simultaneous Simulation Error”, -Journal of Computational and Graphical Statistics, 2020. -} diff --git a/man/densityplot.Rd b/man/densityplot.Rd deleted file mode 100644 index 07530c3..0000000 --- a/man/densityplot.Rd +++ /dev/null @@ -1,71 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Smcmcclass.R -\name{densityplot} -\alias{densityplot} -\title{density plot form Smcmc class} -\usage{ -densityplot(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, iid = FALSE, - plot = TRUE, mean = TRUE, border = NA, mean.col = 'plum4', - quan.col = 'lightsteelblue3',rug = TRUE, opaq = 0.7, - auto.layout = TRUE, ask = dev.interactive(),...) -} -\arguments{ -\item{x}{: a `Smcmc' class object} - -\item{Q}{: vector of quantiles} - -\item{alpha}{: confidence level of simultaneous confidence intervals} - -\item{thresh}{: numeric typically less than .005 for the accuracy of the simulteaneous procedure} - -\item{main}{: To add main heading} - -\item{iid}{: logical argument for constructing density plot for iid samples. Defaults to \code{FALSE}} - -\item{plot}{: logical argument for is plots are to be returned} - -\item{mean}{: logical argument whether the mean is to be plotted} - -\item{border}{: whether a border is required for the simultaneous confidence intervals} - -\item{mean.col}{: color for the mean confidence interval} - -\item{quan.col}{: color for the quantile confidence intervals} - -\item{rug}{: logical indicating whether a rug plot is desired} - -\item{opaq}{: opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque.} - -\item{auto.layout}{: logical argument for an automatic layout of plots} - -\item{ask}{: activating inter active plots} - -\item{...}{: arguments passed on to the \code{density} plot in base R} -} -\value{ -returns a plot of the univariate density estimates with simultaneous - confidence intervals wherever asked. If \code{plot == FALSE} a list of - estimates and simultaneous confidence intervals. -} -\description{ -Density plots with simultaenous error bars around means and quantiles - for MCMC data. The error bars account for the correlated nature of the process. -} -\examples{ -# Producing Markov chain -chain <- matrix(0, ncol = 1, nrow = 1e3) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -chain <- Smcmc(list(chain)) -densityplot(chain) - -} -\references{ -Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -“Assessing and Visualizing Simultaneous Simulation Error”, -Journal of Computational and Graphical Statistics, 2020. -} diff --git a/man/getCI.Rd b/man/getCI.Rd deleted file mode 100644 index a8ee1e0..0000000 --- a/man/getCI.Rd +++ /dev/null @@ -1,48 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/export.R -\name{getCI} -\alias{getCI} -\title{Calculates simultaneous confidence intervals.} -\usage{ -getCI(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, iid = FALSE, - mean = TRUE) -} -\arguments{ -\item{x}{: a `Smcmc' class object} - -\item{Q}{: vector of quantiles} - -\item{alpha}{: confidence levels of the simulatenous intervals} - -\item{thresh}{: threshold for the optimization methodology that calculates the simultaneous CIs} - -\item{iid}{: logical argument for constructing density plot for iid samples. Defaults to \code{FALSE}} - -\item{mean}{: logical indicating whether mean is to be plotted} -} -\value{ -adds segments for confidence intervals into an already existing plot environment -} -\description{ -Calculates simultaneous confidence intervals for means and - quantiles as indicated for the desired MCMC output -} -\examples{ -chain <- matrix(0, ncol = 1, nrow = 1e3) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -chain <- Smcmc(list(chain)) -plot(density(chain$stacked[,1])) -CIs <- getCI(chain) -addCI(chain, CIs, component = 1) - -} -\references{ -Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -“Assessing and Visualizing Simultaneous Simulation Error”, -Journal of Computational and Graphical Statistics, 2020. -} diff --git a/man/plot.Siid.Rd b/man/plot.Siid.Rd deleted file mode 100644 index 003ead4..0000000 --- a/man/plot.Siid.Rd +++ /dev/null @@ -1,62 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Siidclass.R -\name{plot.Siid} -\alias{plot.Siid} -\title{Plot Siid} -\usage{ -\method{plot}{Siid}(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, - rug = TRUE, plot = TRUE, mean = TRUE, border = NA, - mean.col = 'plum4', quan.col = 'lightsteelblue3', - opaq = 0.7, auto.layout = TRUE, - ask = dev.interactive(), ...) -} -\arguments{ -\item{x}{: a `Siid' class object} - -\item{Q}{: vector of quantiles} - -\item{alpha}{: confidence level of simultaneous confidence intervals} - -\item{thresh}{: numeric typically less than .005 for the accuracy of the simulteaneous procedure} - -\item{rug}{: logical indicating whether a rug plot is desired} - -\item{plot}{: logical argument for is plots are to be returned} - -\item{mean}{: logical argument whether the mean is to be plotted} - -\item{border}{: whether a border is required for the simultaneous confidence intervals} - -\item{mean.col}{: color for the mean confidence interval} - -\item{quan.col}{: color for the quantile confidence intervals} - -\item{opaq}{: opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque.} - -\item{auto.layout}{: logical argument for an automatic layout of plots} - -\item{ask}{: activating interactive plots} - -\item{...}{: arguments passed on to the \code{density} plot in base R} -} -\value{ -returns a plot of the univariate density estimates with simultaneous - confidence intervals wherever asked. If \code{plot == FALSE} a list of - estimates and simultaneous confidence intervals. -} -\description{ -Density plots with simultaenous error bars around means and quantiles - for iid data. -} -\examples{ -# Generating iid data -chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -siid.obj <- Siid(chain) -plot(siid.obj) - -} -\references{ -Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -“Assessing and Visualizing Simultaneous Simulation Error”, -Journal of Computational and Graphical Statistics, 2020. -} diff --git a/man/traceplot.Rd b/man/traceplot.Rd deleted file mode 100644 index 48e909e..0000000 --- a/man/traceplot.Rd +++ /dev/null @@ -1,83 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/export.R -\name{traceplot} -\alias{traceplot} -\title{Trace Plot for Markov chain Monte Carlo} -\usage{ -traceplot(x, fast = TRUE,which = NULL, xlim = NULL, ylim = NULL, - xlab = "Iteration",ylab = NULL, auto.layout = TRUE, - alpha.f = 0.9, ask = dev.interactive(), - col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", - "springgreen2","skyblue3","khaki3", - "lightpink1","palegreen3","thistle3","aquamarine3","dimgrey", - "tomato3")) -} -\arguments{ -\item{x}{: an `Smcmc' class object or a list of Markov chains or a Markov chain matrix or a vector.} - -\item{fast}{: a Boolean argument that will be set to TRUE by default, to make plots faster.} - -\item{which}{: if we want full size trace plots of specific dimensions of chain, we can pass a vector of respective dimension/components.} - -\item{xlim}{: range of x-axis} - -\item{ylim}{: range of y-axis} - -\item{main}{: usual heading for plot} - -\item{xlab}{: labels of x-axis} - -\item{ylab}{: labels of y-axis(it should be a vector of length equal to dimension of chain)} - -\item{alpha.f}{: To fix the opacity of lines as per user convenience, by default it is 0.9.} - -\item{auto.layout}{: logical argument for an automatic layout of plots} - -\item{ask}{: activating interactive plots} - -\item{col}{: color vector for multiple chains} -} -\value{ -Returns the Trace Plots of Markov Chain(s) -} -\description{ -traceplot is a graphical tool commonly used in Bayesian statistics and Markov Chain Monte Carlo(MCMC) methods to diagnose the convergence and mixing properties of a chain. -} -\examples{ -# example code -# Defining a function to produce Markov chain with dimension p and size n -MakeChain <- function(p, n , h = .5) -{ - chain <- matrix(0, nrow = n,ncol = p) - for (i in 2:n) - { - prop <- chain[i-1, ] + rnorm(p, mean = 0, sd = h) - log.ratio <- sum(dnorm(prop, log = TRUE) - dnorm(chain[i-1, ], log = TRUE)) - if(log(runif(1)) < log.ratio) - {chain[i, ] <- prop} - else{chain[i, ] <- chain[i - 1, ]} - } - v = vector(length = p) - for(i in 1:p){v[i] = paste("Comp ",i)} - colnames(chain) = v - return(chain) -} - - -chain1 <- MakeChain(p=4,n=1000) -chain2 <- MakeChain(p=4,n=1000) -chain3 <- MakeChain(p=4,n=1000) -out <- Smcmc(list(chain1,chain2,chain3)) -traceplot(out) - - -chain1 <- MakeChain(p=6,n=1000) -chain2 <- MakeChain(p=6,n=1000) -chain3 <- MakeChain(p=6,n=1000) -out <- Smcmc(list(chain1,chain2,chain3)) -traceplot(out) - - - - -} From 5bd5efd3032a9939cb716d910752d10ba98be455 Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Thu, 29 Jun 2023 18:00:05 +0530 Subject: [PATCH 044/109] Delete R directory --- R/Siidclass.R | 167 ------------ R/Smcmcclass.R | 175 ------------- R/export.R | 696 ------------------------------------------------- R/supp.R | 173 ------------ 4 files changed, 1211 deletions(-) delete mode 100644 R/Siidclass.R delete mode 100644 R/Smcmcclass.R delete mode 100644 R/export.R delete mode 100644 R/supp.R diff --git a/R/Siidclass.R b/R/Siidclass.R deleted file mode 100644 index 0475477..0000000 --- a/R/Siidclass.R +++ /dev/null @@ -1,167 +0,0 @@ -#' @title Siid class -#' -#' @description Class for independent and identically distributed (iid) samples -#' -#' @name Siid -#' @aliases Siid as.Siid as.Siid.default is.iid -#' @usage Siid(data, varnames = colnames(data)) -#' @param data : an iid output matrix with nsim rows and p columns -#' @param varnames : a character string equal to the number of columns in \code{data} -#' -#' @return an Siid class object -#' @examples -#' # Generating iid data -#' chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -#' siid.obj <- Siid(chain) -#' -#' @export -"Siid" <- function(data, - varnames = colnames(data)) # make Siid object -{ - if(missing(data)) - stop("Data must be provided.") - - if(is.vector(data)) - data <- as.matrix(data, ncol = 1) - - nsim <- dim(data)[1] - out <- list( data = data, - nsim = nsim, - varnames = varnames ) - - class(out) <- "Siid" - return(out) -} - -"is.Siid" <- function(x) -{ - if (inherits(x, "Siid")) - return(TRUE) - return(FALSE) -} - -#' @export -"as.Siid" <- function (x, ...) - UseMethod("as.Siid") - -#' @export -"as.Siid.default" <- function (x, ...) - if (is.Siid(x)) x else Siid(x) - - -#' @title Boxplot for Siid -#' @name boxplot.Siid -#' @description Boxplots with simultaenous error bars around all quantiles for iid data. -#' @usage \method{boxplot}{Siid}(x, ..., alpha = 0.05, thresh = 0.001, -#' quan.col = 'lightsteelblue3', opaq = .6, range = 1.5, -#' width = NULL, varwidth = FALSE, outline = TRUE, plot = TRUE, -#' border = par("fg"), col = 'white', ann = !add, -#' horizontal = FALSE, add = FALSE) -#' -#' @param x : a `Siid' class object -#' @param ... : arguments sent to boxplot -#' @param alpha : confidence level of simultaneous confidence intervals -#' @param thresh : numeric typically less than .005 for the accuracy of the simulteaneous procedure -#' @param quan.col : color for the quantile confidence intervals -#' @param opaq : opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque. -#' @param range : as defined for base \code{boxplot} -#' @param width : as defined for base \code{boxplot} -#' @param varwidth : as defined for base \code{boxplot} -#' @param outline : as defined for base \code{boxplot} -#' @param plot : logical indicating whether the plot is to be constructed -#' @param border : as defined for base \code{boxplot} -#' @param col : as defined for base \code{boxplot} -#' @param ann : as defined for base \code{boxplot} -#' @param horizontal : as defined for base \code{boxplot} -#' @param add : as defined for base \code{boxplot} -#' @return returns the base \code{boxplot} with simultaneous confidence intervals around -#' all quantiles -#' @examples -#' # Generating iid data -#' chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -#' siid.obj <- Siid(chain) -#' boxplot(siid.obj) -#' -#' @references -#' Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -#' “Assessing and Visualizing Simultaneous Simulation Error”, -#' Journal of Computational and Graphical Statistics, 2020. -#' -#' @export -"boxplot.Siid" <- function(x, ...,alpha = 0.05, thresh = 0.001, - quan.col = 'lightsteelblue3', opaq = .6, range = 1.5, width = NULL, varwidth = FALSE, - outline = TRUE, plot = TRUE, border = par("fg"), col = 'white', - ann = !add, horizontal = FALSE, add = FALSE) -{ - x <- as.Siid(x) - Q <- c(0.25, 0.50, 0.75) - notch <- FALSE - foo3 <- getCI(x, Q, alpha = alpha, thresh = thresh, mean = FALSE, iid = TRUE) - plot.boxx(x, dimn = length(x$data[1,]), CIs = foo3, - quan.color = adjustcolor(quan.col, alpha.f = opaq), - range = range, width = width, varwidth = varwidth, notch = notch, - outline = outline,plot = plot, border = border, col = col, - ann = ann, horizontal = horizontal, add = add,...) -} - - -#' @title Plot Siid -#' -#' @description Density plots with simultaenous error bars around means and quantiles -#' for iid data. -#' -#' -#' @name plot.Siid -#' @usage \method{plot}{Siid}(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, -#' rug = TRUE, plot = TRUE, mean = TRUE, border = NA, -#' mean.col = 'plum4', quan.col = 'lightsteelblue3', -#' opaq = 0.7, auto.layout = TRUE, -#' ask = dev.interactive(), ...) -#' @param x : a `Siid' class object -#' @param Q : vector of quantiles -#' @param alpha : confidence level of simultaneous confidence intervals -#' @param thresh : numeric typically less than .005 for the accuracy of the simulteaneous procedure -#' @param rug : logical indicating whether a rug plot is desired -#' @param plot : logical argument for is plots are to be returned -#' @param mean : logical argument whether the mean is to be plotted -#' @param border : whether a border is required for the simultaneous confidence intervals -#' @param mean.col : color for the mean confidence interval -#' @param quan.col : color for the quantile confidence intervals -#' @param opaq : opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque. -#' @param auto.layout : logical argument for an automatic layout of plots -#' @param ask : activating interactive plots -#' @param ... : arguments passed on to the \code{density} plot in base R -#' @return returns a plot of the univariate density estimates with simultaneous -#' confidence intervals wherever asked. If \code{plot == FALSE} a list of -#' estimates and simultaneous confidence intervals. -#' @examples -#' # Generating iid data -#' chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -#' siid.obj <- Siid(chain) -#' plot(siid.obj) -#' -#' @references -#' Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -#' “Assessing and Visualizing Simultaneous Simulation Error”, -#' Journal of Computational and Graphical Statistics, 2020. -#' -#' @export -"plot.Siid" <- function(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, rug = TRUE, - plot = TRUE, mean = TRUE, border = NA, mean.col = 'plum4', quan.col = 'lightsteelblue3', - opaq = 0.7, auto.layout = TRUE, ask = dev.interactive(), ...) -{ - x <- as.Siid(x) - out <- getCI(x, Q, alpha, thresh = thresh, iid = TRUE, mean = mean) - if(plot == TRUE) - { - plot.CIs(x, dimn = length(x$data[1,]), CIs = out, rug = rug, bord = border, - mean.color = adjustcolor(mean.col, alpha.f = opaq), - quan.color = adjustcolor(quan.col, alpha.f = opaq), - mean = mean, auto.layout = auto.layout, - ask = ask, ...) - } - invisible(out) -} - - - diff --git a/R/Smcmcclass.R b/R/Smcmcclass.R deleted file mode 100644 index 44e9316..0000000 --- a/R/Smcmcclass.R +++ /dev/null @@ -1,175 +0,0 @@ -## usethis namespace: start -#' @importFrom grDevices adjustcolor dev.interactive -#' @importFrom graphics boxplot par polygon segments boxplot.matrix -#' @importFrom stats cov density qnorm quantile ts -#' @importFrom mcmcse mcse.multi batchSize -#' @importFrom mvtnorm pmvnorm -## usethis namespace: end - -#' @title Smcmc class -#' -#' @description Smcmc class for simulated data using Markov chain Monte Carlo -#' -#' @name Smcmc -#' @aliases Smcmc as.Smcmc as.Smcmc.default is.mcmc -#' @usage Smcmc(data, batch.size = TRUE, stacked = TRUE, varnames = colnames(data)) -#' @param data : a list of MCMC output matrices each with `nsim` rows and `p` columns -#' @param batch.size : logical argument, if true, calculates the batch size appropriate for this Markov chain. Setting to TRUE saves time in future steps. -#' @param stacked : recommended to be `TRUE`. logical argument, if true, stores a carefully stacked version of the MCMC output for use later. -#' @param varnames : a character string equal to the number of columns in \code{data} -#' -#' @return an Smcmc class object -#' @examples -#' # Producing Markov chain -#' chain <- matrix(0, nrow = 1e3, ncol = 1) -#' chain[1,] <- 0 -#' err <- rnorm(1e3) -#' for(i in 2:1e3) -#' { -#' chain[i,] <- .3*chain[i-1,] + err[i] -#' } -#' smcmc.obj <- Smcmc(chain) -#' @export -Smcmc <- function(data, - batch.size = TRUE, - stacked = TRUE, - varnames = NULL) # make Smcmc object -{ - if(missing(data)) - stop("Data must be provided.") - - - if(!is.list(data)) - { - data = as.matrix(data) - data <- list(data) - }else - { - for(i in 1:length(data)) - { - data[[i]] = as.matrix(data[[i]]) - } - } - - nsim <- dim(data[[1]])[1] - if(is.null(varnames)) varnames <- colnames(data[[1]]) - - if(stacked == TRUE) - { - foo <- chain_stacker(data) - stacked.chain <- foo$stacked.data - - if(batch.size == TRUE) - { - size <- foo$b.size - } - else{ - size <- NULL - } - } - - out <- list( chains = data, - stacked = stacked.chain, - b.size = size, - nsim = nsim, - varnames = varnames) - - class(out) <- "Smcmc" - return(out) -} - -"is.Smcmc" <- function (x) -{ - if (inherits(x, "Smcmc")) - return(TRUE) - return(FALSE) -} - -#' @export -"as.Smcmc" <- function (x, ...) - UseMethod("as.Smcmc") - -#' @export -"as.Smcmc.default" <- function (x, ...) - if (is.Smcmc(x)) x else Smcmc(x) - - - - -#' @title density plot form Smcmc class -#' -#' @description Density plots with simultaenous error bars around means and quantiles -#' for MCMC data. The error bars account for the correlated nature of the process. -#' -#' -#' @name densityplot -#' @usage densityplot(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, iid = FALSE, -#' plot = TRUE, mean = TRUE, border = NA, mean.col = 'plum4', -#' quan.col = 'lightsteelblue3',rug = TRUE, opaq = 0.7, -#' auto.layout = TRUE, ask = dev.interactive(),...) -#' @param x : a `Smcmc' class object -#' @param Q : vector of quantiles -#' @param alpha : confidence level of simultaneous confidence intervals -#' @param thresh : numeric typically less than .005 for the accuracy of the simulteaneous procedure -#' @param iid : logical argument for constructing density plot for iid samples. Defaults to \code{FALSE} -#' @param plot : logical argument for is plots are to be returned -#' @param main : To add main heading -#' @param mean : logical argument whether the mean is to be plotted -#' @param border : whether a border is required for the simultaneous confidence intervals -#' @param mean.col : color for the mean confidence interval -#' @param quan.col : color for the quantile confidence intervals -#' @param rug : logical indicating whether a rug plot is desired -#' @param opaq : opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque. -#' @param auto.layout : logical argument for an automatic layout of plots -#' @param ask : activating inter active plots -#' @param ... : arguments passed on to the \code{density} plot in base R -#' @return returns a plot of the univariate density estimates with simultaneous -#' confidence intervals wherever asked. If \code{plot == FALSE} a list of -#' estimates and simultaneous confidence intervals. -#' @examples -#' # Producing Markov chain -#' chain <- matrix(0, ncol = 1, nrow = 1e3) -#' chain[1,] <- 0 -#' err <- rnorm(1e3) -#' for(i in 2:1e3) -#' { -#' chain[i,] <- .3*chain[i-1,] + err[i] -#' } -#' chain <- Smcmc(list(chain)) -#' densityplot(chain) -#' -#' @references -#' Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -#' “Assessing and Visualizing Simultaneous Simulation Error”, -#' Journal of Computational and Graphical Statistics, 2020. -#' -#' @export -"densityplot" <- function(x, - Q = c(0.1, 0.9), - alpha = 0.05, - thresh = 0.001, - main = NULL, - iid = FALSE, - plot = TRUE, - mean = TRUE, - border = NA, - mean.col = 'plum4', - quan.col = 'lightsteelblue3', - rug = FALSE, - opaq = 0.7, - auto.layout = TRUE, - ask = dev.interactive(), ...) -{ - - x <- as.Smcmc(x) - out <- getCI(x, Q, alpha, thresh = thresh, iid = iid, mean = mean) - if(plot == TRUE) - { - plot.CIs(x, dimn = length(x$stacked[1,]), CIs = out, bord = border, - mean.color = adjustcolor(mean.col, alpha.f = opaq), - quan.color = adjustcolor(quan.col, alpha.f = opaq), - mean = mean, auto.layout = auto.layout, rug = rug, - ask = ask,main = main, ...) - } - invisible(out) -} \ No newline at end of file diff --git a/R/export.R b/R/export.R deleted file mode 100644 index e2c689d..0000000 --- a/R/export.R +++ /dev/null @@ -1,696 +0,0 @@ -#' @title Add simultaneous confidence interval to existing plot. -#' -#' @description Adds simultaneous confidence intervals for quantiles and means to an existing plot. -#' -#' @name addCI -#' @aliases addCI -#' @usage addCI(x, CIs, component = 1, bord = NA, mean = TRUE, mean.color = 'plum4', -#' quan.color = 'lightsteelblue3', opaq = 0.7, ...) -#' @param x : a `Smcmc' class object -#' @param CIs : the output from the `getCI` function -#' @param component : numeric indicating which component to draw the confidence intervals for -#' @param bord : logical for whether a border is desired around the confidence intervals -#' @param mean : logical argument whether the mean is to be plotted -#' @param mean.color : color for the mean confidence interval -#' @param quan.color : color for the quantile confidence intervals -#' @param opaq : opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque. -#' @param ... : arguments passed on to the boundaries of the confidence intervals in `segments` -#' @return adds segments for confidence intervals into an already existing plot environment -#' -#' @examples -#' chain <- matrix(0, ncol = 1, nrow = 1e3) -#' chain[1,] <- 0 -#' err <- rnorm(1e3) -#' for(i in 2:1e3) -#' { -#' chain[i,] <- .3*chain[i-1,] + err[i] -#' } -#' chain <- Smcmc(list(chain)) -#' plot(density(chain$stacked[,1])) -#' CIs <- getCI(chain) -#' addCI(chain, CIs, component = 1) -#' @export -addCI <- function(x, - CIs, - component = 1, - bord = NA, - mean = TRUE, - mean.color = 'plum4', - quan.color = 'lightsteelblue3', - opaq = 0.7, ...) -{ - if(class(x) == "Smcmc") obj <- ts(x$stacked[, component]) - if(class(x) == "Siid") obj <- ts(x$data[, component]) - mean.color = adjustcolor(mean.color, alpha.f = opaq) - quan.color = adjustcolor(quan.color, alpha.f = opaq) - mn <- CIs$mean.est[component] - quans <- CIs$xi.q[ , component] - mcil = CIs$lower.ci.mean[component] - mciu = CIs$upper.ci.mean[component] - qcil = CIs$lower.ci.mat[, component] - qciu = CIs$upper.ci.mat[, component] - if(mean){ - dum1 <- density(obj, from = mcil, to = mciu) - polygon(c(mcil, dum1$x, mciu), c(0, dum1$y, 0), col = mean.color, border = bord ) - } - for(j in 1:length(quans)) - { - dum1 <- density(obj, from = qcil[j], to = qciu[j]) - polygon(c(qcil[j], dum1$x, qciu[j]), c(0, dum1$y, 0), col = quan.color, border = bord) - } - if(mean){ - segments(mn,0,mn, density(obj, from = mn, to = mn, n = 1 )$y,...) - } - for(j in 1:length(quans)) - { - segments(quans[j],0,quans[j], density(obj, from = quans[j], to = quans[j], n = 1 )$y,...) - } -} - - -#' @title Calculates simultaneous confidence intervals. -#' -#' @description Calculates simultaneous confidence intervals for means and -#' quantiles as indicated for the desired MCMC output -#' -#' @name getCI -#' @aliases getCI -#' @usage getCI(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, iid = FALSE, -#' mean = TRUE) -#' @param x : a `Smcmc' class object -#' @param Q : vector of quantiles -#' @param alpha : confidence levels of the simulatenous intervals -#' @param thresh : threshold for the optimization methodology that calculates the simultaneous CIs -#' @param iid : logical argument for constructing density plot for iid samples. Defaults to \code{FALSE} -#' @param mean : logical indicating whether mean is to be plotted -#' @return adds segments for confidence intervals into an already existing plot environment -#' -#' @examples -#' chain <- matrix(0, ncol = 1, nrow = 1e3) -#' chain[1,] <- 0 -#' err <- rnorm(1e3) -#' for(i in 2:1e3) -#' { -#' chain[i,] <- .3*chain[i-1,] + err[i] -#' } -#' chain <- Smcmc(list(chain)) -#' plot(density(chain$stacked[,1])) -#' CIs <- getCI(chain) -#' addCI(chain, CIs, component = 1) -#' -#' @references -#' Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -#' “Assessing and Visualizing Simultaneous Simulation Error”, -#' Journal of Computational and Graphical Statistics, 2020. -#' -#' @export -getCI <- function(x, - Q = c(0.1, 0.9), - alpha = 0.05, - thresh = 0.001, - iid = FALSE, - mean = TRUE) -{ - - if(class(x) == "Smcmc") - { - if(is.null(x$size)) { - b.size <- 0 - for (i in length(x$chains)) { - b.size <- b.size + batchSize(x$chains[[i]]) - } - b.final <- floor(b.size/length(x$chains)) - } - else b.size <- x$size - - x <- x$stacked - }else{ - if(class(x) == "Siid") - { - b.size <- 1 - x <- x$data - } - } - mq <- length(Q) - n <- dim(x)[1] - - # p1 is the dimension of g(x) - # p2 is defined this because p1+p2 will ncols in lambda and sigma - # v is the vector of all means and quantiles to be estimated - p1 <- length(x[1,]) - p2 <- mq*length(x[1,]) - theta.hat <- colMeans(x) #g bar - xi.q <- apply(x, 2, quantile, Q) - xi.q <- as.matrix(xi.q) - if(mq==1) xi.q <- t(xi.q) - #phi is the vector of all quantiles - phi <- rep(0, p2) - for(i in 1:mq) - { - phi[((i-1)*(p2/mq) + 1):(i*(p2/mq))] = xi.q[i,] - } - - fs <- rep(0, p2) - for(j in 1:mq) - { - for(i in 1:(p2/mq)) - { - fs[(j-1)*(p2/mq) + i] <- density(x[, i], from = xi.q[j, i], to = xi.q[j, i], n = 1 )$y - } - } - - I.flat <- rep(1, p1) - - #since p2 was m*dim(h(x)) - lower.ci.mat <- matrix(0, nrow = mq, ncol = p2/mq) - upper.ci.mat <- matrix(0, nrow = mq, ncol = p2/mq) - indis <- matrix(0,nrow = n,ncol = p2) - for(i in 1:mq) - { - - indi <- (apply(x, 1, Indicator, xi.q[i,])) - if(p2 > 1) - { - indi <- t(indi) - } - indis[,((i-1)*(p2/mq) + 1):(i*(p2/mq))] <- indi - } - if(mean == FALSE) Y <- indis else Y <- cbind(x, indis) - - if(iid == FALSE) suppressWarnings(sigma.mat <- mcse.multi(Y, size = b.size)$cov) else sigma.mat <- cov(Y) - - if(mean == FALSE) lambda <- 1/fs else (lambda <- 1/c(I.flat, fs)) - - ci.sigma.mat <- (t(t(sigma.mat)*lambda))*lambda - p <- p1 + p2 - if(mean == FALSE) p = p2 - - z1 <- qnorm(1 - alpha/2) - z2 <- qnorm(1 - alpha/(2*p)) - foo1 <- CIz(z1, p1, p2, theta.hat, phi,ci.sigma.mat, n, mean) - foo2 <- CIz(z2, p1, p2, theta.hat, phi,ci.sigma.mat, n, mean) - if(mean == FALSE) v <- phi else v <- c(theta.hat, phi) - - count <- 0 - prob1 <- pmvnorm(lower = foo1$lower.ci, upper = foo1$upper.ci, mean = v, sigma = (ci.sigma.mat/n))[1] - prob2 <- pmvnorm(lower = foo2$lower.ci, upper = foo2$upper.ci, mean = v, sigma = (ci.sigma.mat/n))[1] - - while(prob2 - prob1 > thresh) - { - count <- count + 1 - z.star <- (z1 + z2)/2 - foo.star <- CIz(z.star, p1, p2, theta.hat, phi, ci.sigma.mat, n, mean) - prob.star <- pmvnorm(lower = foo.star$lower.ci, upper = foo.star$upper.ci, mean = v, sigma = (ci.sigma.mat/n))[1] - if(prob.star > 1- alpha) - { - z2 <- z.star - prob2 <- prob.star - }else - { - z1 <- z.star - prob1 <- prob.star - } - if(abs(prob1 - (1 - alpha)) < thresh) - { - temp <- CIz(z1, p1, p2, theta.hat, phi,ci.sigma.mat, n, mean) - break - } - } - temp <- CIz(z1, p1, p2, theta.hat, phi,ci.sigma.mat, n, mean) - - for(i in 1:mq) - { - if(mean == FALSE) - { - lower.ci.mat[i, ] <- temp$lower.ci[((i-1)*(p2/mq)+1):(i*(p2/mq) )] - upper.ci.mat[i, ] <- temp$upper.ci[((i-1)*(p2/mq) +1):(i*(p2/mq) )] - } - else{ - lower.ci.mat[i, ] <- temp$lower.ci[((i-1)*(p2/mq) + p1 + 1):(i*(p2/mq) + p1)] - upper.ci.mat[i, ] <- temp$upper.ci[((i-1)*(p2/mq) + p1 + 1):(i*(p2/mq) + p1)] - } - } - - row.names(lower.ci.mat) <- Q - row.names(upper.ci.mat) <- Q - if(mean) - { - lower.mean <- temp$lower.ci[1:p1] - upper.mean <- temp$upper.ci[1:p1] - - foo3 <- list("lower.ci.mean" = lower.mean, "upper.ci.mean" = upper.mean, "lower.ci.mat" = lower.ci.mat, "upper.ci.mat" = upper.ci.mat, "mean.est" = theta.hat, "xi.q" = xi.q) - } else foo3 <- list("lower.ci.mat" = lower.ci.mat, "upper.ci.mat" = upper.ci.mat, "mean.est" = theta.hat, "xi.q" = xi.q) - - return(foo3) - -} -##### - - - -#' @title Add simultaneous confidence interval to existing boxplot -#' -#' @description Adds simultaneous confidence intervals for quantiles to an existing boxplot. -#' -#' @name boxCI -#' @aliases boxCI -#' @usage boxCI(x, CI, component = c(1), dimn = 1, -#' quan.color = 'lightsteelblue3', horizontal = FALSE) -#' @param x : a `Smcmc' class object -#' @param CI : the output from the `getCI` function with `iid = TRUE` -#' @param component : vector indicating which components to draw the confidence intervals for -#' @param dimn : numeric for how many components are being plotted -#' @param quan.color : color for the quantile confidence intervals -#' @param horizontal : logical for whether boxplots are horizontal -#' @return adds segments for confidence intervals into an already existing plot environment -#' -#' @examples -#' output <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -#' -#' @export -boxCI <- function(x, - CI, - component = c(1), - dimn = 1, - quan.color = 'lightsteelblue3', - horizontal = FALSE) -{ - quans = CI$xi.q - mn = CI$mean.est - quansi <- quans[, component] - qcil = CI$lower.ci.mat[, component] - qciu = CI$upper.ci.mat[, component] - i <- component - if(dimn == 1) i <- 1 - for(j in 1:length(quansi)) - { - if(horizontal==TRUE) { - polygon(c(qcil[j],qcil[j],qciu[j],qciu[j]), c(i-(0.2*min(dimn,2)),i+(0.2*min(dimn,2)),i+(0.2*min(dimn,2)), i-(0.2*min(dimn,2))), col = quan.color, border = FALSE) - }else { - polygon(c(i-(0.2*min(dimn,2)),i+(0.2*min(dimn,2)),i+(0.2*min(dimn,2)), i-(0.2*min(dimn,2))), c(qcil[j],qcil[j],qciu[j],qciu[j]), col = quan.color, border = FALSE) - } - } - for(j in 1:length(quansi)) - { - if(horizontal==TRUE) { - segments(quansi[j],i-(0.2*min(dimn,2)), quansi[j], i+(0.2*min(dimn,2))) - }else { - segments(i-(0.2*min(dimn,2)), quansi[j], i+(0.2*min(dimn,2)), quansi[j]) - } - - } -} - - - - - - - -#' @title ACF Plot for Markov chain Monte Carlo -#' -#' @description Autocorrelation function plots for MCMC data (including multiple chains) -#' -#' -#' @name acfplot -#' @usage acfplot(x,which = NULL, type = c("correlation", "covariance"), -#' plot= TRUE, lag.max = NULL,main, avg.col = "blue", chain.col = "red", -#' na.action = na.fail, auto.layout = TRUE, ask = dev.interactive()) -#' -#' @param x : an `Smcmc' class object or a list of Markov chains or a Markov chain matrix -#' @param which : a vector of integers indicating which components' ACF plots are needed. By default all components are drawn. -#' @param type : the kind of ACF plot: "correlation" or "covariance" -#' @param plot : TRUE if plots are required. If FALSE, raw values are returned -#' @param main : main heading of plot -#' @param lag.max : Maximum lag for the ACF plot -#' @param avg.col : color for the overall ACF of each component -#' @param chain.col : color for the ACF of the individual chains. -#' @param na.action : function to be called to handle missing values. ‘na.pass’ can be used. -#' @param auto.layout : logical argument for an automatic layout of plots -#' @param ask : activating interactive plots - - -#' @return returns the autocorrelation function plots of the Markov chains. Uses the -#' more accurate globally-centered ACFs. -#' @examples -#' # Producing Markov chain -#' chain <- matrix(0, ncol = 1, nrow = 1e3) -#' chain[1,] <- 0 -#' err <- rnorm(1e3) -#' for(i in 2:1e3) -#' { -#' chain[i,] <- .3*chain[i-1,] + err[i] -#' } -#' chain <- Smcmc(list(chain)) -#' acfplot(chain) -#' -#' @references -#' Agarwal, M., and Vats, D., “Globally-centered autocovariances in MCMC”, -#' arxiv - 2009.01799, 2020. -#' -#' @export - - - -acfplot <- function(x, - which = NULL, - type = c("correlation", "covariance", "partial"), - plot = TRUE, - main = NULL, - lag.max = NULL, - avgcol = "blue", - chain.col = "red", - na.action = na.fail, - auto.layout = TRUE, - ask = dev.interactive()) -{ - if(TRUE %in% (class(x) == "Smcmc")){x <- x$chains}else if(is.list(x)) - { - for(i in 1:length(x)) { x[[i]] = as.matrix(x[[i]]) } - }else if(is.vector(x)) - {2 - x <- as.matrix(x) - x <- list(x) - }else if(is.matrix(x)) - {x <- list(x)}else - {stop("x must be a matrix, list or an Smcmc object")} - - dimn <- dim(x[[1]]) - n <- dimn[1] - p <- dimn[2] - m <- length(x) - - if(m>10){stop("Maximum 10 chains are allowed")} - if (is.null(lag.max)) lag.max <- floor(10 * (log10(n)) ) - lag.max <- as.integer(min(lag.max, n - 1L)) - - lay <- par() - leg <- lay$mfrow[1]*lay$mfrow[2] - if(is.null(which)) - {np = p}else - {np = length(which)} - space = 0 - if(is.null(main)){par(oma = c(4,0,2,0))}else - {par(oma = c(4,0,3,0)) - space = 1.3} - axs = np-1 - if(np <= 4){axs = np-1}else {axs = np-2} - if(!is.null(which)){axs = 0} - if(is.null(which)){setLayout_trace(np) - dimen = 1:p} - else{dimen = which} - for(i in dimen) - { - xi <- matrix(data = 0, nrow = n, ncol = m) - for (j in 1:m) - { - xi[,j] <- x[[j]][,i] - } - xi <- xi - mean(xi) # global mean - - chain.acf <- list(length = m) - for(j in 1:m) - { - chain.acf[[j]] <- acf(xi[,j], type = type, plot = FALSE, demean = FALSE, lag.max = lag.max) - } - - avgf <- chain.acf[[1]] - k = 100 - l = -100 - avgf$acf <- 0 - for(j in 1:m) - { - avgf$acf <- avgf$acf + chain.acf[[j]]$acf - k = min(k,min(chain.acf[[j]]$acf)) - l = max(l,max(chain.acf[[j]]$acf)) - } - avgf$acf <- (avgf$acf)/m - - if(plot) - { - if(is.null(which)){par(mar = c(0, 4.1,0, 2.1))} - plot(avgf, ci = 0, lwd = .2, ylim = c( min(- 1.96/sqrt(n),min(avgf$acf),k), max(max(avgf$acf),l)), ylab = paste("ACF",i), - lty = 1, xaxt = if(i>axs) 's' else 'n',main = NA, xlab = NA) - - for(j in 1:m) - { - lines(0:lag.max, as.matrix(chain.acf[[j]]$acf), type = "l", col = adjustcolor(chain.col, alpha.f = .5), lwd = 1, lty = 1, yaxt = 'n', xaxt = 'n') - } - lines(0:lag.max, as.matrix(avgf$acf), type = "l", col = adjustcolor(avgcol, alpha.f = .6), lwd = 1, lty = 1, yaxt = 'n', xaxt = 'n') - if(is.null(which) && leg == 1){if(np%%2 != 0 && i == np-1 && np>4){mtext("Lag", side = 1, line = 2.3,cex = 0.8)}} - else if(!is.null(which)){mtext("Lag", side = 1, line = 2.3,cex = 0.8)} - } - - if(plot){ - if(!is.null(main)){mtext(main, side = 3, line = space,outer = TRUE, cex = 1.3)} - if(is.null(which)) - { - if(np <= 4){mtext("Lag", side = 1, line = 2.3,at =0.52, outer = TRUE, cex= 1)} - else{mtext("Lag", side = 1, line = 2.3,at = 0.3,outer = TRUE,cex = 0.8) - if(np %% 2 == 0){mtext("Lag", side = 1, line = 2.3,at = 0.8,outer = TRUE,cex = 0.8)}} - } - } - } - par(mfrow=c(1,1)) - par(mar = c(5.1, 4.1, 4.1, 2.1)) - par(fig = c(0, 1, 0 , 1)) - par(oma = c(0, 0, 0, 0)) - invisible(list("combined" = avgf, "individual" = chain.acf)) -} - - - - - - - -#' @title Trace Plot for Markov chain Monte Carlo -#' @description traceplot is a graphical tool commonly used in Bayesian statistics and Markov Chain Monte Carlo(MCMC) methods to diagnose the convergence and mixing properties of a chain. -#' @name traceplot -#' @usage traceplot(x, fast = TRUE,which = NULL, xlim = NULL, ylim = NULL, -#' xlab = "Iteration",ylab = NULL, auto.layout = TRUE, -#' alpha.f = 0.9, ask = dev.interactive(), -#' col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", -#' "springgreen2","skyblue3","khaki3", -#' "lightpink1","palegreen3","thistle3","aquamarine3","dimgrey", -#' "tomato3")) -#' -#'@param x : an `Smcmc' class object or a list of Markov chains or a Markov chain matrix or a vector. -#'@param fast : a Boolean argument that will be set to TRUE by default, to make plots faster. -#'@param which : if we want full size trace plots of specific dimensions of chain, we can pass a vector of respective dimension/components. -#'@param xlim : range of x-axis -#'@param ylim : range of y-axis -#'@param main : usual heading for plot -#'@param xlab : labels of x-axis -#'@param ylab : labels of y-axis(it should be a vector of length equal to dimension of chain) -#'@param auto.layout : logical argument for an automatic layout of plots -#'@param ask : activating interactive plots -#'@param col : color vector for multiple chains -#'@param alpha.f : To fix the opacity of lines as per user convenience, by default it is 0.9. -#' -#' @return Returns the Trace Plots of Markov Chain(s) -#' @examples -#' # example code -#' # Defining a function to produce Markov chain with dimension p and size n -#' MakeChain <- function(p, n , h = .5) -#' { -#' chain <- matrix(0, nrow = n,ncol = p) -#' for (i in 2:n) -#' { -#' prop <- chain[i-1, ] + rnorm(p, mean = 0, sd = h) -#' log.ratio <- sum(dnorm(prop, log = TRUE) - dnorm(chain[i-1, ], log = TRUE)) -#' if(log(runif(1)) < log.ratio) -#' {chain[i, ] <- prop} -#' else{chain[i, ] <- chain[i - 1, ]} -#' } -#' v = vector(length = p) -#' for(i in 1:p){v[i] = paste("Comp ",i)} -#' colnames(chain) = v -#' return(chain) -#' } -#' -#' -#' chain1 <- MakeChain(p=4,n=1000) -#' chain2 <- MakeChain(p=4,n=1000) -#' chain3 <- MakeChain(p=4,n=1000) -#' out <- Smcmc(list(chain1,chain2,chain3)) -#' traceplot(out) -#' -#' -#' chain1 <- MakeChain(p=6,n=1000) -#' chain2 <- MakeChain(p=6,n=1000) -#' chain3 <- MakeChain(p=6,n=1000) -#' out <- Smcmc(list(chain1,chain2,chain3)) -#' traceplot(out) - -#' -#' -#' -#' -#' @export -traceplot <- function(x, fast = TRUE, which = NULL, xlim = NULL, ylim = NULL,main = NULL, - xlab = "Iteration",ylab = NULL,alpha.f = 0.9, auto.layout = TRUE, - ask = dev.interactive(), - col = c("palevioletred3","steelblue3","tan3","lightsteelblue3", - "springgreen2","skyblue3","khaki3", - "lightpink1","palegreen3","thistle3","aquamarine3","dimgrey", - "tomato3")) -{ - ## Check for the Data Type - if(TRUE %in% (class(x) == "Smcmc")){x <- x$chains}else if(is.list(x)) - { - for(i in 1:length(x)) { x[[i]] = as.matrix(x[[i]]) } - }else if(is.vector(x)) - { - x <- as.matrix(x) - x <- list(x) - }else if(is.matrix(x)) - {x <- list(x)}else - {stop("x must be a matrix, list or an Smcmc object")} - - dimn <- dim(x[[1]]) - n <- dimn[1] - p <- dimn[2] - m <- length(x) - - if(m>5){stop("Maximum 5 chains are allowed")} - - if(is.null(ylab) | !is.vector(ylab) | length(ylab)!=p) - { - if(!is.null(ylab) && (!is.vector(ylab) | length(ylab) != p )) - {message("ylab should be NULL, or vector of length no. of dimension. Default value of ylab applied.")} - ylab <- vector(length = p) - for(i in 1:p) { ylab[i] <- paste("Comp ",i) } - } - - if(isTRUE(fast)) - { - if(n < 1e3){index = 1:n} - else - { - index <- c(1,n) - index <- c(index, sample(2:n-1,998,replace = FALSE)) - index <- sort(index) - } - }else{index = 1:n} - - xlim <- if (is.null(xlim)) c(0,n) else xlim - - maxi <- rep(-1e9,p) - mini <- rep(1e9,p) - vec <- vector(length = m) - for(j in 1:m) - { - if(is.null(ylim)){ - mat <- as.matrix(x[[j]]) - tempx <- rbind(apply(mat,2,max), maxi) - tempn <- rbind(apply(mat,2,min),mini) - maxi <- apply(tempx,2,max) - mini <- apply(tempn,2, min) - } - else{mini = rep(ylim[1],p) - maxi = rep(ylim[2],p)} - vec[j] <- paste("Chain",j) - } - - ## this if condition is for plotting traceplots of chains, - ## when which not equal to NULL and Dimension of chain exceeds 12. - if(!is.null(which)| p > 10) - { - if(p > 10 && is.null(which) ) - { - which <- 1:p - message("Number of dimension of chain(s) is more than 10. Series of plot returned.") - - } - lay <- par() - leg <- lay$mfrow[1]*lay$mfrow[2] - space = 0 - if(is.null(main)){par(oma = c(0,0,2,0))} - else{par(oma = c(0,0,2.5,0)) - space = 1.8} - for(i in which) - { - par(mar = c(4,4, 2,2)) - j <- 1 - ylim <- c(mini[i],maxi[i]) - plot(x = index, y = x[[1]][index,i], - xlab = xlab, ylab = ylab[i], - type = "n", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, - col = adjustcolor(col[1],alpha.f = alpha.f)) - while(j <= m) - { - lines( x= index, y=x[[j]][index,i], type = "l", - col = adjustcolor(col[j],alpha.f = alpha.f), - ylim = ylim, xlim = xlim, lwd = 1, lty = 1, - yaxt = 'n', xaxt = 'n') - j <- j + 1 - } - - ##Setting of legend - if(i%%leg == 0|i == which[length(which)]) - { - if(!is.null(main)){mtext(main, side = 3, line = 0.8,outer = TRUE, cex = 1.5)} - par(fig = c(0, 1, 0, 1), oma = c(0, 0, space, 0), mar = c(0, 0, 0, 0), new = TRUE) - plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') - legend("top",legend = vec, col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - horiz = TRUE,cex = 1 , seg.len= 1, bty = 'n') - if(is.null(main)){par(oma = c(0,0,2,0))} - else{par(oma = c(0,0,2.5,0)) - space = 1.8} - par(mar = c(4, 4, 2, 2)) - par(mfrow = lay$mfrow) - } - } - on.exit(par(ask = FALSE, mfrow = c(1,1))) - par(mar = c(5.1, 4.1, 4.1, 2.1)) - par(fig = c(0, 1, 0, 1)) - par(oma = c(0, 0, 0, 0)) - - } - else - { - space = 0 - if(is.null(main)){par(oma = c(3.5,0,2.5,0))} - else{par(oma = c(3.5,0,4,0)) - space = 1.3} - axs = p-1 - if(p <= 4){axs = p-1} - else {axs = p-2} - setLayout_trace(p) - for(i in 1:p) - { - j = 2 - par(mar = c(0, 4.1,0, 2.1)) - ylim <- c(mini[i],maxi[i]) - plot(x= index, y = x[[1]][index,i], xlab = if(i>axs) xlab else "" , ylab =ylab[i], - type = "l", lwd = 1, lty = 1, ylim = ylim, xlim = xlim, - col = adjustcolor(col[1],alpha.f = alpha.f), xaxt = if(i>axs) 's' else 'n') - while(j<=m) - { - lines(x= index, y=x[[j]][index,i], type = "l", - col = adjustcolor(col[j],alpha.f = alpha.f), - ylim = ylim, xlim = xlim, lwd = 1, lty = 1, - yaxt = 'n', xaxt = 'n') - j = j + 1 - } - if(p%%2 != 0 && i == p-1 && p>4){mtext("Iteration", side = 1, line = 2.3,cex = 0.7)} - } - if(!is.null(main)){mtext(main, side = 3, line = 2.3 ,outer = TRUE, cex = 1)} - if(p<=4){mtext("Iteration", side = 1, line = 2.3,at =0.52,cex = 0.7, outer = TRUE)} - else{mtext("Iteration", side = 1, line = 2.3,at = 0.3,cex = 0.7,outer = TRUE) - if(p%%2 == 0){mtext("Iteration", side = 1, line = 2.3,at = 0.8,cex = 0.7,outer = TRUE)}} - ##Setting of legend - par(fig = c(0, 1, 0, 1), oma = c(0, 0, space, 0), mar = c(0, 0, 0, 0), new = TRUE) - plot(0, 0, type = 'l', bty = 'n', xaxt = 'n', yaxt = 'n') - legend("top",legend = vec[1:m], col = col[1:m],lty = 1,lwd =2, xpd = TRUE, - horiz = TRUE,cex = 1.25, seg.len= 1, bty = 'n') - - - } - if(isFALSE(fast) && n > 10000){message("Chain size is very large and you choose to wait.")} - on.exit(par(ask = FALSE, mfrow = c(1,1))) - par(mar = c(5.1, 4.1, 4.1, 2.1)) - par(fig = c(0, 1, 0 , 1)) - par(oma = c(0, 0, 0, 0)) -} diff --git a/R/supp.R b/R/supp.R deleted file mode 100644 index 595529c..0000000 --- a/R/supp.R +++ /dev/null @@ -1,173 +0,0 @@ -## For simultaneous confidence intervals -Indicator <- function(x, ...) -{ - return(as.numeric(x > ... )) -} - -#since our goal is to optimize z, this function returns the Confidence interval -#for a particular z - -CIz <- function(z, p1 , p2, theta.hat, phi, ci.sigma.mat, n, mean = TRUE) -{ - se_ests <- sqrt(diag(ci.sigma.mat)/n) - - if (mean == FALSE) - { - lower.ci.p2 <- phi - z * se_ests - upper.ci.p2 <- phi + z * se_ests - return (list("lower.ci" = lower.ci.p2, "upper.ci" = upper.ci.p2)) - } - p <- p1 + p2 - - lower.ci.p1 <- theta.hat - z * se_ests[1:p1] - upper.ci.p1 <- theta.hat + z * se_ests[1:p1] - lower.ci.p2 <- phi - z * se_ests[(p1+1):p] - upper.ci.p2 <- phi + z * se_ests[(p1+1):p] - - return (list("lower.ci" = c(lower.ci.p1, lower.ci.p2), "upper.ci" = c(upper.ci.p1, upper.ci.p2))) -} - - - -plot.CIs <- function(x, - dimn, - CIs, - bord = NULL, - mean.color = 'plum4' , - quan.color = 'lightsteelblue3', - rug, - main, - mean = TRUE, - auto.layout, - ask, ...) -{ - if(class(x) == "Smcmc") - { - if(is.null(x$varnames)) - { - varnames <- as.character(1:dim(x$stacked)[2]) - }else{ - varnames <- x$varnames - } - data <- x$stacked - }else{ - if(class(x) == "Siid") - { - if(is.null(x$varnames)) - { - varnames <- as.character(1:dim(x$data)[2]) - }else{ - varnames <- x$varnames - } - data <- x$data - } - } - if(is.null(main)){par(oma = c(2,0,2,0))}else{par(oma = c(2,0,4,0))} - setLayout_trace(dimn) - for(i in 1:dimn) - { - ylab = paste("Density of ",i) - par(mar = c(1.2, 4.1,1.2, 2.1)) - beta = data[, i] - if (max(abs(beta - floor(beta))) == 0 || bndw(beta) == 0 || length(unique(beta)) == 1) - { - beta = as.vector(beta) - h = hist(beta, plot = F) # or hist(x,plot=FALSE) to avoid the plot of the histogram - h$density = h$counts/sum(h$counts) - plot(h,freq=FALSE,ylab=ylab, xlab = NA, main = NA, col = "lightgreen") - } - - else - { - beta = ts(beta) - plot(density(beta,...),main = NA, xlab = NA, ylab = ylab) - if(rug == TRUE) rug(beta, ticksize=0.03, side=1, lwd=0.5) - addCI(x, CIs, component = i, bord = bord, - mean.color = mean.color, quan.color = quan.color, - mean = mean) - } - } - if(!is.null(main)){mtext(main, side = 3, line = 1,outer = TRUE, cex = 1.5)} - on.exit(par(ask = FALSE,mfrow=c(1,1))) - par(mar = c(5.1, 4.1, 4.1, 2.1)) - par(fig = c(0, 1, 0 , 1)) - par(oma = c(0, 0, 0, 0)) - -} - - -## For boxplots -plot.boxx <- function(x, dimn, CIs, quan.color, range, width, varwidth, notch, outline, plot, border, - col, ann, horizontal, add,...) -{ - if(is.null(x$varnames)) - { - varnames <- as.character(1:dim(x$data)[2]) - }else{ - varnames <- x$varnames - } - boxplot.matrix(x$data, ..., range = range, width = width, varwidth = varwidth, notch = notch, outline = outline, - names=varnames, plot = plot, border = border, col = col, ann = ann, horizontal = horizontal, add = add) - for(i in 1:dimn) { - boxCI(x, CI = CIs, component = i,dimn = dimn, - quan.color = quan.color, horizontal = horizontal) - } -} - -chain_stacker <- function(x) { - m <- length(x) - - if(class(x) != "list") - stop("must be list of chains") - - if(is.null(x)) - stop("Chains are null") - - n <- as.integer(nrow(x[[1]])) - p <- as.integer(ncol(x[[1]])) - - b.final <- floor(mean(sapply(x, batchSize))) # mean batch size - - a <- floor(n/b.final) - ab <- a*b.final - trash <- n-ab - big.chain <- matrix(0,ncol = p, nrow = ab*m) - colnames(big.chain) <- colnames(x[[1]]) - if(ab != n) - { - for (i in 1:m) { - big.chain[((i-1)*ab+1):(i*ab),] <- x[[i]][-(1:trash),] - } - }else{ - big.chain <- Reduce("rbind", x) - } - return(list("b.size" = b.final, "stacked.data" = big.chain)) -} - - -setLayout_trace <- function(p, ask = FALSE) -{ - if(p <= 4) - { - mfrow <- c(p,1) - } - else if(p%%2 != 0) - { - mfrow = c((p+1)/2,2) - } - - else - { - mfrow = c(p/2,2) - } - par(ask = FALSE, mfrow = mfrow) - k = list(ask,mfrow) - names(k) = c("ask","mfrow") - return(k) -} - - -bndw <- function(x) { - x <- x[!is.na(as.vector(x))] - return(1.06 * min(sd(x), IQR(x)/1.34) * length(x)^-0.2) -} From bc6aa8eea6a298ebd43d892ba360db869f46612f Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Thu, 29 Jun 2023 18:02:48 +0530 Subject: [PATCH 045/109] Update NAMESPACE --- NAMESPACE | 1 + 1 file changed, 1 insertion(+) diff --git a/NAMESPACE b/NAMESPACE index 587a3b5..5bd08b8 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -4,6 +4,7 @@ S3method(as.Siid,default) S3method(as.Smcmc,default) S3method(boxplot,Siid) S3method(plot,Siid) +S3method(plot,Smcmc) export(Siid) export(Smcmc) export(acfplot) From e8dd592c7101edec393734a674381d1860ba21ea Mon Sep 17 00:00:00 2001 From: Siddharth Pathak <110186062+SiddharthanilPathak@users.noreply.github.com> Date: Thu, 29 Jun 2023 18:21:46 +0530 Subject: [PATCH 046/109] Delete SimTools.Rcheck directory --- .../00_pkg_src/SimTools/DESCRIPTION | 16 - SimTools.Rcheck/00_pkg_src/SimTools/NAMESPACE | 29 - .../00_pkg_src/SimTools/R/Siidclass.R | 167 ---- .../00_pkg_src/SimTools/R/Smcmcclass.R | 165 ---- .../00_pkg_src/SimTools/R/export.R | 296 ------- SimTools.Rcheck/00_pkg_src/SimTools/R/supp.R | 207 ----- SimTools.Rcheck/00_pkg_src/SimTools/README.md | 27 - .../00_pkg_src/SimTools/SimTools_1.0-0.tar.gz | Bin 417890 -> 0 bytes .../00_pkg_src/SimTools/man/Siid.Rd | 28 - .../00_pkg_src/SimTools/man/Smcmc.Rd | 37 - .../00_pkg_src/SimTools/man/addCI.Rd | 47 -- .../00_pkg_src/SimTools/man/boxCI.Rd | 32 - .../00_pkg_src/SimTools/man/boxplot.Siid.Rd | 64 -- .../00_pkg_src/SimTools/man/getCI.Rd | 48 -- .../00_pkg_src/SimTools/man/plot.Siid.Rd | 62 -- .../00_pkg_src/SimTools/man/plot.Smcmc.Rd | 69 -- SimTools.Rcheck/00_pkg_src/SimTools/runme.R | 170 ---- SimTools.Rcheck/00check.log | 62 -- SimTools.Rcheck/00install.out | 11 - SimTools.Rcheck/R_check_bin/R | 2 - SimTools.Rcheck/R_check_bin/Rscript | 2 - SimTools.Rcheck/Rdlatex.log | 546 ------------ SimTools.Rcheck/SimTools-Ex.R | 234 ------ SimTools.Rcheck/SimTools-Ex.Rout | 256 ------ SimTools.Rcheck/SimTools-Ex.pdf | Bin 93991 -> 0 bytes SimTools.Rcheck/SimTools-Ex.timings | 9 - SimTools.Rcheck/SimTools-manual.log | 793 ------------------ SimTools.Rcheck/SimTools-manual.pdf | Bin 83778 -> 0 bytes SimTools.Rcheck/SimTools/DESCRIPTION | 17 - SimTools.Rcheck/SimTools/INDEX | 10 - SimTools.Rcheck/SimTools/Meta/Rd.rds | Bin 426 -> 0 bytes SimTools.Rcheck/SimTools/Meta/features.rds | Bin 123 -> 0 bytes SimTools.Rcheck/SimTools/Meta/hsearch.rds | Bin 451 -> 0 bytes SimTools.Rcheck/SimTools/Meta/links.rds | Bin 224 -> 0 bytes SimTools.Rcheck/SimTools/Meta/nsInfo.rds | Bin 426 -> 0 bytes SimTools.Rcheck/SimTools/Meta/package.rds | Bin 726 -> 0 bytes SimTools.Rcheck/SimTools/NAMESPACE | 29 - SimTools.Rcheck/SimTools/R/SimTools | 27 - SimTools.Rcheck/SimTools/R/SimTools.rdb | Bin 25413 -> 0 bytes SimTools.Rcheck/SimTools/R/SimTools.rdx | Bin 505 -> 0 bytes SimTools.Rcheck/SimTools/help/AnIndex | 14 - SimTools.Rcheck/SimTools/help/SimTools.rdb | Bin 18186 -> 0 bytes SimTools.Rcheck/SimTools/help/SimTools.rdx | Bin 312 -> 0 bytes SimTools.Rcheck/SimTools/help/aliases.rds | Bin 168 -> 0 bytes SimTools.Rcheck/SimTools/help/paths.rds | Bin 201 -> 0 bytes SimTools.Rcheck/SimTools/html/00Index.html | 52 -- SimTools.Rcheck/SimTools/html/R.css | 97 --- 47 files changed, 3625 deletions(-) delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/DESCRIPTION delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/NAMESPACE delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/R/Siidclass.R delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/R/Smcmcclass.R delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/R/export.R delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/R/supp.R delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/README.md delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/SimTools_1.0-0.tar.gz delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/man/Siid.Rd delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/man/Smcmc.Rd delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/man/addCI.Rd delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/man/boxCI.Rd delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/man/boxplot.Siid.Rd delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/man/getCI.Rd delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/man/plot.Siid.Rd delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/man/plot.Smcmc.Rd delete mode 100644 SimTools.Rcheck/00_pkg_src/SimTools/runme.R delete mode 100644 SimTools.Rcheck/00check.log delete mode 100644 SimTools.Rcheck/00install.out delete mode 100755 SimTools.Rcheck/R_check_bin/R delete mode 100755 SimTools.Rcheck/R_check_bin/Rscript delete mode 100644 SimTools.Rcheck/Rdlatex.log delete mode 100644 SimTools.Rcheck/SimTools-Ex.R delete mode 100644 SimTools.Rcheck/SimTools-Ex.Rout delete mode 100644 SimTools.Rcheck/SimTools-Ex.pdf delete mode 100644 SimTools.Rcheck/SimTools-Ex.timings delete mode 100644 SimTools.Rcheck/SimTools-manual.log delete mode 100644 SimTools.Rcheck/SimTools-manual.pdf delete mode 100644 SimTools.Rcheck/SimTools/DESCRIPTION delete mode 100644 SimTools.Rcheck/SimTools/INDEX delete mode 100644 SimTools.Rcheck/SimTools/Meta/Rd.rds delete mode 100644 SimTools.Rcheck/SimTools/Meta/features.rds delete mode 100644 SimTools.Rcheck/SimTools/Meta/hsearch.rds delete mode 100644 SimTools.Rcheck/SimTools/Meta/links.rds delete mode 100644 SimTools.Rcheck/SimTools/Meta/nsInfo.rds delete mode 100644 SimTools.Rcheck/SimTools/Meta/package.rds delete mode 100644 SimTools.Rcheck/SimTools/NAMESPACE delete mode 100644 SimTools.Rcheck/SimTools/R/SimTools delete mode 100644 SimTools.Rcheck/SimTools/R/SimTools.rdb delete mode 100644 SimTools.Rcheck/SimTools/R/SimTools.rdx delete mode 100644 SimTools.Rcheck/SimTools/help/AnIndex delete mode 100644 SimTools.Rcheck/SimTools/help/SimTools.rdb delete mode 100644 SimTools.Rcheck/SimTools/help/SimTools.rdx delete mode 100644 SimTools.Rcheck/SimTools/help/aliases.rds delete mode 100644 SimTools.Rcheck/SimTools/help/paths.rds delete mode 100644 SimTools.Rcheck/SimTools/html/00Index.html delete mode 100644 SimTools.Rcheck/SimTools/html/R.css diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/DESCRIPTION b/SimTools.Rcheck/00_pkg_src/SimTools/DESCRIPTION deleted file mode 100644 index 532bb4f..0000000 --- a/SimTools.Rcheck/00_pkg_src/SimTools/DESCRIPTION +++ /dev/null @@ -1,16 +0,0 @@ -Package: SimTools -Version: 1.0-0 -Date: 2021-02-24 -Title: Toolkit for Simulation Output Including Monte Carlo and MCMC -Author: Dootika Vats , - James M. Flegal , - Galin Jones , - Gunjan Jalori. -Maintainer: Dootika Vats -Imports: mcmcse, mvtnorm -Description: Toolkit for simulation output including Monte Carlo and Markov chain Monte Carlo. Tools for reliable visualisations are available, and support for multiple chain MCMC is integrated. -License: GPL (>= 2) -Encoding: UTF-8 -RoxygenNote: 7.1.1 -NeedsCompilation: no -Packaged: 2021-02-24 11:45:27 UTC; Dootika diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/NAMESPACE b/SimTools.Rcheck/00_pkg_src/SimTools/NAMESPACE deleted file mode 100644 index 4e12d24..0000000 --- a/SimTools.Rcheck/00_pkg_src/SimTools/NAMESPACE +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by roxygen2: do not edit by hand - -S3method(as.Siid,default) -S3method(as.Smcmc,default) -S3method(boxplot,Siid) -S3method(plot,Siid) -S3method(plot,Smcmc) -export(Siid) -export(Smcmc) -export(addCI) -export(as.Siid) -export(as.Smcmc) -export(boxCI) -export(getCI) -importFrom(grDevices,adjustcolor) -importFrom(grDevices,dev.interactive) -importFrom(graphics,boxplot) -importFrom(graphics,boxplot.matrix) -importFrom(graphics,par) -importFrom(graphics,polygon) -importFrom(graphics,segments) -importFrom(mcmcse,batchSize) -importFrom(mcmcse,mcse.multi) -importFrom(mvtnorm,pmvnorm) -importFrom(stats,cov) -importFrom(stats,density) -importFrom(stats,qnorm) -importFrom(stats,quantile) -importFrom(stats,ts) diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/R/Siidclass.R b/SimTools.Rcheck/00_pkg_src/SimTools/R/Siidclass.R deleted file mode 100644 index 0475477..0000000 --- a/SimTools.Rcheck/00_pkg_src/SimTools/R/Siidclass.R +++ /dev/null @@ -1,167 +0,0 @@ -#' @title Siid class -#' -#' @description Class for independent and identically distributed (iid) samples -#' -#' @name Siid -#' @aliases Siid as.Siid as.Siid.default is.iid -#' @usage Siid(data, varnames = colnames(data)) -#' @param data : an iid output matrix with nsim rows and p columns -#' @param varnames : a character string equal to the number of columns in \code{data} -#' -#' @return an Siid class object -#' @examples -#' # Generating iid data -#' chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -#' siid.obj <- Siid(chain) -#' -#' @export -"Siid" <- function(data, - varnames = colnames(data)) # make Siid object -{ - if(missing(data)) - stop("Data must be provided.") - - if(is.vector(data)) - data <- as.matrix(data, ncol = 1) - - nsim <- dim(data)[1] - out <- list( data = data, - nsim = nsim, - varnames = varnames ) - - class(out) <- "Siid" - return(out) -} - -"is.Siid" <- function(x) -{ - if (inherits(x, "Siid")) - return(TRUE) - return(FALSE) -} - -#' @export -"as.Siid" <- function (x, ...) - UseMethod("as.Siid") - -#' @export -"as.Siid.default" <- function (x, ...) - if (is.Siid(x)) x else Siid(x) - - -#' @title Boxplot for Siid -#' @name boxplot.Siid -#' @description Boxplots with simultaenous error bars around all quantiles for iid data. -#' @usage \method{boxplot}{Siid}(x, ..., alpha = 0.05, thresh = 0.001, -#' quan.col = 'lightsteelblue3', opaq = .6, range = 1.5, -#' width = NULL, varwidth = FALSE, outline = TRUE, plot = TRUE, -#' border = par("fg"), col = 'white', ann = !add, -#' horizontal = FALSE, add = FALSE) -#' -#' @param x : a `Siid' class object -#' @param ... : arguments sent to boxplot -#' @param alpha : confidence level of simultaneous confidence intervals -#' @param thresh : numeric typically less than .005 for the accuracy of the simulteaneous procedure -#' @param quan.col : color for the quantile confidence intervals -#' @param opaq : opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque. -#' @param range : as defined for base \code{boxplot} -#' @param width : as defined for base \code{boxplot} -#' @param varwidth : as defined for base \code{boxplot} -#' @param outline : as defined for base \code{boxplot} -#' @param plot : logical indicating whether the plot is to be constructed -#' @param border : as defined for base \code{boxplot} -#' @param col : as defined for base \code{boxplot} -#' @param ann : as defined for base \code{boxplot} -#' @param horizontal : as defined for base \code{boxplot} -#' @param add : as defined for base \code{boxplot} -#' @return returns the base \code{boxplot} with simultaneous confidence intervals around -#' all quantiles -#' @examples -#' # Generating iid data -#' chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -#' siid.obj <- Siid(chain) -#' boxplot(siid.obj) -#' -#' @references -#' Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -#' “Assessing and Visualizing Simultaneous Simulation Error”, -#' Journal of Computational and Graphical Statistics, 2020. -#' -#' @export -"boxplot.Siid" <- function(x, ...,alpha = 0.05, thresh = 0.001, - quan.col = 'lightsteelblue3', opaq = .6, range = 1.5, width = NULL, varwidth = FALSE, - outline = TRUE, plot = TRUE, border = par("fg"), col = 'white', - ann = !add, horizontal = FALSE, add = FALSE) -{ - x <- as.Siid(x) - Q <- c(0.25, 0.50, 0.75) - notch <- FALSE - foo3 <- getCI(x, Q, alpha = alpha, thresh = thresh, mean = FALSE, iid = TRUE) - plot.boxx(x, dimn = length(x$data[1,]), CIs = foo3, - quan.color = adjustcolor(quan.col, alpha.f = opaq), - range = range, width = width, varwidth = varwidth, notch = notch, - outline = outline,plot = plot, border = border, col = col, - ann = ann, horizontal = horizontal, add = add,...) -} - - -#' @title Plot Siid -#' -#' @description Density plots with simultaenous error bars around means and quantiles -#' for iid data. -#' -#' -#' @name plot.Siid -#' @usage \method{plot}{Siid}(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, -#' rug = TRUE, plot = TRUE, mean = TRUE, border = NA, -#' mean.col = 'plum4', quan.col = 'lightsteelblue3', -#' opaq = 0.7, auto.layout = TRUE, -#' ask = dev.interactive(), ...) -#' @param x : a `Siid' class object -#' @param Q : vector of quantiles -#' @param alpha : confidence level of simultaneous confidence intervals -#' @param thresh : numeric typically less than .005 for the accuracy of the simulteaneous procedure -#' @param rug : logical indicating whether a rug plot is desired -#' @param plot : logical argument for is plots are to be returned -#' @param mean : logical argument whether the mean is to be plotted -#' @param border : whether a border is required for the simultaneous confidence intervals -#' @param mean.col : color for the mean confidence interval -#' @param quan.col : color for the quantile confidence intervals -#' @param opaq : opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque. -#' @param auto.layout : logical argument for an automatic layout of plots -#' @param ask : activating interactive plots -#' @param ... : arguments passed on to the \code{density} plot in base R -#' @return returns a plot of the univariate density estimates with simultaneous -#' confidence intervals wherever asked. If \code{plot == FALSE} a list of -#' estimates and simultaneous confidence intervals. -#' @examples -#' # Generating iid data -#' chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -#' siid.obj <- Siid(chain) -#' plot(siid.obj) -#' -#' @references -#' Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -#' “Assessing and Visualizing Simultaneous Simulation Error”, -#' Journal of Computational and Graphical Statistics, 2020. -#' -#' @export -"plot.Siid" <- function(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, rug = TRUE, - plot = TRUE, mean = TRUE, border = NA, mean.col = 'plum4', quan.col = 'lightsteelblue3', - opaq = 0.7, auto.layout = TRUE, ask = dev.interactive(), ...) -{ - x <- as.Siid(x) - out <- getCI(x, Q, alpha, thresh = thresh, iid = TRUE, mean = mean) - if(plot == TRUE) - { - plot.CIs(x, dimn = length(x$data[1,]), CIs = out, rug = rug, bord = border, - mean.color = adjustcolor(mean.col, alpha.f = opaq), - quan.color = adjustcolor(quan.col, alpha.f = opaq), - mean = mean, auto.layout = auto.layout, - ask = ask, ...) - } - invisible(out) -} - - - diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/R/Smcmcclass.R b/SimTools.Rcheck/00_pkg_src/SimTools/R/Smcmcclass.R deleted file mode 100644 index 1410083..0000000 --- a/SimTools.Rcheck/00_pkg_src/SimTools/R/Smcmcclass.R +++ /dev/null @@ -1,165 +0,0 @@ -## usethis namespace: start -#' @importFrom grDevices adjustcolor dev.interactive -#' @importFrom graphics boxplot par polygon segments boxplot.matrix -#' @importFrom stats cov density qnorm quantile ts -#' @importFrom mcmcse mcse.multi batchSize -#' @importFrom mvtnorm pmvnorm -## usethis namespace: end - -#' @title Smcmc class -#' -#' @description Smcmc class for simulated data using Markov chain Monte Carlo -#' -#' @name Smcmc -#' @aliases Smcmc as.Smcmc as.Smcmc.default is.mcmc -#' @usage Smcmc(data, batch.size = TRUE, stacked = TRUE, varnames = colnames(data)) -#' @param data : a list of MCMC output matrices each with `nsim` rows and `p` columns -#' @param batch.size : logical argument, if true, calculates the batch size appropriate for this Markov chain. Setting to TRUE saves time in future steps. -#' @param stacked : recommended to be `TRUE`. logical argument, if true, stores a carefully stacked version of the MCMC output for use later. -#' @param varnames : a character string equal to the number of columns in \code{data} -#' -#' @return an Smcmc class object -#' @examples -#' # Producing Markov chain -#' chain <- matrix(0, nrow = 1e3, ncol = 1) -#' chain[1,] <- 0 -#' err <- rnorm(1e3) -#' for(i in 2:1e3) -#' { -#' chain[i,] <- .3*chain[i-1,] + err[i] -#' } -#' smcmc.obj <- Smcmc(chain) -#' @export -"Smcmc" <- function(data, - batch.size = TRUE, - stacked = TRUE, - varnames = colnames(data)) # make Smcmc object -{ - if(missing(data)) - stop("Data must be provided.") - - if(!is.list(data)) - data <- list(data) - - nsim <- dim(data[[1]])[1] - - if(stacked == TRUE) - { - foo <- chain_stacker(data) - stacked.chain <- foo$stacked.data - - if(batch.size) - { - size <- foo$b.size - }else{ - size <- NULL - } - } - - out <- list( chains = data, - stacked = stacked.chain, - b.size = size, - nsim = nsim, - varnames = varnames ) - - class(out) <- "Smcmc" - return(out) -} - -"is.Smcmc" <- function (x) -{ - if (inherits(x, "Smcmc")) - return(TRUE) - return(FALSE) -} - -#' @export -"as.Smcmc" <- function (x, ...) - UseMethod("as.Smcmc") - -#' @export -"as.Smcmc.default" <- function (x, ...) - if (is.Smcmc(x)) x else Smcmc(x) - - - - -#' @title Plot Smcmc -#' -#' @description Density plots with simultaenous error bars around means and quantiles -#' for MCMC data. The error bars account for the correlated nature of the process. -#' -#' -#' @name plot.Smcmc -#' @usage \method{plot}{Smcmc}(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, iid = FALSE, -#' plot = TRUE, mean = TRUE, border = NA, mean.col = 'plum4', -#' quan.col = 'lightsteelblue3',rug = TRUE, opaq = 0.7, -#' auto.layout = TRUE, ask = dev.interactive(),...) -#' @param x : a `Smcmc' class object -#' @param Q : vector of quantiles -#' @param alpha : confidence level of simultaneous confidence intervals -#' @param thresh : numeric typically less than .005 for the accuracy of the simulteaneous procedure -#' @param iid : logical argument for constructing density plot for iid samples. Defaults to \code{FALSE} -#' @param plot : logical argument for is plots are to be returned -#' @param mean : logical argument whether the mean is to be plotted -#' @param border : whether a border is required for the simultaneous confidence intervals -#' @param mean.col : color for the mean confidence interval -#' @param quan.col : color for the quantile confidence intervals -#' @param rug : logical indicating whether a rug plot is desired -#' @param opaq : opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque. -#' @param auto.layout : logical argument for an automatic layout of plots -#' @param ask : activating interactive plots -#' @param ... : arguments passed on to the \code{density} plot in base R -#' @return returns a plot of the univariate density estimates with simultaneous -#' confidence intervals wherever asked. If \code{plot == FALSE} a list of -#' estimates and simultaneous confidence intervals. -#' @examples -#' # Producing Markov chain -#' chain <- matrix(0, ncol = 1, nrow = 1e3) -#' chain[1,] <- 0 -#' err <- rnorm(1e3) -#' for(i in 2:1e3) -#' { -#' chain[i,] <- .3*chain[i-1,] + err[i] -#' } -#' chain <- Smcmc(list(chain)) -#' plot(chain) -#' -#' @references -#' Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -#' “Assessing and Visualizing Simultaneous Simulation Error”, -#' Journal of Computational and Graphical Statistics, 2020. -#' -#' @export -"plot.Smcmc" <- function(x, - Q = c(0.1, 0.9), - alpha = 0.05, - thresh = 0.001, - iid = FALSE, - plot = TRUE, - mean = TRUE, - border = NA, - mean.col = 'plum4', - quan.col = 'lightsteelblue3', - rug = TRUE, - opaq = 0.7, - auto.layout = TRUE, - ask = dev.interactive(), ...) -{ - - x <- as.Smcmc(x) - out <- getCI(x, Q, alpha, thresh = thresh, iid = iid, mean = mean) - dat <- x$stacked - if(plot == TRUE) - { - plot.CIs(x, dimn = length(dat[1,]), CIs = out, bord = border, - mean.color = adjustcolor(mean.col, alpha.f = opaq), - quan.color = adjustcolor(quan.col, alpha.f = opaq), - mean = mean, auto.layout = auto.layout, rug = rug, - ask = ask)# , ...) - } - invisible(out) -} - - - diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/R/export.R b/SimTools.Rcheck/00_pkg_src/SimTools/R/export.R deleted file mode 100644 index 69ee740..0000000 --- a/SimTools.Rcheck/00_pkg_src/SimTools/R/export.R +++ /dev/null @@ -1,296 +0,0 @@ -#' @title Add simultaneous confidence interval to existing plot. -#' -#' @description Adds simultaneous confidence intervals for quantiles and means to an existing plot. -#' -#' @name addCI -#' @aliases addCI -#' @usage addCI(x, CIs, component = 1, bord = NA, mean = TRUE, mean.color = 'plum4', -#' quan.color = 'lightsteelblue3', opaq = 0.7, ...) -#' @param x : a `Smcmc' class object -#' @param CIs : the output from the `getCI` function -#' @param component : numeric indicating which component to draw the confidence intervals for -#' @param bord : logical for whether a border is desired around the confidence intervals -#' @param mean : logical argument whether the mean is to be plotted -#' @param mean.color : color for the mean confidence interval -#' @param quan.color : color for the quantile confidence intervals -#' @param opaq : opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque. -#' @param ... : arguments passed on to the boundaries of the confidence intervals in `segments` -#' @return adds segments for confidence intervals into an already existing plot environment -#' -#' @examples -#' chain <- matrix(0, ncol = 1, nrow = 1e3) -#' chain[1,] <- 0 -#' err <- rnorm(1e3) -#' for(i in 2:1e3) -#' { -#' chain[i,] <- .3*chain[i-1,] + err[i] -#' } -#' chain <- Smcmc(list(chain)) -#' plot(density(chain$stacked[,1])) -#' CIs <- getCI(chain) -#' addCI(chain, CIs, component = 1) -#' @export -addCI <- function(x, - CIs, - component = 1, - bord = NA, - mean = TRUE, - mean.color = 'plum4', - quan.color = 'lightsteelblue3', - opaq = 0.7, ...) -{ - if(class(x) == "Smcmc") obj <- ts(x$stacked[, component]) - if(class(x) == "Siid") obj <- ts(x$data[, component]) - mean.color = adjustcolor(mean.color, alpha.f = opaq) - quan.color = adjustcolor(quan.color, alpha.f = opaq) - mn <- CIs$mean.est[component] - quans <- CIs$xi.q[ , component] - mcil = CIs$lower.ci.mean[component] - mciu = CIs$upper.ci.mean[component] - qcil = CIs$lower.ci.mat[, component] - qciu = CIs$upper.ci.mat[, component] - if(mean){ - dum1 <- density(obj, from = mcil, to = mciu) - polygon(c(mcil, dum1$x, mciu), c(0, dum1$y, 0), col = mean.color, border = bord ) - } - for(j in 1:length(quans)) - { - dum1 <- density(obj, from = qcil[j], to = qciu[j]) - polygon(c(qcil[j], dum1$x, qciu[j]), c(0, dum1$y, 0), col = quan.color, border = bord) - } - if(mean){ - segments(mn,0,mn, density(obj, from = mn, to = mn, n = 1 )$y,...) - } - for(j in 1:length(quans)) - { - segments(quans[j],0,quans[j], density(obj, from = quans[j], to = quans[j], n = 1 )$y,...) - } -} - - -#' @title Calculates simultaneous confidence intervals. -#' -#' @description Calculates simultaneous confidence intervals for means and -#' quantiles as indicated for the desired MCMC output -#' -#' @name getCI -#' @aliases getCI -#' @usage getCI(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, iid = FALSE, -#' mean = TRUE) -#' @param x : a `Smcmc' class object -#' @param Q : vector of quantiles -#' @param alpha : confidence levels of the simulatenous intervals -#' @param thresh : threshold for the optimization methodology that calculates the simultaneous CIs -#' @param iid : logical argument for constructing density plot for iid samples. Defaults to \code{FALSE} -#' @param mean : logical indicating whether mean is to be plotted -#' @return adds segments for confidence intervals into an already existing plot environment -#' -#' @examples -#' chain <- matrix(0, ncol = 1, nrow = 1e3) -#' chain[1,] <- 0 -#' err <- rnorm(1e3) -#' for(i in 2:1e3) -#' { -#' chain[i,] <- .3*chain[i-1,] + err[i] -#' } -#' chain <- Smcmc(list(chain)) -#' plot(density(chain$stacked[,1])) -#' CIs <- getCI(chain) -#' addCI(chain, CIs, component = 1) -#' -#' @references -#' Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -#' “Assessing and Visualizing Simultaneous Simulation Error”, -#' Journal of Computational and Graphical Statistics, 2020. -#' -#' @export -getCI <- function(x, - Q = c(0.1, 0.9), - alpha = 0.05, - thresh = 0.001, - iid = FALSE, - mean = TRUE) -{ - - if(class(x) == "Smcmc") - { - if(is.null(x$size)) - b.size <- batchSize(x$stacked) # error here, fix this - else b.size <- x$size - - x <- x$stacked - }else{ - if(class(x) == "Siid") - { - b.size <- 1 - x <- x$data - } - } - mq <- length(Q) - n <- dim(x)[1] - - # p1 is the dimension of g(x) - # p2 is defined this because p1+p2 will ncols in lambda and sigma - # v is the vector of all means and quantiles to be estimated - p1 <- length(x[1,]) - p2 <- mq*length(x[1,]) - theta.hat <- colMeans(x) #g bar - xi.q <- apply(x, 2, quantile, Q) - xi.q <- as.matrix(xi.q) - if(mq==1) xi.q <- t(xi.q) - #phi is the vector of all quantiles - phi <- rep(0, p2) - for(i in 1:mq) - { - phi[((i-1)*(p2/mq) + 1):(i*(p2/mq))] = xi.q[i,] - } - - fs <- rep(0, p2) - for(j in 1:mq) - { - for(i in 1:(p2/mq)) - { - fs[(j-1)*(p2/mq) + i] <- density(x[, i], from = xi.q[j, i], to = xi.q[j, i], n = 1 )$y - } - } - - I.flat <- rep(1, p1) - - #since p2 was m*dim(h(x)) - lower.ci.mat <- matrix(0, nrow = mq, ncol = p2/mq) - upper.ci.mat <- matrix(0, nrow = mq, ncol = p2/mq) - indis <- matrix(0,nrow = n,ncol = p2) - for(i in 1:mq) - { - - indi <- (apply(x, 1, Indicator, xi.q[i,])) - if(p2 > 1) - { - indi <- t(indi) - } - indis[,((i-1)*(p2/mq) + 1):(i*(p2/mq))] <- indi - } - if(mean == FALSE) Y <- indis else Y <- cbind(x, indis) - - if(iid == FALSE)sigma.mat <- mcse.multi(Y, size = b.size)$cov else sigma.mat <- cov(Y) - - if(mean == FALSE) lambda <- 1/fs else (lambda <- 1/c(I.flat, fs)) - - ci.sigma.mat <- (t(t(sigma.mat)*lambda))*lambda - p <- p1 + p2 - if(mean == FALSE) p = p2 - - z1 <- qnorm(1 - alpha/2) - z2 <- qnorm(1 - alpha/(2*p)) - foo1 <- CIz(z1, p1, p2, theta.hat, phi,ci.sigma.mat, n, mean) - foo2 <- CIz(z2, p1, p2, theta.hat, phi,ci.sigma.mat, n, mean) - if(mean == FALSE) v <- phi else v <- c(theta.hat, phi) - - count <- 0 - prob1 <- pmvnorm(lower = foo1$lower.ci, upper = foo1$upper.ci, mean = v, sigma = (ci.sigma.mat/n))[1] - prob2 <- pmvnorm(lower = foo2$lower.ci, upper = foo2$upper.ci, mean = v, sigma = (ci.sigma.mat/n))[1] - - while(prob2 - prob1 > thresh) - { - count <- count + 1 - z.star <- (z1 + z2)/2 - foo.star <- CIz(z.star, p1, p2, theta.hat, phi, ci.sigma.mat, n, mean) - prob.star <- pmvnorm(lower = foo.star$lower.ci, upper = foo.star$upper.ci, mean = v, sigma = (ci.sigma.mat/n))[1] - if(prob.star > 1- alpha) - { - z2 <- z.star - prob2 <- prob.star - }else - { - z1 <- z.star - prob1 <- prob.star - } - if(abs(prob1 - (1 - alpha)) < thresh) - { - temp <- CIz(z1, p1, p2, theta.hat, phi,ci.sigma.mat, n, mean) - break - } - } - temp <- CIz(z1, p1, p2, theta.hat, phi,ci.sigma.mat, n, mean) - - for(i in 1:mq) - { - if(mean == FALSE) - { - lower.ci.mat[i, ] <- temp$lower.ci[((i-1)*(p2/mq)+1):(i*(p2/mq) )] - upper.ci.mat[i, ] <- temp$upper.ci[((i-1)*(p2/mq) +1):(i*(p2/mq) )] - } - else{ - lower.ci.mat[i, ] <- temp$lower.ci[((i-1)*(p2/mq) + p1 + 1):(i*(p2/mq) + p1)] - upper.ci.mat[i, ] <- temp$upper.ci[((i-1)*(p2/mq) + p1 + 1):(i*(p2/mq) + p1)] - } - } - - row.names(lower.ci.mat) <- Q - row.names(upper.ci.mat) <- Q - if(mean) - { - lower.mean <- temp$lower.ci[1:p1] - upper.mean <- temp$upper.ci[1:p1] - - foo3 <- list("lower.ci.mean" = lower.mean, "upper.ci.mean" = upper.mean, "lower.ci.mat" = lower.ci.mat, "upper.ci.mat" = upper.ci.mat, "mean.est" = theta.hat, "xi.q" = xi.q) - } else foo3 <- list("lower.ci.mat" = lower.ci.mat, "upper.ci.mat" = upper.ci.mat, "mean.est" = theta.hat, "xi.q" = xi.q) - - return(foo3) - -} -##### - - - -#' @title Add simultaneous confidence interval to existing boxplot -#' -#' @description Adds simultaneous confidence intervals for quantiles to an existing boxplot. -#' -#' @name boxCI -#' @aliases boxCI -#' @usage boxCI(x, CI, component = c(1), dimn = 1, -#' quan.color = 'lightsteelblue3', horizontal = FALSE) -#' @param x : a `Smcmc' class object -#' @param CI : the output from the `getCI` function with `iid = TRUE` -#' @param component : vector indicating which components to draw the confidence intervals for -#' @param dimn : numeric for how many components are being plotted -#' @param quan.color : color for the quantile confidence intervals -#' @param horizontal : logical for whether boxplots are horizontal -#' @return adds segments for confidence intervals into an already existing plot environment -#' -#' @examples -#' output <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -#' -#' @export -boxCI <- function(x, - CI, - component = c(1), - dimn = 1, - quan.color = 'lightsteelblue3', - horizontal = FALSE) -{ - quans = CI$xi.q - mn = CI$mean.est - quansi <- quans[, component] - qcil = CI$lower.ci.mat[, component] - qciu = CI$upper.ci.mat[, component] - i <- component - for(j in 1:length(quansi)) - { - if(horizontal==TRUE) { - polygon(c(qcil[j],qcil[j],qciu[j],qciu[j]), c(i-(0.2*min(dimn,2)),i+(0.2*min(dimn,2)),i+(0.2*min(dimn,2)), i-(0.2*min(dimn,2))), col = quan.color, border = FALSE) - }else { - polygon(c(i-(0.2*min(dimn,2)),i+(0.2*min(dimn,2)),i+(0.2*min(dimn,2)), i-(0.2*min(dimn,2))), c(qcil[j],qcil[j],qciu[j],qciu[j]), col = quan.color, border = FALSE) - } - } - for(j in 1:length(quansi)) - { - if(horizontal==TRUE) { - segments(quansi[j],i-(0.2*min(dimn,2)), quansi[j], i+(0.2*min(dimn,2))) - }else { - segments(i-(0.2*min(dimn,2)), quansi[j], i+(0.2*min(dimn,2)), quansi[j]) - } - - } -} diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/R/supp.R b/SimTools.Rcheck/00_pkg_src/SimTools/R/supp.R deleted file mode 100644 index f4da5a1..0000000 --- a/SimTools.Rcheck/00_pkg_src/SimTools/R/supp.R +++ /dev/null @@ -1,207 +0,0 @@ -## For simultaneous confidence intervals -Indicator <- function(x, ...) -{ - return(as.numeric(x > ... )) -} - -#since our goal is to optimize z, this function returns the Confidence interval -#for a particular z - -CIz <- function(z, p1 , p2, theta.hat, phi, ci.sigma.mat, n, mean = TRUE) -{ - se_ests <- sqrt(diag(ci.sigma.mat)/n) - - if (mean == FALSE) - { - lower.ci.p2 <- phi - z * se_ests - upper.ci.p2 <- phi + z * se_ests - return (list("lower.ci" = lower.ci.p2, "upper.ci" = upper.ci.p2)) - } - p <- p1 + p2 - - lower.ci.p1 <- theta.hat - z * se_ests[1:p1] - upper.ci.p1 <- theta.hat + z * se_ests[1:p1] - lower.ci.p2 <- phi - z * se_ests[(p1+1):p] - upper.ci.p2 <- phi + z * se_ests[(p1+1):p] - - return (list("lower.ci" = c(lower.ci.p1, lower.ci.p2), "upper.ci" = c(upper.ci.p1, upper.ci.p2))) -} - -"set.mfrow" <-function (Nparms = 1) -{ - ## Set up dimensions of graphics window: - ## 1 x 1 if Nparms = 1 - ## 1 X 2 if Nparms = 2 - ## 2 X 2 if Nparms = 3 or 4 - ## 3 X 2 if Nparmss = 5 or 6 or 10 - 12 - ## 3 X 3 if Nparms = 7 - 9 or >= 13 - ## 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)) - return(mfrow) -} - - - -plot.CIs <- function(x, - dimn, - CIs, - bord = NULL, - mean.color, - quan.color, - rug, - mean = TRUE, - auto.layout, - ask, ...) -{ - - pars <- NULL - if(class(x) == "Smcmc") - { - if(is.null(x$varnames)) - { - varnames <- as.character(1:dim(x$stacked)[2]) - }else{ - varnames <- x$varnames - } - data <- x$stacked - } else{ - if(class(x) == "Siid") - { - if(is.null(x$varnames)) - { - varnames <- as.character(1:dim(x$data)[2]) - }else{ - varnames <- x$varnames - } - data <- x$data - } - } - - if(dimn < 4) { - par(mfrow = c(dimn,1)) - for(i in 1:dimn) - { - beta = ts(data[, i]) - main1 = paste("Density of ",varnames[i]) - plot(density(beta), main = main1, ...) - if(rug == TRUE) rug(beta, ticksize = 0.03, side=1, lwd=0.5) - addCI(x, CIs, component = i, bord = bord, - mean.color = mean.color, quan.color = quan.color, - mean = mean, ...) - } - } - else if(dimn == 4) { - par(mfrow = c(2,2)) - for(i in 1:4) - { - beta = ts(data[, i]) - main1 = paste("Density of ",varnames[i]) - plot(density(beta), main = main1, ...) - if(rug == TRUE) rug(beta, ticksize=0.03, side=1, lwd=0.5) - addCI(x, CIs, component = i, bord = bord, - mean.color = mean.color, quan.color = quan.color, - mean = mean, ...) - } - }else if(dimn == 5||dimn == 6){ - par(mfrow = c(3,2)) - for(i in 1:dimn) - { - beta = ts(data[, i]) - main1 = paste("Density of ",varnames[i]) - plot(density(beta), main = main1, ...) - if(rug == TRUE) rug(beta, ticksize=0.03, side=1, lwd=0.5) - addCI(x, CIs,component = i, bord = bord, - mean.color = mean.color, quan.color = quan.color, - mean = mean, ...) - } - }else { - on.exit(par(pars)) - - if (auto.layout) { - mfrow <- set.mfrow(Nparms = 6) - pars <- par(mfrow = mfrow) - } - - for(i in 1:dimn) - { - beta = ts(data[, i]) - - main1 = paste("Density of ",varnames[i]) - plot(density(beta), main = main1, ...) - if(rug == TRUE) rug(beta, ticksize=0.03, side=1, lwd=0.5) - main1 = paste("Density of ",varnames[i]) - addCI(x, CIs, component = i, bord = bord, - mean.color = mean.color, quan.color = quan.color, - mean = mean, ...) - if (i == 1) - pars <- c(pars, par(ask=ask)) - } - } - on.exit(par(pars, ask=FALSE,mfrow=c(1,1))) - -} - - - -## For boxplots -plot.boxx <- function(x, dimn, CIs, quan.color, range, width, varwidth, notch, outline, plot, border, - col, ann, horizontal, add,...) -{ - if(is.null(x$varnames)) - { - varnames <- as.character(1:dim(x$data)[2]) - }else{ - varnames <- x$varnames - } - boxplot.matrix(x$data, ..., range = range, width = width, varwidth = varwidth, notch = notch, outline = outline, - names=varnames, plot = plot, border = border, col = col, ann = ann, horizontal = horizontal, add = add) - for(i in 1:dimn) { - boxCI(x, CI = CIs, component = i,dimn = dimn, - quan.color = quan.color, horizontal = horizontal) - } -} - -chain_stacker <- function(x) { - m <- length(x) - - if(class(x) != "list") - stop("must be list of chains") - - if(is.null(x)) - stop("Chains are null") - - n <- as.integer(nrow(x[[1]])) - p <- as.integer(ncol(x[[1]])) - - b <- 0 - for(i in 1:m) { - b <- b + batchSize(x[[i]]) - } - b.final <- floor(b/m) - a <- floor(n/b.final) - ab <- a*b.final - trash <- n-ab - big.chain <- matrix(0,ncol = p, nrow = ab*m) - if(ab != n) - { - for (i in 1:m) { - big.chain[((i-1)*ab+1):(i*ab),] <- x[[i]][-(1:trash),] - } - }else{ - big.chain <- Reduce("rbind", x) - } - return(list("b.size" = b.final, "stacked.data" = big.chain)) -} diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/README.md b/SimTools.Rcheck/00_pkg_src/SimTools/README.md deleted file mode 100644 index f2cce11..0000000 --- a/SimTools.Rcheck/00_pkg_src/SimTools/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# SimTools: Variability assessment for simulation methods in R - -Leadership: -[Dootika Vats](http://dvats.github.io/), [James Flegal](https://faculty.ucr.edu/~jflegal/), [Galin Jones](http://users.stat.umn.edu/~galin/) - -Contributors: -Gunjan Jalori - -The development of this package has begun. Updates will be described in this README. For communication regarding issues in the code and other suggestions, we can try and use the GitHub Issues interface. - - -**Run**: `runme.R` - - ---------------------- - December 7, 2020 - -`Siid` class created. This corresponds to "IID simulation objects". The `boxplot` and `plot` commands work directly on this and produces boxplots and density plots. - ---------------------- - December 4, 2020 - -`Smcmc` class created. This corresponds to "MCMC simulation objects". The `plot` command works directly on this and produces density plots with the desired quantiles and means indicated. - ---------------------- - - diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/SimTools_1.0-0.tar.gz b/SimTools.Rcheck/00_pkg_src/SimTools/SimTools_1.0-0.tar.gz deleted file mode 100644 index 501b88d48b848e0ceebf623de40c0f1d1f51f2fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417890 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 z%0ADe%Wt1E{p{UPZgEAMUp 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�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 diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/man/Siid.Rd b/SimTools.Rcheck/00_pkg_src/SimTools/man/Siid.Rd deleted file mode 100644 index 20f4bed..0000000 --- a/SimTools.Rcheck/00_pkg_src/SimTools/man/Siid.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Siidclass.R -\name{Siid} -\alias{Siid} -\alias{as.Siid} -\alias{as.Siid.default} -\alias{is.iid} -\title{Siid class} -\usage{ -Siid(data, varnames = colnames(data)) -} -\arguments{ -\item{data}{: an iid output matrix with nsim rows and p columns} - -\item{varnames}{: a character string equal to the number of columns in \code{data}} -} -\value{ -an Siid class object -} -\description{ -Class for independent and identically distributed (iid) samples -} -\examples{ -# Generating iid data -chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -siid.obj <- Siid(chain) - -} diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/man/Smcmc.Rd b/SimTools.Rcheck/00_pkg_src/SimTools/man/Smcmc.Rd deleted file mode 100644 index b50f8ab..0000000 --- a/SimTools.Rcheck/00_pkg_src/SimTools/man/Smcmc.Rd +++ /dev/null @@ -1,37 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Smcmcclass.R -\name{Smcmc} -\alias{Smcmc} -\alias{as.Smcmc} -\alias{as.Smcmc.default} -\alias{is.mcmc} -\title{Smcmc class} -\usage{ -Smcmc(data, batch.size = TRUE, stacked = TRUE, varnames = colnames(data)) -} -\arguments{ -\item{data}{: a list of MCMC output matrices each with `nsim` rows and `p` columns} - -\item{batch.size}{: logical argument, if true, calculates the batch size appropriate for this Markov chain. Setting to TRUE saves time in future steps.} - -\item{stacked}{: recommended to be `TRUE`. logical argument, if true, stores a carefully stacked version of the MCMC output for use later.} - -\item{varnames}{: a character string equal to the number of columns in \code{data}} -} -\value{ -an Smcmc class object -} -\description{ -Smcmc class for simulated data using Markov chain Monte Carlo -} -\examples{ -# Producing Markov chain -chain <- matrix(0, nrow = 1e3, ncol = 1) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -smcmc.obj <- Smcmc(chain) -} diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/man/addCI.Rd b/SimTools.Rcheck/00_pkg_src/SimTools/man/addCI.Rd deleted file mode 100644 index 25744b7..0000000 --- a/SimTools.Rcheck/00_pkg_src/SimTools/man/addCI.Rd +++ /dev/null @@ -1,47 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/export.R -\name{addCI} -\alias{addCI} -\title{Add simultaneous confidence interval to existing plot.} -\usage{ -addCI(x, CIs, component = 1, bord = NA, mean = TRUE, mean.color = 'plum4', - quan.color = 'lightsteelblue3', opaq = 0.7, ...) -} -\arguments{ -\item{x}{: a `Smcmc' class object} - -\item{CIs}{: the output from the `getCI` function} - -\item{component}{: numeric indicating which component to draw the confidence intervals for} - -\item{bord}{: logical for whether a border is desired around the confidence intervals} - -\item{mean}{: logical argument whether the mean is to be plotted} - -\item{mean.color}{: color for the mean confidence interval} - -\item{quan.color}{: color for the quantile confidence intervals} - -\item{opaq}{: opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque.} - -\item{...}{: arguments passed on to the boundaries of the confidence intervals in `segments`} -} -\value{ -adds segments for confidence intervals into an already existing plot environment -} -\description{ -Adds simultaneous confidence intervals for quantiles and means to an existing plot. -} -\examples{ -chain <- matrix(0, ncol = 1, nrow = 1e3) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -chain <- Smcmc(list(chain)) -plot(density(chain$stacked[,1])) -CIs <- getCI(chain) -addCI(chain, CIs, component = 1) -} diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/man/boxCI.Rd b/SimTools.Rcheck/00_pkg_src/SimTools/man/boxCI.Rd deleted file mode 100644 index 496663b..0000000 --- a/SimTools.Rcheck/00_pkg_src/SimTools/man/boxCI.Rd +++ /dev/null @@ -1,32 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/export.R -\name{boxCI} -\alias{boxCI} -\title{Add simultaneous confidence interval to existing boxplot} -\usage{ -boxCI(x, CI, component = c(1), dimn = 1, - quan.color = 'lightsteelblue3', horizontal = FALSE) -} -\arguments{ -\item{x}{: a `Smcmc' class object} - -\item{CI}{: the output from the `getCI` function with `iid = TRUE`} - -\item{component}{: vector indicating which components to draw the confidence intervals for} - -\item{dimn}{: numeric for how many components are being plotted} - -\item{quan.color}{: color for the quantile confidence intervals} - -\item{horizontal}{: logical for whether boxplots are horizontal} -} -\value{ -adds segments for confidence intervals into an already existing plot environment -} -\description{ -Adds simultaneous confidence intervals for quantiles to an existing boxplot. -} -\examples{ -output <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) - -} diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/man/boxplot.Siid.Rd b/SimTools.Rcheck/00_pkg_src/SimTools/man/boxplot.Siid.Rd deleted file mode 100644 index 8e1307b..0000000 --- a/SimTools.Rcheck/00_pkg_src/SimTools/man/boxplot.Siid.Rd +++ /dev/null @@ -1,64 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Siidclass.R -\name{boxplot.Siid} -\alias{boxplot.Siid} -\title{Boxplot for Siid} -\usage{ -\method{boxplot}{Siid}(x, ..., alpha = 0.05, thresh = 0.001, - quan.col = 'lightsteelblue3', opaq = .6, range = 1.5, - width = NULL, varwidth = FALSE, outline = TRUE, plot = TRUE, - border = par("fg"), col = 'white', ann = !add, - horizontal = FALSE, add = FALSE) -} -\arguments{ -\item{x}{: a `Siid' class object} - -\item{...}{: arguments sent to boxplot} - -\item{alpha}{: confidence level of simultaneous confidence intervals} - -\item{thresh}{: numeric typically less than .005 for the accuracy of the simulteaneous procedure} - -\item{quan.col}{: color for the quantile confidence intervals} - -\item{opaq}{: opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque.} - -\item{range}{: as defined for base \code{boxplot}} - -\item{width}{: as defined for base \code{boxplot}} - -\item{varwidth}{: as defined for base \code{boxplot}} - -\item{outline}{: as defined for base \code{boxplot}} - -\item{plot}{: logical indicating whether the plot is to be constructed} - -\item{border}{: as defined for base \code{boxplot}} - -\item{col}{: as defined for base \code{boxplot}} - -\item{ann}{: as defined for base \code{boxplot}} - -\item{horizontal}{: as defined for base \code{boxplot}} - -\item{add}{: as defined for base \code{boxplot}} -} -\value{ -returns the base \code{boxplot} with simultaneous confidence intervals around - all quantiles -} -\description{ -Boxplots with simultaenous error bars around all quantiles for iid data. -} -\examples{ -# Generating iid data -chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -siid.obj <- Siid(chain) -boxplot(siid.obj) - -} -\references{ -Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -“Assessing and Visualizing Simultaneous Simulation Error”, -Journal of Computational and Graphical Statistics, 2020. -} diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/man/getCI.Rd b/SimTools.Rcheck/00_pkg_src/SimTools/man/getCI.Rd deleted file mode 100644 index a8ee1e0..0000000 --- a/SimTools.Rcheck/00_pkg_src/SimTools/man/getCI.Rd +++ /dev/null @@ -1,48 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/export.R -\name{getCI} -\alias{getCI} -\title{Calculates simultaneous confidence intervals.} -\usage{ -getCI(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, iid = FALSE, - mean = TRUE) -} -\arguments{ -\item{x}{: a `Smcmc' class object} - -\item{Q}{: vector of quantiles} - -\item{alpha}{: confidence levels of the simulatenous intervals} - -\item{thresh}{: threshold for the optimization methodology that calculates the simultaneous CIs} - -\item{iid}{: logical argument for constructing density plot for iid samples. Defaults to \code{FALSE}} - -\item{mean}{: logical indicating whether mean is to be plotted} -} -\value{ -adds segments for confidence intervals into an already existing plot environment -} -\description{ -Calculates simultaneous confidence intervals for means and - quantiles as indicated for the desired MCMC output -} -\examples{ -chain <- matrix(0, ncol = 1, nrow = 1e3) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -chain <- Smcmc(list(chain)) -plot(density(chain$stacked[,1])) -CIs <- getCI(chain) -addCI(chain, CIs, component = 1) - -} -\references{ -Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -“Assessing and Visualizing Simultaneous Simulation Error”, -Journal of Computational and Graphical Statistics, 2020. -} diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/man/plot.Siid.Rd b/SimTools.Rcheck/00_pkg_src/SimTools/man/plot.Siid.Rd deleted file mode 100644 index 003ead4..0000000 --- a/SimTools.Rcheck/00_pkg_src/SimTools/man/plot.Siid.Rd +++ /dev/null @@ -1,62 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Siidclass.R -\name{plot.Siid} -\alias{plot.Siid} -\title{Plot Siid} -\usage{ -\method{plot}{Siid}(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, - rug = TRUE, plot = TRUE, mean = TRUE, border = NA, - mean.col = 'plum4', quan.col = 'lightsteelblue3', - opaq = 0.7, auto.layout = TRUE, - ask = dev.interactive(), ...) -} -\arguments{ -\item{x}{: a `Siid' class object} - -\item{Q}{: vector of quantiles} - -\item{alpha}{: confidence level of simultaneous confidence intervals} - -\item{thresh}{: numeric typically less than .005 for the accuracy of the simulteaneous procedure} - -\item{rug}{: logical indicating whether a rug plot is desired} - -\item{plot}{: logical argument for is plots are to be returned} - -\item{mean}{: logical argument whether the mean is to be plotted} - -\item{border}{: whether a border is required for the simultaneous confidence intervals} - -\item{mean.col}{: color for the mean confidence interval} - -\item{quan.col}{: color for the quantile confidence intervals} - -\item{opaq}{: opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque.} - -\item{auto.layout}{: logical argument for an automatic layout of plots} - -\item{ask}{: activating interactive plots} - -\item{...}{: arguments passed on to the \code{density} plot in base R} -} -\value{ -returns a plot of the univariate density estimates with simultaneous - confidence intervals wherever asked. If \code{plot == FALSE} a list of - estimates and simultaneous confidence intervals. -} -\description{ -Density plots with simultaenous error bars around means and quantiles - for iid data. -} -\examples{ -# Generating iid data -chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -siid.obj <- Siid(chain) -plot(siid.obj) - -} -\references{ -Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -“Assessing and Visualizing Simultaneous Simulation Error”, -Journal of Computational and Graphical Statistics, 2020. -} diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/man/plot.Smcmc.Rd b/SimTools.Rcheck/00_pkg_src/SimTools/man/plot.Smcmc.Rd deleted file mode 100644 index ab24247..0000000 --- a/SimTools.Rcheck/00_pkg_src/SimTools/man/plot.Smcmc.Rd +++ /dev/null @@ -1,69 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/Smcmcclass.R -\name{plot.Smcmc} -\alias{plot.Smcmc} -\title{Plot Smcmc} -\usage{ -\method{plot}{Smcmc}(x, Q = c(0.1, 0.9), alpha = 0.05, thresh = 0.001, iid = FALSE, - plot = TRUE, mean = TRUE, border = NA, mean.col = 'plum4', - quan.col = 'lightsteelblue3',rug = TRUE, opaq = 0.7, - auto.layout = TRUE, ask = dev.interactive(),...) -} -\arguments{ -\item{x}{: a `Smcmc' class object} - -\item{Q}{: vector of quantiles} - -\item{alpha}{: confidence level of simultaneous confidence intervals} - -\item{thresh}{: numeric typically less than .005 for the accuracy of the simulteaneous procedure} - -\item{iid}{: logical argument for constructing density plot for iid samples. Defaults to \code{FALSE}} - -\item{plot}{: logical argument for is plots are to be returned} - -\item{mean}{: logical argument whether the mean is to be plotted} - -\item{border}{: whether a border is required for the simultaneous confidence intervals} - -\item{mean.col}{: color for the mean confidence interval} - -\item{quan.col}{: color for the quantile confidence intervals} - -\item{rug}{: logical indicating whether a rug plot is desired} - -\item{opaq}{: opacity of \code{mean.col} and \code{quan.col}. A value of 0 is transparent and 1 is completely opaque.} - -\item{auto.layout}{: logical argument for an automatic layout of plots} - -\item{ask}{: activating interactive plots} - -\item{...}{: arguments passed on to the \code{density} plot in base R} -} -\value{ -returns a plot of the univariate density estimates with simultaneous - confidence intervals wherever asked. If \code{plot == FALSE} a list of - estimates and simultaneous confidence intervals. -} -\description{ -Density plots with simultaenous error bars around means and quantiles - for MCMC data. The error bars account for the correlated nature of the process. -} -\examples{ -# Producing Markov chain -chain <- matrix(0, ncol = 1, nrow = 1e3) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -chain <- Smcmc(list(chain)) -plot(chain) - -} -\references{ -Robertson, N., Flegal, J. M., Vats, D., and Jones, G. L., -“Assessing and Visualizing Simultaneous Simulation Error”, -Journal of Computational and Graphical Statistics, 2020. -} diff --git a/SimTools.Rcheck/00_pkg_src/SimTools/runme.R b/SimTools.Rcheck/00_pkg_src/SimTools/runme.R deleted file mode 100644 index 6dc5f0c..0000000 --- a/SimTools.Rcheck/00_pkg_src/SimTools/runme.R +++ /dev/null @@ -1,170 +0,0 @@ -########################################## -## This document is a running file -## in place of a vignette for now. -## -## We run an MCMC example and an IID -## Monte Carlo example and demonstrate the -## plots that are available. -########################################## -set.seed(1) - - -############################ -# Smcmc class -############################ - -# Making a Markov chain -# RW MH for a standard normal multivariate target -MakeChain <- function(p = 4, n = 1e3, h = .5) -{ - chain <- matrix(0, nrow = n,ncol = p) - - for (i in 2:n) - { - prop <- chain[i-1, ] + rnorm(p, mean = 0, sd = h) - log.ratio <- sum(dnorm(prop, log = TRUE) - dnorm(chain[i-1, ], log = TRUE)) - - if(log(runif(1)) < log.ratio) - { - chain[i, ] <- prop - } - else { - chain[i, ] <- chain[i - 1, ] - } - } - return(chain) -} - -# Make chain -chain <- MakeChain() - - -# install SimTools package -# download the tarball from GitHub and then -# on the terminal run: R CMD INSTALL SimTools_1.0-0.tar.gz -library(SimTools) - - -# First, we tell the package that chain is an MCMC process -# using the class `Smcmc`. A few things, setting: -# batch.size = TRUE calculates the batch.size for this -# chain and uses it in the future, and not wasting -# time in the future -# varnames = colnames(chain) by default - -out.one <- Smcmc(chain) - -# the chain is accessed via -head(out.one$chains[[1]]) - -# the batch size chosen -out.one$b.size - - -# the stacked chain stores a cleaned -# and "stacked" version of all chains -# it stacks multiple chains so that -# n = ab for all chain -head(out.one$stacked) - - -# Density plots are called by `plot` -# This is because plot(Smcmc object) calls an underlying -# plot.Smcmc function -plot(out.one) - -# rug plots can be removed -plot(out.one, rug = FALSE) - -# flexibility in this function -plot(out.one, Q = c(.05, .20)) # change quantiles -plot(out.one, mean = FALSE) # no mean - - - -### Multiple chains -# The package now supports multiple chain implementations - -chain1 <- MakeChain() -chain2 <- MakeChain() -chain3 <- MakeChain() - -out.three <- Smcmc(list(chain1, chain2, chain3)) -str(out.three) -# access list of chains by out.three$chains - -# calculated batch size is the average of -# individual chain batch sizes -out.three$b.size - -# dimension is typically not #3k \times 4 -dim(out.three$stacked) - -# plots the density from the stacked estimates -plot(out.three) - - -# plotting individual chain densities versus combined -# using the getCI and the addCI functions -# we can add appropriate simulateneous intervals -par(mfrow = c(2,2)) - -foo1 <- Smcmc(chain1) -plot(density(foo1$stacked[,1]), main = "Markov chain 1") -CIs <- getCI(foo1) -addCI(foo1, CIs, component = 1) - -foo2 <- Smcmc(chain2) -plot(density(foo2$stacked[,1]), main = "Markov chain 2") -CIs <- getCI(foo2) -addCI(foo2, CIs, component = 1) - -foo3 <- Smcmc(chain3) -plot(density(foo3$stacked[,1]), main = "Markov chain 3") -CIs <- getCI(foo3) -addCI(foo3, CIs, component = 1) - -plot(density(out.three$stacked[,1]), main = "Combined") -CIs <- getCI(out.three) -addCI(out.three, CIs, component = 1) - - -# Typically, we would expect people to work -# with the stacked chains. So separate plots -# for each component can be made - -# get CIs for each component -CIs <- getCI(out.three) - -for(i in 1:4) -{ - plot(density(out.three$stacked[,i]), main = paste("Component", i), lty = 2) - addCI(out.three, CIs, component = i) -} - - - -############################ -# Siid class -############################ -n <- 5e2 -p <- 5 -sim <- matrix(rnorm(n*p), ncol = p, nrow = n) - -out <- Siid(sim) # make into Siid object) -plot(out) # since Siid object, mcmcse is not used in variance estimation -boxplot(out) - - -# Picks up the column names if present -colnames(sim) <- paste("Comp", 1:5) -out <- Siid(sim) # make into Siid object) -plot(out) # since Siid object, mcmcse is not used in variance estimation -boxplot(out) - -# only first component -boxplot(sim[,1], col = "white") -boxCI(out, getCI(out, Q = c(.25, .5, .75), iid = TRUE), component = 1) -# need to change getCI so that there is an automatic Q option in it - - diff --git a/SimTools.Rcheck/00check.log b/SimTools.Rcheck/00check.log deleted file mode 100644 index f13d497..0000000 --- a/SimTools.Rcheck/00check.log +++ /dev/null @@ -1,62 +0,0 @@ -* using log directory ‘/Users/Dootika/Documents/GitHub/SimTools/SimTools.Rcheck’ -* using R version 4.0.2 (2020-06-22) -* using platform: x86_64-apple-darwin17.0 (64-bit) -* using session charset: UTF-8 -* using option ‘--as-cran’ -* checking for file ‘SimTools/DESCRIPTION’ ... OK -* this is package ‘SimTools’ version ‘1.0-0’ -* package encoding: UTF-8 -* checking CRAN incoming feasibility ... NOTE -Maintainer: ‘Dootika Vats ’ - -New submission -* checking package namespace information ... OK -* checking package dependencies ... OK -* checking if this is a source package ... OK -* checking if there is a namespace ... OK -* checking for executable files ... OK -* checking for hidden files and directories ... OK -* checking for portable file names ... OK -* checking for sufficient/correct file permissions ... OK -* checking serialization versions ... OK -* checking whether package ‘SimTools’ can be installed ... OK -* checking installed package size ... OK -* checking package directory ... OK -* checking for future file timestamps ... OK -* checking DESCRIPTION meta-information ... OK -* checking top-level files ... NOTE -Files ‘README.md’ or ‘NEWS.md’ cannot be checked without ‘pandoc’ being installed. -Non-standard files/directories found at top level: - ‘SimTools_1.0-0.tar.gz’ ‘runme.R’ -* checking for left-over files ... OK -* checking index information ... OK -* checking package subdirectories ... OK -* checking R files for non-ASCII characters ... OK -* checking R files for syntax errors ... OK -* checking whether the package can be loaded ... OK -* checking whether the package can be loaded with stated dependencies ... OK -* checking whether the package can be unloaded cleanly ... OK -* checking whether the namespace can be loaded with stated dependencies ... OK -* checking whether the namespace can be unloaded cleanly ... OK -* checking loading without being on the library search path ... OK -* checking use of S3 registration ... OK -* checking dependencies in R code ... OK -* checking S3 generic/method consistency ... OK -* checking replacement functions ... OK -* checking foreign function calls ... OK -* checking R code for possible problems ... OK -* checking Rd files ... OK -* checking Rd metadata ... OK -* checking Rd line widths ... OK -* checking Rd cross-references ... OK -* checking for missing documentation entries ... OK -* checking for code/documentation mismatches ... OK -* checking Rd \usage sections ... OK -* checking Rd contents ... OK -* checking for unstated dependencies in examples ... OK -* checking examples ... OK -* checking PDF version of manual ... OK -* checking for non-standard things in the check directory ... OK -* checking for detritus in the temp directory ... OK -* DONE -Status: 2 NOTEs diff --git a/SimTools.Rcheck/00install.out b/SimTools.Rcheck/00install.out deleted file mode 100644 index 9a93be1..0000000 --- a/SimTools.Rcheck/00install.out +++ /dev/null @@ -1,11 +0,0 @@ -* installing *source* package ‘SimTools’ ... -** using staged installation -** R -** byte-compile and prepare package for lazy loading -** help -*** installing help indices -** building package indices -** testing if installed package can be loaded from temporary location -** testing if installed package can be loaded from final location -** testing if installed package keeps a record of temporary installation path -* DONE (SimTools) diff --git a/SimTools.Rcheck/R_check_bin/R b/SimTools.Rcheck/R_check_bin/R deleted file mode 100755 index 3e289bc..0000000 --- a/SimTools.Rcheck/R_check_bin/R +++ /dev/null @@ -1,2 +0,0 @@ -echo "'R' should not be used without a path -- see par. 1.6 of the manual" -exit 1 diff --git a/SimTools.Rcheck/R_check_bin/Rscript b/SimTools.Rcheck/R_check_bin/Rscript deleted file mode 100755 index 6fead74..0000000 --- a/SimTools.Rcheck/R_check_bin/Rscript +++ /dev/null @@ -1,2 +0,0 @@ -echo "'Rscript' should not be used without a path -- see par. 1.6 of the manual" -exit 1 diff --git a/SimTools.Rcheck/Rdlatex.log b/SimTools.Rcheck/Rdlatex.log deleted file mode 100644 index dcb516a..0000000 --- a/SimTools.Rcheck/Rdlatex.log +++ /dev/null @@ -1,546 +0,0 @@ -Hmm ... looks like a package - -This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015) (preloaded format=pdflatex) - restricted \write18 enabled. -entering extended mode -LaTeX2e <2015/01/01> -Babel <3.9l> and hyphenation patterns for 79 languages loaded. - -(./Rd2.tex -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/book.cls -Document Class: book 2014/09/29 v1.4h Standard LaTeX document class -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/bk10.clo)) -(/Library/Frameworks/R.framework/Resources/share/texmf/tex/latex/Rd.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ifthen.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/longtable.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/bm.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/alltt.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/verbatim.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/url/url.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/textcomp.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.def)) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/fontenc.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.def)) -(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/times.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/inconsolata/zi4.sty -`inconsolata-zi4' v1.05, 2014/06/22 Text macros for Inconsolata (msharpe) -(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty)) -(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/color.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg) -(/usr/local/texlive/2015/texmf-dist/tex/latex/pdftex-def/pdftex.def -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/infwarerr.sty) -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ltxcmds.sty))) -(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hyperref.sty -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty)) -(/usr/local/texlive/2015/texmf-dist/tex/generic/ifxetex/ifxetex.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/auxhook.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/kvoptions.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/pd1enc.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/hyperref.cfg)) - -Package hyperref Message: Driver (autodetected): hpdftex. - -(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hpdftex.def -(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty)) - -Package hyperref Warning: Option `hyperindex' has already been used, -(hyperref) setting the option has no effect on input line 377. - - -Package hyperref Warning: Option `pagebackref' has already been used, -(hyperref) setting the option has no effect on input line 377. - -) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/makeidx.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/inputenc.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.dfu) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ot1enc.dfu) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/omsenc.dfu) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.dfu))) -Writing index file Rd2.idx -No file Rd2.aux. -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1cmr.fd) -(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1ptm.fd) -(/usr/local/texlive/2015/texmf-dist/tex/context/base/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -) (/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/nameref.sty -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/gettitlestring.sty)) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/inconsolata/t1zi4.fd) -(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1phv.fd) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/inconsolata/ts1zi4.fd) [1{/usr/lo -cal/texlive/2015/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [2] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [3] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [4] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [5] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [6] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [7] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) -No file Rd2.ind. -[8] -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.aux) - -Package rerunfilecheck Warning: File `Rd2.out' has changed. -(rerunfilecheck) Rerun to get outlines right -(rerunfilecheck) or use package `bookmark'. - - ){/usr/local/texlive/2015/texmf-dist/fonts/enc/dvips/base/8r.enc}{/usr/local/t -exlive/2015/texmf-dist/fonts/enc/dvips/inconsolata/i4-ts1.enc}{/usr/local/texli -ve/2015/texmf-dist/fonts/enc/dvips/inconsolata/i4-t1-0.enc} -Output written on Rd2.pdf (8 pages, 80564 bytes). -Transcript written on Rd2.log. -This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015) (preloaded format=pdflatex) - restricted \write18 enabled. -entering extended mode -LaTeX2e <2015/01/01> -Babel <3.9l> and hyphenation patterns for 79 languages loaded. - -(./Rd2.tex -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/book.cls -Document Class: book 2014/09/29 v1.4h Standard LaTeX document class -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/bk10.clo)) -(/Library/Frameworks/R.framework/Resources/share/texmf/tex/latex/Rd.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ifthen.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/longtable.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/bm.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/alltt.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/verbatim.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/url/url.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/textcomp.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.def)) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/fontenc.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.def)) -(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/times.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/inconsolata/zi4.sty -`inconsolata-zi4' v1.05, 2014/06/22 Text macros for Inconsolata (msharpe) -(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty)) -(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/color.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg) -(/usr/local/texlive/2015/texmf-dist/tex/latex/pdftex-def/pdftex.def -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/infwarerr.sty) -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ltxcmds.sty))) -(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hyperref.sty -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty)) -(/usr/local/texlive/2015/texmf-dist/tex/generic/ifxetex/ifxetex.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/auxhook.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/kvoptions.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/pd1enc.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/hyperref.cfg)) - -Package hyperref Message: Driver (autodetected): hpdftex. - -(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hpdftex.def -(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty)) - -Package hyperref Warning: Option `hyperindex' has already been used, -(hyperref) setting the option has no effect on input line 377. - - -Package hyperref Warning: Option `pagebackref' has already been used, -(hyperref) setting the option has no effect on input line 377. - -) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/makeidx.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/inputenc.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.dfu) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ot1enc.dfu) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/omsenc.dfu) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.dfu))) -Writing index file Rd2.idx - -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.aux) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1cmr.fd) -(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1ptm.fd) -(/usr/local/texlive/2015/texmf-dist/tex/context/base/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -) (/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/nameref.sty -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/gettitlestring.sty)) -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.out) -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.out) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/inconsolata/t1zi4.fd) -(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1phv.fd) -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.toc) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/inconsolata/ts1zi4.fd) [1{/usr/lo -cal/texlive/2015/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [2] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [3] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [4] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [5] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [6] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [7] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) -No file Rd2.ind. -[8] -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.aux) ){/usr/local/texlive/2015/texmf-dist/fonts/enc/dvips/inconsola -ta/i4-ts1.enc}{/usr/local/texlive/2015/texmf-dist/fonts/enc/dvips/base/8r.enc}{ -/usr/local/texlive/2015/texmf-dist/fonts/enc/dvips/inconsolata/i4-t1-0.enc} -Output written on Rd2.pdf (8 pages, 81595 bytes). -Transcript written on Rd2.log. -This is makeindex, version 2.15 [TeX Live 2015] (kpathsea + Thai support). -Scanning input file Rd2.idx....done (12 entries accepted, 0 rejected). -Sorting entries....done (49 comparisons). -Generating output file Rd2.ind....done (32 lines written, 0 warnings). -Output written in Rd2.ind. -Transcript written in Rd2.ilg. -This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015) (preloaded format=pdflatex) - restricted \write18 enabled. -entering extended mode -LaTeX2e <2015/01/01> -Babel <3.9l> and hyphenation patterns for 79 languages loaded. - -(./Rd2.tex -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/book.cls -Document Class: book 2014/09/29 v1.4h Standard LaTeX document class -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/bk10.clo)) -(/Library/Frameworks/R.framework/Resources/share/texmf/tex/latex/Rd.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ifthen.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/longtable.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/bm.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/alltt.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/verbatim.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/url/url.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/textcomp.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.def)) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/fontenc.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.def)) -(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/times.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/inconsolata/zi4.sty -`inconsolata-zi4' v1.05, 2014/06/22 Text macros for Inconsolata (msharpe) -(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty)) -(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/color.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg) -(/usr/local/texlive/2015/texmf-dist/tex/latex/pdftex-def/pdftex.def -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/infwarerr.sty) -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ltxcmds.sty))) -(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hyperref.sty -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty)) -(/usr/local/texlive/2015/texmf-dist/tex/generic/ifxetex/ifxetex.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/auxhook.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/kvoptions.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/pd1enc.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/hyperref.cfg)) - -Package hyperref Message: Driver (autodetected): hpdftex. - -(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hpdftex.def -(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty)) - -Package hyperref Warning: Option `hyperindex' has already been used, -(hyperref) setting the option has no effect on input line 377. - - -Package hyperref Warning: Option `pagebackref' has already been used, -(hyperref) setting the option has no effect on input line 377. - -) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/makeidx.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/inputenc.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.dfu) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ot1enc.dfu) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/omsenc.dfu) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.dfu))) -Writing index file Rd2.idx - -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.aux) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1cmr.fd) -(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1ptm.fd) -(/usr/local/texlive/2015/texmf-dist/tex/context/base/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -) (/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/nameref.sty -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/gettitlestring.sty)) -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.out) -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.out) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/inconsolata/t1zi4.fd) -(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1phv.fd) -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.toc) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/inconsolata/ts1zi4.fd) [1{/usr/lo -cal/texlive/2015/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [2] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [3] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [4] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [5] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [6] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [7] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.ind [8] - -LaTeX Font Warning: Font shape `T1/zi4/m/it' undefined -(Font) using `T1/zi4/m/n' instead on input line 4. - -[9]) -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.aux) - -Package rerunfilecheck Warning: File `Rd2.out' has changed. -(rerunfilecheck) Rerun to get outlines right -(rerunfilecheck) or use package `bookmark'. - - -LaTeX Font Warning: Some font shapes were not available, defaults substituted. - - ){/usr/local/texlive/2015/texmf-dist/fonts/enc/dvips/inconsolata/i4-ts1.enc}{/ -usr/local/texlive/2015/texmf-dist/fonts/enc/dvips/base/8r.enc}{/usr/local/texli -ve/2015/texmf-dist/fonts/enc/dvips/inconsolata/i4-t1-0.enc} -Output written on Rd2.pdf (9 pages, 82983 bytes). -Transcript written on Rd2.log. -This is makeindex, version 2.15 [TeX Live 2015] (kpathsea + Thai support). -Scanning input file Rd2.idx....done (12 entries accepted, 0 rejected). -Sorting entries....done (49 comparisons). -Generating output file Rd2.ind....done (32 lines written, 0 warnings). -Output written in Rd2.ind. -Transcript written in Rd2.ilg. -This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015) (preloaded format=pdflatex) - restricted \write18 enabled. -entering extended mode -LaTeX2e <2015/01/01> -Babel <3.9l> and hyphenation patterns for 79 languages loaded. - -(./Rd2.tex -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/book.cls -Document Class: book 2014/09/29 v1.4h Standard LaTeX document class -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/bk10.clo)) -(/Library/Frameworks/R.framework/Resources/share/texmf/tex/latex/Rd.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ifthen.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/longtable.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/bm.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/alltt.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/verbatim.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/url/url.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/textcomp.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.def)) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/fontenc.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.def)) -(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/times.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/inconsolata/zi4.sty -`inconsolata-zi4' v1.05, 2014/06/22 Text macros for Inconsolata (msharpe) -(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty)) -(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/color.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg) -(/usr/local/texlive/2015/texmf-dist/tex/latex/pdftex-def/pdftex.def -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/infwarerr.sty) -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ltxcmds.sty))) -(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hyperref.sty -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty)) -(/usr/local/texlive/2015/texmf-dist/tex/generic/ifxetex/ifxetex.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/auxhook.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/kvoptions.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/pd1enc.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/hyperref.cfg)) - -Package hyperref Message: Driver (autodetected): hpdftex. - -(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hpdftex.def -(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty)) - -Package hyperref Warning: Option `hyperindex' has already been used, -(hyperref) setting the option has no effect on input line 377. - - -Package hyperref Warning: Option `pagebackref' has already been used, -(hyperref) setting the option has no effect on input line 377. - -) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/makeidx.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/inputenc.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.dfu) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ot1enc.dfu) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/omsenc.dfu) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.dfu))) -Writing index file Rd2.idx - -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.aux) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1cmr.fd) -(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1ptm.fd) -(/usr/local/texlive/2015/texmf-dist/tex/context/base/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -) (/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/nameref.sty -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/gettitlestring.sty)) -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.out) -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.out) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/inconsolata/t1zi4.fd) -(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1phv.fd) -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.toc) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/inconsolata/ts1zi4.fd) [1{/usr/lo -cal/texlive/2015/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [2] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [3] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [4] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [5] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [6] [7] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [8] -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.ind [9] - -LaTeX Font Warning: Font shape `T1/zi4/m/it' undefined -(Font) using `T1/zi4/m/n' instead on input line 4. - -[10]) -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.aux) - -LaTeX Font Warning: Some font shapes were not available, defaults substituted. - - ){/usr/local/texlive/2015/texmf-dist/fonts/enc/dvips/inconsolata/i4-ts1.enc}{/ -usr/local/texlive/2015/texmf-dist/fonts/enc/dvips/base/8r.enc}{/usr/local/texli -ve/2015/texmf-dist/fonts/enc/dvips/inconsolata/i4-t1-0.enc} -Output written on Rd2.pdf (10 pages, 83727 bytes). -Transcript written on Rd2.log. -This is makeindex, version 2.15 [TeX Live 2015] (kpathsea + Thai support). -Scanning input file Rd2.idx....done (12 entries accepted, 0 rejected). -Sorting entries....done (49 comparisons). -Generating output file Rd2.ind....done (32 lines written, 0 warnings). -Output written in Rd2.ind. -Transcript written in Rd2.ilg. -This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015) (preloaded format=pdflatex) - restricted \write18 enabled. -entering extended mode -LaTeX2e <2015/01/01> -Babel <3.9l> and hyphenation patterns for 79 languages loaded. - -(./Rd2.tex -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/book.cls -Document Class: book 2014/09/29 v1.4h Standard LaTeX document class -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/bk10.clo)) -(/Library/Frameworks/R.framework/Resources/share/texmf/tex/latex/Rd.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ifthen.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/longtable.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/bm.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/alltt.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/tools/verbatim.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/url/url.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/textcomp.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.def)) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/fontenc.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.def)) -(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/times.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/inconsolata/zi4.sty -`inconsolata-zi4' v1.05, 2014/06/22 Text macros for Inconsolata (msharpe) -(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty)) -(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/color.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/color.cfg) -(/usr/local/texlive/2015/texmf-dist/tex/latex/pdftex-def/pdftex.def -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/infwarerr.sty) -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/ltxcmds.sty))) -(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hyperref.sty -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty)) -(/usr/local/texlive/2015/texmf-dist/tex/generic/ifxetex/ifxetex.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/auxhook.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/kvoptions.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/pd1enc.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/hyperref.cfg)) - -Package hyperref Message: Driver (autodetected): hpdftex. - -(/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/hpdftex.def -(/usr/local/texlive/2015/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty)) - -Package hyperref Warning: Option `hyperindex' has already been used, -(hyperref) setting the option has no effect on input line 377. - - -Package hyperref Warning: Option `pagebackref' has already been used, -(hyperref) setting the option has no effect on input line 377. - -) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/makeidx.sty) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/inputenc.sty -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/t1enc.dfu) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ot1enc.dfu) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/omsenc.dfu) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1enc.dfu))) -Writing index file Rd2.idx - -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.aux) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/ts1cmr.fd) -(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1ptm.fd) -(/usr/local/texlive/2015/texmf-dist/tex/context/base/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -) (/usr/local/texlive/2015/texmf-dist/tex/latex/hyperref/nameref.sty -(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/gettitlestring.sty)) -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.out) -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.out) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/inconsolata/t1zi4.fd) -(/usr/local/texlive/2015/texmf-dist/tex/latex/psnfss/t1phv.fd) -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.toc) (/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/inconsolata/ts1zi4.fd) [1{/usr/lo -cal/texlive/2015/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [2] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [3] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [4] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [5] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [6] [7] -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) -(/usr/local/texlive/2015/texmf-dist/tex/latex/base/utf8.def) [8] -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.ind [9] - -LaTeX Font Warning: Font shape `T1/zi4/m/it' undefined -(Font) using `T1/zi4/m/n' instead on input line 4. - -[10]) -(/private/var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T/RtmpVBcQoS/Rd2pdf3500 -7b7b51b/Rd2.aux) - -LaTeX Font Warning: Some font shapes were not available, defaults substituted. - - ){/usr/local/texlive/2015/texmf-dist/fonts/enc/dvips/inconsolata/i4-ts1.enc}{/ -usr/local/texlive/2015/texmf-dist/fonts/enc/dvips/base/8r.enc}{/usr/local/texli -ve/2015/texmf-dist/fonts/enc/dvips/inconsolata/i4-t1-0.enc} -Output written on Rd2.pdf (10 pages, 83778 bytes). -Transcript written on Rd2.log. -Saving output to ‘SimTools-manual.pdf’ ... -Done -You may want to clean up by 'rm -Rf /var/folders/6h/ckff_c490ml7_lmhj4xqv3lw0000gp/T//RtmpVBcQoS/Rd2pdf35007b7b51b' diff --git a/SimTools.Rcheck/SimTools-Ex.R b/SimTools.Rcheck/SimTools-Ex.R deleted file mode 100644 index 3ddc1ce..0000000 --- a/SimTools.Rcheck/SimTools-Ex.R +++ /dev/null @@ -1,234 +0,0 @@ -pkgname <- "SimTools" -source(file.path(R.home("share"), "R", "examples-header.R")) -options(warn = 1) -base::assign(".ExTimings", "SimTools-Ex.timings", pos = 'CheckExEnv') -base::cat("name\tuser\tsystem\telapsed\n", file=base::get(".ExTimings", pos = 'CheckExEnv')) -base::assign(".format_ptime", -function(x) { - if(!is.na(x[4L])) x[1L] <- x[1L] + x[4L] - if(!is.na(x[5L])) x[2L] <- x[2L] + x[5L] - options(OutDec = '.') - format(x[1L:3L], digits = 7L) -}, -pos = 'CheckExEnv') - -### * -library('SimTools') - -base::assign(".oldSearch", base::search(), pos = 'CheckExEnv') -base::assign(".old_wd", base::getwd(), pos = 'CheckExEnv') -cleanEx() -nameEx("Siid") -### * Siid - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: Siid -### Title: Siid class -### Aliases: Siid as.Siid as.Siid.default is.iid - -### ** Examples - -# Generating iid data -chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -siid.obj <- Siid(chain) - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("Siid", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("Smcmc") -### * Smcmc - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: Smcmc -### Title: Smcmc class -### Aliases: Smcmc as.Smcmc as.Smcmc.default is.mcmc - -### ** Examples - -# Producing Markov chain -chain <- matrix(0, nrow = 1e3, ncol = 1) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -smcmc.obj <- Smcmc(chain) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("Smcmc", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("addCI") -### * addCI - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: addCI -### Title: Add simultaneous confidence interval to existing plot. -### Aliases: addCI - -### ** Examples - -chain <- matrix(0, ncol = 1, nrow = 1e3) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -chain <- Smcmc(list(chain)) -plot(density(chain$stacked[,1])) -CIs <- getCI(chain) -addCI(chain, CIs, component = 1) - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("addCI", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("boxCI") -### * boxCI - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: boxCI -### Title: Add simultaneous confidence interval to existing boxplot -### Aliases: boxCI - -### ** Examples - -output <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("boxCI", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("boxplot.Siid") -### * boxplot.Siid - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: boxplot.Siid -### Title: Boxplot for Siid -### Aliases: boxplot.Siid - -### ** Examples - -# Generating iid data -chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -siid.obj <- Siid(chain) -boxplot(siid.obj) - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("boxplot.Siid", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("getCI") -### * getCI - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: getCI -### Title: Calculates simultaneous confidence intervals. -### Aliases: getCI - -### ** Examples - -chain <- matrix(0, ncol = 1, nrow = 1e3) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -chain <- Smcmc(list(chain)) -plot(density(chain$stacked[,1])) -CIs <- getCI(chain) -addCI(chain, CIs, component = 1) - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("getCI", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("plot.Siid") -### * plot.Siid - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: plot.Siid -### Title: Plot Siid -### Aliases: plot.Siid - -### ** Examples - -# Generating iid data -chain <- matrix(rnorm(3*1e3), nrow = 1e3, ncol = 3) -siid.obj <- Siid(chain) -plot(siid.obj) - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("plot.Siid", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -cleanEx() -nameEx("plot.Smcmc") -### * plot.Smcmc - -flush(stderr()); flush(stdout()) - -base::assign(".ptime", proc.time(), pos = "CheckExEnv") -### Name: plot.Smcmc -### Title: Plot Smcmc -### Aliases: plot.Smcmc - -### ** Examples - -# Producing Markov chain -chain <- matrix(0, ncol = 1, nrow = 1e3) -chain[1,] <- 0 -err <- rnorm(1e3) -for(i in 2:1e3) -{ - chain[i,] <- .3*chain[i-1,] + err[i] -} -chain <- Smcmc(list(chain)) -plot(chain) - - - - -base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") -base::cat("plot.Smcmc", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") -### *

MU}p^MFhAB>Gko2F&s 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