Book-R语言实战


A_R 整体介绍

  多年前,我在申请一个统计咨询职位时,第一次遇到了R。雇主在正式面试前发来的材料中问我是否熟悉R。根据猎头的建议,我立马回答“是的,我很熟悉”,然后开始恶补R。在统计和研究方面我有丰富的经验,作为SAS和SPSS程序员也有25年的工作经验,而且对各种编程语言也颇为精通。学习R能有多难?但事与愿违。

  在学习这门语言的过程中(因为要面试,我要尽可能地快),我发现这门语言无论是底层的结构还是各种高级的统计方法,都是由各具体领域的专家为同行专家编写的。看在线帮助简直就是折磨,那不是教程,都是参考手册。每当我觉得自己已经对R的结构和功能有足够把握时,就会发现一些闻所未闻的新东西,它们让我感觉自己很渺小。

  为了解决这些问题,我开始以数据科学家的角度学习R。我开始思考如何才能成功地处理、分析和理解数据,包括:

    获取数据(从各种数据源将数据导入程序);

    整理数据(编码缺失值、修复或删除错误数据、将变量转换成更方便的格式);

    注释数据(以记住每段数据的含义);

    总结数据(通过描述性统计量了解数据的概况);

    数据可视化(一图胜千言);

    数据建模(解释数据间的关系,检验假设);

    整理结果(创建具有出版水平的表格和图形)。

  然后,我试图用R来完成这些任务。通过教授别人来学习是最好的方式,所以我创建了一个网站(www.statmethods.net),不断把我学到的东西放在上面。

  大概一年后,Marjan Bace(Manning的出版人)打电话给我,问我是不是能写 一本关于R的书。那时我已经写了50篇期刊文章、4份技术手册,以及大量章节的内容,还写了一本关于研究方法的书,所以,写一本关于R的书能有多难?结果依然是事与愿违。

  你现在捧着的这本书是我多年来梦寐以求的。我试图提供一份R的指南,让你能尽快感受到R的强大以及开源的魅力,不再感到沮丧和忧虑。我希望你能喜欢本书。

  如果你翻开了本书,那么很有可能是因为要做一些数据的收集、总结、转换、探索、建模、可视化或呈现方面的工作。如果确实如此,那么R完全能够满足你的需求!R已经成了统计、预测分析和数据可视化的全球通用语言。它提供各种用于分析和理解数据的方法,从最基础的到最前沿的,无所不包。


B_回归举例介绍

  从许多方面来看,回归分析都是统计学的核心。它其实是一个广义的概念,通指那些用一个或多个预测变量(也称自变量或解释变量)来预测响应变量(也称因变量、效标变量或结果变量)的方法。通常,回归分析可以用来挑选与响应变量相关的解释变量,可以描述两者的关系,也可以生成一个等式,通过解释变量来预测响应变量。

  例如,一个运动生理学家可通过回归分析获得一个等式,预测一个人在跑步机上锻炼时预期消耗的卡路里数。响应变量即消耗的卡路里数(可通过耗氧量计算获得),预测变量则可能包括锻炼的时间(分)、处于目标心率的时间比、平均速度(英里/小时)、年龄(年)、性别和身体质量指数(BMI)。

  从理论的角度来看,回归分析可以帮助解答以下疑问。

锻炼时间与消耗的卡路里数是什么关系?是线性的还是曲线的?比如,卡路里消耗到某个点后,锻炼对卡路里的消耗影响会变小吗?

耗费的精力(处于目标心率的时间比,平均行进速度)将被如何计算在内?

这些关系对年轻人和老人、男性和女性、肥胖和苗条的人同样适用吗?

  从实际的角度来看,回归分析则可以帮助解答以下疑问。

一名30岁的男性,BMI为28.7,如果以每小时4英里的速度行走45分钟,并且80%的时间都在目标心率内,那么他会消耗多少卡路里呢?

为了准确预测一个人行走时消耗的卡路里数,你需要收集的变量最少是多少个?

预测的准确度可以达到多少?

  由于回归分析在现代统计学中非常重要,本章将对其进行一些深度讲解。首先,我们将看一看如何拟合和解释回归模型,然后回顾一系列鉴别模型潜在问题的方法,并学习如何解决它们。其次,我们将探究变量选择问题。对于所有可用的预测变量,如何确定哪些变量包含在最终的模型中?再次,我们将讨论一般性问题。模型在现实世界中的表现到底如何?最后,我们再看看相对重要性问题。模型所有的预测变量中,哪一个最重要,哪一个第二重要,哪一个最无关紧要?

  正如你所看到的,我们会涵盖许多方面的内容。有效的回归分析本就是一个交互的、整体的、多步骤的过程,而不仅仅是一点技巧。为此,本书并不将它分散到多个章中进行讲解,而是用单独的一章来讨论。因此,这一章将成为本书最长最复杂的一章。只要坚持到最后,我保证你一定可以掌握所有的工具,自如地处理许多研究性问题!


回归的多面性

  回归是一个令人困惑的词,因为它有许多特殊变种(见下表8-1)。对于回归模型的拟合,R提供的强大而丰富的功能和选项也同样令人困惑。

  • 表8-1 回归分析的各种变体
回归类型 用 途
简单线性 用一个量化的解释变量预测一个量化的响应变量
多项式 用一个量化的解释变量预测一个量化的响应变量,模型的关系是n阶多项式
多元线性 用两个或多个量化的解释变量预测一个量化的响应变量
多变量 用一个或多个解释变量预测多个响应变量
Logistic 用一个或多个解释变量预测一个类别型响应变量
泊松 用一个或多个解释变量预测一个代表频数的响应变量
Cox比例风险 用一个或多个解释变量预测一个事件(死亡、失败或旧病复发)发生的时间
时间序列 对误差项相关的时间序列数据建模
非线性 用一个或多个量化的解释变量预测一个量化的响应变量,不过模型是非线性的
非参数 用一个或多个量化的解释变量预测一个量化的响应变量,模型的形式源自数据形式,不事先设定
稳健 用一个或多个量化的解释变量预测一个量化的响应变量,能抵御强影响点的干扰

  在这一章中,我们的重点是普通最小二乘(OLS)回归法,包括简单线性回归、多项式回归和多元线性回归OLS回归是现今最常见的统计分析方法,其他回归模型(Logistic回归和泊松回归)将在第13章介绍。

OLS 回归的适用情境

  OLS回归是通过预测变量的加权和来预测量化的因变量,其中权重是通过数据估计而得的参数。现在让我们一起看一个改编自Fwa(2006)的具体示例(此处没有任何含沙射影之意)。

  一个工程师想找出跟桥梁退化有关的最重要的因素,比如使用年限、交通流量、桥梁设计、建造材料和建造方法、建造质量以及天气情况,并确定它们之间的数学关系。他从一个有代表性的桥梁样本中收集了这些变量的相关数据,然后使用OLS回归对数据进行建模。

  这种方法的交互性很强。他拟合了一系列模型,检验它们是否符合相应的统计假设,探索了所有异常的发现,最终从许多可能的模型中选择了“最佳”的模型。如果成功,那么结果将会帮助他完成以下任务

在众多变量中判断哪些对预测桥梁退化是有用的,得到它们的相对重要性,从而关注重要的变量。

根据回归所得的等式预测新的桥梁的退化情况(预测变量的值已知,但是桥梁退化程度未知),找出那些可能会有麻烦的桥梁。

利用对异常桥梁的分析,获得一些意外的信息。比如他发现某些桥梁的退化速度比预测的更快或更慢,那么研究这些“离群点”可能会有重大的发现,能够帮助理解桥梁退化的机制。

  可能桥梁的例子并不能引起你的兴趣。而我是从事临床心理学和统计的,对土木工程也是一无所知,但是这其中蕴含的一般性思想适用于物理、生物和社会科学的许多问题。以下问题都可以通过OLS方法进行处理

铺路表面的面积与表面盐度有什么关系(Montogomery,2007)?

一个用户哪些方面的经历会导致他沉溺于大型多人在线角色扮演游戏(MMORPG;Hsu,Wen& Wu,2009)?

教育环境中的哪些因素与最能影响学生成绩得分?

血压、盐摄入量和年龄的关系是什么样的?对于男性和女性是相同的吗?

运动场馆和职业运动对大都市的发展有何影响(Baade & Dye,1990)?

哪些因素可以解释各州的啤酒价格差异(Culbertson & Bradford,1991)?(这个问题终于引起了你的注意!)

  我们主要的困难有三个:发现有趣的问题,设计一个有用的、可以测量的响应变量,以及收集合适的数据。

基础回顾

  下面的几节,我将介绍如何用R函数拟合OLS回归模型、评价拟合优度、检验假设条件以及选择模型。此处假定读者已经在本科统计课程第二学期接触了最小二乘回归法,不过,我还是会尽量少用数学符号,关注实际运用而不是理论细节。有大量优秀书籍都介绍了本章提到的统计知识。我最喜欢的是John Fox的Applied Regression Analysis and Generalized Linear Models(偏重理论)和An R and S-Plus Companion to Applied Regression(偏重应用),它们为本章提供了主要的素材。另外,一份不错的非技术性综述可参考Licht(1995)。

OLS 回归

  在本章大部分内容中,我们都是利用OLS法通过一系列的预测变量来预测响应变量(也可以说是在预测变量上“回归”响应变量——其名也因此而来)。OLS回归拟合模型的形式: \[\hat{Y_i}=\hat{\beta_0}+\hat{\beta_1}X_{1i}+\cdots+\hat{\beta_k}X_{ki} \qquad i=1 \cdots n\]   其中,n 为观测的数目,k为预测变量的数目。(虽然我极力避免讨论公式,但这里探讨公式是简化问题的需要。)等式中相应部分的解释如下。

———— ————————————————————
\[\hat{Y_i}\] \(i\)次观测对应的因变量的预测值(具体来讲,它是在已知预测变量值的条件下,对\(Y\)分布估计的均值)
\[X_{ji}\] \(i\)次观测对应的第\(j\)个预测变量值
\[\hat{\beta_0}\] 截距项(当所有的预测变量都为\(0\)时,\(Y\)的预测值)
\[\hat{\beta_j}\] 预测变量j的回归系数(斜率表示\(X_j\)改变一个单位所引起的\(Y\)的改变量)
———— ————————————————————

  我们的目标是通过减少响应变量真实值预测值差值来获得模型参数(截距项和斜率)。具体而言,即使得残差平方和最小

  !!!有待进一步理解!!!

\[\sum_{1}^n(Y_i-\hat{Y_i})^2=\sum_{1}^n(Y_i\hat{\beta_0}+\hat{\beta_1}X_{1i}+\cdots+\hat{\beta_k}X_{ki})^2=\sum_{1}^n\xi^2\]

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

  • 正态性 对于固定的自变量值,因变量值成正态分布。

  • 独立性 \(Y_i\)值之间相互独立。

  • 线性 因变量与自变量之间为线性相关。

  • 同方差性 因变量的方差不随自变量的水平不同而变化。也可称作不变方差,但是说同方差性感觉上更犀利。

  如果违背了以上假设,你的统计显著性检验结果和所得的置信区间很可能就不精确。注意,OLS回归还假定自变量是固定的且测量无误差,但在实践中通常都放松了这个假设。


`

展示拟合模型的详细结果

summary()

列出拟合模型的模型参数(截距项和斜率)

coefficients()

提供模型参数的置信区间(默认95%)

confint()

列出拟合模型的预测值

fitted()

列出拟合模型的残差值

residuals()

生成一个拟合模型的方差分析表,或者比较两个或更多拟合模型的方差分析表

anova()

列出模型参数的协方差矩阵

vcov()

输出赤池信息统计量

AIC()

生成评价拟合模型的诊断图

plot()

用拟合模型对新的数据集预测响应变量值

predict()

`