From 98d93afad7e7d787ea796e8211536150ebd7277f Mon Sep 17 00:00:00 2001 From: Younes Strittmatter Date: Thu, 17 Aug 2023 23:25:47 -0400 Subject: [PATCH 1/9] feat: make synthetic runners use dataframes and rename inputs so state logic works --- .../synthetic/abstract/template_experiment.py | 5 ++- .../economics/expected_value_theory.py | 18 ++++++--- .../synthetic/economics/prospect_theory.py | 18 +++++++-- .../synthetic/psychology/luce_choice_ratio.py | 37 ++++++++++++------- .../psychophysics/weber_fechner_law.py | 28 +++++++++++--- 5 files changed, 76 insertions(+), 30 deletions(-) diff --git a/src/autora/experiment_runner/synthetic/abstract/template_experiment.py b/src/autora/experiment_runner/synthetic/abstract/template_experiment.py index de30f758..a8390164 100644 --- a/src/autora/experiment_runner/synthetic/abstract/template_experiment.py +++ b/src/autora/experiment_runner/synthetic/abstract/template_experiment.py @@ -62,6 +62,7 @@ from functools import partial +from typing import Optional import numpy as np from numpy.typing import ArrayLike @@ -74,7 +75,7 @@ def template_experiment( # Add any configurable parameters with their defaults here: name: str = "Template Experiment", added_noise: float = 0.1, - random_state: int = 42, + random_state: Optional[int] = None, ): """ A template for synthetic experiments. @@ -102,7 +103,7 @@ def template_experiment( # Define experiment runner rng = np.random.default_rng(random_state) - def experiment_runner(x: ArrayLike, added_noise_=added_noise): + def experiment_runner(conditions: ArrayLike, added_noise_=added_noise): """A function which simulates noisy observations.""" x_ = np.array(x) y = x_ + 1.0 + rng.normal(0, added_noise_, size=x_.shape) diff --git a/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py b/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py index ed7fa7fc..481f502b 100644 --- a/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py +++ b/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py @@ -1,6 +1,8 @@ from functools import partial +from typing import Optional, Union import numpy as np +import pandas as pd from autora.experiment_runner.synthetic.utilities import SyntheticExperimentCollection from autora.variable import DV, IV, ValueType, VariableCollection @@ -74,7 +76,7 @@ def expected_value_theory( minimum_value=-1, maximum_value=1, added_noise: float = 0.01, - random_state: int = 180, + random_state: Optional[int] = None, ): """ Expected Value Theory @@ -102,13 +104,16 @@ def expected_value_theory( random_state=random_state, ) - rng = np.random.default_rng(random_state) - variables = get_variables( minimum_value=minimum_value, maximum_value=maximum_value, resolution=resolution ) + rng = np.random.default_rng(random_state) - def experiment_runner(X: np.ndarray, added_noise_=added_noise): + def experiment_runner( + conditions: Union[pd.DataFrame, np.ndarray, np.recarray], + added_noise_=added_noise, + ): + X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) for idx, x in enumerate(X): value_A = value_lambda * x[0] @@ -128,7 +133,10 @@ def experiment_runner(X: np.ndarray, added_noise_=added_noise): Y[idx] = p_choose_A - return Y + experiment_data = pd.DataFrame(conditions) + experiment_data.columns = [v.name for v in variables.independent_variables] + experiment_data[variables.dependent_variables[0].name] = Y + return experiment_data ground_truth = partial(experiment_runner, added_noise_=0.0) diff --git a/src/autora/experiment_runner/synthetic/economics/prospect_theory.py b/src/autora/experiment_runner/synthetic/economics/prospect_theory.py index 3b56244d..9436c215 100644 --- a/src/autora/experiment_runner/synthetic/economics/prospect_theory.py +++ b/src/autora/experiment_runner/synthetic/economics/prospect_theory.py @@ -1,6 +1,8 @@ from functools import partial +from typing import Optional, Union import numpy as np +import pandas as pd from autora.experiment_runner.synthetic.economics.expected_value_theory import ( get_variables, @@ -20,7 +22,7 @@ def prospect_theory( resolution=10, minimum_value=-1, maximum_value=1, - rng=np.random.default_rng(), + random_state: Optional[int] = None, ): """ Parameters from @@ -54,15 +56,20 @@ def prospect_theory( resolution=resolution, minimum_value=minimum_value, maximum_value=maximum_value, - rng=rng, + random_state=random_state, name=name, ) variables = get_variables( minimum_value=minimum_value, maximum_value=maximum_value, resolution=resolution ) + rng = np.random.default_rng(random_state) - def experiment_runner(X: np.ndarray, added_noise_=added_noise): + def experiment_runner( + conditions: Union[pd.DataFrame, np.ndarray, np.recarray], + added_noise_=added_noise, + ): + X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) for idx, x in enumerate(X): # power value function according to: @@ -124,7 +131,10 @@ def experiment_runner(X: np.ndarray, added_noise_=added_noise): Y[idx] = p_choose_A - return Y + experiment_data = pd.DataFrame(conditions) + experiment_data.columns = [v.name for v in variables.independent_variables] + experiment_data[variables.dependent_variables[0].name] = Y + return experiment_data ground_truth = partial(experiment_runner, added_noise_=0.0) diff --git a/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py b/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py index 977f3d7f..2a0fe5c7 100644 --- a/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py +++ b/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py @@ -1,6 +1,8 @@ from functools import partial +from typing import Optional, Union import numpy as np +import pandas as pd from autora.experiment_runner.synthetic.utilities import SyntheticExperimentCollection from autora.variable import DV, IV, ValueType, VariableCollection @@ -12,7 +14,7 @@ def luce_choice_ratio( resolution=8, maximum_similarity=10, focus=0.8, - rng=np.random.default_rng(), + random_state: Optional[int] = None, ): """ Luce-Choice-Ratio @@ -23,7 +25,7 @@ def luce_choice_ratio( resolution: number of allowed values for stimulus DVs maximum_similarity: upperbound for DVs focus: parameter measuring participant focus - rng: integer used to seed the random number generator + random_state: integer used to seed the random number generator Shepard-Luce Choice Rule according to: - Equation (4) in Logan, G. D., & Gordon, R. D. (2001). @@ -32,11 +34,8 @@ def luce_choice_ratio( - Equation (5) in Luce, R. D. (1963). Detection and recognition. Examples: - First we seed numpy to get replicable results: - >>> np.random.seed(42) - We can instantiate a Shepard-Cue Choice Experiment. We use a seed to get replicable results: - >>> l_s_experiment = luce_choice_ratio(rng=42) + >>> l_s_experiment = luce_choice_ratio(random_state=42) We can look at the name of the experiment: >>> l_s_experiment.name @@ -44,17 +43,24 @@ def luce_choice_ratio( To call the ground truth, we can use an attribute of the experiment: >>> l_s_experiment.ground_truth(np.array([[1,2,3,4]])) - array([[0.21052632]]) + similarity_category_A1 ... choose_A1 + 0 1 ... 0.210526 + + [1 rows x 5 columns] We can also run an experiment: >>> l_s_experiment.experiment_runner(np.array([[1,2,3,4]])) - array([[0.21016246]]) + similarity_category_A1 ... choose_A1 + 0 1 ... 0.20779 + + [1 rows x 5 columns] To plot the experiment use: >>> l_s_experiment.plotter() >>> plt.show() # doctest: +SKIP """ + minimum_similarity = 1 / maximum_similarity params = dict( @@ -64,7 +70,7 @@ def luce_choice_ratio( minimum_similarity=minimum_similarity, resolution=resolution, focus=focus, - rng=rng, + random_state=random_state, ) similarity_category_A1 = IV( @@ -121,11 +127,14 @@ def luce_choice_ratio( dependent_variables=[choose_A1], ) + rng = np.random.default_rng(random_state) + def experiment_runner( - X: np.ndarray, + conditions: Union[pd.DataFrame, np.ndarray, np.recarray], focus_: float = focus, added_noise_: float = added_noise, ): + X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) for idx, x in enumerate(X): similarity_A1 = x[0] @@ -133,7 +142,7 @@ def experiment_runner( similarity_B1 = x[2] similarity_B2 = x[3] - y = (similarity_A1 * focus + np.random.normal(0, added_noise_)) / ( + y = (similarity_A1 * focus + rng.normal(0, added_noise_)) / ( similarity_A1 * focus + similarity_A2 * focus + similarity_B1 * (1 - focus_) @@ -145,8 +154,10 @@ def experiment_runner( elif y >= 1: y = 0.9999 Y[idx] = y - - return Y + experiment_data = pd.DataFrame(conditions) + experiment_data.columns = [v.name for v in variables.independent_variables] + experiment_data[choose_A1.name] = Y + return experiment_data ground_truth = partial(experiment_runner, added_noise_=0.0) diff --git a/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py b/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py index ddafce17..5b4b9ab3 100644 --- a/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py +++ b/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py @@ -1,7 +1,8 @@ from functools import partial -from typing import Optional +from typing import Optional, Union import numpy as np +import pandas as pd from autora.experiment_runner.synthetic.utilities import SyntheticExperimentCollection from autora.variable import DV, IV, ValueType, VariableCollection @@ -26,6 +27,19 @@ def weber_fechner_law( added_noise: standard deviation of normally distributed noise added to y-values random_state: integer used to seed the random number generator + Examples: + >>> experiment = weber_fechner_law(random_state=42) + + # We can run the runner with numpy arrays or DataFrames. Ther return value will + # always be a pandas DataFrame. + >>> experiment.experiment_runner(np.array([[.1,.2]])) + S1 S2 difference_detected + 0 0.1 0.2 0.696194 + + >>> experiment.experiment_runner(pd.DataFrame({'S1': [0.1], 'S2': [0.2]})) + S1 S2 difference_detected + 0 0.1 0.2 0.682747 + """ params = dict( @@ -75,18 +89,20 @@ def weber_fechner_law( rng = np.random.default_rng(random_state) def experiment_runner( - X: np.ndarray, + conditions: Union[pd.DataFrame, np.ndarray, np.recarray], std: float = 0.01, ): + X = np.array(conditions) + Y = np.zeros((X.shape[0], 1)) for idx, x in enumerate(X): - # jnd = np.min(x) * weber_constant - # response = (x[1]-x[0]) - jnd - # y = 1/(1+np.exp(-response)) + np.random.normal(0, std) y = constant * np.log(x[1] / x[0]) + rng.normal(0, std) Y[idx] = y - return Y + experiment_data = pd.DataFrame(conditions) + experiment_data.columns = [v.name for v in variables.independent_variables] + experiment_data[dv1.name] = Y + return experiment_data ground_truth = partial(experiment_runner, std=0.0) From 11dfb9d4739baa5f04765dddc519477b3b08f634 Mon Sep 17 00:00:00 2001 From: Younes Strittmatter Date: Thu, 17 Aug 2023 23:43:11 -0400 Subject: [PATCH 2/9] bug: fix tests --- .../synthetic/abstract/template_experiment.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/autora/experiment_runner/synthetic/abstract/template_experiment.py b/src/autora/experiment_runner/synthetic/abstract/template_experiment.py index a8390164..5df2a7f0 100644 --- a/src/autora/experiment_runner/synthetic/abstract/template_experiment.py +++ b/src/autora/experiment_runner/synthetic/abstract/template_experiment.py @@ -7,7 +7,7 @@ ... ) We can instantiate the experiment using the imported function - >>> s = template_experiment() + >>> s = template_experiment(random_state=42) >>> s # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE SyntheticExperimentCollection(name='Template Experiment', description='...', params={'name': ...}, ...) @@ -15,7 +15,7 @@ >>> s.name 'Template Experiment' - >>> s.variables + >>> s.variables # doctest: +ELLIPSIS VariableCollection(...) >>> s.domain() @@ -105,7 +105,7 @@ def template_experiment( def experiment_runner(conditions: ArrayLike, added_noise_=added_noise): """A function which simulates noisy observations.""" - x_ = np.array(x) + x_ = np.array(conditions) y = x_ + 1.0 + rng.normal(0, added_noise_, size=x_.shape) return y From bad8114cc6b758d02a3c18e752ecce9ba3d01978 Mon Sep 17 00:00:00 2001 From: Younes Strittmatter Date: Fri, 18 Aug 2023 09:29:32 -0400 Subject: [PATCH 3/9] chore: standardize noise parameter --- .../synthetic/abstract/template_experiment.py | 10 ++++------ .../synthetic/economics/expected_value_theory.py | 10 ++++------ .../synthetic/economics/prospect_theory.py | 10 ++++------ .../synthetic/psychology/luce_choice_ratio.py | 8 +++----- .../synthetic/psychophysics/weber_fechner_law.py | 8 +++----- 5 files changed, 18 insertions(+), 28 deletions(-) diff --git a/src/autora/experiment_runner/synthetic/abstract/template_experiment.py b/src/autora/experiment_runner/synthetic/abstract/template_experiment.py index 5df2a7f0..9b90d6c7 100644 --- a/src/autora/experiment_runner/synthetic/abstract/template_experiment.py +++ b/src/autora/experiment_runner/synthetic/abstract/template_experiment.py @@ -26,7 +26,7 @@ >>> s.ground_truth # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE functools.partial(.experiment_runner at 0x...>, - added_noise_=0.0) + added_noise=0.0) >>> s.ground_truth(1.) 2.0 @@ -74,7 +74,6 @@ def template_experiment( # Add any configurable parameters with their defaults here: name: str = "Template Experiment", - added_noise: float = 0.1, random_state: Optional[int] = None, ): """ @@ -88,7 +87,6 @@ def template_experiment( params = dict( # Include all parameters here: name=name, - added_noise=added_noise, random_state=random_state, ) @@ -103,13 +101,13 @@ def template_experiment( # Define experiment runner rng = np.random.default_rng(random_state) - def experiment_runner(conditions: ArrayLike, added_noise_=added_noise): + def experiment_runner(conditions: ArrayLike, added_noise: float = 0.1): """A function which simulates noisy observations.""" x_ = np.array(conditions) - y = x_ + 1.0 + rng.normal(0, added_noise_, size=x_.shape) + y = x_ + 1.0 + rng.normal(0, added_noise, size=x_.shape) return y - ground_truth = partial(experiment_runner, added_noise_=0.0) + ground_truth = partial(experiment_runner, added_noise=0.0) """A function which simulates perfect observations""" def domain(): diff --git a/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py b/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py index 481f502b..5b55fff6 100644 --- a/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py +++ b/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py @@ -75,7 +75,6 @@ def expected_value_theory( resolution=10, minimum_value=-1, maximum_value=1, - added_noise: float = 0.01, random_state: Optional[int] = None, ): """ @@ -100,7 +99,6 @@ def expected_value_theory( resolution=resolution, choice_temperature=choice_temperature, value_lambda=value_lambda, - added_noise=added_noise, random_state=random_state, ) @@ -111,7 +109,7 @@ def expected_value_theory( def experiment_runner( conditions: Union[pd.DataFrame, np.ndarray, np.recarray], - added_noise_=added_noise, + added_noise: float = 0.01, ): X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) @@ -122,8 +120,8 @@ def experiment_runner( probability_a = x[1] probability_b = x[3] - expected_value_A = value_A * probability_a + rng.normal(0, added_noise_) - expected_value_B = value_B * probability_b + rng.normal(0, added_noise_) + expected_value_A = value_A * probability_a + rng.normal(0, added_noise) + expected_value_B = value_B * probability_b + rng.normal(0, added_noise) # compute probability of choosing option A p_choose_A = np.exp(expected_value_A / choice_temperature) / ( @@ -138,7 +136,7 @@ def experiment_runner( experiment_data[variables.dependent_variables[0].name] = Y return experiment_data - ground_truth = partial(experiment_runner, added_noise_=0.0) + ground_truth = partial(experiment_runner, added_noise=0.0) def domain(): X = np.array( diff --git a/src/autora/experiment_runner/synthetic/economics/prospect_theory.py b/src/autora/experiment_runner/synthetic/economics/prospect_theory.py index 9436c215..3de15f82 100644 --- a/src/autora/experiment_runner/synthetic/economics/prospect_theory.py +++ b/src/autora/experiment_runner/synthetic/economics/prospect_theory.py @@ -12,7 +12,6 @@ def prospect_theory( name="Prospect Theory", - added_noise=0.01, choice_temperature=0.1, value_alpha=0.88, value_beta=0.88, @@ -46,7 +45,6 @@ def prospect_theory( """ params = dict( - added_noise=added_noise, choice_temperature=choice_temperature, value_alpha=value_alpha, value_beta=value_beta, @@ -67,7 +65,7 @@ def prospect_theory( def experiment_runner( conditions: Union[pd.DataFrame, np.ndarray, np.recarray], - added_noise_=added_noise, + added_noise=0.01, ): X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) @@ -120,8 +118,8 @@ def experiment_runner( x[3] ** coefficient + (1 - x[3]) ** coefficient ) ** (1 / coefficient) - expected_value_A = value_A * probability_a + rng.normal(0, added_noise_) - expected_value_B = value_B * probability_b + rng.normal(0, added_noise_) + expected_value_A = value_A * probability_a + rng.normal(0, added_noise) + expected_value_B = value_B * probability_b + rng.normal(0, added_noise) # compute probability of choosing option A p_choose_A = np.exp(expected_value_A / choice_temperature) / ( @@ -136,7 +134,7 @@ def experiment_runner( experiment_data[variables.dependent_variables[0].name] = Y return experiment_data - ground_truth = partial(experiment_runner, added_noise_=0.0) + ground_truth = partial(experiment_runner, added_noise=0.0) def domain(): v_a = variables.independent_variables[0].allowed_values diff --git a/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py b/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py index 2a0fe5c7..99a53283 100644 --- a/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py +++ b/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py @@ -10,7 +10,6 @@ def luce_choice_ratio( name="Luce-Choice-Ratio", - added_noise=0.01, resolution=8, maximum_similarity=10, focus=0.8, @@ -65,7 +64,6 @@ def luce_choice_ratio( params = dict( name=name, - added_noise=added_noise, maximum_similarity=maximum_similarity, minimum_similarity=minimum_similarity, resolution=resolution, @@ -132,7 +130,7 @@ def luce_choice_ratio( def experiment_runner( conditions: Union[pd.DataFrame, np.ndarray, np.recarray], focus_: float = focus, - added_noise_: float = added_noise, + added_noise=0.01, ): X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) @@ -142,7 +140,7 @@ def experiment_runner( similarity_B1 = x[2] similarity_B2 = x[3] - y = (similarity_A1 * focus + rng.normal(0, added_noise_)) / ( + y = (similarity_A1 * focus + rng.normal(0, added_noise)) / ( similarity_A1 * focus + similarity_A2 * focus + similarity_B1 * (1 - focus_) @@ -159,7 +157,7 @@ def experiment_runner( experiment_data[choose_A1.name] = Y return experiment_data - ground_truth = partial(experiment_runner, added_noise_=0.0) + ground_truth = partial(experiment_runner, added_noise=0.0) def domain(): similarity_A1 = variables.independent_variables[0].allowed_values diff --git a/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py b/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py index 5b4b9ab3..0de87b68 100644 --- a/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py +++ b/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py @@ -13,7 +13,6 @@ def weber_fechner_law( resolution=100, constant=1.0, maximum_stimulus_intensity=5.0, - added_noise=0.01, random_state: Optional[int] = None, ): """ @@ -43,7 +42,6 @@ def weber_fechner_law( """ params = dict( - added_noise=added_noise, name=name, resolution=resolution, constant=constant, @@ -90,13 +88,13 @@ def weber_fechner_law( def experiment_runner( conditions: Union[pd.DataFrame, np.ndarray, np.recarray], - std: float = 0.01, + added_noise=0.01, ): X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) for idx, x in enumerate(X): - y = constant * np.log(x[1] / x[0]) + rng.normal(0, std) + y = constant * np.log(x[1] / x[0]) + rng.normal(0, added_noise) Y[idx] = y experiment_data = pd.DataFrame(conditions) @@ -104,7 +102,7 @@ def experiment_runner( experiment_data[dv1.name] = Y return experiment_data - ground_truth = partial(experiment_runner, std=0.0) + ground_truth = partial(experiment_runner, added_noise=0.0) def domain(): s1_values = variables.independent_variables[0].allowed_values From 79a89dbc9ce61cad2b1c7df694c2e0d664dc7303 Mon Sep 17 00:00:00 2001 From: Younes Strittmatter Date: Fri, 18 Aug 2023 09:40:46 -0400 Subject: [PATCH 4/9] chore: delete input arg from docstring --- .../synthetic/economics/expected_value_theory.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py b/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py index 5b55fff6..498fdb14 100644 --- a/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py +++ b/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py @@ -87,7 +87,6 @@ def expected_value_theory( resolution: minimum_value: maximum_value: - added_noise: random_state: """ From 9b6da21ca01832c22436a7d11f1ec2e54deabaa1 Mon Sep 17 00:00:00 2001 From: Younes Strittmatter Date: Tue, 29 Aug 2023 13:20:16 -0400 Subject: [PATCH 5/9] chore: rename added noise to observation noise --- .../synthetic/abstract/template_experiment.py | 5 ++--- .../synthetic/economics/expected_value_theory.py | 6 +++--- .../synthetic/economics/prospect_theory.py | 6 +++--- .../synthetic/psychology/luce_choice_ratio.py | 4 ++-- .../synthetic/psychophysics/weber_fechner_law.py | 4 ++-- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/autora/experiment_runner/synthetic/abstract/template_experiment.py b/src/autora/experiment_runner/synthetic/abstract/template_experiment.py index 9b90d6c7..af40f28a 100644 --- a/src/autora/experiment_runner/synthetic/abstract/template_experiment.py +++ b/src/autora/experiment_runner/synthetic/abstract/template_experiment.py @@ -80,7 +80,6 @@ def template_experiment( A template for synthetic experiments. Parameters: - added_noise: standard deviation of gaussian noise added to output random_state: seed for random number generator """ @@ -101,10 +100,10 @@ def template_experiment( # Define experiment runner rng = np.random.default_rng(random_state) - def experiment_runner(conditions: ArrayLike, added_noise: float = 0.1): + def experiment_runner(conditions: ArrayLike, observation_noise: float = 0.01): """A function which simulates noisy observations.""" x_ = np.array(conditions) - y = x_ + 1.0 + rng.normal(0, added_noise, size=x_.shape) + y = x_ + 1.0 + rng.normal(0, observation_noise, size=x_.shape) return y ground_truth = partial(experiment_runner, added_noise=0.0) diff --git a/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py b/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py index 498fdb14..94e3bf29 100644 --- a/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py +++ b/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py @@ -108,7 +108,7 @@ def expected_value_theory( def experiment_runner( conditions: Union[pd.DataFrame, np.ndarray, np.recarray], - added_noise: float = 0.01, + observation_noise: float = 0.01, ): X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) @@ -119,8 +119,8 @@ def experiment_runner( probability_a = x[1] probability_b = x[3] - expected_value_A = value_A * probability_a + rng.normal(0, added_noise) - expected_value_B = value_B * probability_b + rng.normal(0, added_noise) + expected_value_A = value_A * probability_a + rng.normal(0, observation_noise) + expected_value_B = value_B * probability_b + rng.normal(0, observation_noise) # compute probability of choosing option A p_choose_A = np.exp(expected_value_A / choice_temperature) / ( diff --git a/src/autora/experiment_runner/synthetic/economics/prospect_theory.py b/src/autora/experiment_runner/synthetic/economics/prospect_theory.py index 3de15f82..c7c78cfc 100644 --- a/src/autora/experiment_runner/synthetic/economics/prospect_theory.py +++ b/src/autora/experiment_runner/synthetic/economics/prospect_theory.py @@ -65,7 +65,7 @@ def prospect_theory( def experiment_runner( conditions: Union[pd.DataFrame, np.ndarray, np.recarray], - added_noise=0.01, + observation_noise=0.01, ): X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) @@ -118,8 +118,8 @@ def experiment_runner( x[3] ** coefficient + (1 - x[3]) ** coefficient ) ** (1 / coefficient) - expected_value_A = value_A * probability_a + rng.normal(0, added_noise) - expected_value_B = value_B * probability_b + rng.normal(0, added_noise) + expected_value_A = value_A * probability_a + rng.normal(0, observation_noise) + expected_value_B = value_B * probability_b + rng.normal(0, observation_noise) # compute probability of choosing option A p_choose_A = np.exp(expected_value_A / choice_temperature) / ( diff --git a/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py b/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py index 99a53283..be9e6498 100644 --- a/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py +++ b/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py @@ -130,7 +130,7 @@ def luce_choice_ratio( def experiment_runner( conditions: Union[pd.DataFrame, np.ndarray, np.recarray], focus_: float = focus, - added_noise=0.01, + observation_noise=0.01, ): X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) @@ -140,7 +140,7 @@ def experiment_runner( similarity_B1 = x[2] similarity_B2 = x[3] - y = (similarity_A1 * focus + rng.normal(0, added_noise)) / ( + y = (similarity_A1 * focus + rng.normal(0, observation_noise)) / ( similarity_A1 * focus + similarity_A2 * focus + similarity_B1 * (1 - focus_) diff --git a/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py b/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py index 0de87b68..3ba4504b 100644 --- a/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py +++ b/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py @@ -88,13 +88,13 @@ def weber_fechner_law( def experiment_runner( conditions: Union[pd.DataFrame, np.ndarray, np.recarray], - added_noise=0.01, + observation_noise=0.01, ): X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) for idx, x in enumerate(X): - y = constant * np.log(x[1] / x[0]) + rng.normal(0, added_noise) + y = constant * np.log(x[1] / x[0]) + rng.normal(0, observation_noise) Y[idx] = y experiment_data = pd.DataFrame(conditions) From d867fdf52d74c2a45370d7e6b83718b6a8414b15 Mon Sep 17 00:00:00 2001 From: Younes Strittmatter Date: Tue, 29 Aug 2023 13:25:31 -0400 Subject: [PATCH 6/9] bug: rename added noise to observation noise in ground truth and update docstrings --- .../synthetic/abstract/template_experiment.py | 14 +++++++------- .../synthetic/economics/expected_value_theory.py | 2 +- .../synthetic/economics/prospect_theory.py | 2 +- .../synthetic/psychology/luce_choice_ratio.py | 2 +- .../synthetic/psychophysics/weber_fechner_law.py | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/autora/experiment_runner/synthetic/abstract/template_experiment.py b/src/autora/experiment_runner/synthetic/abstract/template_experiment.py index af40f28a..2b233db1 100644 --- a/src/autora/experiment_runner/synthetic/abstract/template_experiment.py +++ b/src/autora/experiment_runner/synthetic/abstract/template_experiment.py @@ -26,7 +26,7 @@ >>> s.ground_truth # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE functools.partial(.experiment_runner at 0x...>, - added_noise=0.0) + observation_noise=0.0) >>> s.ground_truth(1.) 2.0 @@ -42,13 +42,13 @@ .experiment_runner at 0x...> >>> s.experiment_runner(1.) - 1.8697820493137682 + 1.986978204931377 >>> s.experiment_runner(s.domain()) - array([[1.01278404], - [1.96837574], - [2.99831988], - [3.91469561]]) + array([[1.0012784 ], + [1.99683757], + [2.99983199], + [3.99146956]]) >>> s.plotter() >>> plt.show() # doctest: +SKIP @@ -106,7 +106,7 @@ def experiment_runner(conditions: ArrayLike, observation_noise: float = 0.01): y = x_ + 1.0 + rng.normal(0, observation_noise, size=x_.shape) return y - ground_truth = partial(experiment_runner, added_noise=0.0) + ground_truth = partial(experiment_runner, observation_noise=0.0) """A function which simulates perfect observations""" def domain(): diff --git a/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py b/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py index 94e3bf29..4af9eb83 100644 --- a/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py +++ b/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py @@ -135,7 +135,7 @@ def experiment_runner( experiment_data[variables.dependent_variables[0].name] = Y return experiment_data - ground_truth = partial(experiment_runner, added_noise=0.0) + ground_truth = partial(experiment_runner, observation_noise=0.0) def domain(): X = np.array( diff --git a/src/autora/experiment_runner/synthetic/economics/prospect_theory.py b/src/autora/experiment_runner/synthetic/economics/prospect_theory.py index c7c78cfc..c4aba260 100644 --- a/src/autora/experiment_runner/synthetic/economics/prospect_theory.py +++ b/src/autora/experiment_runner/synthetic/economics/prospect_theory.py @@ -134,7 +134,7 @@ def experiment_runner( experiment_data[variables.dependent_variables[0].name] = Y return experiment_data - ground_truth = partial(experiment_runner, added_noise=0.0) + ground_truth = partial(experiment_runner, observation_noise=0.0) def domain(): v_a = variables.independent_variables[0].allowed_values diff --git a/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py b/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py index be9e6498..2999595a 100644 --- a/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py +++ b/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py @@ -157,7 +157,7 @@ def experiment_runner( experiment_data[choose_A1.name] = Y return experiment_data - ground_truth = partial(experiment_runner, added_noise=0.0) + ground_truth = partial(experiment_runner, observation_noise=0.0) def domain(): similarity_A1 = variables.independent_variables[0].allowed_values diff --git a/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py b/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py index 3ba4504b..db9d7c95 100644 --- a/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py +++ b/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py @@ -102,7 +102,7 @@ def experiment_runner( experiment_data[dv1.name] = Y return experiment_data - ground_truth = partial(experiment_runner, added_noise=0.0) + ground_truth = partial(experiment_runner, observation_noise=0.0) def domain(): s1_values = variables.independent_variables[0].allowed_values From 019c2d9d45058391c16b868a14a570f540692a07 Mon Sep 17 00:00:00 2001 From: Sebastian Musslick Date: Wed, 30 Aug 2023 14:44:04 -0400 Subject: [PATCH 7/9] Update src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py Co-authored-by: benwandrew --- .../synthetic/psychophysics/weber_fechner_law.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py b/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py index db9d7c95..abac8cff 100644 --- a/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py +++ b/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py @@ -29,7 +29,7 @@ def weber_fechner_law( Examples: >>> experiment = weber_fechner_law(random_state=42) - # We can run the runner with numpy arrays or DataFrames. Ther return value will + # The runner can accept numpy arrays or pandas DataFrames, but the return value will # always be a pandas DataFrame. >>> experiment.experiment_runner(np.array([[.1,.2]])) S1 S2 difference_detected From ab056a7b8badc7e79ad44c81edc3d66eb26b3101 Mon Sep 17 00:00:00 2001 From: Younes Strittmatter Date: Fri, 1 Sep 2023 03:55:23 -0400 Subject: [PATCH 8/9] chore: rename back to added_noise, move random_state to run, rename experiment_runner to run --- docs/Example.ipynb | 155 ++++++++++++++++-- .../synthetic/abstract/template_experiment.py | 46 +++--- .../economics/expected_value_theory.py | 19 +-- .../synthetic/economics/prospect_theory.py | 17 +- .../synthetic/psychology/luce_choice_ratio.py | 22 ++- .../psychophysics/weber_fechner_law.py | 26 ++- .../experiment_runner/synthetic/utilities.py | 10 +- 7 files changed, 206 insertions(+), 89 deletions(-) diff --git a/docs/Example.ipynb b/docs/Example.ipynb index 7dcb614c..a99e74a5 100644 --- a/docs/Example.ipynb +++ b/docs/Example.ipynb @@ -32,7 +32,7 @@ "source": [ "import numpy as np\n", "from autora.experiment_runner.synthetic.psychophysics.weber_fechner_law import weber_fechner_law\n", - "s = weber_fechner_law(random_state=None)" + "s = weber_fechner_law()" ] }, { @@ -53,7 +53,7 @@ "text": [ "Help on function weber_fechner_law in module autora.experiment_runner.synthetic.psychophysics.weber_fechner_law:\n", "\n", - "weber_fechner_law(name='Weber-Fechner Law', resolution=100, constant=1.0, maximum_stimulus_intensity=5.0, added_noise=0.01, random_state: Optional[int] = None)\n", + "weber_fechner_law(name='Weber-Fechner Law', resolution=100, constant=1.0, maximum_stimulus_intensity=5.0)\n", " Weber-Fechner Law\n", " \n", " Args:\n", @@ -61,8 +61,19 @@ " resolution: number of allowed values for stimulus 1 and 2\n", " constant: constant multiplier\n", " maximum_stimulus_intensity: maximum value for stimulus 1 and 2\n", - " added_noise: standard deviation of normally distributed noise added to y-values\n", - " random_state: integer used to seed the random number generator\n", + " \n", + " Examples:\n", + " >>> experiment = weber_fechner_law()\n", + " \n", + " # We can run the runner with numpy arrays or DataFrames. Ther return value will\n", + " # always be a pandas DataFrame.\n", + " >>> experiment.run(np.array([[.1,.2]]), random_state=42)\n", + " S1 S2 difference_detected\n", + " 0 0.1 0.2 0.696194\n", + " \n", + " >>> experiment.run(pd.DataFrame({'S1': [0.1], 'S2': [0.2]}), random_state=42)\n", + " S1 S2 difference_detected\n", + " 0 0.1 0.2 0.696194\n", "\n" ] } @@ -95,8 +106,19 @@ " resolution: number of allowed values for stimulus 1 and 2\n", " constant: constant multiplier\n", " maximum_stimulus_intensity: maximum value for stimulus 1 and 2\n", - " added_noise: standard deviation of normally distributed noise added to y-values\n", - " random_state: integer used to seed the random number generator\n", + "\n", + " Examples:\n", + " >>> experiment = weber_fechner_law()\n", + "\n", + " # We can run the runner with numpy arrays or DataFrames. Ther return value will\n", + " # always be a pandas DataFrame.\n", + " >>> experiment.run(np.array([[.1,.2]]), random_state=42)\n", + " S1 S2 difference_detected\n", + " 0 0.1 0.2 0.696194\n", + "\n", + " >>> experiment.run(pd.DataFrame({'S1': [0.1], 'S2': [0.2]}), random_state=42)\n", + " S1 S2 difference_detected\n", + " 0 0.1 0.2 0.696194\n", "\n", " \n" ] @@ -248,14 +270,117 @@ "outputs": [ { "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
S1S2difference_detected
00.0100000.010000-0.000829
10.0100000.0604041.806354
20.0100000.1108082.406270
30.0100000.1612122.774411
40.0100000.2116163.056933
............
50454.8991924.949596-0.000753
50464.8991925.0000000.037958
50474.9495964.949596-0.013647
50484.9495965.0000000.020839
50495.0000005.000000-0.021462
\n", + "

5050 rows × 3 columns

\n", + "
" + ], "text/plain": [ - "array([[-5.88880582e-03],\n", - " [ 1.80179776e+00],\n", - " [ 2.39021934e+00],\n", - " ...,\n", - " [-4.27734961e-03],\n", - " [ 2.23683521e-03],\n", - " [ 1.61217945e-02]])" + " S1 S2 difference_detected\n", + "0 0.010000 0.010000 -0.000829\n", + "1 0.010000 0.060404 1.806354\n", + "2 0.010000 0.110808 2.406270\n", + "3 0.010000 0.161212 2.774411\n", + "4 0.010000 0.211616 3.056933\n", + "... ... ... ...\n", + "5045 4.899192 4.949596 -0.000753\n", + "5046 4.899192 5.000000 0.037958\n", + "5047 4.949596 4.949596 -0.013647\n", + "5048 4.949596 5.000000 0.020839\n", + "5049 5.000000 5.000000 -0.021462\n", + "\n", + "[5050 rows x 3 columns]" ] }, "execution_count": null, @@ -265,7 +390,7 @@ ], "source": [ "import numpy as np\n", - "y = s.experiment_runner(x) # doctest: +ELLIPSIS\n", + "y = s.run(x) # doctest: +ELLIPSIS\n", "y" ] }, @@ -283,7 +408,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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1wTV+fUrLraDBw/SsWNH7OzsMDEx4ejRo/dtF0LUbJIwiSpz4sQJHnnkEfz9/bG2tsbHx4devXrx8ccf647Zs2cPs2bNIjU11XiBVhN3PsgPHTpU5sc+CK9jZcV453W782NtbY23tzeRkZEsXLiQ27dvl3iO/Px8hg8fTkpKCh9++CHffvst/v7+xbYL+OyzzzAxMSE8PLzEY48fP86YMWPw8fHB0tIST09POnfuzOzZsys9TmNe+0GMS9wla8mJKrFnzx66d+9OvXr1GD9+PJ6enly9epV9+/Zx4cIFzp8/D8B7773Hyy+/zKVLl6hfv77eOTQaDfn5+VhZWWFiYlKl8S9dupQJEyYUGVdlX/PgwYO0a9euTI+93+toDEW9d5UV453X7c033yQgIID8/Hzi4uLYvn07mzdvpl69evz6668EBwcXG9vZs2dp2rQpX375JU888YTu3MW1C+jUqROHDh0iLy+PmJgYAgMDizzu559/ZvTo0dSrV49HH30Ub29vYmNj2bJlC4mJicTExFRajMa89oMYl9BnbuwARO3w1ltv4ejoyMGDB3FyctLbl5CQUKpzmJmZYWZmVgnRicpmjPeub9++eonm9OnT2bZtGwMGDGDQoEGcOXMGGxubImO78ztZ3O/qP9sNkZmZiZ2dXYWdzxguXbrEnj17ePPNN5kzZw7Lly9n5syZhY67desWEydOJDQ0lG3btmFpaanb9+abb3Ljxo1Ki9GY134Q4xJFUISoAo0bN1a6det232NmzpypAIV+Ll26pCiKoixZskRv+87x0dHRypgxY5Q6deoorq6uyuuvv65otVolNjZWGTRokOLg4KB4eHgo7733nt71xo8fr/j7+xcbx73+ee2yPD49PV154YUXFH9/f8XS0lJxc3NTevbsqRw+fPi+r8edax48eLDQuWNiYpTx48crjo6OSp06dZTHHntMyczMLNXrqCiKcu3aNWXChAmKu7u7YmlpqTRr1kz5+uuvi3we97tWaZ9jce9dUTFu27ZNAZSff/650GuyfPlyBVD27NlTptftXm+//bYCKIsXLy4ytvHjxxeKq2vXrsW2l+c1PXXqlDJ69GjFyclJad26daW9L3fOOXHiRMXLy0uxtLRU6tevrzzzzDNKbm5uma57P3PmzFHMzMyUuLg4pV+/fkpQUFCRx/3www8KoHzzzTelPndFMea176e6xiUKkx4mUSX8/f3Zu3cvJ0+epEWLFkUe8/DDD3Pu3Dm+//57PvzwQ1xdXQFwc3O777lHjhxJ06ZNmT9/PuvXr2fu3Lk4OzvzxRdfEBERwTvvvMPy5cv597//TWhoKA899FCFP7/7eeaZZ/jxxx+ZPHkyzZo1Izk5md27d3PmzBnatm1brnOOGDGCgIAA5s2bR1RUFF999RXu7u688847Jb6O8fHxtG/fHhMTEyZPnoybmxt//PEHjz/+OOnp6UyZMqXU1yrvc7xfjP7+/vj5+bF8+XKGDh2q97jly5fTsGFDOnToUK7XDeDRRx/ltddeY9OmTTz55JOF9j/99NP4+Pjw9ttv8/zzzxMaGoqHhwf29vZFtpfnNR0+fDhBQUG8/fbbKH+PiqiM9+XGjRuEhYWRmprKU089RZMmTbh+/To//vgjWVlZWFpalvm6RVm+fDkPPfQQHh4ejBgxgscee4yDBw8SGhqqd1xmZiagjtcprfz8fNLS0kp1rLOzM6amRQ/NLc+1q0J1jUsUwdgZm6gdNm3apJiZmSlmZmZKhw4dlGnTpikbN25U8vLy9I579913C/WG3FFcL8VTTz2lO6agoEDx9fVVTExMlPnz5+vab926pdjY2Cjjx4/XtVVVD5Ojo6MyadKkIl6V+7tfD9PEiRP1jh06dKji4uKi277f6/j4448rXl5eSlJSkl77qFGjFEdHRyUrK6tM1yrNcyzq9btfjNOnT1esrKyU1NRUXVtCQoJibm6uzJw5s9jr3Hut4nqY7sTbpk2bYmP7888/FUBZvXq13uOKay/razp69OhCMVXG+zJu3DjF1NS0yNdCq9WW6brFOXTokAIoixYtUhRFUVJTUxVLS0vlhRdeKHTs5cuXFVtbWwVQgoKClGnTpinbtm1TCgoKij3/nde8ND9F/S4Zcu2qUF3jEoXJLDlRJXr16sXevXsZNGgQx44dY8GCBURGRuLj48Ovv/5q0LnvHXxrZmZGu3btUBSFxx9/XNfu5ORE48aNuXjxokHXKg8nJyf2799foWMRnnnmGb3tLl26kJycTHp6+n0fpygKP/30EwMHDkRRFJKSknQ/kZGRpKWlERUVVeZrVfRzHDduHLm5ufz444+6tlWrVlFQUMDYsWMNPr+9vX2pZsuVRkW8ppXxvmi1WtauXcvAgQOLnDRgYmJSruv+0/LlyzE3N2fYsGEAODo60qdPH1auXIlGo9E79k5P84gRI7hx4wYLFiwgIiKCBg0asGXLliLP36pVKzZv3lyqH09Pz2LjLM+1S6LVasnJySnVj1LM/KrKiEtUDkmYRJUJDQ3l559/5tatWxw4cIDp06dz+/ZtHnnkEU6fPl3u89arV09v29HREWtra91tnnvbb926Ve7rlNeCBQs4efIkfn5+hIWFMWvWLIMTt38+57p16wKU+PwSExNJTU1l8eLFuLm56f1MmDABKDwIvzTXqujn2KRJE0JDQ1m+fLmubfny5bRv377Y2VdlkZGRgYODg8HngfK9pgEBAQafo6T3JTExkfT09GJvgZf3uvfSaDSsXLmSiIgIvb+3kSNHEh8fz9atWws9Jjg4mFWrVpGSksKff/7JhAkTuHr1KqNGjSIrK6vQ8XXr1qVnz56l+rG2ti421tJe+/PPP6dt27ZYWFgwa9as+55v586d2NjYlOonOjraoLhAfb/69++PnZ0djRs3LvL1FZVHxjCJKmdpaUloaCihoaE0atSICRMmsHr16iJn1ZRGUbOvipuRde+3vOJKE/zzW3FxSvv4ESNG0KVLF9asWcOmTZt49913eeedd/j555/p27dvqa71T6V5fkXRarUAjB07lvHjxxd5zJ3p9mW5VmU8x3HjxvHCCy9w7do1cnNz2bdvH5988km5znWva9eukZaWViGJF5TvNbWxsTH4HOX9HTD0uvfatm0bN2/eZO7cuXrtgwYNwsbGhuXLl9O7d+8iH2tpaUm3bt3o1q0biYmJrFu3jujoaNq0aaN3XF5eHikpKaV6Pm5ubqWajXm/a3t5eTFr1ixWrFhR4nmaNGnCkiVLShWbl5eXQXEBTJo0CU9PTxITE9myZQsjRowgJiYGZ2fnUsUgDCMJkzCqO7cKbt68CRSfhFSGunXrFlk08cqVKxX+eC8vL5599lmeffZZEhISaNu2LW+99Va5k4mSFPc6urm54eDggEajoWfPnhV6zbI+x5Le61GjRjF16lS+//57srOzsbCwYOTIkQbH+e233wIQGRlp8LmgYl7Tynhf3NzcqFOnDidPnqy06y5fvhwLC4tCg/Pt7e3p168fa9asYdGiRYUSxH+ysrIC1F7gf7pTw600ylPT65/XHjJkCAC///57iY/19PTkscceK9P1yhtXRkYGa9eu5eLFi9ja2jJo0CBatmzJL7/8ousNFJVLbsmJKvHnn38W+c33zj9KjRs3BtDVo6mKCtUNGzYkLS1Nb3bKzZs3WbNmTYU9XqPRFJrh4+7ujre3N7m5uQY+g+IV9zqamZkxbNgwfvrppyI/SBMTE8t8rfI+x5Lea1dXV/r27ct3333H8uXL6dOnT6HbrGW1bds25syZQ0BAAGPGjDHoXHdUxGtaGe+LqakpQ4YM4bfffiuyWryiKAZdNzs7m59//plevXrpbgfea8SIEdy+fVs3RnH37t1kZ2cXOu748eNs2LCBNm3a0KBBg0L7K2IMU3mvXdnKEldMTAz29vb4+vrqjmvZsiWnTp2qsnhrO+lhElXiueeeIysri6FDh9KkSRPy8vLYs2cPq1aton79+rpvSCEhIQD85z//YdSoUVhYWDBw4MBKKew3atQoXnnlFYYOHcrzzz9PVlYWn3/+OY0aNSpxoGtpH3/79m18fX155JFHaNWqFfb29mzZsoWDBw/y/vvvV/hzuuN+r+P8+fP5888/CQ8P58knn6RZs2akpKQQFRXFli1bSn37447yPsfSvNfjxo3jkUceAWDOnDlliuuPP/7g7NmzFBQUEB8fz7Zt29i8eTP+/v78+uuvJY53KYuKeE0r+n0BePvtt9m0aRNdu3blqaeeomnTpty8eZPVq1eze/dunJycyn3dX3/9VTdwfv78+YX23xl7s3z5ckaOHMmrr77KuXPnGD58OK1ataKgoICjR4/y7bff4ujoqOv5+6c7Y5gMUd5rV7ayxJWRkUGdOnX0Hl+nTh2Sk5OrOuzaq+on5ona6I8//lAmTpyoNGnSRLG3t1csLS2VwMBA5bnnnlPi4+P1jp0zZ47i4+OjmJqalqpwZWJiot7jx48fr9jZ2RWKoWvXrkrz5s312jZt2qS0aNFCsbS0VBo3bqx89913pS4rUJrH5+bmKi+//LLSqlUrxcHBQbGzs1NatWqlfPbZZyW+ZvcrK/DP51xUfMW9joqiKPHx8cqkSZMUPz8/xcLCQvH09FR69OihK+ZYlmuV5jkW9/rdL8Y7565bt67i6OioZGdnl/ia3XutOz+WlpaKp6en0qtXL+W///2vkp6eXuJrV9ayAopi2GtaEeco7jW+cuWKMm7cOMXNzU2xsrJSGjRooEyaNEmvcGVprvtPAwcOLNVUfwsLCyUpKUn5+eefldGjRyuBgYGKnZ2dYm1trTRt2lR5+eWXlYSEhGKvUxHKc+2nn366xBIWVRlXVFSUUrduXb22yZMnKy+99FKlxijukrXkhBDVVkFBAd7e3gwcOJCvv/7a2OGIWuSZZ57B09OzxJlyVSUjIwNnZ2cuXbqEj48PAN27d2fcuHEyhqmKyBgmIUS1tXbtWhITExk3bpyxQxG1REFBATk5OWg0Gr3/NzZ7e3sGDx7MzJkzyc7OZt26dRw/fpzBgwcbO7RaQ3qYhBDVzv79+zl+/Dhz5szB1dW1VGPKhKgIs2bNYvbs2XptS5YsqbTZcGWRmJjI+PHj2b59O76+vnz22WcVPttVFE8SJiFEtfPYY4/x3Xff0bp1a5YuXXrf4otCCFEVJGESQgghhCiBjGESQgghhCiBJExCCCGEECWQhEkIIYQQogSSMAkhhBBClEASJiGEEEKIEkjCJIQQQghRAkmYhBBCCCFKIAmTEEIIIUQJJGESQgghhCiBJExCCCGEECWQhEkIIYQQogT/D0pVVM53B7fkAAAAAElFTkSuQmCC", "text/plain": [ "
" ] diff --git a/src/autora/experiment_runner/synthetic/abstract/template_experiment.py b/src/autora/experiment_runner/synthetic/abstract/template_experiment.py index 2b233db1..335d29a8 100644 --- a/src/autora/experiment_runner/synthetic/abstract/template_experiment.py +++ b/src/autora/experiment_runner/synthetic/abstract/template_experiment.py @@ -7,7 +7,7 @@ ... ) We can instantiate the experiment using the imported function - >>> s = template_experiment(random_state=42) + >>> s = template_experiment() >>> s # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE SyntheticExperimentCollection(name='Template Experiment', description='...', params={'name': ...}, ...) @@ -25,8 +25,8 @@ [3]]) >>> s.ground_truth # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE - functools.partial(.experiment_runner at 0x...>, - observation_noise=0.0) + functools.partial(.run at 0x...>, + added_noise=0.0) >>> s.ground_truth(1.) 2.0 @@ -38,25 +38,25 @@ [4.]]) - >>> s.experiment_runner # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE - .experiment_runner at 0x...> + >>> s.run # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE + .run at 0x...> - >>> s.experiment_runner(1.) - 1.986978204931377 + >>> s.run(1., random_state=42) + 2.003047170797544 - >>> s.experiment_runner(s.domain()) - array([[1.0012784 ], - [1.99683757], - [2.99983199], - [3.99146956]]) + >>> s.run(s.domain(), random_state=42) + array([[1.00304717], + [1.98960016], + [3.00750451], + [4.00940565]]) >>> s.plotter() >>> plt.show() # doctest: +SKIP Generate a new version of the experiment with different parameters: - >>> new_params = dict(s.params, **dict(random_state=190)) + >>> new_params = dict(s.params) >>> s.factory_function(**new_params) # doctest: +ELLIPSIS - SyntheticExperimentCollection(..., params={..., 'random_state': 190}, ...) + SyntheticExperimentCollection(...) """ @@ -74,19 +74,17 @@ def template_experiment( # Add any configurable parameters with their defaults here: name: str = "Template Experiment", - random_state: Optional[int] = None, ): """ A template for synthetic experiments. Parameters: - random_state: seed for random number generator + name: name of the experiment """ params = dict( # Include all parameters here: name=name, - random_state=random_state, ) # Define variables @@ -98,15 +96,19 @@ def template_experiment( ) # Define experiment runner - rng = np.random.default_rng(random_state) - def experiment_runner(conditions: ArrayLike, observation_noise: float = 0.01): + def run( + conditions: ArrayLike, + added_noise: float = 0.01, + random_state: Optional[int] = None, + ): """A function which simulates noisy observations.""" + rng = np.random.default_rng(random_state) x_ = np.array(conditions) - y = x_ + 1.0 + rng.normal(0, observation_noise, size=x_.shape) + y = x_ + 1.0 + rng.normal(0, added_noise, size=x_.shape) return y - ground_truth = partial(experiment_runner, observation_noise=0.0) + ground_truth = partial(run, added_noise=0.0) """A function which simulates perfect observations""" def domain(): @@ -135,7 +137,7 @@ def plotter(model=None): name=name, description=template_experiment.__doc__, variables=variables, - experiment_runner=experiment_runner, + run=run, ground_truth=ground_truth, domain=domain, plotter=plotter, diff --git a/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py b/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py index 4af9eb83..b8c1bced 100644 --- a/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py +++ b/src/autora/experiment_runner/synthetic/economics/expected_value_theory.py @@ -75,7 +75,6 @@ def expected_value_theory( resolution=10, minimum_value=-1, maximum_value=1, - random_state: Optional[int] = None, ): """ Expected Value Theory @@ -87,8 +86,6 @@ def expected_value_theory( resolution: minimum_value: maximum_value: - random_state: - """ params = dict( @@ -98,18 +95,18 @@ def expected_value_theory( resolution=resolution, choice_temperature=choice_temperature, value_lambda=value_lambda, - random_state=random_state, ) variables = get_variables( minimum_value=minimum_value, maximum_value=maximum_value, resolution=resolution ) - rng = np.random.default_rng(random_state) - def experiment_runner( + def run( conditions: Union[pd.DataFrame, np.ndarray, np.recarray], - observation_noise: float = 0.01, + added_noise: float = 0.01, + random_state: Optional[int] = None, ): + rng = np.random.default_rng(random_state) X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) for idx, x in enumerate(X): @@ -119,8 +116,8 @@ def experiment_runner( probability_a = x[1] probability_b = x[3] - expected_value_A = value_A * probability_a + rng.normal(0, observation_noise) - expected_value_B = value_B * probability_b + rng.normal(0, observation_noise) + expected_value_A = value_A * probability_a + rng.normal(0, added_noise) + expected_value_B = value_B * probability_b + rng.normal(0, added_noise) # compute probability of choosing option A p_choose_A = np.exp(expected_value_A / choice_temperature) / ( @@ -135,7 +132,7 @@ def experiment_runner( experiment_data[variables.dependent_variables[0].name] = Y return experiment_data - ground_truth = partial(experiment_runner, observation_noise=0.0) + ground_truth = partial(run, added_noise=0.0) def domain(): X = np.array( @@ -191,7 +188,7 @@ def plotter(model=None): name=name, description=expected_value_theory.__doc__, variables=variables, - experiment_runner=experiment_runner, + run=run, ground_truth=ground_truth, domain=domain, plotter=plotter, diff --git a/src/autora/experiment_runner/synthetic/economics/prospect_theory.py b/src/autora/experiment_runner/synthetic/economics/prospect_theory.py index c4aba260..c2ac20de 100644 --- a/src/autora/experiment_runner/synthetic/economics/prospect_theory.py +++ b/src/autora/experiment_runner/synthetic/economics/prospect_theory.py @@ -21,7 +21,6 @@ def prospect_theory( resolution=10, minimum_value=-1, maximum_value=1, - random_state: Optional[int] = None, ): """ Parameters from @@ -54,19 +53,19 @@ def prospect_theory( resolution=resolution, minimum_value=minimum_value, maximum_value=maximum_value, - random_state=random_state, name=name, ) variables = get_variables( minimum_value=minimum_value, maximum_value=maximum_value, resolution=resolution ) - rng = np.random.default_rng(random_state) - def experiment_runner( + def run( conditions: Union[pd.DataFrame, np.ndarray, np.recarray], - observation_noise=0.01, + added_noise=0.01, + random_state: Optional[int] = None, ): + rng = np.random.default_rng(random_state) X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) for idx, x in enumerate(X): @@ -118,8 +117,8 @@ def experiment_runner( x[3] ** coefficient + (1 - x[3]) ** coefficient ) ** (1 / coefficient) - expected_value_A = value_A * probability_a + rng.normal(0, observation_noise) - expected_value_B = value_B * probability_b + rng.normal(0, observation_noise) + expected_value_A = value_A * probability_a + rng.normal(0, added_noise) + expected_value_B = value_B * probability_b + rng.normal(0, added_noise) # compute probability of choosing option A p_choose_A = np.exp(expected_value_A / choice_temperature) / ( @@ -134,7 +133,7 @@ def experiment_runner( experiment_data[variables.dependent_variables[0].name] = Y return experiment_data - ground_truth = partial(experiment_runner, observation_noise=0.0) + ground_truth = partial(run, added_noise=0.0) def domain(): v_a = variables.independent_variables[0].allowed_values @@ -196,7 +195,7 @@ def plotter(model=None): params=params, variables=variables, domain=domain, - experiment_runner=experiment_runner, + run=run, ground_truth=ground_truth, plotter=plotter, factory_function=prospect_theory, diff --git a/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py b/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py index 2999595a..5569831f 100644 --- a/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py +++ b/src/autora/experiment_runner/synthetic/psychology/luce_choice_ratio.py @@ -13,7 +13,6 @@ def luce_choice_ratio( resolution=8, maximum_similarity=10, focus=0.8, - random_state: Optional[int] = None, ): """ Luce-Choice-Ratio @@ -34,7 +33,7 @@ def luce_choice_ratio( Examples: We can instantiate a Shepard-Cue Choice Experiment. We use a seed to get replicable results: - >>> l_s_experiment = luce_choice_ratio(random_state=42) + >>> l_s_experiment = luce_choice_ratio() We can look at the name of the experiment: >>> l_s_experiment.name @@ -48,9 +47,9 @@ def luce_choice_ratio( [1 rows x 5 columns] We can also run an experiment: - >>> l_s_experiment.experiment_runner(np.array([[1,2,3,4]])) + >>> l_s_experiment.run(np.array([[1,2,3,4]]), random_state=42) similarity_category_A1 ... choose_A1 - 0 1 ... 0.20779 + 0 1 ... 0.211328 [1 rows x 5 columns] @@ -68,7 +67,6 @@ def luce_choice_ratio( minimum_similarity=minimum_similarity, resolution=resolution, focus=focus, - random_state=random_state, ) similarity_category_A1 = IV( @@ -125,13 +123,13 @@ def luce_choice_ratio( dependent_variables=[choose_A1], ) - rng = np.random.default_rng(random_state) - - def experiment_runner( + def run( conditions: Union[pd.DataFrame, np.ndarray, np.recarray], focus_: float = focus, - observation_noise=0.01, + added_noise=0.01, + random_state: Optional[int] = None, ): + rng = np.random.default_rng(random_state) X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) for idx, x in enumerate(X): @@ -140,7 +138,7 @@ def experiment_runner( similarity_B1 = x[2] similarity_B2 = x[3] - y = (similarity_A1 * focus + rng.normal(0, observation_noise)) / ( + y = (similarity_A1 * focus + rng.normal(0, added_noise)) / ( similarity_A1 * focus + similarity_A2 * focus + similarity_B1 * (1 - focus_) @@ -157,7 +155,7 @@ def experiment_runner( experiment_data[choose_A1.name] = Y return experiment_data - ground_truth = partial(experiment_runner, observation_noise=0.0) + ground_truth = partial(run, added_noise=0.0) def domain(): similarity_A1 = variables.independent_variables[0].allowed_values @@ -241,7 +239,7 @@ def plotter( name=name, description=luce_choice_ratio.__doc__, variables=variables, - experiment_runner=experiment_runner, + run=run, ground_truth=ground_truth, domain=domain, plotter=plotter, diff --git a/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py b/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py index db9d7c95..11cb725a 100644 --- a/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py +++ b/src/autora/experiment_runner/synthetic/psychophysics/weber_fechner_law.py @@ -13,7 +13,6 @@ def weber_fechner_law( resolution=100, constant=1.0, maximum_stimulus_intensity=5.0, - random_state: Optional[int] = None, ): """ Weber-Fechner Law @@ -23,21 +22,19 @@ def weber_fechner_law( resolution: number of allowed values for stimulus 1 and 2 constant: constant multiplier maximum_stimulus_intensity: maximum value for stimulus 1 and 2 - added_noise: standard deviation of normally distributed noise added to y-values - random_state: integer used to seed the random number generator Examples: - >>> experiment = weber_fechner_law(random_state=42) + >>> experiment = weber_fechner_law() # We can run the runner with numpy arrays or DataFrames. Ther return value will # always be a pandas DataFrame. - >>> experiment.experiment_runner(np.array([[.1,.2]])) + >>> experiment.run(np.array([[.1,.2]]), random_state=42) S1 S2 difference_detected 0 0.1 0.2 0.696194 - >>> experiment.experiment_runner(pd.DataFrame({'S1': [0.1], 'S2': [0.2]})) + >>> experiment.run(pd.DataFrame({'S1': [0.1], 'S2': [0.2]}), random_state=42) S1 S2 difference_detected - 0 0.1 0.2 0.682747 + 0 0.1 0.2 0.696194 """ @@ -46,7 +43,6 @@ def weber_fechner_law( resolution=resolution, constant=constant, maximum_stimulus_intensity=maximum_stimulus_intensity, - random_state=random_state, ) iv1 = IV( @@ -84,17 +80,17 @@ def weber_fechner_law( dependent_variables=[dv1], ) - rng = np.random.default_rng(random_state) - - def experiment_runner( + def run( conditions: Union[pd.DataFrame, np.ndarray, np.recarray], - observation_noise=0.01, + added_noise=0.01, + random_state: Optional[int] = None, ): + rng = np.random.default_rng(random_state) X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) for idx, x in enumerate(X): - y = constant * np.log(x[1] / x[0]) + rng.normal(0, observation_noise) + y = constant * np.log(x[1] / x[0]) + rng.normal(0, added_noise) Y[idx] = y experiment_data = pd.DataFrame(conditions) @@ -102,7 +98,7 @@ def experiment_runner( experiment_data[dv1.name] = Y return experiment_data - ground_truth = partial(experiment_runner, observation_noise=0.0) + ground_truth = partial(run, added_noise=0.0) def domain(): s1_values = variables.independent_variables[0].allowed_values @@ -161,7 +157,7 @@ def plotter( name=name, description=weber_fechner_law.__doc__, variables=variables, - experiment_runner=experiment_runner, + run=run, ground_truth=ground_truth, domain=domain, plotter=plotter, diff --git a/src/autora/experiment_runner/synthetic/utilities.py b/src/autora/experiment_runner/synthetic/utilities.py index b516afdc..a98d7b73 100644 --- a/src/autora/experiment_runner/synthetic/utilities.py +++ b/src/autora/experiment_runner/synthetic/utilities.py @@ -37,11 +37,11 @@ ... def domain(): ... return np.linspace(*x.value_range, resolution).reshape(-1, 1) ... - ... def experiment_runner(X, std=0.1): + ... def run(X, std=0.1): ... return np.sin((X - delta) * omega) + (X * m) + rng.normal(0, std, X.shape) ... ... def ground_truth(X): - ... return experiment_runner(X, std=0.) + ... return run(X, std=0.) ... ... def plotter(model=None): ... plt.plot(domain(), ground_truth(domain()), label="Ground Truth") @@ -55,7 +55,7 @@ ... params=params, ... variables=variables, ... domain=domain, - ... experiment_runner=experiment_runner, + ... run=run, ... ground_truth=ground_truth, ... plotter=plotter, ... factory_function=sinusoid_experiment, @@ -124,7 +124,7 @@ class SyntheticExperimentCollection: params: a dictionary with the settable parameters of the model and their respective values variables: a VariableCollection describing the variables of the model domain: a function which returns all the available X values for the model - experiment_runner: a function which takes X values and returns simulated y values **with + run: a function which takes X values and returns simulated y values **with statistical noise** ground_truth: a function which takes X values and returns simulated y values **without any statistical noise** @@ -137,7 +137,7 @@ class SyntheticExperimentCollection: params: Optional[Dict] = None variables: Optional[VariableCollection] = None domain: Optional[Callable] = None - experiment_runner: Optional[Callable] = None + run: Optional[Callable] = None ground_truth: Optional[Callable] = None plotter: Optional[Callable[[Optional[_SupportsPredict]], None]] = None factory_function: Optional[_SyntheticExperimentFactory] = None From f095cb87061f9dc22823c21293e8870bfcf7cb50 Mon Sep 17 00:00:00 2001 From: Younes Strittmatter Date: Fri, 1 Sep 2023 04:09:37 -0400 Subject: [PATCH 9/9] chore/bug: rename back to added_noise, move random_state to run, rename experiment_runner to run in new synthetic models/fixxed wrong input statements, added new models to test --- .../synthetic/neuroscience/task_switching.py | 120 +++++++++++------- .../synthetic/psychology/exp_learning.py | 49 ++++--- .../psychophysics/stevens_power_law.py | 32 ++--- tests/test_bundled_models.py | 14 +- 4 files changed, 118 insertions(+), 97 deletions(-) diff --git a/src/autora/experiment_runner/synthetic/neuroscience/task_switching.py b/src/autora/experiment_runner/synthetic/neuroscience/task_switching.py index d3fb9441..a132b22e 100644 --- a/src/autora/experiment_runner/synthetic/neuroscience/task_switching.py +++ b/src/autora/experiment_runner/synthetic/neuroscience/task_switching.py @@ -15,10 +15,9 @@ def task_switching( temperature=0.2, minimum_task_control=0.15, constant=1.5, - random_state: Optional[int] = None, ): """ - Weber-Fechner Law + Task Switchng Args: name: name of the experiment @@ -27,7 +26,6 @@ def task_switching( temperature: temperature for softmax when computing performance of current task constant: constant for task activation minimum_task_control: minimum task control - random_state: integer used to seed the random number generator """ params = dict( @@ -37,7 +35,6 @@ def task_switching( temperature=temperature, minimum_task_control=minimum_task_control, constant=constant, - random_state=random_state, ) current_task_strength = IV( @@ -46,7 +43,7 @@ def task_switching( value_range=(0, 1), units="intensity", variable_label="Strength of Current Task", - type=ValueType.REAL + type=ValueType.REAL, ) alt_task_strength = IV( @@ -55,7 +52,7 @@ def task_switching( value_range=(0, 1), units="intensity", variable_label="Strength of Alternative Task", - type=ValueType.REAL + type=ValueType.REAL, ) is_switch = IV( @@ -64,7 +61,7 @@ def task_switching( value_range=(0, 1), units="indicator", variable_label="Is Switch", - type=ValueType.PROBABILITY_SAMPLE + type=ValueType.PROBABILITY_SAMPLE, ) cur_task_performance = DV( @@ -72,26 +69,24 @@ def task_switching( value_range=(0, 1), units="performance", variable_label="Accuray of Current Task", - type=ValueType.PROBABILITY + type=ValueType.PROBABILITY, ) variables = VariableCollection( - independent_variables=[current_task_strength, - alt_task_strength, - is_switch], + independent_variables=[current_task_strength, alt_task_strength, is_switch], dependent_variables=[cur_task_performance], ) - rng = np.random.default_rng(random_state) - def inverse(x, A, B): y = 1 / (A * x + B) return y - def experiment_runner( + def run( conditions: Union[pd.DataFrame, np.ndarray, np.recarray], - observation_noise: float = 0.01, + added_noise: float = 0.01, + random_state: Optional[int] = None, ): + rng = np.random.default_rng(random_state) X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) for idx, x in enumerate(X): @@ -101,38 +96,39 @@ def experiment_runner( # determine current task control - input_ratio = (cur_task_strength + priming_default * (1 - is_switch)) / \ - (alt_task_strength + priming_default * (is_switch)) + input_ratio = (cur_task_strength + priming_default * (1 - is_switch)) / ( + alt_task_strength + priming_default * (is_switch) + ) cur_task_control = inverse(input_ratio, 2.61541389, 0.7042097) cur_task_control = np.max([cur_task_control, minimum_task_control]) - cur_task_input = cur_task_strength + \ - priming_default * (1 - is_switch) + \ - cur_task_control + \ - rng.random.normal(0, std) + cur_task_input = ( + cur_task_strength + + priming_default * (1 - is_switch) + + cur_task_control + + rng.random.normal(0, added_noise) + ) - alt_task_input = alt_task_strength + \ - priming_default * (is_switch) + \ - rng.random.normal(0, std) + alt_task_input = ( + alt_task_strength + + priming_default * (is_switch) + + rng.random.normal(0, added_noise) + ) cur_task_activation = 1 - np.exp(-constant * cur_task_input) alt_task_activation = 1 - np.exp(-constant * alt_task_input) - cur_task_performance = np.exp(cur_task_activation * 1 / temperature) / \ - (np.exp(cur_task_activation * 1 / temperature) + - np.exp(alt_task_activation * 1 / temperature)) - - # word switch - # word nonswitch - # color switch - # color nonswitch + cur_task_performance = np.exp(cur_task_activation * 1 / temperature) / ( + np.exp(cur_task_activation * 1 / temperature) + + np.exp(alt_task_activation * 1 / temperature) + ) Y[idx] = cur_task_performance return Y - ground_truth = partial(experiment_runner, observation_noise=0.0) + ground_truth = partial(run, added_noise=0.0) def domain(): s1_values = variables.independent_variables[0].allowed_values @@ -181,10 +177,12 @@ def plotter( color_repetition_performance = y[3, 0] x_data = [1, 2] - word_performance = (1 - np.array([word_repetition_performance, - word_switch_performance])) * 100 - color_performance = (1 - np.array([color_repetition_performance, - color_switch_performance])) * 100 + word_performance = ( + 1 - np.array([word_repetition_performance, word_switch_performance]) + ) * 100 + color_performance = ( + 1 - np.array([color_repetition_performance, color_switch_performance]) + ) * 100 if model is not None: y_pred = model.predict(X) @@ -192,17 +190,29 @@ def plotter( word_repetition_performance_pred = y_pred[1][0] color_switch_performance_pred = y_pred[2][0] color_repetition_performance_pred = y_pred[3][0] - word_performance_recovered = (1 - np.array([word_repetition_performance_pred, - word_switch_performance_pred])) * 100 - color_performance_recovered = (1 - np.array([color_repetition_performance_pred, - color_switch_performance_pred])) * 100 - - legend = ('Word Task (Original)', 'Color Task (Original)', - 'Word Task (Recovered)', 'Color Task (Recovered)',) + word_performance_recovered = ( + 1 + - np.array( + [word_repetition_performance_pred, word_switch_performance_pred] + ) + ) * 100 + color_performance_recovered = ( + 1 + - np.array( + [color_repetition_performance_pred, color_switch_performance_pred] + ) + ) * 100 + + legend = ( + "Word Task (Original)", + "Color Task (Original)", + "Word Task (Recovered)", + "Color Task (Recovered)", + ) # plot - import matplotlib.pyplot as plt import matplotlib.colors as mcolors + import matplotlib.pyplot as plt colors = mcolors.TABLEAU_COLORS col_keys = list(colors.keys()) @@ -210,21 +220,33 @@ def plotter( plt.plot(x_data, word_performance, label=legend[0], c=colors[col_keys[0]]) plt.plot(x_data, color_performance, label=legend[1], c=colors[col_keys[1]]) if model is not None: - plt.plot(x_data, word_performance_recovered, '--', label=legend[2], c=colors[col_keys[0]]) - plt.plot(x_data, color_performance_recovered, '--', label=legend[3], c=colors[col_keys[1]]) + plt.plot( + x_data, + word_performance_recovered, + "--", + label=legend[2], + c=colors[col_keys[0]], + ) + plt.plot( + x_data, + color_performance_recovered, + "--", + label=legend[3], + c=colors[col_keys[1]], + ) plt.xlim([0.5, 2.5]) plt.ylim([0, 50]) plt.ylabel("Error Rate (%)", fontsize="large") plt.legend(loc=2, fontsize="large") plt.title("Task Switching", fontsize="large") - plt.xticks(x_data, ['Repetition', 'Switch'], rotation='horizontal') + plt.xticks(x_data, ["Repetition", "Switch"], rotation="horizontal") plt.show() collection = SyntheticExperimentCollection( name=name, description=task_switching.__doc__, variables=variables, - experiment_runner=experiment_runner, + run=run, ground_truth=ground_truth, domain=domain, plotter=plotter, diff --git a/src/autora/experiment_runner/synthetic/psychology/exp_learning.py b/src/autora/experiment_runner/synthetic/psychology/exp_learning.py index b2654dd3..24ed25dc 100644 --- a/src/autora/experiment_runner/synthetic/psychology/exp_learning.py +++ b/src/autora/experiment_runner/synthetic/psychology/exp_learning.py @@ -1,7 +1,8 @@ from functools import partial -from typing import Optional +from typing import Optional, Union import numpy as np +import pandas as pd from autora.experiment_runner.synthetic.utilities import SyntheticExperimentCollection from autora.variable import DV, IV, ValueType, VariableCollection @@ -15,7 +16,6 @@ def exp_learning( maximum_initial_value=0.5, lr=0.03, p_asymptotic=1.0, - random_state: Optional[int] = None, ): """ Exponential Learning @@ -28,7 +28,6 @@ def exp_learning( minimum_trial: upper bound for exponential constant name: name of the experiment resolution: number of allowed values for stimulus - random_state: integer used to seed the random number generator """ maximum_trial = resolution @@ -42,31 +41,26 @@ def exp_learning( maximum_initial_value=maximum_initial_value, lr=lr, p_asymptotic=p_asymptotic, - random_state=random_state, ) p_initial = IV( name="P_asymptotic", - allowed_values=np.linspace(minimum_initial_value, - maximum_initial_value, - resolution), - value_range=(minimum_initial_value, - maximum_initial_value), + allowed_values=np.linspace( + minimum_initial_value, maximum_initial_value, resolution + ), + value_range=(minimum_initial_value, maximum_initial_value), units="performance", variable_label="Asymptotic Performance", - type=ValueType.REAL + type=ValueType.REAL, ) trial = IV( name="trial", - allowed_values=np.linspace(minimum_trial, - maximum_trial, - resolution), - value_range=(minimum_trial, - maximum_trial), + allowed_values=np.linspace(minimum_trial, maximum_trial, resolution), + value_range=(minimum_trial, maximum_trial), units="trials", variable_label="Trials", - type=ValueType.REAL + type=ValueType.REAL, ) performance = DV( @@ -74,7 +68,7 @@ def exp_learning( value_range=(0, p_asymptotic), units="performance", variable_label="Performance", - type=ValueType.REAL + type=ValueType.REAL, ) variables = VariableCollection( @@ -82,12 +76,12 @@ def exp_learning( dependent_variables=[performance], ) - rng = np.random.default_rng(random_state) - - def experiment_runner( + def run( conditions: Union[pd.DataFrame, np.ndarray, np.recarray], - observation_noise: float = 0.01, + added_noise: float = 0.01, + random_state: Optional[int] = None, ): + rng = np.random.default_rng(random_state) X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) @@ -95,17 +89,22 @@ def experiment_runner( # Heathcote, A., Brown, S., & Mewhort, D. J. (2000). The power law repealed: # The case for an exponential law of practice. Psychonomic bulletin & review, 7(2), 185–207. - # Thurstone, L. L. (1919). The learning curve equation. Psy- chological Monographs, 26(3), i. + # Thurstone, L. L. (1919). The learning curve equation. + # Psy- chological Monographs, 26(3), i. for idx, x in enumerate(X): p_initial_exp = x[0] trial_exp = x[1] - y = p_asymptotic - (p_asymptotic - p_initial_exp) * np.exp(- lr * trial_exp) + rng.random.normal(0, std) + y = ( + p_asymptotic + - (p_asymptotic - p_initial_exp) * np.exp(-lr * trial_exp) + + rng.random.normal(0, added_noise) + ) Y[idx] = y return Y - ground_truth = partial(experiment_runner, observation_noise=0.0) + ground_truth = partial(run, added_noise=0.0) def domain(): p_initial_values = variables.independent_variables[0].allowed_values @@ -149,7 +148,7 @@ def plotter( name=name, description=exp_learning.__doc__, variables=variables, - experiment_runner=experiment_runner, + run=run, ground_truth=ground_truth, domain=domain, plotter=plotter, diff --git a/src/autora/experiment_runner/synthetic/psychophysics/stevens_power_law.py b/src/autora/experiment_runner/synthetic/psychophysics/stevens_power_law.py index 243d5534..7ebec869 100644 --- a/src/autora/experiment_runner/synthetic/psychophysics/stevens_power_law.py +++ b/src/autora/experiment_runner/synthetic/psychophysics/stevens_power_law.py @@ -14,7 +14,6 @@ def stevens_power_law( proportionality_constant=1.0, modality_constant=0.8, maximum_stimulus_intensity=5.0, - random_state: Optional[int] = None, ): """ Stevens' Power Law @@ -25,8 +24,6 @@ def stevens_power_law( modality_constant: power constant proportionality_constant: constant multiplier maximum_stimulus_intensity: maximum value for stimulus - random_state: integer used to seed the random number generator - """ params = dict( @@ -35,16 +32,17 @@ def stevens_power_law( proportionality_constant=proportionality_constant, modality_constant=modality_constant, maximum_stimulus_intensity=maximum_stimulus_intensity, - random_state=random_state, ) iv1 = IV( name="S", - allowed_values=np.linspace(1 / resolution, maximum_stimulus_intensity, resolution), + allowed_values=np.linspace( + 1 / resolution, maximum_stimulus_intensity, resolution + ), value_range=(1 / resolution, maximum_stimulus_intensity), units="intensity", variable_label="Stimulus Intensity", - type=ValueType.REAL + type=ValueType.REAL, ) dv1 = DV( @@ -52,7 +50,7 @@ def stevens_power_law( value_range=(0, maximum_stimulus_intensity), units="sensation", variable_label="Perceived Intensity", - type=ValueType.REAL + type=ValueType.REAL, ) variables = VariableCollection( @@ -60,21 +58,23 @@ def stevens_power_law( dependent_variables=[dv1], ) - rng = np.random.default_rng(random_state) - - def experiment_runner( + def run( conditions: Union[pd.DataFrame, np.ndarray, np.recarray], - observation_noise: float = 0.01, + added_noise: float = 0.01, + random_state: Optional[int] = None, ): + rng = np.random.default_rng(random_state) X = np.array(conditions) Y = np.zeros((X.shape[0], 1)) for idx, x in enumerate(X): - y = proportionality_constant * x[0] ** modality_constant + rng.random.normal(0, std) + y = proportionality_constant * x[ + 0 + ] ** modality_constant + rng.random.normal(0, added_noise) Y[idx] = y return Y - ground_truth = partial(experiment_runner, observation_noise =0.0) + ground_truth = partial(run, added_noise=0.0) def domain(): s_values = variables.independent_variables[0].allowed_values @@ -85,8 +85,8 @@ def domain(): def plotter( model=None, ): - import matplotlib.pyplot as plt import matplotlib.colors as mcolors + import matplotlib.pyplot as plt colors = mcolors.TABLEAU_COLORS col_keys = list(colors.keys()) @@ -95,7 +95,7 @@ def plotter( plt.plot(X, y, label="Original", c=colors[col_keys[0]]) if model is not None: y = model.predict(X) - plt.plot(X, y, label=f"Recovered", c=colors[col_keys[0]], linestyle="--") + plt.plot(X, y, label="Recovered", c=colors[col_keys[0]], linestyle="--") x_limit = [0, variables.independent_variables[0].value_range[1]] y_limit = [0, 4] x_label = "Stimulus Intensity" @@ -113,7 +113,7 @@ def plotter( name=name, description=stevens_power_law.__doc__, variables=variables, - experiment_runner=experiment_runner, + run=run, ground_truth=ground_truth, domain=domain, plotter=plotter, diff --git a/tests/test_bundled_models.py b/tests/test_bundled_models.py index f78cf93b..5418c946 100644 --- a/tests/test_bundled_models.py +++ b/tests/test_bundled_models.py @@ -8,20 +8,18 @@ expected_value_theory, ) from autora.experiment_runner.synthetic.economics.prospect_theory import prospect_theory -from autora.experiment_runner.synthetic.psychology.luce_choice_ratio import ( - luce_choice_ratio, -) from autora.experiment_runner.synthetic.neuroscience.task_switching import ( task_switching, ) -from autora.experiment_runner.synthetic.psychophysics.weber_fechner_law import ( - weber_fechner_law, +from autora.experiment_runner.synthetic.psychology.exp_learning import exp_learning +from autora.experiment_runner.synthetic.psychology.luce_choice_ratio import ( + luce_choice_ratio, ) from autora.experiment_runner.synthetic.psychophysics.stevens_power_law import ( stevens_power_law, ) -from autora.experiment_runner.synthetic.psychology.exp_learning import ( - exp_learning, +from autora.experiment_runner.synthetic.psychophysics.weber_fechner_law import ( + weber_fechner_law, ) from autora.experiment_runner.synthetic.utilities import describe, register, retrieve @@ -32,6 +30,8 @@ ("template_experiment", template_experiment), ("weber_fechner_law", weber_fechner_law), ("stevens_power_law", stevens_power_law), + ("task_switching", task_switching), + ("exp_learning", exp_learning), ] all_bundled_model_names = [b[0] for b in all_bundled_models]