From 0cf3b45a85b97ea997f3825a0760dc8b0be80294 Mon Sep 17 00:00:00 2001 From: marjanfamili Date: Mon, 17 Feb 2025 10:02:40 +0000 Subject: [PATCH] remove sensitivity analysis fix from this PR --- autoemulate/sensitivity_analysis.py | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/autoemulate/sensitivity_analysis.py b/autoemulate/sensitivity_analysis.py index f1274584..40c1ccb3 100644 --- a/autoemulate/sensitivity_analysis.py +++ b/autoemulate/sensitivity_analysis.py @@ -44,7 +44,7 @@ def _sensitivity_analysis( Si = _sobol_analysis(model, problem, X, N, conf_level) if as_df: - return _sobol_results_to_df(Si, problem) + return _sobol_results_to_df(Si) else: return Si @@ -148,16 +148,14 @@ def _sobol_analysis(model, problem=None, X=None, N=1024, conf_level=0.95): return results -def _sobol_results_to_df(results, problem=None): +def _sobol_results_to_df(results): """ - Convert Sobol results to a (long-format) pandas DataFrame. + Convert Sobol results to a (long-format)pandas DataFrame. Parameters: ----------- results : dict The Sobol indices returned by sobol_analysis. - problem : dict, optional - The problem definition, including 'names'. Returns: -------- @@ -165,13 +163,6 @@ def _sobol_results_to_df(results, problem=None): A DataFrame with columns: 'output', 'parameter', 'index', 'value', 'confidence'. """ rows = [] - # Use custom names if provided, else default to "x1", "x2", etc. - parameter_names = ( - problem["names"] - if problem is not None - else [f"x{i+1}" for i in range(len(next(iter(results.values()))["S1"]))] - ) - for output, indices in results.items(): for index_type in ["S1", "ST", "S2"]: values = indices.get(index_type) @@ -183,7 +174,7 @@ def _sobol_results_to_df(results, problem=None): rows.extend( { "output": output, - "parameter": parameter_names[i], # Use appropriate names + "parameter": f"X{i+1}", "index": index_type, "value": value, "confidence": conf, @@ -196,7 +187,7 @@ def _sobol_results_to_df(results, problem=None): rows.extend( { "output": output, - "parameter": f"{parameter_names[i]}-{parameter_names[j]}", # Use appropriate names + "parameter": f"X{i+1}-X{j+1}", "index": index_type, "value": values[i, j], "confidence": conf_values[i, j], @@ -205,15 +196,16 @@ def _sobol_results_to_df(results, problem=None): for j in range(i + 1, n) if not np.isnan(values[i, j]) ) + return pd.DataFrame(rows) # plotting -------------------------------------------------------------------- -def _validate_input(results, problem, index): +def _validate_input(results, index): if not isinstance(results, pd.DataFrame): - results = _sobol_results_to_df(results, problem=problem) + results = _sobol_results_to_df(results) # we only want to plot one index type at a time valid_indices = ["S1", "S2", "ST"] if index not in valid_indices: @@ -249,7 +241,7 @@ def _create_bar_plot(ax, output_data, output_name): ax.set_title(f"Output: {output_name}") -def _plot_sensitivity_analysis(results, problem, index="S1", n_cols=None, figsize=None): +def _plot_sensitivity_analysis(results, index="S1", n_cols=None, figsize=None): """ Plot the sensitivity analysis results. @@ -271,7 +263,7 @@ def _plot_sensitivity_analysis(results, problem, index="S1", n_cols=None, figsiz """ with plt.style.context("fast"): # prepare data - results = _validate_input(results, problem, index) + results = _validate_input(results, index) unique_outputs = results["output"].unique() n_outputs = len(unique_outputs)