[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/weijie-chen/Basic-Statistics-With-Python/main/plot_material.py [Back]  [Original]

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import scipy as sp
from scipy import stats


###############################################################################################################
###############################################################################################################
def reg_corr_plot():
    class LinearRegression:
        def __init__(self, beta1, beta2, error_scale, data_size):
            self.beta1 = beta1
            self.beta2 = beta2
            self.error_scale = error_scale
            self.x = np.random.randint(1, data_size, data_size)
            self.y = (
                self.beta1
                + self.beta2 * self.x
                + self.error_scale * np.random.randn(data_size)
            )

        def x_y_cor(self):
            return np.corrcoef(self.x, self.y)[0, 1]

    fig, ax = plt.subplots(nrows=2, ncols=4, figsize=(24, 12))

    beta1, beta2, error_scale, data_size = 2, 0.05, 1, 100
    lrg1 = LinearRegression(beta1, beta2, error_scale, data_size)
    ax[0, 0].scatter(lrg1.x, lrg1.y)
    ax[0, 0].plot(lrg1.x, beta1 + beta2 * lrg1.x, color="#FA954D", alpha=0.7)
    ax[0, 0].set_title(r"$Y={}+{}X+{}u$".format(beta1, beta2, error_scale))
    ax[0, 0].annotate(
        r"$\rho={:.4}$".format(lrg1.x_y_cor()), xy=(0.1, 0.9), xycoords="axes fraction"
    )

    beta1, beta2, error_scale, data_size = 2, -0.6, 1, 100
    lrg2 = LinearRegression(beta1, beta2, error_scale, data_size)
    ax[0, 1].scatter(lrg2.x, lrg2.y)
    ax[0, 1].plot(lrg2.x, 2 - 0.6 * lrg2.x, color="#FA954D", alpha=0.7)
    ax[0, 1].set_title(r"$Y={}+{}X+{}u$".format(beta1, beta2, error_scale))
    ax[0, 1].annotate(
        r"$\rho={:.4}$".format(lrg2.x_y_cor()), xy=(0.1, 0.9), xycoords="axes fraction"
    )

    beta1, beta2, error_scale, data_size = 2, 1, 1, 100
    lrg3 = LinearRegression(beta1, beta2, error_scale, data_size)
    ax[0, 2].scatter(lrg3.x, lrg3.y)
    ax[0, 2].plot(lrg3.x, beta1 + beta2 * lrg3.x, color="#FA954D", alpha=0.7)
    ax[0, 2].set_title(r"$Y={}+{}X+{}u$".format(beta1, beta2, error_scale))
    ax[0, 2].annotate(
        r"$\rho={:.4}$".format(lrg3.x_y_cor()), xy=(0.1, 0.9), xycoords="axes fraction"
    )

    beta1, beta2, error_scale, data_size = 2, 3, 1, 100
    lrg4 = LinearRegression(beta1, beta2, error_scale, data_size)
    ax[0, 3].scatter(lrg4.x, lrg4.y)
    ax[0, 3].plot(lrg4.x, beta1 + beta2 * lrg4.x, color="#FA954D", alpha=0.7)
    ax[0, 3].set_title(r"$Y={}+{}X+{}u$".format(beta1, beta2, error_scale))
    ax[0, 3].annotate(
        r"$\rho={:.4}$".format(lrg4.x_y_cor()), xy=(0.1, 0.9), xycoords="axes fraction"
    )

    beta1, beta2, error_scale, data_size = 2, 3, 3, 100
    lrg5 = LinearRegression(beta1, beta2, error_scale, data_size)
    ax[1, 0].scatter(lrg5.x, lrg5.y)
    ax[1, 0].plot(lrg5.x, beta1 + beta2 * lrg5.x, color="#FA954D", alpha=0.7)
    ax[1, 0].set_title(r"$Y={}+{}X+{}u$".format(beta1, beta2, error_scale))
    ax[1, 0].annotate(
        r"$\rho={:.4}$".format(lrg5.x_y_cor()), xy=(0.1, 0.9), xycoords="axes fraction"
    )

    beta1, beta2, error_scale, data_size = 2, 3, 10, 100
    lrg6 = LinearRegression(beta1, beta2, error_scale, data_size)
    ax[1, 1].scatter(lrg6.x, lrg6.y)
    ax[1, 1].plot(lrg6.x, beta1 + beta2 * lrg6.x, color="#FA954D", alpha=0.7)
    ax[1, 1].set_title(r"$Y={}+{}X+{}u$".format(beta1, beta2, error_scale))
    ax[1, 1].annotate(
        r"$\rho={:.4}$".format(lrg6.x_y_cor()), xy=(0.1, 0.9), xycoords="axes fraction"
    )

    beta1, beta2, error_scale, data_size = 2, 3, 20, 100
    lrg7 = LinearRegression(beta1, beta2, error_scale, data_size)
    ax[1, 2].scatter(lrg7.x, lrg7.y)
    ax[1, 2].plot(lrg7.x, beta1 + beta2 * lrg7.x, color="#FA954D", alpha=0.7)
    ax[1, 2].set_title(r"$Y={}+{}X+{}u$".format(beta1, beta2, error_scale))
    ax[1, 2].annotate(
        r"$\rho={:.4}$".format(lrg7.x_y_cor()), xy=(0.1, 0.9), xycoords="axes fraction"
    )

    beta1, beta2, error_scale, data_size = 2, 3, 50, 100
    lrg8 = LinearRegression(beta1, beta2, error_scale, data_size)
    ax[1, 3].scatter(lrg8.x, lrg8.y)
    ax[1, 3].plot(lrg3.x, beta1 + beta2 * lrg3.x, color="#FA954D", alpha=0.7)
    ax[1, 3].set_title(r"$Y={}+{}X+{}u$".format(beta1, beta2, error_scale))
    ax[1, 3].annotate(
        r"$\rho={:.4}$".format(lrg8.x_y_cor()), xy=(0.1, 0.9), xycoords="axes fraction"
    )


###############################################################################################################
###############################################################################################################


def central_limit_theorem_plot():
    fig, ax = plt.subplots(4, 3, figsize=(20, 20))

    ########################################################################################
    x = np.linspace(2, 8, 100)
    a = 2  # range of uniform distribution
    b = 8
    unif_pdf = np.ones(len(x)) * 1 / (b - a)

    ax[0, 0].plot(x, unif_pdf, lw=3, color="r")
    ax[0, 0].plot(
        [x[0], x[0]], [0, 1 / (b - a)], lw=3, color="r", alpha=0.9
    )  # vertical line
    ax[0, 0].plot([x[-1], x[-1]], [0, 1 / (b - a)], lw=3, color="r", alpha=0.9)
    ax[0, 0].fill_between(x, 1 / (b - a), 0, alpha=0.5, color="r")

    ax[0, 0].set_xlim([1, 9])
    ax[0, 0].set_ylim([0, 0.4])
    ax[0, 0].set_title("Uniform Distribution", size=18)
    ax[0, 0].set_ylabel("Population Distribution", size=12)

    ########################################################################################
    ss = 2  # sample size
    unif_sample_mean = np.zeros(1000)
    for i in range(1000):
        unif_sample = np.random.rand(ss)
        unif_sample_mean[i] = np.mean(unif_sample)
    ax[1, 0].hist(unif_sample_mean, bins=20, color="r", alpha=0.5)
    ax[1, 0].set_ylabel("Sample Distribution $n = 2$", size=12)
    ########################################################################################
    ss = 10  # sample size
    unif_sample_mean = np.zeros(1000)
    for i in range(1000):
        unif_sample = np.random.rand(ss)
        unif_sample_mean[i] = np.mean(unif_sample)
    ax[2, 0].hist(unif_sample_mean, bins=30, color="r", alpha=0.5)
    ax[2, 0].set_ylabel("Sample Distribution, $n = 10$", size=12)

    ########################################################################################
    ss = 1000  # sample size
    unif_sample_mean = np.zeros(1000)
    for i in range(1000):
        unif_sample = np.random.rand(ss)
        unif_sample_mean[i] = np.mean(unif_sample)
    ax[3, 0].hist(unif_sample_mean, bins=40, color="r", alpha=0.5)
    ax[3, 0].set_ylabel("Sample Distribution, $n = 1000$", size=12)

    ########################################################################################
    a = 6
    b = 2
    x = np.linspace(0, 1, 100)
    beta_pdf = sp.stats.beta.pdf(x, a, b)
    ax[0, 1].plot(x, beta_pdf, lw=3, color="g")
    ax[0, 1].set_ylim([0, 6])
    ax[0, 1].fill_between(x, beta_pdf, 0, alpha=0.5, color="g")
    ax[0, 1].set_title("Beta Distribution", size=18)
    ########################################################################################

    ss = 2  # sample size
    beta_sample_mean = np.zeros(1000)
    for i in range(1000):
        beta_sample = sp.stats.beta.rvs(a, b, size=ss)
        beta_sample_mean[i] = np.mean(beta_sample)
    ax[1, 1].hist(beta_sample_mean, color="g", alpha=0.5)

    ########################################################################################

    ss = 10  # sample size
    beta_sample_mean = np.zeros(1000)
    for i in range(1000):
        beta_sample = sp.stats.beta.rvs(a, b, size=ss)
        beta_sample_mean[i] = np.mean(beta_sample)
    ax[2, 1].hist(beta_sample_mean, color="g", bins=20, alpha=0.5)

    ########################################################################################

    ss = 100000  # sample size
    beta_sample_mean = np.zeros(1000)
    for i in range(1000):
        beta_sample = sp.stats.beta.rvs(a, b, size=ss)
        beta_sample_mean[i] = np.mean(beta_sample)
    ax[3, 1].hist(beta_sample_mean, color="g", bins=30, alpha=0.5)

    ########################################################################################
    a = 6
    x = np.linspace(0, 25, 100)

    gamma_pdf = sp.stats.gamma.pdf(x, a)
    ax[0, 2].plot(x, gamma_pdf, lw=3, color="b")
    ax[0, 2].set_ylim([0, 0.34])
    ax[0, 2].fill_between(x, gamma_pdf, 0, alpha=0.5, color="b")
    ax[0, 2].set_title("Gamma Distribution", size=18)

    ########################################################################################
    ss = 2  # sample size
    gamma_sample_mean = np.zeros(1000)
    for i in range(1000):
        gamma_sample = sp.stats.gamma.rvs(a, size=ss)
        gamma_sample_mean[i] = np.mean(gamma_sample)
    ax[1, 2].hist(gamma_sample_mean, color="b", alpha=0.5)

    ########################################################################################
    ss = 10  # sample size
    gamma_sample_mean = np.zeros(1000)
    for i in range(1000):
        gamma_sample = sp.stats.gamma.rvs(a, size=ss)
        gamma_sample_mean[i] = np.mean(gamma_sample)
    ax[2, 2].hist(gamma_sample_mean, bins=20, color="b", alpha=0.5)
    ########################################################################################
    ss = 1000  # sample size
    gamma_sample_mean = np.zeros(1000)
    for i in range(1000):
        gamma_sample = sp.stats.gamma.rvs(a, size=ss)
        gamma_sample_mean[i] = np.mean(gamma_sample)
    ax[3, 2].hist(gamma_sample_mean, bins=30, color="b", alpha=0.5)
    ########################################################################################
    plt.show()


##########################################################################################################
##########################################################################################################
def type12_error():
    x = np.linspace(-6, 9, 200)
    null_loc, alter_loc = 0, 3
    y_null = sp.stats.norm.pdf(x, loc=null_loc)
    y_alter = sp.stats.norm.pdf(x, loc=alter_loc)
    fig, ax = plt.subplots(figsize=(18, 6))
    ax.plot(x, y_null, x, y_alter)
    ax.annotate("Null", (null_loc - 0.2, max(y_null) / 2), size=15)
    ax.annotate("Alternative", (alter_loc - 0.6, max(y_alter) / 2), size=15)
    ax.annotate("Type I Error", (2, max(y_alter) / 30), size=15)
    ax.annotate("Type II Error", (0, max(y_alter) / 30), size=15)
    ax.fill_between(x[-98:], y_null[-98:])
    ax.fill_between(x[:103], y_alter[:103])
    ax.set_ylim([0, 0.5])
    plt.show()


##########################################################################################################
##########################################################################################################
# def reject_region():
#     data = pd.read_csv('500_Person_Gender_Height_Weight_Index.csv')

#     male_mean = data[data['Gender']=='Male']['Height'].mean()
#     male_std = data[data['Gender']=='Male']['Height'].std(ddof=1)
#     male_std_error = male_std/np.sqrt(len(data[data['Gender']=='Male']))
#     male_null = 172

#     df = len(data[data['Gender']=='Male'])-1
#     t_975 = sp.stats.t.ppf(.975, df=df)
#     t_025 = sp.stats.t.ppf(.025, df=df)

#     x = np.linspace(male_null-5, male_null+5, 200)
#     df = len(data[data['Gender']=='Male'])-1
#     y_t = sp.stats.t.pdf(x, df = df, loc = male_null)

#     fig, ax = plt.subplots(2, 1, figsize = (18,8))

#     ax[0].plot(x, y_t, color = 'tomato', lw = 3)

#     rejection_lower = male_null - t_975*male_std_error
#     x_rej_lower = np.linspace(rejection_lower-3, rejection_lower, 30)
#     y_rej_lower = sp.stats.t.pdf(x_rej_lower, df = df, loc = male_null)
#     ax[0].fill_between(x_rej_lower, y_rej_lower, color = 'tomato', alpha = .7)

#     rejection_upper = male_null + t_975*male_std_error
#     x_rej_upper = np.linspace(rejection_upper, rejection_upper+3, 30)
#     y_rej_upper = sp.stats.t.pdf(x_rej_upper, df = df, loc = male_null)
#     ax[0].fill_between(x_rej_upper, y_rej_upper, color = 'tomato', alpha = .7)

#     ax[0].set_ylim([0, .45])

#     x = np.linspace(-5, 5, 200)
#     y_t = sp.stats.t.pdf(x, df = df, loc = 0)

#     ax[1].plot(x, y_t, color = 'tomato', lw = 3)

#     x_rej_lower = np.linspace(t_025-3, t_025, 30)
#     y_rej_lower = sp.stats.t.pdf(x_rej_lower, df = df)
#     ax[1].fill_between(x_rej_lower, y_rej_lower, color = 'tomato', alpha = .7)

#     x_rej_lower = np.linspace(t_975+3, t_975, 30)
#     y_rej_lower = sp.stats.t.pdf(x_rej_lower, df = df)
#     ax[1].fill_between(x_rej_lower, y_rej_lower, color = 'tomato', alpha = .7)

#     ax[1].set_ylim([0, .45])

#     plt.show()

##########################################################################################################
# ##########################################################################################################
# def draw_something():
#     x = np.linspace(0, 10, 100)
#     y = np.sin(x)
#     plt.plot(x, y)


##########################################################################################################
##########################################################################################################
def anova_plot():
    def gen_3samples(loc1, loc2, loc3, scale1, scale2, scale3, size1, size2, size3):
        F_statistic, p_value = [], []
        for i in range(1000):
            a = sp.stats.norm.rvs(loc1, scale1, size1)
            b = sp.stats.norm.rvs(loc2, scale2, size3)
            c = sp.stats.norm.rvs(loc3, scale3, size3)
            F, p = sp.stats.f_oneway(a, b, c)
            F_statistic.append(F)
            p_value.append(p)
        return F_statistic, p_value

    fig, ax = plt.subplots(nrows=6, ncols=3, figsize=(17, 34))

    mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3 = [
        3,
        6,
        9,
        6,
        6,
        6,
        10,
        20,
        30,
    ]
    params = [mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3]
    F_statistic, p_value = gen_3samples(*params)
    n, bins, patches = ax[0, 0].hist(F_statistic, bins=50)
    F_critical = sp.stats.f.ppf(0.95, 2, size1 + size2 + size3 - 3)
    textstr = "\n".join(
        (
            "$\mu_1, \mu_2, \mu_3 = {}, {}, {}$".format(mu1, mu2, mu3),
            "$\sigma_1, \sigma_2, \sigma_3 = {}, {}, {}$".format(sig1, sig2, sig3),
            "$n_1, n_2, n_3 = {}, {}, {}$".format(size1, size2, size3),
            r"$F_c = {:.4f}$".format(F_critical),
        )
    )
    props = dict(boxstyle="round", facecolor="wheat", alpha=0.5)
    ax[0, 0].text(
        max(bins) / 2,
        max(n) / 2,
        textstr,
        fontsize=10,
        verticalalignment="top",
        bbox=props,
    )
    ax[0, 0].set_title("Simulation 1")
    ax[0, 0].vlines(F_critical, 0, max(n) * 1.1, color="r")
    ax[1, 0].hist(p_value, bins=50)

    mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3 = [
        3,
        3.1,
        2.9,
        6,
        6,
        6,
        10,
        20,
        30,
    ]
    params = [mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3]
    F_statistic, p_value = gen_3samples(*params)
    n, bins, patches = ax[0, 1].hist(F_statistic, bins=50)
    F_critical = sp.stats.f.ppf(0.95, 2, size1 + size2 + size3 - 3)
    textstr = "\n".join(
        (
            "$\mu_1, \mu_2, \mu_3 = {}, {}, {}$".format(mu1, mu2, mu3),
            "$\sigma_1, \sigma_2, \sigma_3 = {}, {}, {}$".format(sig1, sig2, sig3),
            "$n_1, n_2, n_3 = {}, {}, {}$".format(size1, size2, size3),
            r"$F_c = {:.4f}$".format(F_critical),
        )
    )
    props = dict(boxstyle="round", facecolor="wheat", alpha=0.5)
    ax[0, 1].text(
        max(bins) / 2,
        max(n) / 2,
        textstr,
        fontsize=10,
        verticalalignment="top",
        bbox=props,
    )
    ax[0, 1].vlines(F_critical, 0, max(n) * 1.1, color="r")
    ax[1, 1].hist(p_value, bins=50)
    ax[0, 1].set_title("Simulation 2")

    mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3 = [
        3,
        3.1,
        2.9,
        6,
        12,
        18,
        10,
        20,
        30,
    ]
    params = [mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3]
    F_statistic, p_value = gen_3samples(*params)
    n, bins, patches = ax[0, 2].hist(F_statistic, bins=50)
    F_critical = sp.stats.f.ppf(0.95, 2, size1 + size2 + size3 - 3)
    textstr = "\n".join(
        (
            "$\mu_1, \mu_2, \mu_3 = {}, {}, {}$".format(mu1, mu2, mu3),
            "$\sigma_1, \sigma_2, \sigma_3 = {}, {}, {}$".format(sig1, sig2, sig3),
            "$n_1, n_2, n_3 = {}, {}, {}$".format(size1, size2, size3),
            r"$F_c = {:.4f}$".format(F_critical),
        )
    )
    props = dict(boxstyle="round", facecolor="wheat", alpha=0.5)
    ax[0, 2].text(
        max(bins) / 2,
        max(n) / 2,
        textstr,
        fontsize=10,
        verticalalignment="top",
        bbox=props,
    )
    ax[0, 2].vlines(F_critical, 0, max(n) * 1.1, color="r")
    ax[1, 2].hist(p_value, bins=50)
    ax[0, 2].set_title("Simulation 3")

    mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3 = [
        3,
        6,
        9,
        10,
        10,
        10,
        10,
        20,
        30,
    ]
    params = [mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3]
    F_statistic, p_value = gen_3samples(*params)
    n, bins, patches = ax[2, 0].hist(F_statistic, bins=50)
    F_critical = sp.stats.f.ppf(0.95, 2, size1 + size2 + size3 - 3)
    textstr = "\n".join(
        (
            "$\mu_1, \mu_2, \mu_3 = {}, {}, {}$".format(mu1, mu2, mu3),
            "$\sigma_1, \sigma_2, \sigma_3 = {}, {}, {}$".format(sig1, sig2, sig3),
            "$n_1, n_2, n_3 = {}, {}, {}$".format(size1, size2, size3),
            r"$F_c = {:.4f}$".format(F_critical),
        )
    )
    props = dict(boxstyle="round", facecolor="wheat", alpha=0.5)
    ax[2, 0].text(
        max(bins) / 2,
        max(n) / 2,
        textstr,
        fontsize=10,
        verticalalignment="top",
        bbox=props,
    )
    ax[2, 0].vlines(F_critical, 0, max(n) * 1.1, color="r")
    ax[3, 0].hist(p_value, bins=50)
    ax[2, 0].set_title("Simulation 4")

    mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3 = [
        3,
        5,
        6,
        10,
        10,
        10,
        10,
        10,
        10,
    ]
    params = [mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3]
    F_statistic, p_value = gen_3samples(*params)
    n, bins, patches = ax[2, 1].hist(F_statistic, bins=50)
    F_critical = sp.stats.f.ppf(0.95, 2, size1 + size2 + size3 - 3)
    textstr = "\n".join(
        (
            "$\mu_1, \mu_2, \mu_3 = {}, {}, {}$".format(mu1, mu2, mu3),
            "$\sigma_1, \sigma_2, \sigma_3 = {}, {}, {}$".format(sig1, sig2, sig3),
            "$n_1, n_2, n_3 = {}, {}, {}$".format(size1, size2, size3),
            r"$F_c = {:.4f}$".format(F_critical),
        )
    )
    props = dict(boxstyle="round", facecolor="wheat", alpha=0.5)
    ax[2, 1].text(
        max(bins) / 2,
        max(n) / 2,
        textstr,
        fontsize=10,
        verticalalignment="top",
        bbox=props,
    )
    ax[2, 1].vlines(F_critical, 0, max(n) * 1.1, color="r")
    ax[3, 1].hist(p_value, bins=50)
    ax[2, 1].set_title("Simulation 5")

    mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3 = [
        3,
        5,
        6,
        10,
        10,
        10,
        5000,
        5000,
        5000,
    ]
    params = [mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3]
    F_statistic, p_value = gen_3samples(*params)
    n, bins, patches = ax[2, 2].hist(F_statistic, bins=50)
    F_critical = sp.stats.f.ppf(0.95, 2, size1 + size2 + size3 - 3)
    textstr = "\n".join(
        (
            "$\mu_1, \mu_2, \mu_3 = {}, {}, {}$".format(mu1, mu2, mu3),
            "$\sigma_1, \sigma_2, \sigma_3 = {}, {}, {}$".format(sig1, sig2, sig3),
            "$n_1, n_2, n_3 = {}, {}, {}$".format(size1, size2, size3),
            r"$F_c = {:.4f}$".format(F_critical),
        )
    )
    props = dict(boxstyle="round", facecolor="wheat", alpha=0.5)
    ax[2, 2].text(
        max(bins) / 2,
        max(n) / 2,
        textstr,
        fontsize=10,
        verticalalignment="top",
        bbox=props,
    )
    ax[2, 2].vlines(F_critical, 0, max(n) * 1.1, color="r")
    ax[3, 2].hist(p_value, bins=50)
    ax[2, 2].set_title("Simulation 6")

    mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3 = [
        3,
        3,
        3,
        100,
        100,
        100,
        10,
        10,
        10,
    ]
    params = [mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3]
    F_statistic, p_value = gen_3samples(*params)
    n, bins, patches = ax[4, 0].hist(F_statistic, bins=50)
    F_critical = sp.stats.f.ppf(0.95, 2, size1 + size2 + size3 - 3)
    textstr = "\n".join(
        (
            "$\mu_1, \mu_2, \mu_3 = {}, {}, {}$".format(mu1, mu2, mu3),
            "$\sigma_1, \sigma_2, \sigma_3 = {}, {}, {}$".format(sig1, sig2, sig3),
            "$n_1, n_2, n_3 = {}, {}, {}$".format(size1, size2, size3),
            r"$F_c = {:.4f}$".format(F_critical),
        )
    )
    props = dict(boxstyle="round", facecolor="wheat", alpha=0.5)
    ax[4, 0].text(
        max(bins) / 2,
        max(n) / 2,
        textstr,
        fontsize=10,
        verticalalignment="top",
        bbox=props,
    )
    ax[4, 0].vlines(F_critical, 0, max(n) * 1.1, color="r")
    ax[5, 0].hist(p_value, bins=50)
    ax[4, 0].set_title("Simulation 7")

    mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3 = [
        3,
        3,
        3,
        1,
        1,
        2,
        10,
        20,
        30,
    ]
    params = [mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3]
    F_statistic, p_value = gen_3samples(*params)
    n, bins, patches = ax[4, 1].hist(F_statistic, bins=50)
    F_critical = sp.stats.f.ppf(0.95, 2, size1 + size2 + size3 - 3)
    textstr = "\n".join(
        (
            "$\mu_1, \mu_2, \mu_3 = {}, {}, {}$".format(mu1, mu2, mu3),
            "$\sigma_1, \sigma_2, \sigma_3 = {}, {}, {}$".format(sig1, sig2, sig3),
            "$n_1, n_2, n_3 = {}, {}, {}$".format(size1, size2, size3),
            r"$F_c = {:.4f}$".format(F_critical),
        )
    )
    props = dict(boxstyle="round", facecolor="wheat", alpha=0.5)
    ax[4, 1].text(
        max(bins) / 2,
        max(n) / 2,
        textstr,
        fontsize=10,
        verticalalignment="top",
        bbox=props,
    )
    ax[4, 1].vlines(F_critical, 0, max(n) * 1.1, color="r")
    ax[5, 1].hist(p_value, bins=50)
    ax[4, 1].set_title("Simulation 8")

    params = [3, 3.1, 2.9, 0.01, 0.01, 0.01, 10, 20, 30]
    mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3 = [
        3,
        3,
        3,
        1,
        1,
        2,
        10,
        20,
        30,
    ]
    params = [mu1, mu2, mu3, sig1, sig2, sig3, size1, size2, size3]
    F_statistic, p_value = gen_3samples(*params)
    n, bins, patches = ax[4, 2].hist(F_statistic, bins=50)
    F_critical = sp.stats.f.ppf(0.95, 2, size1 + size2 + size3 - 3)
    textstr = "\n".join(
        (
            "$\mu_1, \mu_2, \mu_3 = {}, {}, {}$".format(mu1, mu2, mu3),
            "$\sigma_1, \sigma_2, \sigma_3 = {}, {}, {}$".format(sig1, sig2, sig3),
            "$n_1, n_2, n_3 = {}, {}, {}$".format(size1, size2, size3),
            r"$F_c = {:.4f}$".format(F_critical),
        )
    )
    props = dict(boxstyle="round", facecolor="wheat", alpha=0.5)
    ax[4, 2].text(
        max(bins) / 2,
        max(n) / 2,
        textstr,
        fontsize=10,
        verticalalignment="top",
        bbox=props,
    )
    ax[4, 2].vlines(F_critical, 0, max(n) * 1.1, color="r")
    ax[5, 2].hist(p_value, bins=50)
    ax[4, 2].set_title("Simulation 9")

    #######################||Rectangle||##########################
    ##############################################################

    rect = plt.Rectangle(
        # (lower-left corner), width, height
        (0.10, 0.633),
        0.2645,
        0.258,
        fill=False,
        color="k",
        lw=2,
        zorder=1000,
        transform=fig.transFigure,
        figure=fig,
    )
    fig.patches.extend([rect])

    rect = plt.Rectangle(
        # (lower-left corner), width, height
        (0.3755, 0.633),
        0.2645,
        0.258,
        fill=False,
        color="k",
        lw=2,
        zorder=1000,
        transform=fig.transFigure,
        figure=fig,
    )
    fig.patches.extend([rect])

    rect = plt.Rectangle(
        # (lower-left corner), width, height
        (0.650, 0.633),
        0.2645,
        0.258,
        fill=False,
        color="k",
        lw=2,
        zorder=1000,
        transform=fig.transFigure,
        figure=fig,
    )
    fig.patches.extend([rect])

    rect = plt.Rectangle(
        # (lower-left corner), width, height
        (0.10, 0.37),
        0.2645,
        0.258,
        fill=False,
        color="k",
        lw=2,
        zorder=1000,
        transform=fig.transFigure,
        figure=fig,
    )
    fig.patches.extend([rect])

    rect = plt.Rectangle(
        # (lower-left corner), width, height
        (0.3755, 0.37),
        0.2645,
        0.258,
        fill=False,
        color="k",
        lw=2,
        zorder=1000,
        transform=fig.transFigure,
        figure=fig,
    )
    fig.patches.extend([rect])

    rect = plt.Rectangle(
        # (lower-left corner), width, height
        (0.650, 0.37),
        0.2645,
        0.258,
        fill=False,
        color="k",
        lw=2,
        zorder=1000,
        transform=fig.transFigure,
        figure=fig,
    )
    fig.patches.extend([rect])

    rect = plt.Rectangle(
        # (lower-left corner), width, height
        (0.650, 0.108),
        0.2645,
        0.258,
        fill=False,
        color="k",
        lw=2,
        zorder=1000,
        transform=fig.transFigure,
        figure=fig,
    )
    fig.patches.extend([rect])

    rect = plt.Rectangle(
        # (lower-left corner), width, height
        (0.3755, 0.108),
        0.2645,
        0.258,
        fill=False,
        color="k",
        lw=2,
        zorder=1000,
        transform=fig.transFigure,
        figure=fig,
    )
    fig.patches.extend([rect])

    rect = plt.Rectangle(
        # (lower-left corner), width, height
        (0.1, 0.108),
        0.2645,
        0.258,
        fill=False,
        color="k",
        lw=2,
        zorder=1000,
        transform=fig.transFigure,
        figure=fig,
    )
    fig.patches.extend([rect])
    ####################################################################

    plt.show()


###############################################################################################
###############################################################################################
def two_tail_rej_region_demo():
    data = pd.read_csv("500_Person_Gender_Height_Weight_Index.csv")

    df = len(data[data["Gender"] == "Male"]) - 1
    t_975 = sp.stats.t.ppf(0.975, df=df)
    t_025 = sp.stats.t.ppf(0.025, df=df)

    male_mean = data[data["Gender"] == "Male"]["Height"].mean()
    male_std = data[data["Gender"] == "Male"]["Height"].std(ddof=1)
    male_std_error = male_std / np.sqrt(len(data[data["Gender"] == "Male"]))
    male_null = 172

    x = np.linspace(male_null - 5, male_null + 5, 200)

    y_t = sp.stats.t.pdf(x, df=df, loc=male_null)

    fig, ax = plt.subplots(2, 1, figsize=(18, 8))

    ax[0].plot(x, y_t, color="tomato", lw=3)

    rejection_lower = male_null - t_975 * male_std_error
    x_rej_lower = np.linspace(rejection_lower - 3, rejection_lower, 30)
    y_rej_lower = sp.stats.t.pdf(x_rej_lower, df=df, loc=male_null)
    ax[0].fill_between(x_rej_lower, y_rej_lower, color="tomato", alpha=0.7)

    rejection_upper = male_null + t_975 * male_std_error
    x_rej_upper = np.linspace(rejection_upper, rejection_upper + 3, 30)
    y_rej_upper = sp.stats.t.pdf(x_rej_upper, df=df, loc=male_null)
    ax[0].fill_between(x_rej_upper, y_rej_upper, color="tomato", alpha=0.7)
    ax[0].set_ylim([0, 0.45])
    ax[0].set_title("Rejection Region of Original Unit (cm)")

    x = np.linspace(-5, 5, 200)
    y_t = sp.stats.t.pdf(x, df=df, loc=0)

    ax[1].plot(x, y_t, color="tomato", lw=3)

    x_rej_lower = np.linspace(t_025 - 3, t_025, 30)
    y_rej_lower = sp.stats.t.pdf(x_rej_lower, df=df)
    ax[1].fill_between(x_rej_lower, y_rej_lower, color="tomato", alpha=0.7)

    x_rej_lower = np.linspace(t_975 + 3, t_975, 30)
    y_rej_lower = sp.stats.t.pdf(x_rej_lower, df=df)
    ax[1].fill_between(x_rej_lower, y_rej_lower, color="tomato", alpha=0.7)
    ax[1].set_ylim([0, 0.45])
    ax[1].set_title("Rejection Region of t-statistic")

    plt.show()


###############################################################################################
###############################################################################################
def one_tail_rej_region_demo():
    fig, ax = plt.subplots(2, 1, figsize=(18, 8))
    x = np.linspace(-5, 5, 200)
    y_t = sp.stats.t.pdf(x, df=len(x), loc=0)
    ax[0].plot(x, y_t, color="tomato")

    ax[0].annotate("$H_0: \mu = \mu_0$\n$H_1: \mu < \mu_0$", (-5, 0.35), size=16)
    t_05 = sp.stats.t.ppf(0.05, df=len(x))
    x_rej_lower = np.linspace(t_05, t_05 - 3, 30)
    y_rej_lower = sp.stats.t.pdf(x_rej_lower, df=len(x))
    ax[0].fill_between(x_rej_lower, y_rej_lower, color="tomato", alpha=0.7)
    ax[0].set_ylim([0, 0.45])

    x = np.linspace(-5, 5, 200)
    y_t = sp.stats.t.pdf(x, df=len(x), loc=0)
    ax[1].plot(x, y_t, color="tomato")

    ax[1].annotate("$H_0: \mu = \mu_0$\n$H_1: \mu > \mu_0$", (4, 0.35), size=16)
    t_95 = sp.stats.t.ppf(0.95, df=len(x))
    x_rej_lower = np.linspace(t_95, t_95 + 3, 30)
    y_rej_lower = sp.stats.t.pdf(x_rej_lower, df=len(x))
    ax[1].fill_between(x_rej_lower, y_rej_lower, color="tomato", alpha=0.7)
    ax[1].set_ylim([0, 0.45])

    plt.show()

Web Proxy Viewer  |  New URL  |  Original Page