## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(dpi = 96, fig.width = 6, fig.height = 4, dev = "pdf")

## ----sh0, echo=FALSE--------------------------------------------------------------------
set.seed(666)
options("width"=90, "digits"=3)
knitr::opts_chunk$set(fig.path = "figs/")

## ----sh1--------------------------------------------------------------------------------
library(mc2d)
ndvar(1001)
conc    <- 10
cook    <- mcstoc(rempiricalD, values = c(1, 1/5, 1/50), prob = c(0.027, 0.373, 0.600))
serving <- mcstoc(rgamma, shape = 3.93, rate = 0.0806)
expo    <- conc * cook * serving
dose    <- mcstoc(rpois, lambda = expo)
r       <- 0.001
risk    <- 1 - (1 - r)^dose
EC1     <- mc(cook, serving, expo, dose, risk)
print(EC1)
summary(EC1)

## ----sh2--------------------------------------------------------------------------------
ndunc(101)
conc    <- mcstoc(rnorm,       type = "U",  mean = 10, sd = 2)
cook    <- mcstoc(rempiricalD, type = "V",  values = c(1, 1/5, 1/50), prob = c(0.027, 0.373, 0.600))
serving <- mcstoc(rgamma,      type = "V",  shape = 3.93, rate = 0.0806)
expo    <- conc * cook * serving
dose    <- mcstoc(rpois,       type = "VU", lambda = expo)
r       <- mcstoc(runif,       type = "U",  min = 0.0005, max = 0.0015)
risk    <- 1 - (1 - r)^dose
EC2     <- mc(conc, cook, serving, expo, dose, r, risk)
print(EC2, digits = 2)
summary(EC2)

## ----sh3, eval=FALSE--------------------------------------------------------------------
# conc    <- mcstoc(rnorm,       type = "U",  mean = 10, sd = 2)
# cook    <- mcstoc(rempiricalD, type = "V",  values = c(1, 1/5, 1/50), prob = c(0.027, 0.373, 0.600))
# serving <- mcstoc(rgamma,      type = "V",  shape = 3.93, rate = 0.0806)
# dose    <- mcstoc(rpois,       type = "VU", lambda = expo)
# r       <- mcstoc(runif,       type = "U",  min = 0.0005, max = 0.0015)

## ----sh3bis-----------------------------------------------------------------------------
x <- mcstoc(rnorm, mean = 2, sd = 3, rtrunc = TRUE, linf = 1.5, lsup = 2, lhs = TRUE)
summary(x)

## ----sh3ter-----------------------------------------------------------------------------
nu  <- ndunc()
tmp <- (1:nu) > (nu/2)
mcdata(tmp, type = "U")

## ----sh4, eval=FALSE--------------------------------------------------------------------
# expo <- conc * cook * serving   # U * V * V → VU
# risk <- 1 - (1 - r)^dose        # U * VU → VU

## ----sh4b-------------------------------------------------------------------------------
conc1    <- mcstoc(rnorm,  type = "U", mean = 10, sd = 2)
conc2    <- mcstoc(runif,  type = "U", min = 8, max = 12)
whichdist <- c(0.75, 0.25)
concbis   <- mcprobtree(whichdist, list("0" = conc1, "1" = conc2), type = "U")

## ----sh5--------------------------------------------------------------------------------
cook < 1
suppressWarnings(tmp <- log(mcstoc(runif, min = -1, max = 1)))
tmp
is.na(tmp)

## ----sh5bis-----------------------------------------------------------------------------
cornode(cook, serving, target = 0.5, result = TRUE)

## ----sh6, eval=FALSE--------------------------------------------------------------------
# EC2 <- mc(conc, cook, serving, expo, dose, r, risk)
# print(EC2)
# summary(EC2)

## ----sh10-------------------------------------------------------------------------------
modelEC3 <- mcmodel({
  conc    <- mcstoc(rnorm,       type = "U",  mean = 10, sd = 2)
  cook    <- mcstoc(rempiricalD, type = "V",  values = c(1, 1/5, 1/50), prob = c(0.027, 0.373, 0.600))
  serving <- mcstoc(rgamma,      type = "V",  shape = 3.93, rate = 0.0806)
  r       <- mcstoc(runif,       type = "U",  min = 0.0005, max = 0.0015)
  expo    <- conc * cook * serving
  dose    <- mcstoc(rpois,       type = "VU", lambda = expo)
  risk    <- 1 - (1 - r)^dose
  mc(conc, cook, serving, expo, dose, r, risk)
})
modelEC3

## ----sh11, eval=FALSE-------------------------------------------------------------------
# EC3 <- evalmcmod(modelEC3, nsv = 100, nsu = 10,   seed = 666)
# EC4 <- evalmcmod(modelEC3, nsv = 100, nsu = 1000, seed = 666)

## ----sh12, eval=FALSE-------------------------------------------------------------------
# modEC4 <- mcmodelcut({
#   ## First block: unidimensional nodes
#   {
#     cook    <- mcstoc(rempiricalD, type = "V",  values = c(0, 1/5, 1/50), prob = c(0.027, 0.373, 0.6))
#     serving <- mcstoc(rgamma,      type = "V",  shape = 3.93, rate = 0.0806)
#     conc    <- mcstoc(rnorm,       type = "U",  mean = 10, sd = 2)
#     r       <- mcstoc(runif,       type = "U",  min = 5e-04, max = 0.0015)
#   }
#   ## Second block: two-dimensional nodes → mc object
#   {
#     expo <- conc * cook * serving
#     dose <- mcstoc(rpois, type = "VU", lambda = expo)
#     risk <- 1 - (1 - r)^dose
#     res  <- mc(conc, cook, serving, expo, dose, r, risk)
#   }
#   ## Third block: statistics
#   {
#     list(
#       sum    = summary(res),
#       plot   = plot(res, draw = FALSE),
#       minmax = lapply(res, range),
#       tor    = tornado(res),
#       et     = sapply(res, sd)
#     )
#   }
# })
# res <- evalmccut(modEC4, nsv = 10001, nsu = 101, seed = 666)
# summary(res)

## ----sh14-------------------------------------------------------------------------------
tmp <- summary(EC2, probs = c(0.995, 0.999), digits = 12)
tmp$risk

## ----sh15, eval=FALSE-------------------------------------------------------------------
# hist(EC2)

## ----Function-hist, echo=FALSE, fig.cap="The `hist` function."--------------------------
hist(EC2)

## ----sh17, eval=FALSE-------------------------------------------------------------------
# plot(EC2)

## ----Function-plot, echo=FALSE, fig.cap="The `plot` function."--------------------------
plot(EC2)

## ----sh17ter, eval=FALSE----------------------------------------------------------------
# spaghetti(EC2)

## ----Function-spaghetti, echo=FALSE, fig.cap="The `spaghetti` function."----------------
spaghetti(EC2)

## ----sh19-------------------------------------------------------------------------------
torEC2 <- tornado(EC2)
plot(torEC2)

## ----Function-plottor, echo=FALSE, fig.cap="The `plot.tornado` function."---------------
plot(torEC2)

## ----sh19c------------------------------------------------------------------------------
tornadounc(EC2, output = "risk", quant = .99)

## ----sh19d------------------------------------------------------------------------------
mcratio(risk)

## ----sh19ter----------------------------------------------------------------------------
tmp  <- unmc(EC2, drop = TRUE)
dimu <- ncol(tmp$risk)
coef <- sapply(1:dimu, function(x) lm(tmp$risk[, x] ~ tmp$dose[, x])$coef)
apply(coef, 1, summary)

## ----sh19ter_b--------------------------------------------------------------------------
mcstoc(runif, nvariates = 3, min = c(1, 2, 3), max = 4)

## ----sh19quatr--------------------------------------------------------------------------
lim <- mcdata(c(1, 2, 3), type = "0", nvariates = 3)
mcstoc(runif, nvariates = 3, min = lim, max = 4)

## ----sh20-------------------------------------------------------------------------------
(p <- mcstoc(rdirichlet,    type = "U",  nvariates = 3, alpha = c(2, 3, 5)))
s  <- mcstoc(rmultinomial, type = "VU", nvariates = 3, size = 500, prob = p)
summary(s)

## ----sh21-------------------------------------------------------------------------------
sigma <- matrix(c(10, 2, -5, 2, 10, -5, -5, -5, 10), ncol = 3)
(x   <- mcstoc(rmultinormal, type = "V", nvariates = 3, mean = c(100, 150, 250),
               sigma = as.vector(sigma)))
cor(x[, 1, ])

## ----sh21b------------------------------------------------------------------------------
m   <- mcdata(c(100, 150, 250), type = "0", nvariates = 3)
mun <- mcstoc(rnorm,        type = "U",  nvariates = 3, mean = m, sd = 20)
x   <- mcstoc(rmultinormal, type = "VU", nvariates = 3, mean = mun, sigma = as.vector(sigma))
cor(x[, 1, ])

## ----sh22-------------------------------------------------------------------------------
val <- c(100, 150, 170, 200)
pr  <- c(6, 12, 6, 6)
out <- c("min", "mean", "max")
(x  <- mcstoc(rempiricalD, type = "U",  outm = out, nvariates = 30, values = val, prob = pr))
mcstoc(rempiricalD, type = "VU", values = x)

## ----sh23-------------------------------------------------------------------------------
conc1 <- mcstoc(rnorm,  type = "U",  mean = 10, sd = 2)
conc2 <- mcstoc(runif,  type = "U",  min = 8, max = 12)
conc  <- mcdata(c(conc1, conc2), type = "U", nvariates = 2)

cook    <- mcstoc(rempiricalD, type = "V",  values = c(1, 1/5, 1/50), prob = c(0.027, 0.373, 0.600))
serving <- mcstoc(rgamma,      type = "V",  shape = 3.93, rate = 0.0806)
expo    <- conc * cook * serving
dose    <- mcstoc(rpois,       type = "VU", nvariates = 2, lambda = expo)
r       <- mcstoc(runif,       type = "U",  min = 0.0005, max = 0.0015)
risk    <- 1 - (1 - r)^dose
EC5     <- mc(conc, risk)
summary(EC5)

## ----sh24-------------------------------------------------------------------------------
mconc   <- mcdata(c(10, 14), type = "0",  nvariates = 2)
conc    <- mcstoc(rnorm,       type = "U",  nvariates = 2, mean = mconc, sd = 2)
cook    <- mcstoc(rempiricalD, type = "V",  values = c(1, 1/5, 1/50), prob = c(0.027, 0.373, 0.600))
serving <- mcstoc(rgamma,      type = "V",  shape = 3.93, rate = 0.0806)
expo    <- conc * cook * serving
dose    <- mcstoc(rpois,       type = "VU", nvariates = 2, lambda = expo)
dosetot <- mcapply(dose, margin = "variates", fun = sum)
r       <- mcstoc(runif,       type = "U",  min = 0.0005, max = 0.0015)
risk    <- 1 - (1 - r)^dosetot
EC6     <- mc(conc, risk)
summary(EC6)

## ----Crypto1, echo=FALSE----------------------------------------------------------------
library(mc2d)
inca <- structure(c(0, 22.08, 60, 64.4, 72, 82.8, 90, 96, 100, 110, 120,  137.5, 144, 150, 160, 162.5, 165, 180, 182.5, 184, 192, 192.5,  200, 216, 220, 225, 230, 240, 250, 264, 270, 276, 288, 290, 300,  304, 312.8, 320, 322, 325, 330, 336, 340, 350, 360, 370, 375,  380, 384, 390, 400, 414, 420, 425, 430, 432, 432.5, 440, 442,  450, 456, 460, 460.8, 464, 470, 470.4, 480, 490, 500, 504, 510,  510.4, 516, 520, 525, 525.6, 528, 530, 540, 544, 550, 552, 560,  562, 565, 570, 576, 580, 582.5, 584, 585.6, 590, 596, 600, 606,  610, 614, 620, 625, 630, 635.4, 640, 648, 650, 656.2, 660, 664.4,  670, 670.4, 672, 675, 680, 682, 690, 696, 700, 710, 716, 720,  730, 730.4, 740, 744, 750, 756, 760, 774.8, 780, 784, 792, 796,  800, 810, 820, 828, 830, 840, 850, 850.4, 860, 864, 866.4, 870,  880, 890, 900, 908, 910, 915.2, 920, 930, 936, 950, 960, 970,  980, 984, 986.4, 990, 996, 1000, 1015.2, 1020, 1028, 1032, 1036,  1040, 1042, 1050, 1070, 1075, 1078.8, 1080, 1090, 1096, 1100,  1110, 1120, 1126.4, 1128, 1130, 1140, 1148, 1150, 1152, 1160,  1170, 1175, 1176.2, 1190, 1196, 1200, 1214, 1220, 1230, 1240,  1248, 1250, 1260, 1276, 1280, 1290, 1296, 1300, 1320, 1322, 1330,  1340, 1350, 1360, 1370, 1386.4, 1400, 1410, 1414, 1420, 1430,  1440, 1446, 1450, 1460, 1480, 1500, 1520, 1530, 1550, 1560, 1600,  1650, 1680, 1696, 1700, 1710, 1720, 1750, 1760, 1800, 1830, 1840,  1850, 1900, 1920, 1936, 1954, 1980, 1990, 2000, 2014, 2050, 2100,  2200, 2220, 2248, 2250, 2276, 2300, 2310, 2340, 2400, 2550, 2568,  2700, 2720, 2784, 2820, 2876, 3000, 3100, 3108, 3200, 2578, 7,  1, 8, 14, 3, 1, 1, 10, 1, 250, 1, 2, 120, 8, 6, 1, 5, 3, 12,  5, 5, 375, 2, 8, 7, 41, 408, 53, 4, 24, 7, 3, 2, 217, 1, 1, 44,  9, 1, 31, 1, 1, 17, 294, 5, 3, 9, 3, 12, 525, 5, 23, 1, 3, 4,  1, 28, 3, 154, 2, 5, 1, 2, 6, 1, 299, 8, 148, 1, 2, 1, 1, 8,  3, 1, 2, 14, 20, 1, 18, 2, 20, 6, 1, 8, 2, 8, 1, 1, 1, 4, 1,  487, 3, 5, 1, 7, 1, 5, 1, 24, 3, 17, 1, 42, 1, 2, 1, 1, 1, 16,  1, 3, 1, 30, 4, 1, 183, 4, 1, 5, 1, 141, 1, 14, 1, 12, 1, 2,  1, 206, 6, 2, 1, 4, 92, 10, 1, 5, 1, 3, 5, 5, 2, 87, 1, 1, 1,  5, 5, 4, 4, 78, 1, 3, 2, 1, 16, 1, 133, 1, 5, 1, 1, 1, 4, 1,  43, 1, 1, 1, 30, 1, 1, 7, 2, 6, 1, 1, 3, 3, 1, 10, 1, 5, 1, 1,  1, 1, 1, 159, 2, 1, 1, 10, 1, 16, 4, 2, 5, 3, 1, 3, 11, 4, 1,  2, 12, 5, 1, 1, 44, 3, 2, 1, 2, 17, 1, 4, 1, 1, 17, 1, 1, 3,  4, 18, 14, 4, 1, 2, 1, 1, 1, 2, 12, 1, 2, 1, 1, 1, 1, 1, 3, 1,  20, 1, 1, 1, 7, 1, 1, 3, 1, 2, 2, 1, 6, 1, 1, 1, 1, 1, 1, 1,  2, 1, 1, 2), .Dim = c(270L, 2L))
inca <- rep(inca[, 1], inca[, 2]) / 1000

## ----Function-inca, echo=FALSE, fig.cap="Histogram of daily tap water intake."----------
hist(inca, xlab = "l/day", freq = FALSE, main = "")

## ----Crypto3----------------------------------------------------------------------------
ndvar(1001)
ndunc(101)
mcstoc(rempiricalD, type = "V", values = inca)

## ----Crypto4, fig.show='hide'-----------------------------------------------------------
library(fitdistrplus)
pzero    <- sum(inca == 0) / length(inca)
inca_non_0 <- inca[inca != 0]
descdist(inca_non_0)

## ----Function-descdist, echo=FALSE, fig.cap="Graph from `descdist`.", results='hide', message=FALSE----
descdist(inca_non_0)

## ----Crypto6----------------------------------------------------------------------------
Adj_water <- fitdist(inca_non_0, "lnorm", method = "mle")
meanlog   <- Adj_water$est[1]
sdlog     <- Adj_water$est[2]
summary(Adj_water)

## ----Crypto7bis, eval=FALSE-------------------------------------------------------------
# Boot       <- bootdist(Adj_water, bootmethod = "param", niter = ndunc())
# Mean_conso <- mcdata(Boot$estim$meanlog, type = "U")
# Sd_conso   <- mcdata(Boot$estim$sdlog,   type = "U")
# conso1     <- mcstoc(rlnorm, type = "VU", meanlog = Mean_conso, sdlog = Sd_conso)

## ----Crypto8----------------------------------------------------------------------------
conso0 <- mcdata(0, type = "V")
conso1 <- mcstoc(rlnorm, type = "V", meanlog = meanlog, sdlog = sdlog)
v      <- mcprobtree(c(pzero, 1 - pzero), list("0" = conso0, "1" = conso1), type = "V")
summary(v)

## ----Crypto9----------------------------------------------------------------------------
datDR <- list(dose = c(30, 100, 300, 500, 1000, 10000, 100000, 1000000),
              pi   = c(2, 4, 2, 5, 2, 3, 1, 1),
              ni   = c(5, 8, 3, 6, 2, 3, 1, 1))

estDR <- function(pos, ref) {
  suppressWarnings(
    -glm(cbind(ref$ni - pos, pos) ~ ref$dose + 0,
         binomial(link = "log"))$coefficients)
}

ml <- 1 - exp(-estDR(datDR$pi, datDR) * datDR$dose)

DR <- function(n) {
  boot <- matrix(rbinom(length(datDR$dose) * n, datDR$ni, ml), nrow = length(datDR$dose))
  apply(boot, 2, estDR, ref = datDR)
}
r <- mcstoc(DR, type = "U")
summary(r)

## ----Crypto10---------------------------------------------------------------------------
Rr <- mcstoc(rbeta, type = "U", shape1 = 2.65, shape2 = 3.64)
w  <- mcstoc(rbeta, type = "V", shape1 = 2.6,  shape2 = 3.4)

## ----Crypto11---------------------------------------------------------------------------
Oo <- 2
l  <- (Oo + mcstoc(rnbinom, type = "U", size = Oo + 1, prob = Rr)) / 100

## ----Crypto12---------------------------------------------------------------------------
Or <- l * v * w
P  <- 10000 * (1 - exp(-r * Or))
summary(P)

## ----Crypto13, eval=FALSE---------------------------------------------------------------
# Oo <- mcdata(c(0, 1, 2, 5, 10, 20, 50, 100, 1000), type = "0", nvariates = 9)

