Skip to main content
 首页 » 编程设计

python之模拟相关的多变量数据

2025年05月04日7powertoolsteam

我正在尝试从历史飓风数据生成综合实现。在我的问题中,飓风通过一组描述符进行参数化(即 Storm 大小、 Storm 强度、 Storm 速度和 Storm 方向——所有这些都引用了飓风穿过某些海岸线时的值)。这些实现将用于对飓风引发的洪水进行概率预测。假设历史飓风数据来自一些潜在的多元分布。这个想法是从这个基础分布中提取额外的样本(保留矩、相关性、物理边界,例如正 Storm 大小等)。

我已经实现了最近邻高斯色散方法,该方法根据 Taylor 和 Thompson 开发的技术进行了修改 - 发表于 1986 年的计算统计和数据分析。我想看看是否有更好的方法来执行此操作。

数据样本(墨西哥湾飓风 1940-2005):

def TT_alg(data_list, sample_size, num_neighbors=5, metric=2): 
 
    dummy_list = [] 
    dimension = len(data_list[0]) 
 
    # transform the data to the interval [0,1] 
    aa = numpy.array([(max([row[i] for row in data_list]) - min([row[i] for row in   data_list])) for i in range(dimension)]) 
    bb = numpy.array([min([row[j] for row in data_list]) for j in range(dimension)]) 
 
    data_array = numpy.array(data_list) 
    data_array_normed = (data_array - bb) / aa 
 
    # setup nearest neighbor tree 
    tree = scipy.spatial.KDTree(data_array_normed) 
 
    # perform nearest neighbor random walk 
    for ijk in range(sample_size): 
 
        sample = random.choice(data_array_normed) 
 
        kNN = tree.query(sample, k=num_neighbors, p=metric) 
        x_mu = numpy.array([numpy.average([data_array_normed[i][j] for i in kNN[1]]) for j in range(dimension)]) 
        x_si = numpy.array([numpy.std([data_array_normed[i][j] for i in kNN[1]]) for j in range(dimension)]) 
        s_gs = [numpy.random.normal(mu, si) for mu, si in zip(x_mu, x_si)] 
        dummy_list.append(s_gs) 
 
    dummy_array = numpy.array(dummy_list) 
 
    # go back to original scale 
    data_array_unnormed = (dummy_array * aa) + bb 
 
    return data_array_unnormed.tolist() 

neighborhood_size=5 和 distance_metric=Euclidean 的示例。

请您参考如下方法:

您的数据几乎可以肯定不是高斯分布的,速度、强度和大小都必须为正,并且大小和强度明显偏斜。对数正态分布是合理的。我建议在尝试分布拟合之前对数据进行对数转换。

try catch 相关结构(肯定存在于您发布的数据中!)的一种方法是估计均值 M 和方差/协方差矩阵 V的日志转换数据。然后使用 Cholesky decomposition 分解方差/协方差矩阵得到 V = transpose(C) C。如果 Z 是独立法线的向量,则 X = M + transpose(C) Z 将是具有所需均值和方差/协方差结构的相关法线向量。对 X 的元素求幂将产生您的模拟结果。结果应避免伪像,例如上一张图中可见的负 Storm 大小。参见 this paper了解更多详情。