betaCvMfit {RobPer} | R Documentation |
Robust fit of a Beta distribution using CvM distance minimization
Description
Robustly fits a Beta distribution to data
using Cramé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 |
rob |
logical: If |
Details
betaCvMfit
fits a Beta distribution to data
by minimizing the Cramé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é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)
.
Value
numeric vector: Estimates for the Parameters a,b
of a Beta(a,b)
distribution with mean a/(a+b)
.
Note
Adapted from R-Code from Brenton R. Clarke to fit a Gamma distribution (see Clarke, McKinnon and Riley 2012) using Cramér-von-Mises distance minimization. Used in Thieler et al. (2013). See also Thieler, Fried and Rathjens (2016).
Author(s)
Anita M. Thieler, with contributions from Brenton R. Clarke.
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
# 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()