Maximum Likelihood Estimation¶
Stan provides optimization algorithms which find modes of the density specified by a Stan program. Three different algorithms are available: a Newton optimizer, and two related quasi-Newton algorithms, BFGS and L-BFGS. The L-BFGS algorithm is the default optimizer. Newton’s method is the least efficient of the three, but has the advantage of setting its own stepsize.
In this example we use the CmdStan example model bernoulli.stan and data file bernoulli.data.json
The CmdStanModel
class method optimize
returns a CmdStanMLE
object which provides properties to retrieve the estimate of the penalized maximum likelihood estimate of all model parameters:
column_names
optimized_params_dict
optimized_params_np
optimized_params_pd
In the following example, we instantiate a model and do optimization using the default CmdStan settings:
[1]:
import os
from cmdstanpy import CmdStanModel, cmdstan_path
bernoulli_dir = os.path.join(cmdstan_path(), 'examples', 'bernoulli')
stan_file = os.path.join(bernoulli_dir, 'bernoulli.stan')
data_file = os.path.join(bernoulli_dir, 'bernoulli.data.json')
# instantiate, compile bernoulli model
model = CmdStanModel(stan_file=stan_file)
# run CmdStan's otpimize method, returns object `CmdStanMLE`
mle = model.optimize(data=data_file)
print(mle.column_names)
print(mle.optimized_params_dict)
mle.optimized_params_pd
14:28:43 - cmdstanpy - INFO - Chain [1] start processing
14:28:43 - cmdstanpy - INFO - Chain [1] done processing
('lp__', 'theta')
OrderedDict([('lp__', np.float64(-5.00402)), ('theta', np.float64(0.200012))])
[1]:
lp__ | theta | |
---|---|---|
0 | -5.00402 | 0.200012 |