All Projects → sahilm89 → Lhsmdu

sahilm89 / Lhsmdu

Licence: mit
This is an implementation of Deutsch and Deutsch, "Latin hypercube sampling with multidimensional uniformity", Journal of Statistical Planning and Inference 142 (2012) , 763-772

Programming Languages

python
139335 projects - #7 most used programming language
python3
1442 projects

Projects that are alternatives of or similar to Lhsmdu

Regexanalyzer
Regular Expression Analyzer and Composer for Node.js / XPCOM / Browser Javascript, PHP, Python
Stars: ✭ 29 (-46.3%)
Mutual labels:  statistics
Helioml
A book about machine learning, statistics, and data mining for heliophysics
Stars: ✭ 36 (-33.33%)
Mutual labels:  statistics
Hoggorm
Explorative multivariate statistics in Python
Stars: ✭ 44 (-18.52%)
Mutual labels:  statistics
Unrealnetworkprofiler
A modern WPF based Network Profiler for Unreal Engine.
Stars: ✭ 29 (-46.3%)
Mutual labels:  statistics
Statistics
A stab at a very simple statistics class for Objective-C
Stars: ✭ 34 (-37.04%)
Mutual labels:  statistics
Statzone
DNS zone file analyzer targeted at TLD zones
Stars: ✭ 38 (-29.63%)
Mutual labels:  statistics
Census Data Aggregator
Combine U.S. census data responsibly
Stars: ✭ 28 (-48.15%)
Mutual labels:  statistics
25daysinmachinelearning
I will update this repository to learn Machine learning with python with statistics content and materials
Stars: ✭ 53 (-1.85%)
Mutual labels:  statistics
Outlier Utils
Utility library for detecting and removing outliers from normally distributed datasets using the Smirnov-Grubbs test.
Stars: ✭ 35 (-35.19%)
Mutual labels:  statistics
Touchbar Systemmonitor
A better simple reactive system monitor on macOS for your MacBook pro. Built with Electron.
Stars: ✭ 45 (-16.67%)
Mutual labels:  statistics
Uc Davis Cs Exams Analysis
📈 Regression and Classification with UC Davis student quiz data and exam data
Stars: ✭ 33 (-38.89%)
Mutual labels:  statistics
Benchee
Easy and extensible benchmarking in Elixir providing you with lots of statistics!
Stars: ✭ 971 (+1698.15%)
Mutual labels:  statistics
Promcord
📊 Analyze your entire discord guild in grafana using prometheus. Message, User, Game and Voice statistics...
Stars: ✭ 39 (-27.78%)
Mutual labels:  statistics
Scikit Extremes
scikit-extremes is a basic statistical package to perform univariate extreme value calculations using Python
Stars: ✭ 31 (-42.59%)
Mutual labels:  statistics
Datumbox Framework
Datumbox is an open-source Machine Learning framework written in Java which allows the rapid development of Machine Learning and Statistical applications.
Stars: ✭ 1,063 (+1868.52%)
Mutual labels:  statistics
Asterisk Cdr Viewer
Simple and fast viewer for asterisk CDRs / recordings
Stars: ✭ 29 (-46.3%)
Mutual labels:  statistics
Mlj.jl
A Julia machine learning framework
Stars: ✭ 982 (+1718.52%)
Mutual labels:  statistics
Thot
Thot toolkit for statistical machine translation
Stars: ✭ 53 (-1.85%)
Mutual labels:  statistics
Ppd599
USC urban data science course series with Python and Jupyter
Stars: ✭ 1,062 (+1866.67%)
Mutual labels:  statistics
Discord Global Mutual
Get the list of people that you have shared servers with
Stars: ✭ 39 (-27.78%)
Mutual labels:  statistics

LHS-MDU

Installation

You can install lhsmdu using pip::

$ pip install lhsmdu

Alternatively, you can clone on github and then install the package locally::

$ git clone https://github.com/sahilm89/lhsmdu
$ cd lhsmdu
$ python setup.py install --user   # for this user only.

or::

$ pip install git+https://github.com/sahilm89/lhsmdu --user  

Basics

This is a package for generating latin hypercube samples with multi-dimensional uniformity.

To use, simply do::

>>> import lhsmdu 
>>> k = lhsmdu.sample(2, 20) # Latin Hypercube Sampling with multi-dimensional uniformity 

This will generate a nested list with 2 variables, with 20 samples each.

To plot and see the difference between Monte Carlo and LHS-MDU sampling for a 2 dimensional system::

>>> l = lhsmdu.createRandomStandardUniformMatrix(2, 20) # Monte Carlo sampling
>>> k = lhsmdu.sample(2, 20) # Latin Hypercube Sampling with multi-dimensional uniformity
>>> k = np.array(k)
>>> l = np.array(l)
>>> import matplotlib.pyplot as plt 
>>> fig = plt.figure() 
>>> ax = fig.gca()
>>> ax.set_xticks(numpy.arange(0,1,0.1))
>>> ax.set_yticks(numpy.arange(0,1,0.1))
>>> plt.scatter(k[0], k[1], color="g", label="LHS-MDU") 
>>> plt.scatter(l[0], l[1], color="r", label="MC") 
>>> plt.grid()
>>> plt.show() 

You can use the strata generated by the algorithm to sample again, if you so desire. For this, you can do::

>>> m = lhsmdu.resample()
>>> n = lhsmdu.resample()
>>> o = lhsmdu.resample()

This will again generate the same number of samples as before, a nested list with 2 variables, with 20 samples each.

You can plot these together and see the sampling from the strata:: >>> m = np.array(m) >>> n = np.array(n) >>> o = np.array(o)

>>> fig = plt.figure() 
>>> ax = fig.gca()
>>> ax.set_xticks(numpy.arange(0,1,0.1))
>>> ax.set_yticks(numpy.arange(0,1,0.1))
>>> plt.title("LHS-MDU") 
>>> plt.scatter(k[0], k[1], c="g", label="sample 1") 
>>> plt.scatter(m[0], m[1], c="r", label="resample 2") 
>>> plt.scatter(n[0], n[1], c="b", label="resample 3") 
>>> plt.scatter(o[0], o[1], c="y", label="resample 4") 
>>> plt.grid()
>>> plt.show() 

Alternatively, you can choose to get new strata each time, and see the sampling hence::

>>> p = lhsmdu.sample(2, 20) # Latin Hypercube Sampling with multi-dimensional uniformity 
>>> q = lhsmdu.sample(2, 20) # Latin Hypercube Sampling with multi-dimensional uniformity 
>>> r = lhsmdu.sample(2, 20) # Latin Hypercube Sampling with multi-dimensional uniformity 

>>> p = np.array(p)
>>> q = np.array(q)
>>> r = np.array(r)

>>> fig = plt.figure() 
>>> ax = fig.gca()
>>> ax.set_xticks(numpy.arange(0,1,0.1))
>>> ax.set_yticks(numpy.arange(0,1,0.1))
>>> plt.title("LHS-MDU") 
>>> plt.scatter(k[0], k[1], c="g", label="sample 1") 
>>> plt.scatter(p[0], p[1], c="r", label="sample 2") 
>>> plt.scatter(q[0], q[1], c="b", label="sample 3") 
>>> plt.scatter(r[0], r[1], c="y", label="sample 4") 
>>> plt.grid()
>>> plt.show() 

===========================================================================================

Changing the random seed

You will notice that the strata generated are the same each time you run the program again. This is because the random seed is a global constant set to a default value by design, so that simulations can be replicated. In order to change this behavior, you can set a new random seed using the following code::

>>> randSeed = 11 # random number of choice 
>>> lhsmdu.setRandomSeed(randSeed) # Latin Hypercube Sampling with multi-dimensional uniformity 
>>> lhsmdu.sample(2, 20) # Latin Hypercube Sampling with multi-dimensional uniformity 

Alternatively, you can also set the seed by using sample with a new seed::

>>> lhsmdu.sample(2, 20, randomSeed=randSeed) # Latin Hypercube Sampling with multi-dimensional uniformity 

To change the random seed in every run, you can set on top of the program::

>>> lhsmdu.setRandomSeed(None) 

Sampling from arbitrary CDFs

After uniformly distributed samples have been generated from LHSMDU, you can convert these to samples from arbitrary distributions using inverse tranform sampling. In this, the CDF [0,1] of the distribution of interest is inverted, and then data points corresponding to the uniformly sampled points are picked up. To do this, you must have a rv_contiuous or rv_discrete distribution instance taken from scipy.stats. You can also use frozen distributions (after setting loc and scale parameters). Following is an example for normal distribution.::

>>> import scipy.stats.distributions as ssd
>>> p = ssd.norm
>>> new_samples = lhsmdu.inverseTransformSample(p, k[0])
>>> plt.hist(new_samples[0])
>>> plt.show()

Citing this repository

To cite, please cite both the repository using DOI https://dx.doi.org/10.5281/zenodo.2578780 and the original paper from Deutsch and Deutsch: http://dx.doi.org/10.1016%2Fj.jspi.2011.09.016.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].