geom_hdr_fun | R Documentation |
Compute and plot the highest density regions (HDRs) of a bivariate pdf.
geom_hdr_fun()
draws filled regions, and geom_hdr_lines_fun()
draws lines outlining the regions.
Note, the plotted objects have probabilities mapped to the alpha
aesthetic by default.
stat_hdr_fun( mapping = NULL, data = NULL, geom = "hdr_fun", position = "identity", ..., fun, args = list(), probs = c(0.99, 0.95, 0.8, 0.5), xlim = NULL, ylim = NULL, n = 100, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE ) geom_hdr_fun( mapping = NULL, data = NULL, stat = "hdr_fun", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE )
mapping |
Set of aesthetic mappings created by |
data |
The data to be displayed in this layer. There are three options: If A A |
geom |
The geometric object to use to display the data, either as a
|
position |
Position adjustment, either as a string naming the adjustment
(e.g. |
... |
Other arguments passed on to |
fun |
A function, the joint probability density function, must be vectorized in its first two arguments; see examples. |
args |
Named list of additional arguments passed on to |
probs |
Probabilities to compute highest density regions for. |
xlim, ylim |
Range to compute and draw regions. If |
n |
Resolution of grid |
na.rm |
If |
show.legend |
logical. Should this layer be included in the legends?
|
inherit.aes |
If |
stat |
The statistical transformation to use on the data for this
layer, either as a |
geom_hdr_fun()
and geom_hdr_lines_fun()
understand the following aesthetics (required
aesthetics are in bold):
x
y
alpha
color
fill (only geom_hdr_fun
)
group
linetype
linewidth
subgroup
The probability associated with the highest density region, specified
by probs
.
# HDRs of the bivariate exponential f <- function(x, y) dexp(x) * dexp(y) ggplot() + geom_hdr_fun(fun = f, xlim = c(0, 10), ylim = c(0, 10)) # HDRs of a custom parametric model # generate example data n <- 1000 th_true <- c(3, 8) rdata <- function(n, th) { gen_single_obs <- function(th) { rchisq(2, df = th) # can be anything } df <- replicate(n, gen_single_obs(th)) setNames(as.data.frame(t(df)), c("x", "y")) } data <- rdata(n, th_true) # estimate unknown parameters via maximum likelihood likelihood <- function(th) { th <- abs(th) # hack to enforce parameter space boundary log_f <- function(v) { x <- v[1]; y <- v[2] dchisq(x, df = th[1], log = TRUE) + dchisq(y, df = th[2], log = TRUE) } sum(apply(data, 1, log_f)) } (th_hat <- optim(c(1, 1), likelihood, control = list(fnscale = -1))$par) # plot f for the give model f <- function(x, y, th) dchisq(x, df = th[1]) * dchisq(y, df = th[2]) ggplot(data, aes(x, y)) + geom_hdr_fun(fun = f, args = list(th = th_hat)) + geom_point(size = .25, color = "red") + xlim(0, 30) + ylim(c(0, 30)) ggplot(data, aes(x, y)) + geom_hdr_lines_fun(fun = f, args = list(th = th_hat)) + geom_point(size = .25, color = "red") + xlim(0, 30) + ylim(c(0, 30))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.