Metadata-Version: 2.4
Name: phasedist
Version: 0.2.0
Summary: Fit continuous and discrete phase-type distributions
Author-email: Anders Reenberg Andersen <andersra@live.dk>
Project-URL: Homepage, https://github.com/areenberg/phasedist
Project-URL: Documentation, https://github.com/areenberg/phasedist/wiki
Project-URL: Issues, https://github.com/areenberg/phasedist/issues
Keywords: phase-type,statistics,distribution fitting,EM algorithm,Markov chain,survival analysis
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Scientific/Engineering :: Mathematics
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=1.24.0
Requires-Dist: scipy>=1.10.0
Requires-Dist: matplotlib>=3.7.0
Provides-Extra: test
Requires-Dist: statsmodels>=0.14.0; extra == "test"
Dynamic: license-file

<img src="https://github.com/areenberg/phasedist/blob/development/images/phasedist_logo_dark.png" alt="A phase-type distribution being fitted to bimodal data" width="500">

[![PyPI](https://img.shields.io/pypi/v/phasedist?logo=pypi&logoColor=white)](https://pypi.org/project/phasedist/)
[![Python](https://img.shields.io/pypi/pyversions/phasedist?logo=python&logoColor=white)](https://pypi.org/project/phasedist/)
[![License](https://img.shields.io/badge/license-MIT-blue)](https://github.com/areenberg/phasedist/blob/main/LICENSE)

PhaseDist is a Python package for fitting continuous and discrete phase-type distributions.

## Features

* Fit continuous and discrete phase-type distributions using EM algorithms.
* Fit to uncensored or censored observations.
* Impose a special case on the fitted distribution, such as the *Coxian*, *generalized Erlang*, or *hyper-exponential* distribution.
* Use built-in methods to check the fitted distribution.
* Compute metrics, such as the mean, density, and quantile function.
* Simulate observations from a phase-type distribution.
* Approximate another distribution, e.g. a log-normal distribution, using a phase-type distribution.


<img src="https://github.com/areenberg/phasedist/blob/development/images/phasedist_fit.gif" alt="A phase-type distribution being fitted to bimodal data" width="500">

*A phase-type distribution fitted using PhaseDist.*

## Installation

Install directly from PyPI with:

```
pip install phasedist
```

## Quick start guide

The following shows how to use PhaseDist for fitting a continuous phase-type distribution from observed data. 

(1) Start by loading PhaseDist (and NumPy) and defining the observed data.

```python
import phasedist as ph
import numpy as np

obs = np.array([1.48246359,1.13468709,0.66779536,0.61823347,0.8888217,1.10124776,0.1424737,2.1228061,
1.73924933,0.9849647,1.4828275,1.97188842,2.56132465,1.58038807,1.27567082,2.7754917,1.42516854,0.4602795,
1.93701091,2.50633135,1.92906099,1.60935023,1.41949599,1.14870169,0.79146146,1.31530543,1.81352371,1.17079096,
0.78948314,1.39528837,1.62003755,1.52143826,0.46665594,1.37913488,3.10066725,0.76942733,1.42849783,1.61511175,
2.94617609,1.53719196,1.01144357,2.00466269,0.56886361,1.62237618,0.41023332,0.78733512,4.01849928,1.27761144,
1.09426382,1.36946933])
```

(2) Fit the data to a generalized Erlang distribution with 3 phases.

```python
fit = ph.fit(obs=obs,
             nphases=3,
             dtype="generlang")
```

(3) Store the fitted distribution in the object `phdist` and compute the mean, variance, and 95% quantile.

```python
phdist = fit.getdist()

print(phdist.getmean())
#1.455814

print(phdist.getvar())
#0.706465

print(phdist.getquantile(p=0.95))
#3.055168
```

Find the complete example in the file `quickstart_example.py`.

## Documentation

The documentation can be found in the [wiki for PhaseDist](https://github.com/areenberg/phasedist/wiki).

## License

PhaseDist is released under the [MIT License](https://github.com/areenberg/phasedist/blob/main/LICENSE).
