Scipy库提供了多种正态性检验和假设检验方法

Scipy库提供了多种正态性检验和假设检验方法。以下是一些常用的检验方法的列表:

正态性检验方法:

  1. Shapiro-Wilk检验:scipy.stats.shapiro
  2. Anderson-Darling检验:scipy.stats.anderson
  3. Kolmogorov-Smirnov检验:scipy.stats.kstest
  4. D'Agostino-Pearson检验:scipy.stats.normaltest
  5. Lilliefors检验:scipy.stats.lilliefors
     

当检验数据是否呈正态分布时,以下是三大类正态性检验方法及其代表性方法的完整总结:

  1. 综合统计量方法:

    • Shapiro-Wilk检验: 基于W统计量,对数据是否符合正态分布进行评估,适用于各种样本大小。
    • D'Agostino检验: 结合了偏度和峰度的信息,用于检验数据是否符合正态分布,适用于中等样本大小。
    • Shapiro-Francia检验: 使用W'统计量来评估正态性,特别适用于大样本。
    • Lilliefors检验: 类似于Kolmogorov-Smirnov,但适用于小样本。
    • Ryan-Joiner检验: 基于观察数据的偏度和峰度,适用于偏态和厚尾分布。
  2. 正态分布的拟合优度检验方法:

    • Kolmogorov-Smirnov检验: 通过比较观察数据与理论正态分布的累积分布函数,评估数据的拟合优度,适用于大样本。
    • Anderson-Darling检验: 对尾部分布敏感,扩展了Kolmogorov-Smirnov,用于评估数据是否来自正态分布。
    • Cramér-von Mises检验: 考虑了所有分布区域的差异,评估观察数据与理论正态分布之间的拟合度。
    • D'Agostino's K-squared检验: 用于检验数据是否符合正态分布的一种变体。
  3. 图示法(正态概率图):

    • QQ图(Quantile-Quantile): 通过绘制观察数据的分位数与正态分布的分位数比较,直观判断数据是否呈正态分布。
    • PP图(Probability-Probability): 与QQ图类似,但比较累积概率。
    • SP图(Survival-Probability): 也与QQ图类似,但比较生存概率。

这些方法提供了多样化的工具,用于全面评估数据是否遵循正态分布,但在使用时需要根据样本大小和数据特征选择适当的方法。

假设检验方法:

  1. 独立样本t检验:scipy.stats.ttest_ind
  2. 配对样本t检验:scipy.stats.ttest_rel
  3. 单样本t检验:scipy.stats.ttest_1samp
  4. 方差分析 (ANOVA):scipy.stats.f_oneway
  5. Kruskal-Wallis检验:scipy.stats.kruskal
  6. Mann-Whitney U检验:scipy.stats.mannwhitneyu
  7. Wilcoxon符号秩检验:scipy.stats.wilcoxon
  8. 卡方检验:scipy.stats.chisquare
  9. Fisher精确检验:scipy.stats.fisher_exact

这些方法涵盖了在统计分析中经常用到的正态性检验和假设检验技术。你可以根据你的具体数据和研究问题选择适当的方法来进行分析。每个方法都有不同的假设和前提条件,所以在使用时需要谨慎考虑。

下面是关于这些不同正态性检验方法的简要说明:

  1. Shapiro-Wilk检验scipy.stats.shapiro):

    • Shapiro-Wilk检验是一种用于检验数据是否来自正态分布的统计检验方法。
    • Shapiro-Wilk统计量基于数据的观察值和正态分布的期望值之间的差异。
    • 结果解释:如果p-value小于选择的显著性水平(通常为0.05),则拒绝零假设,表示数据不服从正态分布。
      from scipy import stats
      import numpy as np
      
      # 创建一个示例数据集
      data = np.random.normal(0, 1, 100)
      
      # 执行Shapiro-Wilk正态性检验
      stat, p = stats.shapiro(data)
      
      # 输出检验结果
      if p < 0.05:
          print("数据不服从正态分布")
      else:
          print("数据可能服从正态分布")
      
  2. Anderson-Darling检验scipy.stats.anderson):

    • Anderson-Darling检验也用于检验数据是否来自正态分布。
    • Anderson-Darling统计量基于数据的观察值和正态分布的期望值之间的差异。
    • 结果解释:如果Anderson-Darling统计量大于临界值,则拒绝零假设,表示数据不服从正态分布。
      from scipy import stats
      import numpy as np
      
      # 创建一个示例数据集
      data = np.random.normal(0, 1, 100)
      
      # 执行Anderson-Darling正态性检验
      result = stats.anderson(data)
      
      # 输出检验结果
      print("Anderson-Darling统计量:", result.statistic)
      print("临界值:", result.critical_values)
      if result.statistic > result.critical_values[2]:
          print("数据不服从正态分布")
      else:
          print("数据可能服从正态分布")
      
  3. Kolmogorov-Smirnov检验scipy.stats.kstest):

    • Kolmogorov-Smirnov检验用于检验数据是否来自特定的概率分布,包括正态分布。
    • 检验的结果基于累积分布函数的比较。
    • 结果解释:如果p-value小于选择的显著性水平,则拒绝零假设,表示数据不来自指定的分布。
      from scipy import stats
      import numpy as np
      
      # 创建一个示例数据集
      data = np.random.normal(0, 1, 100)
      
      # 执行Kolmogorov-Smirnov正态性检验
      stat, p = stats.kstest(data, 'norm')
      
      # 输出检验结果
      if p < 0.05:
          print("数据不服从正态分布")
      else:
          print("数据可能服从正态分布")
      
  4. D'Agostino-Pearson检验scipy.stats.normaltest):

    • D'Agostino-Pearson检验也用于检验数据是否来自正态分布。
    • 检验的结果基于偏度(skewness)和峰度(kurtosis)的值。
    • 结果解释:如果p-value小于选择的显著性水平,则拒绝零假设,表示数据不服从正态分布。
      from scipy import stats
      import numpy as np
      
      # 创建一个示例数据集
      data = np.random.normal(0, 1, 100)
      
      # 执行D'Agostino-Pearson正态性检验
      stat, p = stats.normaltest(data)
      
      # 输出检验结果
      if p < 0.05:
          print("数据不服从正态分布")
      else:
          print("数据可能服从正态分布")
      
  5. Lilliefors检验scipy.stats.lilliefors):

    • Lilliefors检验是一种用于检验数据是否来自特定分布的检验方法,通常用于检验是否来自正态分布。
    • 结果解释:如果p-value小于选择的显著性水平,则拒绝零假设,表示数据不来自指定的分布。
      from scipy import stats
      import numpy as np
      
      # 创建一个示例数据集
      data = np.random.normal(0, 1, 100)
      
      # 执行Lilliefors正态性检验
      stat, p = stats.lilliefors(data)
      
      # 输出检验结果
      if p < 0.05:
          print("数据不服从正态分布")
      else:
          print("数据可能服从正态分布")
      

这些检验方法可根据你的需求选择,但需要注意,结果的解释可能会受到样本大小、数据分布和显著性水平的影响。要正确使用这些方法,通常需要深入了解它们的原理和假设。

----------------------------

假设检验方法:

这里是对这些假设检验方法的简要介绍以及它们的具体使用场合:

  1. 配对样本t检验scipy.stats.ttest_rel):

    • 使用场合:用于比较两组相关(配对)样本之间的均值差异,例如在同一组人群中的前后两次测量。
    • 假设:检验两组相关样本的均值是否存在显著差异。
  2. 单样本t检验scipy.stats.ttest_1samp):

    • 使用场合:用于检验一个样本的均值是否与一个已知的参考值(或理论均值)存在显著差异。
    • 假设:检验单个样本的均值是否与给定的理论均值不同。
  3. 方差分析 (ANOVA)scipy.stats.f_oneway):

    • 使用场合:用于比较三个或更多组样本之间的均值差异,通常用于分析不同组别之间的统计显著性。
    • 假设:检验多组样本的均值是否存在显著差异。
  4. Kruskal-Wallis检验scipy.stats.kruskal):

    • 使用场合:用于比较三个或更多组独立样本之间的分布差异,通常用于非正态分布的数据。
    • 假设:检验多组独立样本的分布是否存在显著差异。
  5. Mann-Whitney U检验scipy.stats.mannwhitneyu):

    • 使用场合:用于比较两组独立样本之间的中位数差异,通常用于非正态分布的数据。
    • 假设:检验两组独立样本的中位数是否存在显著差异。
  6. Wilcoxon符号秩检验scipy.stats.wilcoxon):

    • 使用场合:用于比较两组配对样本之间的中位数差异,通常用于非正态分布的配对数据。
    • 假设:检验两组配对样本的中位数是否存在显著差异。
  7. 卡方检验scipy.stats.chisquare):

    • 使用场合:用于比较观察频数和期望频数之间的差异,通常用于分析分类数据的拟合度。
    • 假设:检验观察频数与期望频数是否存在显著差异。
  8. Fisher精确检验scipy.stats.fisher_exact):

    • 使用场合:用于比较两个分类变量之间的关联性,通常用于小样本数据。
    • 假设:检验两个分类变量是否存在关联性。

这些检验方法适用于不同类型的数据和研究问题,你可以根据数据性质和研究目的选择合适的方法来进行统计分析。

  1. 独立样本t检验:scipy.stats.ttest_ind
    from scipy import stats
    import numpy as np
    
    # 创建两组示例数据
    group1 = np.array([25, 30, 35, 40, 45])
    group2 = np.array([20, 28, 32, 38, 42])
    
    # 执行独立样本t检验
    t_stat, p_value = stats.ttest_ind(group1, group2)
    
    # 输出检验结果
    if p_value < 0.05:
        print("两组数据均值存在显著差异")
    else:
        print("两组数据均值无显著差异")
    
  2. 配对样本t检验:scipy.stats.ttest_rel
    from scipy import stats
    import numpy as np
    
    # 创建两组示例数据
    before = np.array([30, 32, 34, 36, 38])
    after = np.array([28, 31, 35, 37, 40])
    
    # 执行配对样本t检验
    t_stat, p_value = stats.ttest_rel(before, after)
    
    # 输出检验结果
    if p_value < 0.05:
        print("配对样本存在显著差异")
    else:
        print("配对样本无显著差异")
    
  3. 单样本t检验:scipy.stats.ttest_1samp
    from scipy import stats
    import numpy as np
    
    # 创建一个示例数据集
    data = np.random.normal(0, 1, 100)
    
    # 执行单样本t检验
    t_stat, p_value = stats.ttest_1samp(data, 0)
    
    # 输出检验结果
    if p_value < 0.05:
        print("样本均值与零存在显著差异")
    else:
        print("样本均值与零无显著差异")
    
  4. 方差分析 (ANOVA):scipy.stats.f_oneway
    from scipy import stats
    import numpy as np
    
    # 创建多组示例数据
    group1 = np.random.normal(0, 1, 100)
    group2 = np.random.normal(1, 1, 100)
    group3 = np.random.normal(2, 1, 100)
    
    # 执行方差分析
    f_stat, p_value = stats.f_oneway(group1, group2, group3)
    
    # 输出检验结果
    if p_value < 0.05:
        print("组之间存在显著差异")
    else:
        print("组之间无显著差异")
    
  5. Kruskal-Wallis检验:scipy.stats.kruskal
    from scipy import stats
    
    # 创建多组示例数据
    group1 = [25, 30, 35, 40, 45]
    group2 = [20, 28, 32, 38, 42]
    group3 = [15, 18, 22, 28, 32]
    
    # 执行Kruskal-Wallis检验
    h_stat, p_value = stats.kruskal(group1, group2, group3)
    
    # 输出检验结果
    if p_value < 0.05:
        print("组之间存在显著差异")
    else:
        print("组之间无显著差异")
    
  6. Mann-Whitney U检验:scipy.stats.mannwhitneyu
    from scipy import stats
    
    # 创建两组示例数据
    group1 = [25, 30, 35, 40, 45]
    group2 = [20, 28, 32, 38, 42]
    
    # 执行Mann-Whitney U检验
    u_stat, p_value = stats.mannwhitneyu(group1, group2)
    
    # 输出检验结果
    if p_value < 0.05:
        print("两组数据存在显著差异")
    else:
        print("两组数据无显著差异")
    
  7. Wilcoxon符号秩检验:scipy.stats.wilcoxon
    from scipy import stats
    
    # 创建两组配对数据
    before = [25, 30, 35, 40, 45]
    after = [20, 28, 32, 38, 42]
    
    # 执行Wilcoxon符号秩检验
    w_stat, p_value = stats.wilcoxon(before, after)
    
    # 输出检验结果
    if p_value < 0.05:
        print("配对数据存在显著差异")
    else:
        print("配对数据无显著差异")
    
  8. 卡方检验:scipy.stats.chisquare
    from scipy import stats
    import numpy as np
    
    # 创建一个示例观察频数数组
    observed = np.array([20, 25, 30])
    expected = np.array([15, 30, 30])
    
    # 执行卡方检验
    chi_stat, p_value = stats.chisquare(observed, f_exp=expected)
    
    # 输出检验结果
    if p_value < 0.05:
        print("观察频数与期望频数存在显著差异")
    else:
        print("观察频数与期望频数无显著差异")
    
  9. Fisher精确检验:scipy.stats.fisher_exact
    from scipy import stats
    
    # 创建一个2x2的列联表
    contingency_table = [[10, 5], [3, 15]]
    
    # 执行Fisher精确检验
    odds_ratio, p_value = stats.fisher_exact(contingency_table)
    
    # 输出检验结果
    if p_value < 0.05:
        print("两个分类变量存在关联")
    else:
        print("两个分类变量无关联")
    

猜你喜欢

转载自blog.csdn.net/book_dw5189/article/details/133473852