这一节里我们将要讨论包含多个预测变量的回归分析问题。不过模型设定和结果输出等内容与前面系列讲过的关于回归分析和方差分析的内容差别不大,链接:R语言系列第四期:②R语言多组样本方差分析与KW检验
因此我们这一节的内容新颖之处就在于模型探索方面。


下面以Altman提到的一项关于囊胞性纤维症患者的肺功能的研究作为例子,数据集是ISwR包中的cystifibr。
使用pairs()函数可以绘制数据集中任意两个变量之间的散点图:

#Tips:首先par()函数的一个参数mex用来调整图形边界的行间距。而pairs()的参数gap用来改变各个子图之间的图间距,cex.labels用来缩放图中的字号。当前这种情况下,就是把cystfibr数据集里的所有变量都进行两两的相关分析,依据位置查看结果。
上面的图形中各个子图虽然相对较小,但是这个图形提供了一种获知多维数据整体情况的有效方法。例如,从图中可以清晰地看到变量age、height和weight强相关关系。
为了便于直接引用cystfibr数据集中的变量,我们可以将该数据集加入到当前的搜索路径中:
因为我们这个部分会用到很多诸如age、weight、height这样的常见变量名,所以最好确保当前工作空间中是否存在同名的变量。(无论大小写)


多元回归分析的模型设定是通过在模型公式中的解释变量之间添加“+”来完成的:
lm(pemax~age+sex+height+weight+bmp+fev1+rv+frc+tlc)
上面的公式意味着变量pemax可由一个由变量age、sex及其他变量组成的模型来描述(pemax是指患者的最大呼气压力,数据集cystfibr中其他变量的解释可以参考R中的数据集解释)
与之前谈到简单回归一样,lm函数返回的结果有限。我们可以借助summary()函数可以得到更多有趣的输出结果:
#Tips:注意,上面结果表明所有变量对应的t值都不显著,但是,联合F检验的结果却是显著的,原因在于t检验说明的仅仅是当从模型中删除某个变量而保留其他变量时模型的变化结果;对于变量在简化模型中是否统计显著,则没有做出说明;t检验认为没有一个变量是不能从模型中删除的。
通过Anova函数可以得到多元回归分析对应的方差分析表,该表给出的结果就跟上面的结果截然不同:
#Tips:除了最后一行(对应变量tlc)之外,这里的F检验结果和summary函数输出的t检验结果几乎是完全相悖的。Age变量的检验结果变得显著了,导致这种结果的原因在于这里的检验过程是逐步进行的。
Anova表的输出结果表明在模型中已包含age变量的情况下,再添加其他变量,模型准确度并未得到显著提高。可以进行联合检验,看看是否可以将age之外的变量全部去掉,做法是求贡献值的平方和,再对总和进行F检验,对应的程序如下:
上述结果中给出的是近似的F检验。
#Tips:上述两个模型应该是嵌套关系。从方差分析表可以看出,删除“age”外的其他变量是合理的,这里的p值0.2936指代的是模型除age外其他变量的显著性,显然是无统计学意义的。


R中有一个按照赤池信息准则(Akaike Information Criterion)进行模型筛选的函数step()。不过我们也可以人工向后消元:
人工进行模型降维的优点在于可以在该过程自由判断变量的取舍。显然我们会考虑把最后一个变量tlc优先剔除。
最后我们根据我们的标准0.05,选择了保留一个变量weight,这个变量最终的p值是0.000646,其实这个方法并不是标准的,存在偶然性,况且这个方法需要很多次的计算。而step()的方法可以这样:
这个方法就是按照AIC的值进行选择的。Direction有三个选择“both”“forward”和“backward”分别代表逐步法、向前法和向后法,这里就是我们统计上采用的逐步法筛选变量。
当然,筛选变量还需要考虑变量的实际意义,统计的结果不能作为唯一的标准。另外,我们在平常使用线性模型中也经遇到一些问题,比如共线性,交互效应等问题,我们会在这个系列的番外——R语言系列5番外为大家介绍。
好了,这部分的内容就先介绍到这里,我们下期再见。
参考资料:
1.《R语言统计入门(第二版)》人民邮电出版社 Peter Dalgaard著
2.《R语言初学者指南》人民邮电出版社 Brian Dennis著
3.Vicky的小笔记本《blooming for you》by Vicky