def test_linear_regression(): """ Check if fitting a linear model works. This requires several things to work properly: - Passing expressions to distributions - Generating with certain fixed observed values - Fitting in general """ from mle import Normal, vec, var import numpy as np x = vec('x', observed=True) y = vec('y', observed=True) a = par('a') b = par('b') sigma = par('sigma') dist = Normal(y, a * x + b, sigma) np.random.seed(42) xs = linspace(0, 1, 20) data = dist.sample(20, {'x': xs, 'a': 1, 'b': 0, 'sigma': 0.5}) data['x'] = xs results = dist.fit(data, {'a': 2, 'b': 1, 'sigma': 1})
def test_simple_fit(): """ Check if generating/fitting Gaussian data works """ from mle import Normal, vec, var import numpy as np x = vec('x', observed=True) mu = var('mu') sigma = var('sigma') dist = Normal(x, mu, sigma) np.random.seed(42) data = dist.sample(1e6, {'mu': 0, 'sigma': 1}) results = dist.fit(data, {'mu': 1, 'sigma': 2}, method='L-BFGS-B')
def test_const(): """ Check if parameters can be set to be constant. """ from mle import var, vec, Normal import numpy as np x = vec('x', observed=True) mu = var('mu', const=True) sigma = var('sigma') model = Normal(x, mu, sigma) np.random.seed(42) data = model.sample(200, {'mu': 0, 'sigma': 1}) results = model.fit(data, {'mu': 1, 'sigma': 1}) assert (results.x['mu'] == 1)
def test_simple_fit(): """ Check if generating/fitting Gaussian data works """ from mle import Normal, var import numpy as np x = var('x', vector=True, observed=True) mu = var('mu') sigma = var('sigma') dist = Normal(x, mu, sigma) np.random.seed(42) try: data = dist.sample(1e6, {'mu': 0, 'sigma': 1}) except: assert False, 'Generating data failed' try: results = dist.fit(data, {'mu': 1, 'sigma': 2}, method='BFGS') except: assert False, 'Fitting generated data failed'