本文长度为8619字,建议阅读15分钟
本文为你先容线性回归剖析。
常日在现实运用中,我们须要去理解一个变量是如何被一些其他变量所决定的。

回答这样的问题,须要我们去建立一个模型。一个模型便是一个公式之中,一个因变量(dependent variable)(须要预测的值)会随着一个或多个数值型的自变量(independent variable)(预测变量)而改变的。我们能够构建的最大略的模型之一便是线性模型,我们可以假设因变量和自变量间是线性的关系。回归分方法可用于预测数值型数据以及量化预测结果与其预测变量之间关系的大小及强度。本文将先容如何将回归方法运用到你自己的数据中,紧张先容学习内容:
用线性回归方法来拟合数据方程的基本统计原则和它们如何描述数据元素之间的关系。
如何利用R准备数据进行回归剖析,定义一个线性方程并估计回归模型。
一、理解回归回归紧张关注确定一个唯一的因变量(dependent variable)(须要预测的值)和一个或多个数值型的自变量(independent variable)(预测变量)之间的关系。我们首先假设因变量和自变量之间的关系遵照一条直线,即线性关系。
你可能还记得数学中因此类似于Y=aX + b的斜截式来定义直线的,个中,y是因变量,x是自变量。在这个公式中,斜率(slope)a表示每增加一个单位的x,直接会上升的高度;变量b表示X=0时y的值,它称为截距,由于它指定了直线穿过y轴时的位置。
回归方程利用类似于斜截式的形式对数据建立模型。该机器的事情便是确定a和b的值,从而使指定的直线最适宜用来反响所供应的x值和y值之间的关系,这可能不是完美的匹配,以是该机器也须要有一些方法来量化偏差范围,很快我们就会谈论这个问题。
回归剖析常日用来对数据元素之间的繁芜关系建立模型,用来估计一种处理方法对结果的影响和推断未来。一些详细运用案例包括:
根据种群和个体测得的特色,研究他们之间如何不同(差异性),从而用于不同领域的科学研究,如经济学、社会学、生理学、物理学和生态学;
量化事宜及其相应的因果关系,比如可运用于药物临床试验、工程安全检测、发卖研究等。
给定已知的规则,确定可用来预测未来行为的模型,比如用来预测保险赔偿、自然磨难的丢失、选举的结果和犯罪率等。
回归方法也可用于假设考验,个中包括数据是否能够表明原假设更可能是真还是假。回归模型对关系强度和同等性的估计供应了信息用于评估结果是否是由于有时性造成的。回归剖析是大量方法的一个综合体,险些可以运用于所有的机器学习任务。如果被限定只能选择单一的剖析方法,那么回归方法将是一个不错的选择。
本文只关注最基本的回归模型,即那些利用直线回归的模型,这叫做线性回归(linearregression)。如果只有一个单一的自变量,那便是所谓的大略线性回归(simple linear regression),否则,称为多元回归(multiple regression),这两个模型都假定因变量是连续的。对其他类型的因变量,纵然是分类任务,利用回归方法也是可能的。逻辑回归(logistic regression)可以用来对二元分类的结果建模;泊疏松布(Possion regression)可以用来对整型的计数数据建模。相同的基本原则适用于所有的回归方法,以是一旦理解了线脾气况下的回归方法,就可以研究其他的回归方法。
二、大略线性回归让我们从根本开始。记得高中时学过的直线方程吗?
Y=aX + b
a便是斜率,b便是y轴截距。大略而言,线性回归便是一系列技能用于找出拟合一系列数据点的直线。这也可以被认为是从数据之中反推出一个公式。我们会从最根本的一些规则开始,逐步增加数学繁芜度,匆匆进对这个观点理解的深入程度。但是在此之前,大概你会很好奇这里的a和b的值分别是多少。接下来,我们通过一个例子,利用软件R来为我们打算,我们的数据来源于一组真实的关于儿童的身高和年事,记录的数据。首先我们先直不雅观地显示年事与身高之间的关系,画出一张散点图,以年事age为横坐标,身高height为纵坐标,R的代码如下:
> age=18:29 #年事从18到29岁
> height=c(76.1,77,78.1,78.2,78.8,79.7,79.9,81.1,81.2,81.8,82.8,83.5)
> plot(age,height,main = \"大众身高与年事散点图\公众)
散点图结果如图1所示。
图1 身高与年事散点图
从图中可以不雅观察到,年事与身高基本在一条直线附近,可以认为两者具有线性关系,接下来建立回归模型,R代码如下:
> lm.reg <- lm(height~age) #建立回归方程
> lm.reg
> abline(lm.reg) #画出拟合的线性回归线
产生以下的输出:
Call:
lm(formula = height ~ age)
cients:
(Intercept) age
64.928 0.635
图2 身高与年事拟合直线
我们可以看到两个数值,“截距”和“斜率”。无论我们用什么软件来做线性回归(本文中的例子统一采取R措辞),它都会用某种形式来报告这两个数值。截距便是我们的公式中的b,斜率便是Y和自变量之间的倾斜程度。
总结起来,我们有一个数据集(不雅观测值)和一个模型(我们预测可以拟合数据的一个公式),我们还要去找出模型的参数(我们的最佳拟合模型中的参数a和b),这样,模型就可以“最佳”拟合数据了。我们希望用我们的数据来找出一个公式的参数,这样,这个公式也能够“最佳”拟合数据了。
1. 用模型来做预测
一旦你目测出最佳拟合直线并且读出a和b,大概你大概会说大意是这样的话:“这些数据遵照一个形式为Y = aX + b 的线性方程,个中a(斜率)= 某个数,b(y轴截距)= 其余某个数”。你大概记得,这个等式并非是确切的表述,由于很有可能你的数据并不是所有的都在一条完美的直线上,以是数据点之间可能会有不同程度的偏差。你的目测是主不雅观地考试测验把一些直觉上的总的偏差给降到最低。你做的事情便是直觉上的“线性回归”。你按照“我看起来很顺眼”的算法来估计a和b。我们会以这个直觉的行为为开端,并迅速带入一些重量级的机器,使得我们能够办理一些相称繁芜的问题。
在这个节点,你的实验室练习大概会哀求你为不在你的不雅观测值凑集以内的,某个给天命值的X,给出Y的估值。然后你就会用上面的等式,比如说a是2.1,b是0.3的等式Y = 2.1 X + 0.3作为你的模型,你把X输入进去,就会得到一个Y。这时候你便是在用你的模型去预测一个值,换句话说,你正在陈述这样的事实:我在实验之中并没有用这个X值,并且我的数据里也没有它,但是我想要知道这个X值是若何投射到Y轴上的。你大概会想要能够说出:“我的偏差会是某个数,以是我相信实际上的值会在[Y-偏差,Y+偏差]之间”。在这样的情形下,我们把变量X叫做“预测变量”,而Y的值是基于X的一个值来预测的,以是变量Y是“反应”。
2. 一个观点:总偏差
我们想要创造一个有关偏差,或者说我们的直线所给出的Y值与我们数据集中的真实Y值之间的差异的大略公式。除非我们的直线恰好穿过一个特定的点,否则,这个偏差是非零的。它可能是正值,也可能是负值。我们可以取这个偏差的平方(或者我们也可以取它的绝对值),然后我们把每个点的偏差项相加起来,然后得到直线和这个数据集的总偏差。在同一个实验的不同的样例凑集中,我们会得到一个不同的数据集,很有可能一条不同的直线,并且险些可以肯定一个不同的总偏差。我们所用的偏差的平方值是一个非常常用的总偏差形式,它便是“方差”。它用同样的办法来处理正值的偏差和负值的偏差,以是方差总是正值的。从现在开始我们会利用“方差”作为我们偏差的代表。总的来说,回归是我们所利用的任意的数据,最小化方差,来估测模型系数的手段。统计软件用多变量微积分这些专业技能来最小化偏差,并且给我们供应系数的估测值。对付回归方程回归系数的考验,考验一样平常用方差剖析或t考验,两者的考验结果是等价的。方差剖析紧张是针对全体模型的,而t考验是关于回归系数的。
对付上例中的回归方程,我们对模型进行考验,方差剖析的R代码如下:
> anova(lm.reg) #模型方差剖析
产生以下的输出:
Analysis of Variance Table
Response: height
Df Sum Sq Mean Sq F value Pr(>F)
age 1 57.655 57.655 879.99 4.428e-11
Residuals 10 0.655 0.066
---
Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1
由于P<0.05,于是在α=0.05水平下,本例的回归系数有统计学意义,身高和年事存在直线回归关系。
同理,对付上例中的回归方程,我们对模型进行回归系数的t考验,t考验的R代码如下:
> summary(lm.reg) #回归系数的t考验
产生以下的输出:
Call:
lm(formula = height ~ age)
Residuals:
Min 1Q Median 3Q Max
-0.27238 -0.24248 -0.02762 0.16014 0.47238
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 64.9283 0.5084 127.71 < 2e-16
age 0.6350 0.0214 29.66 4.43e-11
Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.256 on 10 degrees of freedom
Multiple R-squared: 0.9888,Adjusted R-squared: 0.9876
F-statistic: 880 on 1 and 10 DF, p-value: 4.428e-11
同方差剖析,由于P<0.05,于是在α=0.05水平下,本例的回归系数有统计学意义,身高和年事存在回归关系。
三、多元线性回归很自然地,如果Y依赖于多于一个变量的时候,会发生什么。这时候,数学上的普遍性的力量就显现了。这个大略的事理在多维的情形下同样适用。不仅仅是两个或者三个,还有更多更大的数值。如果我们想要构建现实数据的模型的话,二十个,三十个,乃至百来个自变量都毫无问题。但现在我们就看看Y,作为一个含有多个自变量的函数,例如含有来个自变量X1和X2的形式:
Y = a0 + a1X1 + a2X2
这里的a0 便是截距项,a1,a2 便是自变量X1 ,X2 的系数。 为了看看具有多个潜在的自变量的真实数据集,我们会不才一步利用详细的数据——医疗用度的数据。
多元线性回归优缺陷优点缺陷迄今为止,它是数值型数据建模最常用的方法对数据做出了很强的假设可适用于险些所有的数据该模型的形式必须由利用者事先指定供应了特色(变量)与结果之间关系的强度和大小的估计不能很好地处理缺失落数据只能处理数值特色,以是分类数据须要额外的处理须要一些统计知识来理解模型四、线性回归数据探索:医疗用度医疗用度很难估计,由于花费最高的情形是罕见的而且彷佛是随机的。但是有些情形对付部分特定的群体还是比较普遍存在的。例如,吸烟者比不吸烟者得肺癌的可能性更大,肥胖的人更有可能得心脏病。此剖析的目的是利用病人的数据,来预测这部分群体的均匀医疗用度。这些估计可以用来创建一个精算表,根据预期的治疗用度来设定年度保费价格是高一点还是低一点。我们想要去探索这些数据,考试测验从中得到一些对付建立线性回归模型有用处的见地。
我们会依据以下步骤完成,将来,我们还会对其他数据集座同样的事情。
1) 网络/不雅观察数据;
2) 探索和准备数据;
3) 基于数据演习模型;
4) 评估模型的性能;
5) 提高模型的性能。
第1步——网络/不雅观察数据
为了便于剖析,我们利用一个仿照数据集,该数据集包含了美国病人的医疗用度。而本文创建的这些数据利用了来自美国人口普查局(U.S. Census Bureau)的人口统计资料,因此可以大致反响现实天下的情形。
注:如果你想一起学习这个例子,那么你须要从Packt出版社的网站(https://github.com/stedy/Machine-Learning-with-R-datasets/find/master)下载insurance.csv文件,并将该文件保存到R的事情文件夹中。
该文件(insurance.csv)包含1338个案例,即目前已经登记过的保险操持受益者以及表示病人特点和历年操持计入的总的医疗用度的特色。这些特色是:
age: 这是一个整数,表示紧张受益者的年事(不包括超过64岁的人,由于他们一样平常由政府支付)。
sex: 这是保单持有人的性别,要么是male,要么是female。
bmi: 这是身体质量指数(Body Mass Index,BMI),它供应了一个判断人的体重相对付身高是过重还是偏轻的方法,BMI指数即是体重(公斤)除以身高(米)的平方。一个空想的BMI指数在18.5~24.9的范围内。
children: 这是一个整数,表示保险操持中所包括的孩子/受抚养者的数量。
smoker: 根据被保险人是否吸烟判断yes或者no。
region: 根据受益人在美国的居住地,分为4个地理区域:northeast、southeast、southwest和northwest。
如何将这些变量与已结算的医疗用度联系在一起是非常主要的。例如,我们可能认为老年人和吸烟者在大额医疗用度上是有较高的风险。与许多其他的方法不同,在回归剖析中,特色之间的关系常日由利用者指定而不是自动检测出来。
第2步——探索和准备数据
在R中,我们将利用read.csv()函数来加载用于剖析的数据。我们可以利用stringAsFactors = TRUE,由于将名义变量转换成因子变量是恰当的:
> insurance <- read.csv(\"大众insurance.csv\"大众,stringsAsFactors = TRUE)
函数str()确认该数据转换了我们之前所期望的形式:
> str(insurance)
产生以下的输出:
'data.frame':1338 obs. of 7 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 ...
既然因变量是changes,那么让我们一起来看一下它是如何分布的:
> summary(insurance$charges)
产生以下的输出:
Min. 1st Qu. Median Mean 3rd Qu. Max.
1122 4740 9382 13270 16640 63770
由于均匀数远大于中位数,表明保险用度的分布是右偏的,我们可以用直方图证明这一点。
> hist(insurance$charges)
图3 charges直方图
在我们的数据中,绝大多数的个人每年的用度都在0~15000美元,只管分布的尾部经由直方图的峰部后延伸得很远。即将面临的另一个问题便是回归模型须要每一个特色都是数值型的,而在我们的数据框中,我们有3个因子类型的特色。很快,我们会看到R中的线性回归函数如何处理我们的变量。
1.探索特色之间的关系——干系系数矩阵
在利用回归模型拟合数据之前,有必要确定自变量与因变量之间以及自变量之间是如何干系的。干系系数矩阵(correlation matrix)供应了这些关系的快速概览。给定一组变量,它可以为每一对变量之间的关系供应一个干系系数。
为insurance数据框中的4个数值型变量创建一个干系系数矩阵,可以利用cor()命令:
> 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
该矩阵中中的干系系数不是强干系的,但还是存在一些显著的关联。例如,age和bmi显示出中度干系,这意味着随着年事(age)的增长,身体质量指数(bmi)也会增加。此外,age和charges,bmi和charges,以及children和charges也都呈现处中度干系。当我们建立终极的回归模型时,我们会只管即便更加清晰地梳理出这些关系。
2.可视化特色之间的关系——散点图矩阵
或许通过利用散点图,可视化特色之间的关系更有帮助。虽然我们可以为每个可能的关系创建一个散点图,但对付大量的特色,这样做可能会变得比较繁琐。
另一种方法便是创建一个散点图矩阵(scatterplot matrix),便是大略地将一个散点图凑集排列在网格中,里边包含着相互紧邻在一起的多种成分的图表。它显示了每个成分相互之间的关系。斜对角线上的图并不符合这个形式。为何不符合呢?在这个语境下,这意味着找到某个事物和自身的关系,而我们正在考试测验确定某些变量对付另一个变量的影响。默认的R中供应了函数pairs(),该函数产生散点图矩阵供应了基本的功能。对医疗用度数据之中的四个变量的散点图矩阵如下图所示。R代码如下:
pairs(insurance[c(\"大众age\公众,\"大众bmi\"大众,\"大众children\"大众,\"大众charges\公众)])
图4 散点图矩阵
与干系系数矩阵一样,每个行与列的交叉点所在的散点图表示其所在的行与列的两个变量的干系关系。由于对角线上方和下方的x轴和y轴是交流的,以是对角线上方的图和下方的图是互为转置的。
你把稳到这些散点图中的一些图案了吗?只管有一些看上去像是随机密布的点,但还是有一些彷佛呈现了某种趋势。age和charges之间的关系呈现出几条相对的直线,而bmi和charges的散点图构成了两个不同的群体。
如果我们对散点图添加更多的信息,那么它就会更加有用。一个改进后的散点图矩阵可以用psych包中的pairs.panels()函数来创建。R中如果你还没有安装这个包,那么可以输入install.packages(\"大众psych\"大众)命令将其安装到你的系统中,并利用library(psych)命令加载它。R代码及散点图矩阵如下:
pairs.panels(insurance[c(\"大众age\"大众,\"大众bmi\"大众,\"大众children\"大众,\"大众charges\"大众)])
图5 散点图矩阵
在对角线的上方,散点图被干系系数矩阵所取代。在对角线上,直方图描述了每个特色的数值分布。末了,对角线下方的散点图带有额外的可视化信息。
每个散点图中呈椭圆形的工具称为干系椭圆(correlation ellipse),它供应了一种变量之间是如何密切干系的可视化信息。位于椭圆中央的点表示x轴变量的均值和y轴变量的均值所确定的点。两个变量的干系性由椭圆的形状所表示,椭圆越被拉伸,其干系性越强。一个险些类似于圆的完美的椭圆形,如bmi和children,表示一种非常弱的干系性。
散点图中绘制的曲线称为局部回归平滑(loess smooth),它表示x轴和y轴变量之间的一样平常关系。最好通过例子来理解。散点图中age和childr的曲线是一个颠倒的U,峰值在中年附近,这意味着案例中年事最大的人和年事最小的人比年龄大约在中年附近的人拥有的孩子更少。由于这种趋势是非线性的,以是这一创造已经不能单独从干系性推断出来。另一方面,对付age和bmi,局部回归光滑是一条倾斜的逐步上升的线,这表明BMI会随着年事(age)的增长而增加,从干系系数矩阵中我们也可推断出该结论。
第3步——基于数据演习模型
用R对数据拟合一个线性回归模型时,可以利用lm()函数。该函数包含在stats添加包中,当安装R时,该包已经被默认安装并在R启动时自动加载好。利用R拟合称为ins_model的线性回归模型,该模型将6个自变量与总的医疗用度联系在一起。代码如下:
ins_model <- lm(charges~age+children+bmi+sex+smoker+region,data=insurance)
建立模型后,只需输入该模型工具的名称,就可以看到估计的a系数:
> ins_model
产生以下的输出:
Call:
lm(formula = charges ~ ., data = insurance)
Coefficients:
(Intercept) age sexmale
-11938.5 256.9 -131.3
bmi children smokeryes
339.2 475.5 23848.5
regionnorthwest regionsoutheast regionsouthwest
-353.0 -1035.0 -960.1
你可能把稳到,在我们的模型公式中,我们仅指定了6个变量,但是输出时,除了截距项外,却输出了8个系数。之以是发生这种情形,是由于lm()函数自动将一种称为虚拟编码(dummy coding)的技能运用于模型所包含的每一个因子类型的变量中。当添加一个虚拟编码的变量到回归模型中时,一个种别总是被打消在外作为参照种别。然后,估计的系数便是相对付参照种别阐明的。在我们的模型中,R自动保留sexfemale、smokerno和regionnortheast变量,使东北地区的女性非吸烟者作为参照组。因此,相对付女性来说,男性每年的医疗用度要少$131.30;吸烟者均匀多花费$23848.50,远超过非吸烟者。此外,模型中其余3个地区的系数是负的,这意味着东北地区方向于具有最高的均匀医疗用度。
线性回归模型的结果是合乎逻辑的。高龄、吸烟和肥胖每每与其他康健问题联系在一起,而额外的家庭成员或者受抚养者可能会导致就诊次数增加和预防保健(比如接种疫苗、每年体检)用度的增加。然而,我们目前并不知道该模型对数据的拟合有多好?我们将不才一部分回答这个问题。
第4步——评估模型的性能
通过在R命令行输入ins_model,可以得到参数的估计值,它们见告我们关于自变量是如何与因变量干系联的。但是它们根本没有见告我们用该模型来拟合数据有多好。为了评估模型的性能,可以利用summary()命令来剖析所存储的回归模型:
> summary(ins_model)
产生以下的输出:
Call:
lm(formula = charges ~ ., data = insurance)
Residuals:
Min 1Q Median 3Q Max
-11304.9 -2848.1 -982.1 1393.9 29992.8
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -11938.5 987.8 -12.086 < 2e-16
age 256.9 11.9 21.587 < 2e-16
sexmale -131.3 332.9 -0.394 0.693348
bmi 339.2 28.6 11.860 < 2e-16
children 475.5 137.8 3.451 0.000577
smokeryes 23848.5 413.1 57.723 < 2e-16
regionnorthwest -353.0 476.3 -0.741 0.458769
regionsoutheast -1035.0 478.7 -2.162 0.030782
regionsouthwest -960.0 477.9 -2.009 0.044765
---
Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6062 on 1329 degrees of freedom
Multiple R-squared: 0.7509,Adjusted R-squared: 0.7494
F-statistic: 500.8 on 8 and 1329 DF, p-value: < 2.2e-16
开始时,summary()的输出可能看起来令人费解,但基本事理是很随意马虎节制的。与上述输召盘用标签编号所表示的一样,该输出为评估模型的性能供应了3个关键的方面:
1) Residuals(残差)部分供应了预测偏差的紧张统计量;
2) 星号(例如,)表示模型中每个特色的预测能力;
3) 多元R方值(也称为剖断系数)供应度量模型性能的办法,即从整体上,模型能多大程度阐明因变量的值。
给定前面3个性能指标,我们的模型表现得相称好。对付现实天下数据的回归模型,R方值相称低的情形并不少见,因此0.75的R方值实际上是相称不错的。考虑到医疗用度的性子,个中有些偏差的大小是须要关注的,但并不令人吃惊。如下节所述,我们会以略微不同的办法来指定模型,从而提高模型的性能。
第5步——提高模型的性能
正如前面所提到的,回归模型常日会让利用者来选择特色和设定模型。因此,如果我们有关于一个特色是如何与结果干系的学科知识,我们就可以利用该信息来对模型进行设定,并可能提高模型的性能。
1. 模型的设定——添加非线性关系
在线性回归中,自变量和因变量之间的关系被假定为是线性的,然而这不一定是精确的。例如,对付所有的年事值来讲,年事对医疗用度的影响可能不是恒定的;对付最老的人群,治疗可能会过于昂贵。
2. 转换——将一个数值型变量转换为一个二进制指标
假设我们有一种预感,一个特色的影响不是累积的,而是当特色的取值达到一个给定的阈值后才产生影响。例如,对付在正常体重范围内的个人来说,BMI对医疗用度的影响可能为0,但是对付肥胖者(即BMI不低于30)来说,它可能与较高的用度密切干系。我们可以通过创建一个二进制指标变量来建立这种关系,即如果BMI大于即是30,那么设定为1,否则设定为0。
注:如果你在决定是否要包含一个变量时碰着困难,一种常见的做法便是包含它并考验其显著性水平。然后,如果该变量在统计上不显著,那么就有证据支持在将来打消该变量。
3. 模型的设定——加入相互浸染的影响
到目前为止,我们只考虑了每个特色对结果的单独影响(贡献)。如果某些特色对因变量有综合影响,那么该怎么办呢?例如,吸烟和肥胖可能分别都有有害的影响,但是假设它们的共同影响可能会比它们每一个单独影响之和更糟糕是合理的。
当两个特色存在共同的影响时,这称为相互浸染(interaction)。如果疑惑两个变量相互浸染,那么可以通过在模型中添加它们的相互浸染来考验这一假设,可以利用R中的公式语法来指定相互浸染的影响。为了表示肥胖指标(bmi30)和吸烟指标(smoker)的相互浸染,可以这样的形式写一个公式:charge~bmi30smoker。
4. 全部放在一起——一个改进的回归模型
基于医疗用度如何与患者特点联系在一起的一点学科知识,我们采取一个我们认为更加精确的专用的回归公式。下面就总结一下我们的改进:
增加一个非线性年事项
为肥胖创建一个指标
指定肥胖与吸烟之间的相互浸染
我们将像之前一样利用lm()函数来演习模型,但是这一次,我们将添加新布局的变量和相互浸染项:
> ins_model2 <-lm(charges~age+age2+children+bmi+sex+bmi30smoker+region,data=insurance)
接下来,我们概述结果:
> summary(ins_model2)
产生以下的输出:
Call:
lm(formula = charges ~ age + age2 + children + bmi + sex + bmi30
smoker + region, data = insurance)
Residuals:
Min 1Q Median 3Q Max
-17296.4 -1656.0 -1263.3 -722.1 24160.2
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 134.2509 1362.7511 0.099 0.921539
age -32.6851 59.8242 -0.546 0.584915
age2 3.7316 0.7463 5.000 6.50e-07
children 678.5612 105.8831 6.409 2.04e-10
bmi 120.0196 34.2660 3.503 0.000476
sexmale -496.8245 244.3659 -2.033 0.042240
bmi30 -1000.1403 422.8402 -2.365 0.018159
smokeryes 13404.6866 439.9491 30.469 < 2e-16
regionnorthwest -279.2038 349.2746 -0.799 0.424212
regionsoutheast -828.5467 351.6352 -2.356 0.018604
regionsouthwest -1222.6437 350.5285 -3.488 0.000503
bmi30:smokeryes 19810.7533 604.6567 32.764 < 2e-16
---
Signif. codes: 0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4445 on 1326 degrees of freedom
Multiple R-squared: 0.8664,Adjusted R-squared: 0.8653
F-statistic: 781.7 on 11 and 1326 DF, p-value: < 2.2e-16
剖析该模型的拟合统计量有助于确定我们的改变是否提高了回归模型的性能。相对付我们的第一个模型,R方值从0.75提高到约0.87,我们的模型现在能阐明医疗用度变革的87%。此外,我们关于模型函数形式的理论彷佛得到了验证,高阶项age2在在统计上是显著的,肥胖指标bmi30也是显著的。肥胖和吸烟之间的相互浸染表明了一个巨大的影响,除了单独吸烟增加的超过$13404的用度外,肥胖的吸烟者每年要其余花费$19810,这可能表明吸烟会加剧(恶化)与肥胖有关的疾病。