R教材6 回归

  1. 大部分情况下,我们用OLS(最小二乘法)来得出回归模型
  2. lm(formula,data)拟合回归模型,data是数据框
    1. y~x,左边为响应变量,右边为解释变量;+分隔预测变量
    2. :表示交互项,x:y
    3. *表示所有可能交互项的简洁方式,x*z=x+z+x:z
    4. ^表示交互达到某个次数,(x+z+w)^2=x+z+w+x:z+x:w+z:w
    5. .表示出因变量外的所有变量,不包含自变量间的交互项
    6. -从等式中移除某个变量
    7. -1删除截距项
    8. I()从算术的角度来解释括号中的元素,如I(x^2);在R中写回归模型,单个x^2是不能写的,必须这样写
    9. fun可以在表达式中用的数学函数,可用在因变量,log(y)~x+z
  3. 回归结果分析函数
    1. summary()
    2. coefficients()列出模型的系数
    3. confint()提供模型参数的置信区间
    4. fitted()拟合模型的预测,模型拟合的y值,fitted(模型)
    5. residuals()拟合模型的残差
    6. anova()比较多个拟合模型的方差分析,可以比较模型间是否有差异,根据奥卡姆剃刀原则,可以比较是否是最优最简模型
    7. vcov()模型参数的协方差矩阵
    8. AIC()赤池信息统计量
    9. plot()作4张图
    10. *abline()在前一个图上划直线;lines(x,y)根据点作平滑的曲线
    11. *car::scatterplot()更方便地绘制二元关系图
    12. predict()用拟合模型对新数据预测y
    13. *options(digits=2),设置小数点后2位
  4. 多元线性回归
    1. 首先,检查变量间的相关性cor()
      1. car::scatterplotMatrix(),变量间的散点图矩阵
    2. lm(y~.,data),在多元回归中要考虑交互项,具有相关性就有可能有交互项
      1. effects::effect("term",mod,,xlevels=list(对象=c(确定的多值))),图形展示交互项结果(偏方法,一项确定的值下的另一项的变化);term模型要做的交互项,mod即模型,xlevels是一个列表,指定变量要设定的常量值
        1. 配合作图plot(effect(),multiline=T),multiline=T添加相应直线
    3. 回归诊断,检验数据集数据是否满足统计假设前提,部分情况下得出模型即可,对模型的前提的检验是不看重的,但是实际情况下,尽量要满足前提条件
      1. 线性回归的4个前提
        1. *残差即模型的随机误差项的观测值,残差的方差即模型的方差
        2. 线性:残差是一个期望值或平均值为0的随机变量
        3. 同方差性:残差具有同方差性
        4. 正态性:残差服从正态分布
        5. 独立性:残差与预测值不相关
      2. par(mfrow=c(2,2)),plot(mod)检验四图
        1. Residuals vs.Fitted残差拟合图:线性和独立性,拟合线应该是为0的直线,残差无规律的分布在0水平线的两侧
        2. Normal Q-Q残差正态图:正态性,理论残差和标准残差的对应图,45°直线则残差正态分布
        3. scale-Location同方差性:同方差性,满足不变方差假设,线周围的点应该随机分布
        4. Residuals vs.Leverage残差杠杆图:鉴别离群点、高杠杆值点和强影响点
          1. 离群点对模型的预测效果不佳
          2. 高杠杆预测变量x中的离群点
          3. 强影响点表明它对模型参数的估计产生的影响过大
    4. 回归诊断改进,car包
      1. qqPlot(mod)分位数比较图
      2. inluencePlot()回归影响图
      3. scatterplot()增强的散点图
      4. scatterplotMatrix()增强的散点图矩阵,属性的相关性矩阵
      5. 改进的前提论证
        1. 正态性:qqPlot(mod,id.method="identity")分位数比较图:n-p-1个自由度的t分布下的学生化残差studentized residual
          1. *source(".R"),导入R script
        2. 误差的独立性:durbinWatsonTest(mod),DurbinWatson检验:检测误差的序列相关性,适用于时间独立的数据,H0:无自相关性
        3. 线性:crPlots(mod)偏残差图:对模型的各个属性进行检验,若图形存在非线性则该属性的函数形式建模不够充分,对x或y变形
        4. 同方差性:ncvTest(mod):计分检验,H0:误差方差不变
          1. spreadLevelPlot(mod):最佳拟合曲线散点图,展示标准化残差绝对值和拟合值的关系,方差不变则点在水平的最佳拟合曲线周围呈水平随机分布;Suggested power transformation建议幂次变换
    5. 线性模型假设的综合验证:gvlma::gvlma(mod),summary(gvlma(mod)),对整体前提大概的检验,看global stat的结论
    6. 多重共线性:自变量之间具有相关性
      1. vif(mod),vif>4则表明有多重共线性
  5. 异常观测值:模型应该尽量符合数据,而不是数据拟合模型
    1. 离群点:outlierTest(mod),H0:模型中没有离群点,根据一个绝对值最大的残差值的显著性来判断是否有离群点,看Bonferonni p值,NA代表符合H0
    2. 高杠杆值点:异常的预测变量值x,hat statistic帽子统计量,hatvalues(mod)求出帽子统计量,自制hat.plot函数标出高杠杆值点
    3. 强影响点:对模型影响较大的点
      1. Cook距离,D统计量:Cook's D>4/(样本量-x个数-1)
      2. 变量添加图:avPlots(mod,ask=F),单个自变量在其他自变量上回归的残差值相对于因变量在其他自变量上回归的残差值的关系图
    4. 综合图:influencePlot(mod),坐标轴>2或<-2离群点,水平轴>0.2高杠杆值点,圆圈大小与影响成比例
  6. 对模型的改进:回归假设诊断后的解决方法
    1. 处理违背回归假设
      1. 删除观测点
      2. 变量变换
      3. 添加或删除变量
      4. 使用其他回归方法
    2. 删除观测点:删除最大的强影响点或离群点
      1. a[-c(which(row.names(a)==""),which(row.names(a)=="")),],删除多行
      2. which(row.names(states)==""),找出行号
    3. 变量变换
      1. 当模型违反残差正态性时,通常对因变量尝试变换,来估计其次数,summary(car::powerTransform(mod$Response variable))
        1. 查看Est Power即次数,LR test, lambda = (1) 2.12 1 p=0.1451,而现实中LR test对lambda=1的情况没有否定,所以还是用1次
      2. 当违反线性时,对X变换,car::boxTidwell(Y~X,data),对模型预测变量的变换来改善线性关系
        1. 查看p-value和MLE of lambda,H0:预测变量不需要变换
      3. 当违反同方差性时,变换自变量spreadLevelPlot(mod)作图并提供幂次变换建议
      4. 谨慎对待变量变换,必须对非线性回归模型中的变量有现实意义的解释
    4. 增删变量:处理多重共线性问题时,去除相关变量
      1. 岭回归:岭回归是一种专用于共线性数据分析的有偏估计回归方法,以损失部分信息、降低精度为代价获得回归系数,对病态数据的拟合要强于最小二乘法
    5. 其他回归方法
      1. 离群点、强影响点:稳健回归模型
      2. 违背正态性:非参数回归模型
      3. 违背线性:非线性回归模型
      4. 违背误差独立性:时间序列模型或多层次回归模型
      5. 违背同方差性:广义线性模型
  7. 选择最佳的回归模型
    1. 模型比较
      1. anova(mod1,mod2),比较两个嵌套模型的相似度,嵌套模型即1个mod完全包含在另1个mod里;没有显著不同则选择简单的模型
        1. H0:两个模型没有显著不同
      2. AIC赤池信息准则:AIC(mod1,mod2),比较的模型不需要嵌套
        1. AIC小的模型表示用较少的参数获得了足够的拟合度
    2. 变量选择:当模型较多时,不能比较模型,直接选择可用变量
      1. 逐步回归:每一步加入一个变量,再评估模型,对没有贡献的变量再删除;但并不会将每一个可能的模型进行评估
        1. MASS::stepAIC(mod,direction=""),增减变量的准则为精确AIC准则
      2. 全子集回归:所有可能的模型都会被检验,leaps::regsubsets(y~x,data,nbest),nbest是n个不同自变量个数的前n个最佳模型
        1. 作图plot(regsubsets(),scale="adjr2"),adjust R^2,阴影代表包含的预测变量x,垂直坐标代表其调整R^2
    3. 最佳的模型必须要有现实意义,理解背景知识有助于模型的开发
  8. 深层次分析
    1. 交叉验证:一定比例的数据作为训练样本,另外的数据作为保留样本,在保留样本上做预测,测算出真实的泛化误差(未知样本的正确率)
      1. k切法:等分为k个子集,(k-1)个训练,1个预测,比较k个预测方程的准确率,bootstrap::crossval()
    2. 相对重要性:预测变量的重要性排序
      1. 标准化的回归系数:scale()数据标准化(返回矩阵),再进行回归(需要数据框),得到标准的回归系数,as.data.frame(scale(data))
      2. 相对权重:对所有可能的子模型添加一个预测变量引起的R^2平均增加量的一个近似值,spss中的函数结果是每个预测变量对模型的方差的解释占比

猜你喜欢

转载自blog.csdn.net/u013103305/article/details/83409550