使用scipy和statsmodels实现线性回归

353 阅读3分钟

要想使用scipystatsmodels实现线性回归,我们必须对线性回归进行建模。

线性回归模型的建模步骤主要包括以下几个步骤:

  1. 数据准备:首先收集数据并进行清洗,处理缺失值、异常值和标准化数据,确保数据质量。
  2. 探索性数据分析:通过绘制散点图等方式,观察自变量和因变量之间的关系,初步了解数据特征。
  3. 建立模型:使用最小二乘法等方法建立线性回归模型,找到自变量和因变量之间的线性关系。
  4. 模型评估:通过评估指标如均方误差、决定系数等来评估模型的拟合程度和预测能力。
  5. 变量选择:根据模型评估结果,筛选重要的自变量,去除对因变量影响较小的变量,简化模型。
  6. 模型诊断:进行模型诊断,检查残差是否符合模型假设,识别异常值和离群点,并进行必要的处理。
  7. 模型优化:根据诊断结果对模型进行优化,可能包括尝试不同的变量组合或转换变量,以提高模型的表现。
  8. 模型应用:将优化后的模型应用于实际数据,进行预测和决策,并不断监测模型的表现以确保其有效性。

使用scipy实现线性回归:

import pandas as pd
df=pd.read_csv(r"C:\Users\ljl20\Desktop\文档\stu_data.csv", encoding='GBK')
from scipy import stats as ss
ss.linregress(df.loc[:,['身高','体重']])

image.png

  • 斜率(slope):0.8769493334584502
  • 截距(intercept):-79.28282709800769
  • 相关系数(rvalue):0.9118170987010523
  • p值(pvalue):5.74732931644548e-21
  • 斜率标准误差(stderr):0.055846650496295086
  • 截距标准误差(intercept_stderr):9.42167727093578

相关系数越接近1,就表明自变量和因变量之间就越存在很强的线性关系。

使用statsmodels实现线性回归:

import pandas as pd
df=pd.read_csv(r"C:\Users\ljl20\Desktop\文档\stu_data.csv", encoding='GBK')
from statsmodels.regression.linear_model import OLS
df2=df.loc[:,['身高']]
df2['height']=100
reg=OLS(df.体重,df2).fit()
reg.summary()

image.png

通过使用OLS(普通最小二乘)方法拟合了一个线性回归模型,其中因变量为数据框df中的'体重'列,自变量为df2数据框中的'height'列。最后,通过reg.summary()来查看拟合的线性回归模型的详细统计信息。

下面我来讲解一下代码输出后得到的这个表格里有哪些信息:

  • 因变量(Dep. Variable):体重
  • 模型拟合度量:
    • R-squared(R平方):0.831,表示模型可以解释因变量变化的83.1%。
    • Adj. R-squared(调整R平方):0.828,考虑了模型中的自由度,用于比较不同模型的拟合度。
  • 模型统计信息:
    • F-statistic(F统计量):246.6,用于检验模型的整体显著性。
    • Prob (F-statistic):5.75e-21,对应F统计量的p值,表明模型整体显著。
  • 系数(coef)和显著性检验(P>|t|):
    • 身高的系数为0.8769,标准误差为0.056t统计量为15.703p值为0.000,表明身高对体重的影响是显著的。
    • height的系数为-0.7928,标准误差为0.094t统计量为-8.415p值为0.000,表明height对体重的影响也是显著的。
  • 模型诊断信息:
    • Omnibus6.599,用于检验残差的正态性。
    • Durbin-Watson2.161,用于检验残差的自相关性。
    • Jarque-Bera (JB)5.704,用于检验残差的正态性。
    • Skew(偏度):-0.782Kurtosis(峰度):3.434,用于描述残差的偏度和峰度。
  • 模型条件数(Cond. No.):48.4,用于评估自变量之间的共线性程度。

如何使用scipy和statsmodels实现线性回归?你学会了吗?