多元线性回归--案例分析及python实践

article/2025/8/28 10:07:20

回归分析--多元回归

介绍一下多元回归分析中的统计量

  • 总观测值\large n
  • 总自变量\large k
  • 自由度df:回归自由度 \large (k),残差自由度 \large (n-k-1)
  • SST总平方和                 \large SST=\sum \left (y_{i} -\bar{y}\right )^{2}
  • SSR回归平方和             \large SSR=\sum \left (\widehat{y}_{i} -\bar{y}\right )^{2}
  • SSE残差平方和             \large SSE=\sum \left (y_{i} -\widehat{y}_{i}\right )^{2}
  • MSR均方回归               \large MSR=\frac{SSR}{k}
  • MSE均方残差               \large MSE=\frac{SSE}{n-k-1}
  • 判定系数R_square        \large R^{2}=\frac{SSR}{SST}=\frac{\sum \left (\widehat{y}_{i} -\bar{y}\right )^{2}}{\sum \left (y_{i} -\bar{y}\right )^{2}} = 1-\frac{\sum \left (y_{i} -\widehat{y}_{i}\right )^{2}}{\sum \left (y_{i} -\bar{y}\right )^{2}}
  • 调整的判定系数Adjusted_R_square   \large R_{a}^{2} = 1-(1-R^{2})(\frac{n-1}{n-k-1})
  • 复相关系数Multiple_R      \large MultipleR = \sqrt{R^{2}}
  • 估计标准误差    \large s_{e}=\sqrt{\frac{\sum \left (y_{i} -\widehat{y}_{i}\right )^{2}}{n-k-1}} = \sqrt{\frac{SSE}{n-k-1}}=\sqrt{MSE}
  • F检验统计量     \large F = \frac{SSR/k}{SSE/\left ( n-k-1 \right )} = \frac{MSR}{MSE} \sim F\left ( k, n-k-1 \right )
  • 回归系数抽样分布的标准误差  \large s_{e}(\widehat{\beta _{k}}) = \sqrt{(s_{e})^{2}(X^{T}X)_{kk}^{-1}}
  • 各回归系数的t检验统计量    \large t_{k} = \frac{\widehat{\beta }_{k}}{Se(\widehat{\beta _{k}})}
  • 各回归系数的置信区间   \large \widehat{\beta }_{k} \pm t_{\alpha /2}(n-k-1) *s_{e}(\widehat{\beta _{k}})
  • 对数似然值(log likelihood)

       \large \sigma = \sqrt{\frac{\sum (y^{(i)} -\theta ^{T}x^{(i)})^{2}}{n}}

       \large logLik = L(\theta ) = \prod_{i=1}^{m}\frac{1}{\sqrt{2\pi }\sigma }exp^{\left ( -\frac{(y^{(i)} -\theta ^{T}x^{(i)})^{2}}{2\sigma ^{2}} \right )}

  • AIC准则   \large AIC=2k - 2logLik
  • BIC准则   \large AIC= - 2logLik + k ln(n)

案例分析及python实践

# 导入相关包
import pandas as pd
import numpy as np
import math
import scipy
import matplotlib.pyplot as plt
from scipy.stats import t
# 构建数据
columns = {'A':"分行编号", 'B':"不良贷款(亿元)", 'C':"贷款余额(亿元)", 'D':"累计应收贷款(亿元)", 'E':"贷款项目个数", 'F':"固定资产投资额(亿元)"}
data={"A":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],"B":[0.9,1.1,4.8,3.2,7.8,2.7,1.6,12.5,1.0,2.6,0.3,4.0,0.8,3.5,10.2,3.0,0.2,0.4,1.0,6.8,11.6,1.6,1.2,7.2,3.2],"C":[67.3,111.3,173.0,80.8,199.7,16.2,107.4,185.4,96.1,72.8,64.2,132.2,58.6,174.6,263.5,79.3,14.8,73.5,24.7,139.4,368.2,95.7,109.6,196.2,102.2],"D":[6.8,19.8,7.7,7.2,16.5,2.2,10.7,27.1,1.7,9.1,2.1,11.2,6.0,12.7,15.6,8.9,0,5.9,5.0,7.2,16.8,3.8,10.3,15.8,12.0],"E":[5,16,17,10,19,1,17,18,10,14,11,23,14,26,34,15,2,11,4,28,32,10,14,16,10],"F":[51.9,90.9,73.7,14.5,63.2,2.2,20.2,43.8,55.9,64.3,42.7,76.7,22.8,117.1,146.7,29.9,42.1,25.3,13.4,64.3,163.9,44.5,67.9,39.7,97.1]}df = pd.DataFrame(data)
X = df[["C", "D", "E", "F"]]
Y = df[["B"]]
# 构建多元线性回归模型
from sklearn.linear_model import LinearRegression
lreg = LinearRegression()
lreg.fit(X, Y)x = X
y_pred = lreg.predict(X)
y_true = np.array(Y).reshape(-1,1)coef = lreg.coef_[0]
intercept = lreg.intercept_[0]
# 自定义函数
def log_like(y_true, y_pred):"""y_true: 真实值y_pred:预测值"""sig = np.sqrt(sum((y_true - y_pred)**2)[0] / len(y_pred)) # 残差标准差δy_sig = np.exp(-(y_true - y_pred) ** 2 / (2 * sig ** 2)) / (math.sqrt(2 * math.pi) * sig)loglik = sum(np.log(y_sig))return loglikdef param_var(x):"""x:只含自变量宽表"""n = len(x)beta0 = np.ones((n,1))df_to_matrix = x.as_matrix()concat_matrix = np.hstack((beta0, df_to_matrix))         # 矩阵合并transpose_matrix = np.transpose(concat_matrix)           # 矩阵转置dot_matrix = np.dot(transpose_matrix, concat_matrix)     # (X.T X)^(-1)inv_matrix = np.linalg.inv(dot_matrix)                   # 求(X.T X)^(-1) 逆矩阵diag = np.diag(inv_matrix)                               # 获取矩阵对角线,即每个参数的方差return diagdef param_test_stat(x, Se, intercept, coef, alpha=0.05):n = len(x)k = len(x.columns)beta_array = param_var(x)beta_k = beta_array.shape[0]coef = [intercept] + list(coef)std_err = []t_Stat = []P_value = []t_intv = []coefLower = []coefupper = []for i in range(beta_k):se_belta = np.sqrt(Se**2 * beta_array[i])            # 回归系数的抽样标准误差t = coef[i] / se_belta                               # 用于检验回归系数的t统计量, 即检验统计量tp_value = scipy.stats.t.sf(np.abs(t), n-k-1)*2       # 用于检验回归系数的P值(P_value)t_score = scipy.stats.t.isf(alpha/2, df = n-k-1)     # t临界值coef_lower = coef[i] - t_score * se_belta            # 回归系数(斜率)的置信区间下限coef_upper = coef[i] + t_score * se_belta            # 回归系数(斜率)的置信区间上限std_err.append(round(se_belta, 3))t_Stat.append(round(t,3))P_value.append(round(p_value,3))t_intv.append(round(t_score,3))coefLower.append(round(coef_lower,3))coefupper.append(round(coef_upper,3))dict_ = {"coefficients":list(map(lambda x:round(x, 4), coef)), 'std_err':std_err, 't_Stat':t_Stat, 'P_value':P_value, 't临界值':t_intv, 'Lower_95%':coefLower, 'Upper_95%':coefupper}index = ["intercept"] + list(x.columns)stat = pd.DataFrame(dict_, index=index)return stat
# 自定义函数(计算输出各回归分析统计量)
def get_lr_stats(x, y_true, y_pred, coef, intercept, alpha=0.05):n   = len(x)k   = len(x.columns)ssr = sum((y_pred - np.mean(y_true))**2)[0]  # 回归平方和 SSRsse = sum((y_true - y_pred)**2)[0]           # 残差平方和 SSEsst = ssr + sse                              # 总平方和   SSTmsr = ssr / k                                # 均方回归   MSRmse = sse / (n-k-1)                          # 均方残差   MSER_square = ssr / sst                                   # 判定系数R^2Adjusted_R_square = 1-(1-R_square)*((n-1) / (n-k-1))   # 调整的判定系数Multiple_R = np.sqrt(R_square)                         # 复相关系数   Se = np.sqrt(sse/(n - k - 1))                          # 估计标准误差loglike = log_like(y_true, y_pred)[0]AIC = 2*(k+1) - 2 * loglike                  # (k+1) 代表k个回归参数或系数和1个截距参数BIC = -2*loglike + (k+1)*np.log(n)  # 线性关系的显著性检验F  = (ssr / k) / (sse / ( n - k - 1 ))            # 检验统计量F (线性关系的检验)pf = scipy.stats.f.sf(F, k, n-k-1)                # 用于检验的显著性F,即Significance FFa = scipy.stats.f.isf(alpha, dfn=k, dfd=n-k-1)   # F临界值# 回归系数的显著性检验stat = param_test_stat(x, Se, intercept, coef, alpha=alpha)# 输出各回归分析统计量print('='*80)print('df_Model:{}  df_Residuals:{}'.format(k, n-k-1), '\n')print('loglike:{}  AIC:{}  BIC:{}'.format(round(loglike,3), round(AIC,1), round(BIC,1)), '\n')print('SST:{}  SSR:{}  SSE:{}  MSR:{}  MSE:{}  Se:{}'.format(round(sst,4),round(ssr,4),round(sse,4),round(msr,4),round(mse,4),round(Se,4)), '\n')print('Multiple_R:{}  R_square:{}  Adjusted_R_square:{}'.format(round(Multiple_R,4),round(R_square,4),round(Adjusted_R_square,4)), '\n')print('F:{}  pf:{}  Fa:{}'.format(round(F,4), pf, round(Fa,4)))print('='*80)print(stat)print('='*80)return 0

输出结果如下:

对比statsmodels下ols结果:

参考资料:

【1】https://www.zhihu.com/question/328568463

【2】https://blog.csdn.net/qq_38998213/article/details/83480147


http://chatgpt.dhexx.cn/article/n1qjraeL.shtml

相关文章

回归分析:多元线性回归模型 白话解析与案例实现

文章目录 线性学习多元线性回归模型多元线性回归模型的python实现 线性学习 回归分析是研究自变量x与因变量y的关系的方法。 上一节我们介绍了一元线性回归,经验公式为: $ \hat{y}\hat{\beta}1 x\hat{\beta}0 $ 在实际生活中,我们要研究的…

多元统计分析——多元线性回归

1. 经典的线性回归分析与交叉验证 examDict{ 学习时 :[0.50, 0.75, 1.00, 1.25,1.50,1.75, 1.75,2.00, 2.25,2.50, 2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50], 分:[10,22,13 ,43,20,22,33,50,62 , 48,55,75,62,73,81,76,64,82,90,93]} examDf pd.DataFrame(examDi…

spss进行多元线性回归并分析表格(转载)

1.如何使用spss进行多元线性回归。 2.分析生成结果,并判断回归是否可行。 一、使用spss进行多元线性回归: 1.输入数据 二、表格结果分析: R方是检验回归是否成功的重要要素之一,DW是残差独立性检验,衡量标准如下&…

数据分析方法--回归分析方法((SPSS建模:多元线性回归案例)

文章目录 回归定义最常用回归方法一、线性回归(Linear Regression)二、逻辑回归(Logistic Regression)三、多项式回归(Polynomial Regression)四、逐步回归(Stepwise Regression)五、岭回归(Ridge Regression)六、套索回归(Lasso Regression)七、回归(ElasticNet) 如何正确选择…

线性回归 - 多元线性回归案例 - 分析步骤、输出结果详解、与Python的结果对比 -(SPSS建模)

现在用 Python 写线性回归的博客都快烂大街了,为什么还要用 SPSS 做线性回归呢?这就来说说 SPSS 存在的原因吧。 SPSS 是一个很强大的软件,不用编程,不用调参,点巴两下就出结果了,而且出来的大多是你想要的…

SPSS--回归-多元线性回归模型案例解析!(一)

SPSS--回归-多元线性回归模型案例解析!(一) 多元线性回归,主要是研究一个因变量与多个自变量之间的相关关系,跟一元回归原理差不多,区别在于影响因素(自变量)更多些而已,例如&#x…

多元回归分析(线性回归)

多元线性回归分析 一、回归的基本理解(1)回归的基本任务(2)回归里的关键词(3)回归里的数据类型(4)回归方程中的系数解释(5)扰动项要满足的条件(1&…

多元线性回归分析详细介绍

一文搞懂——多元线性回归分析 回归分析定义回归的使命回归分析的分类数据的分类数据的收集 线性回归对于线性的理解回归系数的解释核心解释变量和控制变量四类模型回归系数的解释特殊的自变量:虚拟变量X含有交互项的自变量 回归实例题目Stata解决第一步&#xff1a…

多元线性回归分析示例

GLM模型应用于脑功能影像分析时,在某个因素影响下,由beta图,经过t检验得到脑区显著激活的区域。应用于其他地方也可加深我们对于模型的理解。 clc,clear; X[ 136.5 215136.5 250136.5 180138.5 2501…

【课程设计】计算机组成与系统结构

计算机组成与系统结构课程设计(2020.12) 保姆式教程 目录 计算机组成与系统结构课程设计(2020.12)一、本课程设计的性质、目的、任务二、本课程设计的基本理论三、课程设计的主要内容四、微程序流程图(树形图)五、模型机微指令表六、机器指令程序的说明…

计算机组成与系统结构课程设计

课程设计题目 综合运用所学计算机原理知识,设计并实现具有以下16条指令的指令集结构的模型计算机: 编号 助记符 机器指令码 说明 0 SUB Rd,Rs 0000 RdRs Rd-Rs→Rd 1 ADD Rd,Rs 0001 RdRs RdRs→Rd 2 AND Rd,Rs 0010 RdRs Rd&Rs→Rd (Rd和…

计算机毕业设计、计算机课程设计怎么做?计算机设计1900套来帮你!

计算机毕业设计、计算机课程设计怎么做?计算机设计1900套来帮你! 人生做什么事都有套路,大学毕业设计、课程设计通常比较简单,大多数都是找个项目做参考,有的人随便抄一抄糊弄一下,只要查重,格…

pycharm 安装numpy包——超简单

非常简单的安装步骤,自己百试不爽哦,废话不多说直接上图按以下步骤进行即可 一、找到安装numpy的地方 file→settings→project interpreter,点击右侧的+号 二、进行numpy 安装 搜索框内手动输入numpy进行搜索,选中…

python 如何安装numpy库?

(我的微信:Kingsplusa,我总结了人工智能手推笔记和思维导图,欢迎一起进步学习。) 首先我们要找到python安装的位置 winR打开 进入以后输入: where python 找到安装目录后,找到Scripts文件…

python中Numpy包的安装及使用

*****安装 python (本文安装 python2.7) *****安装 pip (1)检查是否已安装pip 进入cmd命令窗口,输入 pip --version ,查看是否已安装pip,说明已安装了pip 否则,说明未安装pip 需要进入(2&am…

Python2.7中安装numpy包

前言 花了一个下午的时间才成功安装了numpy,血与泪的教训。记录一下踩的坑。 安装环境 系统: win10 Python版本: 2.7.9 IDE:Pycharm 踩坑过程 尝试一 在Pycharm的setting中安装numpy 1.20.2(最新版本&#xff09…

numpy安装过程

下载numpy库的详细方法 安装前提: 1、Python3.8安装完成并能够正常使用 2、下载相应的numpy安装包,.whl格式 安装详细步骤:* 首先,点击下面的链接进入numpy下载官网 链接地址:添加链接描述 进去之后,点击…

pycharm怎么安装numpy库

打开界面后,在File菜单中点击Settings选项 在弹出的窗口中点击project interpreter选项 找到并点击窗口左侧的号键 在搜索框中输入numpy,并点击上方第一个选项 点击底部最下方的install package按钮 当下方出现successfully字样时,就代表num…

numpy的安装以及学习

1.在pycharm解释器中安装numpy库 2.pip install numpy 3.conda install numpy (清华源:https://pypi.tuna.tsinghua.edu.cn/simple) Numpy的导入: import numpy as np numpy介绍 NumPy是一个开源的Python科学计算库&#xff…

Python安装numpy,matplotlib

NumPy(Numerical Python)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。 Matplotlib可能Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输…