All models are wrong, but some are useful —George Box
R本身是一门统计语言,主要用于统计分析,前面的语法部分算是基础,接下来开始进入统计模型应用。首先从最常用的回归分析说起。
有关线性回归分析模型的基本假定需要注意:1)关于随机干扰项的高斯-马尔科夫定理;2)关于自变量的:不存在共线性;3)关于模型的:模型设定正确。
- 模型拟合
lm
函数:用最小二乘法估计模型参数
x <- seq(0,1,length.out = 100)
noise <- rnorm(n = 100, mean = 0, sd = 1)
beta0 <- 1
beta1 <- 2
y <- beta0 + beta1 * x + noise
model <- lm(y~x)
summary(model) #返回有关线性回归模型的内容
names(model) #查看模型中包含的内容
plot(y~x)
abline(model) #在图中增加拟合线
- 模型预测
predict
函数
yConf <- predict(model, interval = "confidence")
yPred <- predict(model, interval = 'prediction')
plot(y~x, col = 'gray', pch = 16)
lines(yConf[,"lwr"]~x, col = 'black', lty = 3)
lines(yConf[,"upr"]~x, col = 'black', lty = 3)
lines(yPred[,"lwr"]~x, col = 'black', lty = 2)
lines(yPred[,"upr"]~x, col = 'black', lty = 2)
lines(yPred[,"fit"]~x, col = 'black', lty = 1)
- 离散型自变量
实际上就是方差分析,模型中会为离散型自变量的每一个水平估计一个回归系数,若要检验自变量是否对因变量有显著影响,不能单看每个系数的t检验,而应该通过方差分析方法。
模型检验
- 正态性检验
根据理论分析,可以将随机干扰项的正态性检验转化为对残差的正态性检验。利用stats
包中的shapiro.test
函数可以进行SW检验 - 线性检验
一般用绘制残差图的方式考察线性模型是否合适。如果线性不适合,需要引入二次项和交互项,在R中一般用I(x^2)
表示引入x ^ 2以及x和x^2的交互项 - 异方差检验
如果模型中存在异方差,一般用加权最小二乘法,通过在lm()
函数中添加参数weights =。如果不确定异方差的形式,可以通过nlm
包中的gls
函数,指定参数weights = varFixed(~x)
,通过迭代反复尝试合适的形式。 - 异常值
离群点:远离回归线的点,通常表现为因变量的异常值。用学生化删除残差判断离群点。个别的离群点对回归模型的影响不是很大,但需要注意成群的离群点。用rstudent
函数计算
杠杆点:远离自变量均值的点。用杠杆值判断杠杆点。用hatvalues
函数计算
高影响点:对回归线有重要影响的点。如果一个样本点的残差较大,且杠杆值也较大,则为高影响点,当改变该点坐标时会对回归参数产生较大影响。用COOK距离判断高影响点。
car
包中的influencePlot
函数可以将三个指标用气泡图的形式绘制出来。
需要注意的是,异常值只是相当于此模型而言的,若该点实际上是正常点,则需要考虑模型是否合适。 - 多重共线性
可以用car
包中的vif()
函数计算方差膨胀因子
逐步回归法:用step()
函数,它以AIC为准则自动筛选变量。
非参数回归
- 局部多项式回归拟合:
loess
函数:指定参数span
表示数据子集的获取范围,用于确定平滑效果,degree
表示局部回归中的阶数,1表示线性回归,2表示二次回归
Logistic回归
用glm
函数建立广义线性模型,用参数family
指定分布类型,logistic模型指定为binomial
用predict
函数进行预测,predict(model, data, type = 'response'
此外,还可以用mlogit
包中的mlogit
函数做多分类变量logistic回归,rms
包中的lrm
函数做顺序变量logistic回归,glmnet
包中的glmnet
函数做基于正则化的logistic回归