def sfa_inner(lnrptA, lnmptA, SBInvestRatioA, fundScaleA, ALRatioA, institutionRatioA): # Define model lnrpt = var('lnrpt', observed=True, vector=True) lnmpt = var('lnmpt', observed=True, vector=True) SBInvestRatio = var('SBInvestRatio', observed=True, vector=True) fundScale = var('fundScale', observed=True, vector=True) ALRatio = var('ALRatio', observed=True, vector=True) institutionRatio = var('institutionRatio', observed=True, vector=True) a1 = var('a1') a2 = var('a2') a3 = var('a3') a4 = var('a4') b0 = var('b0') b1 = var('b1') sigma = var('sigma') model = Normal(lnrpt, b1 * lnmpt + (a1 * SBInvestRatio) + (a2 * fundScale) + (a3 * ALRatio) + (a4 * institutionRatio) + b0, sigma) # Fit model to data result = model.fit({'lnrpt': lnrptA, 'lnmpt': lnmptA, 'SBInvestRatio': SBInvestRatioA, 'fundScale': fundScaleA, 'ALRatio': ALRatioA, 'institutionRatio': institutionRatioA}, {'a1': 1, 'a2': 1, 'a3': 1, 'a4': 1, 'b0': 1, 'b1': 1, 'sigma': 1}) return result.x['b1'];
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 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) data = np.random.normal(0, 1, 100000) try: dist.fit({'x': data}, {'mu': 1, 'sigma': 2}, method='BFGS') except: assert False, 'Fitting generated data failed'
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, Normal import numpy as np x = var('x', vector=True, observed=True) mu = var('mu', const=True) sigma = var('sigma') model = Normal(x, mu, sigma) np.random.seed(42) data = np.random.normal(0, 1, 200) results = model.fit({'x': data}, {'mu': 1, 'sigma': 1}) assert (results.x['mu'] == 1)
def test_const(): """ Check if parameters can be set to be constant. """ from mle import var, Normal import numpy as np x = var('x', vector=True, observed=True) mu = var('mu', const=True) sigma = var('sigma') model = Normal(x, mu, sigma) np.random.seed(42) data = np.random.normal(0, 1, 200) results = model.fit({'x': data}, {'mu': 1, 'sigma': 1}) assert(results.x['mu'] == 1)
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 sfa_inner(lnrptA, lnmptA, SBInvestRatioA, fundScaleA, ALRatioA, institutionRatioA): # Define model lnrpt = var('lnrpt', observed=True, vector=True) lnmpt = var('lnmpt', observed=True, vector=True) SBInvestRatio = var('SBInvestRatio', observed=True, vector=True) fundScale = var('fundScale', observed=True, vector=True) ALRatio = var('ALRatio', observed=True, vector=True) institutionRatio = var('institutionRatio', observed=True, vector=True) a1 = var('a1') a2 = var('a2') a3 = var('a3') a4 = var('a4') b0 = var('b0') b1 = var('b1') sigma = var('sigma') model = Normal( lnrpt, b1 * lnmpt + (a1 * SBInvestRatio) + (a2 * fundScale) + (a3 * ALRatio) + (a4 * institutionRatio) + b0, sigma) # Fit model to data result = model.fit( { 'lnrpt': lnrptA, 'lnmpt': lnmptA, 'SBInvestRatio': SBInvestRatioA, 'fundScale': fundScaleA, 'ALRatio': ALRatioA, 'institutionRatio': institutionRatioA }, { 'a1': 1, 'a2': 1, 'a3': 1, 'a4': 1, 'b0': 1, 'b1': 1, 'sigma': 1 }) return result.x['b1']
def test_linear_regression(): """ Check if fitting a linear model works. """ from mle import Normal, var import numpy as np x = var('x', vector=True, observed=True) y = var('y', vector=True, observed=True) a = var('a') b = var('b') sigma = var('sigma') model = Normal(y, a * x + b, sigma) np.random.seed(42) xs = np.linspace(0, 1, 20) ys = 0.5 * xs - 0.3 + np.random.normal(0, 0.2, 20) results = model.fit({'x': xs, 'y': ys}, {'a': 2, 'b': 1, 'sigma': 1}) print(results)
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'
def test_linear_regression(): """ Check if fitting a linear model works. """ from mle import Normal, var import numpy as np x = var('x', vector=True, observed=True) y = var('y', vector=True, observed=True) a = var('a') b = var('b') sigma = var('sigma') model = Normal(y, a * x + b, sigma) np.random.seed(42) xs = np.linspace(0, 1, 20) ys = 0.5 * xs - 0.3 + np.random.normal(0, 0.2, 20) results = model.fit({'x': xs, 'y':ys}, {'a': 2, 'b': 1, 'sigma': 1}) print(results)
import numpy as np from mle import var, Normal # Define model x = var('x', observed=True, vector=True) y = var('y', observed=True, vector=True) a = var('a') b = var('b') sigma = var('sigma') model = Normal(y, a * x + b, sigma) # Generate data xs = np.linspace(0, 2, 20) ys = 0.5 * xs + 0.3 + np.random.normal(0, 0.1, 20) # Fit model to data result = model.fit({'x': xs, 'y': ys}, {'a': 1, 'b': 1, 'sigma': 1}) print(result)
import numpy as np from mle import var, Normal # Define model x = var("x", observed=True, vector=True) y = var("y", observed=True, vector=True) a = var("a") b = var("b") sigma = var("sigma") model = Normal(y, a * x + b, sigma) # Generate data xs = np.linspace(0, 2, 20) ys = 0.5 * xs + 0.3 + np.random.normal(0, 0.1, 20) # Fit model to data result = model.fit({"x": xs, "y": ys}, {"a": 1, "b": 1, "sigma": 1}) print(result)