回归分析概述

2020-04-27  本文已影响0人  javen_spring

回归分析的应用

我们主要的困难有三个:发现有趣的问题, 设计一个有用的、可以测量的响应变量,以及收集合适的数据。

回归分析的分类

回归分析有多重分类,用的比较多的是logistic回归和Lasso回归。

普通最小二乘( OLS)回归法

OLS法的公式及含义

回归的R实现

简单线性回归
多元线性回归
> states <- as.data.frame(state.x77[,c("Murder", "Population", "Illiteracy", "Income", "Frost")])   ### 建立待研究变量的子数据框
> fit <- lm(Murder ~ Population + Illiteracy + Income + Frost, data=states)  ##进行多元线性拟合
> summary(fit)  ##输出拟合的详细结果
> fit <- lm(mpg ~ hp + wt + hp:wt, data=mtcars)
> summary(fit)

通过effects包中的effect()函数,来用图形展示交互项的结果。例如如车重均值3.2各加减1,即取wt2.2,3.2,4.2来观察马力(hp)对车mpg的影响(mtcars数据)。

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)

回归诊断

标准方法
fit <- lm(weight ~ height, data=women)  ##对响应变量及解释变量进行拟合
par(mfrow=c(2,2))
plot(fit)  ##plot()函数可画出四副图形
OLS回归统计假设判定.png

“正态Q-Q图”( Normal Q-Q,右上)是在正态分布对应的值下,标准化残差的概率图。当预测变量值固定时,因变量成正态分布,则残差值也应该是一个均值为0的正态分布。若满足正态假设,那么图上的点应该落在呈45度角的直线上;否则就违反了正态性的假设。
“残差图与拟合图”( Residuals vs Fitted,左上):若因变量与自变量线性相关,那么残差值与预测(拟合)值就没有任何系统关联。在“残差图与拟合图”中可以清楚地看到一个曲线关系,这暗示着你可能需要对回归模型加上一个二次项。反映线性假设。
“位置尺度图”( Scale-Location Graph,左下):若满足不变方差假设,那么在“位置尺度图”( Scale-Location Graph,左下)中,水平线周围的点应该随机分布。该图似乎满足此假设。反映同方差性假设。
“残差与杠杆图”( Residuals vs Leverage,右下):提供了你可能关注的单个观测点的信息。从图形可以鉴别出离群点、高杠杆值点和强影响点。

残差与杠杆图的解释.png
改进的方法
正态性检验
library(car)
states <- as.data.frame(state.x77[,c("Murder", "Population",
"Illiteracy", "Income", "Frost")])
fit <- lm(Murder ~ Population + Illiteracy + Income + Frost, data=states)
qqPlot(fit, labels=row.names(states), id.method="identify",
simulate=TRUE, main="Q-Q Plot")
误差的独立性
> durbinWatsonTest(fit)
lag Autocorrelation D-W Statistic p-value
1     -0.201          2.32        0.282     ##p值不显著( p=0.282)说明无自相关性,误差项之间独立
Alternative hypothesis: rho != 0  
线性
> library(car)
> crPlots(fit)
成分残差图.png
同方差性
> library(car)
> ncvTest(fit)
Non-constant Variance Score Test
Variance formula: ~ fitted.values
Chisquare=1.7 Df=1 p=0.19   ##p无显著性说明同方差性
> spreadLevelPlot(fit)  ##用来绘制尺度位置图(分布水平图)
Suggested power transformation: 1.2
分布水平图.png
线性模型假设的综合验证

gvlma包中的gvlma()函数能对线性模型假设进行综合验证,同时还能做偏斜度、峰度和异方差性的评价。它给模型假设提供了一个单独的综合检验(通过/不通过)综合验证。

> library(gvlma)
> gvmodel <- gvlma(fit)
> summary(gvmodel)
ASSESSMENT OF THE LINEAR MODEL ASSUMPTIONS
USING THE GLOBAL TEST ON 4 DEGREES-OF-FREEDOM:
Level of Significance= 0.05
Call:
gvlma(x=fit)
           Value   p-value    Decision
Global Stat 2.773 0.597 Assumptions acceptable.  #p>0.05线性模型假设全部接受
Skewness 1.537 0.215 Assumptions acceptable.
Kurtosis 0.638 0.425 Assumptions acceptable.
Link Function 0.115 0.734 Assumptions acceptable.
Heteroscedasticity 0.482 0.487 Assumptions acceptable.  #p>0.05同方差性假设接受

多重共线性

>library(car)
>vif(fit)   #计算VIF值
# Population Illiteracy Income Frost
      #1.2      2.2        1.3  2.1
>sqrt(vif(fit)) > 2 # 判定是否大于2,即是否存在方差共线性
# Population Illiteracy Income Frost
# FALSE        FALSE     FALSE FALSE

异常观测点的判定

library(car)
influencePlot(fit, id.method="identify", main="Influence Plot",
sub="Circle size is proportional to Cook's distance")
影响图.png

违反OLS假设的处理

> library(car)
> summary(powerTransform(states$Murder))
bcPower Transformation to Normality
           Est.Power Std.Err. Wald Lower Bound Wald Upper Bound
states$Murder 0.6      0.26            0.088            1.1 ##Murder的0.6次方来改善正态化
Likelihood ratio tests about transformation parameters
                   LRT  df pval
LR test, lambda=(0) 5.7 1 0.017
LR test, lambda=(1) 2.1 1 0.145   ##Murder的lambda=1次方不能拒绝,因此Murder可不用变量转换

car包中的boxTidwell()函数通过获得预测变量幂数的最大似然估计来改善线性关系

> library(car)
> boxTidwell(Murder~Population+Illiteracy,data=states)
          Score Statistic p-value MLE of lambda
Population    -0.32         0.75       0.87
Illiteracy     0.62         0.54       1.36   ##两者p>0.05均拒绝lamda转换,可不用变量转换

选择“最佳”的回归模型

模型比较(两个模型)
> states <- as.data.frame(state.x77[,c("Murder", "Population",
"Illiteracy", "Income", "Frost")])
> fit1 <- lm(Murder ~ Population + Illiteracy + Income + Frost,
data=states)  ##模型1,包括 Income + Frost两个自变量
> fit2 <- lm(Murder ~ Population + Illiteracy, data=states)
> anova(fit2, fit1) ##模型2
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.246
2 45 289.167 2 0.079 0.0061 0.994  ##p=0.994>0.05提示检验不显著,可以得出结论:不需要将这两个变量添加到线性模型中,可以将它们从模型中删除
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  ##模型2的AIC值较小,考虑应用,即剔除后两个变量
模型变量的选择

包括:逐步回归法( stepwise method)和全子集回归( all-subsets regression)

> 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")   ##向后逐步回归法
library(leaps)
states <- as.data.frame(state.x77[,c("Murder", "Population",
"Illiteracy", "Income", "Frost")])
leaps <-regsubsets(Murder ~ Population + Illiteracy + Income +
Frost, data=states, nbest=4)
plot(leaps, scale="adjr2")
深层次分析
交叉验证

对于OLS回归,通过使得预测误差(残差)平方和最小和对响应变量的解释度( R平方)最大,可获得模型参数。由于等式只是最优化已给出的数据,所以在新数据集(验证数据集)上表现并不一定好。
所谓交叉验证,即将一定比例的数据挑选出来作为训练样本,另外的样本作保留样本,先在训练样本上获取回归方程,然后在保留样本上做预测。由于保留样本不涉及模型参数的选择,该样本可获得比新数据更为精确的估计。

shrinkage <- function(fit, k=10){  ##shrinkage()函数,验证次数默认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) ##crossval() 函 数 可 以 实 现 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")
}
10次交叉验证结果.png

图中显示基于初始样本的R平方( 0.567)过于乐观了。对新数据更好的方差解释率估计是交叉验证后的R平方( 0.448)。

变量的相对重要性
预测变量的标准化回归系数.png

注:本文仅供个人学习之用,使用时请注明文章引用自R in Action: Data Analysis and Graphics with R, Second Edition by Robert I. Kabacoff。

上一篇 下一篇

猜你喜欢

热点阅读