Description Usage Arguments Details Value Note Author(s) References See Also Examples
Computes MCMC simulations from the poseterior distribution of the monotonic Bernstein polynomial regression function
1 2 |
x |
vector of covariate values |
y |
vector of response values |
m |
positive integer specifying the order of the Bernstein polynomial basis expansion. Default is half the number of observations in the data set. This value is reset with |
priors |
list of values of prior parameters. Values in the list must be named one of (with default values in parentheses) |
inits |
list of initial values for model parameters. Values in the list must be named one of |
n.sim |
number of MCMC simulations after burn-in and thinning. The total number of MCMC iterations run is |
n.burn |
number of simulations to burn |
n.thin |
keep every |
seed |
random number seed for the MCMC simulations |
Generates MCMC draws from the posterior distribution of the nonparametric Bernstein regression function as described in Curtis and Ghosh (2009). The main computation is performed by the C function isogibbs
.
An S3 object with class "biso" and the following components:
mcmctime |
the time it took to run the sampling algorithm. |
postdraws |
a data frame with posterior draws of all parameters |
W |
the "W" matrix |
x |
original |
y |
original |
m |
order of the Bernstein polynomial basis expansion |
DIC |
"original" DIC value as in Spiegelhalter et. al. (2002) |
DIC2 |
"alternative" DIC value as in Gelman et. al. (2004) |
pD |
effective number of parameters as in Spiegelhalter et. al. (2002) |
pD2 |
alternative effective number of parameters as in Gelman et. al. (2004) |
No further notes.
S. McKay Curtis with many helpful suggestions from Sujit K. Ghosh.
Curtis, S. M. and Ghosh, S. K. (2011). "A variable selection approach to monotonic regression with Bernstein polynomials."
Gelman, A., et. al. (2003). Bayesian Data Analysis. Chapman and Hall / CRC.
Speigelhalter, D. J., et. al. (2002). "Bayesian measures of model complexity and fit." JRSSB 64(4): 583–616.
pflat.biso
,fitted.biso
,plot.biso
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | ## Not run:
data(childgrowth)
## Run three different chains ##
out1 <- bisoreg(childgrowth$day, childgrowth$height,
m=80, n.sim=15000, n.thin=10)
out2 <- bisoreg(childgrowth$day, childgrowth$height,
m=80, n.sim=15000, n.thin=10)
out3 <- bisoreg(childgrowth$day, childgrowth$height,
m=80, n.sim=15000, n.thin=10)
## Convert to MCMC object ##
out <- list()
out[[1]] <- mcmc(out1$postdraws)
out[[2]] <- mcmc(out2$postdraws)
out[[3]] <- mcmc(out3$postdraws)
mcmcout <- mcmc.list(out)
## Gelman Rubin diagnostics ##
gelman.diag(mcmcout)
## Posterior probability of a flat function ##
pflat(out1)
## Create scatterplot and plot Bayesian regression fit ##
plot(out1, color="black", cl=F, lwd=2, xlab="day", ylab="height")
title("Child Growth Data")
## Compute isoreg fit ##
iout = isoreg(childgrowth$day, childgrowth$height)
lines(as.stepfun(iout), col.h="red", col.v="red", lwd=2)
## Compute monreg estimate of Dette et. al. ##
mout = monreg.wrapper(childgrowth$day, childgrowth$height)
lines(childgrowth$day, mout$est, lwd=2, col="blue")
## Compute local polynomial regression fit ##
lines(childgrowth$day,
predict(loess.wrapper(childgrowth$day, childgrowth$height)),
lwd=2, col="green")
## Add a legend ##
legend("topleft",
legend=c("bayes", "isoreg", "monreg", "loess"),
col=c("black", "red", "blue", "green"), lwd=2)
## Check sensitivity to the prior on p ##
## p ~ Beta(a=1,b=1) ##
outa1b1 <- bisoreg(childgrowth$day, childgrowth$height,
40, priors=list(a.p=1,b.p=1), n.sim=15000, n.thin=10)
## p ~ Beta(a=1,b=3) ##
outa1b3 <- bisoreg(childgrowth$day, childgrowth$height,
40, priors=list(a.p=1,b.p=3), n.sim=15000, n.thin=10)
## p ~ Beta(a=3,b=1) ##
outa3b1 <- bisoreg(childgrowth$day, childgrowth$height,
40, priors=list(a.p=3, b.p=1), n.sim=15000, n.thin=10)
## Create plot to compare model fits ##
plot(outa1b1,cl=F,color="black")
plot(outa1b3,cl=F,add=T,col="red")
plot(outa3b1,cl=F,add=T,col="green")
gplots:::smartlegend("left","top",
legend=c("a=1 b=1","a=1 b=3","a=3 b=1"),
col=c("black","red","green"),
lwd=1)
## Check sensitivity to the choice of M ##
outm20 <- bisoreg(childgrowth$day, childgrowth$height, m=20, n.sim=15000, n.thin=10)
outm30 <- bisoreg(childgrowth$day, childgrowth$height, m=30, n.sim=15000, n.thin=10)
outm40 <- bisoreg(childgrowth$day, childgrowth$height, m=40, n.sim=15000, n.thin=10)
## Create plot to compare model fits ##
plot(outm20, cl=F, col="blue")
plot(outm30, cl=F, add=T, col="red")
plot(outm40, cl=F, add=T, col="green")
plot(out1, cl=F, add=T, col="black")
gplots:::smartlegend("left", "top",
legend=c(20,30,40,80),
col=c("blue", "red", "green", "black"),
lwd=1)
## A method for choosing 'm' ##
## (from Sujit K. Ghosh) ##
## Piece-wise linear 'true' regression function ##
mu <- function(x){
ifelse(-3<=x & x<=-1, x, 0) +
ifelse(-1<x & x<1, -1, 0) +
ifelse(1<=x & x<3, x - 2, 0)
}
par(mfrow=c(2,2))
curve(mu, -2.9, 2.9)
## Simulate the data ##
n <- 100
x <- runif(n, -2.9, 2.9)
y <- mu(x) + rnorm(n, 0, 0.1)
## Fit initially with default 'm=n/2' ##
fit0 <- bisoreg(x, y, m=floor(n/2))
plot(fit0)
lines(sort(x), mu(sort(x)), col="blue")
fit0$DIC2
fit0$pD2
## Use effective number of parameters ##
## as new value of 'm' ##
fit <- bisoreg(x, y, m=ceiling(fit0$pD2))
plot(fit)
lines(sort(x), mu(sort(x)), col="blue")
fit$DIC2
fit$pD2
## Compare fits ##
plot(fitted(fit0), fitted(fit))
abline(0, 1)
mean(abs(y - fitted(fit0)))
mean(abs(y - fitted(fit)))
## End(Not run)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.