Package: metacountregressor
MetaCountRegressorQuick SetupThe Below code demonstrates how to set up automatic optimization assisted by the harmony search algorithm. References to the Differential Evolution and Simulated Annealing has been mentioned (change accordingly)Quick install: Requires Python 3.10Installmetacountregressorusing pip as follows:pipinstallmetacountregressor```python
importpandasaspd
importnumpyasnp
frommetacountregressor.solutionimportObjectiveFunction
frommetacountregressor.metaheuristicsimport(harmony_search,differential_evolution,simulated_annealing)Basic setup.The initial setup involves reading in the data and selecting an optimization algorithm. As the runtime progresses, new solutions will be continually evaluated. Finally, at the end of the runtime, the best solution will be identified and printed out. In the case of multiple objectives all of the best solutions will be printed out that belong to the Pareto frontier.# Read data from CSV filedf=pd.read_csv("https://raw.githubusercontent.com/zahern/data/main/Ex-16-3.csv")X=dfy=df['FREQ']# Frequency of crashesX['Offset']=np.log(df['AADT'])# Explicitley define how to offset the data, no offset otherwise# Drop Y, selected offset term and  ID as there are no panelsX=df.drop(columns=['FREQ','ID','AADT'])#some example argument, these are defualt so the following line is just for claritity. See the later agruments section for detials.arguments={'algorithm':'hs','test_percentage':0.15,'test_complexity':6,'instance_number':1,'val_percentage':0.15,'obj_1':'bic','_obj_2':'RMSE_TEST',"MAX_TIME":6}# Fit the model with metacountregressorobj_fun=ObjectiveFunction(X,y,**arguments)#replace with other metaheuristics if desiredresults=harmony_search(obj_fun)Arguments to feed into the Objective Function:Note: Please Consider the main arguments to change.algorithm: This parameter has multiple choices for the algorithm, such as 'hs', 'sa', and 'de'. Only one choice should be defined as a string value.test_percentage: This parameter represents the percentage of data used for in-sample prediction of the model. The value 0.15 corresponds to 15% of the data.val_percentage: This parameter represents the percentage of data used to validate the model. The value 0.15 corresponds to 15% of the data.test_complexity: This parameter defines the complexity level for testing. The value 6 tests all complexities. Alternatively, you can provide a list of numbers to consider different complexities. The complexities are further explained later in this document.instance_number: This parameter is used to give a name to the outputs.obj_1: This parameter has multiple choices for obj_1, such as 'bic', 'aic', and 'hqic'. Only one choice should be defined as a string value._obj_2: This parameter has multiple choices for objective 2, such as 'RMSE_TEST', 'MSE_TEST', and 'MAE_TEST'.MAX_TIME: This parameter specifies the maximum number of seconds for the total estimation before stopping.distribution: This parameter is a list of distributions to consider. Please select all of the available options and put them into a list of valid options if you want to to consider the distribution type for use when modellign with random parameters. The valid options include: 'Normal', 'LnNormal', 'Triangular', and 'Uniform'.transformations: This parameters is a list of transformations to consider. Plesee select all of the available options and put them into a list of valid options if you want to consider the transformation type. The valid options include 'Normal', 'LnNormal', 'Triangular', 'Uniform'.An Example of changing the arguments.Modify the arguments according to your preferences using the commented code as a guide.#Solution Argumentsarguments={'algorithm':'hs',#alternatively input 'de', or 'sa''is_multi':1,'test_percentage':0.2,# used in multi-objective optimisation only. Saves 20% of data for testing.'val_percenetage:':0.2,# Saves 20% of data for testing.'test_complexity':6,# Complexity level for testing (6 tests all) or a list to consider potential differences in complexity'instance_number':'name',# used for creeating a named folder where your models are saved into from the directory'distribution':['Normal','LnNormal','Triangular','Uniform'],'Model':[0,1],# or equivalently ['POS', 'NB']'transformations':['no','sqrt','archsinh'],'_max_time':10}obj_fun=ObjectiveFunction(X,y,**arguments)results=harmony_search(obj_fun)Initial Solution ConfigurementListed below is an example of how to specify an initial solution within the framework. This initial solution will be used to calculate the fitness and considered in the objective-based search. However, as the search progresses, different hypotheses may be proposed, and alternative modeling components may completely replace the initial solution.#Model Decisions, Specify for Intial Optimizationmanual_fit_spec={'fixed_terms':['SINGLE','LENGTH'],'rdm_terms':['AADT:normal'],'rdm_cor_terms':['GRADEBR:uniform','CURVES:triangular'],'grouped_terms':[],'hetro_in_means':['ACCESS:normal','MINRAD:normal'],'transformations':['no','no','log','no','no','no','no'],'dispersion':1}#Search Argumentsarguments={'algorithm':'hs','test_percentage':0.2,'test_complexity':6,'instance_number':'name','Manual_Fit':manual_fit_spec}obj_fun=ObjectiveFunction(X,y,**arguments)simarly to return the results feed the objective function into a metaheuristic solution algorithm. An example of this is provided below:results=harmony_search(obj_fun)print(results)Notes:Capabilities of the software include:Handling of Panel DataSupport for Data TransformationsImplementation of Models with Correlated and Non-Correlated Random ParametersA variety of mixing distributions for parameter estimations, including normal, lognormal, truncated normal, Lindley, Gamma, triangular, and uniform distributions
Capability to handle heterogeneity in the means of the random parametersUse of Halton draws for simulated maximum likelihood estimationSupport for grouped random parameters with unbalanced groupsPost-estimation tools for assessing goodness of fit, making predictions, and conducting out-of-sample validationMultiple parameter optimization routines, such as the BFGS methodComprehensive hypothesis testing using single objectives, such as in-sample BIC and log-likelihoodExtensive hypothesis testing using multiple objectives, such as in-sample BIC and out-of-sample MAE (Mean Absolute Error), or in-sample AIC and out-of-sample MSPE (mean-square prediction errorr)Features that allow analysts to pre-specify variables, interactions, and mixing distributions, among othersMeta-heuristic Guided Optimization, including techniques like Simulated Annealing, Harmony Search, and Differential EvolutionCustomization of Hyper-parameters to solve problems tailored to your datasetOut-of-the-box optimization capability using default metaheuristicsIntreting the output of the model:A regression table is produced. The following text elements are explained:Std. Dev.: This column appears for effects that are related to random paramters and displays the assument distributional assumption next to itChol: This term refers to Cholesky decomposition element, to show the correlation between two random paramaters. The combination of the cholesky element on iyself is equivalent to a normal random parameter.hetro group #: This term represents the heterogeneity group number, which refers all of the contributing factors that share hetrogentiy in the means to each other under the same numbered value.$\tau$: This column, displays the type of transformation that was applied to the specific contributing factor in the data.Arguments:In reference to the arguments that can be fed into the solution alrogithm, a dictionary system is utilised with relecant names these includeThe following list describes the arguments available in this function. By default, all of the capabilities described are enabled unless specified otherwise as an argument. For list arguments, include all desired elements in the list to ensure the corresponding options are considered. Example code will be provided later in this guide.complexity_level: This argument accepts an integer 1-6 or a list based of integegers between 0 to 5 eg might be a possible configuration [0, 2, 3]. Each integer represents a hierarchy level for estimable models associated with each explanatory variable. Here is a summary of the hierarchy:0: Null model1: Simple fixed effects model2: Random parameters model3: Random correlated parameters model4: Grouped random parameters model5: Heterogeneity in the means random parameter modelNote:For the grouped random parameters model, groupings need to be defined prior to estimation. This can be achieved by including the following key-value pair in the arguments of theObjectiveFunction:'group': "Enter Column Grouping in data". Replace"Enter Column Grouping in data"with the actual column grouping in your dataset.Similarly, for panel data, the panel column needs to be defined using the key-value pair:'panel': "enter column string covering panels". Replace"enter column string covering panels"with the appropriate column string that represents the panel information in your dataset.distributions: This argument accepts a list of strings where each string corresponds to a distribution. Valid options include:"Normal""Lindley""Uniform""LogNormal""Triangular""Gamma""TruncatedNormal"Any of the above, concatenated with ":" (e.g., "Normal:grouped"; requires a grouping term defined in the model)Model: This argument specifies the model form. It can be a list of integers representing different models to test:0: Poisson1: Negative-Binomial2: Generalized-Poissontransformations: This argument accepts a list of strings representing available transformations within the framework. Valid options include:"no""square-root""logarithmic""archsinh""as_factor"is_multi: This argument accepts an integer indicating whether single or multiple objectives are to be tested (0 for single, 1 for multiple).test_percentage: This argument is used for multi-objective optimization. Define it as a decimal; for example, 0.2 represents 20% of the data for testing.val_percentage: This argument saves data for validation. Define it as a decimal; for example, 0.2 represents 20% of the data for validation._max_time: This argument is used to add a termination time in the algorithm. It takes values as seconds. Note the time is only dependenant on the time after intial population of solutions are generated.ContactIf you have any questions, ideas to improve MetaCountRegressor, or want to report a bug, just open a new issue inGitHub repository.Citing MetaCountRegressorPlease cite MetaCountRegressor as follows:Ahern, Z., Corry P., Paz A. (2023). MetaCountRegressor [Computer software].https://pypi.org/project/metacounregressor/Or using BibTex as follows:@misc{Ahern2023,author={Zeke Ahern and Paul Corry and Alexander Paz},journal={PyPi},title={metacountregressor · PyPI},url={https://pypi.org/project/metacountregressor/0.1.47/},year={2023},}