本书作者: 吴喜之
前言
什么是复杂数据?
本书将通常统计基本教科书中的离子所代表的数据称为简单数据,例如通常最小二乘线性回归所能够完满处理的独立同正态分布数据、用标准多元分析方法能够处理的服从多元正态分布的数据等。绝大多数真实数据是复杂数据。
本书特色
本书以数据形式为导向,对应不同的数据形式介绍可能使用的一些方法。首先引入某些感兴趣类型的数据,再介绍并且对比可能适合这些数据的一些统计方法。这些方法可能属于许多不同的模型,属于不同的统计方向,但只要适用于同一类数据,我们就尽量将它们都予以介绍。
本书首先通过一些简单的统计和数学内容介绍R软件的基本知识,然后介绍数据分析的一些基本逻辑和常识。
在任何国家及任何制度下都能够生存和发展的知识和能力,就是科学,是人们在生命的历程中应该获得的。
第1章 引言
1.1 作为科学的统计
统计是科学,而科学的基本特征是其方法论:对世界的认识源于观测或实验的信息(或者数据),总结信息时会形成模型(亦称假说或理论),模型会指导进一步的探索,直到遇到这些模型无法解释的现象,这就导致对这些模型的更新和替代。这就是科学的方法,只有用科学的方法进行的探索才能被称为科学。
科学的理论完全依赖于实际,统计方法则完全依赖于来自实际的数据。统计可以定义为“收集、分析、展示和解释数据的科学”,或者称为数据科学。统计几乎应用于所有领域。
统计的思维方式是归纳(induction),也就是从数据所反映的现实得到比较一般的模型,希望以此解释数据所代表的那部分世界。这和以演绎(deduction)为主的数学思维方式相反,演绎是在一些人为的假定(比如一个公理系统)之下,推导出各种结论。
随着时代的进步,各个统计院系现在也可是设置诸如数据挖掘、机器学习等课程,统计杂志也开始逐渐重视这些研究。这些算法模型大都不是用封闭的数学公式来描述,而是体现在计算机算法或程序上。对于结果的风险也不是用假定的分布(或渐进分布)所得到的p值来描述,而是用没有参加建模训练的测试集的误差来描述。
1.2 数据分析的实践
- 数据收集
确定哪些变量的数据需要收集是非常关键的,这个决策不是基于数学或统计的知识,而是基于对相应领域的了解和经验。有数据不一定能够得到需要的结论,我们需要的是与所关心问题充分有关的变量的数据。
- 数据预处理
原始数据往往或多或少地存在各种缺失值,还有不合逻辑或不一致等问题,这需要进行预处理。这些工作很可能非常费时而且极其琐碎,但必须去做,否则后续的分析是不可能展开的。填补缺失值有很多方法,最简单的就是删除,或者用同一变量其他值的均值或中位数填补,或者在各个变量之间建立模型(比如线性模型、最近邻方法等)来填补。
R网站有一个名叫 missForest 的填补缺失值的软件包,可以使用随机森林的方法,同时自动填补定量变量合分类变量。
- 寻找适合的模型
有了数据,我们需要的是模型。其目的或者是预测,或者是理解产生数据的机制。为了寻找模型,首先要对数据进行探索性分析,利用图形、各种统计量、或者比较复杂的探索方法来查看数据的关联性、线性性、异方差性、多重共线性、聚类特征、平衡特征、分布形状等。有了对数据的粗略认识,就要寻找适合的模型,无论是传统意义上的模型还是以算法为基础的模型。首先寻找现成的模型,比较各种模型的计算结果,如果现有模型不能满足需要,新的数据分析方法就应该产生了。模型的选择贯穿整个数据分析过程。
- 比较模型的标准
在传统统计中,通常要对分布合模型形式作出假定,在这些假定下确定损失函数,并依此得到各种判别准则。这些准则包括各种检验、一些统计量的临界值等。不要忘记,所有这些都是在对数据分布及描述变量之间关系的模型所做的假定之下得到的。如果这些假定不满足,这些准则也没有什么意义。
这些假定都是无法用确定性方法验证的,最多只能尝试用显著性检验来拒绝。如果没有充分理由拒绝,也不能“证明”这些假定是对的,它们仍然属于假定。
在使用算法模型时,由于没有传统模型的那些假定,判断模型的好坏通常都用交叉验证(cross validation)的方法。也就是说,拿一部分数据作为训练集(training set),得到模型,再用另一部分数据(称为测试集,testing set)来看误差是多少。有时需要进行k折交叉验证(k-fold cross validation),即把数据分成k份,每次拿k-1份作为训练集,用剩下的一份作为测试集,重复k次,得到k个误差做出平均,以避免仅用一个测试集可能出现的偏差。显然,交叉验证的方法也适用于传统模型之间以及传统模型和算法模型之间的比较。
- 对结果的解释
最终目的不是选择模型,而是解释模型所产生的结果,结果则必须是应用领域的结果,必须有实际意义。仅仅用统计术语说某个模型较好、某个变量显著之类的话是不够的。
1.3 数据的形式以及可能用到的模型
数据形式多种多样,但大部分可以放到二维数据文件中。比如n维列联表在R中是一个n维数组,但总可以转换成一个二维数据阵。其行数为 n 个变量各个水平的全部组合数。如果第 i 个变量有个水平,则行数为。其列数为 n+1:n个变量加上一个频数变量。
当维数较大时,n 维列联表数据很可能有许多水平组合为空值(稀疏)。一些数据,比如某些空间数据,则可能需要多个数据文件来描述。对于单一文件的方阵型数据,通常每一行代表一个观察值,每一列代表一个变量。
根据研究目的,数据中的一些变量可以被人为地作为因变量或自变量,这样的情况往往出现在人们想要用一部分变量描述或预测另一部分变量的时候,例如统计中的回归或分类(判别)问题。在一些情况下,人们不太关心预测,但想知道数据变量之间的其他关系,比如在多元分析课程中的聚类及因子分析等内容。还有一些情况,人们想用较长的历史值预测未来,诸如时间序列数据的分析。一些数据被称为横截面数据,那里每个对象仅观测一次。而有些时候一个对象观测若干次,但又不同于时间序列的长期观测,称为纵向数据。纵向数据的一些特例在某些领域中被称为面板数据。
在诸如医学、质量控制、心理学、社会学等领域,人们关心某事件(比如死亡、失效等)是否发生及什么时候发生的问题,相应的数据则被称为生存数据。调查问卷的结果往往做成列联表的形式,也被称为列联表数据。这些数据类型绝对不是排他的,比如,有些数据既是生存数据,又是纵向数据。
对每一种数据类型,人们根据目的以及数据的一些特殊性,找到各种数学模型来处理。由于实际数据是复杂的,可能必须经过多次尝试及对比才能确定什么模型不适用,什么模型适用。所有的传统方法都有一定的假定,必须注意这些假定的合理性。
1.3.1 横截面数据:因变量为实轴上的数量变量
当因变量为数量变量时,人们首先想到的是回归,教科书中最先介绍的是假定模型中误差项独立同正态分布的线性回归。由于误差项很可能不满足这个假定,还有可能有多重共线性等问题,这样就产生了诸如加权回归、稳健回归、偏最小二乘回归、lasso回归、岭回归、主成分回归、Box-Cox变换(或其他变换)、多项式回归、分位数回归等模型,还产生了相应的各种检验及判断方法,诸如最优子集、逐步回归、回归诊断等。在线性或其他假定不满足时,又出现了非线性回归、非参数回归、广义线性模型、随机效应混合模型、可加模型、广义可加模型等。生存分析也包含了回归的内容。近年来,神经网络、决策树的回归树、boosting、bagging、最近邻方法、随机森林、支持向量机等算法模型也被广泛应用于回归。第2章将会介绍上面所述的大部分内容。
1.3.2 横截面数据:因变量为分类(定性)变量或者频数
当因变量为分类变量时,一般的回归方法就不能使用了。在传统的统计领域,如果因变量时二分变量,则可以尝试用广义线性模型中的logistic回归和probit回归。如果自变量时数量型的变量,则可以尝试线性判别分析,这里有可能要求自变量满足正态分布。但最新的一些基于算法的模型则没有关于分布的假定,比如决策树的分类树、神经网络、boosting、bagging、随机森林、最近邻方法、支持向量机等能够很好地处理分类问题。
在许多情况下,数据的形式是频数,比如列联表数据,这不是常规意义上的连续型数值变量。如果把这些频数作为关注的因变量,而把那些形成列联表的分类变量以及可能得到的数量变量作为自变量,则可以应用多项分布对数线性模型,多项logit模型及Poisson对数线性模型(作为广义线性模型的特例)。在使用Poisson模型时,往往可能出现Poisson模型假定不允许的过散布(overdispersion,即方差大于均值)或欠散布(underdispersion,即方差小于均值)的情况,这时就要进行矫正或者利用一些双参数模型。当然,“非正统”的机器学习的方法在这里也可以用。
上述内容将在第3章介绍。
1.3.3 纵向数据,多水平数据,面板数据,重复观测数据
当一个对象有多次重复观测时,得到的就不是横截面数据,而是纵向数据,经济金融领域的这一类数据有时被称为面板数据,属于纵向数据的特例。应对这种数据有许多不同的方法,这些方法也成为相应处理纵向数据的课程名称,比如多层模型、随机效应混合模型等。此外,很多纵向数据还与生存数据有关,很多广义线性模型可处理的数据也是纵向数据,这就产生了更多的处理方法。一些机器学习方法也被用到纵向数据的分析之中。第4章将介绍线性随机效应混合模型、广义线性随机效应混合模型、决策树的应用及纵向生存分析等内容。
1.3.4 多元数据各变量之间的关系:多元分析
在没有预测任务,对数据进行分析的目的仅在于确定各个变量之间关系时,就不需要确定自变量及因变量了。这时,如果变量全部都是服从正态分布的数量变量,这个问题属于传统多元分析的范畴,主要方法包括主成分分析、因子分析、聚类分析、典型相关分析等。有点另类的对应分析是一种图描述方法,并不被认为是经典方法,但也出现于一些教科书中。对于复杂的分层数据,或者包含分类(定性)变量的数据,传统的多元分析方法就不能使用了,新的基于算法的模型可以应对非常复杂的多元分析课题。第5章首先回顾经典的多元分析方法,然后介绍可视化很强的新发展的多元分析方法,最后介绍没有丝毫经典统计味道的纯粹机器学习方法:关联规则分析。
1.3.5 路径模型/结构方程模型
有一种调查是在已经确定的模型基础上设计的,例如顾客满意度调查是依据顾客满意度模型设计的,这些模型被称为路径模型,因子分析是路径模型的一个特例。路径模型也称为结构方程模型。处理图模型数据的方法主要有两种:协方差方法、偏最小二乘方法。协方差方法严格要求假定数据是正态的,偏最小二乘方法则没有对分布做要求。
路径模型分为结构模型和测量模型两部分,其中结构模型设计的都是不可观测的隐变量之间的关系,测量模型则涉及隐变量和可观测变量之间的关系。协方差方法无法计算隐变量的值,因此只有偏最小二乘法才能应用于诸如满意度之类的模型。
第6章首先介绍路径模型的基本概念和方法,然后主要介绍偏最小二乘方法,最后简单介绍协方差方法。
1.3.6 多元时间序列数据
一般国内时间序列教科书都以一元时间序列为主要内容,这是因为一元时间序列的数学比较容易。试图用时间序列做预测时,必须假定这些序列的发展不会受到其他变量的影响,或者至少这些序列的未来可以由其历史来预测。对于多元时间序列,人们可能用VAR、状态空间模型等方法处理。在计量经济学中有一套分析这些数据的检验方法。
第7章首先回顾时间序列的基本概念,然后介绍单位根检验及协整检验等方法,最后用VAR和状态空间模型来拟合数据。
1.4 R软件入门
1.4.1 简介
R软件(R Development Core Team, 2011)用到是S语言,其运算模式和C语言,basic,matlab,maple,gauss等类似。
部分小贴士:
- 出现的图形可以用 Ctrl+W 或 Ctrl+C 来复制并粘贴(前者像素高),或者通过菜单存成所需的文件格式。
- library(MASS) 打开软件包;detach(package: MASS) 关闭软件包。
- 如果想查看在某一软件包(如MASS)中的稳健线性模型“rlm”的信息,在已经打开该软件包时输入 “?rlm”。如果MASS没有打开,或者不知道 rlm 在哪个软件包,可以用 "??rlm" 来得到其位置。如果不清楚名字,但知道有部分字符,比如 "lm",可以用 "apropos("lm")" 来得到所有包含 "lm" 字符的函数或数据。
- 对于简化的函数,如加减乘除乘方 ("+, -, *, /, ^")等,可以用诸如 "?"+"" 这样的命令得到帮助。
- RStudio 可以更方便地用几个窗口来展示 R 的执行过程、运行历史、脚本文件、数据细节等。
1.4.2 动手
本书最后的附录“练习:熟练使用 R 软件”,提供了一些作者为练习而编的代码。希望读者在每运行一行之后就思考一下,一般人都能够在很短的一两天将这些代码完全理解。
建议初学R者,在读本书之前,务必花些时间,运行一下这些代码!