Пример #1
0
def test_Fit_Gumbel_2P():
    dist = Gumbel_Distribution(mu=50, sigma=8)
    rawdata = dist.random_samples(20, seed=5)
    data = make_right_censored_data(data=rawdata, threshold=dist.mean)

    MLE = Fit_Gumbel_2P(failures=data.failures,
                        right_censored=data.right_censored,
                        method='MLE',
                        show_probability_plot=False,
                        print_results=False)
    assert_allclose(MLE.mu, 47.97813932110471, rtol=rtol, atol=atol)
    assert_allclose(MLE.sigma, 5.487155810067562, rtol=rtol, atol=atol)
    assert_allclose(MLE.AICc, 83.17550426530995, rtol=rtol, atol=atol)
    assert_allclose(MLE.BIC, 84.46108645947676, rtol=rtol, atol=atol)
    assert_allclose(MLE.loglik, -39.23481095618439, rtol=rtol, atol=atol)
    assert_allclose(MLE.AD, 76.43706903015115, rtol=rtol, atol=atol)
    assert_allclose(MLE.Cov_mu_sigma, 1.8549915988421086, rtol=rtol, atol=atol)

    LS = Fit_Gumbel_2P(failures=data.failures,
                       right_censored=data.right_censored,
                       method='LS',
                       show_probability_plot=False,
                       print_results=False)
    assert_allclose(LS.mu, 46.43212585298994, rtol=rtol, atol=atol)
    assert_allclose(LS.sigma, 4.827795060868229, rtol=rtol, atol=atol)
    assert_allclose(LS.AICc, 83.88382894786476, rtol=rtol, atol=atol)
    assert_allclose(LS.BIC, 85.16941114203156, rtol=rtol, atol=atol)
    assert_allclose(LS.loglik, -39.58897329746179, rtol=rtol, atol=atol)
    assert_allclose(LS.AD, 76.44737853267988, rtol=rtol, atol=atol)
    assert_allclose(LS.Cov_mu_sigma, 0.32622575178078633, rtol=rtol, atol=atol)
Пример #2
0
def test_Fit_Gumbel_2P():
    dist = Gumbel_Distribution(mu=50,sigma=8)
    rawdata = dist.random_samples(20, seed=5)
    data = make_right_censored_data(data=rawdata, threshold=dist.mean)
    fit = Fit_Gumbel_2P(failures=data.failures, right_censored=data.right_censored, show_probability_plot=False, print_results=False)
    assert_allclose(fit.mu, 47.978167597211396,rtol=rtol,atol=atol)
    assert_allclose(fit.sigma, 5.487173373377182,rtol=rtol,atol=atol)
    assert_allclose(fit.AICc, 83.17550426511939,rtol=rtol,atol=atol)
    assert_allclose(fit.Cov_mu_sigma, 1.8550359215645946,rtol=rtol,atol=atol)
    assert_allclose(fit.loglik, -39.234810956089106,rtol=rtol,atol=atol)
Пример #3
0
def test_Gumbel_Distribution():
    dist = Gumbel_Distribution(mu=15, sigma=2)
    assert_allclose(dist.mean, 13.845568670196934, rtol=rtol, atol=atol)
    assert_allclose(dist.standard_deviation, 2.565099660323728, rtol=rtol, atol=atol)
    assert_allclose(dist.variance, 6.579736267392906, rtol=rtol, atol=atol)
    assert_allclose(dist.skewness, -1.1395470994046486, rtol=rtol, atol=atol)
    assert_allclose(dist.kurtosis, 5.4, rtol=rtol, atol=atol)
    assert dist.param_title_long == 'Gumbel Distribution (μ=15,σ=2)'
    assert_allclose(dist.quantile(0.2), 12.00012002648097, rtol=rtol, atol=atol)
    assert_allclose(dist.inverse_SF(q=0.7), 12.938139133682554, rtol=rtol, atol=atol)
    assert_allclose(dist.mean_residual_life(10), 4.349172610672009, rtol=rtol, atol=atol)
    xvals = [dist.quantile(0.001), dist.quantile(0.01), dist.quantile(0.1), dist.quantile(0.9), dist.quantile(0.99), dist.quantile(0.999)]
    assert_allclose(dist.PDF(xvals=xvals, show_plot=False), [0.0004997499166249747, 0.0049749162474832164, 0.04741223204602183, 0.11512925464970217, 0.0230258509299404, 0.003453877639491069], rtol=rtol, atol=atol)
    assert_allclose(dist.CDF(xvals=xvals, show_plot=False), [0.0009999999999999998, 0.010000000000000002, 0.09999999999999999, 0.9000000000000001, 0.99, 0.999], rtol=rtol, atol=atol)
    assert_allclose(dist.SF(xvals=xvals, show_plot=False), [0.999, 0.99, 0.9, 0.09999999999999984, 0.009999999999999969, 0.0010000000000000002], rtol=rtol, atol=atol)
    assert_allclose(dist.HF(xvals=xvals, show_plot=False), [0.0005002501667917664, 0.0050251679267507236, 0.05268025782891314, 1.1512925464970236, 2.3025850929940472, 3.4538776394910684], rtol=rtol, atol=atol)
    assert_allclose(dist.CHF(xvals=xvals, show_plot=False), [0.0010005003335835344, 0.01005033585350145, 0.10536051565782628, 2.3025850929940472, 4.6051701859880945, 6.907755278982137], rtol=rtol, atol=atol)
Пример #4
0
 def __update_params(_, self):
     value1 = self.s0.val
     value2 = self.s1.val
     value3 = self.s2.val
     if self.name == 'Weibull':
         dist = Weibull_Distribution(alpha=value1,
                                     beta=value2,
                                     gamma=value3)
     elif self.name == 'Loglogistic':
         dist = Loglogistic_Distribution(alpha=value1,
                                         beta=value2,
                                         gamma=value3)
     elif self.name == 'Gamma':
         dist = Gamma_Distribution(alpha=value1, beta=value2, gamma=value3)
     elif self.name == 'Loglogistic':
         dist = Loglogistic_Distribution(alpha=value1,
                                         beta=value2,
                                         gamma=value3)
     elif self.name == 'Lognormal':
         dist = Lognormal_Distribution(mu=value1,
                                       sigma=value2,
                                       gamma=value3)
     elif self.name == 'Beta':
         dist = Beta_Distribution(alpha=value1, beta=value2)
     elif self.name == 'Normal':
         dist = Normal_Distribution(mu=value1, sigma=value2)
     elif self.name == 'Gumbel':
         dist = Gumbel_Distribution(mu=value1, sigma=value2)
     elif self.name == 'Exponential':
         dist = Exponential_Distribution(Lambda=value1, gamma=value2)
     else:
         raise ValueError(
             str(self.name + ' is an unknown distribution name'))
     plt.sca(self.ax_pdf)
     plt.cla()
     dist.PDF()
     plt.title('PDF')
     plt.xlabel('')
     plt.ylabel('')
     plt.sca(self.ax_cdf)
     plt.cla()
     dist.CDF()
     plt.title('CDF')
     plt.xlabel('')
     plt.ylabel('')
     plt.sca(self.ax_sf)
     plt.cla()
     dist.SF()
     plt.title('SF')
     plt.xlabel('')
     plt.ylabel('')
     plt.sca(self.ax_hf)
     plt.cla()
     dist.HF()
     plt.title('HF')
     plt.xlabel('')
     plt.ylabel('')
     plt.sca(self.ax_chf)
     plt.cla()
     dist.CHF()
     plt.title('CHF')
     plt.xlabel('')
     plt.ylabel('')
     plt.subplots_adjust(left=0.07,
                         right=0.98,
                         top=0.9,
                         bottom=0.25,
                         wspace=0.18,
                         hspace=0.30)
     plt.suptitle(dist.param_title_long, fontsize=15)
     plt.draw()
Пример #5
0
 def __update_distribution(name, self):
     self.name = name
     if self.name == 'Weibull':
         dist = Weibull_Distribution(alpha=100, beta=2, gamma=0)
         param_names = ['Alpha', 'Beta', 'Gamma']
         plt.sca(self.ax0)
         plt.cla()
         self.s0 = Slider(self.ax0,
                          param_names[0],
                          valmin=0.1,
                          valmax=500,
                          valinit=dist.alpha)
         plt.sca(self.ax1)
         plt.cla()
         self.s1 = Slider(self.ax1,
                          param_names[1],
                          valmin=0.2,
                          valmax=25,
                          valinit=dist.beta)
         try:  # clear the slider axis if it exists
             plt.sca(self.ax2)
             plt.cla()
         except AttributeError:  # if the slider axis does no exist (because it was destroyed by a 2P distribution) then recreate it
             self.ax2 = plt.axes([0.1, 0.05, 0.8, 0.03],
                                 facecolor=self.background_color)
         self.s2 = Slider(self.ax2,
                          param_names[2],
                          valmin=0,
                          valmax=500,
                          valinit=dist.gamma)
     elif self.name == 'Gamma':
         dist = Gamma_Distribution(alpha=100, beta=5, gamma=0)
         param_names = ['Alpha', 'Beta', 'Gamma']
         plt.sca(self.ax0)
         plt.cla()
         self.s0 = Slider(self.ax0,
                          param_names[0],
                          valmin=0.1,
                          valmax=500,
                          valinit=dist.alpha)
         plt.sca(self.ax1)
         plt.cla()
         self.s1 = Slider(self.ax1,
                          param_names[1],
                          valmin=0.2,
                          valmax=25,
                          valinit=dist.beta)
         try:  # clear the slider axis if it exists
             plt.sca(self.ax2)
             plt.cla()
         except AttributeError:  # if the slider axis does no exist (because it was destroyed by a 2P distribution) then recreate it
             self.ax2 = plt.axes([0.1, 0.05, 0.8, 0.03],
                                 facecolor=self.background_color)
         self.s2 = Slider(self.ax2,
                          param_names[2],
                          valmin=0,
                          valmax=500,
                          valinit=dist.gamma)
     elif self.name == 'Loglogistic':
         dist = Loglogistic_Distribution(alpha=100, beta=8, gamma=0)
         param_names = ['Alpha', 'Beta', 'Gamma']
         plt.sca(self.ax0)
         plt.cla()
         self.s0 = Slider(self.ax0,
                          param_names[0],
                          valmin=0.1,
                          valmax=500,
                          valinit=dist.alpha)
         plt.sca(self.ax1)
         plt.cla()
         self.s1 = Slider(self.ax1,
                          param_names[1],
                          valmin=0.2,
                          valmax=50,
                          valinit=dist.beta)
         try:  # clear the slider axis if it exists
             plt.sca(self.ax2)
             plt.cla()
         except AttributeError:  # if the slider axis does no exist (because it was destroyed by a 2P distribution) then recreate it
             self.ax2 = plt.axes([0.1, 0.05, 0.8, 0.03],
                                 facecolor=self.background_color)
         self.s2 = Slider(self.ax2,
                          param_names[2],
                          valmin=0,
                          valmax=500,
                          valinit=dist.gamma)
     elif self.name == 'Lognormal':
         dist = Lognormal_Distribution(mu=2.5, sigma=0.5, gamma=0)
         param_names = ['Mu', 'Sigma', 'Gamma']
         plt.sca(self.ax0)
         plt.cla()
         self.s0 = Slider(self.ax0,
                          param_names[0],
                          valmin=0,
                          valmax=5,
                          valinit=dist.mu)
         plt.sca(self.ax1)
         plt.cla()
         self.s1 = Slider(self.ax1,
                          param_names[1],
                          valmin=0.01,
                          valmax=2,
                          valinit=dist.sigma)
         try:  # clear the slider axis if it exists
             plt.sca(self.ax2)
             plt.cla()
         except AttributeError:  # if the slider axis does no exist (because it was destroyed by a 2P distribution) then recreate it
             self.ax2 = plt.axes([0.1, 0.05, 0.8, 0.03],
                                 facecolor=self.background_color)
         self.s2 = Slider(self.ax2,
                          param_names[2],
                          valmin=0,
                          valmax=500,
                          valinit=dist.gamma)
     elif self.name == 'Normal':
         dist = Normal_Distribution(mu=0, sigma=10)
         param_names = ['Mu', 'Sigma', '']
         plt.sca(self.ax0)
         plt.cla()
         self.s0 = Slider(self.ax0,
                          param_names[0],
                          valmin=-100,
                          valmax=100,
                          valinit=dist.mu)
         plt.sca(self.ax1)
         plt.cla()
         self.s1 = Slider(self.ax1,
                          param_names[1],
                          valmin=0.01,
                          valmax=20,
                          valinit=dist.sigma)
         try:  # clear the slider axis if it exists
             self.ax2.remove()  # this will destroy the axes
         except KeyError:
             pass
     elif self.name == 'Gumbel':
         dist = Gumbel_Distribution(mu=0, sigma=10)
         param_names = ['Mu', 'Sigma', '']
         plt.sca(self.ax0)
         plt.cla()
         self.s0 = Slider(self.ax0,
                          param_names[0],
                          valmin=-100,
                          valmax=100,
                          valinit=dist.mu)
         plt.sca(self.ax1)
         plt.cla()
         self.s1 = Slider(self.ax1,
                          param_names[1],
                          valmin=0.01,
                          valmax=20,
                          valinit=dist.sigma)
         try:  # clear the slider axis if it exists
             self.ax2.remove()  # this will destroy the axes
         except KeyError:
             pass
     elif self.name == 'Exponential':
         dist = Exponential_Distribution(Lambda=1, gamma=0)
         param_names = ['Lambda', 'Gamma', '']
         plt.sca(self.ax0)
         plt.cla()
         self.s0 = Slider(self.ax0,
                          param_names[0],
                          valmin=0.001,
                          valmax=5,
                          valinit=dist.Lambda)
         plt.sca(self.ax1)
         plt.cla()
         self.s1 = Slider(self.ax1,
                          param_names[1],
                          valmin=0,
                          valmax=500,
                          valinit=dist.gamma)
         try:  # clear the slider axis if it exists
             self.ax2.remove()  # this will destroy the axes
         except KeyError:
             pass
     elif self.name == 'Beta':
         dist = Beta_Distribution(alpha=2, beta=2)
         param_names = ['Alpha', 'Beta', '']
         plt.sca(self.ax0)
         plt.cla()
         self.s0 = Slider(self.ax0,
                          param_names[0],
                          valmin=0.01,
                          valmax=5,
                          valinit=dist.alpha)
         plt.sca(self.ax1)
         plt.cla()
         self.s1 = Slider(self.ax1,
                          param_names[1],
                          valmin=0.01,
                          valmax=5,
                          valinit=dist.beta)
         try:  # clear the slider axis if it exists
             self.ax2.remove()  # this will destroy the axes
         except KeyError:
             pass
     else:
         raise ValueError(
             str(self.name + ' is an unknown distribution name'))
     plt.suptitle(dist.param_title_long, fontsize=15)
     distribution_explorer.__update_params(None, self)
     distribution_explorer.__interactive(self)
     plt.draw()
Пример #6
0
    def __init__(self,
                 distribution,
                 include_location_shifted=True,
                 show_plot=True,
                 print_results=True,
                 number_of_distributions_to_show=3):
        # ensure the input is a distribution object
        if type(distribution) not in [
                Weibull_Distribution, Normal_Distribution,
                Lognormal_Distribution, Exponential_Distribution,
                Gamma_Distribution, Beta_Distribution,
                Loglogistic_Distribution, Gumbel_Distribution
        ]:
            raise ValueError(
                'distribution must be a probability distribution object from the reliability.Distributions module. First define the distribution using Reliability.Distributions.___'
            )

        # sample the CDF from 0.001 to 0.999. These samples will be used to fit all other distributions.
        RVS = distribution.quantile(
            np.linspace(0.001, 0.999, 698)
        )  # 698 samples is the ideal number for the points to align. Evidenced using plot_points.

        # filter out negative values
        RVS_filtered = []
        negative_values_error = False
        for item in RVS:
            if item > 0:
                RVS_filtered.append(item)
            else:
                negative_values_error = True
        if negative_values_error is True:
            colorprint(
                'WARNING: The input distribution has non-negligible area for x<0. Samples from this region have been discarded to enable other distributions to be fitted.',
                text_color='red')

        fitted_results = Fit_Everything(
            failures=RVS_filtered,
            print_results=False,
            show_probability_plot=False,
            show_histogram_plot=False,
            show_PP_plot=False
        )  # fit all distributions to the filtered samples
        ranked_distributions = list(fitted_results.results.index.values)
        ranked_distributions.remove(
            distribution.name2
        )  # removes the fitted version of the original distribution

        ranked_distributions_objects = []
        ranked_distributions_labels = []
        sigfig = 2
        for dist_name in ranked_distributions:
            if dist_name == 'Weibull_2P':
                ranked_distributions_objects.append(
                    Weibull_Distribution(alpha=fitted_results.Weibull_2P_alpha,
                                         beta=fitted_results.Weibull_2P_beta))
                ranked_distributions_labels.append(
                    str('Weibull_2P (α=' +
                        str(round(fitted_results.Weibull_2P_alpha, sigfig)) +
                        ',β=' +
                        str(round(fitted_results.Weibull_2P_beta, sigfig)) +
                        ')'))
            elif dist_name == 'Gamma_2P':
                ranked_distributions_objects.append(
                    Gamma_Distribution(alpha=fitted_results.Gamma_2P_alpha,
                                       beta=fitted_results.Gamma_2P_beta))
                ranked_distributions_labels.append(
                    str('Gamma_2P (α=' +
                        str(round(fitted_results.Gamma_2P_alpha, sigfig)) +
                        ',β=' +
                        str(round(fitted_results.Gamma_2P_beta, sigfig)) +
                        ')'))
            elif dist_name == 'Normal_2P':
                ranked_distributions_objects.append(
                    Normal_Distribution(mu=fitted_results.Normal_2P_mu,
                                        sigma=fitted_results.Normal_2P_sigma))
                ranked_distributions_labels.append(
                    str('Normal_2P (μ=' +
                        str(round(fitted_results.Normal_2P_mu, sigfig)) +
                        ',σ=' +
                        str(round(fitted_results.Normal_2P_sigma, sigfig)) +
                        ')'))
            elif dist_name == 'Lognormal_2P':
                ranked_distributions_objects.append(
                    Lognormal_Distribution(
                        mu=fitted_results.Lognormal_2P_mu,
                        sigma=fitted_results.Lognormal_2P_sigma))
                ranked_distributions_labels.append(
                    str('Lognormal_2P (μ=' +
                        str(round(fitted_results.Lognormal_2P_mu, sigfig)) +
                        ',σ=' +
                        str(round(fitted_results.Lognormal_2P_sigma, sigfig)) +
                        ')'))
            elif dist_name == 'Exponential_1P':
                ranked_distributions_objects.append(
                    Exponential_Distribution(
                        Lambda=fitted_results.Exponential_1P_lambda))
                ranked_distributions_labels.append(
                    str('Exponential_1P (lambda=' + str(
                        round(fitted_results.Exponential_1P_lambda, sigfig)) +
                        ')'))
            elif dist_name == 'Beta_2P':
                ranked_distributions_objects.append(
                    Beta_Distribution(alpha=fitted_results.Beta_2P_alpha,
                                      beta=fitted_results.Beta_2P_beta))
                ranked_distributions_labels.append(
                    str('Beta_2P (α=' +
                        str(round(fitted_results.Beta_2P_alpha, sigfig)) +
                        ',β=' +
                        str(round(fitted_results.Beta_2P_beta, sigfig)) + ')'))
            elif dist_name == 'Loglogistic_2P':
                ranked_distributions_objects.append(
                    Loglogistic_Distribution(
                        alpha=fitted_results.Loglogistic_2P_alpha,
                        beta=fitted_results.Loglogistic_2P_beta))
                ranked_distributions_labels.append(
                    str('Loglogistic_2P (α=' + str(
                        round(fitted_results.Loglogistic_2P_alpha, sigfig)) +
                        ',β=' +
                        str(round(fitted_results.Loglogistic_2P_beta,
                                  sigfig)) + ')'))
            elif dist_name == 'Gumbel_2P':
                ranked_distributions_objects.append(
                    Gumbel_Distribution(mu=fitted_results.Gumbel_2P_mu,
                                        sigma=fitted_results.Gumbel_2P_sigma))
                ranked_distributions_labels.append(
                    str('Gumbel_2P (μ=' +
                        str(round(fitted_results.Gumbel_2P_mu, sigfig)) +
                        ',σ=' +
                        str(round(fitted_results.Gumbel_2P_sigma, sigfig)) +
                        ')'))

            if include_location_shifted is True:
                if dist_name == 'Weibull_3P':
                    if fitted_results.Weibull_3P_gamma is not 0:
                        ranked_distributions_objects.append(
                            Weibull_Distribution(
                                alpha=fitted_results.Weibull_3P_alpha,
                                beta=fitted_results.Weibull_3P_beta,
                                gamma=fitted_results.Weibull_3P_gamma))
                        ranked_distributions_labels.append(
                            str('Weibull_3P (α=' + str(
                                round(fitted_results.Weibull_3P_alpha,
                                      sigfig)) + ',β=' + str(
                                          round(fitted_results.Weibull_3P_beta,
                                                sigfig)) + ',γ=' +
                                str(
                                    round(fitted_results.Weibull_3P_gamma,
                                          sigfig)) + ')'))
                elif dist_name == 'Gamma_3P':
                    if fitted_results.Gamma_3P_gamma is not 0:
                        ranked_distributions_objects.append(
                            Gamma_Distribution(
                                alpha=fitted_results.Gamma_3P_alpha,
                                beta=fitted_results.Gamma_3P_beta,
                                gamma=fitted_results.Gamma_3P_gamma))
                        ranked_distributions_labels.append(
                            str('Gamma_3P (α=' + str(
                                round(fitted_results.Gamma_3P_alpha, sigfig)) +
                                ',β=' +
                                str(round(fitted_results.Gamma_3P_beta,
                                          sigfig)) + ',γ=' +
                                str(
                                    round(fitted_results.Gamma_3P_gamma,
                                          sigfig)) + ')'))
                elif dist_name == 'Lognormal_3P':
                    if fitted_results.Lognormal_3P_gamma is not 0:
                        ranked_distributions_objects.append(
                            Lognormal_Distribution(
                                mu=fitted_results.Lognormal_3P_mu,
                                sigma=fitted_results.Lognormal_3P_sigma,
                                gamma=fitted_results.Lognormal_3P_gamma))
                        ranked_distributions_labels.append(
                            str('Lognormal_3P (μ=' + str(
                                round(fitted_results.Lognormal_3P_mu, sigfig))
                                + ',σ=' + str(
                                    round(fitted_results.Lognormal_3P_sigma,
                                          sigfig)) + ',γ=' +
                                str(
                                    round(fitted_results.Lognormal_3P_gamma,
                                          sigfig)) + ')'))
                elif dist_name == 'Exponential_2P':
                    if fitted_results.Exponential_2P_gamma is not 0:
                        ranked_distributions_objects.append(
                            Exponential_Distribution(
                                Lambda=fitted_results.Exponential_1P_lambda,
                                gamma=fitted_results.Exponential_2P_gamma))
                        ranked_distributions_labels.append(
                            str('Exponential_1P (lambda=' + str(
                                round(fitted_results.Exponential_1P_lambda,
                                      sigfig)) + ',γ=' +
                                str(
                                    round(fitted_results.Exponential_2P_gamma,
                                          sigfig)) + ')'))
                elif dist_name == 'Loglogistic_3P':
                    if fitted_results.Loglogistic_3P_gamma is not 0:
                        ranked_distributions_objects.append(
                            Loglogistic_Distribution(
                                alpha=fitted_results.Loglogistic_3P_alpha,
                                beta=fitted_results.Loglogistic_3P_beta,
                                gamma=fitted_results.Loglogistic_3P_gamma))
                        ranked_distributions_labels.append(
                            str('Loglogistic_3P (α=' + str(
                                round(fitted_results.Loglogistic_3P_alpha,
                                      sigfig)) + ',β=' +
                                str(
                                    round(fitted_results.Loglogistic_3P_beta,
                                          sigfig)) + ',γ=' +
                                str(
                                    round(fitted_results.Loglogistic_3P_gamma,
                                          sigfig)) + ')'))

        number_of_distributions_fitted = len(ranked_distributions_objects)
        self.results = ranked_distributions_objects
        self.most_similar_distribution = ranked_distributions_objects[0]
        if print_results is True:
            print('The input distribution was:')
            print(distribution.param_title_long)
            if number_of_distributions_fitted < number_of_distributions_to_show:
                number_of_distributions_to_show = number_of_distributions_fitted
            print('\nThe top', number_of_distributions_to_show,
                  'most similar distributions are:')
            counter = 0
            while counter < number_of_distributions_to_show and counter < number_of_distributions_fitted:
                dist = ranked_distributions_objects[counter]
                print(dist.param_title_long)
                counter += 1

        if show_plot is True:
            plt.figure(figsize=(14, 6))
            plt.suptitle(
                str('Plot of similar distributions to ' +
                    distribution.param_title_long))
            counter = 0
            xlower = distribution.quantile(0.001)
            xupper = distribution.quantile(0.999)
            x_delta = xupper - xlower
            plt.subplot(121)
            distribution.PDF(label=str('Input distribution [' +
                                       distribution.name2 + ']'),
                             linestyle='--')
            while counter < number_of_distributions_to_show and counter < number_of_distributions_fitted:
                ranked_distributions_objects[counter].PDF(
                    label=ranked_distributions_labels[counter])
                counter += 1
            plt.xlim([xlower - x_delta * 0.1, xupper + x_delta * 0.1])
            plt.legend()
            plt.title('PDF')
            counter = 0
            plt.subplot(122)
            distribution.CDF(label=str('Input distribution [' +
                                       distribution.name2 + ']'),
                             linestyle='--')
            while counter < number_of_distributions_to_show and counter < number_of_distributions_fitted:
                ranked_distributions_objects[counter].CDF(
                    label=ranked_distributions_labels[counter])
                counter += 1
            plt.xlim([xlower - x_delta * 0.1, xupper + x_delta * 0.1])
            plt.legend()
            plt.title('CDF')
            plt.subplots_adjust(left=0.08, right=0.95)
            plt.show()