Python 3.x 利用SALib工具箱对实测数据进行Python敏感性分析
我想了解如何使用SALib python工具箱执行Sobol敏感性分析(研究参数和交叉参数影响) 根据最初的例子,我应该这样做:Python 3.x 利用SALib工具箱对实测数据进行Python敏感性分析,python-3.x,optimization,Python 3.x,Optimization,我想了解如何使用SALib python工具箱执行Sobol敏感性分析(研究参数和交叉参数影响) 根据最初的例子,我应该这样做: from SALib.sample import saltelli from SALib.analyze import sobol from SALib.test_functions import Ishigami import numpy as np problem = { 'num_vars': 3, 'names': ['x1', 'x2', 'x3'
from SALib.sample import saltelli
from SALib.analyze import sobol
from SALib.test_functions import Ishigami
import numpy as np
problem = {
'num_vars': 3,
'names': ['x1', 'x2', 'x3'],
'bounds': [[-np.pi, np.pi]]*3
}
# Generate samples
param_values = saltelli.sample(problem, 1000)
# Run model (example)
Y = Ishigami.evaluate(param_values)
# Perform analysis
Si = sobol.analyze(problem, Y, print_to_console=True)
# Returns a dictionary with keys 'S1', 'S1_conf', 'ST', and 'ST_conf'
# (first and total-order indices with bootstrap confidence intervals
因为我从实验中得到数据,我没有连接席和意的模型。我只有一个输入矩阵和一个输出矩阵
如果我们假设我的输入数据是从拉丁超立方体(一个很好的统计重划分)生成的,那么如何使用Salib来评估我的参数的敏感性?从代码中我看到:
Si = sobol.analyze(problem, Y, print_to_console=True)
我们只使用输入参数边界和输出。但通过这种方法,如何知道哪一个参数在两个集合之间演化
谢谢你的帮助 根据您对数据的描述,使用
SAlib
无法直接计算Sobol指数SAlib
通过生成两个矩阵(A和B),然后使用通过交叉采样矩阵A中矩阵B的值而生成的附加值来计算一阶和总阶指数。下图显示了如何进行此操作。当代码计算索引时,它希望模型输出的顺序是这样的。以这种方式计算指数的方法基于Saltelli等人(2010)发表的方法。因为这不是一种拉丁超立方体抽样方法,实验数据很可能不起作用
完成敏感性分析的一种可能方法是使用实验数据中的替代模型或元模型。在这种情况下,您可以使用实验数据拟合真实模型的近似值。然后可通过SAlib
或其他灵敏度包分析该近似值。代理模型通常是多项式或基于克里格法的。Iooss等人(2006年)介绍了一些方法。此方法的一些软件包括UQlab
(,基于MATLAB)和BASS
(,R软件包)等,具体取决于要使用的特定模型类型和拟合技术
另一种可能性是找到一个并非基于Saltelli等人(2010)方法的估计器。我不确定是否存在这样的估计器,但最好在数学或概率统计堆栈交换中发布该问题
参考资料:
Iooss,B,F.Van Dorpe,N.Devictor。(2006). “剂量计算环境模型的响应面和灵敏度分析”。可靠性工程和系统安全91:1241-1251
萨尔泰利,A.,p.安诺尼,I.阿兹尼,F.坎波隆戈,M.拉托,S.塔兰托拉。2010“基于方差的模型输出敏感性分析。总敏感性指数的设计和估算”。计算机物理通讯181:259-270。谢谢!这通常是我正在寻找的,也是我试图实现的。谢谢你的高质量回答!所以,如果我的模型输出是一个数组而不是一个值,那么就不可能使用SALib?是吗?您可以为每个输出变量调用一次SALib。这可能有点慢,但看起来SALib无法处理数组输入。