Browse Source

initial commit

master
boB Rudis 1 year ago
parent
commit
e4e4b06d58
No known key found for this signature in database GPG Key ID: 1D7529BE14E2BBA9
14 changed files with 383 additions and 19 deletions
  1. +6
    -4
      DESCRIPTION
  2. +4
    -2
      NAMESPACE
  3. +7
    -7
      R/gglogspline-package.R
  4. +116
    -0
      R/stat-logspline.R
  5. +32
    -1
      README.Rmd
  6. +104
    -0
      README.md
  7. BIN
      README_files/figure-gfm/unnamed-chunk-1-1.png
  8. BIN
      README_files/figure-gfm/unnamed-chunk-1-2.png
  9. BIN
      README_files/figure-gfm/unnamed-chunk-1-3.png
  10. BIN
      README_files/figure-gfm/unnamed-chunk-1-4.png
  11. BIN
      README_files/figure-gfm/unnamed-chunk-1-5.png
  12. +27
    -0
      man/gglogspline-ggproto.Rd
  13. +4
    -5
      man/gglogspline.Rd
  14. +83
    -0
      man/stat_logspline.Rd

+ 6
- 4
DESCRIPTION View File

@ -1,6 +1,7 @@
Package: gglogspline
Type: Package
Title: gglogspline title goes here otherwise CRAN checks fail
Title: A 'ggplot2' Extension for Visualizing Density, Distribution, Hazard, or Survival
Functions using the 'logspline' Package
Version: 0.1.0
Date: 2019-06-17
Authors@R: c(
@ -8,7 +9,8 @@ Authors@R: c(
comment = c(ORCID = "0000-0001-5670-2640"))
)
Maintainer: Bob Rudis <bob@rud.is>
Description: A good description goes here otherwise CRAN checks fail.
Description: Methods are provided to plot a logspline density, distribution function,
hazard function or survival function from a logspline density.
URL: https://gitlab.com/hrbrmstr/gglogspline
BugReports: https://gitlab.com/hrbrmstr/gglogspline/issues
Encoding: UTF-8
@ -19,7 +21,7 @@ Suggests:
Depends:
R (>= 3.2.0)
Imports:
httr,
jsonlite
ggplot2,
logspline
Roxygen: list(markdown = TRUE)
RoxygenNote: 6.1.1

+ 4
- 2
NAMESPACE View File

@ -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)

+ 7
- 7
R/gglogspline-package.R View File

@ -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"

+ 116
- 0
R/stat-logspline.R View File

@ -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,
...
)
)
}

+ 32
- 1
README.Rmd View File

@ -4,7 +4,7 @@ editor_options:
chunk_output_type: inline
---
```{r pkg-knitr-opts, include=FALSE}
knitr:: sopts_chunk$set(
knitr::opts_chunk$set(
collapse = TRUE, fig.retina = 2, message = FALSE, warning = FALSE
)
options(width=120)
@ -16,8 +16,12 @@ options(width=120)
# 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:
@ -40,12 +44,39 @@ devtools::install_github("hrbrmstr/gglogspline")
```{r lib-ex}
library(gglogspline)
library(ggplot2)
# current version
packageVersion("gglogspline")
```
```{r}
set.seed(1)
data.frame(
val = rnorm(100)
) -> xdf
ggplot(xdf) +
stat_logspline(aes(val))
ggplot(xdf) +
stat_logspline(aes(val, y = stat(count))) +
labs(title = "logspline (count)")
ggplot(xdf) +
stat_logspline(aes(val, y = stat(probs))) +
labs(title = "logspline (probability function)")
ggplot(xdf) +
stat_logspline(aes(val, y = stat(survival))) +
labs(title = "logspline (survival function)")
ggplot(xdf) +
stat_logspline(aes(val, y = stat(hazard))) +
labs(title = "logspline (hazard function)")
```
## gglogspline Metrics
```{r cloc, echo=FALSE}


+ 104
- 0
README.md View File

@ -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.

BIN
README_files/figure-gfm/unnamed-chunk-1-1.png View File

Before After
Width: 1344  |  Height: 960  |  Size: 54 KiB

BIN
README_files/figure-gfm/unnamed-chunk-1-2.png View File

Before After
Width: 1344  |  Height: 960  |  Size: 58 KiB

BIN
README_files/figure-gfm/unnamed-chunk-1-3.png View File

Before After
Width: 1344  |  Height: 960  |  Size: 58 KiB

BIN
README_files/figure-gfm/unnamed-chunk-1-4.png View File

Before After
Width: 1344  |  Height: 960  |  Size: 60 KiB

BIN
README_files/figure-gfm/unnamed-chunk-1-5.png View File

Before After
Width: 1344  |  Height: 960  |  Size: 54 KiB

+ 27
- 0
man/gglogspline-ggproto.Rd View File

@ -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}

+ 4
- 5
man/gglogspline.Rd View File

@ -4,12 +4,11 @@
\name{gglogspline}
\alias{gglogspline}
\alias{gglogspline-package}
\title{...}
\title{A 'ggplot2' Extension for Visualizing Density, Distribution, Hazard, or Survival
Functions using the 'logspline' Package}
\description{
\itemize{
\item URL: \url{https://gitlab.com/hrbrmstr/gglogspline}
\item BugReports: \url{https://gitlab.com/hrbrmstr/gglogspline/issues}
}
Methods are provided to plot a logspline density, distribution function,
hazard function or survival function from a logspline density
}
\seealso{
Useful links:


+ 83
- 0
man/stat_logspline.Rd View File

@ -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…
Cancel
Save