# MaximumLikelihoodPower

Physicists love power laws. But, they don't always use the best methods for extracting powers from empirical data.

### Notebook example

Here is a notebook using `MaximumLikelihoodPower.jl`

(this notebook is in the Notebooks folder in this distribution).

### Command-line example

```
import MaximumLikelihoodPower
const MLE = MaximumLikelihoodPower
julia> seed = 11; α = 0.5;
# Get 10^6 samples from the Pareto distribution
julia> data = MLE.Example.makeparetodata(α, seed);
# Minimize the Kolmogorov-Smirnov statistic
# The second value returned is the minimizing alpha
julia> MLE.scanKS(data, range(.4, length=11, stop=.6))
3-element Array{Float64,1}:
0.48
0.5
0.52
```

## Functions

### mle

` (estimate, stderr) = mle(data::AbstractVector)`

Return the maximum likelihood estimate and standard error of the exponent of a power law
applied to the sorted vector `data`

.

### KSstatistic

` KSstatistic(data::AbstractVector, alpha) --> Float64`

Return the Kolmogorov-Smirnov statistic
comparing `data`

to a power law with power `alpha`

. The elements of `data`

are
assumed to be unique. Minimizing the KS statistic over alpha is another way
to estimate the parameter of the sample distribution. See `testKS`

in the
`test`

directory.

### scanKS(data, powers)

Compute the Kolmogorov Smirnov statistic for several values of α in
the iterator `powers`

. Return the value of α
that minimizes the KS statistic and the two neighboring values.

### mleKS

` mleKS{T<:AbstractFloat}(data::AbstractVector{T})`

Return the maximum likelihood estimate and standard error of the exponent of a power law
applied to the sorted vector `data`

. Also return the Kolmogorov-Smirnov statistic. Results
are returned in an instance of type `MLEKS`

.

### scanmle

` scanmle(data::AbstractVector; ntrials=100, stderrcutoff=0.1, useKS=false)`

Perform `mle`

approximately `ntrials`

times on `data`

, increasing `xmin`

. Stop trials
if the `stderr`

of the estimate `alpha`

is greater than `stderrcutoff`

. Return an object
containing statistics about the scan.

### comparescan

` comparescan(mle::MLEKS, i, data, mlescan::MLEScan)`

compare the results of MLE estimation `mle`

to record results
in `mlescan`

and update `mlescan`

.

### Reference

Clauset, A., Shalizi, C. R., & Newman, M. E. J. (**2009**).
*Power-Law Distributions in Empirical Data*. SIAM Review, 51(4),
661–703. http://dx.doi.org/10.1137/070710111, https://arxiv.org/abs/0706.1062