如何在R语言中使用Logistic回归模型中不可使用的模型

总结:基于R实现logistic回归模型
1 基于R软件的logistic回归模型建模
&& 百度文库
2 精确Logistic回归的R语言实现
Logistic回归(logistic
regression)属于概率型非线性回归,是分析反应变量为独立分类资料的常用统计分析方法,由于对资料的正态性和方差齐性不做要求、对自变量类型也不做要求等,使得Logistic回归模型在医学研究各个领域被广泛用。Logistic回归的基本方法是极大似然方法,其前提是样本较大。但在样本量较小、数据结构较偏时,其结果会不可靠甚至无法求解。
精确Logistic回归(Exact logistic
regression)则可以用来解决这一问题,该方法通过建立条件似然函数,进一步求出参数的充分统计量的分布函数。随着计算方法的发展和优化,也出现了使用马尔可夫链蒙特卡罗算法来模拟精确Logistic回归。R语言中的elrm包就可以实现这种算法。
本例用到的数据来自elrm包的drugDat数据
sex treatment recovered n
1 1 1 16 27
3 1 0 13 32
2 0 1 10 19
4 0 0 7 21
使用elrm命令建立精确Logistic回归模型
drug.elrm=elrm(formula=recovered/n~sex+treatment,interest=~sex+treatment,iter=100000,burnIn=1000,dataset=drugDat)
结果显示如下:
estimate p-value p-value_se mc_size
NA 0.13083
95% Confidence Intervals for Parameters
-0..129768
treatment -0..129493
Logistic回归(logistic
regression)属于概率型非线性回归,是分析反应变量为独立分类资料的常用统计分析方法,由于对资料的正态性和方差齐性不做要求、对自变量类型也不做要求等,使得Logistic回归模型在医学研究各个领域被广泛用。Logistic回归的基本方法是极大似然方法,其前提是样本较大。但在样本量较小、数据结构较偏时,其结果会不可靠甚至无法求解。
精确Logistic回归(Exact logistic
regression)则可以用来解决这一问题,该方法通过建立条件似然函数,进一步求出参数的充分统计量的分布函数。随着计算方法的发展和优化,也出现了使用马尔可夫链蒙特卡罗算法来模拟精确Logistic回归。R语言中的elrm包就可以实现这种算法。
本例用到的数据来自elrm包的drugDat数据
sex treatment recovered n
1 1 1 16 27
3 1 0 13 32
2 0 1 10 19
4 0 0 7 21
使用elrm命令建立精确Logistic回归模型
drug.elrm=elrm(formula=recovered/n~sex+treatment,interest=~sex+treatment,iter=100000,burnIn=1000,dataset=drugDat)
结果显示如下:
estimate p-value p-value_se mc_size
NA 0.13083
95% Confidence Intervals for Parameters
-0..129768
treatment -0..129493
Logistic回归(logistic
regression)属于概率型非线性回归,是分析反应变量为独立分类资料的常用统计分析方法,由于对资料的正态性和方差齐性不做要求、对自变量类型也不做要求等,使得Logistic回归模型在医学研究各个领域被广泛用。Logistic回归的基本方法是极大似然方法,其前提是样本较大。但在样本量较小、数据结构较偏时,其结果会不可靠甚至无法求解。
精确Logistic回归(Exact logistic
regression)则可以用来解决这一问题,该方法通过建立条件似然函数,进一步求出参数的充分统计量的分布函数。随着计算方法的发展和优化,也出现了使用马尔可夫链蒙特卡罗算法来模拟精确Logistic回归。R语言中的elrm包就可以实现这种算法。
本例用到的数据来自elrm包的drugDat数据
sex treatment recovered n
1 1 1 16 27
3 1 0 13 32
2 0 1 10 19
4 0 0 7 21
使用elrm命令建立精确Logistic回归模型
drug.elrm=elrm(formula=recovered/n~sex+treatment,interest=~sex+treatment,iter=100000,burnIn=1000,dataset=drugDat)
结果显示如下:
estimate p-value p-value_se mc_size
NA 0.13083
95% Confidence Intervals for Parameters
-0..129768
treatment -0..129493
&Logistic回归(logistic
regression)属于概率型非线性回归,是分析反应变量为独立分类资料的常用统计分析方法,由于对资料的正态性和方差齐性不做要求、对自变量类型也不做要求等,使得Logistic回归模型在医学研究各个领域被广泛用。Logistic回归的基本方法是极大似然方法,其前提是样本较大。但在样本量较小、数据结构较偏时,其结果会不可靠甚至无法求解。
精确Logistic回归(Exact logistic
regression)则可以用来解决这一问题,该方法通过建立条件似然函数,进一步求出参数的充分统计量的分布函数。随着计算方法的发展和优化,也出现了使用马尔可夫链蒙特卡罗算法来模拟精确Logistic回归。R语言中的elrm包就可以实现这种算法。
本例用到的数据来自elrm包的drugDat数据
sex treatment recovered n
1 1 1 16 27
3 1 0 13 32
2 0 1 10 19
4 0 0 7 21
使用elrm命令建立精确Logistic回归模型
drug.elrm=elrm(formula=recovered/n~sex+treatment,interest=~sex+treatment,iter=100000,burnIn=1000,dataset=drugDat)
结果显示如下:
estimate p-value p-value_se mc_size
joint&&&&&&&&&&
NA 0.13083&&&
0.00183&& 99000
sex&&&&&&&
0.52727&&&
0.00954&&&
treatment& 0.84871
0.07439&&&
0.00296&& 13389
95% Confidence Intervals for Parameters
&&&&&&&&&&&&&&
-0..129768
treatment -0..129493
3 R语言基础入门之六:Logistic回归
本文用例来自于John Maindonald所著的《Data Analysis and Graphics Using
R》一书,其中所用的数据集是anesthetic,数据集来自于一组医学数据,其中变量conc表示麻醉剂的用量,move则表示手术病人是否有所移动,而我们用nomove做为因变量,因为研究的重点在于conc的增加是否会使nomove的概率增加。
首先载入数据集并读取部分文件,为了观察两个变量之间关系,我们可以利cdplot函数来绘制条件密度图.
library(DAAG)
head(anesthetic)
cdplot(factor(nomove)~conc,data=anesthetic,main='条件密度图',ylab='病人移动',xlab='麻醉剂量')
从图中可见,随着麻醉剂量加大,手术病人倾向于静止。下面利用logistic回归进行建模,得到intercept和conc的系数为-6.47和5.57,由此可见麻醉剂量超过1.16(6.47/5.57)时,病人静止概率超过50%。
anes1=glm(nomove~conc,family=binomial(link='logit'),data=anesthetic)
summary(anes1)
上面的方法是使用原始的0-1数据进行建模,即每一行数据均表示一个个体,另一种是使用汇总数据进行建模,先将原始数据按下面步骤进行汇总
anestot=aggregate(anesthetic[,c('move','nomove')],by=list(conc=anesthetic$conc),FUN=sum)
anestot$conc=as.numeric(as.character(anestot$conc))
anestot$total=apply(anestot[,c('move','nomove')],1,sum)
anestot$prop=anestot$nomove/anestot$total
得到汇总数据anestot如下所示
& conc move nomove
total&&&&&
7 0.1428571
5 0.2000000
6 0.6666667
6 0.6666667
4 1.0000000
2 1.0000000
对于汇总数据,有两种方法可以得到同样的结果,一种是将两种结果的向量合并做为因变量,如anes2模型。另一种是将比率做为因变量,总量做为权重进行建模,如anes3模型。这两种建模结果是一样的。
anes2=glm(cbind(nomove,move)~conc,family=binomial(link='logit'),data=anestot)
anes3=glm(prop~conc,family=binomial(link='logit'),weights=total,data=anestot)
根据logistic模型,我们可以使用predict函数来预测结果,下面根据上述模型来绘图
x=seq(from=0,to=3,length.out=30)
y=predict(anes1,data.frame(conc=x),type='response')
plot(prop~conc,pch=16,col='red',data=anestot,xlim=c(0.5,3),main='Logistic回归曲线图',ylab='病人静止概率',xlab='麻醉剂量')
lines(y~x,lty=2,col='blue')
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。苹果/安卓/wp
积分 175, 距离下一级还需 85 积分
权限: 自定义头衔
道具: 涂鸦板, 彩虹炫, 雷达卡, 热点灯, 显身卡, 匿名卡, 金钱卡下一级可获得
权限: 签名中使用图片道具: 变色卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 变色卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
开心签到天数: 4 天连续签到: 1 天[LV.2]偶尔看看I
如何用R软件做Logistic多元回归分析与画图
这个是要编程的吧~
没用过这个R
在百度里面搜,有的
logit&-lm(y~x1+x2+x3+x4,data=,family=binomial)
summary(logit)复制代码筛选变量的话可以用step(),drop1()
做图我不会...
热心帮助其他会员
总评分:&学术水平 + 1&
热心指数 + 1&
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师用R语言做数据分析——Logistic回归
我的图书馆
用R语言做数据分析——Logistic回归
当通过一系列连续型或类别型预测变来预测二值型结果变量时,Logistic回归是一个非常有用的工具。以AER包中的数据框Affairs为例,我们将通过探究婚外情的数据来阐述Logistic回归的过程。Affairs数据集从601个参与者身上收集了9个变量,包括一年来婚外私通的频率以及参与者性别、年龄、婚龄、是否有小孩、宗教信仰程度(5分制,1分表示反对,5分表示非常信仰)、学历、职业,还有对婚姻的I我评分(5分制,1表示非常不幸福,5表示非常幸福)。我们先看一些描述性的统计信息:> data(Affairs, package = 'AER')> summary(Affairs)affairs gender age yearsmarried children religiousness educationMin. : 0.000 female:315 Min. :17.50 Min. : 0.125 no :171 Min. :1.000 Min. : 9.001st Qu.: 0.000 male :286 1st Qu.:27.00 1st Qu.: 4.000 yes:430 1st Qu.:2.000 1st Qu.:14.00Median : 0.000 Median :32.00 Median : 7.000 Median :3.000 Median :16.00Mean : 1.456 Mean :32.49 Mean : 8.178 Mean :3.116 Mean :16.173rd Qu.: 0.000 3rd Qu.:37.00 3rd Qu.:15.000 3rd Qu.:4.000 3rd Qu.:18.00Max. :12.000 Max. :57.00 Max. :15.000 Max. :5.000 Max. :20.00occupation ratingMin. :1.000 Min. :1.0001st Qu.:3.000 1st Qu.:3.000Median :5.000 Median :4.000Mean :4.195 Mean :3.9323rd Qu.:6.000 3rd Qu.:5.000Max. :7.000 Max. :5.000> table(Affairs$affairs)0 1 2 3 7 12451 34 17 19 42 38从这些统计信息可以看到,52%的调查对象是女性,72%的人有孩子,样本年龄的中位数为32岁。对于响应变量,72%的调查对象表示过去一年中没有婚外情(451/601),而婚外情最多次数为12(占了6%)。我们感兴趣的是二值型结果(有过一次婚外情/没有婚外情),以下代码可以将affairs转化为二值型因子ynaffair。> Affairs$ynaffair[Affairs$affairs == 0] > Affairs$ynaffair > table(Affairs$ynaffair)No Yes451 150该二值型因子现在可作为Logistic回归的结果变量:> fit.full > summary(fit.full)Call:glm(formula = ynaffair ~ gender + age + yearsmarried + children +religiousness + education + occupation + rating, family = binomial(),data = Affairs)Deviance Residuals:Min 1Q Median 3Q Max-1.9 -0.9 2.5191Coefficients:Estimate Std. Error z value Pr(>|z|)(Intercept) 1.76 1.551 0.120807gendermale 0.09 1.172 0.241083age -0.25 -2.425 0.015301 *yearsmarried 0.21 2.942 0.003262 **childrenyes 0.51 1.364 0.172508religiousness -0.75 -3.618 0.000297 ***education 0.51 0.417 0.676851occupation 0.78 0.431 0.666630rating -0.91 -5.153 2.56e-07 ***---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1(Dispersion parameter for binomial family taken to be 1)Null deviance: 675.38 on 600 degrees of freedomResidual deviance: 609.51 on 592 degrees of freedomAIC: 627.51Number of Fisher Scoring iterations: 4从回归系数的p值可以看到,性别、是否有孩子、学历和职业对方程的贡献都不明显。去除这些变量重新拟合模型,检验新模型是否拟合得好:> fit.reduced > summary(fit.reduced)Call:glm(formula = ynaffair ~ age + yearsmarried + religiousness +rating, family = binomial(), data = Affairs)Deviance Residuals:Min 1Q Median 3Q Max-1.0 -0.4 2.3998Coefficients:Estimate Std. Error z value Pr(>|z|)(Intercept) 1.32 3.164 0.001558 **age -0.36 -2.032 0.042127 *yearsmarried 0.21 3.445 0.000571 ***religiousness -0.45 -3.678 0.000235 ***rating -0.84 -5.193 2.06e-07 ***---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1(Dispersion parameter for binomial family taken to be 1)Null deviance: 675.38 on 600 degrees of freedomResidual deviance: 615.36 on 596 degrees of freedomAIC: 625.36Number of Fisher Scoring iterations: 4新模型的每个回归系数都非常显著(p> anova(fit.reduced,fit.full,test = 'Chisq')Analysis of Deviance TableModel 1: ynaffair ~ age + yearsmarried + religiousness + ratingModel 2: ynaffair ~ gender + age + yearsmarried + children + religiousness +education + occupation + ratingResid. Df Resid. Dev Df Deviance Pr(>Chi)1 596 615.362 592 609.51 4 5.8结果的卡方值不显著(p=0.21),表明四个预测变量的新模型与纠葛完整预测变量的模型拟合程度一样好。这样我们可以更加坚信添加性别、孩子、学历和职业变量不会显著提高方程的预测精度,因此可以依据更简单的模型进行解释。解释模型参数先看回归系数:> coef(fit.reduced)(Intercept) age yearsmarried religiousness rating1.....在Logistic回归中,响应变量是Y=1的对数优势比(log)。回归系数含义是当其他预测变量不变时,一单位预测变量的变化可引起的响应变量对数优势比的变化。由于对数优势比解释性差,我们可对结果进行指数化:> exp(coef(fit.reduced))(Intercept) age yearsmarried religiousness rating6.....6304248可以看到婚龄增加一年,婚外情的优势比将乘以1.106(保持年龄、宗教信仰和婚姻评定不变);相反,年龄增加一岁,婚外情的优势比则乘以0.965。因此,随着婚龄的增加和年龄、宗教信仰与婚姻评分的降低,婚外情优势比将上升。因为预测变量不能等于0,截距项在此处没有什么特定的含义。如果有需要,我们还可使用confint()函数获取系数的置信区间。例如,exp(confint(fit.reduced))可在优势比尺度上得到系数95%的置信区间。> exp(confint(fit.reduced))Waiting for profiling to be done...2.5 % 97.5 %(Intercept) 2..3506030age 0..9981470yearsmarried 1..1718250religiousness 0..8562807rating 0..7493370最后,预测变量一单位的变化可能并不是我们最想关注的。对于二值型Logistic回归,某预测变量n单位的变化引起的较高值上优势比的变化exp(Bj)^n,它反映的信息可能更为重要。比如,保持其他预测变量不变,婚龄增加一年,婚外情的优势比将乘以1.106,而如果婚龄增加10年,优势比将乘以1.106^10,即2.7。评价预测变量对结果概率的影响对于我们大多数人来说,以概率的方式思考比优势比更加直观。使用predict()函数,我们可观察某预测变量在各个水平时对结果概率的影响。首先创建一个包含我们感兴趣预测变量值的虚拟数据集,然后对该数据及使用predict()函数,以预测这些值的结果概率。现在我们使用该方法评价婚姻评分对婚外情概率的影响。首先,创建一个虚拟数据集,设定年龄、婚龄和宗教信仰为它们的均值,婚姻评分的范围为1~5.> testdata > testdatarating age yearsmarried religiousness1 1 32.696 3.1164732 2 32.696 3.1164733 3 32.696 3.1164734 4 32.696 3.1164735 5 32.696 3.116473接下来,使用测试数据集预测相应的概率:> testdata$prob > testdatarating age yearsmarried religiousness prob1 1 32.696 3..53022962 2 32.696 3..41573773 3 32.696 3..30967124 4 32.696 3..22045475 5 32.696 3..1513079从这些结果可以看到,当婚姻评分从1(很不幸福)变为5(非常幸福)时,婚外情概率从0.53降低到了0.15(假定年龄、婚龄和宗教信仰不变)。下面我们再看看年龄的影响:> testdata > testdatarating age yearsmarried religiousness1 3...1164732 3...1164733 3...1164734 3...1164735 3...116473> testdata$prob > testdatarating age yearsmarried religiousness prob1 3....33508342 3....26153733 3....19929534 3....14887965 3....1094738此处可以看到,当其他变量不变,年龄从17增加到57时,婚外情的概率将从0.34降低到0.11.利用该方法,我们可以探究每一个预测变量对结果概率的影响。过度离势抽样于二项分布的数据的期望方差是σ^2 = nπ(1-π ),n为观测数,π 为属于Y=1组的概率。所谓过度离势,即观测到的响应变量的方差大于期望的二项分布的方差。过度离势会导致奇异的标准误检验和不精确的显著性检验。当出现过度离势时,仍可使用glm()函数拟合Logistic回归,但此时需要将二项分布改为类二项分布。检测过度离势的一种方法是比较二项分布模型的残差偏差与残差自由度,如果比值Φ(fai):比1大许多,我们便可认为存在过度离势。回到上面讲到的例子,可得:它非常接近1,表明没有过度离势。我们还可以对过度离势进行检验。为此需要拟合模型两次,第一次使用family='binomial',第二次使用family='quasibinomiai'。假设第一次glm()返回对象记为fit,第二次返回对象记为fit.od,那么:pchisq(summary(fit.od)$dispersion * fit$df.residual, fit$df.residual,lower=F)提供的p值即可对零假设H0:Φ = 1 与备择假设H1:Φ != 1进行检验。若p值很小(小于0.05),我们便可拒绝零假设。将其应用到上述数据集,可得:> fit > fit.od > pchisq(summary(fit.od)$dispersion * fit$df.residual, fit$df.residual,lower=F)[1] 0.340122此处p值(0.34)显然不显著(p>0.05),这更增强了我们认为不存在过度离势的信息。在这个例子中,婚外情的次数被二值化为一个“是/否”的响应变量,这是因为我们最感兴趣的是在过去一年中调查对象是否有过一次婚外情。如果兴趣转移到量上(过去一年中婚外情的次数),便可直接对计数型数据进行分析。分析计数型数据的一种流行方法叫做泊松分布。
喜欢该文的人也喜欢R语言实战__第8章 回归 - 简书
R语言实战__第8章 回归
第8章 回归
拟合并解释线形模型
检验模型假设
回归分析是统计学的核心,通指那些用预测变量(也称自变量或解释变量)来预测响应变量(也成因变量、校标变量或结果变量)的方法。回归分析可用于挑选与响应变量相关的解释变量、描述两者的关系,也可以生成一个等式,通过解释变量预测响应变量。
如何拟合和解释回归模型,一系列鉴别模型潜在问题的方法及解决方案。
变量选择问题。对所有可用的预测变量,如何确定哪些变量包含在最终的模型中?
相对重要性问题。所有的预测变量中,重要程度的顺序。
有效的回归分析是一个交互的、整体的、多步骤的过程,而不仅仅是一点技巧。
8.1 回归的多面性
回归有诸多变种。R中做回归分析的函数已超过205个。
回归分析变体.png
本章重点介绍普通最小二乘(OLS)回归法,包括简单线形回归、多项式回归和多远线形回归。
其他回归模型(Logistic回归和泊松回归)在第13章介绍。
8.1.1 OLS回归的使用情境
OLS回归通过预测变量的加权和来预测量化的因变量,其中权重是通过数据估计而得的参数。
主要困难:
发现有趣的问题
设计一个有用的、可以测量的相应变量
收集合适的数据
8.1.2 基础回顾
R函数拟合OLS回归模型
评价拟合优度
检验假设条件
最小二乘回归法(又称最小平方法)
是一种数学优化技术,通过最小化误差的平方和寻找数据的最佳函数匹配。
8.2 OLS回归
本章大部分内容都是利用OLS法通过一系列预测变量来预测相应变量(也可以说是在预测变量上“回归”相应变量)。OLS回归拟合模型的形式:
$$ \hat{Y}_i = \hat{\beta}_0 + \hat{\beta}1
X{1i} + \cdots +\hat{\beta}k
\qquad i=1\cdots n $$
其中,n为观测的数目,k为预测变量的数目。
我们的目标是通过减少响应变量的真实值与预测值的差值来获得模型参数(截距项和斜率)。具体而言,即使的残差平方和最小。
$$ \sum_{1}^{n} {(Y_i - \hat{Y}i)} ^ 2 = \sum{1}^{n} {Y_i \hat{\beta}0 + \hat{\beta}1
X{1i} + \cdots + \hat{\beta}k
X{ki} } = \sum{1}^{n} {\epsilon}^2
为了能够恰当地解释OLS模型的系数,数据必须满足一下统计假设:
正态性:对于固定的自变量值,因变量值呈正态分布;
独立性:$Y_i$值之间相互独立;
线性:因变量与自变量之间为线性相关;
同方差型:因变量的方差不随自变量的水平不同而变化。
若违背以上假设,则统计显著性检验结果和所得的置信区间很可能不精确。
OLS回归还假定自变量是固定的且测量无误差。
8.2.1 用lm()拟合回归模型
在R中,拟合线形模型最基本的函数就是lm(),格式为:
myfit &- lm(formula, data)
其中,formula指要拟合的模型形式,data是一个数据框,包含了用于拟合模拟的数据。结果对象(myfit)存储在一个列表中,包含了所拟合模型的大量信息。表达式(formula)形式如下:
Y ~ X1 + X2 + ... + Xk
~左边为响应变量,右边为各个预测变量,预测变量之间用+符号分隔。表8-2中的符号能以不同方式修改这一表达式。
R表达式中常用的符号.png
出来lm(),表8-3还列出了其他一些简单或多元回归分析相关的函数。拟合模型后,将这些函数应用于lm()返回的对象,可以得到更多额外的模型信息。
拟合线形模型相关的其他函数.png
当回归模型包含了一个因变量和一个自变量时,我们称为简单线性回归。只有一个预测变量,但同时包含变量的幂时,称之为多项式回归。当有不止一个预测变量时,成为多元线回归。
8.2.2 简单线形回归
表8-3中函数应用的回归示例。
基础安装中的数据集women提供了15个年龄在30~39岁间女性的身高和体重信息,通过身高预测体重,获得等式分辨那些过重或过瘦的个体。
代码清单8-1 简单线性回归
& fit &- lm(weight ~ height, data = women) #lm(Y ~ X, data)拟合weight与height关系
& summary(fit) #查看
lm(formula = weight ~ height, data = women)
Residuals:
Coefficients:
Estimate Std. Error t value Pr(&|t|)
(Intercept) -87.51667
-14.74 1.71e-09 ***
37.85 1.09e-14 ***
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.525 on 13 degrees of freedom
Multiple R-squared:
Adjusted R-squared:
F-statistic:
1433 on 1 and 13 DF,
p-value: 1.091e-14
& women$weight #真实值
[1] 115 117 120 123 126 129 132 135 139 142 146 150 154 159 164
& fitted(fit) #预测值
112.3 119.3 126.3 133.3
140.3 147.3 153.3 160.8833
& residuals(fit) #残差
& plot(women$height, women$weight, xlab="Height (in inches)", ylab="Weight (in pounds)") #绘图
& abline(fit) #回归图线
简单线形回归.png
预测结果为:
$$\hat {Weight}=-87.52 + 3.45 × Height$$
图中可看出最大的残差在身高矮和身高高的地方出现。
可以用含一个弯曲的曲线来提高预测的精度,比如$\hat Y={\beta}_0+{\beta}_1X+{\beta}_1X^2$。多现实回归允许使用一个解释变量预测一个相应变量。
8.2.3 多项式回归
如下代码可拟合含二次项的等式:
fit &- lm(weight ~ height + I(height^2), data=women)
其中I(height^2)表示向预测等式添加一个身高的平方项。I函数将括号的内容看做R的一个常规表达式。因为^符号在表达式中有特殊含义,表示交互次数。
代码清单8-2展示了拟合含二次项等式的结果。
代码清单8-2 多项式回归
& fit2 &- lm(weight ~ height + I(height ^ 2), data=women)
& summary(fit2) #展示拟合模型的详细结果
lm(formula = weight ~ height + I(height^2), data = women)
Residuals:
-0.511 -0.015
Coefficients:
Estimate Std. Error t value Pr(&|t|)
(Intercept) 261.87818
25.1 2.36e-07 ***
-9.449 6.58e-07 ***
I(height^2)
0.0 9.32e-09 ***
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.3841 on 12 degrees of freedom
Multiple R-squared:
Adjusted R-squared:
F-statistic: 1.139e+04 on 2 and 12 DF,
p-value: & 2.2e-16
& plot(women$height, women$weight, xlab="Height (in inches)", ylab="Weight (in lbs)")
& lines(women$height, fitted(fit2))
& #绘图,纵轴为fit2拟合值
多项式回归.png
新的预测结果为:
$$\hat {Weight}=261.88 - 7.35 × Height + 0.083 × {Height}^2$$
在p&0.001水平下,回归系数都非常显著。模型的方差解释率增加至99.9%。二次项的显著型(t = 13.89, p&0.001)表明包含二次项提高了模型的拟合度。从图中也可看出曲线拟合效果更好。
线性模型与非线性模型
多项式等式认可认为是线性回归模型,因为等式仍是预测变量的加权和形式。
下面的例子才是真正的非线性模型
$$Y = \hat {\beta}_0 + \hat {\beta}_1 e ^{x \over {\beta}_2 } $$
这种非线性模型可用nls()函数拟合。
一般来说,n次多项式生成一个n-1个弯曲的曲线。拟合三次多项式,可用:
fit &- lm(weight ~ height + I(height ^ 2) + I(height ^ 3), data = women)
虽然更高次的多项式也可用,但实际上几乎没必要。
car包中的scatterplot()函数,它可以很容易、方便地绘制二元关系图。
& library(car)
& scatterplot(weight ~ height, data = women, spread = FALSE, lty.smooth = 2, pch = 19, main="Women Age 30-39", xlab = "Height (inches)", ylab = "Weight (lbs.)")
& #spread=FALSE删除了残差正负均方根在平滑曲线上展开和非对称信息,lyt.smooth=2设置拟合曲线为虚线,pch=19设置点为实心圆
二元关系图.png
8.2.4 多元线性回归
当预测变量不止一个时,简单线性回归就变成了多元线性回归,分析也稍微复杂。
多项式回归可以算是多元线性回归的特例:二次回归有两个与预测变量($X$和$X2$),三次回归有三个预测变量($X$、$X2$和$X^3$)。
以基础包中的state.x77数据集为例,探究犯罪率和其他因素关系。
lm()函数需要一个数据框(state.x77数据集为矩阵),做如下转化:
& states &- as.data.frame(state.x77[, c("Murder", "Population", "Illiteracy", "Income", "Frost")])
这行代码创建了一个名为states的数据框,包含了我们感兴趣的变量。本章余下部分均使用该数据框。
多元回归分析中,第一步最好检查变量间的相关性。cor()函数提供了二变量之间的相关系数,car包中scatterplotMatrix()函数则会生成散点图矩阵。
代码清单8-3 检测二变量关系
& cor(states)
Murder Population Illiteracy
1.....5388834
Population
0.....3321525
Illiteracy
0.....6719470
-0.....2262822
-0.....0000000
& library(car)
& scatterplotMatrix(states, spread=FALSE, lty.smooth=2, main="Scatter Plot Matrix")
检测二变量关系.png
scatterplotMatrix()函数默认在非对角线区域绘制变量间的散点图,并添加平滑(loess)和线性拟合曲线。对角线区域绘制每个变量的密度图和轴须图。
使用lm()函数拟合多元线性回归模型
代码清单8-4 多元线性回归
& fit &- lm(Murder ~ Population + Illiteracy + Income + Frost, data = states)
& summary(fit)
lm(formula = Murder ~ Population + Illiteracy + Income + Frost,
data = states)
Residuals:
Coefficients:
Estimate Std. Error t value Pr(&|t|)
(Intercept) 1.235e+00
Population
Illiteracy
4.738 2.19e-05 ***
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.535 on 45 degrees of freedom
Multiple R-squared:
Adjusted R-squared:
F-statistic: 14.73 on 4 and 45 DF,
p-value: 9.133e-08
当预测变量不止一个时,回归系数的含义为,一个预测变量增加一个单位,其他预测变量保持不变时,因变量将要增加的数量。例如,文盲率回归系数4.14,表示控制其他因素不变,文盲率上升1%,谋杀率上升4.14%,它的系数在p&0.001的水平下显著不为0。相反Frost的系数没有显著不为0,表明控制其他变量不变时,Frost与Murder不呈线性相关。
以上分析没有考虑变量的交互项。
8.2.5 有交互项的多元线性回归
以mtcars数据框框中的汽车数据为例,若对汽车重量和马力感兴趣,可把它们作为预测变量,并包含交互项来拟合回归模型。
代码清单8-5 有显著交互项的多元线性回归
& #hp、wt及hp、wt的交互项,预测mpg
& fit &- lm(mpg ~ hp + wt + hp : wt, data=mtcars)
& summary(fit)
lm(formula = mpg ~ hp + wt + hp:wt, data = mtcars)
Residuals:
Coefficients:
Estimate Std. Error t value Pr(&|t|)
(Intercept) 49.80842
3.6 5.01e-14 ***
-4.863 4.04e-05 ***
-6.471 5.20e-07 ***
3.753 0.000811 ***
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.153 on 28 degrees of freedom
Multiple R-squared:
Adjusted R-squared:
F-statistic: 71.66 on 3 and 28 DF,
p-value: 2.981e-13
可以看到Pr(&|t|)栏中,马力与车重的交互项是显著的。若两个变量的交互项显著,说明相应变量与其中一个预测变量的关系依赖于另一个预测变量的水平。此例说明,每加仑汽油行驶英里数与汽车马力的关系依车重不同而不同。
预测mpg的模型为:
$$\hat {mpg}=49.81 - 0.12 × hp - 8.82 × wt + 0.03 × hp × wt$$
通过effects包中的effect()函数,可以用图形展示交互项的结果。格式为:
plot(effect(term, mod, xlevels), multiline=TRUE)
term即模型要画的项,mod为通过lm()拟合的模型,xlevels是一个列表,指定变量要设定的常量值,multiline=TRUE选项表示添加相应直线。对于上例,即:
& library(effects)
& plot(effect("hp:wt", fit,, list(wt=c(2.2, 3.2, 4.2))), multiline=TRUE)
变量交互.png
图中可看出,随车重增加,马力与每加仑汽油行驶英里数的关系减弱了,当wt=4.2时,直线几乎水平,表明随着hp的增加,mpg几乎不变。
拟合模型不过是分析的第一步,一旦拟合了回归模型,在进行推断之前必须多方法中暗含的统计假设进行检验。
8.3 回归诊断
lm()函数拟合OLS回归模型,通过summary()函数获取模型参数和相关统计量。但不清楚模型在多大程度上满足统计假设。
通过confint()函数的输出查看8.4.2节中的states多元回归问题。
& fit &- lm(Murder ~ Population + Illiteracy + Income + Frost, data=states)
& confint(fit)
(Intercept) -6. 9.
Population
Illiteracy
结果表明,文盲率改变1%,谋杀率就在95%的置信区间[2.38,5.90]中变化。另外因为Frost的置信区间包含0,可以得出结论,其他变量不变时,温度的改变与谋杀率无关。
回归诊断技术提供了评价回归模型适用性的必要工具。
首先探讨R基础包中函数的标准用法,随后介绍car包中改进的新方法。
8.3.1 标准方法
R基础安装中提供了大量检验回归分析中统计假设的方法。最常见的方法是对lm()函数返回的对象使用plot()函数,可以生成评价模型拟合情况的四幅图形。一个简单线性回归的示例:
& fit &- lm(weight ~ height, data=women) #简单线性回归
& par(mfrow=c(2, 2))
& plot(fit)
回归诊断_标准方法_简单线性回归.png
具体解读见P172~173
& fit2 &- lm(weight ~ height + I(height^2), data = women)
& par(mfrow=c(2, 2))
& plot(fit2)
回归诊断_标准方法_二次拟合.png
删除个别观测点
& newfit &- lm(weight ~ height + I(height^2), data=women[-c(13, 15),]) #删除第13、15个观测
关于states的多元回归。
& fit &- lm(Murder ~ Population + Illiteracy + Income + Frost, data = states)
& par(mfrow=c(2,2))
& plot(fit)
回归诊断_标准方法_多元回归.png
除了这些标准的诊断图,R中还有更好的工具。
8.3.2 改进的方法
car包提供了大量拟合和评价回归模型的函数。
(car包中)回归诊断实用函数.png
另外,gvlma包提供了对所有线性模型假设进行检验的方法。
与基础包中的plot()函数相比,qqPlot()函数提供了更为精确的正态假设检验方法,它画出了在$n-p-1$个自由度的$t$分布下的学生化残差图形,其中n是样本大小,p是回归参数的数目(包括截距项)。代码如下:
& library(car)
& fit &- lm(Murder ~ Population + Illiteracy + Income + Frost, data=states)
& qqPlot(fit, labels = row.names(states), id.method = "identify", simulate=TRUE, main="Q-Q Plot")
& #id.method的值设为identify,表示可以与图形进行交互,即可用鼠标单击图形的某点,且会出现labels中设置的相应值,labels的值为y的各行名称
qqPlot()正态假设性检验.png
除了Nevada,所有的点都离直线很近,且都在置信区间内,这表明正太型假设符合得很好。但必能忽视Nevada,它有一个很大的残差值(真实值-预测值),表明模型低估了该州的谋杀率。特别地:
& states["Nevada",]
Murder Population Illiteracy Income Frost
& fitted(fit)["Nevada"]
& residuals(fit)["Nevada"]
& rstudent(fit)["Nevada"]
可以看出,Nevada的谋杀率是11.5%,而模型预测的谋杀率为3.9%。
可视化误差还有其他方法,比如使用代码清单8-6中代码。residplot()函数生成学生化残差柱状图,并添加正态曲线、核密度曲线和轴须图。
代码清单8-6 绘制学生化残差图的函数
& residplot &- function(fit, nbreaks=10) {
z &- rstudent(fit) #学生化残差
hist (z, breaks=nbreaks, freq=FALSE, #breaks控制分组变量,freq=F根据概率密度而非频数绘制
xlab = "Studentized Residual",
main = "Distribution of Errors")
rug(jitter(z),
col="brown") #轴须图,变量z加噪
curve(dnorm(x, mean=mean(z), sd=sd(z)), #dnorm密度函数
add=TRUE, col="blue", lwd=2)
lines(density(z)$x, density(z)$y, col="red", lwd=2, lty=2)
legend("topright",
legend = c("Normal Curve", "Kernel Density Curve"),
lty=1:2, col=c("blue", "red"), cex=.7)
& residplot(fit)
residplot()学生化残差分布图.png
图中可以看出有一个很明显的离群点。
2. 误差的独立性
判断变量值(或残差)是否相互独立,最好的方法是依据收集数据方式的先验知识。
car包提供了一个可做Durbin-Watson检验的函数,能够检测误差的序列相关性。在多元回归中,使用下面的代码可以做Durbin-Watson检验:
& durbinWatsonTest(fit)
lag Autocorrelation D-W Statistic p-value
-0.2006929
Alternative hypothesis: rho != 0
p值不显著(p=0.282)说明无自相关性,误差项之间独立。滞后项(lag=1)表明数据集中每个数据都是与其后一个数据进行比较的。该检验适用于时间独立的数据,对于非聚集型的数据并不适用。
通过成分残差图(component plus residual plot)也称偏残差图(partial residual plot),可以看出因变量与自变量之间是否呈非线性关系,也可以看出是否有不同于已设定模型的系统偏差,图形可以car包中的crPlots()函数绘制。
创建变量$X_j$的成分残差图,需要绘制点$\epsilon_i + (\hat{\beta_j} × X_{ji}) vs. X_{ji}$。其中残差项$\epsilon_i $是基于所有模型的,$i=1\cdots n$。每幅图都会给出$(\hat{\beta_j} × X_{ji}) vs. X_{ji}$的直线。平滑拟合曲线(loess)将在第11章介绍。代码如下:
& library(car)
& crPlots(fit)
成分残差图.png
4/. 同方差性
car包提供了两个有用的函数,可以判断误差方差是否恒定。ncvTest()函数生成一个计分检验,零假设为误差方差不变,被择假设为误差方差随着拟合值水平的变化而变化。若检验显著,则说明存在异方差性(误差方差不恒定)。
spreadLevelPlot()函数创建一个添加了最佳拟合曲线的散点图,展示标准化残差绝对值与拟合值的关系。代码如下:
代码清单8-7 检验同方差型
& ncvTest(fit)
Non-constant Variance Score Test
Variance formula: ~ fitted.values
Chisquare = 1.746514
p = 0.1863156
检验同方差性.png
可以看出,计分检验不显著(p=0.19),满足方差不变假设。还可通过图中点在水平的最佳拟合曲线周围呈水平随机分布得出这一结论。若违反假设,则会看到一个非水平的曲线。
8.3.3 线性模型假设的综合验证
gvlma包中的gvlma()函数,能对线性模型假设进行综合验证,同时还能做偏斜度、峰度和异方差型的评价。它给模型提供了一个单独的综合检验(通过/不通过)。对states数据进行检验:
** 代码清单8-8 线性模型假设的综合检验**
& gvmodel &- gvlma(fit)
& summary(gvmodel)
8.3.4 多重共线性
多重共线性(Multicollinearity)是指回归模型中的解释变量之间由于存在精确相关关系或高度相关关系而是模型估计失真或难以准确估计。它会导致模型参数的置信区间过大,使单个系数解释起来很困难。
多重共线性可用统计量VIF(Variance Inflation Factor,方差膨胀因子)进行检测。VIF的平方根表示变量回归参数的置信区间能膨胀为与模型无关的预测变量的程度(因此得名)。car包中的vif()函数提供VIF值。一般原则下,$\sqrt {vif} & 2$就表明存在多重共线性问题。
代码清单8-9 检测多重共线性
& library(car)
& vif(fit)
Population Illiteracy
& sqrt(vif(fit)) & 2
Population Illiteracy
8.4 异常观测值
一个全面的回归分析要覆盖对异常值的分析,包括离群点,高杠杆值点和强影响点。这些数据点在一定程度上与其他观测点不同,可能对结果产生较大的负面影响。
8.4.1 离群点
离群点是指那些模型预测效果不佳的观测点。它们通常有很大、或正或负的残差($Y_i - \hat Y_i$)。正的残差说明模型低估了响应值,负的残差则说明高估了响应值。
鉴别离群点的方法:
Q-Q图中,落在置信区间外的点即可被认为是离群点;
标准化残差值大于2或者小于-2的可能是离群点。
car包也提供了一种离群点的统计检验方法。outlierTest()函数可以求得最大标准化残差绝对值Bonferroni调整后的p值:
& library(car)
& outlierTest(fit)
rstudent unadjusted p-value Bonferonni p
Nevada 3.542929
Nevada被判定为离群点(p=0.048)。
该函数指示根据单个最大残差值的显著性来判断是否有离群点。若不显著,则说明数据集中没有离群点;若显著则必须删除该离群点,方可检验是否存在其他离群点。
8.4.2 高杠杆值点
高杠杆值观测点,即是与其他预测变量有关的离群点。它们由许多异常的预测变量值组合起来,与相应变量值没有关系。
高杠杆值的观测点可通过帽子统计量(hat statistic)判断。对于一个给定的数据集,帽子均值为$p/n$,其中$p$是模型估计的参数数目(包含截距项),n是样本量。
一般来说,若观测点的帽子值大于帽子均值的2或3倍,即可认定位高杠杆值点。
下面代码画出来帽子值的分布:
& hat.plot &- function(fit) {
p &- length(coefficients(fit)) #参数数目
n &- length(fitted(fit))
plot(hatvalues(fit), main="Index Plot of Hat Values") #绘出帽子值图像
abline(h=c(2,3)*p/n, col="red", lty=2) #帽子均值参考线
identify(1:n, hatvalues(fit), names(hatvalues(fit))) #交互鉴别图中点
& hat.plot(fit)
高杠杆值点_帽子图.png
高杠杆值点可能会是强影响点,也可能不是,这要看他们是否是离群点。
8.4.3 强影响点
强影响点,即对模型参数估计值影响有些比例失衡(过大)的点。
有两种监测方法:Cook距离(或称D统计量)以及变量添加图(added variable plot)。一般来说,Cook's D值大于$4/(n-k-1)$,则表明它是强影响点,其中$n$为样本量大小,k是预测变量数目。通过如下代码绘制Cook's D图形:
& cutoff &- 4/(nrow(states) - length(fit$coefficients) -2)
& plot(fit, which=4, cook.levels=cutoff)
& abline(h=cutoff, lty=2, col="red")
强影响点_Cook' D图.png
Cook's D图有助于鉴别强影响点,但并不提供关于这些点如何影响模型的信息。
变量添加图弥补了这个缺陷,所谓变量添加图,即对每个预测变量$X_k$,绘制$X_k$在其他$k-1$个预测变量上回归的残差值相对于响应变量在其他$k-1$个预测变量上回归的残差值的关系图。对于一个相应变量和k个预测变量,创建k个变量添加图。
& library(car)
& avPlot(fit, ask=FALSE, onepage=TRUE, id.method="identify")
利用car包中的influencePlot()函数,可以将离群点、杠杆值点和强影响点的信息整合到一副图形中:
& library(car)
& influencePlot(fit, id.method="identify", main="Influence Plot", sub="Circle size is proportional to Cook's distance")
强影响点_influencePlot()函数.png
气泡大小:强影响点
纵轴:离群点
横轴:高杠杆值点
8.5 改进措施
有四种方法处理违背回归假设的问题:
删除观测点
添加或删除变量
使用其他回归方法
8.5.1 删除观测点
删除离群点通常可以提高数据集对于正态假设的拟合度,而强影响点会干扰结果,通常也会被删除。删除最大的离群点或强影响点后,模型需要重新拟合。若离群点或强影响点仍存在,重复直至获得满意的拟合。
但应谨慎删除观测点。如果是记录错误删除是合理的。其他情况下,对异常点的研究有助于深刻理解主题。
8.5.2 变量变换
模型不符合正态性、线性或者同方差性假设时,一个或多个变量的变换通常可以改善或调正模型结果。变换多用$Y^{\lambda}$替代$Y$,$\lambda$的常见值和解释见表
常见变换.png
若$Y$是比例数,通常使用$logit$变换$[ln(Y/1-Y)]$。
当模型违反了 正态假设时,可以对响应变量尝试某种变换。car包中的powerTransform()函数通过$\lambda$的最大似然估计来正态化变量$X^{\lambda}$。代码清单8-10是对数据states的应用。
代码清单8-10 Box-Cox正态变换
& library(car)
& summary(powerTransform(states$Murder))
bcPower Transformation to Normality
Est.Power Std.Err. Wald Lower Bound Wald Upper Bound
states$Murder
Likelihood ratio tests about transformation parameters
LR test, lambda = (0) 5. 0.
LR test, lambda = (1) 2. 0.
当违反线性假设时,对预测变量进行变换常常比较有用。car包中的boxTidwell()函数通过获得预测变量幂数的最大似然估计来改善线性关系。下面的例子为用州的人口和文盲率来预测谋杀率,对模型进行Box-Tidwell变换:
& boxTidwell(Murder ~ Population + Illiteracy, data=states)
Score Statistic
p-value MLE of lambda
Population
-0..7468465
Illiteracy
0..5356651
iterations =
8.5.3 增删变量
改变模型的变量将会影响模型的拟合度。
删除变量在处理多重共线性时是一种非常重要的方法。仅作预测,多重共线性并不构成问题,如果需要对每个预测变量进行解释,必须解决此问题。常见的方法是删除某个存在多重共线性的变量(某个变量$\sqrt{vif} & 2$)。另一个方法是岭回归——多元回归的变体。
8.5.4 尝试其他方法
处理多重共线性:
存在离群点:稳健回归模型替代OLS回归
违背了正态性假设:非参数回归模型
存在显著的非线性:尝试非线性回归模型
违背了误差独立性假设:专门研究误差的模型,如:时间序列模型、多层次回归模型
广义线性模型适用于许多OLS回归假设不成立的情况
具体何时需要换方法提高OLS拟合度,需根据主题判断。
8.6 选择“最佳”的回归模型
最终回归模型的选择总是涉及预测精度(模型尽可能地拟合数据)与模型简洁度(一个简单且能复制的模型)的调和问题。
如何在候选模型中筛选?
8.6.1 模型比较
嵌套模型:它的一些项完全包含在另一个模型中。
基础安装包中的anova()函数可以比较两个嵌套模型的拟合度。
& fit1 &- lm(Murder ~ Population + Illiteracy + Income + Frost, data = states)
& fit2 &- lm(Murder ~ Population + Illiteracy, data = states)
& anova(fit2, fit1)
Analysis of Variance Table
Model 1: Murder ~ Population + Illiteracy
Model 2: Murder ~ Population + Illiteracy + Income + Frost
RSS Df Sum of Sq
模型1嵌套在模型2中,检验不显著($p=0.994$),因此得出结论:不需要将这两个变量添加到线性模型中。
AIC(Akaike Information Criterion,赤池信息准则)也可用来比较模型,它可虑了模型的统计拟合度以及用来拟合的参数数目。AIC值越小的模型要优先选择,它说明模型用较少的参数获得了足够的拟合度。通过AIC()函数实现。
代码清单8-12 用AIC来比较模型
& fit1 &- lm(Murder ~ Population + Illiteracy + Income + Frost, data = states)
& fit2 &- lm(Murder ~ Population + Illiteracy, data = states)
& AIC(fit1, fit2)
6 241.6429
4 237.6565
ANOVA需要嵌套模型,AIC方法不需要。
8.6.2 变量选择
从大量候选变量中选择最终的预测变量有一下两种方法:逐步回归(stepwise method)和全子集回归(all-subsets regression)。
1. 逐步回归
逐步回归模型中,模型会每次添加或者删除一个变量,直至达到某个判停准则。
向前逐步回归:每次添加一个预测变量
向后逐步回归:每次删除一个变量(从模型包含所有变量开始)
先前向后逐步回归:变量每次进入一个,但每一步中变量都会被重新评价,对模型无贡献的变量将被删除,预测变量可能被增删好几次。
逐步回归模型的实现依据增删变量的准则不同而不同。MASS包中的stepAIC()函数可以实现逐步回归模型(向前、向后和向前向后)。依据的是精确AIC准则。
代码清单8-13 向后回归
& library(MASS)
& fit1 &- lm(Murder ~ Population + Illiteracy + Income + Frost, data = states)
& stepAIC(fit, direction="backward")
Murder ~ Population + Illiteracy + Income + Frost
Df Sum of Sq
0.021 289.19
0.057 289.22
- Population
39.238 328.41 102.111
- Illiteracy
144.264 433.43 115.986
Murder ~ Population + Illiteracy + Income
Df Sum of Sq
0.057 289.25
- Population
43.658 332.85 100.783
- Illiteracy
236.196 525.38 123.605
Murder ~ Population + Illiteracy
Df Sum of Sq
- Population
48.517 337.76
- Illiteracy
299.646 588.89 127.311
lm(formula = Murder ~ Population + Illiteracy, data = states)
Coefficients: #系数:截距,人口系数,文盲率系数
(Intercept)
Population
Illiteracy
逐步回归法其实存在争议,虽然它可能会找到一个好的模型,但不能保证模型就是最佳模型,因为不是每一个可能的模型都被评价了。为克服此限制,有了全子集回归法。
2. 全子集回归
全子集回归,即所有可能的模型都会被检验。
可以选择展示所有可能的结果,也可以展示n个不同子集大小(一个、两个或多个预测变量)的最佳模型。
全子集回归可用leaps包中的regsubsets()函数实现。能通过R平方、调整R平方或Mallows Cp统计量等准则来选择“最佳”模型。
R平方:预测变量解释响应变量的程度,预测变量数目很多时,容易导致过拟合;
调整R平方:与R平方类似,但考虑了模型的参数数目;
Mallows Cp统计量:
对states数据进行全子集回归,结果可用leqps包中的plot()函数绘制,或car包中的subsets()函数绘制。
代码清单8-14 全子集回归
& library(leaps)
& leaps &- regsubsets(Murder ~ Population + Illiteracy + Income + Frost, data=states, nbest=4)
& plot(leaps, scale="adjr2", las=1)
& library(car)
& subsets(leaps, statistic="cp",
main="Cp Plot for All Subsets Regression")
& abline(1,1,lty=2,col="red")
subsets()绘图.png
大部分情况中,全子集回归要由于逐步回归,因为考虑了更多模型。但是当有大量预测变量时,全子集回归会很慢。
一般来说,变量自动选择应该被看作是对模型选择的一种辅助方法而非直接方法。
8.7 深层次分析
8.7.1 交叉验证
回归方程变量选择方法:
描述性分析:只需要做回归模型的选择和解释
预测:方程在实际应用中的表现如何?
OLS回归通过使得预测误差(残差)平方和最小和对相应变量的解释度(R平方)最大,可获得模型参数。
如何预测模型在实际应用中对新样本的拟合度。通过交叉验证法,可以评价回归方程的泛化能力。
所谓交叉验证,即将一定比例的数据挑选出来作为训练样本,另外的样本作保留样本。在训练样本上获取回归方程,在保留样本做预测。
在k重交叉验证中,样本被分为k个子样本,轮流将k-1个子样本组合作为训练集,另外1个子样本作为保留集。这样获得k个预测方程,记录k个保留样本的预测表现结果,然后求其平均值。
bootstrap包中的crossval()函数可以实现k重交叉验证。
代码清单8-15 R平方的k重交叉验证
& shrinkage &- function(fit,k=10){
require(bootstrap)
# define functions
theta.fit &- function(x,y){lsfit(x,y)}
theta.predict &- function(fit,x){cbind(1,x)%*%fit$coef}
# matrix of predictors
x &- fit$model[,2:ncol(fit$model)]
# vector of predicted values
y &- fit$model[,1]
results &- crossval(x,y,theta.fit,theta.predict,ngroup=k)
r2 &- cor(y, fit$fitted.values)**2 # raw R2
r2cv &- cor(y,results$cv.fit)**2 # cross-validated R2
cat("Original R-square =", r2, "\n")
cat(k, "Fold Cross-Validated R-square =", r2cv, "\n")
cat("Change =", r2-r2cv, "\n")
& # using it
& states &- as.data.frame(state.x77[,c("Murder", "Population",
"Illiteracy", "Income", "Frost")])
& fit &- lm(Murder ~ Population + Income + Illiteracy + Frost, data=states)
& shrinkage(fit)
Loading required package: bootstrap
Original R-square = 0.5669502
10 Fold Cross-Validated R-square = 0.5078505
Change = 0.
& fit2 &- lm(Murder~Population+Illiteracy,data=states)
& shrinkage(fit2)
Original R-square = 0.5668327
10 Fold Cross-Validated R-square = 0.5302438
Change = 0.0365889
8.7.2 相对重要性
评价预测变量最简单的方法是比较标准化的回归系数,它表示当其他预测变量不变时,该预测变量的变化可引起的相应变量的预期变化(以标准差单位度量)。
在进行回归分析前,可用scale()函数将数据标准化为均值为0,标准差为1的数据集,这样用R回归即可获得标准化的系数。(scale()返回一个矩阵,但lm()需要一个数据框,中间需转换)。
& zstates &- as.data.frame(scale(states)
& zfit &- lm(Murder ~ Population + Income + Illiteracy + Frost, data=zstates)
& coef(zfit)
(Intercept)
Population
Illiteracy
此处可以看到,当其他因素不变时,文盲率一个标准差的变化将增加0.68个标准差的谋杀率。
根据标准化的回归系数,我们可认为Illiteracy是最重要的预测变量,而Frost是最不重要的。
相对权重(relative weight)是一种新方法,它能对所有可能子模型添加一个预测变量引起的R平方平均增加量的一个近似值。代码清单8-16 提供一个生成相对权重的函数。
代码清单8-16 relweights()函数,计算预测变量的相对权重
& relweights &- function(fit,...){
R &- cor(fit$model)
nvar &- ncol(R)
rxx &- R[2:nvar, 2:nvar]
rxy &- R[2:nvar, 1]
svd &- eigen(rxx)
evec &- svd$vectors
ev &- svd$values
delta &- diag(sqrt(ev))
lambda &- evec %*% delta %*% t(evec)
lambdasq &- lambda ^ 2
beta &- solve(lambda) %*% rxy
rsquare &- colSums(beta ^ 2)
rawwgt &- lambdasq %*% beta ^ 2
import &- (rawwgt / rsquare) * 100
import &- as.data.frame(import)
row.names(import) &- names(fit$model[2:nvar])
names(import) &- "Weights"
import &- import[order(import),1, drop=FALSE]
dotchart(import$Weights, labels=row.names(import),
xlab="% of R-Square", pch=19,
main="Relative Importance of Predictor Variables",
sub=paste("Total R-Square=", round(rsquare, digits=3)),
return(import)
8-16中代码改变自SPSS程序。
代码清单8-17 relweights()函数的应用
states &- as.data.frame(state.x77[,c("Murder", "Population",
"Illiteracy", "Income", "Frost")])
fit &- lm(Murder ~ Population + Illiteracy + Income + Frost, data=states)
relweights(fit, col="blue")
Population 14.723401
Illiteracy 59.000195
各个预测变量对模型方差的解释程度( R平方=0.567), Illiteracy解释了59%的R平方, Frost解释了20.79%。根据相对权重法, Illiteracy有最大的相对重要性,余下依次是Frost、 Population和Income。
统计回归是一个交互性很强的方法,包括了拟合模型、检验统计假设、修正数据和模型,以及为达到最终结果的再拟合等过程。
只相信自己的眼睛。
Chapter 9 Linear Regression 本篇是第九章,内容是回归分析(主要以线性回归为主)。回归分析是数理统计、数理分析中最基础(也可以说是最重要)的一个分析,所以这一章内容相对来说也较多。 1 变量间的关系 确定型关系vs不确定型关系函数关系——一一对应的...
第8章 预测数值型数据:回归 回归(Regression) 概述 我们前边提到的分类的目标变量是标称型数据,而回归则是对连续型的数据做出处理,回归的目的是预测数值型数据的目标值。 回归 场景 回归的目的是预测数值型的目标值。最直接的办法是依据输入写出一个目标值的计算公式。 ...
R中的线性回归函数比较简单,就是lm(),比较复杂的是对线性模型的诊断和调整。这里结合Statistical Learning和杜克大学的Data Analysis and Statistical Inference的章节以及《R语言实战》的OLS(Ordinary Lea...
Python 机器学习实战教程:回归 原文:Regression - Intro and Data 译者:飞龙 协议:CC BY-NC-SA 4.0 引言和数据 欢迎阅读 Python 机器学习系列教程的回归部分。这里,你应该已经安装了 Scikit-Learn。如果没有,...
第9章 方差分析 名义型或有序因子也可作为预测变量进行建模。当包含的因子是解释变量时,关注的重点通常从预测转向组别差异的分析,这种分析方法称作**方差分析(ANOVA)。 9.1 术语速成 9.2 ANOVA模型拟合 ANOVA也是广义线性模型的特例,可以用lm()函数分析...
#说点啥呢? ##和这个世界谈谈 Markdown怎么用 angular学习 js基础 保持学习 哦 哦
暑假的时候,我想学舞蹈,奶奶给我报了,妈妈付的钱。 第一天,我去舞蹈那里,老师教了我们《寻胡隐君》这首歌的舞蹈。刚开始的时候,我觉得舞蹈果然是我的最爱,到了第二天………… 第二天,老师教我们扭胯动作,左扭一下,回到正面,右扭一下,再次回到正面…………就这样反复地做,因为我们...
原著:远歌 【三生伊梦——维也纳变奏曲】目录 【三生伊梦】详细介绍(莫言赞赏) 上一章 第六十一章:他不爱惜自己,我又何必怜他 从那天在酒吧里目睹了荣生打工的辛苦,我对这个铁血小美人儿还是多了一分礼赞,每次看见他那腰身越发的细瘦,都很钦佩他为了目标能拼到这种程度的执着。不用...

我要回帖

更多关于 多元回归模型中不可使用的模型 的文章

 

随机推荐