各类统计方法R语言实现(八)

【科研绘图点我】【付费精品合集】【SEER点我】

今天是各类统计方法R语言实现的第八期,我们主要介绍选择“最佳”回归模型与深层次分析。

选择“最佳”回归模型

当我们构建回归方程时,我们一方面需要考虑是否去除不显著的变量、是否需要添加交互项和/或多项式项,另一方面还需要权衡方程的简洁性和精度。

因此,我们希望最终构建的“最佳”回归方程,应该至少兼有简洁和有效两个特点。

模型比较方法

方差分析

anova()函数可比较两个嵌套模型的拟合优度。嵌套模型即指一个模型的一些项完全包含在另一个模型中。

states <- as.data.frame(state.x77[,c("Murder","Population","Illiteracy","Income","Frost")])

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
##   Res.Df    RSS Df Sum of Sq      F Pr(>F)
## 1     47 289.25                           
## 2     45 289.17  2  0.078505 0.0061 0.9939

p=0.9939,两个模型无显著差异,说明剔除模型1中的Income、Frost对于回归结果影响不大。

AIC法

AIC即Akaike Information Criterion,赤池信息准则,考虑了模型的统计拟合度及用来拟合的参数数目 。(不需要嵌套模型)

AIC值越小的模型可优先选择,说明模型用较少的参数获得了足够的拟合度

fit1<-lm(Murder~Population+Illiteracy+Income+Frost,
         data=states)
fit2<-lm(Murder~Population+Illiteracy,data=states)
AIC(fit1,fit2)
##      df      AIC
## fit1  6 241.6429
## fit2  4 237.6565

模型1的AIC为241.6429,模型2的AIC为237.6565,表面模型2效果更好,与方差分析法结果一致。

变量选择

初步回归法、全子集回归法。

1、逐步回归法

模型每次增加或删除一个变量,直到达到某个判停准则(如AIC),可分为向前、向后和双向逐步回归。

向前:每次添加一个预测变量到模型中,直到添加变量不会使模型有所改进为止。

向后:从模型包含所有预测变量开始,一次删除一个变量直到会降低模型质量为止。

双向:综合向前向后。

##向后回归
library(MASS)
fit1<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
stepAIC(fit1,direction="backward")
## Start:  AIC=97.75
## Murder ~ Population + Illiteracy + Income + Frost
## 
##              Df Sum of Sq    RSS     AIC
## - Frost       1     0.021 289.19  95.753
## - Income      1     0.057 289.22  95.759
## <none>                    289.17  97.749
## - Population  1    39.238 328.41 102.111
## - Illiteracy  1   144.264 433.43 115.986
## 
## Step:  AIC=95.75
## Murder ~ Population + Illiteracy + Income
## 
##              Df Sum of Sq    RSS     AIC
## - Income      1     0.057 289.25  93.763
## <none>                    289.19  95.753
## - Population  1    43.658 332.85 100.783
## - Illiteracy  1   236.196 525.38 123.605
## 
## Step:  AIC=93.76
## Murder ~ Population + Illiteracy
## 
##              Df Sum of Sq    RSS     AIC
## <none>                    289.25  93.763
## - Population  1    48.517 337.76  99.516
## - Illiteracy  1   299.646 588.89 127.311
## 
## Call:
## lm(formula = Murder ~ Population + Illiteracy, data = states)
## 
## Coefficients:
## (Intercept)   Population   Illiteracy  
##   1.6515497    0.0002242    4.0807366

一开始包含四个变量,Population + Illiteracy + Income + Frost,最终得到两个变量Population + Illiteracy;AIC从97.75到95.75再到93.76,逐步降低。

2、全子集回归法

全子集回归,即所有可能的模型都会被检验,可选择展示所有可能的结果,也可展示n个不同变量(一个、两个或多个预测变量)的最佳模型

可通过模型R平方、调整R平方或Mallows Cp统计量等准则来选择“最佳”模型

调整R平方比R平方增加了模型参数数目信息。

##调整R平方
library(leaps)
leaps<-regsubsets(Murder~Population+Illiteracy+Income+Frost,data=states,nbest=4)
plot(leaps,scale="adjr2")

img

该图第一行包含两个变量Population + Illiteracy,调整后的R平方最高,是最佳模型,和向后回归结果一致。

大部分情况全子集回归法较逐步回归法更优。

深层次分析

评价模型泛化能力和变量相对重要性的方法,包括交叉验证和相对重要性。

1、交叉验证

交叉验证是模型内验证的一种方法,将一定比例的数据挑选出来作为训练样本,另外的样本作为保留样本,先在训练样本上获取回归方程,然后在保留样本上做预测。由于保留样本不涉及模型及参数的选择,该样本可获得比新数据更为精确的估计。

最常用的交叉验证方法是k重交叉验证,在k重交叉验证中,样本被平均分为k个子样本,轮流将k-1个子样本组合作为训练集,另外1个子样本作为保留集,这样会获得k个预测方程,记录k个保留样本的预测表现结果,然后求其平均值。

#10重交叉验证
set.seed(123)
library(bootstrap)
shrinkage<-function(fit,k=10){
  require(bootstrap)
  theta.fit<-function(x,y){lsfit(x,y)}
  theta.predict<-function(fit,x){cbind(1,x)%*%fit$coef}
  x<-fit$model[,2:ncol(fit$model)]
  y<-fit$model[,1]
  results<-crossval(x,y,theta.fit,theta.predict,ngroup=k)
  r2<-cor(y,fit$fitted.values)^2
  r2cv<-cor(y,results$cv.fit)^2
  cat("Original R-square=",r2,"\n")
  cat(k,"Fold Cross-Validated R-square=",r2cv,"\n")
  cat("Change=",r2-r2cv,"\n")
}
fit<-lm(Murder~Population+Income+Illiteracy+Frost,data=states)
shrinkage(fit)
## Original R-square= 0.5669502 
## 10 Fold Cross-Validated R-square= 0.492987 
## Change= 0.0739632
fit2<-lm(Murder~Population+Illiteracy,data=states)
shrinkage(fit2)
## Original R-square= 0.5668327 
## 10 Fold Cross-Validated R-square= 0.5296188 
## Change= 0.03721387

R平方减少越少,结果越精确,可以看到第二个模型更稳健,泛化能力更强。

2、相对重要性

评价模型中哪个指标更重要,最简单的方法是比较标准化的回归系数。

#z-score标准化
zstates<-as.data.frame(scale(states))
zfit<-lm(Murder~Population+Income+Illiteracy+Frost,data=zstates)
coef(zfit)
##   (Intercept)    Population        Income    Illiteracy         Frost 
## -2.054026e-16  2.705095e-01  1.072372e-02  6.840496e-01  8.185407e-03

Illiteracy最重要, Frost最不重要。

最小二乘回归小结

前几次推文主要介绍了最小二乘回归,尤其是简单线性回归相关的分析,可以看出构建一个回归模型有许多注意事项和技巧,当然,之前的大多数方法有一个前提,即变量服从正态分布,那么假如我们的变量不服从正态分布怎么办呢?因此,之后一段时间,我们将介绍重抽样法、自主法与广义线性回归。

好了,今天的R语言实现统计方法系列推文暂时告一段落,我们下次再见吧!小伙伴们如果有什么统计上的问题,或者如果想要学习什么方面的生物信息内容,可以在微信群或者知识星球提问,没准哪天的推文就是专门解答你的问题哦!

(0)

相关推荐

  • R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析

    原文链接:http://tecdat.cn/?p=22596 研究大纲 介绍数据集和研究的目标 探索数据集 可视化 使用Chi-Square独立检验.Cramer's V检验和GoodmanKrusk ...

  • SAS系列35:Logistic回归模型理论

    导读 上一期介绍了多元线性回归分析的SAS实现,本打算介绍多元线性相关分析,有读者留言期待Logistic回归,那我们今天就开始介绍Logistic回归的数学模型.基本原理.分析步骤. 一.Logis ...

  • 练习R:stepAIC多元逐步回归

    用R做多重线性回归,除了lm()外还要再学习一个stepAIC().而且R逐步回归是基于AIC指标的,这和SPSS基于显著性概率p值(或F值)不同. 所以R的逐步回归结果不一定会和SPSS完全一致.先 ...

  • R笔记:全子集回归 | 最优子集筛选

    转自个人微信公众号[Memo_Cleon]的统计学习笔记:R笔记:全子集回归|最优子集筛选. 在进行多因素回归(多重线性回归.logistic回归.Cox回归等)时,为了得到简洁有效的模型,我们会做变 ...

  • 各类统计方法R语言实现(七)

    今天是各类统计方法R语言实现的第七期,我们主要介绍多重共线性.异常观察值的分析和回归模型改进措施. 多重共线性 多重共线性是指线性回归模型中的解释变量之间由于存在强相关关系而使模型估计失真或难以估计准 ...

  • 各类统计方法R语言实现(六)

    今天是各类统计方法R语言实现的第六期,我们主要介绍多元线性回归.回归诊断. 多元线性回归 多元线性回归指的是用多个自变量预测一个因变量,且自变量与因变量之间为线性关系,在分析过程中要考虑交互项的问题. ...

  • 各类统计方法R语言实现(五)

    今天是各类统计方法R语言实现的第五期,我们主要介绍简单线性回归和多项式回归. 基础知识 什么是回归? 回归分析指用一个或多个自变量来预测因变量的方法. 简而言之,就是用已知的变量预测未知的变量,比如临 ...

  • 各类统计方法R语言实现(四)

    白介素2的读书笔记,分享临床科研干货,一起见证时间的力量 不知不觉就到第四期了,小伙伴们是否跟着我们的推文一起练习了呢?当然,统计光靠跑代码是不够的,还需要结合理论知识一同学习,可以边复习理论,边跟着 ...

  • 各类统计方法R语言实现(三)

    各位小伙伴们大家好,今天是我们的系列推文"各类统计方法R语言实现"第三篇,今天介绍的主要内容是方差分析. 方差分析适用用于两个及两个以上样本均数差别的显著性检验,其中两组之间的方差 ...

  • 各类统计方法R语言实现(二)​

    各位小伙伴们大家好,今天是我们的系列推文"各类统计方法R语言实现"第二篇,今天介绍的主要内容有:正态性检验.方差齐性检验.t检验.近似t检验. t检验亦称student t检验,是 ...

  • 各类统计方法R语言实现(一)

    无论是在临床研究还是在基础研究中,统计都是非常重要的一关,而在R语言中,可以轻松实现大多数统计方法.因此,今天小编将开启一个全新的系列推文:利用R语言实现各类常用统计方法,希望能对大家有所帮助.由于统 ...

  • R语言可视化(三十八):ROC曲线图绘制

    38. ROC曲线图绘制清除当前环境中的变量rm(list=ls())设置工作目录setwd("C:/Users/Dell/Desktop/R_Plots/38roc/")使用RO ...

  • 限制性立方样条图,一种美的不行的趋势性分析方法(附R语言详细教程)

    2021年4月专题:趋势性分析方法系列 1.最基本的趋势性检验方法 2.利用回归进行趋势性分析 3.限制性立方样条图,一种美的不行的趋势性分析方法 4.Loess回归,非线性趋势性分析,怎么能少了它呢 ...