Skip to content

Commit

Permalink
Revert to older commit to see where the bug is.
Browse files Browse the repository at this point in the history
  • Loading branch information
segsell committed Mar 24, 2020
1 parent 629aff1 commit 916ef74
Show file tree
Hide file tree
Showing 8 changed files with 36 additions and 62 deletions.
2 changes: 1 addition & 1 deletion grmpy/check/check.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def check_est_init_dict(dict_):
raise UserError(msg)


def check_sim_distribution(dict_):
def check_sim_init_file(dict_):
"""This function checks if the specified initialization file meets the requirements
for the simulation process.
"""
Expand Down
1 change: 1 addition & 0 deletions grmpy/estimate/estimate.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ def fit(init_file, semipar=False):
or, alternatively, via the semiparametric method of
local instrumental variables (LIV).
"""

# Load the estimation file
check_presence_init(init_file)
dict_ = read(init_file, semipar)
Expand Down
1 change: 0 additions & 1 deletion grmpy/estimate/estimate_output.py
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,6 @@ def simulate_estimation(rslt):

# Distribute information
seed = rslt["SIMULATION"]["seed"]

# Determine parametrization and read in /simulate observables
start, finish = process_results(rslt)
data_frames = []
Expand Down
36 changes: 7 additions & 29 deletions grmpy/estimate/estimate_par.py
Original file line number Diff line number Diff line change
@@ -1,31 +1,26 @@
"""
The module provides auxiliary functions for the estimation process.
"""

import copy

import numpy as np
from random import randint
import statsmodels.api as sm
from scipy.stats import t, norm
from scipy.optimize import minimize
from numpy.linalg import LinAlgError
from statsmodels.tools.numdiff import approx_hess_cs
from statsmodels.tools.sm_exceptions import PerfectSeparationError

from grmpy.estimate.estimate_output import print_logfile
from grmpy.estimate.estimate_output import write_comparison
from grmpy.estimate.estimate_output import print_logfile

from grmpy.check.check import UserError, check_start_values


def par_fit(dict_, data):
"""The function estimates the coefficients of the simulated data set."""
# Set seed
if "SIMULATION" not in dict_ or "seed" not in dict_["SIMULATION"]:
seed_ = randint(0, 9999)
np.random.seed(seed_)
else:
np.random.seed(dict_["SIMULATION"]["seed"])
np.random.seed(dict_["SIMULATION"]["seed"])

_, X1, X0, Z1, Z0, Y1, Y0 = process_data(data, dict_)

Expand All @@ -43,7 +38,6 @@ def par_fit(dict_, data):
dict_["AUX"]["criteria"] = calculate_criteria(dict_, X1, X0, Z1, Z0, Y1, Y0, x0)
dict_["AUX"]["starting_values"] = backward_transformation(x0)
rslt_dict = bfgs_dict()

if opts["maxiter"] == 0:
rslt = adjust_output(None, dict_, x0, X1, X0, Z1, Z0, Y1, Y0, rslt_dict)
else:
Expand All @@ -57,20 +51,16 @@ def par_fit(dict_, data):
rslt = adjust_output(
opt_rslt, dict_, opt_rslt["x"], X1, X0, Z1, Z0, Y1, Y0, rslt_dict
)

# Print Output files
print_logfile(dict_, rslt)

if "SIMULATION" in dict_:
if "comparison" in dict_["ESTIMATION"].keys():
if dict_["ESTIMATION"]["comparison"] == 0:
pass
else:
write_comparison(data, rslt)
if "comparison" in dict_["ESTIMATION"].keys():
if dict_["ESTIMATION"]["comparison"] == 0:
pass
else:
write_comparison(data, rslt)
else:
rslt.update({"ESTIMATION": {"seed": seed_}})
write_comparison(data, rslt)

return rslt

Expand Down Expand Up @@ -370,17 +360,6 @@ def adjust_output(opt_rslt, init_dict, x0, X1, X0, Z1, Z0, Y1, Y0, dict_=None):
rslt["CHOICE"]["p_values"] = np.array(rslt["AUX"]["p_values"][num_untreated:-4])
rslt["CHOICE"]["t_values"] = np.array(rslt["AUX"]["t_values"][num_untreated:-4])

if "DIST" not in rslt:
rslt.update({"DIST": {"params": None}})
rslt.update({"DIST": {"starting_values": None}})
rslt.update({"DIST": {"order": None}})
rslt.update({"DIST": {"standard_errors": None}})
rslt.update({"DIST": {"confidence_intervals": None}})
rslt.update({"DIST": {"p_values": None}})
rslt.update({"DIST": {"t_values": None}})
else:
pass

rslt["DIST"]["params"] = np.array(x[-4:])
rslt["DIST"]["starting_values"] = np.array(init_dict["AUX"]["starting_values"][-4:])

Expand All @@ -391,7 +370,6 @@ def adjust_output(opt_rslt, init_dict, x0, X1, X0, Z1, Z0, Y1, Y0, dict_=None):
)
rslt["DIST"]["p_values"] = np.array(rslt["AUX"]["p_values"][-4:])
rslt["DIST"]["t_values"] = np.array(rslt["AUX"]["t_values"][-4:])

for subkey in [
"num_covars_choice",
"num_covars_treated",
Expand Down
2 changes: 1 addition & 1 deletion grmpy/read/read.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def check_append_constant(init_file, dict_, data, semipar=False):
"""
if (
"const" not in data
or np.array_equal(np.asarray(data.iloc[:, 0]), np.ones(len(data))) is False
and np.array_equal(np.asarray(data.iloc[:, 0]), np.ones(len(data))) is False
):
dict_ = read(init_file, semipar, include_constant=True)
data.insert(0, "const", 1.0)
Expand Down
32 changes: 16 additions & 16 deletions grmpy/read/read_auxiliary.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def create_attr_dict_est(init_dict, semipar=False, include_constant=False):
else:
pass

init_dict = read_keys(init_dict, init_values)
init_dict = read_keys_semipar(init_dict, init_values)

# semipar is False
else:
Expand All @@ -24,7 +24,7 @@ def create_attr_dict_est(init_dict, semipar=False, include_constant=False):
else:
pass

init_dict = read_keys(init_dict, init_values)
init_dict = read_keys_par(init_dict, init_values)

init_dict = provide_auxiliary_information(init_dict, init_values)

Expand All @@ -38,7 +38,7 @@ def create_attr_dict_sim(init_dict):
init_dict["AUX"] = {"init_values"}
init_values = []

init_dict = read_keys_sim(init_dict, init_values)
init_dict = read_keys_par(init_dict, init_values)
init_dict = provide_auxiliary_information(init_dict, init_values)

return init_dict
Expand Down Expand Up @@ -70,38 +70,38 @@ def add_constant(init_dict, semipar=False):
return init_dict


def read_keys(init_dict, init_values):
def read_keys_par(init_dict, init_values):
"""This function reads the information provided by the
["TREATED", "UNTREATED", "CHOICE"] keys for
semiparametric estimation.
["TREATED", "UNTREATED", "CHOICE", "DIST"] keys for
the simulation and parametric estimation.
"""
for key in ["TREATED", "UNTREATED", "CHOICE"]:
for key in ["TREATED", "UNTREATED", "CHOICE", "DIST"]:
if "params" in init_dict[key].keys():
init_dict[key]["params"] = np.array(init_dict[key]["params"])
init_values += list(init_dict[key]["params"])
else:
init_values += [0.0] * len(init_dict[key]["order"])

if np.all(init_dict["DIST"]["params"] == 0):
init_dict["DETERMINISTIC"] = True
else:
init_dict["DETERMINISTIC"] = False

return init_dict


def read_keys_sim(init_dict, init_values):
def read_keys_semipar(init_dict, init_values):
"""This function reads the information provided by the
["TREATED", "UNTREATED", "CHOICE", "DIST"] keys for
the simulation and parametric estimation.
["TREATED", "UNTREATED", "CHOICE"] keys for
semiparametric estimation.
"""
for key in ["TREATED", "UNTREATED", "CHOICE", "DIST"]:
for key in ["TREATED", "UNTREATED", "CHOICE"]:
if "params" in init_dict[key].keys():
init_dict[key]["params"] = np.array(init_dict[key]["params"])
init_values += list(init_dict[key]["params"])
else:
init_values += [0.0] * len(init_dict[key]["order"])

if np.all(init_dict["DIST"]["params"] == 0):
init_dict["DETERMINISTIC"] = True
else:
init_dict["DETERMINISTIC"] = False

return init_dict


Expand Down
14 changes: 5 additions & 9 deletions grmpy/simulate/simulate_auxiliary.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,11 @@ def simulate_covariates(init_dict):
X[labels[0]] = 1.0

# Include binary variables
if "VARTYPES" in init_dict:
for variable in init_dict["VARTYPES"]:
if isinstance(init_dict["VARTYPES"][variable], list):
X[variable] = np.random.binomial(
1, init_dict["VARTYPES"][variable][1], size=num_agents
)
else:
pass

for variable in init_dict["VARTYPES"]:
if isinstance(init_dict["VARTYPES"][variable], list):
X[variable] = np.random.binomial(
1, init_dict["VARTYPES"][variable][1], size=num_agents
)
return X


Expand Down
10 changes: 5 additions & 5 deletions grmpy/test/test_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

from grmpy.check.auxiliary import check_special_conf
from grmpy.check.check import (
check_sim_distribution,
check_sim_init_file,
check_sim_init_dict,
check_start_values,
)
Expand Down Expand Up @@ -155,7 +155,7 @@ def test7():
constr["AGENTS"], constr["DETERMINISTIC"] = 1000, True
generate_random_dict(constr)
dict_ = read("test.grmpy.yml")
pytest.raises(UserError, check_sim_distribution, dict_)
pytest.raises(UserError, check_sim_init_file, dict_)
pytest.raises(UserError, fit, "test.grmpy.yml")

generate_random_dict(constr)
Expand Down Expand Up @@ -188,15 +188,15 @@ def test7():
pytest.raises(UserError, simulate, fname_possd)

dict_ = read(fname_zero)
pytest.raises(UserError, check_sim_distribution, dict_)
pytest.raises(UserError, check_sim_init_file, dict_)
pytest.raises(UserError, fit, fname_zero)

dict_ = read(fname_vzero)
pytest.raises(UserError, check_sim_distribution, dict_)
pytest.raises(UserError, check_sim_init_file, dict_)
pytest.raises(UserError, fit, fname_vzero)

dict_ = read(fname_noparams)
pytest.raises(UserError, check_sim_distribution, dict_)
pytest.raises(UserError, check_sim_init_file, dict_)
pytest.raises(UserError, fit, fname_noparams)

dict_ = read(fname_falsespec1)
Expand Down

0 comments on commit 916ef74

Please sign in to comment.