最近用R和python做了一些回归分析的项目,发现这两个工具各有特点,如果目的是分析研究用R即可,毕竟R语言有很多方便的函数;如果目的是为了建模预测,用python的sklearn(集成了很多机器学习算法和模型检验函数),工具只是手段,我们对结果负责就好。
帖子目录(也是回归分析步骤):
1、作图,观察变量分布,均值和中位数等统计学指标,宏观了解数据
2、使用全子集回归选择变量,生成模型,评估模型效果
3、回归诊断
4、对异常值,强影响点和高杠杆指进行处理,重新生成模型,再次评估模型效果
5、改进措施(变量类型转换,删除变量,因子分析)
6、非线性回归问题(python:logistic ,ridge,lasso,弹性网络 ) 测试集和训练集,模型评估 K折交叉验证等等)
注:本例数据集来源于R语言基础包中的state.x77数据集,我们想探究一个州的犯罪率和其他因素的关系,自变量为人口、文盲率、平均收入和结霜天数(温度在冰点以下的平均天数),因变量为谋杀率
多元线性回归步骤:
一、画图观察变量分布以及变量间关系
library(car)
states
"Illiteracy", "Income", "Frost")])
#绘制变量间的散点图,并添加平滑和线性拟合曲线
#对角线区域绘制每个变量的密度图和轴须图
scatterplotMatrix(states, spread=FALSE, smoother.args=list(lty=2),
main="Scatter Plot Matrix")
#cor()函数提供了二变量之间的相关系数,
cor(states)
R-bianliang.png
二、拟合回归曲线
1、全子集回归
library(leaps)
leaps
Frost, data=states, nbest=4)
plot(leaps, scale="adjr2")
R-quan.png
从图中可看出,双预测变量模型( Population和Illiteracy)是最佳模型(R^2最高)
2、拟合回归曲线
通过全子集回归,可以看出双预测变量模型为最佳模型,但是为了对模型概要(summary(fit))参数进行解释,同时为了和《R语言实战》回归部分保持一致,仍然用Population + Illiteracy + Income + Frost四个变量拟合曲线
注:如果有二次项I(Income^2)
fit
data=states)
summary(fit)
运行结果如下:
summary(fit).png
结果解释:
1)文盲率的回归系数为4.14,表示控制人口、收入和温度不变时,文盲率上升1%,谋杀率将会上升4.14%,
2)文盲率的回归系数在p<0.001的水平下显著不为0(p=0.000022)。
3)Frost的系数没有显著不为0( p=0.954),表明当控制其他变量不变时, Frost与Murder不呈线性相关。
4)总体来看,所有的预测变量解释了各州谋杀率57%(Multiple R-squared=0.567)的方差。
5)F的值是回归方程的显著性检验,表示的是模型中被解释变量与所有解释变量之间的线性关系在总体上是否显著做出推断
三、回归诊断
1、综合性检验
library(gvlma)
gvmodel
summary(gvmodel)
运行结果如下:
gvmodel.jpg
结果解释:
1)从输出项( Global Stat中的文字栏)我们可以看到数据满足OLS回归模型所有的统计假设( p=0.597)。
2)若Decision下的文字表明违反了假设条件(比如p<0.05),你可以使用下面的方法(正态性&