コード例 #1
0
    def __init__(self, transition_rate_matrix):

        self._rateMatrix = transition_rate_matrix
        self._expDists = []
        self._empiricalDists = []

        for i, row in enumerate(transition_rate_matrix):
            # find sum of rates out of this state
            rate_out = out_rate(row, i)
            # if the rate is 0, put None as the exponential and empirical distributions
            if rate_out > 0:
                # create an exponential distribution with rate equal to sum of rates out of this state
                self._expDists.append(RVG.Exponential(scale=1 / rate_out))
                # find the transition rates to other states
                # assume that the rate into this state is 0
                rates = []
                for j, v in enumerate(row):
                    if i == j:
                        rates.append(0)
                    else:
                        rates.append(v)

                # calculate the probability of each event (prob_j = rate_j / (sum over j of rate_j)
                probs = np.array(rates) / rate_out
                # create an empirical distribution over the future states from this state
                self._empiricalDists.append(RVG.Empirical(probs))

            else:  # if the sum of rates out of this state is 0
                self._expDists.append(None)
                self._empiricalDists.append(None)
コード例 #2
0
def test_exponential(rnd, scale, loc=0):

    # exponential random variate generator
    exp_dist = RVGs.Exponential(scale, loc)

    # obtain samples
    samples = get_samples(exp_dist, rnd)

    # report mean and variance
    print_test_results('Exponential',
                       samples,
                       expectation=scale + loc,
                       variance=scale**2)
コード例 #3
0
import SimPy.FittingProbDist_ML as Fit
import numpy as np
import SimPy.RandomVariantGenerators as RVGs
from tests.ProbDistributions.RVGtests import get_samples
import scipy.stats as scs

# simulate some data
np.random.seed(1)

# 1 fitting a exponential distribution
dist = RVGs.Exponential(5, 1)
dat_exp = np.array(get_samples(dist, np.random))  # generate data
dictResults = Fit.fit_exp(dat_exp, 'Data', fixed_location=1)  # fit
print("Fitting Exponential:", dictResults)

# 2 fitting a beta distribution
dist = RVGs.Beta(2, 3, loc=1, scale=2)
dat_beta = np.array(get_samples(dist, np.random))  # generate data
dictResults = Fit.fit_beta(dat_beta, 'Data', minimum=1, maximum=3)  # fit
print("Fitting Beta:", dictResults)

# 3 fitting a beta-binomial distribution
dist = RVGs.BetaBinomial(100, 2, 3, loc=1, scale=2)  # n, a, b
dat_betabin = np.array(get_samples(dist, np.random))
dictResults = Fit.fit_beta_binomial(dat_betabin,
                                    'Data',
                                    fixed_location=1,
                                    fixed_scale=2)  # fit
print("Fitting BetaBinomial:", dictResults)

# 4 Binomial