#求帮助#利用皮尔逊分布(Johnson Distribution)、蒙特卡洛模拟进行基于历史降雨特征下的随机降雨序列模拟

#求帮助#利用皮尔逊分布(Johnson Distribution)、蒙特卡洛模拟进行基于历史降雨特征下的随机降雨序列模拟
原文详细的操作可参考以下链接中的论文及其附件
链接:https://pan.baidu.com/s/18AfnZ6EDf_Q0EHxvVKHpuQ?pwd=73r3
提取码:73r3
以下是整理得到的简单过程:
1.下面是253个经过双变量无量纲化处理后的降雨序列,第一列是降雨事件的编号,编号后的一整行为降雨事件的降雨序列

img


第一步先利用下面的公式对该数据的每行进行对数比转化(这里选择Ii*=3)

img


生成结果如下

img


2.从非正规空间到标准正规空间的转换。
这里首先计算每个变量Yi(i=1,2,..,K,i≠3)的前四个样本矩,然后用于从三个特定类型SB(有界分布),SU(无界分布)和SL(对数正态分布)中确定最佳拟合约翰逊分布类型,并根据Hill等人(1976)提供的算法程序估计每个Yi的参数(i=1,2,..,K,i≠3)。对于每个变量Yi(i=1,2,..,K,i≠3),以下为上面数据的前四个采样矩,最佳拟合分布和分布参数。

img


再根据以下方程将253次降雨事件中的每个变量Yi(i=1,2,..,K,i≠3)相应地转换为标准正态变量Wi(i=1,2,..,K,i≠3)

img

转换结果如下表所示。

img


3.正交变换
计算变换后的标准正态变量W的相关矩阵

img

确定其正交变换矩阵T,

img

然后将交叉相关的标准正态随机变量W变换为不相关的自独立标准正态变量W'

img


4.采用简单的蒙特卡罗方法随机生成K-1个独立的标准正态变量(这里是12-1=11个,共20组),如下表

img


5.逆变换
首先,基于步骤4中生成的自变量w‘和步骤3中的正交变换矩阵T,计算模拟得到的相关标准随机变量w为w=Tw’,如下表

img


其次,通过以下函数

img


可以得到样本的多元非正态随机变量

img


如下表所示:

img

img


表示标准正态变量w的CDF

img


表示下式中初始随机变量Yi的逆CDF

img


最后,受约束的多元相关的非正态随机变量

img


由下式得到

img

最后利用下式,通过线性变换,得到指定的无量纲降雨质量曲线

img

等式中的约翰逊变换,通过F的逆,可以得到多元非正态随机变量
其次,通过函数(i=1、2,4,..,K),得到了样本的多元非正态随机变量y(=y1、..,yK,除y3)(表A9)。
基于历史数据特征,基于约翰逊分布、蒙特卡洛模拟、求逆过程等模拟得到的结果如下:

img


以图的形式呈现:

img

这里测试的数据可以由以下链接下载
链接:https://pan.baidu.com/s/1U0DZXiH0MbIIdbq6cvQxdA?pwd=j513
提取码:j513

可以参考下

Numpy
Pandas
Matplotlib
Seaborn
def find_average_monthly_AT_or_Humidity(what_for):
    avg_data_tempreature_monthly = {}
    for year in range(2006,2017):
        for month in range(1,13):
            result = list(new_data.loc[(new_data['month'] == month)&(new_data['year']==year) , :][what_for].values)
            if month not in avg_data_tempreature_monthly:
                avg_data_tempreature_monthly[month] = [np.mean(result)]
            else:
                avg_data_tempreature_monthly[month].append(np.mean(result))
    return avg_data_tempreature_monthly
resampled_data = new_data.resample('M').mean() 
# resample accroading to Month end ('M')
resampled_data['month'] = resampled_data.index.month
resampled_data['year'] = resampled_data.index.year
sns.barplot(H['year'] , H[4])
plt.title('Humidity For April Month')
plt.show()
sns.barplot(AT['year'] , AT[4])
plt.title('Apparent Temperature For April Month')
plt.show()
plt.plot(range(2006,2017),AT_monthly_average[4] , label = 'Apparent Temperature(C)' , color = 'red')
plt.plot(range(2006,2017),Humidity_monthly_average[4] , label = 'Humidity')
plt.legend()
plt.title('Apparent Temperature vs Humidity for April Month')
plt.show()



import numpy as np
from scipy.stats import johnsonsu

# Load historical rainfall data into a NumPy array
rainfall_data = np.array([10.2, 12.5, 9.8, 15.3, 11.6, 8.9, 14.2, 13.1, 10.7, 16.4, 12.8, 9.5])

# Fit the Pearson distribution to the data
params = johnsonsu.fit(rainfall_data)

# Generate a large number of simulated rainfall values
num_samples = 1000
simulated_rainfall = johnsonsu.rvs(*params, size=num_samples)

# Generate a random rainfall sequence based on the simulated values
random_rainfall = np.random.choice(simulated_rainfall, size=len(rainfall_dat

你这已经有实现步骤了,可以使用Python中的Scipy和Numpy库进行分布拟合和蒙特卡罗模拟,并使用Matplotlib库绘制降雨序列的图形。

这个问题 没有半天时间搞不出来

你不是都已经得到图了吗?还需要我们做什么工作?

联系一下论文作者试试,如果能联系上,找原作者要,是最省事、最准确的

看你这个是论文中的算法啊,一般论文作者会公开实验程序的呀。你联系下作者看下能否索要到程序的代码,然后你在这个的基础上,加上你的数据。不然需要完全读懂你的论文有点难。具体的工具的话,可以使用python或者matlab来实现皮尔逊分布(Johnson Distribution)、蒙特卡洛模拟