
<!-- README.md is generated from README.Rmd. Please edit that file -->

# cvcqv <img src="./man/figures/sticker.svg" align="right" width="120" />

<!-- badges: start -->

[![R-CMD-check](https://github.com/MaaniBeigy/cvcqv/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/MaaniBeigy/cvcqv/actions/workflows/R-CMD-check.yaml)
[![test-coverage](https://github.com/MaaniBeigy/cvcqv/actions/workflows/test-coverage.yaml/badge.svg)](https://github.com/MaaniBeigy/cvcqv/actions/workflows/test-coverage.yaml)
[![lint](https://github.com/MaaniBeigy/cvcqv/actions/workflows/lint.yaml/badge.svg)](https://github.com/MaaniBeigy/cvcqv/actions/workflows/lint.yaml)
[![CRAN
status](https://www.r-pkg.org/badges/version/cvcqv)](https://CRAN.R-project.org/package=cvcqv)
[![License: GPL
v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
[![minimal R
version](https://img.shields.io/badge/R%3E%3D-3.5.0-6666ff.svg)](https://cran.r-project.org/)
[![Lifecycle:
stable](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable)
[![Project Status: Active – The project has reached a stable, usable
state and is being actively
developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)
[![metacran
downloads](https://cranlogs.r-pkg.org/badges/grand-total/cvcqv)](https://CRAN.R-project.org/package=cvcqv)
<!-- badges: end -->

`cvcqv` provides some easy-to-use functions and classes to calculate
Coefficient of Variation (`cv`) and Coefficient of Quartile Variation
(`cqv`) with confidence intervals provided with all available methods.

# Overview

### Background

There are abundant methods available for the calculation of **confidence
intervals** of a dispersion measure like coefficient of variation (`cv`)
or coefficient of quartile variation (`cqv`), which have not yet been
implemented in R. Also, `cqv` is quite useful in conditions where the
distribution of variables does not follow normal distribution.

#### Coefficient of Variation

`cv` is a measure of relative dispersion representing the degree of
variability relative to the mean (Albatineh et al, 2014). Since cv is
unitless, it is useful for comparison of variables with different units.
It is also a measure of homogeneity (Albatineh et al, 2014).

#### Coefficient of Quartile Variation

`cqv` is a measure of relative dispersion that is based on interquartile
range (`IQR`). Since `cqv` is unitless, it is also useful for comparison
of variables with different units. It is also a measure of homogeneity
(Bonett, 2006; Altunkaynak, 2018).

#### Confidence Interval

Since the measurements of `cv` and `cqv` are obtained from samples, we
cannot easily generalize them and decide based upon them. Confidence
Intervals (CI) help us to make a probabilistic interval around the
estimation of calculated `cv` and `cqv`. For example, 95% CI indicates
that it is 95% probable that the measurement for a population lies
between the lower and upper bounds of that CI.

## Installation

If you are an ubuntu user, you are going to need these non-R packages:

``` linux
sudo apt install libcurl4-openssl-dev libssl-dev libxml2-dev libgsl-dev   
```

The `cvcqv` package is available on CRAN. To install:

``` r
install.packages("cvcqv")
```

The `cvcqv` package is also available on github. To install it in `R`,
use:

``` r
devtools::install_github('MaaniBeigy/cvcqv')  
```

\* Currently, these tools are available:

| name             | is.R6.. | Description                             |
|:-----------------|:--------|:----------------------------------------|
| CoefVar          | TRUE    | Coefficient of Variation (cv)           |
| CoefQuartVar     | TRUE    | Coefficient of Quartile Variation (cqv) |
| CoefVarCI        | TRUE    | Confidence Intervals for cv             |
| CoefQuartVarCI   | TRUE    | Confidence Intervals for cqv            |
| SampleQuantiles  | TRUE    | Sample Quantiles                        |
| cv_versatile     | FALSE   | Coefficient of Variation                |
| cqv_versatile    | FALSE   | Coefficient of Quartile Variation       |
| BootCoefVar      | TRUE    | Bootstrap Resampling for cv             |
| BootCoefQuartVar | TRUE    | Bootstrap Resampling for cqv            |

\* This package is inspired by `dplyr`, `R6`, `SciView`, `boot`, and
`MBESS`.

## Example

Here, we want to observe **all** available *confidence intervals* for
the `cv` of variable *x*:

``` r
x <- c(
    0.2, 0.5, 1.1, 1.4, 1.8, 2.3, 2.5, 2.7, 3.5, 4.4,
    4.6, 5.4, 5.4, 5.7, 5.8, 5.9, 6.0, 6.6, 7.1, 7.9
)
results <- CoefVarCI$new(x, digits = 3)$all_ci()  # R6 class
# or alternatively: 
results <- cv_versatile(x, digits = 3, method = "all")  # functional programming
```

The `results` will be:

|  | est | lower | upper | description |
|:---|---:|---:|---:|:---|
| kelley | 57.774 | 41.287 | 97.894 | cv with Kelley 95% CI |
| mckay | 57.774 | 41.441 | 108.483 | cv with McKay 95% CI |
| miller | 57.774 | 34.053 | 81.495 | cv with Miller 95% CI |
| vangel | 57.774 | 41.264 | 105.426 | cv with Vangel 95% CI |
| mahmoudvand_hassani | 57.774 | 43.476 | 82.857 | cv with Mahmoudvand-Hassani 95% CI |
| equal_tailed | 57.774 | 43.937 | 84.383 | cv with Equal-Tailed 95% CI |
| shortest_length | 57.774 | 42.015 | 81.013 | cv with Shortest-Length 95% CI |
| normal_approximation | 57.774 | 44.533 | 85.272 | cv with Normal Approximation 95% CI |
| norm | 57.774 | 38.799 | 78.937 | cv with Normal Approximation Bootstrap 95% CI |
| basic | 57.774 | 35.055 | 78.167 | cv with Basic Bootstrap 95% CI |
| perc | 57.774 | 38.879 | 79.174 | cv with Bootstrap Percentile 95% CI |
| bca | 57.774 | 40.807 | 82.297 | cv with Adjusted Bootstrap Percentile (BCa) 95% CI |
| aak_adj | 57.774 | 48.029 | 72.516 | cv with Abu-Shawiesh-Akyuz-Kibria ADJ 95% CI |
| aak_ls | 57.774 | 46.310 | 72.075 | cv with Abu-Shawiesh-Akyuz-Kibria LS 95% CI |
| aak_als | 57.774 | 45.839 | 75.092 | cv with Abu-Shawiesh-Akyuz-Kibria ALS 95% CI |

Next, we want to find **all** of the available *confidence intervals*
for the `cqv` of variable *x*:

``` r
results <- CoefQuartVarCI$new(x, digits = 3)$all_ci()  # R6 class
# or alternatively:
results <- cqv_versatile(x, , digits = 3, method = "all")  # functional programming
```

The `results` will be:

|         |    est |  lower |  upper | description                                     |
|:--------|-------:|-------:|-------:|:------------------------------------------------|
| bonett  | 45.625 | 24.785 | 77.329 | cqv with Bonett CI                              |
| norm    | 45.625 | 19.957 | 70.840 | cqv with normal approximation CI                |
| basic   | 45.625 | 18.992 | 73.917 | cqv with basic bootstrap CI                     |
| percent | 45.625 | 17.122 | 68.683 | cqv with bootstrap percentile CI                |
| bca     | 45.625 | 24.273 | 83.264 | cqv with adjusted bootstrap percentile (BCa) CI |

## Documentation

Once installed, browse the package vignettes:

``` r
browseVignettes("cvcqv")
```

## References

Albatineh, AN., Kibria, BM., Wilcox, ML., & Zogheib, B, 2014, Confidence
interval estimation for the population coefficient of variation using
ranked set sampling: A simulation study, Journal of Applied Statistics,
41(4), 733–751, DOI: <https://doi.org/10.1080/02664763.2013.847405>

Bonett, DG., 2006, Confidence interval for a coefficient of quartile
variation, Computational Statistics & Data Analysis, 50(11), 2953-7,
DOI: <https://doi.org/10.1016/j.csda.2005.05.007>

Altunkaynak, B., Gamgam, H., 2018, Bootstrap confidence intervals for
the coefficient of quartile variation, Simulation and Computation, 1-9,
DOI: <https://doi.org/10.1080/03610918.2018.1435800>

Abu-Shawiesh, M. O. A., Akyuz, H. E., & Kibria, B. M. G., 2019,
Performance of Some Confidence Intervals for Estimating the Population
Coefficient of Variation under both Symmetric and Skewed Distributions,
Statistics, Optimization & Information Computing, 7(2), 277-290, DOI:
<https://doi.org/10.19139/soic.v7i2.630>
