Type: Package
Title: Chauvenet-Type Boxplot
Version: 1.0.0
Description: Provides a modified boxplot with a new fence coefficient determined by Lin et al. (2025). The traditional fence coefficient k=1.5 in Tukey's boxplot is replaced by a coefficient based on Chauvenet's criterion, as described in their formula (9). The new boxplot can be implemented in 'base R' with function chau_boxplot(), and in 'ggplot2' with function geom_chau_boxplot().
Maintainer: Tiejun Tong <tongt@hkbu.edu.hk>
URL: https://tiejuntong.github.io/ChauBoxplot/
License: GPL-3
Encoding: UTF-8
RoxygenNote: 7.3.2
Imports: ggplot2, stats
Depends: R (≥ 4.0.0)
Suggests: testthat (≥ 3.0.0)
Config/testthat/edition: 3
NeedsCompilation: no
Packaged: 2025-05-17 10:08:53 UTC; TONGT
Author: Hongmei Lin [aut], Riquan Zhang [aut], Tiejun Tong [aut, cre]
Repository: CRAN
Date/Publication: 2025-05-21 08:40:06 UTC

ChauBoxplot: Chauvenet-type boxplot

Description

This package provides a modified boxplot with the new fence coefficient determined by Lin et al. (2025). Specifically, the fence coefficient k=1.5 in Tukey's boxplot has been replaced by the fence coefficient associated with Chauvenet's criterion in their formula (9). The Chauvenet-type boxplot can be implemented in base R with function chau_boxplot(), and in ggplot2 with function geom_chau_boxplot().

Author(s)

Maintainer: Tiejun Tong tongt@hkbu.edu.hk

Authors:

References

Hongmei Lin, Riquan Zhang and Tiejun Tong (2025). When Tukey meets Chauvenet: a new boxplot criterion for outlier detection. Journal of Computational and Graphical Statistics, accepted.

See Also

Useful links:


Title: Chauvenet-type boxplot in base R

Description

This function can be operated the same way as boxplot() in base R, except that the fence coefficient k=1.5 in Tukey's boxplot is replaced by the fence coefficient associated with Chauvenet’s criterion. For details, please refer to formula (9) in Lin et al. (2025).

Usage

chau_boxplot(data, group_col = NULL, value_col = NULL, ...)

Arguments

data

The data frame containing the data.

group_col

The column name for grouping data.

value_col

The column name for the values to plot.

...

Additional arguments passed to the plotting function.

Value

A Chauvenet-type boxplot in base R.

References

Hongmei Lin, Riquan Zhang and Tiejun Tong (2025). When Tukey meets Chauvenet: a new boxplot criterion for outlier detection. Journal of Computational and Graphical Statistics, accepted.

Examples

# Example 1
chau_boxplot(c(rnorm(1000),5,6))

# Example 2
rate.senior <- c(4.96, 6.30, -5.38, 1.60, 7.24, 5.26, 2.55, 5.96, 3.96,
                 4.19, 1.88, 4.06, 4.75, 0, 0, 2.5, 2.87, 3.00)/100
chau_boxplot(rate.senior, notch=TRUE)

Title: Chauvenet-type boxplot in ggplot2

Description

This function can be operated the same way as geom_boxplot() in ggplot2, except that the fence coefficient k=1.5 in Tukey's boxplot is replaced by the fence coefficient associated with Chauvenet’s criterion. For details, please refer to formula (9) in Lin et al. (2025).

Usage

geom_chau_boxplot(
  mapping = NULL,
  data = NULL,
  geom = "boxplot",
  position = "dodge2",
  na.rm = FALSE,
  show.legend = NA,
  inherit.aes = TRUE,
  ...
)

Arguments

mapping

Aesthetic mappings created by 'aes()'.

data

The data to be displayed in this layer.

geom

The geometric object to use for display.

position

The position adjustment.

na.rm

Logical. Should missing values be removed?

show.legend

Logical. Should this layer be included in the legends?

inherit.aes

If FALSE, overrides the default aesthetics.

...

Other arguments passed to the layer.

Value

A ggplot2 layer with the Chauvenet-type boxplot.

References

Hongmei Lin, Riquan Zhang and Tiejun Tong (2025). When Tukey meets Chauvenet: a new boxplot criterion for outlier detection. Journal of Computational and Graphical Statistics, accepted.

Examples

# Example 1
library(ggplot2)

rate.senior <- c(4.96, 6.30, -5.38, 1.60, 7.24, 5.26, 2.55, 5.96, 3.96,
                 4.19, 1.88, 4.06, 4.75, 0, 0, 2.5, 2.87, 3.00)/100
year <- 2007:2024
data.senior <- data.frame(x=year, y=rate.senior)

C.boxplot.senior <-
  ggplot(data.senior, aes(y=rate.senior)) +
  geom_chau_boxplot(fill="purple",width=3) +
  theme(legend.position = "none") +
  scale_x_discrete(breaks = NULL) +
  ylim(-0.057,0.077) +
  theme(plot.margin = unit(c(0, 0, 0, 0), "inches")) +
  labs(title="C.boxplot", subtitle="Senior civil servants", x="", y="")

print(C.boxplot.senior)