banner

一篇文章搞懂R语言回归

作者: afenxi来源: afenxi时间:2017-01-19 11:50:40

1.回归的多面性 回归类型 用途 简单线性 个量化的解释变量来预测一个量化的响应变量(一个因变量、一个自变量) 多项式 一个量化的解释变量预测一个量化的响应变量,模型的关系是 n阶多项式(一个预测变量,但同时包含变量的幂) 多元线性 用两个或多个量化的解释变量预测一个量化的响应变量(不止一个预测变量) 多变量 用一个或多个解释变量预测多个响应变量 Logistic 用一个或多个解释变量预测一个类别型变量 泊松 用一个或多个解释变量预测一个代表频数的响应变量 Cox比例风险 用一个或多个解释变量预测一个事件(死亡、失败或旧病复发)发生的时间

 

时间序列对误差项相关的时间序列数据建模 非线性 用一个或多个量化的解释变量预测一个量化的响应变量,不过模型是非线性的 非参数 用一个或多个量化的解释变量预测一个量化的响应变量,模型的形式源 自数据形式,不事先设定 稳健 用一个或多个量化的解释变量预测一个量化的响应变量,能抵御强影响点的干扰 2.OLS回归

OLS回归是通过预测变量的加权和来预测量化的因变量,其中权重是通过数据估计而得以的参数。

使残差平方和最小

为能够恰当地解释OLS模型的系数,数据必须满足以下统计假设:

(1)      正态性对于固定的自变量,因变量值成正态分布

(2)      独立性 Yi值之间相互独立

(3)      线性   因变量与自变量之间为线性相关

(4)      同方差性因变量的方差不随自变量的水平不同而变化,即不变方差或同方差性

3.用lm()拟合回归模型

拟合线性模型最基本的函数就是lm(),格式为:

myfit<-lm(formula,data)

formula指要拟合的模型形式,data是一个数据框,包含了用于拟合模型的数据

formula形式如下:Y~X1+X2+……+Xk (~左边为响应变量,右边为各个预测变量,预测变量之间用+符号分隔)

R表达式中常用的符号

符号

用途

~ 分隔符号,左边为响应变量,右边为解释变量,eg:要通过x、z和w预测y,代码为y~x+z+w + 分隔预测变量 : 表示预测变量的交互项  eg:要通过x、z及x与z的交互项预测y,代码为y~x+z+x:z * 表示所有可能交互项的简洁方式,代码y~x*z*w可展开为y~x+z+w+x:z+x:w+z:w+x:z:w ^ 表示交互项达到某个次数,代码y~(x+z+w)^2可展开为y~x+z+w+x:z+x:w+z:w . 表示包含除因变量外的所有变量,eg:若一个数据框包含变量x、y、z和w,代码y~.可展开为y~x+z+w

 

  - 减号,表示从等式中移除某个变量,eg:y~(x+z+w)^2-x:w可展开为y~x+z+w+x:z+z:w -1 删除截距项,eg:表示y~x-1拟合y在x上的回归,并强制直线通过原点 I() 从算术的角度来解释括号中的元素。Eg:y~x+(z+w)^2将展开为y~x+z+w+z:w。相反,代码y~x+I((z+w)^2)将展开为y~x+h,h是一个由z和w的平方和创建的新变量 function 可以在表达式中用的数学函数,例如log(y)~x+z+w表示通过x、z和w来预测log(y)

 

对拟合线性模型非常有用的其他函数

函数 用途 Summary() 展示拟合的详细结果 Coefficients() 列出拟合模型的模型参数(截距项和斜率) Cofint() 提供模型参数的置信区间(默认95%) Fitted() 列出拟合模型的预测值 Residuals() 列出拟合模型的残差值 Anova() 生成一个拟合模型的方差分析,或者比较两个或更多拟合模型的方差分析表 Vcov() 列出模型参数的协方差矩阵 AIC() 输出赤池信息统计量 Plot() 生成评价拟合模型的诊断图 Predict() 用拟合模型对新的数据集预测响应变量值 4.简单线性回归

 

fit<-lm(weight~height,data=women)

summary(fit)

一篇文章搞懂R语言回归-数据分析网

在Pr(>|t|)栏,可以看到回归系数(3.45)显著不为0(p<0.001),表明身高每增加1英寸,体重将预期地增加3.45磅

R平方项(0.991)表明模型可以解释体重99.1%的方差,它也是实际和预测值之间的相关系数(R^2=r^2)

残差的标准误(1.53lbs)则可认为模型用身高预测体重的平均误差

F统计量检验所有的预测变量预测响应变量是否都在某个几率水平之上

fitted(fit)#拟合模型的预测值

一篇文章搞懂R语言回归-数据分析网

residuals(fit)#拟合模型的残差值

一篇文章搞懂R语言回归-数据分析网

plot(women$height,women$weight,

xlab="Height (in inches)",

ylab="Weight(in pounds)")

abline(fit)

一篇文章搞懂R语言回归-数据分析网 5.多项式回归

fit2<-lm(weight~height+I(height^2),data=women)

summary(fit2)

一篇文章搞懂R语言回归-数据分析网

plot(women$height,women$weight,

xlab="Height(in inches)",

ylab="Weight(in lbs)")

lines(women$height,fitted(fit2))

一篇文章搞懂R语言回归-数据分析网

一般来说,n次多项式生成一个n-1个弯曲的曲线

car包中的scatterplot()函数,可以很容易、方便地绘制二元关系图

scatterplot(weight~height,             data=women,             spread=FALSE,             lty.smooth=2,             pch=19,             main="Women Age 30-39",             xlab="Height (inches)",             ylab="Weight(lbs.)") 一篇文章搞懂R语言回归-数据分析网 6.多元线性回归

采用的数据集:state.x77

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

检测二变量关系

cor(states)

一篇文章搞懂R语言回归-数据分析网

library(car)

scatterplotMatrix(states,spread=FALSE,lty.smooth=2,main="Scatter Plot Matrix")

一篇文章搞懂R语言回归-数据分析网

scatterplotMatrix()函数默认在非对角线区域绘制变量间的散点图,并添加平滑(loess)和线性拟合曲线

多元线性回归

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

summary(fit)

一篇文章搞懂R语言回归-数据分析网 7.有交互项的多元线性回归

fit<-lm(mpg~hp+wt+hp:wt,data=mtcars)

summary(fit)

一篇文章搞懂R语言回归-数据分析网

通过effects包中的effect()函数,可以用图形展示交互项的结果

fit<-lm(mpg~hp+wt+hp:wt,data=mtcars)

summary(fit)

install.packages("effects")

library(effects)

plot(effect("hp:wt",fit,

list(wt=c(2.2,3.2,4.2))),multiline=TRUE)

一篇文章搞懂R语言回归-数据分析网

8.回归诊断

(1)标准方法

简单线性回归

fit<-lm(weight~height,data=women)

par(mfrow=c(2,2))

plot(fit)

一篇文章搞懂R语言回归-数据分析网

正态性:当预测变量值固定时,因变量成正态颁,则残差图也应是一个均值为0的正态颁。正态Q-Q图是在正态颁对应的值上,标准化残差的概率图,若满足正态假设,则图上的点应该落在吓45度角的直线上,若不是,则违反了正态性假设。

独立性:只能从收集的数据中来验证。

线性:若因变量与自变量线性相关,则残差值与预测(拟合)值就没有任务系统关联,若存在关系,则说明可能城要对回归模型进行调整。

同方差性:若满足不变方差假设,则在位置尺度图(Scale-Location Graph)中,水平线周围的点应随机分布。

二次拟合诊断图

fit2<-lm(weight~height+I(height^2),data=women)

par(mfrow=c(2,2))

plot(fit2)

一篇文章搞懂R语言回归-数据分析网

(2)改进的方法

(car包中的)回归诊断实用函数

函数 目的 qqPlot() 分位数比较图 durbinWatsonTest() 对误差自相关性做Durbin-Watson检验 crPlots() 成分与残差图 ncvTest() 对非恒定的误差方差做得分检验 spreadLevelPlot() 分散水平检验 outlierTest() Bonferroni离群点检验 avPlots() 添加的变量图形 inluencePlot() 回归影响图 scatterplot() 增强的散点图 scatterplotMatrix() 增强的散点图矩阵 vif() 方差膨胀因子

另gvlma包提供了对所有线性模型进行检验的方法

正态性:

与 plot()函数相比,qqplot()函数提供了更为精确的正态假设检验方法,画出了n-p-1个自由度的t分布下的学生化残差图形,n为样本大小,p是回归参数的数目(包括截距项)

 

library(car)

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

qqPlot(fit,labels=row.names(states),id.method="identify",simulate=TRUE,main="Q-Q Plot")

一篇文章搞懂R语言回归-数据分析网

绘制学生残差图的函数

residplot<-function(fit,nbreaks=10) fit<-lm(Murder~Population+Illiteracy+Income+Frost,data=states) relweights(fit,col="lightgrey")

 

作者:feng_lilan

来源:http://blog.csdn.net/lilanfeng1991/article/details/29627405

banner
看过还想看
可能还想看
热点推荐
Yonghong的价值观:以卓越的数据技术为客户创造价值,实现客户成功。