相较于一元线性回归,多元线性回归是用来确定2个或2个以上变量间的统计分析方法,其基本的分析方法和一元线性回归是类似的。

优点:

1.可适用于几乎所有的数据;
2.提供了特征与结果之间关系的强度和大小的估计。

缺点:

1.对数据做出了很强的假设;
2.模型形式必须事先指定;
3.不能很好地处理缺失数据。

基本步骤:对选取的多元数据集定义数学模型,进行参数估计,对参数进行显著性检验、残差分析、异常点检验,最后确定回归方程进行模型预测。特别地,对于多元回归方程有一项很重要的操作就是自变量的优化,要挑选出相关性最显著的自变量,同时去除不显著的自变量。

接下来以医疗费用为例,通过分析病人的数据,来预测这部分群体的平均医疗费用,从而来为年度保费价格的设定提供参考。


(一)收集和观察数据

数据来源:https://github.com/stedy/Machine-Learning-with-R-datasets/find/master里的insurance.csv文件,它是美国人口普查局(U.S. Census Bureau)的人口统计资料。

文件包含1338个案例,即目前已经登记过的保险计划受益者以及表示病人特点和历年计划计入的总医疗费用的特征。这些特征分别是:

  • age:整数,受益者的年龄(不包括超过64岁的人,因为这部分人群的费用由政府承担);
  • sex:保单持有人的性别,male或者female;
  • bmi:身体质量指数(Body Mass Index, BMI),它等于体重(公斤)除以身高(米)的平方,理想的BMI指数在18.5和24.9之间;
  • children:整数,保险计划中包括的孩子或者受抚养者的数量;
  • smoker:被保险人是否吸烟,yes或者no;
  • region:根据受益人在美国的居住地,分为4个地理区域,分别是northeast, southeast, southwest和northwest。

如何将这些变量与已结算的医疗费用联系起来很重要,在回归分析中,特征之间的关系通常是由使用者指定,而不是自动检测出来的。


(二)探索和准备数据

> insurance <- read.csv("insurance.csv", stringsAsFactors = T)
> str(insurance)'data.frame':   1338 obs. of  9 variables:$ age     : int  19 18 28 33 32 31 46 37 37 60 ...$ sex     : Factor w/ 2 levels "female","male": 1 2 2 2 2 1 1 1 2 1 ...$ bmi     : num  27.9 33.8 33 22.7 28.9 ...$ children: int  0 1 3 0 0 0 1 3 2 0 ...$ smoker  : Factor w/ 2 levels "no","yes": 2 1 1 1 1 1 1 1 1 1 ...$ region  : Factor w/ 4 levels "northeast","northwest",..: 4 3 3 2 2 3 3 2 1 2 ...$ charges : num  16885 1726 4449 21984 3867 ...$ age2    : num  361 324 784 1089 1024 ...$ bmi30   : num  0 1 1 0 0 0 1 0 0 0 ...
  • read.csv()函数读入数据,用stringsAsFactors = T将名义变量转换成因子变量;
  • str()函数查看数据结构,确认各个变量的读取是否有异常;
  • summary()函数查看charges的分布情况;
  • hist()函数可得到数据分布的直方图,表明保险费用的分布是右偏的,其平均数大于中位数,同时我们可以知道绝大数的人每年的费用在0到15000美元之间。

接下来面临的一个问题是如何处理因子类型的特征,因为回归模型需要每一个特征值都是数值型的。

2.1 探索特征之间的关系(相关系数矩阵)

在使用回归模型拟合数据之前,有必要确定自变量与因变量之间以及自变量之间是如何相关的。相关系数矩阵(correlation matrix)可以为每一对变量之间的关系提供一个相关系数。

> cor(insurance[c("age", "bmi", "children", "charges")])age       bmi   children    charges
age      1.0000000 0.1092719 0.04246900 0.29900819
bmi      0.1092719 1.0000000 0.01275890 0.19834097
children 0.0424690 0.0127589 1.00000000 0.06799823
charges  0.2990082 0.1983410 0.06799823 1.00000000
  • cor()函数为insurance中的4个数值型变量创建了一个相关系数矩阵。

相关系数矩阵中存在着一些显著的相关,例如age和bmi,这就说明随着年龄的增长,身体质量指数也会增加。此外,age和charges、bmi和charges以及children和charges也都呈现出相关性。

2.2 可视化特征之间的关系(散点图矩阵)

散点图矩阵(sactterplot matrix)是一个简单地将散点图集合排列在网格中,并且包含相互紧邻的多种因素的图表。

> pairs(insurance[c("age", "bmi", "children", "charges")])
  • pairs()函数可用于绘制散点图矩阵。

在散点图矩阵中,每个行和列的交叉点所在的散点图表示其所在的行与列的两个变量的相关关系,在对角线上方的图和下方的图是互为转置的。大部分的散点图看上去像是随机密布的点,但还是有一些会呈现出某种趋势,例如age和charges之间的关系呈现出几条相对的直线,而bmi和charges则构成了两个不同的群体。

> pairs.panels(insurance[c("age", "bmi", "children", "charges")])
  • pairs.panels()函数属于R包psych,其产生的散点图矩阵有着更多的信息。

对角线的上方表示的是相关系数矩阵,对角线上的直方图描绘了每个特征的数值分布,对角线下方的散点图带有更多的可视化信息。

散点图中的椭圆被称为相关椭圆(correlation ellipse),它提供了一种变量之间是如何密切相关的可视化信息。相关椭圆中心的点表示x轴变量的均值和y轴变量的均值。两个变量的相关性由椭圆的形状所表示,椭圆越被拉伸,其相关性越强。若形状近似于圆,如bmi和children,则表示一种非常弱的相关性。

散点图中的曲线是局部回归平滑(loess smooth)曲线,它表示x轴和y轴变量之间的一般关系。例如,对于age和bmi而言,局部回归平滑曲线是一条倾斜的逐步上升的线,这说明bmi会随着age的增长而增长,这个结论从相关系数矩阵中也能得出。


(三)基于数据训练模型
> ins_model <- lm(charges ~ age + children + bmi + sex + smoker + region, data = insurance)
> ins_modelCall:
lm(formula = charges ~ age + children + bmi + sex + smoker + region, data = insurance)Coefficients:(Intercept)              age         children              bmi          sexmale        smokeryes  regionnorthwest  -11938.5            256.9            475.5            339.2           -131.3          23848.5           -353.0
regionsoutheast  regionsouthwest  -1035.0           -960.1  
  • lm()函数用于对数据拟合线性回归模型;
  • 直接输入模型对象名称ins_model,就可以输出估计的系数。

需要注意的是,我们在模型公式中仅仅指定了6个变量,但是却输出8个系数(除截距外)。这是因为lm()函数自动将虚拟编码(dummy coding)应用于模型所包含的每一个因子类型的变量中。当添加一个虚拟编码的变量到回归模型中时,一个类别总是被排除在外作为参照类别,然后估计的系数就是相对于参照类别解释的。在我们的模型中,自动保留了sexfemale、smokerno和regionnortheast变量,使东北地区的女性非吸烟者作为参照组。因此,相对于女性来说,男性每年的医疗费用要少131.30美元,吸烟者平均多花费23848.50美元,远远超过非吸烟者。此外,模型中另外3个地区的系数是负的,这意味着东北地区倾向于具有最高的平均医疗费用。

线性回归模型的结果是合乎逻辑的,因为高龄、吸烟和肥胖往往与其它健康问题联系在一起,而额外的家庭成员或者受抚养者可能会导致就诊次数增加和预防保健费用的增加。


至此,我们已经得到了回归模型,但是目前并不知道该模型对数据的拟合有多好。下一篇再接着讲解吧!

多元线性回归-Part1(以医疗费用为例)相关推荐

  1. 多元线性回归-Part2(以医疗费用为例)

    在Part1中,我们已经根据保险受益者的数据拟合出线性回归模型,接下来要做的是评估和提高模型的性能. (四)评估模型的性能 > summary(ins_model) ### summary()给 ...

  2. UA MATH571A R语言回归分析实践 多元回归1 医疗费用的决定

    UA MATH571A R语言回归分析实践 多元回归1 医疗费用 基础回归分析 这一讲开始讨论多元回归,这里选择的例子是寻找家庭医疗费用的决定因素.家庭医疗费用由哪些因素决定是卫生经济学.保险精算等领 ...

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

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

  4. excel计算二元线性回归_用人话讲明白梯度下降Gradient Descent(以求解多元线性回归参数为例)...

    文章目录 1.梯度 2.多元线性回归参数求解 3.梯度下降 4.梯度下降法求解多元线性回归 梯度下降算法在机器学习中出现频率特别高,是非常常用的优化算法. 本文借多元线性回归,用人话解释清楚梯度下降的 ...

  5. python实现多元线性回归,以2022数模国赛为例(实战必看,附源代码)

    回归分析是确定变量间依赖关系的一种统计分析方法,属于监督学习方法.由变量的不同可以分为一元线性回归和多元线性回归 接下来以多元线性回归为例介绍 当待确定的变量超过一个时,就需要使用多元线性回归算法,下 ...

  6. 傻瓜攻略(九)——MATLAB实现简单的多元线性回归(以炼钢转炉炉龄问题为例)

    1.多元线性回归 回归分析(Regression Analysis)是一种统计学上分析数据的方法,目的在于了解两个或多个变量间是否相关.相关方向与强度,并建立数学模型以便观察特定变量来预测研究者感兴趣 ...

  7. UA MATH571A R语言回归分析实践 多元回归2 医疗费用的决定

    UA MATH571A R语言回归分析实践 多元回归2 医疗费用的决定 系数的推断与模型预测 模型诊断 这一讲展示一下一元回归中的模型诊断的手段怎么用在多元回归中,同时介绍一下多元回归做推断和预测的方 ...

  8. 大数据(041)机器学习【多元线性回归实例】

    一.前言 保险公司对个人投保时或根据历史数据生成的模型来计算个人保费,那么本次我们就以这个模型的求解过程为例来实践下多元线性回归. 二.数据&简单分析 我们已经获取到了一些数据(模拟数据),文 ...

  9. 回归方程的拟合优度检验_计量经济学第四讲(多元线性回归模型:基本假定,参数估计,统计检验)...

    第三章.经典单方程计量经济学模型:多元线性回归模型 3.1多元线性回归模型及其基本假定 3.1.1多元回归模型及其表示 解释变量至少有两个的线性回归模型,一般形式为 如果不作说明, 是不包括常数项的解 ...

最新文章

  1. Hello,Expression Blend 4 (含Demo教程和源码)
  2. AAAI2020录用论文汇总(三)
  3. 计算机系统结构相关技术,计算机系统结构第1章技术总结.pptx
  4. java图形界面重写坐标_重写自由软件和计算机图形的历史
  5. 转正答辩ppt_如何顺利完成转正答辩?
  6. springBoot springSecurty: x-frame-options deny禁止iframe调用
  7. 二分法02:寻找第一个和最后一个的满足条件的位置
  8. logisim软件使用学习
  9. AI算法工程师 | 01人工智能基础-快速入门
  10. 打开SVN server图形化管理界面
  11. java 验证码点击刷新,java验证码及其刷新
  12. matlab:matlab神经网络工具的使用
  13. Echoprint系列--编译
  14. php手机界面设计,浅析手机界面设计
  15. 广州车展开幕:超定律智能纯电SUV埃安Y全球首发
  16. python调整图片亮度_python 调整图片亮度的示例
  17. SDIO - 1bit / 4bit V2.0 协议深度解析-简单易懂协议详解
  18. Java 科学计数法
  19. 用C语言打印一个等腰三角形
  20. Python篇之编译py文件为pyc文件的方法总结

热门文章

  1. SWUST 2489 上决欺负HZF
  2. 软考高项(风险分析 定量风险分析 蒙特卡洛分析 )
  3. RK3399国产自主4K智能会议终端解决方案
  4. 如果你请求返回是502, 这个时候怎么定位这个问题?
  5. 计算机组成原理18-CPU的结构和指令周期
  6. C语言exit、abort、return的区别
  7. 游戏道具出现概率的算法
  8. CKS考试2022年最新经验分享
  9. 微信小程序开发笔记3——文字的查看更多的效果
  10. R语言计算带有绝对值符号的函数偏导并输出偏导结果