几年前学过Data Analysis and Statistical Inference课程,使用的教材是An introduction to statistical learning with application in R。为了逼自己学下去,还硬头皮写读书笔记,应该说,当初的努力还是有收获的,但这个课程一直学得稀里糊涂的。直到我偶然发现了这个课程所用的教程出了中文版《统计学习导论 基于R应用》。立马搞了一本纸版,放床头睡前翻一翻,然后就发现了原来没搞懂的地方实在有点多,记录一下,方便自己以后查看。
1、在线性回归分析的时候,应该要检查一下是否存在共线性的问题。
以前读spe的时候也读到一篇关于共线性的文章,这次算是搞明白一点了。所谓共线性,就是有几个变量高度相关,不仅是一对变量,有可能是三个甚至更多的变量之间存在共线性,称为多重共线性(multicollinearity)。共线性的存在会导致难以分离出单个变量对响应值的影响。
那么,如何评估共线性呢?推荐的方法是计算一下方差膨胀因子(variance inflation factor,VIF),根据经验,如果VIF超过5或10就表示有共线性问题。在R中,可以安装car包,直接调用vif函数来检查。
install.packages(car)
library(car)
vif(lm.fit)
一旦出现了共线性的情况,有两种简单的解决方案。第一种就是直接在回归时剔除多余的问题变量,只保留一个变量来代表这一堆共线性的变量好了。第二种方法时把共线性变量组合成一个单一的变量,让这一堆变量用一个变量来代替。
2、参数方法与非参数方法
线性回归时参数(parametric)方法的一个特例,非参数(non-parametric)方法并不明确假设一个参数化的形式f(x),如K近邻回归(K-nearest nerghbors regression,KNN回归)。 使用非参数方法,如果数据维度高,容易出现维数灾难(curse of dimensionality),也就是给定的观测附近没有邻点,导致预测效果非常差。也就是说,一般情况下,如果每个预测变量仅有少量的观测值,参数化方法往往优于非参数化方法。
这个结论让我大跌眼镜,我一直推崇非参数方法...
3、R语言的一些使用技巧
R语言中其实有很多很好的技巧,只是一直不知道...
//选择所有变量进行回归
lm.fit=lm(y~.,data)
//选择除了某一项以外的其他所有参数回归
lm.fit=lm(y~.-x1,data)
//或者使用update函数
lm.fit=lm(y~.,data)
lm.fit1=update(lm.fit,~.-x1)
//交互项
//x1:x2表示将x1和x2的交互项纳入模型,x1*x2表示将,x1、x2、x1和x2的交互项一起纳入模型,是x1+x2+x1:x2的简写
lm.fit=lm(y~x1*x2,data)
//非线性变换
//二次方,使用I()
lm.fit2=lm(y~x1+I(x2^2),data)
//高阶多项式使用poly(),例如5阶段多项式
lm.fit5=lm(y~poly(x,5)
//检验哪一种模型更优,anova()
anova(lm.fit,lm.fit2)