2

나는 역사적인 허리케인 데이터로부터 합성 실현을 생성하려고합니다. 허리케인은 내 문제에서 일련의 설명자 (즉, 폭풍 크기, 폭풍 강도, 폭풍 속도 및 폭풍 표제 - 허리케인이 일부 해안선을 가로 지르는 시점의 값을 참조)으로 매개 변수화되었습니다. 실현은 허리케인 생성 홍수에 대한 확률 론적 예측을하는데 사용될 것입니다. 역사적인 허리케인 데이터는 일부 근원적 인 다변량 분포에서 나온다고 가정합니다. 아이디어는이 기본 분포 (순간, 상관 관계, 양의 폭풍 크기와 같은 물리적 범위 등)에서 추가 샘플을 그려내는 것입니다.상관 관계가있는 다 변수 데이터 시뮬레이션

저는 Taylor와 Thompson에 의해 개발 된 기법 (Computational Statistics and Data Analysis, 1986)에 의해 수정 된 가장 가까운 이웃 가우스 분산 방법을 구현했습니다. 이것을 수행하는 더 좋은 방법이 있는지 알고 싶습니다.

데이터 샘플 (멕시코 허리케인 1940년부터 2005년까지 걸프) neighborhood_size = 5 = distance_metric 유클리드위한

Gulf of Mexico hurricanes 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() 

예.

enter image description here

+0

이 질문을 Cross-Validated (통계 및 기계 학습을위한 SE 사이트)에 게시하면 더 편리 할 것입니다. [이 신문] (http://civil.colorado.edu/~balajir/my-papers/MultiNon.pdf)을 사용해보십시오. – Antoine

답변

1

귀하의 데이터는 거의 확실하게 속도, 강도 가우스하지 않고, 크기가 모두 긍정적이어야하며, 크기와 강도가 명확하게 기울어있다. 로그 정규 분포가 그럴듯합니다. 배포 적합성을 시도하기 전에 데이터를 로그 변환하는 것이 좋습니다.

한 가지 방법은 상관 구조를 캡처하려고합니다 (확실히 당신의 게시 된 데이터에 존재!) 평균에게 M과 분산/공분산 행렬 로그 변환 된 데이터의 V을 추정하는 것입니다. 그런 다음 Cholesky decomposition을 사용하여 분산/공분산 행렬을 분해하여 V = transpose () 이되도록합니다. Z 다음 독립적 법선 벡터이면 X = M + Z 원하는 평균 및 분산/공분산 구조와 상관 법선 벡터 것 (C)를 전치. X의 요소를 지수화하면 시뮬레이션 결과가 산출됩니다. 결과는 마지막 그래프에서 볼 수있는 음의 폭풍 크기와 같은 아티팩트를 피해야합니다. 자세한 내용은 this paper을 참조하십시오.