当前位置:首页>python>统计学入门合集(基于Python)6——线性回归(Linear Regression)

统计学入门合集(基于Python)6——线性回归(Linear Regression)

  • 2026-09-10 23:08:13
统计学入门合集(基于Python)6——线性回归(Linear Regression)

在前几节中,我们已经建立了完整的统计推断体系:

  • CLT:分布基础
  • MLE:参数估计
  • 置信区间:不确定性
  • 假设检验:决策机制

现在进入一个核心应用:

如何刻画变量之间的关系?


1问题提出

给定数据:

我们希望回答:

当  变化时, 如何变化?


👉 一个自然假设:


2模型解释

  • :截距(基准值)
  • :斜率(变化率)
  • :随机误差

👉 核心假设:


3直觉理解

可以理解为:

观测值 = 规律 + 噪声


👉 目标:

找到“最合适”的直线


4最小二乘法(Least Squares)

定义损失函数:


👉 结果:


5Python实现

# file: regression_manual.py

import numpy as np
import matplotlib.pyplot as plt

defmain():
    np.random.seed(0)

    x = np.linspace(0, 10, 100)
    y = 2 + 3*x + np.random.normal(0, 2, 100)

    beta1 = np.cov(x, y)[0,1] / np.var(x)
    beta0 = np.mean(y) - beta1 * np.mean(x)

    print("beta0:", beta0)
    print("beta1:", beta1)

    y_pred = beta0 + beta1 * x

    plt.scatter(x, y)
    plt.plot(x, y_pred)
    plt.title("Linear Regression")
    plt.show()

if __name__ == "__main__":
    main()

结果解释

执行结果如下:
  • 拟合直线接近真实模型
  • 噪声影响有限

6MLE视角

假设:

则:


👉 最大化似然:

等价于:


👉 结论:

最小二乘 = 最大似然估计


7参数分布(推断基础)

在一定条件下:


👉 这使得:

  • 可以构造置信区间
  • 可以做假设检验

8系数显著性检验

假设:


统计量:


# file: regression_ttest.py

import numpy as np
from scipy import stats

defmain():
    np.random.seed(0)

    x = np.linspace(0,10,100)
    y = 2 + 3*x + np.random.normal(0,2,100)

    beta1 = np.cov(x,y)[0,1] / np.var(x)
    beta0 = np.mean(y) - beta1*np.mean(x)

    y_pred = beta0 + beta1*x
    residuals = y - y_pred

    s2 = np.sum(residuals**2) / (len(x)-2)
    se_beta1 = np.sqrt(s2 / np.sum((x-np.mean(x))**2))

    t_stat = beta1 / se_beta1
    p_value = 2*(1 - stats.t.cdf(abs(t_stat), df=len(x)-2))

    print("beta1:", beta1)
    print("t统计量:", t_stat)
    print("p-value:", p_value)

if __name__ == "__main__":
    main()

结果解释

执行结果如下:
  • p-value 很小 → 拒绝 
  • 说明 x 对 y 有显著影响

9拟合优度(R²)

定义:

残差平方和总平方和

# file: regression_r2.py

import numpy as np

defmain():
    np.random.seed(0)

    x = np.linspace(0,10,100)
    y = 2 + 3*x + np.random.normal(0,2,100)

    beta1 = np.cov(x,y)[0,1] / np.var(x)
    beta0 = np.mean(y) - beta1*np.mean(x)

    y_pred = beta0 + beta1*x

    ss_res = np.sum((y - y_pred)**2)
    ss_tot = np.sum((y - np.mean(y))**2)

    r2 = 1 - ss_res/ss_tot

    print("R^2:", r2)

if __name__ == "__main__":
    main()

执行结果如下:

10工程意义

回归分析用于:

  • 预测(Prediction)
  • 因果分析(Causal insight)
  • 系统建模
  • 机器学习基础

11本节总结

内容
含义
模型
线性关系
方法
最小二乘
本质
MLE
推断
t检验 + CI

12下期预告

下一讲将进入:

  • 多元回归
  • 变量选择
  • 正则化(Ridge / Lasso)

📌 点赞 + 转发,持续更新《统计学入门》

最新文章

随机文章