文章目录

  • 一.理论部分
    • 1.什么是一元线性回归 ?
    • 2.一元线性回归模型与基本假设 ?
    • 3.怎么求出得到回归函数的估计 ?
  • 二.手动实现一元线性回归
  • 三.使用Python的statsmodels package来完成

宋体

一.理论部分

1.什么是一元线性回归 ?

  回归分析是研究相关关系的数学工具。设Y关于x的回归函数为μ(x)Y关于x的回归函数为\mu(x)Y关于x的回归函数为μ(x),则利用样本(x1,Y1),(x2,Y2),...,(xn,Yn)(x_{1},Y_{1}),(x_{2},Y_{2}),...,(x_{n},Y_{n})(x1​,Y1​),(x2​,Y2​),...,(xn​,Yn​)来估计回归函数的问题就称为求YYY关于xxx的回归问题。当这个回归函数恰好为线性函数(i.e.μ(x)=a+bx\mu(x)=a+bxμ(x)=a+bx)时的回归问题就是一元线性回归问题。

2.一元线性回归模型与基本假设 ?

  一元线性回归模型:Y=μ(x)+ε=a+bx+εY=\mu(x)+\varepsilon =a+bx+\varepsilon Y=μ(x)+ε=a+bx+ε
一元线性回归模型的基本假设:
(1)同方差性;即假设对于们一个x的每一个值有Y服从N(a+bx,σ2)N(a+bx,\sigma^{2})N(a+bx,σ2) 。
(2)参数b≠0b\ne 0b=0(线性假设的显著性检验就要用这个,要是t检验的pvalue<0.5,说明拒绝原假设H0:b=0H_{0}:b=0H0​:b=0那么没有就理由认为模型有问题)。

3.怎么求出得到回归函数的估计 ?

用极大似然估计得到的似然函数:L(a,b)=∏C1e−C2Q(a,b)L(a,b)=\prod C_{1}e^{-C_{2}Q(a,b)}L(a,b)=∏C1​e−C2​Q(a,b),其中C_{1},C_{2}都是大于0的常数.有Q(a,b)=∑i=1n(yi−a−bxi)Q(a,b)=\sum_{i=1}^{n}(y_{i}-a-bx_{i})Q(a,b)=∑i=1n​(yi​−a−bxi​).通过分析很容易看出来要使得似然函数取最大值是对应的参数a,ba,ba,b就是是得Q(a,b)Q(a,b)Q(a,b)取得最小值是对应的参数a,ba,ba,b.于是问题转换为极值问题。即可解出参数a,ba,ba,b的估计值(求极值点的过程在《概率论与数理统计》第243页)。于是得到回归函数的估计:μ^(x)=a^+b^x\hat \mu(x)=\hat a+\hat bxμ^​(x)=a^+b^x回归函数的估计称为回归方程记作:y^=a^+b^x\hat y=\hat a+\hat bxy^​=a^+b^x.总结一下得到回归函数的估计的方法就是先做一个极大似然估计,然后使得其取极大值。换个角度看Q(a,b)Q(a,b)Q(a,b)实际是残差平方和,直观上看如果这个值越小,那么得到的回归方程对于的直线实际对样本的拟合程度越高。第二种思路就是所谓的最小二乘法。第二部分我们将使用statsmodels提供给的OLS(Ordinary least square)来求解得到模型中的params。

下面我们将手动和利用statsmodels package来判断葡萄酒引用量和心脏病死亡率之间有什么关系。

二.手动实现一元线性回归

先绘制散点图看看酒精摄取量和死亡率之间大致的相关关系,如果接近线性的话就可以用一元线性回归做做看。

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
import scipy.stats
x=np.array([2.5,3.9,2.9,2.4,2.9,0.8,9.1,0.8,0.7,7.9,1.8,1.9,0.8,6.5,1.6,5.8,1.3,1.2,2.7])
y=np.array([211,167,131,191,220,297,71,211,300,107,167,266,277,86,207,115,285,199,172])
ax1=plt.subplot(121)
ax1.scatter(x,y,marker='o',color='r')

再用最小二乘法求出参数估计值。这里直接用scipy.optimzie提供的curve_fit做了。这个函数用的是非线性的最小二乘去得到参数估计值。实际上我们这里应该使用线性最小二乘因为模型是参数的线性函数。但是由于curve_fit这个函数的f参数是我们自己来定义的,所以用它来做一元线性回归参数估计也没问题。(numpy提供的polyfit函数同样可以得到参数估计值)。

# 拟合
model_func=lambda x,beta,alpha:beta+alpha*x
f=curve_fit(model_func,x,y)
print('参数估计值:',f[0])  #  [266.16625514 -23.95058865]
# 样本的的估计值
func=lambda x:266.16625514-23.95058865*x
new_y=func(x)
ax2=plt.subplot(122)
ax2.plot(x,new_y,label='fitting line');ax2.scatter(x,y,color='cyan',label='sample point')
ax2.legend(loc='best')
plt.suptitle('Univariate linear regression')


下面我们做(1)线性假设的显著性检验(就是T检验b是否为0,套结论就好了。详细推导在《概率论与数理统计》第249页)。(2)求解R2R^{2}R2,这个参数反映出有多少数据点落到回归曲线上,显然越接近1那么回归直线越好。(3)F-statisic,这个还是做了f检验来检验我们b是不是为0.其实没必要再做了。(i.e. 1,3选一个做好了)

xmean,ymean=np.mean(x),np.mean(y)
lxy=np.sum((x-xmean)*(y-ymean))
lxx=np.sum((x-xmean)**2)
lyy=np.sum((y-ymean)**2)
# Sum of squares of total variation,Sum of squares of the regression,Sum of Squares for Error
SST=lyy
SSR=np.sum((new_y-ymean)**2)
SSE=np.sum((y-new_y)**2)

输出结果分析:看p值就好了,<0.5说明原假设被拒绝,就是说b不为0.这是在预期内的,于是没有理由有认为模型有问题。而Rsqared即R2R^{2}R2=0.7213,说明有72%左右得到点是落到回归直线上的,那么这个回归直线是比较好的。就是说葡萄酒用量和心脏病死亡率之间的关联是很显著的。所以适当饮酒有益健康LOL…

三.使用Python的statsmodels package来完成

# use statsmodels can be easier
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import statsmodels.api as sm
# 样本
x=np.array([2.5,3.9,2.9,2.4,2.9,0.8,9.1,0.8,0.7,7.9,1.8,1.9,0.8,6.5,1.6,5.8,1.3,1.2,2.7])
y=np.array([211,167,131,191,220,297,71,211,300,107,167,266,277,86,207,115,285,199,172])
# 因为我们的模型是a+bx,而OLS模型默认没有截距项,使用add_constant添加截距项
X=sm.add_constant(x)
# 拟合模型并获取总结表.
# OLS即ordinary least square 是一种找到是得总变差最小的参数的算法
result=sm.OLS(y,X).fit()
print(result.summary())


绘制一下回归直线

# 打印下参数估计值
print(result.params)  #[266.1663,23.9506]
# 回归方程
new_y=(lambda x:266.1663-23.9506*x)(x)
# 绘图
plt.plot(x,new_y,label='regression line',color='r')
plt.scatter(x,y,label='sampel',color='cyan')
plt.legend(loc='best')

数学建模——一元线性回归相关推荐

  1. 清风数学建模--一元线性回归

    一元线性回归模型 假 设 x 是 自 变 量 , y 是 因 变 量 , 且 满 足 如 下 线 性 关 系 y i = β 0 + β 1 x i + μ i β 0 和 β 1 为 回 归 系 数 ...

  2. 数学建模多元线性回归内生性问题的蒙特卡洛模拟matlab代码

    回归分析是数据分析中最基础也是最重要的分析工具,绝大多数的数据分析问题,都可以使用回归的思想来解决.回归分析的任务就是,通过研究自变量X和因变量Y的相关关系,尝试去解释Y的形成机制,进而达到通过X去预 ...

  3. 数学建模之线性回归的标准型以及例题

    Matlab中线性规划的标准型为: 所求的线性规划问题为:mincTxmin {{c}^{T}}xmincTx,下列为参数的限制条件 s.t. {Ax≤bAeq⋅x=beqlb≤x≤ub\text { ...

  4. 数学建模:线性回归模型的Python实现

    目录 一.一元线性回归 1.1 引子 1.2 求解系数a和截距b的方法:最小二乘法 1.3 案例解决 1.4 模型检验 二.多元线性回归 2.1 式子 2.2 核心代码 2.3 案例解决 注:如果您需 ...

  5. 数学建模——多元线性回归 /多元线性拟合 (工具:matlab)

    文章目录 一.多元线性回归是什么 二.样例及代码 第一步:画散点图进行分析 第二步:拟合 三.总结: 四.参考附录: 技巧篇

  6. 【数学建模】多元线性回归(PythonMatlab代码实现)

    目录 1 概述 2 算例1 2.1 算例 2.2 Python代码实现  2.3 结果 3 算例2  3.1 算例 3.2 Python代码 3.3 结果 4 算例3 4.1 算例 4.2 Pytho ...

  7. 2023美赛数学建模思路 - 案例:线性回归

    2023 美赛(美国大学生数学建模)思路解析 2023美赛ABCDEF赛题思路解析: https://blog.csdn.net/dc_sinor/article/details/128779911 ...

  8. 数学建模(8)多元线性回归模型

    1.因变量的分类 回归分析 三个重要作用: 数据分类 1.横截面数据: 同一时间段内 不同对象的数据 2.时间序列数据 同一对象不同时间内的数据 3.面板数据 横截面数据和时间序列数据的组合 一元线性 ...

  9. 多元线性回归模型-数学建模类-matlab详解

    如果本文有点小难理解的话,可以看看我之前的基础线性规划啥的,有lingo,matlab还有python 就不给大家放链接了,想看的话,点击头像即可!! 文章目录 (1)一元线性回归之旧轿车价格案例 ( ...

最新文章

  1. 图像识别:能在商业中如何运用
  2. java 操作txt文件
  3. 北斗导航 | 北斗卫星导航信号串行捕获算法MATLAB仿真(附源代码)
  4. 虚拟机磁盘扩容parted
  5. HTML Parser 源代码
  6. linux系统怎么清理指定日期的文件,Linux系统删除指定时间段文件的方法(2)
  7. 年味PSD素材|非常喜庆吉祥手工剪纸
  8. spring +springmvc+mybatis组合springmvc.xml文件配置
  9. jdbc mysql 存储过程执行失败_JDBC连接执行MySQL存储过程报权限错误
  10. dns服务器对网速有影响吗,更换DNS服务器可以提高网速吗?
  11. 解决Win10系统过期失效问题的经验总结
  12. android模拟器玩手游,电脑上玩手游PC安卓模拟器哪个好用?哪个手机模拟器最好...
  13. 《数据分析实战:基于EXCEL和SPSS系列工具的实践》一导读
  14. Introduction to Graph Neural Network翻译-第六章 图循环网络
  15. python图像特征提取与匹配_图像特征特点及其常用的特征提取与匹配方法
  16. 高中生计算机期刊,有方学者 高中生科研 ACM 学术会议发表 计算机方向
  17. Win7删除任务栏右下角Win10推送升级图标
  18. 工作经常用到的Mac软件整理
  19. 华为林成海:大数据让企业更智慧
  20. 有关libpcap和snort的

热门文章

  1. Java通过selenium+ashot对网页进行长截屏
  2. 软考高项论文写作要求有哪些
  3. 源代码安全管理解决方案
  4. matlab将二值图像与原图重叠_MATLAB:增加噪声,同时多次叠加噪声图和原图以及求平均图像(imnoise,imadd函数)...
  5. Mentor.Graphics.O-in v3.0 Linux 1DVD
  6. 【二维码教材】让学习更有趣
  7. 【51单片机】连接蓝牙模块(AT模式、解决返回乱码)
  8. linux c语言 utf8转gbk,GBK(gb2312)和UTF-8互转(转载)
  9. Axure RP9基本用法总结
  10. 微雪树莓派PICO笔记——4. ADC(模拟数字转换器)