多元线性回归实战模型建立

个人总结的部分多元线性回归案例,目前线性回归过于简单,在机器学习盛行的当下在数学建模和数据挖掘里面应用较少,但是该模型简单容易上手。

多元线性回归模型表达式:

y=\beta 0+\beta1\cdot X1+\beta2\cdot X2+...\beta n\cdot Xn

多元线性回归,顾名思义肯定是解决多个自变量变量对一个因变量的线性问题

案例1:美国房价预测

下面以美国房价案例来进行分析

##多元线性回归
####案例1:美国房屋信息数据的预测####
##预测AvgPrice,并建立多元线性回归模型
##USA_Housing.csv包含不同地区的平均房价及多个可能影响房价的自变量(PS:我个人翻译可能会有问题)
##AvgAreaIncome:该地区的平均收入
##AvgAreaHouseAge:房子的平均面积
##AvgAreaNumberRooms:房子平均数量
##AvgAreaNumberofBedrooms:平均卧室面积
##AreaPopulation:该地区人口数量
##AvgPrice:房子价格
getwd()##寻找默认目录,将USA_Housing.csv数据集放到该目录下
data <- read.csv("USA_Housing.csv")##读取数据集
summary(data)##观察数据,存在6个变量

##作密度图,可视化各个变量的分布
library(ggcorrplot)
library(tidyr)
data_0 <- gather(data,key="varname",value="value",1:6)
ggplot(data_0)+theme_bw()+
  geom_density(aes(value),fill = "red",alpha = 0.5)+
  facet_wrap(.~varname,scales = "free")+
  theme(axis.text.x = element_text(angle = 30))
##除了AvgAreaNumberofBedrooms以外其它变量都呈现正态分布

除了AvgAreaNumberofBedrooms以外其它变量都呈现正态分布,一般来说,多元线性回归的前提条件需要保证自变量近似正态分布,。

##作热力图观察变量之间的关联性
house_cor <- cor(data)
library(corrplot)##作热力图必须的包
corrplot.mixed(house_cor,tl.col="black",tl.pos = "d",number.cex = 0.8)

##换一种热力图作法
library(ggcorrplot)
ggcorrplot(house_cor,method = "square",lab = TRUE)+
  theme(axis.text.x = element_text(size = 10),
        axis.text.y = element_text(size = 10))
##颜色越深,表面变量之间的关联性越强,AvgPrice除了和AvgAreaNumberofBedrooms,
##都明显呈现出关联性,且和AvgAreaIncome关联性最强=0.64,说明可以建立多元线性回归模型。

颜色越深,表面变量之间的关联性越强,AvgPrice除了和AvgAreaNumberofBedrooms,都明显呈现出关联性,且和AvgAreaIncome关联性最强=0.64,说明可以建立多元线性回归模型。

##多元线型回归的建立
lm1 <- lm(AvgPrice~.,data = data)
summary(lm1)
##一般认为,P值小于0.05则认为变量显著,从输出的结果中可以发现AvgAreaNumberofBedrooms变量是不显著的p值等于0.207
##但是整体模型的p值小于0.05,且R2等于0.9179,建立得到的模型是显著的

第一次回归结果:

Call:
lm(formula = AvgPrice ~ ., data = data)

Residuals:
    Min      1Q  Median      3Q     Max 
-337020  -70236     320   69175  361870 

Coefficients:
                          Estimate Std. Error  t value Pr(>|t|)    
(Intercept)             -2.637e+06  1.716e+04 -153.708   <2e-16 ***
AvgAreaIncome            2.158e+01  1.343e-01  160.656   <2e-16 ***
AvgAreaHouseAge          1.656e+05  1.443e+03  114.754   <2e-16 ***
AvgAreaNumberRooms       1.207e+05  1.605e+03   75.170   <2e-16 ***
AvgAreaNumberofBedrooms  1.651e+03  1.309e+03    1.262    0.207    
AreaPopulation           1.520e+01  1.442e-01  105.393   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 101200 on 4994 degrees of freedom
Multiple R-squared:  0.918,	Adjusted R-squared:  0.9179 
F-statistic: 1.119e+04 on 5 and 4994 DF,  p-value: < 2.2e-16
##这里,为了提高模型精度,剔除不显著变量拟合新的回归模型
lm2 <- lm(AvgPrice~AvgAreaIncome+AvgAreaHouseAge+AvgAreaNumberRooms
          +AreaPopulation,data = data)
summary(lm2)
##剔除AvgAreaNumberofBedrooms后,模型p值没有变化,R2=0.9179,说明剔除该变量对模型没有影响。

剔除变量第二次回归结果:

Call:
lm(formula = AvgPrice ~ AvgAreaIncome + AvgAreaHouseAge + AvgAreaNumberRooms + 
    AreaPopulation, data = data)

Residuals:
    Min      1Q  Median      3Q     Max 
-338419  -70058     132   69074  362025 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)        -2.638e+06  1.716e+04 -153.73   <2e-16 ***
AvgAreaIncome       2.158e+01  1.343e-01  160.74   <2e-16 ***
AvgAreaHouseAge     1.657e+05  1.443e+03  114.77   <2e-16 ***
AvgAreaNumberRooms  1.216e+05  1.423e+03   85.48   <2e-16 ***
AreaPopulation      1.520e+01  1.442e-01  105.39   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 101200 on 4995 degrees of freedom
Multiple R-squared:  0.918,	Adjusted R-squared:  0.9179 
F-statistic: 1.398e+04 on 4 and 4995 DF,  p-value: < 2.2e-16

后面为多元线性回归检验步骤,一般在数学建模里面,不单单要建立模型,还得对模型进行检验与评估,分析模型的好坏。

##多元线性回归模型的检验
##可视化回归模型的系数
library(GGally)
ggcoef(lm2,exclude_intercept = T,vline_color = "red",
       errorbar_color = "blue",errorbar_height = 0.1)+
  theme_bw()
## AvgAreaNumberRooms和AvgAreaHouseAge的回归系数最大,说明他们和AvgPrice关联性高

## 可视化回归模型的图像
par(mfrow = c(2,2))
plot(lm2)
## 图中四个图从左到右分别表示:残差-拟合图(Residuals vs Fitted)、标准化残差的正态性检验Q-Q图(NormalQ-Q)、
## 标准化残差-拟合图(Scale-Local)、残差一杠杆图(Residuals vs Leverage)。从4个子图中可以发现,除几个特殊样
## 本(4717、40等),模型拟合的残差属于正态分布,即该数据集满足多元线性回归的条件,且回归的结果是显著的。

## 对此可以建立多元线性回归的表达式
## AvgPrice=-2638000+21.58*AvgArealncome+165700*AvgAreaHouseAge+121600*AvgAreaNumberRooms+15.2*AreaPopulation

最后得到多元线性回归的表达式:
AvgPrice=-2638000+21.58*AvgArealncome+165700*AvgAreaHouseAge+121600*AvgAreaNumberRooms+15.2*AreaPopulation
 

案例2:囊胞纤维症患者肺功能的研究

下列为囊胞纤维症患者肺功能数据

以fev1为因变量,建立预测模型。

##cystfibr是ISwR包中的数据集,该数据帧具有25行和10列。它包含囊性纤维化患者(7–23岁)的肺功能数据。
##age,年龄
##sex,性别
##height,身高,单位:cm
##weight,体重,单位:kg
##bmp,与正常体重的百分体重,单位:%
##fev1,最大肺活量
##rv,余气量
##frc,功能残气量
##tlc,肺总气量
##pemax,最大呼气压力
##(PS:看不懂的上面名词话建议学一学人体生理解剖学)
##建立fev1(最大肺活量)的预测模型。
library(ISwR)
cystfibr<-cystfibr
summary(cystfibr)

##作密度图,可视化各个变量的分布
library(ggcorrplot)
library(tidyr)
data_1 <- gather(cystfibr,key="varname",value="value",1:10)
ggplot(data_1)+theme_bw()+
  geom_density(aes(value),fill = "red",alpha = 0.5)+
  facet_wrap(.~varname,scales = "free")+
  theme(axis.text.x = element_text(angle = 30))
##除bmp和sex以外,其它变量都近似呈正态分布。

除bmp和sex以外,其它变量都近似呈正态分布。

##作热力图观察变量之间的关联性
cystfibr_cor <- cor(cystfibr)
library(ggcorrplot)
ggcorrplot(cystfibr_cor,method = "square",lab = TRUE)+
  theme(axis.text.x = element_text(size = 10),
        axis.text.y = element_text(size = 10))
##不难观察得到,自变量和因变量fev1存在明显的相关性,大部分绝对值都大于0.4以上。且frc关联性最强,为-0.67。
##但是,观察得到自变量rv,frc,tlc之间存在明显的关联性,说明可能存在多重共线性问题。

观察得到自变量rv,frc,tlc之间存在明显的关联性,说明可能存在多重共线性问题。

##先不讨论多重共线性问题,以因变量fev1直接建立多元线性回归模型
fy1<-lm(fev1~.,data = cystfibr)
summary(fy1)
##最后得到模型的R2等于0.7232,p值等于0.0002646<0.05,说明多元线性效果还是可以的。
##但是,观察自变量的p值不难发现,只有4个自变量的p值小于0.05是显著的,说明其它自变量对提高模型稳定性可能没有帮助。
Call:
lm(formula = fev1 ~ ., data = cystfibr)

Residuals:
   Min     1Q Median     3Q    Max 
-7.278 -4.113  1.565  3.052  8.126 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)   
(Intercept) 104.98313   45.88316   2.288  0.03707 * 
age          -1.90901    1.00668  -1.896  0.07734 . 
sex          -9.24703    2.67096  -3.462  0.00348 **
height       -0.24728    0.20071  -1.232  0.23690   
weight        0.65133    0.46833   1.391  0.18459   
bmp           0.03319    0.28666   0.116  0.90937   
rv            0.04594    0.04536   1.013  0.32722   
frc          -0.24203    0.09697  -2.496  0.02470 * 
tlc          -0.07717    0.11440  -0.675  0.51022   
pemax         0.05781    0.05782   1.000  0.33328   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 5.891 on 15 degrees of freedom
Multiple R-squared:  0.827,	Adjusted R-squared:  0.7232 
F-statistic: 7.968 on 9 and 15 DF,  p-value: 0.0002646

多元线性回归模型的检验


##可视化回归模型的系数
library(GGally)
ggcoef(fy1,exclude_intercept = T,vline_color = "red",
       errorbar_color = "blue",errorbar_height = 0.1)+
  theme_bw()
## AvgAreaNumberRooms和AvgAreaHouseAge的回归系数最大,说明他们和AvgPrice关联性高

## 可视化回归模型的图像
par(mfrow = c(2,2))
plot(fy1)
## Q-Q图不难观察得到,除了个别样本(4,10,18),模型拟合的残差属于正态分布。

多重共线性问题与逐步回归

回归通常都会出现两种问题,过拟合和欠拟合,其中多重共线性的问题与过拟合密切相关。过拟合通常会使得模型失去泛用性,欠拟合会导致模型拟合的精度下降,前者可以通过减少无关变量来提高模型效果。继续分析案例2
案例2中最后的模型发现存在多重共线性问题

cystfibr_cor##查看相关性系数
##不难观察得到自变量很多之间都存在明显的相关性,age、height、weight之间相关性系数都大于0.9

##计算模型的方程膨胀因子(VIF),VIF值通常表示自变量之间共线性程度。
data_VIF<-cystfibr[,c(1:5,7:10)]##注意,计算自变量之间的VIF值要剔除掉因变量。
fy1_VIF<-summary(lm(age~.,data = data_VIF))##这里设置年龄为因变量
1/(1-fy1_VIF$r.squared)
##计算得到VIF值等于17.9,一般情况认为VIF值大于5时,则可以认为存在多重共线性问题。

##vif()是car包中特有的可以计算模型全部自变量的VIF函数。
library(car)
vif(fy1)##观察全部自变量的VIF值

逐步回归模型的建立

##逐步回归##
## 逐步回归通常用于优化多变量的线性回归模型,它能够剔除不显著变量建立回归模型。
## 赤池信息准则(AIC),该准则用于分析模型的拟合优度和用来拟合参数的数目,
## AIC值越小说明多重共线性小。
drop1(fy1)##观察模型的AIC值
##结果观察得到,当不剔除任何变量时,AIC值等于95。
drop1(fy1,test = "F")
## 分析得到最适合剔除的变量为sex
## 在R语言中,运用step()函数自动选择最优的方法进行多元线性回归模型。对于R语言
## 参数direction可以设置为"both"(向前向后法)、"backward"(向后法)或"forward"(向前法)。
fy2<-step(fy1)
## 结果表明只使用height、rv、age、weight、frc和sex为自变量进行回归的AIC值最小。
summary(fy2)
## 逐步回归前模型:R2 = 0.7232,p值 = 0.0002646
## 逐步回归后模型:R2 = 0.7481,p值 = 1.163e-05
## 说明使用逐步回归对模型拟合的效果是显著的,同时模型的拟合度和置信度都有所提高。
Call:
lm(formula = fev1 ~ age + sex + height + weight + rv + frc, data = cystfibr)

Residuals:
    Min      1Q  Median      3Q     Max 
-9.3378 -3.8380  0.4663  3.9743  7.3457 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 108.34533   19.46710   5.566 2.78e-05 ***
age          -2.02046    0.70879  -2.851 0.010619 *  
sex          -9.96707    2.39768  -4.157 0.000592 ***
height       -0.26152    0.16556  -1.580 0.131600    
weight        0.77778    0.20089   3.872 0.001118 ** 
rv            0.06688    0.03876   1.725 0.101572    
frc          -0.30219    0.07709  -3.920 0.001004 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 5.62 on 18 degrees of freedom
Multiple R-squared:  0.8111,	Adjusted R-squared:  0.7481 
F-statistic: 12.88 on 6 and 18 DF,  p-value: 1.163e-05

逐步回归模型的检验

##模型的检验
confint(fy2)## t检验
anova(fy2)## F检验
##结果表面rv、age、weight、frc和sex为自变量进行回归结果是显著的。

##回归诊断
library(gvlma)
gvlma(fy2)
##结果全局统计量(Global Stat)与其他个检验项的p值均大于0.05,数据满足线性回归所以的统计假设。
##epiDisplay包中的regress.display()函数可以汇总模型的结果。
library(epiDisplay)
regress.display(fy2)
模型检验结果:
Linear regression predicting fev1
 
                    adj. coeff.(95%CI)   P(t-test) P(F-test)
age (cont. var.)    -2.02 (-3.51,-0.53)  0.011     0.01     
                                                            
sex: 1 vs 0         -9.97 (-15,-4.93)    < 0.001   < 0.001  
                                                            
height (cont. var.) -0.26 (-0.61,0.09)   0.132     0.343    
                                                            
weight (cont. var.) 0.78 (0.36,1.2)      0.001     0.001    
                                                            
rv (cont. var.)     0.07 (-0.01,0.15)    0.102     < 0.001  
                                                            
frc (cont. var.)    -0.3 (-0.46,-0.14)   0.001     0.001    
                                                            
No. of observations = 25
  • 22
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值