Aulas do Curso de Modelagem matemática IV da FGV-EMAp
License: GPL3
Image: default
Análise de Sensibilidade
Este tipo de análise se propõe a medir a influencia de cada parâmetro do modelo sobre o resultado da simulação. A Sensibilidade do modelo à cada parâmetros é representada por um valor numérico chamado de índice de sensibilidade. estes índices pode ser de vários tipos:
Indices de primeira ordem medem a contribuição de cada parâmetro individualmente para a variância da saída do modelo.
Indices de segunda ordem medem a contribuição de pares de parâmetros para a variância da saída do modelo.
Indices de ordem total medem a contribuição de cada parâmetro incluindo todas as suas interações para a variância da saída do modelo.
Para realizarmos esta análise vamos precisar instalar duas bibliotecas: salib e epimodels. Para instalá-los, basta ativar a shell do Sage:
e executar os seguintes comandos:
Ou diretamente aqui no notebook:
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: salib in /home/fccoelho/.sage/local/lib/python3.10/site-packages (1.4.6)
Collecting epimodels==0.4.0
Downloading epimodels-0.4.0-py3-none-any.whl (10 kB)
Requirement already satisfied: seaborn in /home/fccoelho/.sage/local/lib/python3.10/site-packages (0.12.0)
Collecting matplotlib<4.0.0,>=3.6.1
Using cached matplotlib-3.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.8 MB)
Collecting mypy==0.982
Using cached mypy-0.982-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.7 MB)
Requirement already satisfied: sphinx in /usr/lib/python3/dist-packages (from epimodels==0.4.0) (4.3.2)
Collecting sympy<2.0.0,>=1.11.1
Using cached sympy-1.11.1-py3-none-any.whl (6.5 MB)
Collecting cython==0.29.32
Using cached Cython-0.29.32-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (1.9 MB)
Collecting numpy<2.0.0,>=1.23.3
Using cached numpy-1.23.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.1 MB)
Collecting scipy<2.0.0,>=1.9.2
Using cached scipy-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (33.7 MB)
Collecting pyitlib
Using cached pyitlib-0.2.2-py3-none-any.whl
Requirement already satisfied: typing-extensions>=3.10 in /usr/local/lib/python3.10/dist-packages (from mypy==0.982->epimodels==0.4.0) (4.3.0)
Requirement already satisfied: tomli>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from mypy==0.982->epimodels==0.4.0) (2.0.1)
Requirement already satisfied: mypy-extensions>=0.4.3 in /usr/local/lib/python3.10/dist-packages (from mypy==0.982->epimodels==0.4.0) (0.4.3)
Requirement already satisfied: multiprocess in /home/fccoelho/.sage/local/lib/python3.10/site-packages (from salib) (0.70.13)
Requirement already satisfied: pandas>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from salib) (1.4.3)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4.0.0,>=3.6.1->epimodels==0.4.0) (21.3)
Requirement already satisfied: cycler>=0.10 in /usr/lib/python3/dist-packages (from matplotlib<4.0.0,>=3.6.1->epimodels==0.4.0) (0.11.0)
Requirement already satisfied: pillow>=6.2.0 in /usr/lib/python3/dist-packages (from matplotlib<4.0.0,>=3.6.1->epimodels==0.4.0) (9.0.1)
Requirement already satisfied: fonttools>=4.22.0 in /usr/lib/python3/dist-packages (from matplotlib<4.0.0,>=3.6.1->epimodels==0.4.0) (4.29.1)
Collecting contourpy>=1.0.1
Using cached contourpy-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (295 kB)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib<4.0.0,>=3.6.1->epimodels==0.4.0) (2.8.2)
Requirement already satisfied: kiwisolver>=1.0.1 in /usr/lib/python3/dist-packages (from matplotlib<4.0.0,>=3.6.1->epimodels==0.4.0) (1.3.2)
Requirement already satisfied: pyparsing>=2.2.1 in /usr/lib/python3/dist-packages (from matplotlib<4.0.0,>=3.6.1->epimodels==0.4.0) (2.4.7)
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas>=1.1.2->salib) (2022.2.1)
Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy<2.0.0,>=1.11.1->epimodels==0.4.0) (1.2.1)
Requirement already satisfied: dill>=0.3.5.1 in /usr/local/lib/python3.10/dist-packages (from multiprocess->salib) (0.3.5.1)
Requirement already satisfied: scikit-learn>=0.16.0 in /usr/local/lib/python3.10/dist-packages (from pyitlib->epimodels==0.4.0) (1.1.1)
Requirement already satisfied: future>=0.16.0 in /usr/lib/python3/dist-packages (from pyitlib->epimodels==0.4.0) (0.18.2)
Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil>=2.7->matplotlib<4.0.0,>=3.6.1->epimodels==0.4.0) (1.16.0)
Requirement already satisfied: joblib>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn>=0.16.0->pyitlib->epimodels==0.4.0) (1.1.0)
Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn>=0.16.0->pyitlib->epimodels==0.4.0) (3.1.0)
Installing collected packages: sympy, numpy, mypy, cython, scipy, contourpy, matplotlib, pyitlib, epimodels
WARNING: The script isympy is installed in '/home/fccoelho/.sage/local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The scripts f2py, f2py3 and f2py3.10 are installed in '/home/fccoelho/.sage/local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The scripts dmypy, mypy, mypyc, stubgen and stubtest are installed in '/home/fccoelho/.sage/local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The scripts cygdb, cython and cythonize are installed in '/home/fccoelho/.sage/local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Attempting uninstall: epimodels
Found existing installation: epimodels 0.3.21
Uninstalling epimodels-0.3.21:
Successfully uninstalled epimodels-0.3.21
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
pysus 0.6.0 requires numpy==1.23.2, but you have numpy 1.23.3 which is incompatible.
numba 0.56.0 requires numpy<1.23,>=1.18, but you have numpy 1.23.3 which is incompatible.
Successfully installed contourpy-1.0.5 cython-0.29.32 epimodels-0.4.0 matplotlib-3.6.1 mypy-0.982 numpy-1.23.3 pyitlib-0.2.2 scipy-1.9.2 sympy-1.11.1
Escolhendo o Modelo
Vamos usar o Modelo SEIAHR apresentado no suplemento 2 e disponível na biblioteca epimodels.
$$\newcommand{\Bold}[1]{\mathbf{#1}}\verb|OrderedDict([('chi',|\verb| |\verb|'$\chiParseError: KaTeX parse error: \verb ended by end of line instead of matching delimiter\phiParseError: KaTeX parse error: \verb ended by end of line instead of matching delimiter\betaParseError: KaTeX parse error: \verb ended by end of line instead of matching delimiter\rhoParseError: KaTeX parse error: \verb ended by end of line instead of matching delimiter\deltaParseError: KaTeX parse error: \verb ended by end of line instead of matching delimiter\gammaParseError: KaTeX parse error: \verb ended by end of line instead of matching delimiter\alphaParseError: KaTeX parse error: \verb ended by end of line instead of matching delimiter\muParseError: KaTeX parse error: \verb ended by end of line instead of matching delimiterpParseError: KaTeX parse error: \verb ended by end of line instead of matching delimiterqParseError: KaTeX parse error: \verb ended by end of line instead of matching delimiterr$
Vamos atribuir valores iniciais aos parâmetros do modelo
Durante a análise de sensibilidade vai ser necessário simular muitas vezes o modelo, então é interessante termos uma ideia de quanto tempo custa simulá-lo
Definindo a análise
Gerando as amostras
Rodando o Modelo
Para fazer a análise de sensibilidade precisamos selecionar um aspecto da saída do model, sobre o qual desejamos estudar a variância em resposta à varância dos parâmetros. Para este caso simples, vamos escolher o valor de pico de .
Agora, basta executar uma simulação para cada conjunto de valores de parâmetros que amostramos.
Para acelerar a execução dos cenários, vamos paralelizar a simulação do modelo
Para plotar os índices de segunda ordem, vamos usar uma outra abordagem para a visualização