欢迎光临
我们一直在努力

【统计检验】F检验与F分布

统计检验核心:F检验与F分布|原理推导+Python可视化+机器学习实战

F检验是统计学中用于比较方差、做方差分析(ANOVA)、检验回归方程显著性的核心方法,也是本科数理统计、研究生数据分析与机器学习特征选择的必学内容。


一、F检验到底是什么?一句话看懂

F检验 = 两个方差的比值检验

  • 核心思想:用两组数据的样本方差之比判断两个总体方差是否有显著差异
  • 服从分布:F分布(由两个卡方分布构造而来)
  • 用途:
  • 双总体方差齐性检验(方差是否相等)
  • 单因素/多因素方差分析ANOVA
  • 线性回归整体显著性检验
  • 机器学习特征选择(最常用实战场景)

二、最直观的例子:两种肥料的产量稳定性

你是农业研究员,想判断:

  • 肥料A、肥料B种出来的作物产量波动(方差)是否一样

步骤:

  • 各取一组产量数据
  • 计算两组样本方差 S12S_1^2S12S22S_2^2S22
  • 算F统计量:F = 大方差 / 小方差(保证F≥1)
  • 看F是否显著偏离1
    • F≈1 ➜ 方差无显著差异
    • F远大于1 ➜ 方差显著不同

  • 三、F分布的定义与核心特点

    1. F分布从哪来?

    F分布是两个标准化卡方分布的比值:
    设:

    • U∼χ2(d1)U \\sim \\chi^2(d_1)Uχ2(d1)
    • V∼χ2(d2)V \\sim \\chi^2(d_2)Vχ2(d2)
    • U、V相互独立

    则:
    F=U/d1V/d2∼F(d1,d2)
    F = \\frac{U/d_1}{V/d_2} \\sim F(d_1, d_2)
    F=V/d2U/d1F(d1,d2)

    • d1d_1d1:分子自由度
    • d2d_2d2:分母自由度

    2. F分布的4个关键特征

  • 非负性:F ≥ 0(方差之比不可能为负)
  • 右偏分布:自由度越小越偏,自由度越大越接近正态
  • 双自由度决定形状:d1d_1d1d2d_2d2 缺一不可
  • 常用在方差比较:是统计学里“离散程度对比”的标准分布

  • 四、F检验的核心公式(方差齐性检验)

    1. 统计量

    F=S12S22
    F = \\frac{S_1^2}{S_2^2}
    F=S22S12

    约定:把大方差放分子,使F≥1

    2. 自由度

    • d1=n1−1d_1 = n_1 – 1d1=n11
    • d2=n2−1d_2 = n_2 – 1d2=n21

    3. 判断规则

    给定显著性水平 α=0.05\\alpha=0.05α=0.05

    • 计算p值 < 0.05 ➜ 拒绝原假设 ➜ 方差有显著差异
    • p值 ≥ 0.05 ➜ 不能拒绝 ➜ 方差无显著差异

    五、F分布概率密度函数(PDF)

    (供考研/深入学习使用,本科会用即可)
    fF(x;d1,d2)=Γ(d1+d22)Γ(d12)Γ(d22)(d1d2)d12xd12−1(1+d1d2x)−d1+d22
    f_F(x;d_1,d_2)=\\frac {\\Gamma\\left(\\frac{d_1+d_2}{2}\\right)} {\\Gamma\\left(\\frac{d_1}{2}\\right)\\Gamma\\left(\\frac{d_2}{2}\\right)} \\left(\\frac{d_1}{d_2}\\right)^{\\frac{d_1}{2}} x^{\\frac{d_1}{2}-1} \\left(1+\\frac{d_1}{d_2}x\\right)^{-\\frac{d_1+d_2}{2}}
    fF(x;d1,d2)=Γ(2d1)Γ(2d2)Γ(2d1+d2)(d2d1)2d1x2d11(1+d2d1x)2d1+d2

    • Γ\\GammaΓ:伽马函数(阶乘推广,保证积分为1)
    • x>0

    六、Python实现1:F分布可视化 + 双样本方差检验

    直接运行,直观看到F分布和你计算的F值位置

    import numpy as np
    import matplotlib.pyplot as plt
    import scipy.stats as stats

    # 固定随机种子
    np.random.seed(42)

    # 生成两组数据:方差不同
    n1, n2 = 30, 30
    data1 = np.random.normal(0, 1, n1) # 方差=1
    data2 = np.random.normal(0, 2, n2) # 方差=4

    # 计算无偏样本方差
    var1 = np.var(data1, ddof=1)
    var2 = np.var(data2, ddof=1)

    # 计算F统计量(大方差/小方差)
    if var2 >= var1:
    F_stat = var2 / var1
    d1 = n2 1
    d2 = n1 1
    else:
    F_stat = var1 / var2
    d1 = n1 1
    d2 = n2 1

    print(f"方差1: {var1:.4f}")
    print(f"方差2: {var2:.4f}")
    print(f"F统计量: {F_stat:.4f}")
    print(f"自由度: ({d1}, {d2})")

    # 绘制F分布
    x = np.linspace(0, 5, 500)
    pdf = stats.f.pdf(x, dfn=d1, dfd=d2)

    plt.figure(figsize=(10,6))
    plt.plot(x, pdf, color='#3498db', linewidth=2, label=f'F({d1},{d2})')
    plt.axvline(F_stat, color='#e74c3c', linestyle='–', linewidth=2, label=f'F={F_stat:.3f}')
    plt.title('F Distribution & F Statistic', fontsize=14)
    plt.xlabel('F value')
    plt.ylabel('Probability Density')
    plt.legend()
    plt.grid(alpha=0.3)
    plt.show()


    七、Python实现2:机器学习最强应用 — ANOVA F检验特征选择

    这是工作/竞赛最常用的技能:
    用F检验筛选对预测目标显著的特征,扔掉无用特征

    适用场景

    回归任务 → f_regression
    分类任务 → f_classif(卡方检验也常用)

    import pandas as pd
    import matplotlib.pyplot as plt
    from sklearn.datasets import make_regression
    from sklearn.feature_selection import f_regression, SelectKBest
    from sklearn.linear_model import LinearRegression
    from sklearn.model_selection import train_test_split

    # 生成回归数据
    X, y = make_regression(n_samples=1000, n_features=10, noise=10, random_state=42)
    df = pd.DataFrame(X, columns=[f'feat_{i}' for i in range(10)])
    df['target'] = y

    # 划分训练集/测试集
    X_train, X_test, y_train, y_test = train_test_split(
    df.drop('target',axis=1), df['target'], test_size=0.2, random_state=42
    )

    # 计算每个特征的F值和p值
    f_vals, p_vals = f_regression(X_train, y_train)

    # 构建结果表
    res = pd.DataFrame({
    'feature': X_train.columns,
    'F_value': f_vals,
    'p_value': p_vals
    }).sort_values('F_value', ascending=False)

    print("=== F检验特征重要性排序 ===")
    print(res)

    # 筛选显著特征(p<0.05)
    best_feats = res[res['p_value']<0.05]['feature'].tolist()
    print("\\n显著特征:", best_feats)

    # 用筛选后的特征建模
    model = LinearRegression()
    model.fit(X_train[best_feats], y_train)
    r2 = model.score(X_test[best_feats], y_test)
    print(f"\\n筛选后模型 R²: {r2:.4f}")

    # 画图展示特征重要性
    plt.figure(figsize=(12,5))
    plt.bar(res['feature'], res['F_value'], color='#1abc9c')
    plt.title('Feature F-Value (ANOVA)', fontsize=14)
    plt.xticks(rotation=45)
    plt.grid(axis='y', alpha=0.3)
    plt.tight_layout()
    plt.show()


    八、F检验的三大核心用途(考试+面试必考)

  • 方差齐性检验
    检验两总体方差是否相等,是t检验的前提

  • 方差分析(ANOVA)
    检验多组均值是否有显著差异
    组间方差 / 组内方差 → F值

  • 线性回归显著性
    检验整个回归方程是否有用
    回归均方 / 残差均方 → F值


  • 九、超简总结(背诵版)

    • F检验 = 方差之比的检验
    • F分布 = 两个卡方分布均值的比值
    • F≈1 ➜ 方差相似
    • F越大 ➜ 方差差异越显著
    • 实战最强用途:机器学习特征选择
    赞(0)
    未经允许不得转载:171主机测评 » 【统计检验】F检验与F分布
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址