一、一元线性回归模型的参数估计

一元线性回归模型中参数估计方法有最小二乘法、矩方法和极大似然方法.

最小二乘法(Least Squre Estimation, LSE)又称最小平方法,它通过最小化误差的平方和寻找数据的最佳函数匹配

一组数据是否是一元线性回归模型 一元线性回归数据集_python

最小二乘法也是用于拟合回归线最常用的方法。对于观测数据,它通过最小化每个数据点到线的垂直偏差平方和来计算最佳拟合线。因为在相加时,偏差先平方,所以正值和负值没有抵消

 

一组数据是否是一元线性回归模型 一元线性回归数据集_线性回归_02

要点:

1.自变量与因变量之间必须有线性关系

2.多元回归存在多重共线性,自相关性和异方差性

3.线性回归对异常值非常敏感。它会严重影响回归线,最终影响预测值

4.多重共线性会增加系数估计值的方差,使得在模型轻微变化下,估计非常敏感。结果就是系数估计值不稳定

5.在多个自变量的情况下,我们可以使用向前选择法,向后剔除法和逐步筛选法来选择最重要的自变量

根据微积分求极值原理,通过求偏导并置为0得到

一组数据是否是一元线性回归模型 一元线性回归数据集_一组数据是否是一元线性回归模型_03

求解方程组得到:

一组数据是否是一元线性回归模型 一元线性回归数据集_一组数据是否是一元线性回归模型_04

二、一元线性回归模型的误差方差估计

一组数据是否是一元线性回归模型 一元线性回归数据集_sklearn_05

 

一组数据是否是一元线性回归模型 一元线性回归数据集_一组数据是否是一元线性回归模型_06

三、一元回归模型的主要统计检验

回归分析要通过样本所估计的参数来代替总体的真实参数,或者说用样本回归线代替总体回归线

尽管从统计性质上已知,如果有足够多的重复抽样,参数的估计值的期望就等于总体的参数真值,但在一次抽样中,估计值不一定就等于该真值。那么在一次抽样中,参数的估计值与真值的差异有多大,是否显著,就需要进一步进行统计检验

在一元回归的统计检验主要包括拟合优度检验,变量显著性检验和残差标准差检验

1. 拟合优度检验

拟合优度检验是用卡方统计量进行统计显著性检验的重要内容之一。它是依据总体分布状况,计算出分类变量中各类别的期望频数,与分布的观察频数进行对比,判断期望频数与观察频数是否有显著差异,从而达到从分类变量进行分析的目的。它是对样本回归直线与样本观测值之间拟合程度的检验

2. 变量的显著性检验(t检验)

显著性检验就是事先对总体(随机变量)的参数或总体分布形式做出一个假设,然后利用样本信息来判断这个假设(备择假设)是否合理,即判断总体的真实情况与原假设是否有显著性差异。显著性检验是针对我们对总体所做的假设进行检验,其原理就是“小概率事件实际不可能性原理”来接受或否定假设

四、一元线性回归对鸢尾花数据集实战

下面使用一元线性回归方法对鸢尾花数据集中的petal-length和petal-width两列数据进行回归分析

 

一组数据是否是一元线性回归模型 一元线性回归数据集_一组数据是否是一元线性回归模型_07

 

结果如下

一组数据是否是一元线性回归模型 一元线性回归数据集_一组数据是否是一元线性回归模型_08

 回归线的参数如下

一组数据是否是一元线性回归模型 一元线性回归数据集_线性回归_09

对花萼长度为3.9的花,预测其花萼宽度

 

一组数据是否是一元线性回归模型 一元线性回归数据集_一组数据是否是一元线性回归模型_10

部分代码如下

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
froklearn.linear_model import LinearRegression
%matplline
iris = load_iris()   #导入数据集iris
data=pd.DataFrame(iris.data)
data.columns=['sepal-length', 'sepal-width', 'petal-length', 'petal-width']
data.head()   #显示前5行
# 使用sklearn完成一元线性回归
x = data['petal-length'].values
y = data['petal-width'].values
x = x.reshape(len(x),1)
y = y.reshape(len(y),1)
clf = Linea
plt.scatter(x,y,s=50)
plt.plot(x,pre,'r-',linewidth=2)
plt.xlabel('petal-length')
plt.ylabel('petal-width')
for idx, m in enumerate(x):  
    plt.plot([m,m],[y[idx],pre[idx]], 'g-')  
plt.show()