• 利用norm.ppf&norm.interval分别计算正态置信区间[实例]


    scipy.stats.norm.ppf用于计算正态分布的累积分布函数CDF的逆函数,也称为百分位点函数。它的作用是根据给定的概率值,计算对应的随机变量值。
    scipy.stats.norm.interval是用于计算正态分布的置信区间的函数。这个函数的主要目的是根据给定的置信水平、均值和标准差,计算正态分布的置信区间的下限和上限。
    scipy.stats.t.interval:用于计算t分布的置信区间,可选择使用不同的置信水平和自由度。

     利用norm.ppf&norm.interval分别计算正态置信区间:

    1. import scipy.stats as stats
    2. import numpy as np
    3. # 指定概率值(例如,95% 置信水平对应的概率)
    4. alpha = 0.05
    5. # 指定样本数据和样本大小
    6. # data = [32, 34, 36, 35, 33, 31, 32, 33, 30, 34]
    7. data = [34,56,39,71,84,92,44,67,98,49,55,73,50,62,75,44,88,53,61,25,36,66,77,35]
    8. sample_size = len(data)
    9. # 执行D'Agostino's K-squared检验
    10. stat, p_value = stats.normaltest(data)
    11. # 输出结果
    12. print("-------------------")
    13. print("K-squared正态检验统计量:", stat)
    14. print("K-squared正态检验P-value:", p_value)
    15. # 判断是否符合正态分布的零假设
    16. alpha = 0.05 # 显著性水平
    17. if p_value < alpha:
    18. print("拒绝零假设,数据不符合正态分布。")
    19. else:
    20. print("p_value>0.05无法拒绝零假设,数据符合正态分布。")
    21. print("-------------------")
    22. # 计算样本均值和标准误差(标准差除以样本大小的平方根)
    23. sample_mean = sum(data) / sample_size
    24. # sample_std这是样本数据的标准差,表示数据点在均值周围的离散程度。
    25. sample_std = (sum([(x - sample_mean) ** 2 for x in data]) / (sample_size - 1)) ** 0.5
    26. # standard_error标准误差是样本均值的标准差,用于衡量均值估计的不确定性。它是标准差除以样本大小的平方根,表示均值估计的误差范围。
    27. standard_error = sample_std / (sample_size ** 0.5)
    28. # 使用百分位点函数计算置信区间的上下限
    29. confidence_interval_lower = stats.norm.ppf(alpha / 2, loc=sample_mean, scale=standard_error)
    30. confidence_interval_upper = stats.norm.ppf(1 - alpha / 2, loc=sample_mean, scale=standard_error)
    31. # 输出置信区间的上下限
    32. print("置信区间的下限:", confidence_interval_lower)
    33. print("置信区间的上限:", confidence_interval_upper)
    34. print("-------------------")
    35. # 计算正态分布的置信区间
    36. # 对于scipy.stats.norm.interval函数,它使用标准差(scale参数)而不是标准误差来计算正态分布的置信区间
    37. confidence_interval = stats.norm.interval(1 - alpha, loc=sample_mean, scale=sample_std / np.sqrt(sample_size))
    38. # 输出计算结果
    39. print("norm.interval正态分布的置信区间:", confidence_interval)
    40. print("--------t分布结果是不是与上面的很接近?-----------")
    41. # 计算t分布的置信区间
    42. t_confidence_interval = stats.t.interval(1 - alpha, df=sample_size - 1, loc=sample_mean, scale=sample_std / np.sqrt(sample_size))
    43. # 输出计算结果
    44. print("t分布的置信区间:", t_confidence_interval)
    45. # -------------------
    46. # K-squared正态检验统计量: 1.12645322945576
    47. # K-squared正态检验P-value: 0.5693689625161796
    48. # p_value>0.05无法拒绝零假设,数据符合正态分布。
    49. # -------------------
    50. # 置信区间的下限: 51.79799091398577
    51. # 置信区间的上限: 67.70200908601423
    52. # -------------------
    53. # norm.interval正态分布的置信区间: (51.79799091398577, 67.70200908601423)
    54. # -------------------
    55. # t分布的置信区间: (51.356996738889045, 68.14300326111095)
    56. # [Finished in 5.5s]

    附录多种方式正态检验:

    1. import numpy as np
    2. import pandas as pd
    3. import scipy.stats as stats
    4. import matplotlib.pyplot as plt
    5. # data = np.random.normal(loc=12, scale=2.5, size=340)
    6. data = [34,56,39,71,84,92,44,67,98,49,55,73,50,62,75,44,88,53,61,25,36,66,77,35]
    7. df = pd.DataFrame({'Data': data})
    8. # 描述性统计分析
    9. mean = df['Data'].mean()
    10. std_dev = df['Data'].std()
    11. skewness = df['Data'].skew()
    12. kurtosis = df['Data'].kurtosis()
    13. print("均值:", mean)
    14. print("标准差:", std_dev)
    15. print("偏度:", skewness)
    16. print("峰度:", kurtosis)
    17. # 创建一个2x1的子图布局
    18. fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(6, 6))
    19. # 可视化 - 正态概率图(Q-Q图)
    20. stats.probplot(data, plot=ax1, dist='norm', fit=True, rvalue=True) #ax1作为绘图的位置
    21. ax1.set_title("Q-Q Plot")
    22. # 可视化 - 直方图
    23. ax2.hist(data, bins=6, rwidth=0.8, density=True) # bins个柱状图,宽度是rwidth(0~1),=1没有缝隙
    24. ax2.set_title("Histogram with Kernel Density Estimate")
    25. # 调整子图之间的间距
    26. plt.tight_layout()
    27. # 显示图形
    28. plt.show()
    29. # 正态性检验 - Shapiro-Wilk检验
    30. stat, p = stats.shapiro(data)
    31. print("Shapiro-Wilk检验统计量:", stat)
    32. print("Shapiro-Wilk检验p值:", p)
    33. # Anderson-Darling检验
    34. result = stats.anderson(df['Data'], dist='norm')
    35. print("Anderson-Darling检验统计量:", result.statistic)
    36. print("Anderson-Darling检验临界值:", result.critical_values)
    37. # 执行单样本K-S检验,假设数据服从正态分布
    38. statistic, p_value = stats.kstest(data, 'norm')
    39. print("K-S检验统计量:", statistic)
    40. print("K-S检验p值:", p_value)
    41. # 执行正态分布检验
    42. k2, p_value = stats.normaltest(data)
    43. print(f"normaltest正态分布检验的统计量 (K^2): {k2}")
    44. print(f"normaltest检验p值: {p_value}")


     

  • 相关阅读:
    震动检测模块使用介绍
    题目:2665.计数器 II
    Mendeley在linux中无法打开APPimage
    【机器学习算法】穿越神经网络的迷雾:深入探索机器学习的核心算法
    软工必备知识点
    什么是MQ
    逐字稿 | ViT论文逐段精读【论文精读】
    MyBatis-Plus代码自动生成
    [附源码]java毕业设计农业种植管理系统
    JVM笔记: JVM内存模型
  • 原文地址:https://blog.csdn.net/book_dw5189/article/details/133530135