boB Rudis
5 years ago
14 changed files with 383 additions and 19 deletions
@ -1,4 +1,6 @@ |
|||
# Generated by roxygen2: do not edit by hand |
|||
|
|||
import(httr) |
|||
importFrom(jsonlite,fromJSON) |
|||
export(StatLogspline) |
|||
export(stat_logspline) |
|||
import(ggplot2) |
|||
import(logspline) |
|||
|
@ -1,12 +1,12 @@ |
|||
#' ... |
|||
#' |
|||
#' - URL: <https://gitlab.com/hrbrmstr/gglogspline> |
|||
#' - BugReports: <https://gitlab.com/hrbrmstr/gglogspline/issues> |
|||
#' |
|||
#' A 'ggplot2' Extension for Visualizing Density, Distribution, Hazard, or Survival |
|||
#' Functions using the 'logspline' Package |
|||
#' |
|||
#' Methods are provided to plot a logspline density, distribution function, |
|||
#' hazard function or survival function from a logspline density |
|||
#' |
|||
#' @md |
|||
#' @name gglogspline |
|||
#' @keywords internal |
|||
#' @author Bob Rudis (bob@@rud.is) |
|||
#' @import httr |
|||
#' @importFrom jsonlite fromJSON |
|||
#' @import ggplot2 logspline |
|||
"_PACKAGE" |
|||
|
@ -0,0 +1,116 @@ |
|||
#' Base ggproto classes for gglogspline |
|||
#' |
|||
#' @section Computed variables: |
|||
#' |
|||
#' - `density` : the density estimate |
|||
#' - `count`: computed counts (similar to [ggplots::stat_density()]) |
|||
#' - `probs`: distribution function |
|||
#' - `survival`: survival function |
|||
#' - `hazard` : hazard function |
|||
#' |
|||
#' By default the `y` aesthetic is mapped to `stat(density)` |
|||
#' |
|||
#' @rdname gglogspline-ggproto |
|||
#' @export |
|||
StatLogspline <- ggproto( |
|||
|
|||
"StatLogspline", Stat, |
|||
|
|||
compute_group = function(data, scales, |
|||
n = 100, max_knots = 0, n_knots = 0, |
|||
min_d = -1, error_action = 2) { |
|||
|
|||
logspline( |
|||
data$x, |
|||
maxknots = max_knots, |
|||
nknots = n_knots, |
|||
mind = min_d, |
|||
error.action = error_action |
|||
) -> lsp |
|||
|
|||
# computed upper and lower bounds for simplicity |
|||
|
|||
u1 <- qlogspline(0.01, lsp) |
|||
u2 <- qlogspline(0.99, lsp) |
|||
|
|||
# we need these to compute the new x-axis values |
|||
|
|||
u3 <- 1.1 * u1 - 0.1 * u2 |
|||
u4 <- 1.1 * u2 - 0.1 * u1 |
|||
|
|||
# compute the new X-axis values and the log-density |
|||
|
|||
xx <- (0:(n - 1))/(n - 1) * (u4 - u3) + u3 |
|||
den <- dlogspline(xx, lsp) |
|||
prb <- plogspline(xx, lsp) |
|||
|
|||
# our new data frame with an extra computed stat for the count |
|||
|
|||
data.frame( |
|||
x = xx, |
|||
density = den, |
|||
probs = prb, |
|||
survival = 1 - prb, |
|||
hazard = den / (1 - prb), |
|||
count = den * nrow(data), |
|||
stringsAsFactors = FALSE |
|||
) |
|||
|
|||
}, |
|||
|
|||
required_aes = c("x"), # we only accept one parameter |
|||
|
|||
default_aes = aes( |
|||
y = stat(density) # by default we use the computed stat |
|||
) |
|||
|
|||
) |
|||
|
|||
#' Computes and draws... |
|||
#' |
|||
#' @inheritParams ggplot2::stat_density |
|||
#' @param n numbe of points for the density estimation (larger == smoother) |
|||
#' @param max_knots the maximum number of knots. The routine stops adding knots when |
|||
#' this number of knots is reached. The method has an automatic rule for selecting |
|||
#' maxknots if this parameter is not specified. |
|||
#' @param n_knots forces the method to start with nknots knots. The method has an automatic |
|||
#' rule for selecting nknots if this parameter is not specified. |
|||
#' @param min_d minimum distance, in order statistics, between knots. |
|||
#' @param error_action see `error.action` in [logspline::plot.logspline()] |
|||
#' @export |
|||
#' @examples |
|||
#' library(ggplot2) |
|||
#' |
|||
#' set.seed(1) |
|||
#' data.frame( |
|||
#' val = rnorm(100) |
|||
#' ) -> xdf |
|||
#' |
|||
#' ggplot(xdf) + stat_logspline(aes(val)) |
|||
stat_logspline <- function(mapping = NULL, data = NULL, geom = "area", |
|||
position = "identity", na.rm = FALSE, show.legend = NA, |
|||
inherit.aes = TRUE, |
|||
# our custom params |
|||
n = 100, max_knots = 0, n_knots = 0, min_d = -1, error_action = 2, |
|||
...) { |
|||
|
|||
layer( |
|||
stat = StatLogspline, |
|||
data = data, |
|||
mapping = mapping, |
|||
geom = geom, |
|||
position = position, |
|||
show.legend = show.legend, |
|||
inherit.aes = inherit.aes, |
|||
params = list( |
|||
na.rm = na.rm, |
|||
# pass on our fancy custom params |
|||
n = n, |
|||
max_knots = max_knots, |
|||
n_knots = n_knots, |
|||
error_action = error_action, |
|||
... |
|||
) |
|||
) |
|||
|
|||
} |
@ -1,2 +1,106 @@ |
|||
|
|||
[![Travis-CI Build |
|||
Status](https://travis-ci.org/hrbrmstr/gglogspline.svg?branch=master)](https://travis-ci.org/hrbrmstr/gglogspline) |
|||
[![Coverage |
|||
Status](https://codecov.io/gh/hrbrmstr/gglogspline/branch/master/graph/badge.svg)](https://codecov.io/gh/hrbrmstr/gglogspline) |
|||
[![CRAN\_Status\_Badge](https://www.r-pkg.org/badges/version/gglogspline)](https://cran.r-project.org/package=gglogspline) |
|||
|
|||
# gglogspline |
|||
|
|||
A ‘ggplot2’ Extension for Visualizing Density, Distribution, Hazard, or |
|||
Survival Functions using the ‘logspline’ Package |
|||
|
|||
## Description |
|||
|
|||
Methods are provided to plot a logspline density, distribution function, |
|||
hazard function or survival function from a logspline density |
|||
|
|||
## What’s Inside The Tin |
|||
|
|||
The following functions are implemented: |
|||
|
|||
## Installation |
|||
|
|||
``` r |
|||
devtools::install_git("https://git.sr.ht/~hrbrmstr/gglogspline.git") |
|||
# or |
|||
devtools::install_git("https://git.rud.is/hrbrmstr/gglogspline.git") |
|||
# or |
|||
devtools::install_gitlab("hrbrmstr/gglogspline") |
|||
# or |
|||
devtools::install_bitbucket("hrbrmstr/gglogspline") |
|||
# or |
|||
devtools::install_github("hrbrmstr/gglogspline") |
|||
``` |
|||
|
|||
## Usage |
|||
|
|||
``` r |
|||
library(gglogspline) |
|||
library(ggplot2) |
|||
|
|||
# current version |
|||
packageVersion("gglogspline") |
|||
## [1] '0.1.0' |
|||
``` |
|||
|
|||
``` r |
|||
set.seed(1) |
|||
data.frame( |
|||
val = rnorm(100) |
|||
) -> xdf |
|||
|
|||
ggplot(xdf) + |
|||
stat_logspline(aes(val)) |
|||
``` |
|||
|
|||
<img src="README_files/figure-gfm/unnamed-chunk-1-1.png" width="672" /> |
|||
|
|||
``` r |
|||
|
|||
ggplot(xdf) + |
|||
stat_logspline(aes(val, y = stat(count))) + |
|||
labs(title = "logspline (count)") |
|||
``` |
|||
|
|||
<img src="README_files/figure-gfm/unnamed-chunk-1-2.png" width="672" /> |
|||
|
|||
``` r |
|||
|
|||
ggplot(xdf) + |
|||
stat_logspline(aes(val, y = stat(probs))) + |
|||
labs(title = "logspline (probability function)") |
|||
``` |
|||
|
|||
<img src="README_files/figure-gfm/unnamed-chunk-1-3.png" width="672" /> |
|||
|
|||
``` r |
|||
|
|||
ggplot(xdf) + |
|||
stat_logspline(aes(val, y = stat(survival))) + |
|||
labs(title = "logspline (survival function)") |
|||
``` |
|||
|
|||
<img src="README_files/figure-gfm/unnamed-chunk-1-4.png" width="672" /> |
|||
|
|||
``` r |
|||
|
|||
ggplot(xdf) + |
|||
stat_logspline(aes(val, y = stat(hazard))) + |
|||
labs(title = "logspline (hazard function)") |
|||
``` |
|||
|
|||
<img src="README_files/figure-gfm/unnamed-chunk-1-5.png" width="672" /> |
|||
|
|||
## gglogspline Metrics |
|||
|
|||
| Lang | \# Files | (%) | LoC | (%) | Blank lines | (%) | \# Lines | (%) | |
|||
| :--- | -------: | --: | --: | ---: | ----------: | ---: | -------: | --: | |
|||
| R | 4 | 0.8 | 63 | 0.67 | 20 | 0.47 | 53 | 0.6 | |
|||
| Rmd | 1 | 0.2 | 31 | 0.33 | 23 | 0.53 | 35 | 0.4 | |
|||
|
|||
## Code of Conduct |
|||
|
|||
Please note that this project is released with a [Contributor Code of |
|||
Conduct](CONDUCT.md). By participating in this project you agree to |
|||
abide by its terms. |
|||
|
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 54 KiB |
@ -0,0 +1,27 @@ |
|||
% Generated by roxygen2: do not edit by hand |
|||
% Please edit documentation in R/stat-logspline.R |
|||
\docType{data} |
|||
\name{StatLogspline} |
|||
\alias{StatLogspline} |
|||
\title{Base ggproto classes for gglogspline} |
|||
\format{An object of class \code{StatLogspline} (inherits from \code{Stat}, \code{ggproto}, \code{gg}) of length 4.} |
|||
\usage{ |
|||
StatLogspline |
|||
} |
|||
\description{ |
|||
Base ggproto classes for gglogspline |
|||
} |
|||
\section{Computed variables}{ |
|||
|
|||
\itemize{ |
|||
\item \code{density} : the density estimate |
|||
\item \code{count}: computed counts (similar to \code{\link[ggplots:stat_density]{ggplots::stat_density()}}) |
|||
\item \code{probs}: distribution function |
|||
\item \code{survival}: survival function |
|||
\item \code{hazard} : hazard function |
|||
} |
|||
|
|||
By default the \code{y} aesthetic is mapped to \code{stat(density)} |
|||
} |
|||
|
|||
\keyword{datasets} |
@ -0,0 +1,83 @@ |
|||
% Generated by roxygen2: do not edit by hand |
|||
% Please edit documentation in R/stat-logspline.R |
|||
\name{stat_logspline} |
|||
\alias{stat_logspline} |
|||
\title{Computes and draws...} |
|||
\usage{ |
|||
stat_logspline(mapping = NULL, data = NULL, geom = "area", |
|||
position = "identity", na.rm = FALSE, show.legend = NA, |
|||
inherit.aes = TRUE, n = 100, max_knots = 0, n_knots = 0, |
|||
min_d = -1, error_action = 2, ...) |
|||
} |
|||
\arguments{ |
|||
\item{mapping}{Set of aesthetic mappings created by \code{\link[=aes]{aes()}} or |
|||
\code{\link[=aes_]{aes_()}}. If specified and \code{inherit.aes = TRUE} (the |
|||
default), it is combined with the default mapping at the top level of the |
|||
plot. You must supply \code{mapping} if there is no plot mapping.} |
|||
|
|||
\item{data}{The data to be displayed in this layer. There are three |
|||
options: |
|||
|
|||
If \code{NULL}, the default, the data is inherited from the plot |
|||
data as specified in the call to \code{\link[=ggplot]{ggplot()}}. |
|||
|
|||
A \code{data.frame}, or other object, will override the plot |
|||
data. All objects will be fortified to produce a data frame. See |
|||
\code{\link[=fortify]{fortify()}} for which variables will be created. |
|||
|
|||
A \code{function} will be called with a single argument, |
|||
the plot data. The return value must be a \code{data.frame}, and |
|||
will be used as the layer data. A \code{function} can be created |
|||
from a \code{formula} (e.g. \code{~ head(.x, 10)}).} |
|||
|
|||
\item{geom}{Use to override the default connection between |
|||
\code{geom_density} and \code{stat_density}.} |
|||
|
|||
\item{position}{Position adjustment, either as a string, or the result of |
|||
a call to a position adjustment function.} |
|||
|
|||
\item{na.rm}{If \code{FALSE}, the default, missing values are removed with |
|||
a warning. If \code{TRUE}, missing values are silently removed.} |
|||
|
|||
\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. |
|||
It can also be a named logical vector to finely select the aesthetics to |
|||
display.} |
|||
|
|||
\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]{borders()}}.} |
|||
|
|||
\item{n}{numbe of points for the density estimation (larger == smoother)} |
|||
|
|||
\item{max_knots}{the maximum number of knots. The routine stops adding knots when |
|||
this number of knots is reached. The method has an automatic rule for selecting |
|||
maxknots if this parameter is not specified.} |
|||
|
|||
\item{n_knots}{forces the method to start with nknots knots. The method has an automatic |
|||
rule for selecting nknots if this parameter is not specified.} |
|||
|
|||
\item{min_d}{minimum distance, in order statistics, between knots.} |
|||
|
|||
\item{error_action}{see \code{error.action} in \code{\link[logspline:plot.logspline]{logspline::plot.logspline()}}} |
|||
|
|||
\item{...}{Other arguments passed on to \code{\link[=layer]{layer()}}. These are |
|||
often aesthetics, used to set an aesthetic to a fixed value, like |
|||
\code{colour = "red"} or \code{size = 3}. They may also be parameters |
|||
to the paired geom/stat.} |
|||
} |
|||
\description{ |
|||
Computes and draws... |
|||
} |
|||
\examples{ |
|||
library(ggplot2) |
|||
|
|||
set.seed(1) |
|||
data.frame( |
|||
val = rnorm(100) |
|||
) -> xdf |
|||
|
|||
ggplot(xdf) + stat_logspline(aes(val)) |
|||
} |
Loading…
Reference in new issue