statistical_model.py 2.81 KiB
import matplotlib.pyplot as plt
import numpy as np

from extreme_fit.estimator.margin_estimator.utils import fitted_stationary_gev


def binomial_observation():
    marker_altitude_massif_name_for_paper1 = [
        ('magenta', 'stationary', [0.5, 0.5]),
        # ('darkmagenta', 'increase', [0.5, 0.8]),
        # ('mediumpurple', 'decrease', [0.5, 0.3]),
    ]
    ax = plt.gca()
    for color, label, l in marker_altitude_massif_name_for_paper1:
        before, after = l
        total_time = 60
        data_before = np.random.binomial(1, before, int(total_time / 3))
        data_after = np.random.binomial(1, after, int(2 * total_time / 3))
        data = np.concatenate([data_before, data_after], axis=0)
        time = list(range(total_time))
        ax.tick_params(axis='both', which='major', labelsize=15)
        fontsize = 20
        ax.set_xlabel('Time', fontsize=fontsize)
        ax.set_ylabel('Coin value', fontsize=fontsize)
        plt.yticks([0.0, 1.0], ['Heads', 'Tails'])
        ax.plot(time, data, color=color, label=label, linewidth=4)


def histogram_for_gev():
    import matplotlib.pyplot as plt
    from extreme_data.meteo_france_data.scm_models_data.crocus.crocus import CrocusSnowLoadTotal
    from extreme_data.meteo_france_data.scm_models_data.crocus.crocus_variables import AbstractSnowLoadVariable
    ax = plt.gca()
    study = CrocusSnowLoadTotal(altitude=1800)
    s = study.observations_annual_maxima.df_maxima_gev.loc['Vercors']
    x_gev = s.values
    gev_params = fitted_stationary_gev(x_gev)
    samples = gev_params.sample(10000)
    nb = 10
    epsilon = 0.0
    x, bins, p = ax.hist(samples, bins=nb, color='white', edgecolor='grey', density=True, stacked=True,
                         linewidth=3, bottom=[-epsilon for _ in range(nb)])
    for item in p:
        item.set_height((item.get_height() / sum(x)))
    # print(gev_params)
    # x = np.linspace(0.0, 10, 1000)
    # y = gev_params.density(x)
    # ax.plot(x, y, linewidth=5)
    ax.set_xlabel('Annual maxima of GSL ({})'.format(AbstractSnowLoadVariable.UNIT), fontsize=15)
    ax.set_ylabel('Probability', fontsize=15)
    ax.tick_params(axis='both', which='major', labelsize=15)
    ax.set_yticks([0, 0.1, 0.2, 0.3])
    ax.set_xlim([0, 10])
    ax.set_ylim([0, 0.3])


def histogram_for_normal():
    ax = plt.gca()
    linewidth = 5
    absisse = [0.25, 0.75]
    ax.bar(absisse, [0.6, 0.6], width=0.2, color='white', edgecolor='grey', linewidth=linewidth, bottom=-0.1)
    plt.xticks(absisse, ['Heads', 'Tail'])
    ax.set_yticks([0, 0.5])
    ax.set_xlabel('Coin value', fontsize=15)
    ax.tick_params(axis='both', which='major', labelsize=15)

    ax.set_ylabel('Probability', fontsize=15)
    ax.set_xlim([0, 1])
    ax.set_ylim([0, 0.6])


if __name__ == '__main__':
    # binomial_observation()
    # histogram_for_gev()
    histogram_for_normal()
    plt.show()