要想使用scipy和statsmodels实现线性回归,我们必须对线性回归进行建模。
线性回归模型的建模步骤主要包括以下几个步骤:
- 数据准备:首先收集数据并进行清洗,处理缺失值、异常值和标准化数据,确保数据质量。
- 探索性数据分析:通过绘制散点图等方式,观察自变量和因变量之间的关系,初步了解数据特征。
- 建立模型:使用最小二乘法等方法建立线性回归模型,找到自变量和因变量之间的线性关系。
- 模型评估:通过评估指标如均方误差、决定系数等来评估模型的拟合程度和预测能力。
- 变量选择:根据模型评估结果,筛选重要的自变量,去除对因变量影响较小的变量,简化模型。
- 模型诊断:进行模型诊断,检查残差是否符合模型假设,识别异常值和离群点,并进行必要的处理。
- 模型优化:根据诊断结果对模型进行优化,可能包括尝试不同的变量组合或转换变量,以提高模型的表现。
- 模型应用:将优化后的模型应用于实际数据,进行预测和决策,并不断监测模型的表现以确保其有效性。
使用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[:,['身高','体重']])
- 斜率(
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()
通过使用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.056,t统计量为15.703,p值为0.000,表明身高对体重的影响是显著的。 height的系数为-0.7928,标准误差为0.094,t统计量为-8.415,p值为0.000,表明height对体重的影响也是显著的。
- 身高的系数为
- 模型诊断信息:
Omnibus:6.599,用于检验残差的正态性。Durbin-Watson:2.161,用于检验残差的自相关性。Jarque-Bera (JB):5.704,用于检验残差的正态性。Skew(偏度):-0.782,Kurtosis(峰度):3.434,用于描述残差的偏度和峰度。
- 模型条件数(
Cond. No.):48.4,用于评估自变量之间的共线性程度。
如何使用scipy和statsmodels实现线性回归?你学会了吗?