metacountregressor 0.1.88__py3-none-any.whl → 0.1.93__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29,6 +29,64 @@ def convert_df_columns_to_binary_and_wide(df):
29
29
 
30
30
 
31
31
  def main(args, **kwargs):
32
+ '''METACOUNT REGRESSOR TESTING ENVIRONMENT'''
33
+ import statsmodels.api as sm
34
+
35
+ data = sm.datasets.sunspots.load_pandas().data
36
+ # print(data.exog)
37
+ data_exog = data['YEAR']
38
+ data_exog = sm.add_constant(data_exog)
39
+ data_endog = data['SUNACTIVITY']
40
+
41
+ # Instantiate a gamma family model with the default link function.
42
+ import numpy as np
43
+
44
+ gamma_model = sm.NegativeBinomial(data_endog, data_exog)
45
+ gamma_results = gamma_model.fit()
46
+
47
+ print(gamma_results.summary())
48
+
49
+ # NOW LET's COMPARE THIS TO METACOUNT REGRESSOR
50
+ import metacountregressor
51
+ from importlib.metadata import version
52
+ print(version('metacountregressor'))
53
+ import pandas as pd
54
+ import numpy as np
55
+ from metacountregressor.solution import ObjectiveFunction
56
+ from metacountregressor.metaheuristics import (harmony_search,
57
+ differential_evolution,
58
+ simulated_annealing)
59
+
60
+ # Model Decisions,
61
+ manual_fit_spec = {
62
+
63
+ 'fixed_terms': ['const', 'YEAR'],
64
+ 'rdm_terms': [],
65
+ 'rdm_cor_terms': [],
66
+ 'grouped_terms': [],
67
+ 'hetro_in_means': [],
68
+ 'transformations': ['no', 'no'],
69
+ 'dispersion': 1 # Negative Binomial
70
+ }
71
+
72
+ # Arguments
73
+ arguments = {
74
+ 'algorithm': 'hs',
75
+ 'test_percentage': 0,
76
+ 'test_complexity': 6,
77
+ 'instance_number': 'name',
78
+ 'Manual_Fit': manual_fit_spec
79
+ }
80
+ obj_fun = ObjectiveFunction(data_exog, data_endog, **arguments)
81
+ #exit()
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
32
90
  print('the args is:', args)
33
91
  print('the kwargs is', kwargs)
34
92
 
@@ -122,8 +122,9 @@ class ObjectiveFunction(object):
122
122
 
123
123
  def __init__(self, x_data, y_data, **kwargs):
124
124
 
125
- self.reg_penalty = 1
125
+ self.reg_penalty = 0
126
126
  self.power_up_ll = False
127
+
127
128
  self.bic = None
128
129
  self.other_bic = False
129
130
  self.test_flag = 1
@@ -389,6 +390,8 @@ class ObjectiveFunction(object):
389
390
  self.initial_sig = 1 # pass the test of a single model
390
391
  self.pvalue_sig_value = .1
391
392
  self.observations = self._x_data.shape[0]
393
+ self.minimize_scaler = 1/self.observations # scale the minimization function to the observations
394
+
392
395
  self.batch_size = None
393
396
  # open the file in the write mode
394
397
  self.grab_transforms = 0
@@ -842,6 +845,11 @@ class ObjectiveFunction(object):
842
845
  return ([self._model_type_codes[dispersion]])
843
846
 
844
847
  def naming_for_printing(self, betas=None, no_draws=0, dispersion=0, fixed_fit=None, rdm_fit=None, rdm_cor_fit=None, obj_1=None, model_nature=None):
848
+ r'''
849
+ setup for naming of the model summary
850
+ '''
851
+
852
+
845
853
  self.name_deleter = []
846
854
  group_rpm = None
847
855
  group_dist = []
@@ -1014,7 +1022,7 @@ class ObjectiveFunction(object):
1014
1022
  signif_list = self.pvalue_asterix_add(self.pvalues)
1015
1023
  if model == 1:
1016
1024
 
1017
- self.coeff_[-1] = np.abs(self.coeff_[-1])
1025
+ self.coeff_[-1] = 1/np.exp(self.coeff_[-1])
1018
1026
  if self.coeff_[-1] < 0.25:
1019
1027
  print(self.coeff_[-1], 'Warning Check Dispersion')
1020
1028
  print(np.exp(self.coeff_[-1]))
@@ -2701,9 +2709,7 @@ class ObjectiveFunction(object):
2701
2709
 
2702
2710
 
2703
2711
  """
2704
- #print('delete this later')
2705
- if alpha is None:
2706
- alpha = params[-1]
2712
+
2707
2713
  # Calculate common terms
2708
2714
  '''
2709
2715
  n = len(y)
@@ -2742,7 +2748,9 @@ class ObjectiveFunction(object):
2742
2748
 
2743
2749
  try:
2744
2750
  if alpha is None:
2745
- alpha = params[-1]
2751
+ alpha = np.exp(params[-1])
2752
+ else:
2753
+ alpha = np.exp(params[-1])
2746
2754
  a1 = 1 / alpha * mu ** Q
2747
2755
  prob = a1 / (a1 + mu)
2748
2756
  exog = X
@@ -3442,24 +3450,44 @@ class ObjectiveFunction(object):
3442
3450
  # if gamma <= 0.01: #min defined value for stable nb
3443
3451
  # gamma = 0.01
3444
3452
 
3453
+
3454
+
3455
+
3445
3456
  endog = y
3446
3457
  mu = lam
3447
- alpha = gamma
3448
- size = 1.0 / alpha * mu ** Q
3458
+ alpha = np.exp(gamma)
3459
+ #size = 1.0 / alpha * mu ** Q
3449
3460
  alpha_size = alpha * mu ** Q
3450
3461
  # prob = size/(size+mu)
3451
3462
  prob = alpha / (alpha + mu)
3452
3463
  # prob = 1/(1+mu*alpha)
3464
+
3465
+ '''test'''
3466
+
3467
+
3453
3468
  try:
3454
3469
  # print(np.shape(y),np.shape(size), np.shape(prob))
3455
- gg2 = self.negbinom_pmf(alpha_size, size/(size+mu), y)
3470
+ #gg2 = self.negbinom_pmf(alpha_size, size/(size+mu), y)
3471
+ #import time
3472
+ #start_time = time.time()
3456
3473
 
3474
+
3475
+ # Measure time for negbinom_pmf
3476
+ #start_time = time.time()
3477
+ #for _ in range(10000):
3478
+
3479
+ #gg = self.negbinom_pmf(alpha_size, prob, y)
3480
+ #end_time = time.time()
3481
+ #print("Custom functieon time:", end_time - start_time)
3482
+ #start_time = time.time()
3483
+ #for _ in range(10000):
3457
3484
  gg = np.exp(
3458
3485
  gammaln(y + alpha) - gammaln(y + 1) - gammaln(alpha) + y * np.log(mu) + alpha * np.log(alpha) - (
3459
3486
  y + alpha) * np.log(mu + alpha))
3460
-
3461
- # gg1 = self.negbinom_pmf(alpha_size, prob, y)
3462
- # gg = nbinom.pmf(y ,alpha, prob)
3487
+ gg[np.isnan(gg)] = 1
3488
+ #gg = nbinom.pmf(y ,alpha, prob)
3489
+ #end_time = time.time()
3490
+ #print("Custom functieon time:", end_time - start_time)
3463
3491
 
3464
3492
  except Exception as e:
3465
3493
  print(e)
@@ -3530,7 +3558,7 @@ class ObjectiveFunction(object):
3530
3558
 
3531
3559
  endog = y
3532
3560
  mu = lam
3533
- alpha = gamma
3561
+ alpha = np.exp(gamma)
3534
3562
  alpha = alpha * mu ** Q
3535
3563
  size = 1 / alpha * mu ** Q # also r
3536
3564
  # self.rate_param = size
@@ -4428,14 +4456,19 @@ class ObjectiveFunction(object):
4428
4456
  if return_gradient_n:
4429
4457
  der, grad_n = self.simple_score_grad(
4430
4458
  betas, y, eVd, Xd, dispersion, both=True)
4431
- return (-loglik + penalty, -der, grad_n)
4459
+ #return (-loglik + penalty, -der, grad_n)*self.minimize_scaler
4460
+ scaled_tuple = tuple(x * self.minimize_scaler for x in (-loglik + penalty, -der.ravel(), grad_n))
4461
+ return scaled_tuple
4432
4462
  else:
4433
4463
  der = self.simple_score_grad(
4434
4464
  betas, y, eVd, Xd, dispersion, both=False)
4435
-
4436
- return (-loglik + penalty, -der.ravel())
4465
+ scaled_tuple = tuple(
4466
+ x * self.minimize_scaler for x in (-loglik + penalty, -der.ravel()))
4467
+ return scaled_tuple
4468
+ #return (-loglik + penalty, -der.ravel())*self.minimize_scaler
4437
4469
  else:
4438
- return -loglik + penalty
4470
+
4471
+ return (-loglik + penalty)*self.minimize_scaler
4439
4472
  # Else, we have draws
4440
4473
  self.n_obs = len(y) * self.Ndraws #todo is this problematic
4441
4474
  penalty += self._penalty_betas(
@@ -4659,34 +4692,18 @@ class ObjectiveFunction(object):
4659
4692
  # lik = np.nan_to_num(lik, )
4660
4693
  loglik = np.log(lik)
4661
4694
  llf_main = loglik
4662
- if 'exog_infl' in model_nature:
4663
- params_infl = betas[Kf:Kf + len(model_nature.get('exog_infl'))]
4664
- params_main = Bf
4665
- exog_infl = model_nature.get('exog_inflX')
4666
- llf_main = llf_main.ravel() # TODO test this
4667
- w = self.predict_logit_part(params_infl, exog_infl)
4668
-
4669
- w = np.clip(w, np.finfo(float).eps, 1 - np.finfo(float).eps)
4670
-
4671
- zero_idx = np.nonzero(y == 0)[0]
4672
- nonzero_idx = np.nonzero(y)[0] # FIXME should shape be unravelled
4673
-
4674
- llf = np.zeros_like(y, dtype=np.float64).reshape(-1, 1) # TODO test this i added ravel to this code
4675
- llf[zero_idx] = (np.log(w[zero_idx] + (1 - w[zero_idx]) * np.exp(llf_main[zero_idx])))
4676
- llf[nonzero_idx] = np.log(1 - w[nonzero_idx]) + llf_main[nonzero_idx]
4677
- loglik = llf.sum()
4678
- else:
4679
4695
 
4680
- loglik = loglik.sum()
4696
+
4697
+ loglik = loglik.sum()
4681
4698
 
4682
4699
  loglik = np.clip(loglik, log_lik_min, log_lik_max)
4683
4700
  if self.power_up_ll:
4684
4701
  penalty += self.regularise_l2(betas)
4685
- loglik = 2*loglik
4702
+
4686
4703
  penalty += self.regularise_l2(betas)
4687
4704
  if not return_gradient:
4688
4705
 
4689
- output = (-loglik + penalty,)
4706
+ output = ((-loglik + penalty)*self.minimize_scaler,)
4690
4707
  if verbose > 1:
4691
4708
  print(
4692
4709
  f"Evaluation {self.total_fun_eval} Log-Lik.={-loglik:.2f}")
@@ -4716,19 +4733,24 @@ class ObjectiveFunction(object):
4716
4733
  # Hinv = np.linalg.inv(H)
4717
4734
  # except Exception:
4718
4735
  # Hinv = np.linalg.pinv(H)
4719
- output = (-loglik + penalty, -grad, grad_n)
4736
+ scaled_tuple = tuple(x * self.minimize_scaler for x in (-loglik + penalty, -grad, grad_n))
4737
+ return scaled_tuple
4738
+ #output = (-loglik + penalty, -grad, grad_n)*self.minimize_scaler
4720
4739
 
4721
- return output
4740
+ #return output
4722
4741
  else:
4742
+ scaled_tuple = tuple(x * self.minimize_scaler for x in (-loglik + penalty, -grad))
4743
+ return scaled_tuple
4744
+ #output = (-loglik + penalty, -grad)*self.minimize_scaler
4723
4745
 
4724
- output = (-loglik + penalty, -grad)
4725
-
4726
- return output
4746
+ #return output
4727
4747
  except Exception as e:
4728
4748
  traceback.print_exc()
4729
4749
  print(e)
4730
4750
 
4731
-
4751
+ def minimize_function(self, loglike):
4752
+ r'Takes the logliklihood function and tranforms it to a more handed minimization function'
4753
+ return loglike/self.n_obs
4732
4754
  def print_chol_mat(self, betas):
4733
4755
  print(self.chol_mat)
4734
4756
  self.get_br_and_bstd(betas)
@@ -5220,7 +5242,7 @@ class ObjectiveFunction(object):
5220
5242
  if self.power_up_ll:
5221
5243
  loglikelihood =-optim_res['fun']/2 - penalty
5222
5244
  else:
5223
- loglikelihood = -optim_res['fun'] - penalty
5245
+ loglikelihood = -optim_res['fun']/self.minimize_scaler - penalty
5224
5246
 
5225
5247
  # self.coeff_names = coeff_names
5226
5248
  # self.total_iter = optim_res['nit']
@@ -5378,7 +5400,7 @@ class ObjectiveFunction(object):
5378
5400
  mod),
5379
5401
  method=method2, tol=1e-5, options={'gtol': tol['gtol']},
5380
5402
  bounds=bounds)
5381
- print(1)
5403
+
5382
5404
 
5383
5405
 
5384
5406
  if method2 == 'L-BFGS-B':
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: metacountregressor
3
- Version: 0.1.88
3
+ Version: 0.1.93
4
4
  Summary: Extensions for a Python package for estimation of count models.
5
5
  Home-page: https://github.com/zahern/CountDataEstimation
6
6
  Author: Zeke Ahern
@@ -3,17 +3,17 @@ metacountregressor/_device_cust.py,sha256=759fnKmTYccJm4Lpi9_1reurh6OB9d6q9soPR0
3
3
  metacountregressor/data_split_helper.py,sha256=M2fIMdIO8znUaYhx5wlacRyNWdQjNYu1z1wkE-kFUYU,3373
4
4
  metacountregressor/halton.py,sha256=jhovA45UBoZYU9g-hl6Lb2sBIx_ZBTNdPrpgkzR9fng,9463
5
5
  metacountregressor/helperprocess.py,sha256=Sc5gJ7ffFlkya5B5KQwE33xxXuIQyF6OaYtSikLa3pQ,12968
6
- metacountregressor/main.py,sha256=RKddYRv3UKkszbWD-d2-u8yqcYeniCB5vL3vmj7am5I,16700
6
+ metacountregressor/main.py,sha256=7ln6YvX2Nmesw1ose7T-2BQdLfDz0XmiLnP991AgQHw,18273
7
7
  metacountregressor/main_old.py,sha256=eTS4ygq27MnU-dZ_j983Ucb-D5XfbVF8OJQK2hVVLZc,24123
8
8
  metacountregressor/metaheuristics.py,sha256=2MW3qlgs7BFbe_w64snLSKc4Y0-e_9sa3s_96rUm_SE,105887
9
9
  metacountregressor/pareto_file.py,sha256=whySaoPAUWYjyI8zo0hwAOa3rFk6SIUlHSpqZiLur0k,23096
10
10
  metacountregressor/pareto_logger__plot.py,sha256=mEU2QN4wmsM7t39GJ_XhJ_jjsdl09JOmG0U2jICrAkI,30037
11
11
  metacountregressor/setup.py,sha256=8w6IqX0tJsbYrOI1BJLIJCIvOnunKli5I9fsF5PhHv4,919
12
12
  metacountregressor/single_objective_finder.py,sha256=jVG7GJBqzSP4_riYr-kMMKy_LE3SlGmKMunNhHYxgRg,8011
13
- metacountregressor/solution.py,sha256=6UFri1O62X5GGEmrhMTpi2PQdtbtbJoc02uKixfYXGo,266195
13
+ metacountregressor/solution.py,sha256=wigjQ4tJrMS0EvbzmRMb2JRT7s0guvPdpCXRwEWUGQg,266891
14
14
  metacountregressor/test_generated_paper2.py,sha256=pwOoRzl1jJIIOUAAvbkT6HmmTQ81mwpsshn9SLdKOg8,3927
15
- metacountregressor-0.1.88.dist-info/LICENSE.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
16
- metacountregressor-0.1.88.dist-info/METADATA,sha256=BLyeZoC1G7i0pMCkJBmsop3EFSg_QFYKH0nWPjWFkHE,18165
17
- metacountregressor-0.1.88.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
18
- metacountregressor-0.1.88.dist-info/top_level.txt,sha256=zGG7UC5WIpr76gsFUpwJ4En2aCcoNTONBaS3OewwjR0,19
19
- metacountregressor-0.1.88.dist-info/RECORD,,
15
+ metacountregressor-0.1.93.dist-info/LICENSE.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
16
+ metacountregressor-0.1.93.dist-info/METADATA,sha256=lxko7pOT-xFIpuqN3cUYr9hF3SIWszwVmGcfASHysOY,18165
17
+ metacountregressor-0.1.93.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
18
+ metacountregressor-0.1.93.dist-info/top_level.txt,sha256=zGG7UC5WIpr76gsFUpwJ4En2aCcoNTONBaS3OewwjR0,19
19
+ metacountregressor-0.1.93.dist-info/RECORD,,