pyissm.inversion.sensitivity
Sensitivity analysis tools for ISSM inversions.
This module provides functions to systematically vary inversion parameters, execute runs, and compute diagnostics for analyzing sensitivity of inversion results to parameter choices.
Functions
|
Assign inversion cost function coefficients. |
|
Build parameter sensitivity combinations. |
|
Compute diagnostics for parameter sensitivity runs from a manifest. |
|
Load a parameter sensitivity run from a manifest row. |
|
Normalize diagnostic columns to [0, 1]. |
|
Run inversion sensitivity experiments. |
- pyissm.inversion.sensitivity.assign_cost_functions(md, coefficients, global_mask=None, coeff_masks=None)
Assign inversion cost function coefficients.
- Parameters:
md (
pyissm.Model) – ISSM model object.coefficients (
dict) –Dictionary mapping cost function IDs to scalar coefficients.
Example
{101: 1000, 103: 25, 502: 1e-19}
global_mask (
numpy.ndarrayofbool, optional) –- Global boolean mask applied to all cost functions.
True -> coefficient active
False -> coefficient set to zero
coeff_masks (
dict, optional) –Dictionary mapping cost-function IDs to boolean masks. Masks are applied in the same way as the global_mask, but only affect their respective cost functions.
Example
{101: vel_mask, 103: grounded_mask}
- Returns:
md – Updated ISSM model.
- Return type:
pyissm.Model
Example
: code-block:: python
>>> coefficients = {101: 1000, ... 103: 25, ... 502: 1e-19} >>> global_mask = md.inversion.vel_obs > 0 >>> md = pyissm.inversion.sensitivity.assign_cost_functions(md, coefficients, global_mask = global_mask)
>>> coeff_masks = {101: md.inversion.vel_obs > 0, ... 103: md.mask.ice_levelset > 0} >>> md = pyissm.inversion.sensitivity.assign_cost_functions(md, coefficients, coeff_masks = coeff_masks)
- pyissm.inversion.sensitivity.build_parameter_grid(coefficients, initial_run_id=1)
Build parameter sensitivity combinations.
- Parameters:
coefficients (
dict) –Dictionary mapping ISSM cost function IDs to coefficient lists.
Example
{101: [0.1, 1, 10], 103: [1, 10], 502: [1e-19]}
initial_run_id (
int, default = 1) – Starting index for run_id assignment. Subsequent runs will have IDs incremented by 1 from this value. Useful for tracking runs across multiple calls to this function without overwriting previous run_ids.
- Returns:
Parameter combination table.
- Return type:
pandas.DataFrame
Notes
- Returned DataFrame contains:
run_id
cfXXX columns for each cost function
run_name
Example
: code-block:: python
>>> coefficients = {101: [1, 10, 100, 1000], ... 103: [1, 10, 100, 1000]} >>> param_grid = pyissm.inversion.sensitivity.build_parameter_grid(coefficients) >>> param_grid = pyissm.inversion.sensitivity.build_parameter_grid(coefficients, initial_run_id = 101)
- pyissm.inversion.sensitivity.compute_sensitivity_diagnostics(manifest, output_dir=None, plot_run_summaries=True)
Compute diagnostics for parameter sensitivity runs from a manifest.
- Parameters:
manifest (
pandas.DataFrame) – Output frompyissm.inversion.sensitivity.parameter_sensitivity().output_dir (
strorpathlib.Path, optional) – Directory used to store computed diagnostics. If None, diagnostics are not saved to disk.plot_run_summaries (
bool, default = True) – Whether to generate summary PDF reports for each run, including diagnostic plots and convergence history. If True, summary PDFs are saved in each run’s directory.
- Returns:
Diagnostics table.
- Return type:
pandas.DataFrame
Example
: code-block:: python
>>> manifest = pd.read_csv('./sensitivity_runs/manifest.csv') >>> diagnostics = pyissm.inversion.sensitivity.compute_sensitivity_diagnostics(manifest, output_dir = './sensitivity_runs/diagnostics')
- pyissm.inversion.sensitivity.load_parameter_sensitivity_run(manifest_row)
Load a parameter sensitivity run from a manifest row.
- Parameters:
manifest_row (
pandas.Series)- Returns:
md – Loaded ISSM model for the specified run.
- Return type:
pyissm.Model
Example
: code-block:: python
>>> manifest = pd.read_csv('./sensitivity_runs/manifest.csv') >>> md = pyissm.inversion.sensitivity.load_parameter_sensitivity_run(manifest.iloc[0])
- pyissm.inversion.sensitivity.normalize_diagnostics(diagnostics, columns=None, higher_is_better=None, suffix='_norm')
Normalize diagnostic columns to [0, 1].
- Parameters:
diagnostics (
pandas.DataFrame) – DataFrame containing model diagnostics.columns (
listofstr, optional) – Columns to normalize. Defaults to all numeric columns.higher_is_better (
dict, optional) –Dictionary mapping column name -> bool. - True = higher values are better - False = lower values are better
Example
{“velocity_rmse”: False, “thickness_rmse”: False, “correlation”: True}
Any unspecified column defaults to False.
suffix (
str, optional) – Suffix for normalized columns.
- Returns:
Copy of dataframe with normalized columns added.
- Return type:
pandas.DataFrame
Example
: code-block:: python
>>> manifest = pd.read_csv('./sensitivity_runs/manifest.csv') >>> diagnostics = pyissm.inversion.sensitivity.compute_sensitivity_diagnostics(manifest, output_dir = './sensitivity_runs/diagnostics') >>> diagnostics_norm = pyissm.inversion.sensitivity.normalize_diagnostics(diagnostics, columns = ['vel_rmse', 'thickness_rmse'])
- pyissm.inversion.sensitivity.parameter_sensitivity(md, parameter_grid, output_dir, run=True, load_only=False, global_mask=None, coeff_masks=None)
Run inversion sensitivity experiments.
- Parameters:
md (
pyissm.Model) – ISSM model object.parameter_grid (
pandas.DataFrame) – Output frompyissm.inversion.sensitivity.build_parameter_grid().output_dir (
strorpathlib.Path) –Directory used to store sensitivity outputs, manifests, and saved models.
NOTE: This is intentionally separate from: md.cluster.executionpath:
md.cluster.executionpath controls where ISSM stages runtime files for execution.
output_dir controls where pyISSM stores organized experiment outputs.
run (
bool, default = True) – Submit inversion runs.load_only (
bool, default = False) – Load completed inversion results.global_mask (
numpy.ndarrayofbool, optional) –- Global boolean mask applied to all cost functions. Passed to
assign_cost_functions(). True -> coefficient active
False -> coefficient set to zero
- Global boolean mask applied to all cost functions. Passed to
coeff_masks (
dict, optional) –Dictionary mapping cost-function IDs to boolean masks. Passed to
assign_cost_functions().Example
{101: vel_mask, 103: grounded_mask}
- Returns:
Experiment manifest.
- Return type:
pandas.DataFrame
Example
: code-block:: python
>>> coefficients = {101: [1, 10, 100, 1000], ... 103: [1, 10, 100, 1000]} >>> parameter_grid = pyissm.inversion.sensitivity.build_parameter_grid(coefficients) >>> manifest = pyissm.inversion.sensitivity.parameter_sensitivity(md, parameter_grid, output_dir = './sensitivity_runs', run = True, load_only = False)