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
20:25:49 - cmdstanpy - INFO - compiling stan file /home/docs/checkouts/readthedocs.org/user_builds/cmdstanpy/conda/v1.0.3/bin/cmdstan/examples/bernoulli/bernoulli.stan to exe file /home/docs/checkouts/readthedocs.org/user_builds/cmdstanpy/conda/v1.0.3/bin/cmdstan/examples/bernoulli/bernoulli
20:26:09 - cmdstanpy - INFO - compiled model executable: /home/docs/checkouts/readthedocs.org/user_builds/cmdstanpy/conda/v1.0.3/bin/cmdstan/examples/bernoulli/bernoulli
20:26:09 - cmdstanpy - INFO - Chain [1] start processing
20:26:09 - cmdstanpy - INFO - Chain [1] done processing
('lp__', 'theta')
OrderedDict([('lp__', -5.00402), ('theta', 0.200012)])
[1]:
lp__ theta
0 -5.00402 0.200012