--- title: "example" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{example} %\VignetteEncoding{UTF-8} %\VignetteEngine{knitr::rmarkdown} editor_options: chunk_output_type: console bibliography: references.bib nocite: | @Wang2014, @Wang2007, @Lunn2000, @West1993, @Liang2007 --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width=8, fig.height=8 ) ``` ```{r setup} library(dsample) ``` ## Multi-Modes Detection Please run `demo(mix2)` and `demo(mix3)`. ```{r echo=FALSE, out.width="45%"} expr <- expression((x1*(1-x2))^5 * (x2*(1-x1))^3 * (1-x1*(1-x2)-x2*(1-x1))^37) sets <- list(x1=runif(1e4), x2=runif(1e4)) smp <- dsample(expr=expr, rpmat=sets, nk=1e3, n=1e3) op <- summary(smp, n=10, k=2) # op$means # op$modes # do.call(cbind, lapply(split(op$X, op$grp), colMeans)) plot(op, which=2) expr <- expression( 1/3*mnormt::dmnorm(x=cbind(x1,x2), mean=c(-8,-8), varcov=matrix(c(1,0.9,0.9,1), ncol=2)) + 1/3*mnormt::dmnorm(x=cbind(x1,x2), mean=c(6,6), varcov=matrix(c(1,-0.9,-0.9,1), ncol=2)) + 1/3*mnormt::dmnorm(x=cbind(x1,x2), mean=c(0,0), varcov=matrix(c(1,0,0,1), ncol=2))) sets <- list(x1=runif(n=1e3, min=-12, max=11), x2=runif(n=1e3, min=-12, max=11)) y <- eval(expr=expr, env=sets) smp <- dsample(expr=expr, rpmat=sets, nk=1e3, n=1e3) op <- summary(smp, k=3) # op$means # op$modes # do.call(cbind, lapply(split(op$X, op$grp), colMeans)) plot(op, which=2) ``` ## 6.1 Space Shuttle Challenger disaster Data are taken from @Dalal1989. Details are described in @Dezfuli2009 on [pages 144--146](https://ntrs.nasa.gov/api/citations/20090023159/downloads/20090023159.pdf). ```{r echo=FALSE} ## data y <- c( 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0) temp <- c( 53, 57, 58, 63, 66, 67, 67, 67, 68, 69, 70, 70, 70, 70, 72, 73, 75, 75, 76, 76, 78, 79, 81) ## Initialization len <- length(y) fit <- glm(y~temp, family=binomial(link="logit")) alpha.hat <- coef(fit)[1] gamma <- 0.577216 b <- exp(alpha.hat + gamma) nd <- 1e4 ``` ```{r} expr <- str2expression(" lp <- 0 for(i in 1:len) lp <- lp + y[i] * log(exp(alpha + beta*temp[i])/(1+exp(alpha + beta*temp[i]))) for(i in 1:len) lp <- lp + (1-y[i])*log(1/(1+exp(alpha + beta*temp[i]))) lp <- lp + alpha - exp(alpha)/b lp <- exp(lp) ") sets <- list( alpha=runif(n=nd, min=10, max=20), beta=runif(n=nd, min=-0.3, max=-0.15) ) smp <- dsample(expr=expr, rpmat=sets, nk=1e3, n=1e3) op <- summary(smp) op$means op$stdevs ``` ## 6.2 Beetle Data are taken from @Prentice1976. Details are described in [OpenBUGS Examples Vol 2. Beetles](https://chjackson.github.io/openbugsdoc/Examples/Beetles.html). ```{r echo=FALSE} wi <- c(1.6907, 1.7242, 1.7552, 1.7842, 1.8113, 1.8369, 1.8610, 1.8839); yi <- c(6, 13, 18, 28, 52, 53, 61, 60); ni <- c(59, 60, 62, 56, 63, 59, 62, 60); data <- data.frame(wi=wi, yi=yi, ni=ni); # Given Initial values a <- 0.25 b <- 4.0 c1 <- 2.0 d <- 10.0 e <- 2.000004 f <- 1e3 # Specifying the range on the parameters nd <- 1e4 len <- nrow(data) ``` ```{r} expr <- str2expression(" sigma <- exp(log.sigma) m1 <- exp(log.m1) lp <- 0 for(i in 1:len) lp <- lp + yi[i]*m1*log((exp((wi[i]-mu)/sigma)/(1+exp((wi[i]-mu)/sigma)))) for(i in 1:len) lp <- lp + (ni[i]-yi[i])*log(( 1- (exp((wi[i]-mu)/sigma)/(1+exp((wi[i]-mu)/sigma)))^m1 )) lp <- lp + (a-1)*log.m1 - 2*(e+1)*log.sigma lp <- lp - 0.5*((mu-c1)/d)^2 lp <- lp - m1/b - 1/(f*sigma^2) lp <- exp(lp) ") sets <- list( mu=runif(nd, min=1.75, max=1.85), log.sigma=runif(nd, min=-5, max=-3), log.m1=runif(nd, min=-2, max=0.1) ) smp <- dsample(expr=expr, rpmat=sets, nk=1e3, n=1e3) op <- summary(smp) op$means op$stdevs ``` ## 6.3 Dugongs Data are taken from @Ratkowsky1986. Details are described in [OpenBUGS Examples Vol 2.Dugongs](https://chjackson.github.io/openbugsdoc/Examples/Dugongs.html). ```{r echo=FALSE} x.age <- c( 1.0, 1.5, 1.5, 1.5, 2.5, 4.0, 5.0, 5.0, 7.0, 8.0, 8.5, 9.0, 9.5, 9.5, 10.0, 12.0, 12.0, 13.0, 13.0, 14.5, 15.5, 15.5, 16.5, 17.0, 22.5, 29.0, 31.5) y.length <- c(1.80, 1.85, 1.87, 1.77, 2.02, 2.27, 2.15, 2.26, 2.35, 2.47, 2.19, 2.26, 2.40, 2.39, 2.41, 2.50, 2.32, 2.43, 2.47, 2.56, 2.65, 2.47, 2.64, 2.56, 2.70, 2.72, 2.57) data <- data.frame(x.age=x.age, y.length=y.length) # Given Initial values len <- nrow(data) k <- 10^(-3) tau.alpha <- 10^(-4) tau.beta <- 10^(-4) nd <- 1e4 ``` ```{r} expr <- str2expression(" lp <- (len/2 + k - 1)*log(tau) for(i in 1:len) lp <- lp - tau*0.5*(y.length[i] - alpha+beta*gamma^x.age[i])^2 lp <- lp - tau*k - tau.alpha*alpha^2*0.5 - tau.beta*beta^2*0.5 lp <- exp(lp) ") sets <- list( alpha=runif(nd, min=2, max=3), beta=runif(nd, min=0.5, max=1.5), gamma=runif(nd, min=0.5, max=1.5), tau=runif(nd, min=0.2, max=200) ) smp <- dsample(expr=expr, rpmat=sets, nk=1e3, n=1e3) op <- summary(smp) op$means op$stdevs ``` ## 6.4 British Coal Mining Data Data are taken from @Diggle1988. ```{r echo=FALSE} x <- c(4, 5, 4, 1, 0, 4, 3, 4, 0, 6, 3, 3, 4, 0, 2, 6, 3, 3, 5, 4, 5, 3, 1, 4, 4, 1, 5, 5, 3, 4, 2, 5, 2, 2, 3, 4, 2, 1, 3, 2, 2, 1, 1, 1, 1, 3, 0, 0, 1, 0, 1, 1, 0, 0, 3, 1, 0, 3, 2, 2, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 2, 1, 0, 0, 0, 1, 1, 0, 2, 3, 3, 1, 1, 2, 1, 1, 1, 1, 2, 4, 2, 0, 0, 0, 1, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1); len <- length(x); nd <- 1e4 cum.x.until.k <- cumsum(x); cum.x.after.k <- sum(x) - cum.x.until.k; ``` ```{r} expr <- str2expression(" ll <- 0 ll <- ll + (cum.x.until.k[kappa]-0.5)*log(theta) + (cum.x.after.k[kappa]-0.5)*log(lambda) - kappa*theta - (len-kappa)*lambda lp <- ll + 1.5*log(alpha) + 1.5*log(beta) - (theta+1)*alpha - (lambda+1)*beta lp <- exp(lp) ") sets <- list( kappa=sample(x=30:50, size=nd, replace=TRUE), theta=runif(nd, min=2.2, max=4), lambda=runif(nd, min=0.6, max=1.4), alpha=runif(nd, min=0, max=2), beta=runif(nd, min=0, max=4) ) smp <- dsample(expr=expr, rpmat=sets, nk=1e3, n=1e3) op <- summary(smp) op$means op$stdevs ``` ## 6.5 Nuclear Pump Data Data are taken from @Gaver1987. Details are described in [OpenBUGS Examples Vol 2.](https://chjackson.github.io/openbugsdoc/Examples/Pumps.html). ```{r echo=FALSE} time <- c(94.32, 15.72, 62.88, 125.76, 5.24, 31.44, 1.05, 1.05, 2.10, 10.48) failure <- c( 5, 1, 5, 14, 3, 19, 1, 1, 4, 22) data <- data.frame(time=time, failure=failure) len <- nrow(data) alpha <- 0.54 gg <- 2.20 delta <- 1.11 nd <- 1e5 ``` ```{r} expr <- str2expression(" ll <- 0 for(i in 1:len){ sum.cmd <- gsub(' ', '', paste('ll <- ll +(failure[', i,']+alpha-1)*log(lambda', i,')')) eval(parse(text=sum.cmd)) } for(i in 1:len){ sum.cmd <- gsub(' ', '', paste('ll <- ll - (time[', i,']+bb)*lambda', i)) eval(parse(text=sum.cmd)) } lp <- ll + (10*alpha+gg-1)*log(bb) - delta*bb lp <- exp(lp) ") sets <- list( bb=runif(nd, 0, 4), lambda1=runif(nd, 0, 0.2), lambda2=runif(nd, 0, 0.4), lambda3=runif(nd, 0, 0.25), lambda4=runif(nd, 0, 0.25), lambda5=runif(nd, 0, 2), lambda6=runif(nd, 0, 1.5), lambda7=runif(nd, 0, 2), lambda8=runif(nd, 0, 2), lambda9=runif(nd, 0, 4), lambda10=runif(nd, 0, 3.5) ) smp <- dsample(expr=expr, rpmat=sets, nk=5e4, n=3e3) op <- summary(smp) op$means op$stdevs ``` ## References