R语言—模型调整

Posted 大康的笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言—模型调整相关的知识,希望对你有一定的参考价值。

(一)改进措施
  • 删除观测点
删除离群点通常可以提高数据集对于正态假设的拟合度,而强影响点会干扰结果,通常也会被删除,删除最大的离群点或者强影响点后,模型需要重新拟合。若离群点或强影响点依然存在,重复以上过程直至获得比较满意的结果。
  • 变量变换

  1. 当模型不符合正态性,线性或者同方差性,使用car包中powerTransform函数。

  2. 违反线性假设时,使用car包中boxTidwell函数。

  3. 改善异方差性,使用car包中spreadLevelPlot函数。

(二)选择最佳的回归模型
  • 模型比较
可以选择AIC函数实现模型的比较,以state.x77数据集进行介绍。

>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)

> AIC(fit1,fit2)

AIC值越小,拟合度越好。结果显示fit2比fit1拟合度好。
  • 变量选择

(1) 逐步回归法
逐步回归中,模型会一次添加或删除一个变量,直到达到某个判停为止。用MASS包中的stepAIC()函数可以实现。

>library(MASS)

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

> fit<-lm(Murder~Population+Illiteracy+Income+Frost,data = states)

> stepAIC(fit,direction = "backward")

R语言—模型调整

第一次,Frost被删除,AIC从97.75降低到95.75;第二次,Income被删除,AIC继续下降,依次向后回归。此外,还有向前逐步回归和向前向后逐步回归。

#向前逐步回归

>stepAIC(frame,direction="forward")

#向后逐步回归

>stepAIC(fit1,direction = "backward")

#向后逐步回归

>stepAIC(fit1,direction = "stepwise")

逐步回归法局限性在于不能保证模型就是最佳模型,因为不是每一个可能的模型都被评价了。

(2)全子集回归法
本方法可以取所有可能的模型,并从中计算出最佳模型。可以使用leaps包中regsubsets函数实现。

>library(leaps)

>leaps<-regsubsets(Murder~Population+Illiteracy+Income+Frost,data = state,nbest = 4)

> plot(leaps,scale = "adjr2")

第一行(从下往上数)可以看到intercept截距项和income的模型调整R平方为0.033,而含有intercept,和population,illiteracy的模型调整R方为0.55,可以看出只含有这三项的模型最好。有一点就是当有大量预测变量时,全子集回归会很慢。

以上是关于R语言—模型调整的主要内容,如果未能解决你的问题,请参考以下文章

R语言leaps包中的regsubsets函数实现全集子集回归(all subsets regression)使用调整R方和Mallows Cp统计量筛选最优模型并可视化不同组合参数下的模型指标

R语言 支持向量机(class.weights可以对类别的权重进行调整,提高准确度)

R语言mgcv包中的gam函数拟合广义加性模型(Generalized Additive Model)GAM(对非线性变量进行样条处理计算RMSER方调整R方可视化模型预测值与真实值的曲线)

R语言笔记——将分类变量转换为连续变量

r语言怎么调整轴的粗细

R语言隐马尔可夫模型HMM识别不断变化的股票市场条件