使用SALib morris采样器生成具有正态分布的参数样本

问题描述

我想知道如何使用SALib Morris采样器生成具有正态分布的样本。 (用于使用莫里斯方法进行敏感性分析)

由于morris采样器中尚不支持dists”语句(与saltelli-sampler一样),因此我尝试了一种变通方法(已使用具有“ dists”且有效的saltelli-sampler进行了测试),但是,当将均匀分布转换为正态分布时,使用这种morris方法,我在样本中收到许多无穷大值。有解决方案吗? ->当然,我不能在仿真模型中使用这些无限值。

尝试的代码

from SALib.sample import morris

import pandas as pd

import scipy.stats.distributions as ssd

import lhsmdu



# problem deFinition ('num_vars','names','bounds','dists')

prob_dists_code = {'num_vars': 3,
                      
                      'names': ['P1','P2','P3'],

                     'groups': None,

                     'bounds': [[0.0,1.0],[0.0,1.0]]}

np_array = morris.sample(prob_dists_code,N=1000,num_levels=4,optimal_trajectories=None)

p1 = ssd.uniform(loc=0.9,scale=0.2)
p2 = ssd.norm(loc=45,scale=10)
p3 = ssd.norm(loc=0,scale=1)

new_samples = np_array

new_samples[:,0] = lhsmdu.inverseTransformSample(p1,np_array[:,0])

new_samples[:,1] = lhsmdu.inverseTransformSample(p2,1])

new_samples[:,2] = lhsmdu.inverseTransformSample(p3,2])


df = pd.DataFrame(new_samples)

df.columns = ['P1','P3']

print(df)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)