• T检验两个函数stats.t.cdf和stats.t.sf(左尾/右尾T检验)


    左右T检验都是用于比较两组数据之间的差异,但它们的应用场景和假设略有不同。

    1. 左尾T检验(One-tailed T-test)用于检查一个样本是否显著地小于另一个样本。它的零假设是一个样本的平均值小于或等于另一个样本的平均值。

    2. 右尾T检验(One-tailed T-test)则用于检查一个样本是否显著地大于另一个样本。它的零假设是一个样本的平均值大于或等于另一个样本的平均值。

    如果你想查看两组数据之间是否存在任何显著的差异,而不限定于是大还是小,你应该使用双尾T检验(Two-tailed T-test)。

    stats.t.sf 是Scipy库中用于计算学生t分布的生存函数(Survival Function)的函数。生存函数是一个概率密度函数的补函数,它表示随机变量大于某个值的概率。具体来说,stats.t.sf(x, df) 计算了自由度为 df 的t分布中,随机变量大于 x 的概率。

    stats.t.cdf 是Scipy库中用于计算学生t分布的累积分布函数(Cumulative Distribution Function)的函数。累积分布函数给出了随机变量小于或等于某个值的概率。具体来说,stats.t.cdf(x, df) 计算了自由度为 df 的t分布中,随机变量小于或等于 x 的概率。

    在下列代码中,我们首先生成了两组示例数据。然后使用 stats.ttest_ind 执行了独立样本的T检验,得到了t统计量和p值。接下来,我们计算了自由度,并使用 stats.t.cdf 计算了t统计量在t分布中的位置。最后,我们使用 stats.t.sf 计算了右尾的p值。

    1. import numpy as np
    2. import scipy.stats as stats
    3. # 生成示例数据
    4. group1 = np.random.normal(5, 2, 30) # 第一组数据
    5. group2 = np.random.normal(6, 2, 30) # 第二组数据
    6. # 执行独立样本T检验
    7. t_stat, p_value = stats.ttest_ind(group1, group2)
    8. # 计算自由度
    9. df = len(group1) + len(group2) - 2
    10. # 计算t统计量在t分布中的位置
    11. # stats.t.cdf(x, df) 计算了自由度为 df 的t分布中,随机变量小于或等于 x 的概率
    12. t_cdf = stats.t.cdf(t_stat, df)
    13. # 计算t统计量右侧的概率(p-value)
    14. # stats.t.sf(x, df) 计算了自由度为 df 的t分布中,随机变量大于 x 的概率。
    15. p_right = stats.t.sf(t_stat, df)
    16. # 输出结果
    17. print(f"独立样本T检验结果:t_stat = {t_stat}, p_value = {p_value}")
    18. print(f"t统计量在t分布中的位置 (CDF):{t_cdf}")
    19. print(f"p-value (右尾):{p_right}")
    20. # 独立样本T检验结果:t_stat = -3.9177011382620153, p_value = 0.0002382448506984628
    21. # t统计量在t分布中的位置 (CDF):0.0001191224253492314
    22. # p-value (右尾):0.9998808775746508

    -----------
    我们首先生成了两组示例数据(group1group2)。然后,分别执行了左尾和右尾T检验,并打印了检验的结果。最后,通过Matplotlib库绘制了两组数据的直方图,以便直观地比较它们的分布。

    1. import numpy as np
    2. import scipy.stats as stats
    3. import matplotlib.pyplot as plt
    4. # 生成示例数据
    5. group1 = np.random.normal(5, 2, 30) # 第一组数据
    6. group2 = np.random.normal(6, 2, 30) # 第二组数据
    7. # 执行左尾T检验
    8. t_stat_left, p_value_left = stats.ttest_ind(group1, group2, alternative='less')
    9. # 执行右尾T检验
    10. t_stat_right, p_value_right = stats.ttest_ind(group1, group2, alternative='greater')
    11. # 打印结果
    12. print(f"左尾T检验结果:t_stat = {t_stat_left}, p_value = {p_value_left}")
    13. print(f"右尾T检验结果:t_stat = {t_stat_right}, p_value = {p_value_right}")
    14. # 绘制两组数据的直方图
    15. plt.hist(group1, alpha=0.5, label='Group 1', color='blue')
    16. plt.hist(group2, alpha=0.5, label='Group 2', color='green')
    17. plt.legend(loc='upper right')
    18. plt.title('Histogram of Group 1 and Group 2')
    19. plt.show()

    ----------
    在这个示例中,我们首先设置了自由度为10,然后生成了一系列x值,计算了自由度为10的T分布的概率密度函数。最后,使用Matplotlib绘制了T分布的曲线图。

    1. import numpy as np
    2. import matplotlib.pyplot as plt
    3. import scipy.stats as stats
    4. plt.rcParams['font.sans-serif'] = ['SimHei'] # 防止中文标签乱码
    5. plt.rcParams['axes.unicode_minus'] = False
    6. # 设定自由度
    7. df = 10
    8. # 生成x值范围
    9. # np.linspace 是NumPy库中用于创建等间隔的一维数组的函数
    10. x = np.linspace(-4, 4, 1000)
    11. # 计算T分布的概率密度函数
    12. pdf = stats.t.pdf(x, df)
    13. # 绘制T分布曲线图
    14. plt.plot(x, pdf, label=f'T分布 (df={df})', color='blue')
    15. plt.xlabel('x')
    16. plt.ylabel('Probability Density')
    17. plt.title(f'T分布 (df={df})')
    18. plt.legend()
    19. plt.show()

  • 相关阅读:
    如何看待猎聘发布:2023 年应届生平均招聘月薪10342元
    无人驾驶技术有什么优点,人工驾驶的优缺点英文
    C++标准库算法整理
    痞子衡嵌入式:在i.MXRT启动头FDCB里使能串行NOR Flash的QPI/OPI模式
    HTTP 状态码
    JOSEF约瑟 多档切换式漏电(剩余)继电器JHOK-ZBL1 30/100/300/500mA
    【ASM】字节码操作 工具类与常用类 InstructionAdapter 介绍
    想加一个当信用分低于50分时
    python包引用方式总结
    聚名企服教您如何避免DNS劫持攻击?避免DNS劫持攻击方法有哪些
  • 原文地址:https://blog.csdn.net/book_dw5189/article/details/133447125