8 changed files with 225 additions and 6 deletions
@ -0,0 +1,96 @@ |
|||
#' Compute and display a univariate averaged shifted histogram (polynomial kernel) |
|||
#' |
|||
#' See \code{\link[ash]{bin1}} & \code{\link[ash]{ash1}} for more information. |
|||
#' |
|||
#' @inheritParams ggplot2::geom_area |
|||
#' @param geom Use to override the default Geom |
|||
#' @param ab half-open interval for bins \emph{[a,b)}. If no value is specified, |
|||
#' the range of x is stretched by \code{5\%} at each end and used the |
|||
#' interval. |
|||
#' @param nbin number of bins desired. Default \code{50}. |
|||
#' @param m integer smoothing parameter; Default \code{5}. |
|||
#' @param kopt vector of length 2 specifying the kernel, which is proportional |
|||
#' to \emph{( 1 - abs(i/m)^kopt(1) )i^kopt(2)}; (2,2)=biweight (default); |
|||
#' (0,0)=uniform; (1,0)=triangle; (2,1)=Epanechnikov; (2,3)=triweight. |
|||
#' @references David Scott (1992), \emph{"Multivariate Density Estimation,"} |
|||
#' John Wiley, (chapter 5 in particular).\cr |
|||
#' \cr |
|||
#' B. W. Silverman (1986), \emph{"Density Estimation for Statistics |
|||
#' and Data Analysis,"} Chapman & Hall. |
|||
#' @section Aesthetics: |
|||
#' \code{geom_ash} understands the following aesthetics (required aesthetics |
|||
#' are in bold): |
|||
#' \itemize{ |
|||
#' \item \strong{\code{x}} |
|||
#' \item \code{alpha} |
|||
#' \item \code{color} |
|||
#' \item \code{fill} |
|||
#' \item \code{linetype} |
|||
#' \item \code{size} |
|||
#' } |
|||
#' @section Computed variables: |
|||
#' \describe{ |
|||
#' \item{\code{estimate}}{ash estimates} |
|||
#' } |
|||
#' @export |
|||
stat_ash <- function(mapping = NULL, data = NULL, geom = "area", |
|||
position = "stack", |
|||
ab = NULL, nbin = 50, m = 5, kopt = c(2, 2), |
|||
show.legend = NA, inherit.aes = TRUE, ...) { |
|||
|
|||
layer( |
|||
data = data, |
|||
mapping = mapping, |
|||
stat = StatAsh, |
|||
geom = geom, |
|||
position = position, |
|||
show.legend = show.legend, |
|||
inherit.aes = inherit.aes, |
|||
params = list( |
|||
ab = ab, |
|||
nbin = nbin, |
|||
m = m, |
|||
kopt = kopt, |
|||
... |
|||
) |
|||
) |
|||
|
|||
} |
|||
|
|||
#' @export |
|||
StatAsh <- ggproto("StatAsh", Stat, |
|||
|
|||
required_aes = c("x"), |
|||
|
|||
default_aes = aes(y = ..estimate.., colour = NA, fill = "gray20", size = 0.5, |
|||
linetype = 1, alpha = NA), |
|||
|
|||
|
|||
setup_params = function(data, params) { |
|||
if (!is.null(data$y) || !is.null(params$y)) { |
|||
stop("stat_ash() must not be used with a y aesthetic.", call. = FALSE) |
|||
} |
|||
params |
|||
}, |
|||
|
|||
compute_group = function(data, scales, ab = NULL, |
|||
nbin = 50, m = 5, kopt = c(2, 2)) { |
|||
|
|||
if (is.null(ab)) ab <- nicerange(data$x) |
|||
|
|||
bin_res <- ash::bin1(data$x, ab, nbin) |
|||
ash_msg <- capture.output(ash_res <- ash1(bin_res)) |
|||
|
|||
if (ash_res$ier == 1) message("Estimate nonzero outside interval ab.") |
|||
|
|||
data.frame(x=ash_res$x, estimate=ash_res$y) |
|||
|
|||
} |
|||
|
|||
) |
|||
|
|||
nicerange <- function (x, beta = 0.1) { |
|||
ab <- range(x) |
|||
del <- ((ab[2] - ab[1]) * beta)/2 |
|||
return(c(ab + c(-del, del))) |
|||
} |
After Width: | Height: | Size: 88 KiB |
@ -0,0 +1,88 @@ |
|||
% Generated by roxygen2 (4.1.1): do not edit by hand |
|||
% Please edit documentation in R/geom_ash.r |
|||
\name{stat_ash} |
|||
\alias{stat_ash} |
|||
\title{Compute and display a univariate averaged shifted histogram (polynomial kernel)} |
|||
\usage{ |
|||
stat_ash(mapping = NULL, data = NULL, geom = "area", position = "stack", |
|||
ab = NULL, nbin = 50, m = 5, kopt = c(2, 2), show.legend = NA, |
|||
inherit.aes = TRUE, ...) |
|||
} |
|||
\arguments{ |
|||
\item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or |
|||
\code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the |
|||
default), is combined with the default mapping at the top level of the |
|||
plot. You only need to supply \code{mapping} if there isn't a mapping |
|||
defined for the plot.} |
|||
|
|||
\item{data}{A data frame. If specified, overrides the default data frame |
|||
defined at the top level of the plot.} |
|||
|
|||
\item{geom}{Use to override the default Geom} |
|||
|
|||
\item{position}{Position adjustment, either as a string, or the result of |
|||
a call to a position adjustment function.} |
|||
|
|||
\item{ab}{half-open interval for bins \emph{[a,b)}. If no value is specified, |
|||
the range of x is stretched by \code{5\%} at each end and used the |
|||
interval.} |
|||
|
|||
\item{nbin}{number of bins desired. Default \code{50}.} |
|||
|
|||
\item{m}{integer smoothing parameter; Default \code{5}.} |
|||
|
|||
\item{kopt}{vector of length 2 specifying the kernel, which is proportional |
|||
to \emph{( 1 - abs(i/m)^kopt(1) )i^kopt(2)}; (2,2)=biweight (default); |
|||
(0,0)=uniform; (1,0)=triangle; (2,1)=Epanechnikov; (2,3)=triweight.} |
|||
|
|||
\item{show.legend}{logical. Should this layer be included in the legends? |
|||
\code{NA}, the default, includes if any aesthetics are mapped. |
|||
\code{FALSE} never includes, and \code{TRUE} always includes.} |
|||
|
|||
\item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, |
|||
rather than combining with them. This is most useful for helper functions |
|||
that define both data and aesthetics and shouldn't inherit behaviour from |
|||
the default plot specification, e.g. \code{\link{borders}}.} |
|||
|
|||
\item{...}{other arguments passed on to \code{\link{layer}}. There are |
|||
three types of arguments you can use here: |
|||
|
|||
\itemize{ |
|||
\item Aesthetics: to set an aesthetic to a fixed value, like |
|||
\code{color = "red"} or \code{size = 3}. |
|||
\item Other arguments to the layer, for example you override the |
|||
default \code{stat} associated with the layer. |
|||
\item Other arguments passed on to the stat. |
|||
}} |
|||
} |
|||
\description{ |
|||
See \code{\link[ash]{bin1}} & \code{\link[ash]{ash1}} for more information. |
|||
} |
|||
\section{Aesthetics}{ |
|||
|
|||
\code{geom_ash} understands the following aesthetics (required aesthetics |
|||
are in bold): |
|||
\itemize{ |
|||
\item \strong{\code{x}} |
|||
\item \code{alpha} |
|||
\item \code{color} |
|||
\item \code{fill} |
|||
\item \code{linetype} |
|||
\item \code{size} |
|||
} |
|||
} |
|||
|
|||
\section{Computed variables}{ |
|||
|
|||
\describe{ |
|||
\item{\code{estimate}}{ash estimates} |
|||
} |
|||
} |
|||
\references{ |
|||
David Scott (1992), \emph{"Multivariate Density Estimation,"} |
|||
John Wiley, (chapter 5 in particular).\cr |
|||
\cr |
|||
B. W. Silverman (1986), \emph{"Density Estimation for Statistics |
|||
and Data Analysis,"} Chapman & Hall. |
|||
} |
|||
|
Loading…
Reference in new issue