如何确定最优多元回归

本文主要是通过交互项,和信息准则AIC,BC以及显著性来确定最优的回归模型:

-------------------------------------  

library(MASS)

library(leaps)

## 1: 导入数据:主要变量为E1-E4,剩余变量为:G1-G20

datas<-read.csv(file="data.csv",header=TRUE)

datas

## 2: 展示部分数据集

library(knitr)

kable( head(datas[,1:12]), caption='Partial Data Set' )

## 3:  分析只有主要变量E1-E4来建立关于Y的回归模型

M_E<-lm(Y~E1+E2+E3+E4,data = datas)

summary(M_E)

##### 同时考虑到数据量以及当采用3阶交互时,存在自由度过高,无法建立回归模型故采用2阶交互

## 4: 建立在2阶交互项的回归模型

M_raw<-lm(Y~(E1+E2+E3+E4+G1+G2+G3+G4+G5+G6+G7+G8+G9+G10+G11+G12+G13+G14+G15+G16+G17+G18+G19+G20)^2, data=datas )

summary(M_raw)

## 5 此模型包括模型中所有交互项

## 检验残差图

plot(resid(M_raw) ~ fitted(M_raw), main='Residual Plot')

#library(FinTS)

#ArchTest((resid(M_raw))^2,lag=12)



## 6:Box-Cox检验

boxcox(M_raw)

## 7 Box-Cox变换后,建立回归模型

lambda<-0.5

M_trans <- lm(I((Y^lambda-1)/lambda) ~ (.)^2, data=datas )

summary(M_trans)

 

## 8:新的残差图

plot(resid(M_trans) ~ fitted(M_trans), main='New Residual Plot')

## 9逐步回归

M <- regsubsets( model.matrix(M_trans)[,-1], I((datas$Y^lambda-1)/lambda),

                 nbest = 1 , nvmax=5,

                 method = 'forward', intercept = TRUE )

temp <- summary(M)

## 10:软件包为我们提供具有选择性回归模型

Var <- colnames(model.matrix(M_trans))

M_select <- apply(temp$which, 1,

                  function(x) paste0(Var[x], collapse='+'))

data.frame(cbind( model = M_select, adjR2 = temp$adjr2, BIC = temp$bic))

## 11:确保模型中的重要主效应

M_main <- lm(I((datas$Y^lambda-1)/lambda) ~ ., data=datas)

temp <- summary(M_main)

temp$coefficients[ abs(temp$coefficients[,4]) <= 0.05, ]

# 12 通过使用模型请求中的第二个幂来考虑二阶交互

M_2nd <- lm( I((datas$Y^lambda-1)/lambda) ~ (.)^2, data=datas)

temp  <- summary(M_2nd)

temp$coefficients[ abs(temp$coefficients[,4]) <= 0.12, ]

# 13:进一步检验

M_2stage <- lm( I((datas$Y^lambda-1)/lambda) ~ (E2+E3+E4+G12+G13)^2, data=datas)

temp <- summary(M_2stage)

temp$coefficients[ abs(temp$coefficients[,4]) <= 0.05, ]

# 14:最后模型

G12<-datas$G12

G13<-datas$G13

E2<-datas$E2

E3<-datas$E3

E4<-datas$E4

E2_E3<-E2*E3

G12_G13<-G12*G13

Y<-datas$Y

M_2stage <- lm( I((Y^lambda-1)/lambda) ~ E2+E4+E2_E3+G12_G13, data=datas)

summary(M_2stage)

posted @ 2019-07-30 10:49  老壳藤  阅读(878)  评论(0编辑  收藏  举报