【参数不确定】敏感性分析(sensitivity analysis)

【参数分析】敏感性分析

敏感性分析简介

敏感性分析是研究一个数学模型或系统(数值的或其他的)输出中的不确定性如何被划分和分配到输入中的不确定性的不同来源。一个相关的实践是不确定性分析,它更注重不确定性的量化和传播;理想情况下,不确定性和敏感性分析应该同时进行。

根据维基百科,敏感性分析是“研究数学模型或系统(数值或其他)输出的不确定性如何分配到输入的不确定性的不同来源。”“每个输入的灵敏度通常由一个数值表示,称为灵敏度指数。敏感性指数有几种形式:

  1. 一阶指标:仅通过单个输入来测量对输出方差的贡献。
  2. 二阶指标:测量两个输入相互作用对输出方差的贡献
  3. 总阶指数:测量模型输入对输出方差的贡献,包括它的一阶效应(输入单独变化)和所有高阶交互作用。

敏感性分析方法选择

影响敏感性分析方法的选择的因素通常有:

  1. 计算开销:敏感性分析几乎是基于抽样的方法,当模型的一次运行需要大量的时间时,这可能是一个严重的问题。当模型具有大量的不确定输入时,敏感性分析本质上是对多维输入空间的探索,其大小随输入的数量呈指数增长。
  2. 相关输入:大多数常见的敏感性分析方法假设模型输入之间是独立的,但有时输入可能是强相关的。这仍然是一个不成熟的研究领域,权威的方法尚未建立。
  3. 非线性:一些敏感性分析方法,如基于线性回归的方法,在模型响应相对于其输入是非线性的情况下,不能准确地测量敏感性。在这种情况下,基于方差的度量更合适。
  4. 模型交互作用:当两个或多个输入的扰动同时导致输出的变化大于单独改变每个输入时,交互作用就会发生。这种相互作用存在于任何 non-additive的模型中,会被诸如scatterplots 和one-at-a-time perturbations等方法所忽略。交互作用的影响可以用 total-order sensitivity index来测量。

敏感性分析过程

  1. 量化输入的不确定性(例如范围、概率分布)
  2. 确定要分析的模型输出(理想情况下,目标应该与模型处理的问题直接相关)
  3. 用一些设计好的实验对模型进行多次运行,“设计好的实验”由选择的方法和输入的不确定性决定。
  4. 利用模型输出,计算敏感性度量

在某些情况下,这个过程会重复,例如在高维问题中,用户必须在执行完整的敏感性分析之前筛选出不重要的变量。

敏感性分析的方法

One-at-a-time (OAT)

最简单和最常见的方法之一是每次更改一个因素(OAT),以查看这会对输出产生什么影响。OAT通常包括:

移动一个输入变量,保持其他变量的基线值(nominal value),然后将变量返回到其标称值,然后以相同的方式对每个其他输入进行重复

之后,敏感性可以通过监测输出的变化来测量,例如通过偏导数线性回归方法。在输出中观察到的任何更改都将明确地由单个变量的更改引起。此外,通过每次更改一个变量,可以将所有其他变量固定在它们的基线值,增加了结果的可比较性(与基线情况相比较),并将计算机程序崩溃(同时改变几个因素的情况)的几率降至最低,所以是一种不错的方法。由于实际原因,OAT经常受到建模者的青睐。当OAT分析下的模型发生故障时,建模者立即知道哪个输入因素导致了故障。

不过因为一次只改变一个输入参数,所以不能检测到多个输入耦合的情况。

Derivative-based local methods

基于局部导数的方法包括求输出 Y Y Y对输入因子 X i X_{i} Xi​的偏导数。Adjoint modelling和Automated Differentiation属于这类方法。与OAT类似,局部方法不尝试完全探索输入空间,因为它们只检查小的扰动,通常一次检查一个变量。

Regression analysis

在敏感性分析中,回归分析包括对模型响应进行线性回归并使用标准化回归系数作为敏感性的直接度量。回归要求数据是线性的,因为否则很难解释标准化系数。因此,当模型响应实际上是线性时,这种方法是最合适的。例如,如果决定系数很大,就可以确定线性关系。回归分析的优点是简单,计算量小。

Variance-based methods

基于方差的方法是一种概率方法,它将输入和输出的不确定性以概率分布的形式进行量化,并将输出方差分解为可归属于输入变量和变量组合的部分。因此,输出对输入变量的敏感性是由该输入在输出中引起的方差量来度量的,这些可以表示为条件期望。

基于变量的方法允许充分探索输入空间,考虑交互作用非线性响应。由于这些原因,当计算它们是可行的时候,它们被广泛使用。通常,这种计算涉及到蒙特卡罗方法的使用,但由于这可能涉及数千次模型运行,因此可以在必要时使用其他方法(如仿真器)来减少计算开销。注意,只有当输入因子彼此独立时,完全方差分解才有意义。

Screening

筛选是基于采样的方法的一个特殊实例。这里的目标是确定哪些输入变量对高维模型的输出不确定性有重要影响,而不是精确地量化敏感性(即方差)。与其他方法相比,筛选的计算成本相对较低,可以用于初步分析,在对剩下的集进行更详细的分析之前,先剔除不具影响力的变量。最常用的筛选方法之一是elementary effect method。

Scatter plots

一个简单但有用的工具是在对模型的输入分布进行随机抽样后,绘制输出变量相对于单个输入变量的散点图。这种方法的优点是它还可以处理“给定的数据”,并给出灵敏度的直观指示。定量度量也可以被绘制出来,例如通过测量 Y Y Y和 X i X_{i} Xi​之间的相关性,或者甚至通过非线性回归估计基于方差的度量。

Fourier amplitude sensitivity test (FAST)

该方法使用傅里叶级数表示频域内的多元函数(模型),使用单个频率变量。因此,计算灵敏度指数所需的积分变成了单变量,从而节省了计算时间。

python实现(SALib)

SALib简介

SALib是一个用Python编写的用于执行敏感性分析的开源库。它不直接与数学或计算模型交互。相反,SALib负责使用sample函数来生成模型输入,并使用一个analyze函数从模型输出计算灵敏度指数。使用SALib敏感性分析如下四个步骤:

  1. 确定模型输入(参数)及其样本范围,
  2. 运行sample函数来生成模型输入,
  3. 使用生成的输入analyze模型,保存模型输出,
  4. 对输出运行analyze函数来计算灵敏度指数。

SALib提供了几种敏感性分析方法,如Sobol、Morris和FAST。无论选择哪种方法,都只需要使用两个函数:sample和analyze。

具体如何使用SALib模块,见下方第二个链接。

建筑能源分析中的敏感性分析

敏感性分析在建筑能源分析中占有重要地位,它可以确定影响建筑热性能的关键变量。下面将介绍敏感性分析在建筑分析中的典型实现步骤,综述了敏感性分析方法在建筑性能分析中的应用。这些方法可分为局部敏感性分析全局敏感性分析。全局方法可以进一步分为四种方法:回归基于筛选基于方差元模型敏感性分析。全局方法与局部方法相比,计算量虽然增加,但是可以探索整个输入空间,并且大多数方法允许自我验证。

典型步骤

1.确定输入变量范围

灵敏度分析的第一步是确定输入的范围。如何定义输入范围也取决于灵敏度分析方法的选择。对于局部灵敏度分析,它不需要抽样方法来生成输入的组合。而大多数的全局灵敏度分析都需要采样,生成样本的策略。在回归元模型方法中,拉丁超立方体抽样(LHS)因其高效的分层特性而倍受青睐。对于筛选基于方差的方法,它们通常需要使用特殊的抽样方法。

2.构建建筑能源模型

大多数灵敏度分析方法都涉及大量的仿真运行。许多建筑仿真软件已被用于敏感性分析,如EnergyPlus, ESP-r,TRNSYS,DOE2。这些软件非常灵活,适合敏感性分析。例如,EnergyPlus和DOE2的模型输入文件都是文本文件,可以使用Excel VBA、Matlab等方便地处理。或者利用基于简化的能源模型,这是快速计算和容易改变输入的方法。

3.运行建筑能源模型

这一步是运行一些由建筑能源模拟程序创建的模拟模型。这一步通常是计算时间敏感性分析中最耗时的步骤。并行计算对于加快计算速度是很有帮助的。并行计算有两种方法:1.多核或多处理器单机,例如,EnergyPlus程序可以通过指定同时模拟进程的数量来更好地利用计算机能力;2.使用多台计算机。Tian等人使用校园秃鹰网格(PlymGrid,约200台计算机)运行2400 EnergyPlus模型,以调查气候变化对校园建筑能源性能的影响。使用Plymgrid完成所有这些模拟运行只需一天,而使用一台普通的规范办公室计算机则需要大约一个月的时间。

4.获取仿真结果

这一步就很直接,保存下来就行了。

5.进行敏感性分析

此步骤是基于从前面步骤获得的输入和输出数据进行灵敏度分析。敏感性分析本身通常不耗费太多时间。但是,如果使用具有大量输入因子的元模型方法,则此步骤可能需要几分钟甚至更长的时间。这是因为某些类型的元模型构建速度较慢,在建立元模型后,可以快速地对其进行敏感性分析。

6.敏感性分析的呈现

灵敏度分析结果的表示方法有很多,如散点图龙卷风图箱形图蜘蛛图等。Burhenne等人用散点图研究了典型德国建筑中建筑参数对能源性能的影响。龙卷风图对于比较不同输入因素的相对重要性非常有用。最大的条出现在图的顶部,第二大的出现在之后,以此类推。Morris提出了一种基于Morris方法的图形表示方法来表示每个输入的重要性,将不同输入的基本影响的均值和标准差作成二维图。因此,均值和标准差的低值(在图的左下角)表示不具影响力的输入,而右上角的输入是关键变量。莫里斯图已在许多建筑分析研究中得到应用。在建筑性能分析领域中,蜘蛛网图和箱形图在敏感性分析中应用并不广泛。

常用灵敏性分析方法

局部灵敏性分析

局部灵敏度分析(也称为微分灵敏度分析)属于单因素分析方法的一类。灵敏度通常是在一个因素改变而所有其他因素不变的情况下计算出来的。与全局敏感性分析相比,它非常简单,容易应用和解释,通常只需要较少的仿真运行。然而,该方法只探索围绕基本情况输入因子的一个简化空间。其次,不考虑交互。第三,这种方法没有自我验证,而大多数的全局敏感性分析可以用来解释输出的多少变化是由输入因素造成的。

全局灵敏性分析

回归方法

回归法是建筑能耗分析中应用最广泛的敏感性分析方法。因为这种方法计算速度快,容易理解。在进行蒙特卡罗后,可以使用许多指标来参考,如SRC(标准化回归系数)、PCC(偏相关系数)以及它们的秩变换(SRRC标准化秩回归系数、PRCC偏相关系数)。SRC和PCC只适用于线性模型,秩变换(SRRC和PCC)可用于输入和输出之间的非线性单调函数。如果输入之间没有相关性,SRC和PRC对输入的重要性进行排序时给出了相同的结果。SRC与PRC的不同之处在于PRC适用于相关输入,因为它排除了输入因素之间相关性的影响,但SRC仅在不相关输入的情况下有效。然而,有许多新的敏感性分析方法来处理相关的输入。

另一种常用的回归方法是逐步回归法。前向逐步法是灵敏度分析中应用最广泛的方法。最重要的因素首先进入模型,然后下一个重要的因素也进入模型,重复这个过程,直到统计检验中没有显著的变量。选择准则包括SRC、t值、调整r平方、Akaike信息准则。

基于筛选的方法

筛选方法的目的往往是在不降低输出方差的情况下,从大量的因素中筛选出一些输入因素。Morris方法是建筑性能分析领域中最常用的筛选方法,属于全局敏感性分析,因为每一步的基线变化和最终的敏感性度量是通过对输入空间的不同点进行平均计算得到的。输入因子被视为离散的数值(也称为水平),与其他直接从分布中获取输入值的全局方法不同。利用Morris方法可以得到两个灵敏度指标:一个是输入因素对输出的主要影响,另一个是评估与其他因素的相互作用或非线性影响。当项目中影响因素较少,非影响因素较多时,该方法更适用。与其它全局灵敏度分析方法相比,该方法的主要优点是计算量小。缺点是,种方法倾向于通过对输入因素进行排序来提供定性的度量,无法量化不同因素对产出的影响。因此,这种方法不允许自我验证,这意味着分析人员不知道在分析中考虑了多少输出的总方差。其他类型的全局敏感性分析(例如基于回归或方差的方法)通常可以提供此信息。Morris方法的另一个缺点是,由于该方法使用的抽样方法不能收敛到模型输出的总体均值,因此不能对建筑节能性能进行不确定性分析

基于方差的方法

基于方差的方法是对对应输入的输出的不确定性进行分解。该方法中使用的两种主要的敏感性度量是一阶总阶效应。一阶效应和总效应之间的差异可以反映变量之间相互作用的影响。如果研究目的是确定在能量模型中不重要的因素,那么应该使用总阶效应。相反,如果目的是优先考虑节能措施,则应优先考虑一阶效应。

该方法是一种无模型方法,适用于复杂的非线性非加性模型。该方法可以量化各输入变量的方差,并考虑各变量之间的相互作用。该方法的缺点是计算量大。两种常用的方法是FASTSobol。经典的FAST方法只考虑非线性效应,而不考虑相互作用效应。Sobol方法可以分解所有的输出方差,这意味着分析中不会留下输出的方差。但是,与其他全局敏感性分析方法相比,Sobol方法的计算开销要大得多。

基于元模型的方法(Meta-model based method)

元模型敏感性分析是一个两阶段的方法。首先,使用非参数回归方法创建元模型,这些方法没有预先确定的形式(如线性或非线性回归),因此它可以适用于复杂的模型。其次,使用基于方差的元模型计算灵敏度。元模型是使用统计(或机器学习)模型来近似目标函数。使用元模型的主要观点是,运行元模型比运行详细的建筑能源模拟模型所需的时间要少得多。因此,与基于方差的方法相比,该元模型方法可以提供更有效的敏感性指数。该方法还可以量化不同输入因素下输出的方差,因为它使用了前面介绍的基于方差的方法。

灵敏度分析中常用的元模型有MARS(多元自适应回归样条)、ACOSSO(自适应分量选择与平滑算子)、支持向量机、GP(高斯过程)、TGP (treed高斯过程)。MARS结合了样条回归、逐步模型拟合和递归分区。ACOSSO可以被看作是一个加权的或自适应的COsSO(元件选择收缩算子),它使用一个重新标度的范数来允许对功能元件进行更灵活的估计。GP模型是在有限维向量到无限维向量上的广义多元高斯分布,在机器学习领域非常流行。支持向量机(Support vector machine, SVM)是监督学习中非常流行的一种选择,它通过在特征空间的一个大的变换版本中构造线性边界来产生非线性边界。TGP提供完全贝叶斯非平稳和非线性回归模型,以提高预测能力。

参考

https://wikimili.com/en/Sensitivity_analysis
https://salib.readthedocs.io/en/latest/basics.html
tian wei “A review of sensitivity analysis methods in building energy analysis”(2013)

  • 7
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 参数敏感分析是一种用于评估模型输出如何随着输入参数的变化而变化的技术。在 Python 中,可以使用以下步骤进行参数敏感分析: 1. 定义模型:首先需要定义一个模型,这可能是一个函数或一个类。 2. 定义输入参数确定模型的输入参数,并为每个参数指定一个范围或值。 3. 运行模型:使用定义的输入参数运行模型,并记录输出结果。 4. 分析结果:根据输出结果进行分析,比较不同输入参数的输出结果,以获得参数敏感分析的结果。 下面给出一个简单的例子,演示如何在 Python 中进行参数敏感分析: ```python import numpy as np import matplotlib.pyplot as plt # 定义模型 def model(x, y, z): return x ** 2 + y - z # 定义输入参数 x_values = np.linspace(-10, 10, 100) y_values = np.linspace(-5, 5, 50) z_values = np.linspace(0, 20, 200) # 运行模型 results = [] for x in x_values: for y in y_values: for z in z_values: results.append(model(x, y, z)) # 分析结果 results = np.array(results) plt.hist(results, bins=50) plt.show() ``` 在此示例中,我们定义了一个简单的模型 `model`,它有三个输入参数 `x`、`y` 和 `z`。然后,我们定义了输入参数的范围,并使用嵌套循环运行模型,记录输出结果。最后,我们将输出结果绘制成直方图,以分析不同输入参数的输出结果。 ### 回答2: 参数敏感分析是通过改变模型中的参数值来检测参数对模型结果的影响程度的一种分析方法。在Python中,有多种方式可以进行参数敏感分析。 一种常用的方法是使用传统的一次方差分析(ANOVA)方法,通过计算参数的偏导数来判断参数敏感。Python中的SciPy库提供了丰富的统计函数,可以方便地进行ANOVA分析。通过计算得到的F值和p值,我们可以判断各个参数对模型结果的影响是否显著。 另一种方法是使用SALib(Sensitivity Analysis Library)库,它是一个用于参数敏感分析的开源工具。SALib中提供了多种参数敏感分析的方法,包括元素效应法、总效应法和局部敏感法等。使用SALib,我们可以方便地计算出每个参数的灵敏度指标,从而判断参数敏感。 此外,Python中还有其他一些库,如Pyomo和GPy等,也提供了一些参数敏感分析的功能。通过这些库,我们可以根据不同的需求和模型选择合适的方法来进行参数敏感分析。 总之,在Python中进行参数敏感分析可以通过传统的统计方法或使用专门的库来实现。这些方法和工具可以帮助我们评估参数的重要,从而更好地理解和优化模型。 ### 回答3: 参数敏感分析是指在给定的模型中,对于不同的参数取值进行分析,以评估模型对于每个参数敏感程度。在Python中,可以通过以下步骤进行参数敏感分析: 1. 导入所需的库和模块,如numpy、pandas和matplotlib等。 2. 定义模型函数或方程。这是参数敏感分析的基础,需要根据具体的模型或方程进行定义,以便后续分析。 3. 定义参数范围。根据具体的模型和问题,确定需要进行参数敏感分析参数范围,并进行定义。 4. 生成参数空间。在给定的参数范围内,通过设定步长和精度等参数,生成参数空间,即参数的可能取值。 5. 循环计算模型输出。对于参数空间中的每一个参数组合,利用模型函数或方程进行计算,得到模型的输出。 6. 分析模型输出。根据模型的输出结果,进行进一步的分析。可以绘制参数与模型输出之间的关系图,使用散点图或线图来可视化不同参数取值对模型输出的影响。 7. 敏感指标计算。通过计算模型输出的差异或变化,可以得到每个参数对于模型输出的敏感指标。常见的指标有灵敏度指标和影响指标等。 8. 结果解读与应用。根据得到的敏感指标,对参数进行排序,找出对模型输出影响最大的参数,并进行结果的解读和应用。 总之,在Python中,参数敏感分析可以通过模拟参数的不同取值,并计算模型输出的变化来进行。这是一种评估模型对于参数敏感程度的方法,可以帮助我们理解模型的行为,并在模型拟合和优化中进行参数选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值