Learn R Programming

RobPer (version 1.2.3)

betaCvMfit: Robust fit of a Beta distribution using CvM distance minimization

Description

Robustly fits a Beta distribution to data using Cram<e9>r-von-Mises (CvM) distance minimization.

Usage

betaCvMfit(data, CvM = TRUE, rob = TRUE)

Arguments

data

numeric vector: The sample, a Beta distribution is fitted to.

CvM

logical: If FALSE the Cram<e9>r-von-Mises-distance is not minimized, but only moment estimates for the parameters of the Beta distribution are returned (see Details).

rob

logical: If TRUE, mean and standard deviation are replaced by median and MAD when calculating moment estimates for the parameters of the Beta distribution (see Details).

Value

numeric vector: Estimates for the Parameters \(a,b\) of a Beta\((a,b)\) distribution with mean \(a/(a+b)\).

Details

betaCvMfit fits a Beta distribution to data by minimizing the Cram<e9>r-von-Mises distance. Moment estimates of the parameters of the Beta distribution, clipped to positive values, are used as starting values for the optimization process. They are calculated using $$\hat a=-\frac{\bar x \cdot (-\bar x + \bar x^2 + \hat s^2)}{\hat s^2},$$ $$\hat b= \frac{\hat a - \hat a \bar x}{\bar x}.$$

These clipped moment estimates can be returned instead of CvM-fitted parameters setting CvM = FALSE.

The Cram<e9>r-von-Mises distance is defined as (see Clarke, McKinnon and Riley 2012) $$\frac 1n \sum_{i=1}^n \left(F(u_{(i)}) - \frac{i-0.5}{n}\right)^2+ \frac{1}{12n^2},$$ where \(u_{(1)},\ldots,u_{(n)}\) is the ordered sample and \(F\) the distribution function of Beta\((a,b)\).

References

Clarke, B. R., McKinnon, P. L. and Riley, G. (2012): A Fast Robust Method for Fitting Gamma Distributions. Statistical Papers, 53 (4), 1001-1014

Thieler, A. M., Backes, M., Fried, R. and Rhode, W. (2013): Periodicity Detection in Irregularly Sampled Light Curves by Robust Regression and Outlier Detection. Statistical Analysis and Data Mining, 6 (1), 73-89

Thieler, A. M., Fried, R. and Rathjens, J. (2016): RobPer: An R Package to Calculate Periodograms for Light Curves Based on Robust Regression. Journal of Statistical Software, 69 (9), 1-36, <doi:10.18637/jss.v069.i09>

See Also

See RobPer-package for an example applying betaCvMfit to detect valid periods in a periodogram.

Examples

Run this code
# NOT RUN {
# data:
set.seed(12)
PP <- c(rbeta(45, shape1=4, shape2=15), runif(5, min=0.8, max=1))
hist(PP, freq=FALSE, breaks=30, ylim=c(0,7), xlab="Periodogram bar")

# true parameters:
myf.true <- function(x) dbeta(x, shape1=4, shape2=15)
curve(myf.true, add=TRUE, lwd=2)

# method of moments:
par.mom <- betaCvMfit(PP, rob=FALSE, CvM=FALSE)
myf.mom <- function(x) dbeta(x, shape1=par.mom[1], shape2=par.mom[2])
curve(myf.mom, add=TRUE, lwd=2, col="red")

# robust method of moments
par.rob <- betaCvMfit(PP, rob=TRUE, CvM=FALSE)
myf.rob <- function(x) dbeta(x, shape1=par.rob[1], shape2=par.rob[2])
curve(myf.rob, add=TRUE, lwd=2, col="blue")

# CvM distance minimization
par.CvM <- betaCvMfit(PP, rob=TRUE, CvM=TRUE)
myf.CvM <- function(x) dbeta(x, shape1=par.CvM[1], shape2=par.CvM[2])
curve(myf.CvM, add=TRUE, lwd=2, col="green")

# Searching for outliers...
abline(v=qbeta((0.95)^(1/50), shape1=par.CvM[1], shape2=par.CvM[2]), col="green")

legend("topright", fill=c("black", "green","blue", "red"),
    legend=c("true", "CvM", "robust moments", "moments"))
box()
# }

Run the code above in your browser using DataLab