{
"cells": [
{
"cell_type": "markdown",
"id": "0874b43d-35a5-430d-b1fa-aac07629c3b6",
"metadata": {},
"source": [
"# Structural Reliability\n",
"\n",
"A simulation dataset of a structural reliability model with one key output variable and four input variables is used for this case. "
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "cedd5ec9-31f7-4e7f-91be-f73b1d1d00f1",
"metadata": {
"ExecuteTime": {
"end_time": "2024-05-30T09:06:58.579066Z",
"start_time": "2024-05-30T09:06:58.552735Z"
},
"scrolled": true
},
"outputs": [],
"source": [
"import pathlib\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import simdec as sd"
]
},
{
"cell_type": "markdown",
"id": "8700ed278bb1c06d",
"metadata": {},
"source": [
"Let's first load the dataset. It's a CSV file, each row represent a simulation or sample. The first column is the output or quantity of interest and other columns are parameters' values."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "0b21846d-edff-4e39-a423-b247f81c4520",
"metadata": {
"ExecuteTime": {
"end_time": "2024-05-30T09:06:58.595823Z",
"start_time": "2024-05-30T09:06:58.579870Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Kf
\n",
"
sigma_res
\n",
"
Rp0.2
\n",
"
R
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
2.454866
\n",
"
-84.530638
\n",
"
297.406169
\n",
"
-0.834480
\n",
"
\n",
"
\n",
"
1
\n",
"
2.774116
\n",
"
347.586947
\n",
"
379.499452
\n",
"
-0.131827
\n",
"
\n",
"
\n",
"
2
\n",
"
2.504617
\n",
"
946.567040
\n",
"
940.477667
\n",
"
-0.039126
\n",
"
\n",
"
\n",
"
3
\n",
"
2.466723
\n",
"
74.222224
\n",
"
406.622486
\n",
"
0.440311
\n",
"
\n",
"
\n",
"
4
\n",
"
2.615602
\n",
"
-32.937734
\n",
"
979.498038
\n",
"
0.419690
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Kf sigma_res Rp0.2 R\n",
"0 2.454866 -84.530638 297.406169 -0.834480\n",
"1 2.774116 347.586947 379.499452 -0.131827\n",
"2 2.504617 946.567040 940.477667 -0.039126\n",
"3 2.466723 74.222224 406.622486 0.440311\n",
"4 2.615602 -32.937734 979.498038 0.419690"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fname = pathlib.Path(\"../../tests/data/stress.csv\")\n",
"\n",
"data = pd.read_csv(fname)\n",
"output_name, *inputs_names = list(data.columns)\n",
"inputs, output = data[inputs_names], data[output_name]\n",
"inputs.head()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "4206d712-b525-4e9b-9724-262a1fb3fb02",
"metadata": {
"ExecuteTime": {
"end_time": "2024-05-30T09:06:58.600368Z",
"start_time": "2024-05-30T09:06:58.596622Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"0 311.898918\n",
"1 500.044381\n",
"2 715.171820\n",
"3 482.477633\n",
"4 663.983635\n",
"Name: delta_sig, dtype: float64"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"output.head()"
]
},
{
"cell_type": "markdown",
"id": "f3ddc48a39ba7d27",
"metadata": {},
"source": [
"We can then compute sensitivity indices. In this case we will return Sobol' indices by using a simple binning approach."
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "1367362a-9b3d-4624-88d5-4931d4a56c8d",
"metadata": {
"ExecuteTime": {
"end_time": "2024-05-30T09:06:58.622967Z",
"start_time": "2024-05-30T09:06:58.601123Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"SensitivityAnalysisResult(si=array([0.0396617 , 0.52184586, 0.0933253 , 0.34582214]), first_order=array([0.03666241, 0.50270644, 0.10694638, 0.27702256]), second_order=array([[ 0.00000000e+00, 2.90126421e-03, 2.14572224e-05,\n",
" 3.07586841e-03],\n",
" [ 2.90126421e-03, 0.00000000e+00, -6.32046652e-02,\n",
" 9.85822500e-02],\n",
" [ 2.14572224e-05, -6.32046652e-02, 0.00000000e+00,\n",
" 3.59410457e-02],\n",
" [ 3.07586841e-03, 9.85822500e-02, 3.59410457e-02,\n",
" 0.00000000e+00]]))"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"indices = sd.sensitivity_indices(inputs=inputs, output=output)\n",
"indices"
]
},
{
"cell_type": "markdown",
"id": "f573990c0b589a",
"metadata": {},
"source": [
"With this information, we can decompose the problem with SimDec."
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "ad38a9b2-199a-458e-953b-33dbee5b9bd1",
"metadata": {
"ExecuteTime": {
"end_time": "2024-05-30T09:06:58.646953Z",
"start_time": "2024-05-30T09:06:58.624749Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"DecompositionResult(var_names=['sigma_res', 'R'], statistic=array([[226.71884991, 385.26391282, 567.43833242],\n",
" [376.10346622, 485.570043 , 580.02843812],\n",
" [576.79710476, 611.24715669, 643.91370365]]), bins= 0 1 2 3 4 5 \\\n",
"0 311.898918 419.194207 496.688973 409.659023 565.755452 482.477633 \n",
"1 210.727366 498.566253 551.641014 387.720239 534.050989 663.983635 \n",
"2 61.163271 468.836865 454.592393 430.616823 456.816425 496.166925 \n",
"3 126.402829 404.649624 535.396363 362.089205 474.595725 468.991694 \n",
"4 86.214556 245.112746 504.051830 338.157863 428.518186 693.697439 \n",
"... ... ... ... ... ... ... \n",
"1129 NaN NaN NaN NaN NaN NaN \n",
"1130 NaN NaN NaN NaN NaN NaN \n",
"1131 NaN NaN NaN NaN NaN NaN \n",
"1132 NaN NaN NaN NaN NaN NaN \n",
"1133 NaN NaN NaN NaN NaN NaN \n",
"\n",
" 6 7 8 \n",
"0 746.123228 500.044381 535.841646 \n",
"1 448.747937 715.171820 576.321721 \n",
"2 679.791011 461.183337 486.006547 \n",
"3 420.077617 731.671886 491.546336 \n",
"4 687.661203 472.827542 563.163545 \n",
"... ... ... ... \n",
"1129 NaN NaN 538.417298 \n",
"1130 NaN NaN 528.190933 \n",
"1131 NaN NaN 779.485720 \n",
"1132 NaN NaN 820.158444 \n",
"1133 NaN NaN 724.423997 \n",
"\n",
"[1134 rows x 9 columns], states=[3, 3], bin_edges=[array([-399.89835911, -65.53161418, 167.29633942, 949.91234636]), array([-1.19998572, -0.80203225, 0.30600691, 0.69994998])])"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"si = indices.si\n",
"res = sd.decomposition(inputs=inputs, output=output, sensitivity_indices=si)\n",
"res"
]
},
{
"cell_type": "markdown",
"id": "f79c7e53a7a3442c",
"metadata": {},
"source": [
"These are the raw result, we can use some helper functions to make some visualization.\n",
"We need a nice color palettes, using the states we can get a palette for all variables."
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "baf6963d-700c-4eca-83c8-35b6a487e105",
"metadata": {
"ExecuteTime": {
"end_time": "2024-05-30T09:06:58.652660Z",
"start_time": "2024-05-30T09:06:58.647710Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"[[0.0702614379084967, 0.43562091503267975, 0.41353874883286645, 1.0],\n",
" [0.14901960784313728, 0.8627450980392157, 0.8196078431372549, 1.0],\n",
" [0.5846405228758169, 0.9330065359477124, 0.9119514472455649, 1.0],\n",
" [0.4956417501498417, 0.5004538059765391, 0.050526586180323685, 1.0],\n",
" [0.9098039215686274, 0.9176470588235294, 0.1843137254901961, 1.0],\n",
" [0.9651425635756488, 0.9681736450038532, 0.6847675314667352, 1.0],\n",
" [0.43562091503267975, 0.0702614379084967, 0.24892623716153087, 1.0],\n",
" [0.8627450980392157, 0.14901960784313728, 0.4980392156862745, 1.0],\n",
" [0.9330065359477124, 0.5846405228758169, 0.7549953314659192, 1.0]]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"palette = sd.palette(states=res.states)[::-1]\n",
"palette"
]
},
{
"cell_type": "markdown",
"id": "7655c82c3352a2ae",
"metadata": {},
"source": [
"Here we are! Look at the decomposition itself with the bins."
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "fe70e06e-5377-431e-8e3e-82aa4d21a792",
"metadata": {
"ExecuteTime": {
"end_time": "2024-05-30T09:06:59.140251Z",
"start_time": "2024-05-30T09:06:58.653609Z"
}
},
"outputs": [
{
"data": {
"image/png": "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2c/0BgAAEJalMAAAACzXAwQAwVZeVKTzjp1vEVQA0YMACEDUUgkFY2Jj5W/de5s7wG7X6TkARD8CIABRSyUU9FZWysI9uyQhOclUgVN7HDnBACsgAAIQ9S5onSUJfrIwA7AWJkEDAADLIQACAACWQwAEAAAshwAIAABYDgEQAACwHFaBAUAjmUmeWF5MgkUgHBEAAUCADK8h4nDImpybeO+ACEUABAABssXYRKqq5IX3d0pSaoqpBIsAwgsBEAA0UousLElOT+P9AyIQk6ABAIDlEAABAADLIQACAACWQwAEAAAshwAIAABYDgEQAACwHAIgAABgOQRAAADAcgiAAACA5ZAJGgDCTLHJAqpxcXESHx8f9OsBohEBEACECU9FhYjNJtnZ2abaZ2S2km8O5RMEAY1AAAQAYcJbUSliGNI3L1eciYk+21a53bI+N08qKioIgIBGIAACgDDjiI8Xh9MZ6ssAohqToAEAgOUQAAEAAMshAAIAAJZDAAQAACyHAAgAAFgOARAAALAcAiAAAGA5BEAAAMBywiIAWrRokbRr106cTqf06NFDdu3a5bP9qlWr5KqrrtLtO3XqJGvXrq3z/P333y82m63ONmDAgCC/CgAAEClCHgCtXLlSxo8fL9OmTZO9e/dK586dpX///nLs2LF622/fvl1GjBghDzzwgHzwwQcydOhQvX3yySd12qmA57vvvqvZ/vznPzfTKwIAAOEu5AHQ3LlzZcyYMTJ69Gjp0KGDLFmyRBITE2XZsmX1tp8/f74ObiZMmCBXX321TJ8+Xa6//npZuHBhnXaqQnLr1q1rthYtWjTTKwIAAOEupLXAVBG/PXv2yKRJk2r2xcTESL9+/WTHjh31HqP2qx6j2lSP0erVq+vs27Jli2RmZurAp2/fvjJjxgxp2bJlved0u916q1ZUVHSerwxApCopPO23jauoOODzuk0cU14c+HkBRGAAdPz4cfF4PJKVlVVnv3q8f//+eo85cuRIve3V/mqqh+jOO++USy+9VP71r3/J5MmTZeDAgTp4stvt55xz5syZkpeX12SvC0DkUb8bYhwO+WWn68wfZJho4jVEHA5Zk3NTk54XwPmJymrw99xzT82/1STpa6+9Vi6//HLdK3TLLbec0171QNXuVVI9QG3btm226wUQeva4ePFWVcnUp3pJWprvSuyFheXy26e2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",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"ax = sd.visualization(bins=res.bins, palette=palette, kind=\"boxplot\", ax=ax)"
]
},
{
"cell_type": "markdown",
"id": "455de7abf6c44fe7",
"metadata": {},
"source": [
"Inputs 3 and 1 have the highest sensitivity indices and thus are automatically chosen for decomposition. The most influential input 3 divides the distribution of the output into three main states with distinct colors. Input 1 further subdivides them into shades. From the graph, it becomes obvious that input 1 influences the output when input 3 is low, but has a negligible effect when input 3 is medium or high.\n",
"\n",
"Finally, we can get some statistics on all states and scenarios with a table."
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "1d3dfce7-bf9c-42e1-97b4-a0b9d6a27a83",
"metadata": {
"ExecuteTime": {
"end_time": "2024-05-30T09:06:59.321196Z",
"start_time": "2024-05-30T09:06:59.303862Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"