R语言与统计分析[通俗易懂]

R语言与统计分析[通俗易懂]R语言与统计分析汤银才主编高等教育出版社二○○八年五月内容介绍本书以数据的常用统计分析方法为基础,在简明扼要地阐述统计学基本概念、基本思想与基本方法的基础上,讲述与之相对应的R函数的实现,并通过具体的例子说明统计问题求解的过程.本书注重思想性、实用性和可操作性.在内容的安排上不仅包含了基础统计分析中的探索性数据分析、参数的估计与假设检验,还包括的非参数统计分

大家好,又见面了,我是你们的朋友全栈君。R语言与统计分析

汤银才 主编

高等教育出版社

二○○八年五月

内容介绍

本书以数据的常用统计分析方法为基础,在简明扼要地阐述统计学基本概

念、基本思想与基本方法的基础上,讲述与之相对应的R函数的实现,并通过

具体的例子说明统计问题求解的过程.

本书注重思想性、实用性和可操作性. 在内容的安排上不仅包含了基础统

计分析中的探索性数据分析、参数的估计与假设检验,还包括的非参数统计分

析的常用方法、多元统计分析方法及贝叶斯统计分析方法. 每一部分都通过具

体例子重点讲述解决问题的思想、方法和在R中的实现过程. 通过本书读者不

仅可以快速学会R的基本原理与核心内容,而且根据提供的例子与相应的R程

序学会解决问题的统计计算方法与基本的编程技术,为解决更为复杂的统计问

题奠定扎实的基础.

本书可作为各专业本科生、研究生数理统计或应用统计课程的基础教材

或实验教材,也可作为从事数据统计分析研究人员、工程技术人员的工具书或

参考读物.

I

前言

统计学的任务是研究有关收集、整理、分析数据,从而对所考察的问题作

出一定的结论的方法与理论. 作为一门科学,统计学有其坚实的理论基础,研

究统计学方法的理论基础问题的那一部分,构成了所谓数理统计学的内容。其

次,统计学就其本质来讲,是一门实用性很强的科学,它在人类活动的各个领

域有着广泛的应用。因此数理统计的理论与方法应该与实际相结合,解决社

会、经济、工农业生产、生物制药、航空航天、质量管理、环境资源等领域中的

各种问题。最后,统计学又是一门技术性很强的科学,由于所研究问题越来越

复杂、变量之间关联性越越强、数据的规模越来越大,使得原有的计算方法无

法实现. 现在,随着计算机的不断发展与普及,特别是近20年来统计计算的突

破性进展及统计软件的不断完善和成熟,使得解决这些问题不仅成为可能,而

且越来越容易、快速.

目前许多大学几乎所有的理工科,甚至文科的许多专业都开设了《数理

统计》或《应用统计》之类的课程,有的还编写了相应的教材,这是令人可

喜的. 这些课程与教材的共同特点是以较大的篇幅介绍数理统计的理论、方

法与实际背景,并配有一定数量的例子和习题. 部分学校还为有统计专业和

应用数学专业的学生开设SAS或Matlab统计软件,为经济统计专业的学生开

设SPSS或EViews统计软件, 但这还远远不够.

作者长期从事概率论与数理统计、统计计算及统计软件的教学工作,我

们发现目前的统计教学普遍存在的问题有:一、关于教学内容:在有限的课

时下,对于非统计专业的学生采用统计专业学生的教学方式,过多强调理论

的重要性,从而忽视了统计思想和数据处理能力的培养;有的因为仅用一学

期(54课时或更少)讲授概率论与数理统计,面面俱到的概率论教学使学生无法

学到诸如回归分析与方差分析的重要内容. 二、关于软件教学:由于没有软件

支持,使用传统的教学方法和教材,无论是老师讲解例题,还是学生完成习题

都要花费大量的时间进行手工计算,且错误率高. 使用软件可使数据分析更具

II 第零章 内容介绍

直观性、灵活性和可重复性,可起到举一反三的作用,提高学生的学习兴趣和

动手(操作或编程)能力. 三、关于统计教学与软件教学是否分开: 统计教学与

软件教学分开教学会产生一定的重复性,从而浪费有限教学课时,降低学习的

效率. 分开的教学会使大部分非统计专业的学生不能得到统计软件操作和数

据分析能力的培养. 有了统计软件, 可大大增加教学的信息量、节省时间用于

培养学生统计软件的上机操作能力;有了统计软件,使得大规模或海量数据

分析和精确计算成为可能,也使教材中的许多附表(如常用分布的分位数表)失

去其必要性. 四、关于R软件: 本书之所以采用R软件, 主要原因是其强大的数

据的图形展示和统计分析功能、免费使用和更新及大量可随时加载的有针对

性的软件包. 而SAS、Matlab、SPSS、EViews却都是收费软件,与R功能几乎相

同的S-PLUS也是收费的. R高效的代码、简洁的输出和强大的帮助系统使统

计软件辅助的统计教学成为可能. 基于R开发的菜单式驱动的图形界面工具R

Commander和PMG(见附录B)使得基础统计分析像SPSS一样容易实现.

本书介绍了R的基本功能、常用的数据处理与分析方法及它们在R中的实

现. 全书共分十一章及三个附录: 第一章, R 介绍. 介绍了R软件的功能与安

装. 第二章, R的基本原理与核心. 简明扼要地介绍了R软件的使用方法, 主

要侧重于不同类型的数据的操作与函数的使用. 第三章, 概率与分布. 介绍了

常用的离散与连续型分布及R中有关的四类函数: 分布函数、概率函数、分位

数函数和随机数生存函数. 第四章, 探索性数据分析. 介绍了单组和多组数据

中特征量的提取方法及数据的图形展示方法. 第五章, 参数估计. 主要介绍了

单总体与两总体正态及二项分布参数的点估计与区间估计. 第六章, 参数的假

设检验. 主要介绍了单总体与两总体正态及二项分布参数的假设检验. 第七

章, 非参数的假设检验. 主要介绍了常用的几个非参数检验方法. 第八章, 方

差分析. 主要介绍了多组数据比较的单因子与双因子方差分析及协方差分析

方法. 第九章, 回归分析与相关分析. 介绍了随机变量之间关系的度量与回归

分析及诊断方法. 第十章, 多元统计分析介绍. 介绍了多元分析中常用的主

成分分析、因子分析、判别分析、聚类分析、典型相关分析及对应分析方法.

第十一章, 贝叶斯统计分析. 介绍了贝叶斯分析中单参数与多参数模型、分

层模型及回归模型的分析方法. 最后是附录, 附录B介绍了基于R开发的基础

统计分析的菜单式工具R Commander和PMG, 附录C介绍了R的3个编程环境: R

WinEdt、Tinn-R及SciViews-R. 全书在所有程序都在R的2.6.0版本上调试通

过, 原则上在其它版本上也可以运行.

本书的特点是: 注重统计思想、实用性和可操作性. 我们在内容的设计上

尽可能简化统计理论与方法的推导过程,对于主要的统计知识都通过一个具体

例子展开、讲清要解决问题的思想、方法和具体的实现过程. 所有方法的实现

都有相应的R函数的调用格式,而例子讲解的R程序都全部嵌入在正文中,便

于读者举一反三,解答习题或进行其它类似的数据分析.

本书可作为各专业本科生、研究生数理统计或应用统计课程的基础教材

或实验教材,也可作为从事数据统计分析研究人员、工程技术人员的工具书或

参考读物. 本书整个教材的教学安排可考虑以1:3的比例安排上机时间. 具体教

学内容可根据需要进行取舍,具体可参考下表的安排课时:

教学内容 选取章节 课时安排

R语言入门 第一章, 第二章, 附录B 12

探索性数据分析 第三章, 第四章 12

数据统计分析 第五章, 第六章, 第八章, 第九章 24

第七章 8

选讲内容 第十章 8

第十一章 8

本书编写过程中,参考了大量的资料文献. 得到了华东师范大学金融与统

计学院全体老师, 特别是终生教授茆诗松老师的支持. 我的学生巍晓玲参与了

本书第四和第五章初稿的编写工作,徐安察参与了本书第六和第七章初稿的编

写工作,于巧丽参与了本书第八和第九章初稿的编写工作,岳昳婕参与了本书

第十一章初稿的编写工作, 上海师范大学的朱杰老师参与了本书第十章的编写

工作和全书的校对工作. 在全书的编写过程中,得到了高等教育出版社领导和

研究生教育与学术著作分社王丽萍女士的关心和帮助, 在此一并提示感谢.

由于编者水平有限,书中一定存在不足甚至错误之处,欢迎读者不吝指正.

作者

2008 年 5 月

IV 目录

目录

内容介绍 II

前言 I

第一章 R介绍 1

§1.1 S语言与R …. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

§1.2 R的特点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

§1.3 R的资源 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

§1.4 R的安装与运行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.4.1 R软件的安装、启动与关闭 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.4.2 R程序包的安装与使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

第一章习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

第二章 R的基本原理与核心 8

§2.1 R的基本原理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

§2.2 R的在线帮助 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

§2.3 一个简短的R会话 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

§2.4 R的数据结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.4.1 R的对象与属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.4.2 浏览对象的信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

目录 V

2.4.3 向量的建立 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

2.4.4 数组与矩阵的建立. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

2.4.5 数据框(data frame)的建立 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

2.4.6 列表(list)的建立 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

2.4.7 时间序列(ts)的建立 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

§2.5 数据的存储与读取 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

2.5.1 数据的存储 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

2.5.2 数据的读取 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

§2.6 R 的图形功能. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

2.6.1 绘图函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

2.6.2 低级绘图命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

2.6.3 绘图参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

2.6.4 一个实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

§2.7 R 编程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

2.7.1 循环和向量化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

2.7.2 用R写程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

2.7.3 编写你自己的函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

2.7.4 养成良好的编程习惯 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

第二章习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

第三章 概率与分布 81

§3.1 随机抽样 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

§3.2 排列组合与概率的计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

§3.3 概率分布 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

3.3.1 离散分布的分布律. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

3.3.2 连续分布的密度函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

VI 目录

§3.4 R中内嵌的分布 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

§3.5 应用: 中心极限定理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

3.5.1 中心极限定理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

3.5.2 渐近正态性的图形检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

3.5.3 举例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

第三章习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

第四章 探索性数据分析 101

§4.1 常用分布的概率函数图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

§4.2 直方图与密度函数的估计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

4.2.1 直方图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

4.2.2 核密度估计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

§4.3 单组数据的描述性统计分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

4.3.1 单组数据的图形描述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

4.3.2 单组数据的描述性统计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

§4.4 多组数据的描述性统计分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

4.4.1 两组数据的图形概括 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

4.4.2 多组数据的图形描述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

4.4.3 多组数据的描述性统计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

4.4.4 分组数据的图形概括 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

§4.5 分类数据的描述性统计分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

4.5.1 列联表的制作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

4.5.2 列联表的图形描述. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

第四章习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

第五章 参数估计 150

§5.1 矩法估计和极大似然估计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

目录 VII

5.1.1 矩法估计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

5.1.2 极大似然估计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

§5.2 单正态总体参数的区间估计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

5.2.1 均值µ的区间估计. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

5.2.2 方差σ2的区间估计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

§5.3 两正态总体参数的区间估计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

5.3.1 均值差µ1 µ2的置信区间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

5.3.2 两方差比σ21{σ22的置信区间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

§5.4 单总体比率p的区间估计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

§5.5 两总体比率差p1 p2的区间估计. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

§5.6 样本容量的确定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

5.6.1 估计正态总体均值时样本容量的确定 . . . . . . . . . . . . . . . . . . . . . . . . 173

5.6.2 估计比例p时样本容量的确定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

第四章习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

第六章 参数的假设检验 179

§6.1 假设检验与检验的p值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

6.1.1 假设检验的概念与步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

6.1.2 检验的p值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

§6.2 单正态总体参数的检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

6.2.1 均值µ的假设检验. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

6.2.2 方差σ2的检验: χ2检验. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

§6.3 两正态总体参数的检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187

6.3.1 均值的比较: t检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187

6.3.2 方差的比较: F检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

§6.4 成对数据的t检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

VIII 目录

§6.5 单样本比率的检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

6.5.1 比率p的精确检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

6.5.2 比率p的近似检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

§6.6 两样本比率的检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

第六章习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

第七章 非参数的假设检验 200

§7.1 单总体位置参数的检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

7.1.1 中位数的符号检验. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

7.1.2 Wilcoxon符号秩检验. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

§7.2 分布的一致性检验:χ2检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

§7.3 两总体的比较与检验. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

7.3.1 χ2独立性检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

7.3.2 Fisher精确检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

7.3.3 Wilcoxon秩和检验法和Mann-Whitney U检验 . . . . . . . . . . . . . 213

7.3.4 Mood检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

§7.4 多总体的比较与检验. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

7.4.1 位置参数的Kruskal-Wallis秩和检验 . . . . . . . . . . . . . . . . . . . . . . . 218

7.4.2 尺度参数的Ansari-Bradley检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

7.4.3 尺度参数的Fligner-Killeen检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

第七章习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

第八章 方差分析 226

§8.1 单因子方差分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

8.1.1 数学模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

8.1.2 均值的多重比较 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

8.1.3 同时置信区间: Tukey法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

目录 IX

8.1.4 方差齐性检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236

§8.2 双因子方差分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

8.2.1 无交互作用的方差分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

8.2.2 有交互作用的方差分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

§8.3 协方差分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

第八章习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254

第九章 回归分析与相关分析 260

§9.1 相关性及其度量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

9.1.1 相关性概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

9.1.2 相关分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

§9.2 一元线性回归分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

9.2.1 数学模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

9.2.2 估计与检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

9.2.3 预测与控制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

9.2.4 计算例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

§9.3 多元线性回归分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

9.3.1 数学模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

9.3.2 估计与检验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

9.3.3 预测与控制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

9.3.4 计算例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

§9.4 回归诊断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

9.4.1 残差分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

9.4.2 影响分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294

9.4.3 共线性诊断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

§9.5 Logistic回归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

X 目录

第九章习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

第十章 多元统计分析介绍 315

§10.1 主成分分析与因子分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

10.1.1 主成分的简要定义与计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

10.1.2 主成分R通用程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

10.1.3 因子分析的简要定义与计算. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

10.1.4 因子分析R通用程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

§10.2 判别分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

10.2.1 距离判别 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

10.2.2 Fisher判别法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

10.2.3 R通用程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

§10.3 聚类分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

10.3.1 基本思想 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

10.3.2 R通用程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

§10.4 典型相关分析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338

10.4.1 基本思想 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338

10.4.2 R通用程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

§10.5 对应分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

10.5.1 基本思想 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

10.5.2 R通用程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

第十章习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

第十一章 贝叶斯统计分析 364

§11.1 贝叶斯统计分析与经典统计分析的比较 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

11.1.1 经典统计分析中存在的问题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

11.1.2 对贝叶斯统计分析的质疑及褒奖 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365

目录 XI

§11.2 贝叶斯统计分析与先验分布的选取 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366

11.2.1 贝叶斯公式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

11.2.2 先验分布的选取 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369

11.2.3 贝叶斯分析体现了科学探索过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371

§11.3 单参数贝叶斯统计分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372

11.3.1 两项分布下的贝叶斯推断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372

11.3.2 正态分布下的贝叶斯统计推断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383

§11.4 多参数贝叶斯统计分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

11.4.1 方法概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

11.4.2 正态分布参数中的贝叶斯分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

11.4.3 随机模拟方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389

11.4.4 一个实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390

§11.5 分层贝叶斯统计分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

11.5.1 分层模型的建立及其贝叶斯推断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397

11.5.2 N-N模型与应用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400

§11.6 贝叶斯线性回归分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

11.6.1 模型的表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

11.6.2 后验分布 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410

11.6.3 回归拟合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

11.6.4 后验预测 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

第十一章习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416

附录 A 秩与结的介绍 418

附录 B R的图形界面 420

§B.1 R Commander … . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420

B.1.1 功能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420

XII 目录

B.1.2 (网络)安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420

B.1.3 运行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

B.1.4 结构与使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

§B.2 PMG ….. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

B.2.1 功能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

B.2.2 安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423

B.2.3 结构与使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424

附录 C R的编程环境 426

§C.1 R WinEdt … . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426

C.1.1 (网络)安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426

C.1.2 运行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426

C.1.3 R WinEdt的特点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427

C.1.4 R WinEdt的菜单与热键. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428

§C.2 Tinn-R …. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428

§C.3 SciViews R …. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

参考文献 431

第一章 R介绍

本章概要

♦ R的功能与特点

♦ R的安装与运行

♦ R程序包的安装与运行

§1.1 S语言与R

R是一个有着强大统计分析及作图功能的软件系统,在GNU协议General

Public Licence下免费发行, 最先是由Ross Ihaka和Robert Gentleman共同

创立, 现在由R开发核心小组(R Development Core Team)维护, 他们完全自

愿、工作努力负责,并将全球优秀的统计应用软件打包提供给我们共享.

R可以看作是贝尔实验室(Bell Laboratories)的Rick Becker, John

Chambers和Allan Wilks开发的S语言的一种实现或形式. 因此, R是一种

软件也可以说是一种语言. S语言现在主要内含在由Insightful公司经营的S-

PLUS软件中. 我们可以将R和S-PLUS 视为S语言的两种形式, S/S-PLUS方面

的文档都可以直接用于R, 不过R和S在设计理念上存在着许多不同, 关于

这方面的详细内容大家可以参考Ihaka & Gentleman (1996) 或随R同时发布

的R-FAQ[16]. 本书今后主要使用R, 有时也使用R软件、R语言或R系统来称呼

这种形式的S语言.

2 第一章 R介绍

§1.2 R的特点

现在越来越多的人开始接触、学习和使用R, 因为它有其显著的优点, 主

要包括:

1) 免费: 尽管S-PLUS是非常优秀的统计分析软件,但你需要支付一笔费用,

而R是一个免费的统计分析软件(环境);

2) 浮点运算功能强大: R可以作为一台高级科学计算器, 因为R同Matlab一

样不需要编译就可执行代码;

3) 不依赖于操作系统: R可以在运行于UNIX, Linux, Windows 和Macintosh

的操作系统上, 它们的安装文件以及安装说明都可以在CRAN

(Comprehensive R Archive Network) 社区上下载;

4) 帮助功能完善: R嵌入了一个非常实用的帮助系统—随软件所附

的pdf或html帮助文件可以随时通过主菜单打开浏览或打印. 通过help命

令可随时了解R所提供的各类函数的使用方法和例子;

5) 作图功能强大: 其内嵌的作图函数能将产生的图片展示在一个独立的窗

口中,并能将之保存为各种形式的文件(例如jpg, png, bmp, ps, pdf, emf,

pictex, xfig);

6) 统计分析能力尤为突出: R内嵌了许多实用的统计分析函数, 统计分析的

结果也能被直接显示出来, 一些中间结果(如p-值、回归系数、残差等) 既

可保存到专门的文件中, 也可以直接用于进一步的分析.

R的部分统计功能整合在R语言的底层,但是大多数功能则以包的形式

提供. 大约有25个包和R同时发布(被称为“标准”和“推荐”包),更多的

包可以通过网上或其CRAN 社区(http://CRAN.R-project.org) 得到, 它们

都配有完整的pdf帮助文件, 且其版本会随R新版本的发行得到更新, 通

过在线(或下载后)安装并加裁后就可融入原来的R中, 实现有针对性的分

析;

7) 可移植性强:

ˆ R程序容易地移植到S-PLUS程序中; 反之S-PLUS的许多过程直接或

稍作修改可用于R;

ˆ R与Matlab有许多相似的地方, 如都可作为高级计算器, 都可不经

过编译直接运行源代码, 但是R侧重于统计分析, 而Matlab侧重于

工程, 例如信号处理. 现在通过R.Matlab程序包可实现两者之间许

多功能的共享, 具体见程序的说明.

1.3 R的资源 3

ˆ 许多常用的统计分析软件(如SPSS, SAS, Stata及EExcel)的数据文

件都可读入R, 这样其它软件的数据或分析的中间结果可用于R, 并

作出进一步的分析.

8) 较强大的拓展与开发能力: R是开发新的交互式数据分析方法一个非常

好的工具. 例如附录A介绍的R Commander就是一个非常成功的例子. 我

们可以编制自己的函数来扩展现有的R语言, 或制作相对独立的统计分

析包.

9) 灵活而不死板: 一般的软件往往会直接展示分析的结果,而R则将这些结

果都存放在一个对象(object)里,所以常常在分析执行结束后并不显示

任何结果. 使用者(特别是初学者或非专业人员)可能会对此感到困惑,其

实这样的特点是非常有用的,因为我们可以有选择地显示我们感兴趣的

结果. 而有的软件(如SAS和SPSS)会同时显示几个窗口,内容太多会使使

用者无从选择和解释.

§1.3 R的资源

R的核心开发与维护小组通过R的主页,即R工程(R Project)网

站(http://www.r-project.org)及时发布有关信息, 包括R的简介、R的更新及

宏包信息、R常用手册、已经出版的关于R的图书、R通讯和会议信息等. 你还

可通过该主页预订邮件,通过电子邮件发出求助或提供帮助.

R的CRAN社区是我们获得软件(及源代码)和资源的主要场所, 通过它或其

镜像站点我们可以下载最新版本及大量的统计程序包(packages).

本书将使用Windows(95及以后)操作系统上的R,其它操作系统上R的使

用方法请参考R相关说明. 除R自带的运行平台R-GUI(R Graphic User’s In-

terface)外, 本书附录A还提供了Windows下几个R的运行平台, R-Commander,

R-WinEdt, R-Sciview和R-Tinn.

§1.4 R的安装与运行

1.4.1 R软件的安装、启动与关闭

R的安装: 从CRAN社区下载最新的封装好的R安装程序到本地计算机,运

行可执行的安装文件, 通常缺省的安装目录为C:\Program Files\R\R-x.x.x,

4 第一章 R介绍

其中x.x.x为版本号. 安装时可以改变目录,从2.2.0以后还可以选择中文作为基

本语言,这样RGui窗口的菜单都是中文的.

R的启动: 安装完成后点击桌面上R x.x.x快击图标就可启动R的交互式用

户窗口(R-GUI). R是按照问答的方式运行的, 也即你在命令提示符“>”后键

入命令并回车, R就完成一些操作. 例如输入命令

> plot(rnorm(1000))

就可得到图1.1, 此命令的具体含义我们将在后面第二章叙述.

图 1.1 R的启动

R的退出: 在命令行键入q( )或点击R-GUI右上角的叉叉. 退出时可选择

保存工作空间, 缺省文件名为R安装目录的bin子目录下的R.RData. 以后可以

通过命令load( )或通过菜单“文件”下的“载入工作空间”加载,进而继续你

前一次的工作.

1.4.2 R程序包的安装与使用

R程序包的安装有三种方式:

1) 菜单方式: 在已经联网的条件下, 按步骤“程序包ñ安装程序包…ñ选

择CRAN镜像服务器ñ选定程序包”进行实时安装;

1.4 R的安装与运行 5

2) 命令方式: 在已经联网的条件下, 在命令提示符后键入

> install.packages(“PKname”)

完成程序包PKname的安装.

3) 本地安装: 在无上网条件下,先从CRAN社区下载需要的程序包及与之关

联的程序包, 再按第一种方式通过“程序包”菜单中的“用本机的zip文件

安装程序包”选定本机上的程序包(zip文件)进行安装.

除R的标准程序包(如base包)外,新安装的程序包在使用前必须先载入,

有两种载入方式:

1) 菜单方式: 按步骤“程序包ñ载入程序包…”, 再从已有的程序包中选定

需要的一个加载;

2) 命令方式: 在命令提示符后键入

> library(“PKname”)

来加载程序包PKname.

若有必要,我们还可通过步骤“程序包ñ更新程序包…”对本机的程序包

进行实时更新.

注意: R命令对大小写敏感, 这在使用命令方式安装和载入程序包时应特别注

意.

6 第一章 R介绍

第一章习题

1.1 R与你学过的统计软件, 如SPSS, SAS, Matlab有何区别, 其主要的特点

有哪些?

1.2 到CRAN社区(http://cran.r-project.org/)下载并安装R的最新(中

文)版本, 并尝试R的启动与退化.

1.3 R可以作为一台很方便的计算器. 任取二个非零实数, 试用R完成它们

的加、减、乘、除、乘方、开方、指数、对数等运算.

1.4 John Fox基于R开发了一套进行基础统计分析的菜单驱动的分析系统,

称为R Commander. 附录A介绍了一种菜单式的安装方法. 另一种是采用命令

方式进行安装与加载, 其步骤为:

1) 用命令

> install.packages(“Rcmdr”)

来安装程序包Rcmdr(需要等待几分种);

2) 再用命令

> load(“Rcmdr”)

加载程序包Rcmdr.

R Commander的结构与使用方法参见附录A的说明.

1.5 animation是由谢益辉建立的概率统计动态演示程序包, 请用命令或菜

单的方法安装并加载animation, 并尝试下面的二个例子:

ˆ 蒲丰投针试验:

> buffon.needle(nmax = 500, interval = 0)

ˆ 中心极限定理:

> f = function(n) rchisq(n, 5)

> clt.ani(FUN = f)

具体使用方法参见程序包中的pdf说明文件.

1.4 R的安装与运行 7

1.6 登 录R的 社 区 主 页http://cran.r-project.org/, 并 进 入 左

侧Software下的Packages, 浏览并感受R所提供的资源(程序包). 选择其中

感兴趣的进行安装与试用, 例如概率统计教学演示程序包TeachingDemos和其

在R Commander下的插件RcmdrPlugin.TeachingDemos.

第二章 R的基本原理与核心

本章概要

♦ R的基本原理

♦ R的求助方法

♦ R的主要数据结构

♦ R的图形功能

♦ R的编程方法

§2.1 R的基本原理

如第一章所述, 如果R已经安装在你的计算机中, 它就能立即运行一些可

执行的命令了. R默认的命令提示符是‘¡’,它表示正在等待输入命令. 如果

一个语句在一行中输不完, 按回车键, 系统会自动产生一个续行符“+”, 语句

或命令输完后系统又会回到命令提示符. 在同一行中输入多个命令语句, 则需

要使用分号来隔开. 在Windows系统中, 能直接运行下拉菜单中的一些操作命

令(如在线帮助,打开文件等,见图1.1). 在学习一些R的命令之前,让我们先了

解R的基本工作原理.

首先, 同Matlab一样, R是一种编程语言, 但我们没有必要对此感到害怕,

因为R是一种解释性语言,而不是编译语言, 也就意味着输入的命令能够直接

被执行, 而不需要像其它语言(如C和FORTAN)需要编译和连接等操作.

其次, R的语法非常简单和直观. 例如,线性回归的命令lm(yx)表示

以x为自变量,y为响应变量来拟合一个线性模型. 合法的R函数总是带有圆括

号的形式,即使括号内没有内容(如ls( )). 如果直接输入函数名而不输入圆

2.1 R的基本原理 9

括号, R则会自动显示该函数的一些具体内容. 因此在R中所有的函数后都带

有圆括号以区别于对象(object). 当R运行时,所有变量、数据、函数及结果都

以对象的形式存入计算机的活动内存中,并冠有相应的名字代号. 我们可以通

过一些运算(如算术、逻辑、比较等)和一些函数(其本身也是对象)来对这些对

象进行操作.

运行一个R函数可能不需要设定任何参量,原因是所有的参量都可以被默

认为缺省值,当然也有可能该函数本身就不含任何参量.

再次, 在R中进行的所有操作都是针对存储在活动内存中的对象的. 数据、

结果或图表的输入与输出都是通过对计算机硬盘中的文件读写而实现. 用户

通过输入一些命令调用函数,分析得出的结果可以被直接显示在屏幕上,也可

以存入某个对象或被写入硬盘(如图片对象). 因为产生的结果本身就是一种对

象,所以它们也能被视为数据并能像一般数据那样被处理分析. 数据文件即可

从本地磁盘读取也可通过网络传输从远程服务器端获得.

最后, 所有能使用的R函数都被包含在一个库(library) 中, 该库存

放在R安装文件夹的library目录下. 这个目录下含有具有各种功能的

包(packages),各个包也是按照目录的方式组织起来的. 其中名为base的

包是R的核心,因为它内嵌了R语言中所有像数据读写与操作这些最基本的函

数. 在上述目录中的每个包内,都有一个子目录R,这个目录里又都含有一个

与此包同名的文件, 该文件正是存放所有函数的地方.

R语言中最简单的命令莫过于通过输入一个对象的名字来显示其内容了.

例如,一个名为n的对象,其内容是数值10:

> n

[1] 10

方括号中的数字1表示从n的第一个元素开始显示. 其实该命令的功能在这里

与函数print( )相似,输出结果与print(n) 相同. 对象的名字必须是以一个

字母开头(A-Z 或a-z), 中间可以包含字母、数字(0–9)、点(.)及下划线( ). 因

为R对对象的名字区分大小写,所以x和X就可以代表两个完全不同的对象.

一个对象可以通过赋值操作来产生,R语言中的赋值符号一般是由一个尖

括号与一个负号组成的箭头形标志, 该符号可以是从左到右的方向,也可以相

反. 赋值也可以用函数assign( )实现, 还可以用等号“=”, 但它们很少使用.

例如

10 第二章 R的基本原理与核心

> n <- 10

> n

[1] 10

> 10 -> n

> n

[1] 10

> assign(“n”, 10)

> n

[1] 10

> n=10

> n

[1] 10

当然你也可以只是输入函数或表达式而不把它的结果赋给某个对象(如果这样

在窗口中展示的结果将不会被保存到内存中), 这时我们就可将R作为一个计

算器使用. 下面的例子说明了R中的算术运算符(加、减、乘、除、乘方、开方、

指数)的使用方法.

> ((10 + 2) * 5-2^4)/4

[1] 13

> sqrt(3)+exp(-2)

[1] 1.867386

更为常用的是常量、向量、矩阵、数组等其它对象的赋值与运算, 我们将在后

面讲述.

所有的高级语言都有注释语句, R中使用井号(#)表示注释的开始.

§2.2 R的在线帮助

学习一门编程语言离不开语句、函数和编程的语法和语义,R中的程序包

都是由大量的进行统计分析的函数,它们的含义和使用方法对于熟练使用R进

行数据分析是至关重要的. 在此我们将R的帮助分成两类:

1) 关于R的基本知识: 通过命令

2.2 R的在线帮助 11

> help.start( )

或R用户界面上的“帮助”菜单的“html帮助”得到.

i. R的常见问题(FAQ): 系统提供了二个版本,其一为“R FAQ”,其二

为“R for Windows FAQ”, 它们随R的新版本同时发布与更新,内

容包括R的特点、安装、使用、界面、编程规则等.

ii. R帮助手册,也随新版本发布与更新,共有6本手册: An Introduction

to R, R Reference Manual, R Data input/output, R Language Def-

inition, Writing R Extensions, R Installation and Administration.

“帮助”菜单提供了它们的PDF电子版本, 便于打印. 初学者可看一

下其中的第一本.

2) 关于R中的函数或关键字符:

i. 命令

> help(fun)



> ?fun

会立即显示名为“fun”函数的帮助页面, 而命令

> help(“char”)

则会显示某个具有特殊语法意义字符“char”的帮助页面. 页面的

第一行一般会显示此函数或字符的所属的程序包(package),然后是

标题,标题下面则是一些详细信息:

Description: brief description.

Usage: for a function, gives the name with all its arguments and

the possible options (with the corresponding default values); for

an operator gives the typical use.

Arguments: for a function, details each of its arguments.

Details: detailed description.

Value: if applicable, the type of object returned by the function or

the operator.

See Also: other help pages close or similar to the present one.

Examples: some examples which can generally be executed with-

out opening the help with the function example.

12 第二章 R的基本原理与核心

默认状态下,函数help( )只会在被载入内存的程序包中搜索. 选

项try.all.package 在缺省值是FALSE, 但如果把它设为TRUE,则可

在所有已安装的程序包中进行搜索. 如果读者确实想打开这样的页

面而所属程序包又没有被载入内存时,可以使用package这个选项.

请读者试试下面的两个命令.

> help(“bs”,try.all.packages=TRUE)

> help(“bs”,package = “splines”)

ii. 命令

> apropos(fun)



> apropos(“fun”)

找出所有在名字中含有指定字符串“fun”的函数,但只会在被载入

内存中的程序包中进行搜索.

注意:如果“fun”不是完整的函数名, 则前者会出错;

iii. 命令

> help.search(“char”)

列出所有在帮助页面含有字符“char”的函数, 它的搜索范围

比apropos(“fun”)更广;

iv. 命令

> find(fun)



> find(“fun”)

得到名为“fun”函数所在的程序包;

v. 命令

> args(fun)



> args(“fun”)

得到名为“fun”函数的自变量列表.

2.3 一个简短的R会话 13

对初学者而言,帮助中例子(Examples)部分的信息是很有用的. 而仔细阅读自

变量(Arguments)中的一些说明也是非常有必要的. 帮助中还包含了其它一些

说明部分,如注释(Notes), 参考文献(References)或作者(Author(s))等.

§2.3 一个简短的R会话

下面通过一个具体的例子来说明如何利用R软件进行数据的统计分析,

此例使用R内嵌的数据集mtcars. 它在datasets(数据)包中, 此包像base一样

随R的启动自动加载.

数据的描述

命令

> ?mtcars

显示为

mtcars package:datasets R Documentation

?mtcars的结果

Motor Trend Car Road Tests

Description:

The data was extracted from the 1974 _Motor Trend_

US magazine, and comprises fuel consumption and 10

aspects of automobile design and performance for 32

automobiles (1973-74 models).

Usage:

mtcars

Format:

A data frame with 32 observations on 11 variables.

[, 1] mpg Miles/(US) gallon

[, 2] cyl Number of cylinders

[, 3] disp Displacement (cu.in.)

[, 4] hp Gross horsepower

[, 5] drat Rear axle ratio

14 第二章 R的基本原理与核心

[, 6] wt Weight (lb/1000)

[, 7] qsec 1/4 mile time

[, 8] vs V/S

[, 9] am Transmission (0 = automatic, 1 = manual)

[,10] gear Number of forward gears

[,11] carb Number of carburetors

它告诉我们数据集metars的基本信息. 它是美国Motor Trend收集

的1973到1974年期间总共32辆汽车的11个指标: 油耗及10个与设计及性能

方面的指标.

数据的浏览与编辑

1) 数据的浏览

ˆ 命令

> mtcars

可以显示数据集mtcars中全部的32个观测值.

ˆ 命令

> head(mtcars)

仅显示数据集mtcars中前7个观测值.

ˆ 命令

> names(mtcars)

仅显示数据集mtcars中的变量, 在此为11个指标.

2) 数据的编辑

数据的编辑主要有两种方式(函数):

ˆ 命令

> data.entry(mtcars)

通过R的数据编辑器打开数据集mtcars, 除了浏览数据集外,这里

我们还可以对变量及其观测值进行修改.

ˆ 命令

> MTcars <- edit(mtcars)

同样启动R的数据编辑器, 在此可对原来的数据集mtcars进行编辑,

完成后将生成的新的数据集赋给MTcars, 而原来的数据集保持不变.

如果你要修改原来的数据集,使命令edit( )前后的数据集同名即

可. 因此命令edit(mtcars) 将无法完成对数据的修改. 命令

2.3 一个简短的R会话 15

> xnew <- edit(data.frame( ))

可以编辑生成新的数据集xnew. 另外, 对于一维的数据, edit( )打

开的是R Editor. 试比较下面的例子中两个命令的区别

> x <- c(10.4, 5.6, 3.1, 6.4, 21.7)

> x

[1] 10.4 5.6 3.1 6.4 21.7

> data.entry(x)

> edit(x)

ˆ 命令

> fix(mtcars)

可以完成数据集mtcars的直接修改. 因此它等价于命令

> mtcars <- edit(mtcars)

注意:

1) 使用上面的三个命令将挂起R的对话窗口(R Console), 关闭编辑器即可

继续进行R的对话.

2) 我们这里说的数据集就是下面一小节要讲的数据框(data frame). 数据对

象中除了上面已经出现的向量和数据框外,下面一节还要讲矩阵、数组、

和列表. 命令data.entry( )和edit( )都可用于编辑向量、矩阵、数据

框和列表,前者启用的都是R的数据编辑器, 后者有所不同: 对于向量、

列表和数组edit( )启用的是R Editor.

3) 尽管我们在R中可以浏览与编辑数据集mtcars, 但它们还无法对此数据

集进行操作(分析), 例如命令

> mpg

无法看到变量mpg(每加仑公里数)的具体数值. 这时我们需要激活或挂

接(attach)数据集mtcars. 命令

> attach(mtcars)

就激活mtcars, 使之成为当前的数据集. 这时通过命令

> mpg

就可浏览变量mpg的32个值,其它分析我们将在后面进行.

16 第二章 R的基本原理与核心

属性数据的分析

变量cyl(汽缸数)为属性变量, 命令

> table(cyl)

告诉我们变量cyl取3个值:4,6,8,相应的频数为11, 7, 14. 而命令

> barplot(table(cyl))

显示了cyl的频数直方图. 要注意的是, 命令

> barplot(cyl)

在此不适用, 它仅适用于数值型变量.

数值型数据的分析

统计分析中主要涉及数值型数据. 对此我们可考查它们的图形特征及常用

的特征量.

ˆ 画茎叶图(stem-and-leaf plot), 命令为

> stem(mpg).

ˆ 画直方图, 命令为

> hist(mpg).

ˆ 画框须图(stem-and-leaf plot), 命令为

> boxplot(mpg).

ˆ 计算平均值, 命令为

> mean(mpg).

ˆ 计算截去10%的平均值, 命令为

> mean(mpg, trim = .1).

ˆ 按分组变量cyl计算mpg的分组平均值, 命令为

> tapply(mpg,cyl,mean)

ˆ 计算cyl为4的那些mpg的平均值, 命令为

> mean(mpg[cyl == 4]).

2.3 一个简短的R会话 17

ˆ 计算四分位数的极差(interquartile range), 命令为

> IQR(mpg).

ˆ 计算样本常用的分位数: 极小、极大、中位数及两个四分位数, 命令为

> quantile(mpg)

或者

> fivenum(mpg)

ˆ 计算由向量prob给定的各概率处的样本分位数, 命令为

> quantile(mpg, probs)

例如probs = c(0.1, 0.5, 99.5)/100. 可见, quantile( )比fivenum( )更

为一般.

ˆ 计算常用的描述性统计量, 它们分别是最小值(Min.)、第一四分位数(1st

Qu.)、中位数(Median)、平均值(Mean)、第三分位数(3rd Qu.)和最大

值(Max.), 命令为

> summary(mpg).

ˆ 计算标准差, 命令为

> sd(mpg).

ˆ 计算中位绝对离差(median absolute deviation), 命令为

> mad(mpg).

寻找二元关系

ˆ 画二维散点图, 例如cyl与mpg的散点图, 可通过下面的命令得到.

> plot(cyl,mpg)

注意: 相仿命令

plot(hp,mpg)

可得到hp与mpg的散点图. 但32个点对应了不同的汽缸, 因此按cly为图

例作出散点图更清晰, 命令为

> plot(hp,mpg,pch=cyl)

> legend(250,30,pch=c(4,6,8),

> legend=c(“4 cylinders”,”6 cylinders”,”8 cylinders”))

18 第二章 R的基本原理与核心

ˆ 拟合线性回归, 例如命令

> z <- lm(cyl ~ mpg)

可以得到

Call:

lm(formula = cyl ~ mpg)

Coefficients:

(Intercept) mpg

11.2607 -0.2525

线性回归的截距为11.2607, 斜率为-0.2525.

ˆ 相关系数(或R2)考查回归拟合好坏的程度. 命令

> cor(cyl,mpg)

可以得到相关系数(Pearson correlation coefficient)R, 其平方

> cor(cyl,mpg)^2

得到R2为0.72618, 表明数据变化的72.6%可以用汽缸数(cyl)与每加仑的

英里数(mpg)来刻划.

ˆ 残差分析:

> lm.res <- lm(cyl ~ mpg) # 将回归分析的结果作为对象

# 保存到lm.res中

> lm.resids <- resid(lm.res) # 提取残差向量

> plot(lm.resids) # 考查残差的散点图

> hist(lm.resids) # 考查残差的直方图: 钟型?

> qqnorm(lm.resids) # 残差的QQ图是否落在直线上?

结论: 从残差分析我们可以得出汽车的汽缸数与每加仑的里程数可以用线性回

归来刻划.

结束分析并退出R

> detach(mtcars) # 从内存中清除数据集mtcars

> q( ) # 退出R

2.4 R的数据结构 19

§2.4 R的数据结构

2.4.1 R的对象与属性

我们已经知道R通过一些对象来运行,这些对象是用它们的名称和内容来

刻画的,其次也通过对象的数据类型即属性来刻画. 所有的对象都有两个内在

属性:类型和长度. 类型是对象元素的基本种类,共有四种:

ˆ 数值型, 包括

– 整型

– 单精度实型

– 双精度实型

ˆ 字符型

ˆ 复数型1

ˆ 逻辑型(FALSE、TRUE或NA)

虽然还存在其它的类型,例如函数或表达式, 但是它们并不能用来表示数

据;长度是对象中元素的数目. 对象的类型和长度可以分别通过函数mode( )

和length( )得到. 例如

> x <- 1

> mode(x)

[1] “numeric”

> length(x)

[1] 1

> A <- “Gomphotherium”; compar <- TRUE; z <- 1i

> mode(A); mode(compar); mode(z)

[1] “character”

[1] “logical”

[1] “complex”

无论什么类型的数据,缺失数据总是用NA(Not Available的意思)来表示; 对很

大的数值则可用指数形式表示:

1本书不讨论复数型

20 第二章 R的基本原理与核心

> N <- 2.1e23

> N

[1] 2.1e+23

R可以正确地表示无穷的数值,如用Inf和-Inf表示 8和8,或者用NaN(Not

a Number 的意思)表示不是数字的值.

> x <- 5/0

> x

[1] Inf

> exp(x)

[1] Inf

> exp(-x)

[1] 0

> Inf – Inf

[1] NaN

> 0/0

[1] NaN

>sqrt{-7)

[1] NaN

Warning message:

产生了NaNs in: sqrt(-17)

>sqrt(-17+0i) # 按照复数进行运算

[1] 0+4.123106i

字符型的值输入时须加上双引号”,如果需要引用双引号的话,可以让它

跟在反斜杠“\”后面, 在某些函数如cat( )的输出显示或write.table( )写

入磁盘时会被以特殊的方式处理. 例如

> x <- “Double quotes \” delimitate R’s strings.”

> x

[1] “Double quotes \” delimitate R’s strings.”

> cat(x)

Double quotes ” delimitate R’s strings.

另一种表示字符型变量的方法,即用单引号(’)来界定变量,这种情况下不需

要用反斜杠来引用双引号.

2.4 R的数据结构 21

> x <- ‘Double quotes ” delimitate R\’s strings.’

> x

[1] “Double quotes \” delimitate R’s strings.”

表2.1概括了表示数据对象的类别:

表 2.1 数据对象及类型

是否允许

对象 类型 同一个对象中

有多种类型?

向量 数值型,字符型,复数型,逻辑型 否

因子 数值型, 字符型 否

数组 数值型,字符型,复数型,逻辑型 否

矩阵 数值型,字符型,复数型,逻辑型 否

数据框 数值型,字符型,复数型,逻辑型 是

时间序列(ts) 数值型,字符型,复数型,逻辑型 否

列表 数值型,字符型,复数型,逻辑型, 是

函数,表达式,. . .

说明

1) 向量是一个变量(的取值),是R中最常用、最基本的操作对象;因子是一

个分类变量;数组是一个k维的数据表;矩阵是数组的一个特例,其维

数k 2.

注意: 数组或者矩阵中的所有元素都必须是同一种类型的;数据框是由

一个或几个向量和(或)因子构成,它们必须是等长的,但可以是不同的

数据类型;“ts”表示时间序列数据,它包含一些额外的属性,例如频率

和时间;列表可以包含任何类型的对象,包括列表!

2) 对于一个向量,用它的类型和长度足够描述数据;而其它的对象则另需

一些额外信息,这些信息由外在的属性给出, 例如这些属性中的表示对象

22 第二章 R的基本原理与核心

维数的dim. 比如一个2行2列的的矩阵,它的dim是一对数值[2,2],但是其

长度是4.

3) R中有三种主要类型的运算符, 表2.2是这些运算符的列表. 其中数学运算

符和比较运算符作用于两个元素上(例如x + y, a < b);数学运算符不只

是作用于数值型或复数型变量,也可以作用在逻辑型变量上;在后一种

情况中,逻辑型变量被强制转换为数值型. 比较运算符可以适用于任何

类型:结果是返回一个或几个逻辑型变量; 逻辑型运算符适用于一个(对

于“!”运算符)或两个逻辑型对象(对于其它运算符),并且返回一个(或

几个)逻辑性变量. 运算符“逻辑与”和“逻辑或”存在两种形式:“&”

和“|”作用在对象中的每一个元素上并且返回和比较次数相等长度的逻

辑值;“&&”和“||”只作用在对象的第一个元素上.

表 2.2 运算符

数学运算 比较运算 逻辑运算

+ 加法 < 小于 ! x 逻辑非

– 减法 > 大于 x & y 逻辑与

* 乘法 <= 小于或等于 x && y 同上

/ 除法 >= 大于或等于 x | y 逻辑或

^ 乘方 == 等于 x || y 同上

%% 模 != 不等于 xor(x, y) 异或

%/% 整除

2.4.2 浏览对象的信息

函数ls( )的功能是显示所有在内存中的对象. ls( )只会列出对象名,例

如:

> name <- “Carmen”; n1 <- 10; n2 <- 100; m <- 0.5

> ls( )

[1] “m” “n1” “n2” “name”

2.4 R的数据结构 23

如果只要显示出在名称中带有某个指定字符的对象,则通过设定选项pattern

来实现(可简写为pat) ):

> ls(pat = “m”)

[1] “m” “name”

如果进一步限定显示名称中以某个字母开头的对象,则可使用命令:

> ls(pat = “^m”)

[1] “m”

运行函数ls.str( )将会显示内存中所有对象的详细信息:

> ls.str( )

m : num 0.5 n1 : num 10 n2 : num 100 name : chr “Carmen”

在ls.str( )函数中另一个非常有用的选项是max.level, 它将规定显示

有关对象信息的详细级别. 缺省情况下,ls.str( ) 将会列出关于对象的所有

信息,包括数据框、矩阵,或数据列表的详细信息, 显示结果可能会很长. 但如

果设定max.level =-1 就可以避免这种情况了. 试比较:

> M <- data.frame(n1, n2, m)

> ls.str(pat = “M”)

M : `data.frame’: 1 obs. of 3 variables:

$ n1: num 10

$ n2: num 100

$ m : num 0.5

> ls.str(pat=”M”, max.level=-1)

M : `data.frame’: 1 obs. of 3 variables:

要在内存中删除某个对象,可利用函数rm( ). 例如

ˆ 运行rm(x)将会删除对象x

ˆ 运行rm(x,y)将会删除对象x和y

ˆ 运行rm(list=ls( ))则会删除内存中的所有对象

ˆ 运行rm(list=ls(pat=”^m”))则会删除对象中以字母m开头的对象

24 第二章 R的基本原理与核心

下面我们通过具体的例子说明向量(包括数值型向量、字符型向量、逻辑

型向量和因子型向量)、矩阵、数据框、列表和时间序列的构成方法.

2.4.3 向量的建立

数值型向量的建立

统计分析中最为常用的是数值型的向量, 它们可用下面的四种函数建立:

1) seq( )或“:” # 若向量(序列)具有较为简单的规律

2) rep( ) # 若向量(序列)具有较为复杂的规律

3) c( ) # 若向量(序列)没有什么规律

4) scan( ) # 通过键盘逐个输入

例子

> 1:10

[1] 1 2 3 4 5 6 7 8 9 10

> 1:10-1

[1] 0 1 2 3 4 5 6 7 8 9

> 1:(10-1)

[1] 1 2 3 4 5 6 7 8 9 # 注意括号有无的区别

> z <- seq(1,5,by=0.5) # 等价于 seq(from=1,to=5,by=0.5)

> z

[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

> z <- seq(1,10,length=11) # 等价于 seq(1,10,length.out=11)

> z

[1] 1.0 1.9 2.8 3.7 4.6 5.5 6.4 7.3 8.2 9.1 10.0

> z <- rep(2:5,2) # 等价于 rep(2:5, times=2)

> z

[1] 2 3 4 5 2 3 4 5

> z <- rep(2:5,rep(2,4))

[1] 2 2 3 3 4 4 5 5

> z <- rep(1:3, times = 4, each = 2)

> z

2.4 R的数据结构 25

[1] 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3

> z <- x<-c(42,7,64,9)

> z

[1] 42 7 64 9

> z <- scan( ) # 通过键盘建立向量

1: 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

10:

Read 9 items

> z

[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

> z <- sequence(3:5)

> z

[1] 1 2 3 1 2 3 4 1 2 3 4 5

> z <- sequence(c(10,5))

> z

[1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5

字符型向量的建立

字符和字符向量在R中广泛使用,比如图表的标签. 在显示的时候,相应

的字符串由双引号界定,字符串在输入时可以使用单引号(’)或双以号(”). 引

号(”)在输入时应当写作\”. 字符向量可以通过函数c( )连接. 函数paste()可

以接受任意个参数,并从它们中逐个取出字符并连成字符串,形成的字符串的

个数与参数中最长字符串的长度相同. 如果参数中包含数字的话,数字将被强

制转化为字符串. 在默认情况下,参数中的各字符串是被一个空格分隔的,不

过通过参数sep=string 用户可以把它更改为其他字符串,包括空字符串. 例



> Z <- c(“green”,”blue sky”,”-99″)

> Z

[1] “green” “blue sky” “-99”

> labs <- paste(c(“X”,”Y”), 1:10, sep=””)

> labs

[1] “X1” “Y2” “X3” “Y4” “X5” “Y6” “X7” “Y8” “X9” “Y10”

26 第二章 R的基本原理与核心

逻辑型向量的建立

与数值型向量相同,R允许对逻辑向量进行操作. 一个逻辑向量的值可以

是TRUE, FALSE和NA. 前两个通常简写为T和F2 . 逻辑向量是由条件给出的. 譬



> x <- c(10.4, 5.6, 3.1, 6.4, 21.7)

> temp <- x > 13

> temp

[1] FALSE FALSE FALSE FALSE TRUE

temp为一个与x长度相同,元素根据是否与条件相符而由TRUE或FALSE组成的

向量. 逻辑向量可以在普通的运算中被使用,此时它们将被转化为数字向

量,FALSE当做0, 而TRUE当做1. 再看几个简单的例子:

> 7!=6

[1] TRUE

> !(7==6)

[1] TRUE

> !(7==6)==1

[1] TRUE

> (7==9)|(7>0)

[1] TRUE

> (7==9)&(7>0)

[1] FALSE

因子型向量的建立

一个因子或因子向量不仅包括分类变量本身, 还包括变量不同的可能水

平(即使它们在数据中不出现). 因子利用函数factor( )创建. factor( )的调

用格式如下:

factor(x, levels = sort(unique(x), na.last = TRUE),

factor( )的调用格式

labels = levels, exclude = NA, ordered = is.ordered(x))

2注意T和F仅仅是默认被指向TRUE和FALSE的变量,而不是系统的保留字.

2.4 R的数据结构 27

说明: levels 用来指定因子的水平(缺省值是向量x中不同的值);labels用来

指定水平的名字;exclude表示从向量x中剔除的水平值;ordered是一个逻辑

型选项, 用来指定因子的水平是否有次序. 这里x可以是数值型或字符型, 这样

对应的因子也就称为数值型因子或字符型因子. 因此, 因子的建立可以通过字

符型向量或数值型向量来建立, 且可以转化.

1) 将字符型向量转换成因子

> a <- c(“green”, “blue”, “green”, “yellow”)

> a <- factor(a)

a

[1] green blue green yellow

Levels: blue green yellow

2) 将数值型向量转换成因子

> b <- c(1,2,3,1)

> b <- factor(b)

> b

[1] 1 2 3 1

Levels: 1 2 3

3) 将字符型因子转换为数值型因子

> a <- c(“green”, “blue”, “green”, “yellow”)

> a <- factor(a)

> levels(a)<-c(1,2,3,4)

> a

[1] 2 1 2 3

Levels: 1 2 3 4

> ff <- factor(c(“A”, “B”, “C”), labels=c(1,2,3))

> ff

[1] 1 2 3

Levels: 1 2 3

4) 将数值型因子转换为字符型因子

28 第二章 R的基本原理与核心

> b <- c(1,2,3,1)

> b <- factor(b)

> levels(b) <- c(“low”, “middle”, “high”)

> b

[1] low middle high low

Levels: low middle high

> ff <- factor(1:3, labels=c(“A”, “B”, “C”))

ff

[1] A B C

Levels: A B C

注:函数levels( )用来提取一个因子中可能的水平值, 例如

> ff <- factor(c(2, 4), levels=2:5)

> ff

[1] 2 4

Levels: 2 3 4 5

> levels(ff)

[1] “2” “3” “4” “5”

5) 函数gl( )能产生规则的因子序列. 这个函数的用法是gl(k,n),其中k是

水平数, n是每个水平重复的次数. 此函数有两个选项:length用来指定

产生数据的个数, label用来指定每个水平因子的名字. 例如:

> gl(3, 5)

[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3

Levels: 1 2 3

> gl(3, 5, length=30)

[1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3

Levels: 1 2 3

> gl(2, 6, label=c(“Male”, “Female”))

[1] Male Male Male Male Male Male

[7] Female Female Female Female Female Female

Levels: Male Female

> gl(2, 10)

[1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2

2.4 R的数据结构 29

Levels: 1 2

> gl(2, 1, length=20)

[1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2

Levels: 1 2

> gl(2, 2, length=20)

[1] 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2

Levels: 1 2

数值型向量的运算

向量可以用于算术表达式中,操作是按照向量中的元素一个一个进行的.

同一个表达式中的向量并不需要具有相同的长度, 如果它们的长度不同,表达

式的结果是一个与表达式中最长向量有相同长度的向量, 表达式中较短的向量

会根据它的长度被重复使用若干次(不一定是整数次),直到与长度最长的向量

相匹配, 而常数将被不断重复— 这一规则称为循环法则(recycling rule). 例

如, 命令

> x <- c(10.4, 5.6, 3.1, 6.4, 21.7)

> y <- c(x,0,x)

> v <- 2*x + y + 1

产生一个长度为11的新向量v, 其中2 x被重复2.2次,y 被重复1次,常数1被重

复11次. 为了方便使用,我们对向量的运算稍作细分:

ˆ 向量与一个常数的加、减、乘、除为向量的每一个元素与此常数进行加、

减、乘、除;

ˆ 向量的乘方( ˆ )与开方(sqrt)为每一个元素的乘方与开方, 这对

像log, exp, sin, cos, tan 等普通的运算函数同样适用;

ˆ 同样长度向量的加、减、乘、除等运算为对应元素进行加、减、乘、除等;

ˆ 不同长度向量的加、减、乘、除遵从循环法则(recycling rule), 但要注意

这种场合通常要求向量的长度为倍数关系, 否则会出现警告:“长向量并

非是短向量的整数倍”.

下面举例说明

30 第二章 R的基本原理与核心

> 5+c(4,7,17)

[1] 9 12 22

> 5*c(4,7,17)

[1] 20 35 85

> c(-1,3,-17)+c(4,7,17)

[1] 3 10 0

> c(2,4,5)^2

[1] 4 16 25

> sqrt(c(2,4,25))

[1] 1.414214 2.000000 5.000000

> 1:2+1:4

[1] 2 4 4 6

> 1:4+1:7

[1] 2 4 6 8 6 8 10

Warning message:

长的目标对象长度不是短的目标对象长度的整倍数 in: 1:4 + 1:7

常用统计函数

最后列出统计分析中常用的函数与作用(见表2.1).

图 2.1 统计分析中常用的函数与作用

统计函数 作用

maxpxq 返回向量x中最大的元素

minpxq 返回向量x中最小的元素

which.maxpxq 返回向量x中最大元素的下标

which.minpxq 返回向量x中最小元素的下标

meanpxq 计算样本(向量)x的均值

medianpxq 计算样本(向量)x的中位数

madpxq 计算中位绝对离差

2.4 R的数据结构 31

varpxq 计算样本(向量)x的方差

sdpxq 计算向量x的标准差

rangepxq 返回长度为2的向量: cpminpxq,maxpxqq

IQRpxq 计算样本的四分位数极差

quantilepxq 计算样本常用的分位数3

summarypxq 计算常用的描述性统计量(最小、最大、平均值、中

位数和四分位数)

lengthpxq 返回向量x的长度

sumpxq 给出向量x的总和

prodpxq 给出向量x的乘积

revpxq 取向量x的逆序

sortpxq 将向量x按升序排序, 选项decreasing=TRUE表示

降序

orderpxq 返回x的秩(升序), 选项decreasing=TRUE得到降

序的秩

rankpxq 返回x的秩

cumsumpxq 返 回 向 量x和 累 积 和(其 第i个 元 素 是

从xr1s到xris的和)

cumprodpxq 返 回 向 量x和 累 积 积(其 第i个 元 素 是

从xr1s到xris的积)

cumminpxq 返 回 向 量x和 累 积 最 小 值(其 第i个 元 素 是

从xr1s到xris的最小值)

cummaxpxq 返 回 向 量x和 累 积 最 大 值(其 第i个 元 素 是

从xr1s到xris的最大值)

3quantile(x)仅计算x的极小、极大、中位数及两个四分位数, 更一般地使用quantile(x, probs)可计算

给定向量probs处的样本分位数.

32 第二章 R的基本原理与核心

varpx, yq 计算样本(向量)x与y的协方差

covpx, yq 计算样本(向量)x与y的协方差

corpx, yq 计算样本(向量)x与y的相关系数

outerpx, yq 计算样本(向量)x与y的外积4

函数maxpq, minpq, median( ), var( ), sd( ), sum( ), cumsum( ),

cumprod( ), cummax( ), cummin( )对于矩阵及数据框的意义有方向性. 对于

矩阵, cov( )和cor( ) 分别用于求矩阵的协方差阵和相关系数阵, 这些将在

后面举例说明.

向量的下标(index)与子集(元素)的提取

选择一个向量的子集(元素)可以通过在其名称后追加一个方括号中的索

引向量来完成. 更一般地,任何结果为一个向量的表达式都可以通过追加索引

向量来选择其中的子集. 这样的索引向量有四种不同的类型.

1) 正整数向量 — 提取向量中对应的元素. 这种情况下索引向量中的值必

须在集合{1, 2, , lengthpxq}中. 返回的向量与索引向量由相同的长度,

且按索引向量的顺序排列. 例如x[6] 是x的第六个元素,而

> x[1:10] 选取了x的前10个元素(假设x的长度不小于10).

> x[c(1,4)]

取出向量x的第1和第4个元素.

2) 负整数向量 — 去掉向量中与索引向量对应的元素. 例如

> y <- x[-(1:5)]

从x中去除前5个元素得到y.

3) 字符串的向量. 这种可能性只存在于拥有names属性并由它来区分向量中

元素的向量. 这种情况下一个由名称组成的子向量起到了和正整数的索

引向量相同的效果. 例如

4函数outer( )的一般形式为(x,y,”op”), 其中op可为任一四则运算符.

2.4 R的数据结构 33

> fruit <- c(5, 10, 1, 20)

> names(fruit) <- c(“orange”, “banana”, “apple”, “peach”)

fruit

orange banana apple peach

5 10 1 20

> lunch <- fruit[c(“apple”,”orange”)]

> lunch

apple orange

1 5

4) 逻辑的向量 — 取出满足条件的元素. 在索引向量中返回值是TRUE的元

素所对应的元素将被选出,返回值为FALSE的值所对应的元素将被忽略.

例如

> x <- c(42,7,64,9)

> x>10 # 值大于10的元素逻辑值

[1] TRUE FALSE TRUE FALSE

> x[x>10] # 值大于10的元素

[1] 42 64

> x[x<40&x>10]

numeric(0)

> x[x>10] <- 10

> x

[1] 10 7 10 9

>y = runif(100,min=0,max=1) #(0,1)上100个均匀分布随机数

>sum(y<0.5) # 值小于0.5的元素的个数

[1] 47

>sum(y[y<0.5]) # 值小于0.5的元素的值的和

[1] 10.84767

> y <- x[!is.na(x)] # x中的非缺失值

> z <- x[(!is.na(x))&(x>0)] # x中的非负非缺失值

34 第二章 R的基本原理与核心

2.4.4 数组与矩阵的建立

前面已经指出数组是一个kp¥ 1q维的数据表; 矩阵是数组的一个特例,其

维数k 2,而上面所述的向量自然也可看成维数为k 1的数组5. 而且向量、

数组或者矩阵中的所有元素都必须是同一种类型的. 对于一个向量,其属性由

其类型和长度构成;而对于数组与矩阵, 除了类型和长度两个属性外, 还需要

维数dim这个属性来描述. 因此如果一个向量需要在R中以数组的方式被处理,

则必须含有一个维数向量作为它的dim属性.

数组的建立

R中数组由函数array( )建立, 其一般格式为:

> array(data, dim, dimnames)

其中data为一向量, 其元素用于构建数组; dim为数组的维数向量(为数值型向

量); dimnames为由各维的名称构成的向量(为字符型向量), 缺省为空.

以一个3维的数据为例来说明. 设A是一个存放在向量a中的24个数据项组

成的数组, A的维数向量为c(3,4,2). 维数可由命令

> dim(A) <- c(3,4,2)

建立. 这样, 命令

> A <- array(a, dim = c(3,4,2))

就建立了数组A. 24个数据项在数组A中的顺序依次为: ar1, 1, 1s, ar2, 1, 1s,

, ar2, 4, 2s, ar3, 4, 2s. 我们再来看一个具体的例子:

> A <- array(1:8, dim = c(2, 2, 2))

> A

, , 1

[,1] [,2]

[1,] 1 3

[2,] 2 4

, , 2

[,1] [,2]

[1,] 5 7

[2,] 6 8

5通常使用c( )建立向量, 使用matrix( )建立矩阵, 使用array( )建立数组, 因此它们在R中的属性是不

同的

2.4 R的数据结构 35

> dim(A)

[1] 2 2 2

> dimnames(A) <- list(c(“a”, “b”), c(“c”, “d”), c(“e”, “f”))

> A

, , e

c d

a 1 3

b 2 4

, , f

c d

a 5 7

b 6 8

> colnames(A)

[1] “c” “d”

> rownames(A)

[1] “a” “b”

> dimnames(A)

[[1]]

[1] “a” “b”

[[2]]

[1] “c” “d”

[[3]]

[1] “e” “f”

如果数据项太少,则采用循环准则填充数组(或矩阵), 见下面的的第二个例子.

矩阵的建立

因为矩阵是数组的特例,因此矩阵也可以用函数array( )来建立, 例如

> A <- array(1:6, c(2,3))

> A

[,1] [,2] [,3]

[1,] 1 3 5

36 第二章 R的基本原理与核心

[2,] 2 4 6

> A<-array(1:4,c(2,3))

> A

[,1] [,2] [,3]

[1,] 1 3 1

[2,] 2 4 2

> A<-array(1:8,c(2,3))

> A

[,1] [,2] [,3]

[1,] 1 3 5

[2,] 2 4 6

然而, 由于矩阵在数学及统计中的特殊性, 在R中最为常用的是使用命

令matrix( )建立矩阵, 而对角矩阵用函数diag( )建立更为方便, 例如

> X <- matrix(1, nr = 2, nc = 2)

[,1] [,2]

[1,] 1 1

[2,] 1 1

> X <- diag(3) # 生成单位阵

[,1] [,2] [,3]

[1,] 1 0 0

[2,] 0 1 0

[3,] 0 0 1

> v <- c(10, 20, 30)

> diag(v)

[,1] [,2] [,3]

[1,] 10 0 0

[2,] 0 20 0

[3,] 0 0 30

> diag(2.5, nr = 3, nc = 5)

[,1] [,2] [,3] [,4] [,5]

[1,] 2.5 0.0 0.0 0 0

[2,] 0.0 2.5 0.0 0 0

[3,] 0.0 0.0 2.5 0 0

> X <- matrix(1:4, 2) # 等价于X <- matrix(1:4, 2, 2)

2.4 R的数据结构 37

> X

[,1] [,2]

[1,] 1 3

[2,] 2 4

> rownames(X) <- c(“a”, “b”)

> colnames(X) <- c(“c”, “d”)

> X

c d

a 1 3

b 2 4

> dim(X)

[1] 2 2

> dimnames(X)

[[1]]

[1] “a” “b”

[[2]]

[1] “c” “d”

注意:

ˆ 循环准则仍然适用于matrix( ), 但要求数据项的个数等于矩阵的列数的

倍数, 否则会出现警告.

ˆ 矩阵的维数使用c( )会得到不同的结果(除非是方阵), 因此需要小心.

ˆ 数据项填充矩阵的方向可通过参数byrow来指定, 其缺省是按列填充

的(byrow=FALSE). byrow=TRUE表示按行填充数据.

再看几个例子:

> X <- matrix(1:4, 2, 4) # 按列填充

> X

[,1] [,2] [,3] [,4]

[1,] 1 3 1 3

[2,] 2 4 2 4

> X <- matrix(1:4, 2, 3)

Warning message:

38 第二章 R的基本原理与核心

In matrix(1:4, 2, 3) : 数据长度[4]不是矩阵列数[3]的整倍数

> X <- matrix(1:4, c(2, 3)) # 不经常使用

> X

[,1] [,2]

[1,] 1 3

[2,] 2 4

> X <- matrix(1:4, 2, 4, byrow=TRUE) # 按行填充

> X

[,1] [,2] [,3] [,4]

[1,] 1 2 3 4

[2,] 1 2 3 4

数组与矩阵的下标(index)与子集(元素)的提取

同向量的下标一样,矩阵与数组的下标可以使用正整数、负整数和逻辑表

达式,从而实现子集的提取或修改. 考查矩阵

x <- matrix(1:6, 2, 3)

> x

[,1] [,2] [,3]

[1,] 1 3 5

[2,] 2 4 6

ˆ 提取一个元素

> x[2,2]

[1] 4

ˆ 提取若一个或若干个行或列6

> x[2,]

[1] 2 4 6

> x[,2]

[1] 3 4

> x[,2,drop=FALSE]

6R的缺省规则是返回一个维数尽可能低的对象, 这可以通过修改选项drop的值来改变.

2.4 R的数据结构 39

[,1]

[1,] 3

[2,] 4

> x[,c(2,3),drop=FALSE]

[,1] [,2]

[1,] 3 5

[2,] 4 6

ˆ 去掉若一个或若干个行与列

> x[-1,]

[1] 2 4 6

> x[,-2]

[,1] [,2]

[1,] 1 5

[2,] 2 6

ˆ 添加与替换元素

> x[,3] <- NA

> x

[,1] [,2] [,3]

[1,] 1 3 NA

[2,] 2 4 NA

> x[is.na(x)] <- 1 # 缺失值用1代替

> x

[,1] [,2] [,3]

[1,] 1 3 1

[2,] 2 4 1

对矩阵的运算(函数)

对于矩阵的运算, 我们分通常的矩阵代数运算与统计运算来分别讨论.

1) 矩阵的代数运算:

ˆ 转置函数t( ):

40 第二章 R的基本原理与核心

> X <- matrix(1:6, 2, 3)

> X

[,1] [,2] [,3]

[1,] 1 3 5

[2,] 2 4 6

> t(X)

[,1] [,2]

[1,] 1 2

[2,] 3 4

[3,] 5 6

ˆ 提取对角元diag( ):

> X <- matrix(1:4, 2, 2)

> diag(X)

[1] 1 4

ˆ 几个矩阵按行合并rbind( )与按列合并cbind( ):

> m1 <- matrix(1, nr = 2, nc = 2)

> m2 <- matrix(2, nr = 2, nc = 2)

> rbind(m1, m2)

[,1] [,2]

[1,] 1 1

[2,] 1 1

[3,] 2 2

[4,] 2 2

> cbind(m1, m2)

[,1] [,2] [,3] [,4]

[1,] 1 1 2 2

[2,] 1 1 2 2

ˆ 矩阵的逐元乘积“*”:

> m2*m2

[,1] [,2]

[1,] 4 4

[2,] 4 4

ˆ 矩阵的代数乘积“%*%”:

2.4 R的数据结构 41

> rbind(m1, m2) %*% cbind(m1, m2)

[,1] [,2] [,3] [,4]

[1,] 2 2 4 4

[2,] 2 2 4 4

[3,] 4 4 8 8

[4,] 4 4 8 8

> cbind(m1, m2) %*% rbind(m1, m2)

[,1] [,2]

[1,] 10 10

[2,] 10 10

ˆ 方阵的行列式det( )

> X<-matrix(1:4, 2)

> X

[,1] [,2]

[1,] 1 3

[2,] 2 4

> det(X)

[1] -2

ˆ 其它函数: 交叉乘积(cross product), 函数为crossprod( ); 特征根

与特征向量, 函数为eigen( ); QR分解, 函数为qr( ), 等等.

2) 矩阵的统计运算:

在讲述向量时我们已经提到过函数max( ), min( ), median( ),

var( ), sd( ), sum( ), cumsum( ), cumprod( ), cummax( ), cummin(

)对于矩阵(及数据框)有方向性. 而函数cov( )和cor( ) 分别用于计算

矩阵的协方差阵和相关系数阵.

正是由于矩阵的排列是有方向性的,在R中规定矩阵是按列排

的,若没有特别说明上述函数的使用也是按列计算的, 但也可以通

过选项MARGIN来改变. 下面我们要用到对一个对象施加某种运算的函

数apply( ), 其格式为

> apply(X, MARGIN, FUN)

其中X为参与运算的矩阵, FUN为上面的一个函数或“+”、“-

”、“*”、“\”(必须放在引号中), MARGIN=1表示按列计算, MARGIN=2表

示按行计算, MARGIN=c(1,2)表示按行列计算(在至少3维的数组中使用).

42 第二章 R的基本原理与核心

我们还用到sweep( )函数, 命令

> sweep(X, MARGIN, STATS, FUN)

表示从矩阵X中按MATGIN计算STATS,并从X中除去(sweep out). 下面举

几个例子加以说明:

ˆ 求均值, 中位数等:

> m<-matrix(rnorm(n=12),nrow=3)

> apply(m, MARGIN=1, FUN=mean) # 求各行的均值

[1] -0.2540148 0.5474583 0.1493290

> apply(m, MARGIN=2, FUN=mean) # 求各列的均值

[1] -0.5389053 0.4731592 0.7821656 -0.1260561

ˆ 标准化:

> scale(m, center=T, scale=T)

ˆ 减去中位数:

> row.med <- apply(m, MARGIN=1, FUN=median)

> sweep(m, MARGIN=1, STATS=row.med, FUN=”-”)

2.4.5 数据框(data frame)的建立

统计分析中一个完整的数据集通常是由若干个变量的若干个观测值组成

的, 在R中称为数据框. 数据框是一个对像, 它与前面讲的矩阵与二维数组形式

上是类似的, 也是二维的,也有维数这个属性, 且各个变量的观测值有相同的

长度. 但不同的是: 在数据框中, 行与列的意义是不同的, 其中的列表示变量,

而行表示观测. 显示数据框时左侧会显示观测值的序号.

数据框的建立分为直接的与简接的两种方法:

数据框的直接建立

若你在R中建立了一些向量并试图想由它们生成数据框,则可以使用函

数data.frame( ). 例如

> x=c(42,7,64,9)

> y=1:4

> z.df=data.frame(INDEX = y, VALUE = x)

2.4 R的数据结构 43

INDEX VALUE

1 1 42

2 2 7

3 3 64

4 4 9

数据框中的向量必须有相同的长度或长度有倍数关系,如果其中有一个比其它

的短,它将按循环法则“循环”整数次. 例如

> weight <- c(70.6, 56.4, 80, 59.5)

> x <- (c(“adult”, “teen”, “adult”, “teen”))

> wag <- data.frame(weight, age = x)

> wag

weight age

1 70.6 adult

2 56.4 teen

3 80.0 adult

4 59.5 teen

> x <- 1:4; y <- 2:4

> data.frame(x, y)

错误于data.frame(x, y) : 变元值意味着不同的行数 4, 3

数据框的简接建立

一个数据框还可以通过数据文件(文本文件、EXCEL文件或其它统计

软件的数据文件)读取并建立, 在此我们仅通过一个例子来说明如何通过函

数read.table( )读取文件c:\data\foo.txt中的观测值,并建立一个数据框.

其它简接方法可参考下一节“数据的存贮与读取”的介绍. 已知存于foo.txt上

的数据如下:

treat weight

A 3.4

B NA

A 5.8

则下面的命令建立了数据框foo.

44 第二章 R的基本原理与核心

> foo <- read.table(file = “c:/data/foo.txt”, header = T)

> foo

treat weight

1 A 3.4

2 B NA

3 A 5.8

适用于数据框的函数

在上一小节中我们所讨论的关于矩阵的统计计算函数max( ), min( ),

median( ), var( ), sd( ), sum( ), cumsum( ), cumprod( ), cummax( ),

cummin( ), cov( ), cor( )同样适用于数据框, 意义也相同. 这里通过R内

嵌的另一个数据集Puromycin来说明summary( )、pairs( )和xtable( )等的

使用.

> attach(Puromycin) # 挂接数据集使之激活

> help(Puromycin) # 显示前几行

> summary(Puromycin) # 显示主要的描述性统计量

conc rate state

Min. :0.0200 Min. : 47.0 treated :12

1st Qu.:0.0600 1st Qu.: 91.5 untreated:11

Median :0.1100 Median :124.0

Mean :0.3122 Mean :126.8

3rd Qu.:0.5600 3rd Qu.:158.5

Max. :1.1000 Max. :207.0

从summary可以看出, 变量conc和rate是数值型的, 而state为因子变量. 变量

之间的关系可以通过成对数据散点图考查:

> pairs(Puromycin, panel = panel.smooth)

最后使用xtabs( )函数由交叉分类因子产生一个列联表:

> xtabs(~state + conc, data = Puromycin)

conc

state 0.02 0.06 0.11 0.22 0.56 1.1

2.4 R的数据结构 45

conc

50 100 150 200

0.

0

0.

2

0.

4

0.

6

0.

8

1.

0

50

10

0

15

0

20

0

rate

0.0 0.2 0.4 0.6 0.8 1.0 1.0 1.2 1.4 1.6 1.8 2.0

1.

0

1.

2

1.

4

1.

6

1.

8

2.

0

state

图 2.2 Puromycin的成对散点图

treated 2 2 2 2 2 2

untreated 2 2 2 2 2 1

数据框的下标与子集的提取

数据框的下标与子集的提取与矩阵基本相同. 不同的是: 对于列我们可以

使用变量的名称, 仍以数据集Puromycin进行举例说明.

ˆ 提取单个元素

> Puromycin[1, 1]

[1] 0.02

46 第二章 R的基本原理与核心

ˆ 提取一个子集,例如第1, 3, 5行,第1, 3列

> Puromycin[c(1, 3, 5), c(1, 3)]

conc state

1 0.02 treated

3 0.06 treated

5 0.11 treated

> Puromycin[c(1, 3, 5), ]

conc rate state

1 0.02 76 treated

3 0.06 97 treated

5 0.11 123 treated

常使用变量名称来指定列的位置,上面的命令等价于

> Puromycin[c(1, 3, 5), c(“conc”, “state”)]]

ˆ 提取一列(变量的值). 一个数据框的变量对应了数据框的一列, 如果变量

有名称, 则可直接使用“数据框名$变量名”这种格式指向对应的列. 例如

> Puromycin$conc # 等价于 Puromycin[,1]

[1] 0.02 0.02 0.06 0.06 0.11 0.11 0.22 0.22 0.56 0.56

[11] 1.10 1.10 0.02 0.02 0.06 0.06 0.11 0.11 0.22 0.22

[21] 0.56 0.56 1.10

> Puromycin$state

[1] treated treated treated treated treated

[6] treated treated treated treated treated

[11] treated treated untreated untreated untreated

[16] untreated untreated untreated untreated untreated

[21] untreated untreated untreated

Levels: treated untreated

ˆ 提取满足条件的子集

> subset(Puromycin, state == “treated” & rate > 160)

conc rate state

9 0.56 191 treated

2.4 R的数据结构 47

10 0.56 201 treated

11 1.10 207 treated

12 1.10 200 treated

> subset(Puromycin, conc > mean(conc))

conc rate state

9 0.56 191 treated

10 0.56 201 treated

11 1.10 207 treated

12 1.10 200 treated

21 0.56 144 untreated

22 0.56 158 untreated

23 1.10 160 untreated

数据框中添加新变量

在原有的数据框中添加新的变量有三种方法. 假设我们想在Puromycin中

增加变量iconc, 其定义为1/conc, 则可分别使用:

1) 基本方法

> Puromycin$iconc <- 1/Puromycin$conc

2) 使用with( ) 函数

> Puromycin$iconc <- with(Puromycin, 1/conc)

3) 使用transform( )函数, 且可一次性定义多个变量

> Puromycin <- transform(Puromycin, iconc = 1/conc,

sqrtconc = sqrt(conc))

> head(Puromycin)

conc rate state iconc sqrtconc

1 0.02 76 treated 50.00000 0.1414214

2 0.02 47 treated 50.00000 0.1414214

3 0.06 97 treated 16.66667 0.2449490

4 0.06 107 treated 16.66667 0.2449490

5 0.11 123 treated 9.09091 0.3316625

6 0.11 139 treated 9.09091 0.3316625

48 第二章 R的基本原理与核心

2.4.6 列表(list)的建立

复杂的数据分析时,仅有向量与数据框还不够, 有时需要生成包含不同类

型的对象. R的列表(list)就是包含任何类型的对象.

列表可以用函数list( )创建,方法与创建数据框类似(见§2.4.5).

和data.frame( )一样,缺省值没有给出对象的名称. 列表的下标与子集

的提取也与数据框没有本质区别. 数据分析时通常是在提取部分对象后按上面

讲述的向量、矩阵或数据框等运算进行, 在此不再一一列举. 下面仅举一例进

行说明.

> L1 <- list(1:6, matrix(1:4, nrow = 2))

> L1

[[1]]

[1] 1 2 3 4 5 6

[[2]]

[,1] [,2]

[1,] 1 3

[2,] 2 4

L2 <- list(x = 1:6, y = matrix(1:4, nrow = 2))

> L2

$x

[1] 1 2 3 4 5 6

$y

[,1] [,2]

[1,] 1 3

[2,] 2 4

> L2$x

[1] 1 2 3 4 5 6

> L2[1]

$x

[1] 1 2 3 4 5 6

2.4 R的数据结构 49

> L2[[1]]

[1] 1 2 3 4 5 6

> L2[[1]][2]

[1] 2

> L2$x[2]

[1] 2

> L2$y[4]

[1] 4

2.4.7 时间序列(ts)的建立

由函数ts( )通过一向量或者矩阵创建一个一元的或多元的时间序

列(time series), 它称为ts型对象,其调用格式为:

ts(data = NA, start = 1, end = numeric(0), frequency = 1,

函数ts( )的调用格式

deltat = 1, ts.eps = getOption(“ts.eps”), class, names)

函数ts( )可带一些表明序列特征的选项(其本身可使用缺省值), 它们是:

data 一个向量或者矩阵

start 第一个观察值的时间,为一个数字或者是一个由两个整数

构成的向量(参见下面的例子)

end 最后一个观察值的时间,指定方法和start相同

frequency 单位时间内观察值的频数(频率)

deltat 两个观察值间的时间间隔(例如,月度数据的取值为1/12);

frequency和deltat必须并且只能给定其中的一个

ts.eps 序列之间的误差限. 如果序列之间的频率差异小于ts.eps,

则认为这些序列的频率相等.

class 对象的类型. 一元序列的缺省值是”ts”,多元序列的缺省值

是c(“mts”, “ts”)

names 一个字符型向量,给出多元序列中每个一元序列的名称, 缺

省为data中每列数据的名称或者Series 1, Series 2, . . .

我们看几个用ts( )创建时间序列的一些例子:

50 第二章 R的基本原理与核心

> ts(1:10, start = 1959)

Time Series:

Start = 1959

End = 1968

Frequency = 1

[1] 1 2 3 4 5 6 7 8 9 10

> ts(1:47, frequency = 12, start = c(1959, 2))

Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

1959 1 2 3 4 5 6 7 8 9 10 11

1960 12 13 14 15 16 17 18 19 20 21 22 23

1961 24 25 26 27 28 29 30 31 32 33 34 35

1962 36 37 38 39 40 41 42 43 44 45 46 47

> ts(1:10, frequency = 4, start = c(1959, 2))

Qtr1 Qtr2 Qtr3 Qtr4

1959 1 2 3

1960 4 5 6 7

1961 8 9 10

> ts(matrix(rpois(36,5),12,3), start=c(1961,1),frequency=12)

Series 1 Series 2 Series 3

Jan 1961 8 5 4

Feb 1961 6 6 9

Mar 1961 2 3 3

Apr 1961 8 5 4

May 1961 4 9 3

Jun 1961 4 6 13

Jul 1961 4 2 6

Aug 1961 11 6 4

Sep 1961 6 5 7

Oct 1961 6 5 7

Nov 1961 5 5 7

Dec 1961 8 5 2

本书不讨论时间序列的统计分析, 有兴趣的可参考Zivot与Wang(2002).

2.5 数据的存储与读取 51

§2.5 数据的存储与读取

对于在文件读取和写入的工作,R使用工作目录来完成. 如果一个文件不

在工作目录里则必须给出它的路径. 可以使用命令getwd( )(获得工作目录)来

找到目录,使用命令setwd(“C:/data”)将当前的工作目录改变为C:\data(注

意R命令中目录的分割符使用正斜杠“/”或两个反斜杠“\\”). 工作目录的设

定也可通过“文件”菜单的“改变当前目录…”来完成7.

2.5.1 数据的存储

保存为文本文件

R软件中使用函数write.table( )或save( )在文件中写入一个对象,一

般是写一个数据框,也可以是其它类型的对象(向量、矩阵、数组、列表等). 我

们以数据框为例加以说明,例如数据框d是用下面的命令建立的:

> d <- data.frame(obs = c(1, 2, 3), treat = c(“A”, “B”, “A”),

weight = c(2.3, NA, 9))

1) 保存为简单的文本文件

> write.table(d, file = “c:/data/foo.txt”,

row.names = F, quote = F)

其中选项row.names = F表示行名不写入文件, quote = F表示变量名不

放在双引号中.

2) 保存为逗号分割的文本文件

> write.csv(d, file = “c:/data/foo.csv”,

row.names = F, quote = F)

3) 保存为R格式文件

> save(d, file = “c:/data/foo.Rdata”)

在经过了一段时间的分析后, 常需要将工作空间的映像保存起来, 命令为

7如果不设定工作目录, 在读写文件时也可将目录直接写在file参数中.

52 第二章 R的基本原理与核心

> save.image( )

实际上它等价于

> save(list =ls(all=TRUE), file=”.RData”)

我们了也可通过菜单“文件”下的“保存工作空间”来完成. 上述三个函

数的选项及具体使用请查看它们的帮助文件.

2.5.2 数据的读取

文本文件数据的读取

R可 以 用 下 面 的 函 数 读 取 存 储 在 文 本 文 件(ASCII)中 的 数 据:

read.table( ), scan( )和read.fwf( ).

1) 使用函数read.table( )

函数read.table( )用来创建一个数据框,所以它是读取表格形式的数

据的主要方法, 这一点我们在前一节已经提到. 我们再举一个例子, 先

在“c:\data”下建立文件houses.dat, 其内容为

Price Floor Area Rooms Age Cent.heat

01 52.00 111.0 830 5 6.2 no

02 54.75 128.0 710 5 7.5 no

03 57.50 101.0 1000 5 4.2 no

04 57.50 131.0 690 6 8.8 no

05 59.75 93.0 900 5 1.9 yes

则使用命令:

> setwd(“C:/data”)

> HousePrice <- read.table(file=”houses.dat”)

建立数据框HousePrice. 默认情况下,数值项(除了行标号)将被当作数

值变量读入. 非数值变量, 如例子中的Cent.heat, 将被作为因子读入. 如

果明确数据的第一行作为表头行, 则使用header选项:

> HousePrice <- read.table(“houses.dat”, header=TRUE)

2.5 数据的存储与读取 53

除上面的基本形式外, read.table( )还有4个变形: read.csv( ),

read.csv2( ), read.delim( ), read.delim2( ). 前二个读取用逗号

分割的数据; 后二个则针对使用其它分割符分割的数据(它们不使用行

号). 具体可参考read.table( )的帮助文件. 如果上面的文件在取消行号

后每一个数据项后加上逗号“,”, 并改名为house.csv, 则上述命令改为

> HousePrice <- read.csv(“houses.csv”, header=TRUE)

2) 使用函数scan( )

函数scan( )比read.table( )要更加灵活,它们的区别之一是: scan(

)可以指定变量的类型,例如我们先建立文件C:\data\data.dat:

M 65 168

M 70 172

F 54 156

F 58 163

命令:

> mydata <- scan(“data.dat”, what = list(“”, 0, 0))

读取了文件data.dat中三个变量,第一个是字符型变量,后两个是数值

型变量. 其中第二个参数是一个名义列表结构,用来确定要读取的三个

向量的模式. 在名义列表中,我们可以直接命名对象. 例如

> mydata <- scan(“data.dat”,

+ what = list(Sex=””, Weight=0, Height=0))

> mydata

$Sex

[1] “M” “M” “F” “F”

$Weight

[1] 65 70 54 58

$Height

[1] 168 172 156 163

54 第二章 R的基本原理与核心

另一个重要的区别在于scan( )可以用来创建不同的对象: 向量、矩阵、

数据框、列表等. 在缺省情况下(即what被省略),scan( )将创建一个数

值型向量. 如果读取的数据类型与缺省类型或指定类型不符, 则将返回一

个错误信息. 更一般的说明可参考scan( )的帮助文件.

3) 使用函数read.fwf( )

函数read.fwf( )可以用来读取文件中一些固定宽度格式的数据. 除了

选项widths用来说明读取字段的宽度外,其它选项与read.table( )基

本相同. 例如, 我们先建立文件C:\data\data.txt:

A1.501.2

A1.551.3

B1.601.4

B1.651.5

C1.701.6

C1.751.7

命令:

> mydata <- read.fwf(“data.txt”, widths=c(1, 4, 3),

col.names=c(“X”,”Y”,”Z”))

得到

X Y Z

1 A 1.50 1.2

2 A 1.55 1.3

3 B 1.60 1.4

4 B 1.65 1.5

5 C 1.70 1.6

6 C 1.75 1.7

更详细的说明可参考read.fwf( )的帮助文件.

Excel数据的读取

有两种简单的方法获得Excel电子表格中的数据.

2.5 数据的存储与读取 55

1) 利用剪贴板

一种简单不过的方法是打开Excel中电子表格, 选中需要的数据区域, 再

复制到剪贴板中(使用CTRL+C). 然后在R中键入命令

> mydata <- read.delim(“clipboard”)

2) 使用程序包RODBC.

要得到文件”c:\data\body.xls”中工作表1(sheet1)中的数据,设为

Sex Weight Height

M 65 168

M 70 172

F 54 156

F 58 163

可以使用命令

> library(RODBC)

> z <- odbcConnectExcel(“c:/data/body.xls”)

> foo <- sqlFetch(z, “Sheet1”)

> close(z)

R中数据集的读取

1) R的标准数据datasets

RR提供了一个基本的数据集包datasets, 其中包含了100多个数据集(通

常为数据框和列表). 它随着R的启动全部一次性自动载入, 通过命令

> data( )

就可列出全部的数据集(包括已经通过library( )加载的其它程序包的

数据集). 输入数据集的名字或用help(dataname)就可看到你所关心的

数据集的信息.

2) 专用程序包中的数据集

要读取其他已经安装的专用程序包中的数据,可以使用package参数,例



56 第二章 R的基本原理与核心

> data(package=”pkname”) # pkname 为已安装的程序包的名字

就可以列出程序包pkname中的所有数据集, 但要注意的是它们还未被载

入到R系统中供浏览. 而命令

> data(dataname, package=”pkname”)

则载入程序包pkname中的名为dataname的数据集. 这时数据dataname的

信息就可通过其名字或help( )进行浏览. 用户发布的程序包是一个丰富

的数据集来源.

注意:

ˆ 从上面的例子我们看到data( )有两个功能: 浏览数据列表和加载数

据集, 但可浏览到的数据集并不一定已经加载;

ˆ 命令library( )用于加载程序包, 程序包加载后其函数可以使用,

但其中的数据集仍未载入, 仍需要使用data( )加载. 因此通常的做

法是逐个使用下面的命令

> library(“pkname”)

> data( ) # 或 data(package=”pkname”)

> data(dataname) # data(dataname,package=”pkname”)

ˆ data(dataname)将从第一个能够找到data(dataname)的程序包中

载入这个数据集. 为避免载入同名的其它数据集, 加上package选项

是有必要的.

ˆ 加载的数据集中的变量是不能直接按其名字参与运算的, 例如

在R刚启动后, 数据集mtcars中的变量mpg是无法直接按其名字浏

览与参与计算的. 例如要计算其平均值, 可以使用命令

> mean(mtcars$mpg)

得到20.09062. 另一个方法是使用命令attach(mtcars)将此数据集

挂接进来, 成为当前的数据集. 这时R就将这个数据集中的变量放到

一个临时的目录中供访问. 这时与上面命令等价的是

> attach(mtcars)

> mean(mpg)

[1] 20.09062

2.6 R 的图形功能 57

一个好的习惯是在不用此数据集时将它挂起(卸载,detach):

> detach(mtcars)

R格式的数据

R的数据或更为一般的对象(包括向量、数据框、列表、函数等)可以

通过save( )保存起来, 文件名以Rdata为后缀. 例如我们将mtcars中的变

量mpg和hp生成为数据框mtcars2, 并保存在文件myR.Rdata中:

> attach(mtcars)

> mtcars2 <- data.frame(mtcars[,c(1,4)])

> save(mtcars2, “c:/data/myR.Rdata”)

而命令

> load(“c:/data/myR.Rdata”)

则可以重新加载进来. 涉及多个数据集的统计分析经常使用这种方法保存与加

载数据.

其它统计软件数据的读取

R也可以读取其它统计软件的数据文件(如SAS, SPSS, Stata, S-PLUS)和

访问SQL类型的数据库, 程序包foreign提供了这一便利. 由于它们仅对R的

高级应用有用, 我们在此不再细说, 具体可参考随机R同时发行的R data

Import/Export手册.

§2.6 R 的图形功能

R提供非常多样的绘图功能. 我们可以通过R提供的二组演示例子进行了

解:

ˆ demo(graphics)为二维的图形示例;

ˆ demo(persp)为三维的图形示例.

58 第二章 R的基本原理与核心

我们在这里不可能详细说明R软件在绘图方面的所有功能,主要是因为每个绘

图函数都有大量的选项,使得图形的绘制十分的灵活多变.

绘图函数的工作方式与本文前面描述的工作方式大为不同,不能把绘图函

数的结果赋给一个对象8,其结果将直接输出到一个“绘图设备”上. 绘图设备

是一个绘图的窗口或是一个文件.

在R中有两种绘图函数:

1) 高级绘图函数(high-level plotting functions)创建一个新的图形

2) 低级绘图函数(low-level plotting functions)在现存的图形上添加元素.

另外绘图参数(graphical parameters)提供了丰富的绘图选项,可以使用缺省值

或者用函数par( )修改. 更高级的图形可使用grid 和lattice 绘图包实现, 具

体可查看其中的说明文档. Paul Murrell(2006)系统地介绍了R中作图方法

和例子.

2.6.1 绘图函数

表2.3概括了R中的高级绘图函数.

图 2.3 高级绘图函数

函数名 功能

plot(x) 以x的元素值为纵坐标、以序号为横坐标绘图

plot(x, y) x(在x-轴上)与y(在y-轴上)的二元作图

sunflowerplot(x, y) 同上, 但是以相似坐标的点作为花朵,其花瓣数目为点的个数

pie(x) 饼图

boxplot(x) 盒形图(“box-and-whiskers”)

stripchart(x) 把x的值画在一条线段上,样本量较小时可作为盒形图的替代

coplot(x~y | z) 关于z的每个数值(或数值区间)绘制x与y的二元图

8有一些值得注意的例外: hist( )和barplot( )仍然把生成的数据结果作为列表或矩阵.

2.6 R 的图形功能 59

interaction.plot (f1, f2, y) 如果f1和f2是因子,作y的均值图,以f1的不同值作为x轴,而f2的不

同值对应不同曲线;可以用选项fun指定y的其他的统计量(缺省计算

均值,fun=mean)

matplot(x,y) 二元图,其中x的第一列对应y的第一列,x的第二列对应y的第二列,

依次类推.

dotchart(x) 如果x是数据框,作Cleveland点图(逐行逐列累加图)

fourfoldplot(x) 用四个四分之一圆显示2times2列联表情况(x必须是dim=c(2, 2,

k)的数组,或者是dim=c(2, 2)的矩阵,如果k 1)

assocplot(x) Cohen–Friendly图,显示在二维列联表中行、列变量偏离独立性的

程度

mosaicplot(x) 列联表的对数线性回归残差的马赛克图

pairs(x) 如果x是矩阵或是数据框,作x的各列之间的二元图

plot.ts(x) 如果x是类”ts”的对象,作x的时间序列曲线,x可以是多元的,但是

序列必须有相同的频率和时间

ts.plot(x) 同上,但如果x是多元的,序列可有不同的时间但须有相同的频率

hist(x) x的频率直方图

barplot(x) x的值的条形图

qqnorm(x) 正态分位数-分位数图

qqplot(x, y) y对x的分位数-分位数图

contour(x, y, z) 等高线图(画曲线时用内插补充空白的值),x和y必须为向量,z必须为

矩阵,使得dim(z)=c(length(x), length(y)) (x和y可以省略)

filled.contour (x, y, z) 同上,等高线之间的区域是彩色的,并且绘制彩色对应的值的图例

image(x, y, z) 同上,但是实际数据大小用不同色彩表示

persp(x, y, z) 同上,但为透视图

stars(x) 如果x是矩阵或者数据框,用星形和线段画出

symbols(x, y, …) 在由x和y给定坐标画符号(圆,正方形,长方形,星,温度计式或者盒

形图),符号的类型、大小、颜色等由另外的变量指定

termplot(mod.obj) 回归模型(mod.obj)的(偏)影响图

60 第二章 R的基本原理与核心

R的绘图函数的部分选项是一样的. 下面列出主要的共同选项及其缺省值:

选项 功能

add=FALSE 如果是TRUE,叠加图形到前一个图上(如果有的话)

axes=TRUE 如果是FALSE,不绘制轴与边框

type=”p” 指定图形的类型,”p”: 点,”l”: 线,”b”: 点连线,”o”: 同

上,但是线在点上,”h”: 垂直线,”s”: 阶梯式,垂直线顶端

显示数据,”S”: 同上,但是在垂直线底端显示数据

xlim=, ylim= 指定轴的上下限,例如xlim=c(1, 10)或者xlim=range(x)

xlab=, ylab= 坐标轴的标签,必须是字符型值

main= 主标题,必须是字符型值

sub= 副标题(用小字体)

2.6.2 低级绘图命令

R的低级作图命令作用于现存的图形上的, 下表给出了一些主要的:

函数名 功能

points(x, y) 添加点(可以使用选项type=)

lines(x, y) 同上,但是添加线

text(x, y, labels,

…)

在(x,y)处 添 加 用labels指 定 的 文 字; 典 型 的 用 法 是: plot(x, y,

type=”n”); text(x, y, names)

mtext(text, side=3,

line=0, …)

在边空添加用text指定的文字,用side指定添加到哪一边(参照下面的axis(

));line指定添加的文字距离绘图区域的行数

segments(x0, y0, x1,

y1)

从(x0,y0)各点到(x1,y1)各点画线段

2.6 R 的图形功能 61

arrows(x0, y0,

x1, y1, angle= 30,

code=2)

同上, 但加画箭头. 如果code=2, 则在各(x0,y0)处画箭头; 如果code=1, 则在

各(x1,y1)处画箭头; 如果code=3, 则在两端都画箭头angle控制箭头轴到箭头

边的角度.

abline(a,b) 绘制斜率为b和截距为a的直线

abline(h=y) 在纵坐标y处画水平线

abline(v=x) 在横坐标x处画垂直线

abline(lm.obj) 画由lm.obj确定的回归线

rect(x1, y1, x2, y2) 绘制长方形,(x1, y1)为左下角,(x2,y2)为右上角

polygon(x, y) 绘制连接各x,y坐标确定的点的多边形

legend(x, y, legend) 在点(x,y)处添加图例,说明内容由legend给定

title( ) 添加标题,也可添加一个副标题

axis(side, vect) 画坐标轴. side=1时画在下边; side=2时画在左边; side=3时画在上边;

side=4时画在右边. 可选参数at指定画刻度线的位置坐标

box( ) 在当前的图上加上边框

rug(x) 在x-轴上用短线画出x数据的位置

locator(n, type=”n”,

…)

在用户用鼠标在图上点击n次后返回n次点击的坐标(x, y);并可以在点击处绘

制符号(type=”p”时)或连线(type=”l”时),缺省情况下不画符号或连线

注意: 用

> text(x, y,expres\-sion(…))

可以在一个图形上加上数学公式,函数expression把自变量转换为数学公式.

例如,

> text(x, y, expression(p==over(1,1+e^-(beta*x+alpha))))

在图中相应坐标点px, yq处显示下面的方程:

p

1

1  epβx αq

.

62 第二章 R的基本原理与核心

为了能在表达式中代入某个变量的值,我们可以使用函数substitute(

)和as.expression( ). 例如,为了代入R2的值(之前计算并储存在对

象Rsquared中)

> text(x, y, as.expression(substitute(R^2==r, list(r=Rsquared))))

在图中相应坐标点px, yq处显示:

R2 0.9856298.

如果只显示3位小数,上述命令修改为:

> text(x, y, as.expression(substitute(R^2==r,

list(r=round(Rsquared, 3)))))

它将显示:

R2 0.986.

最后,用斜体字显示R2,命令为

> text(x, y, as.expression(substitute(italic(R)^2==r,

list(r=round(Rsquared, 3)))))

得到

R2 0.986.

2.6.3 绘图参数

除了低级作图命令之外,图形的显示也可以用绘图参数来改良. 绘图参数

可以作为图形函数的选项(但不是所有参数都可以这样用),也可以用函数par(

)来永久地改变绘图参数,也就是说后来的图形都将按照函数par( )指定的参

数来绘制. 例如,下面的命令:

> par(bg=”yellow”)

将导致后来的图形都以黄色的背景来绘制. 有73个绘图参数,其中一些有非常

相似的功能. 这些参数详细的列表可以通过help(par)获得. 下面的表格只列

举了最常用的参数.

2.6 R 的图形功能 63

参数 功能

adj 控制关于文字的对齐方式: 0是左对齐,0.5是居中对齐,1是右对齐,值¡ 1时对齐位置在文本右

边的地方,取负值时对齐位置在文本左边的地方;如果给出两个值(例如c(0, 0)),第二个只控

制关于文字基线的垂直调整

bg 指定背景色(例如bg=”red”, bg=”blue”; 用colors( )可以显示657种可用的颜色名)

bty 控制图形边框形状,可用的值为: “o”, “l”, “7”, “c”, “u” 和”]” (边框和字符的外表相像);如

果bty=”n”则不绘制边框

cex 控制缺省状态下符号和文字大小的值;另外,cex.axis控制坐标轴刻度数字大小, cex.lab控制

坐标轴标签文字大小, cex.main控制标题文字大小, cex.sub控制副标题文字大小

col 控制符号的颜色;和cex类似,还可用:col.axis, col.lab, col.main, col.sub

font 控制文字字体的整数(1: 正常,2: 斜体,3: 粗体,4: 粗斜体);和cex类似,还可用: font.axis,

font.lab, font.main, font.sub

las 控制坐标轴刻度数字标记方向的整数(0: 平行于轴,1: 横排,2: 垂直于轴,3: 竖排)

lty 控制连线的线型,可以是整数(1: 实线,2: 虚线,3: 点线,4: 点虚线,5: 长虚线,6: 双虚线),

或者是不超过8个字符的字符串(字符为从”0″到”9″之间的数字) 交替地指定线和空白的长度,

单位为磅(points)或象素,例如lty=”44″和lty=2效果相同

lwd 控制连线宽度的数字

mar 控制图形边空的有4个值的向量c(bottom, left, top, right), 缺省值为c(5.1, 4.1, 4.1,

2.1)

mfcol c(nr,nc)的向量,分割绘图窗口为nr行nc列的矩阵布局,按列次序使用各子窗口

mfrow 同上,但是按行次序使用各子窗口

pch 控制符号的类型,可以是1到25的整数,也可以是””里的单个字符(见图 2.4)

ps 控制文字大小的整数,单位为磅(points)

pty 指定绘图区域类型的字符,”s”: 正方形,”m”:最大利用

tck 指定轴上刻度长度的值,单位是百分比,以图形宽、高中最小一个作为基数;如果tck=1则绘

制grid

tcl 同上,但以文本行高度为基数(缺省下tcl=-0.5)

xaxt 如果xaxt=”n”则设置x-轴但不显示(有助于和axis(side=1, …)联合使用)

yaxt 如果yaxt=”n”则设置y-轴但不显示(有助于和axis(side=2, …)联合使用)

64 第二章 R的基本原理与核心

* ? X a

1 2 3 4 5 6 7 8 9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 “*” “?” “.” “X” “a”

图 2.4 R (pch=1:25)的绘图符号. 用选项col=”blue”, bg=”yellow”来产生

如上的颜色,其中背景色选项只对符号21–25有作用. 可以使用任意字符作为

绘点符号(pch=”*”, “?”, “.”, . . . ).

2.6.4 一个实例

这一小节我们仍以R软件的内嵌数据Puromycin来说明R软件中基本的会

图方法. Puromycin的结构如下:

> dim(Puromycin)

[1] 23 3

> head(Puromycin)

conc rate state

1 0.02 76 treated

2 0.02 47 treated

3 0.06 97 treated

4 0.06 107 treated

5 0.11 123 treated

6 0.11 139 treated

2.6 R 的图形功能 65

简单的散点图(scatterplot)

对于状态(state)为treated, 画出rate关于cone的散点图, 见图2.5:

> PuroA <- subset(Puromycin, state == “treated”)

> plot(rate ~ conc, data = PuroA)

0.0 0.2 0.4 0.6 0.8 1.0

50

10

0

15

0

20

0

conc

ra

te

图 2.5 简单的散点图

0.0 0.2 0.4 0.6 0.8 1.0

50

10

0

15

0

20

0

conc

ra

te

图 2.6 使用彩色符号散点图

指明所用的数据集

有三种方法指明函数plot( )使用的数据集:

1) plot( )函数中使用data选项;

2) 在with( )中使用plot( );

> with(PuroA, plot(conc, rate))

3) 使用$ 直接指向数据与变量

> plot(PuroA$rate, PuroA$conc)

美化图形

1) R提供了25种不同的符号和8种不同的颜色,浏览它们的命令是:

66 第二章 R的基本原理与核心

> u <- 1:25

> plot(u ~ 1, pch = u, col = u, cex = 3)

2) 选择合适的符号及其大小与颜色. 例如图2.6是由图2.5选用绿色(选项

为col=4或col=”blue”) 小三角形(选项为pch=2或pch=”T”)得到的, 大小

为cex=2.5倍缺省值, 其命令为:

> plot(rate ~ conc, data = PuroA, pch = 2,

col = 4, cex = 2.5)

3) 坐标轴与标题设定. 命令

> plot(rate ~ conc, data = PuroA, pch = 2, col = 4,

cex = 2.5, xlim = c(0, 1.2), ylim = c(40, 210),

ylab = “Concentration”,

xlab = “Rate”, cex.lab = 2)

> title(main = “Puromycin”, cex.main = 3)

得到图2.7, 它做的工作有:

ˆ 限定X轴范围为0 到1.2, Y轴范围为40 到210

ˆ X轴标为“Rate”, Y轴标为“Concentration”

ˆ 规定坐标轴标签大小(cex.lab=1.2)

ˆ 增加图题

主图添线

1) 连接数据点. 命令

> library(doBy) # 需要先安装

> PuroA.mean <- summaryBy(rate ~ conc, data = PuroA,

FUN = mean)

> plot(rate ~ conc, data = PuroA, pch = 16, col = 4,

cex = 1.5)

> points(mean.rate ~ conc, data = PuroA.mean, col = “cyan”,

lwd = 10, pch = “x”)

> lines(mean.rate ~ conc, data = PuroA.mean, col = “blue”)

2.6 R 的图形功能 67

0.0 0.2 0.4 0.6 0.8 1.0 1.2

50

10

0

15

0

20

0

Rate

C

on

ce

nt

ra

tio

n

Puromycin

图 2.7 设定坐标轴与标题

0.0 0.2 0.4 0.6 0.8 1.0

50

10

0

15

0

20

0

conc

ra

te

x

x

x

x

x

x

图 2.8 散点联线

得到图2.8, 它做的工作有:

ˆ 使用doBy包的summaryBy( )计算每一浓度(concentration)处的平均



ˆ 在每一浓度的平均值处作点

ˆ 用直线连接这些点

2) 添加局部多项式拟合线. locfit( )由局部多项式包locfit提供(需要安

装). 其参数nn为光滑化参数, 用于指明曲线的光滑程度; 参数deg指明所

使用的局部光滑的多项式的次数. 下面的命令给出了二条光滑曲线(见

图2.9):

plot(rate ~ conc, data = PuroA)

smooth1 <- with(PuroA, lowess(rate ~ conc, f = 0.9))

smooth2 <- with(PuroA, lowess(rate ~ conc, f = 0.3))

lines(smooth1, col = “red”)

lines(smooth2, col = “blue”)

3) 添加多项式拟合线. 下面的命令给出了一次、二次和三次多项式拟合(见

图2.10):

> m1 <- lm(rate ~ conc, data = PuroA)

> m2 <- lm(rate ~ conc + I(conc^2), data = PuroA)

68 第二章 R的基本原理与核心

0.0 0.2 0.4 0.6 0.8 1.0

50

10

0

15

0

20

0

conc

ra

te

图 2.9 添加二条光滑线

0.0 0.2 0.4 0.6 0.8 1.0

50

10

0

15

0

20

0

conc

ra

te

图 2.10 添加三条拟合线

> m3 <- lm(rate ~ conc + I(conc^2) + I(conc^3),

data = PuroA)

> lines(fitted(m1) ~ conc, data = PuroA, col = “red”)

> lines(fitted(m2) ~ conc, data = PuroA, col = “blue”)

> lines(fitted(m3) ~ conc, data = PuroA, col = “cyan”)

4) 添加参考线. 函数abline( )可用于产生

ˆ 回归直线: abline(lm(…))

ˆ 直线: abline(a,b)

ˆ 垂直线abline(v=a)

ˆ 水平线: abline(h=b)

命令

> plot(rate ~ conc, data = PuroA)

> abline(lm(rate ~ conc, data = PuroA))

> abline(a = 100, b = 105, col = “blue”)

> abline(h = 200, col = “red”)

> abline(v = 0.6, col = “green”)

产生图2.11.

2.6 R 的图形功能 69

0.0 0.2 0.4 0.6 0.8 1.0

50

10

0

15

0

20

0

conc

ra

te

图 2.11 添加参考线

0.0 0.2 0.4 0.6 0.8 1.0

50

10

0

15

0

20

0

conc

ra

te

图 2.12 二个图形的叠加

图形的叠加

1) 两个散点图的叠加. 下面的命令将Puromycin中变量rate与conc之间的关

系按state的两个值分别画出散点图. 对于“trreated”使用符号1和颜色1,

对于“untreated”使用符号2和颜色2(见图2.12), 命令为:

> mysymb <- c(1, 2)[Puromycin$state]

> plot(rate ~ conc, data = Puromycin, col = mysymb,

pch = mysymb)

再对每一state在散点图上添加局部多项式光滑线, 产生图2.13, 命令为:

> PuroB <- subset(Puromycin, state == “untreated”)

> smoothA <- locfit(rate ~ lp(conc, nn = 1, deg = 1),

data = PuroA)

> smoothB <- locfit(rate ~ lp(conc, nn = 1, deg = 1),

data = PuroB)

> plot(rate ~ conc, data = Puromycin, col = mysymb,

pch = mysymb)

> lines(smoothA, lty = 1)

> lines(smoothB, lty = 3)

2) 添加图例(legend). 图2.14是在图2.13的基础上在px, yq p0.6, 100q添加

了图例, 其命令为:

70 第二章 R的基本原理与核心

> plot(rate ~ conc, data = Puromycin,

col = c(1, 2)[state], pch = c(1, 2)[state])

> legend(x = 0.6, y = 100,

legend = c(“treated”, “untreated”),

col = c(1, 2), pch = c(1, 2), lty = c(1, 3))

注: 使用locator(1)代替legend( )中的位置选项x=, y=可通过鼠标找

到合适的位置放置图例.

0.0 0.2 0.4 0.6 0.8 1.0

50

10

0

15

0

20

0

conc

ra

te

图 2.13 添加光滑线的图形叠加

0.0 0.2 0.4 0.6 0.8 1.0

50

10

0

15

0

20

0

conc

ra

te

treated

untreated

图 2.14 添加图例的图形叠加

作并列图

使用函数par( )可以完成在同一个窗口中画多个图形, 其格式

为par(mfrow = c(m, n)), 它表示将当前的窗口分割为m n个窗口. 例

如, 要在同一个窗口中作出state的两个值对应的两个散点图(见图2.15), 命令

如下:

> windows(width = 7, height = 3.5)

> par(mfrow = c(1, 2))

> plot(rate ~ conc, data = PuroA)

> title(“state=treated”)

> plot(rate ~ conc, data = PuroB)

> title(“state=untreated”)

2.6 R 的图形功能 71

0.0 0.2 0.4 0.6 0.8 1.0

50

10

0

15

0

20

0

conc

ra

te

state=treated

0.0 0.2 0.4 0.6 0.8 1.0

60

10

0

14

0

conc

ra

te

state=untreated

图 2.15 同一窗口的二个并列散点图.

注意:

ˆ 要返回通常的区域中作图,可通过命令dev.off( )先将原来的图形关闭,

也可直接关闭图形窗口.

ˆ 命令par(mfrow = c(m, n))将作图区域等分为m n(横向m行, 纵

向n列)个窗口, 这也可以用命令layout(matrix(1:m*n, m, n))来实现,

但后者可以将作图区域划分为不等大小的窗口. 我们来看一下layout(

)函数中的一个例子. 命令:

>#– Create a scatterplot with marginal histograms —

> x <- pmin(3, pmax(-3, stats::rnorm(50)))

> y <- pmin(3, pmax(-3, stats::rnorm(50)))

> xhist <- hist(x, breaks=seq(-3,3,0.5), plot=FALSE)

> yhist <- hist(y, breaks=seq(-3,3,0.5), plot=FALSE)

> top <- max(c(xhist$counts, yhist$counts))

> xrange <- c(-3,3); yrange <- c(-3,3)

> layout(matrix(c(2,0,1,3), 2, 2, byrow=TRUE),

c(3,1), c(1,3), TRUE)

> layout.show(3) # 给出作图窗口及编号

>

> par(mar=c(3,3,1,1)) # 设定边界空行数

72 第二章 R的基本原理与核心

> plot(x, y, xlim=xrange, ylim=yrange, xlab=””, ylab=””)

> par(mar=c(0,3,1,1))

> barplot(xhist$counts, axes=FALSE, ylim=c(0, top), space=0)

> par(mar=c(3,0,1,1))

> barplot(yhist$counts, axes=FALSE, xlim=c(0, top),

space=0, horiz=TRUE)

对于向量(数据)x和y同时作出它们的散点图和边际直方图. 程序的前一

部分给出三个作图区域(见图2.16), 窗口1为3cm3cm, 用于作出x与y的

散点图; 窗口2为3cm1cm, 用于作出x的散点图; 窗口3为1cm3cm, 用

于作出y的散点图, 最后得到图2.17.

1

2

3

图 2.16 作图区域分割及位置

−3 −2 −1 0 1 2 3



3



2



1

0

1

2

3

图 2.17 二维散点图及边际直方图

§2.7 R 编程

至此, 我们已经对R软件的功能有了全面的了解. 一些统计分析都是

在R的对话窗口(R Console)中进行的. 但对于复杂的统计分析显然是不方便

的. 下面从统计语言和编程角度来说明R编程中的一些基本技术.

2.7 R 编程 73

2.7.1 循环和向量化

相比下拉菜单式的程序9, R的一个优势在于它可以把一系列连续的操作

简单的程序化. 这一点和所有其他计算机编程语言是一致的, 但R有一些特性

使得非专业人士也可以很简单地编写程序.

控制结构

和其他编程语言一样, R有一些和C语言(或其它语言)类似的控制结构.

1) 条件语句: 条件语句常用于避免除零或负数的对数等数学问题. 它有二种

形式:

ˆ if (条件) 表达式1 else 表达式2

ˆ ifelse(条件, yes, no)

例如:

> if (x >= 0) sqrt(x) else NA

> ifelse(x >= 0, sqrt(x), NA)

2) 循环(loops). 它也有二种形式:

ˆ 使用函数for( ): for (变量 in 向量) 表达式

ˆ 使用函数while( ): while(条件) 表达式

两者略有区别:若知道终止条件则用for( ); 若无法知道运行次数, 则

用while( ). 例如, 比较下面的两种方法:

> for (i in 1:5) print (1:i)

> i=1

> while(i <= 5) {

print(1:i)

i = i+1

}

通常将一组命令放在大括号内. 又如, 假定我们有一个向量x, 对于向量x 中值

为b的元素, 把0赋给另外一个等长度的向量y的对应元素, 否则赋1, 程序如下

9我们将在附录中介绍一个R下开发的菜单式软件: R Commander.

74 第二章 R的基本原理与核心

> y <- numeric(length(x)) #创建一个x等长的向量y

> for (i in 1:length(x)){

if (x[i] == b)

y[i] <- 0

else

y[i] <- 1

}

向量化(vectorization)

在R在, 很多情况下循环和控制结构可以通过向量化避免(简化): 向量化

使得循环隐含在表达式中. 比如, 条件语句也可以用逻辑索引向量代替. 前面

的例子可以改写为:

> y[x == b] <- 0

> y[x != b] <- 1

在实际编程时, 如果能将一组命令向量化,则应尽量避免循环,原因在于

ˆ 代码更简洁

ˆ C是一种编译语言,其效率是很高的;R则是一种解释语言. 在计算时,

通常C要比R快100倍.

ˆ 在R中使用向量化,R会立即调用C进行运算,因而大大提高计算的效率.

2.7.2 用R写程序

一般情况下, 一个R程序以ASCII 格式保存,扩展名为‘.R’. 如果一个工作

要重复好多次, 用R程序是一个不错的选择. 考虑这样的例子: 我们想对三种不

同的鸟绘制一样的图, 而且数据在三个不同的文件中. 我们将一步一步的演示

二种不同的方式, 看R是如何完成这个简单的过程.

首先, 我们凭直觉连续键入一系列命令, 而且预先分割图形界面:

> layout(matrix(1:3, 3, 1)) #分割图形界面

> data <- read.table(“Swal.dat”) #读入数据

> plot(data$V1, data$V2, type=”l”)

2.7 R 编程 75

> title(“swallow”) #增加标题

> data <- read.table(“Wren.dat”)

> plot(data$V1, data$V2, type=”l”)

> title(“wren”)

> data <- read.table(“Dunn.dat”)

> plot(data$V1, data$V2, type=”l”)

> title(“dunnock”)

我们看到一些命令多次执行, 因此它们可以放在一起,在执行的时候仅仅

修改一些参数. 这里的策略是把参数放到一个字符型的向量中去, 然后用下标

去访问这些不同的值. 修改后的程序如下:

> layout(matrix(1:3, 3, 1)) # 分割图形界面

> species <- c(“swallow”, “wren”, “dunnock”)

> file <- c(“Swal.dat” , “Wren.dat”, “Dunn.dat”)

> for(i in 1:length(species)) {

data <- read.table(file[i]) # 读入数据

plot(data$V1, data$V2, type=”l”)

title(species[i]) # 增加标题

}

如果程序保存在文件Mybirds.R 中, 可以通过键入如下命令执行:

> source(“Mybirds.R”)

注意: 和所有以文件作为输入对象的函数一样, 如果该文件不在当前工作目录

下面, 用户需要提供该文件的绝对路径.

2.7.3 编写你自己的函数

大多数R的工作是通过函数来实现的, 而且这些函数的输入参数都放在一

个括弧里面. 用户可以编写自己的函数, 并且这些函数和R里面的其它函数有

一样的特性.

函数是一系列语句的组合, 形式为:

76 第二章 R的基本原理与核心

变量名 = function( 变量列表 ) 函数体

函数定义的基本形式

编写自己的函数可以让你有效、灵活、合理地使用R. 我们再次使用前面

读数据并且画图的例子. 如果我们想在其它情况下进行这样的操作, 写一个函

数是一个不错的想法:

> myfun <- function(S, F) {

data <- read.table(F)

plot(data$V1, data$V2, type=”l”)

title(S)

}

执行时, 这个函数必须载入内存. 一旦函数载入后, 我们就可以键入一条命令

以读入数据和画出我们想要的图. 因此, 现在我们的程序有第三个实现的版本

了:

> layout(matrix(1:3, 3, 1))

> myfun(“swallow”, “Swal.dat”)

> myfun(“wren”, “Wrenn.dat”)

> myfun(“dunnock”, “Dunn.dat”)

我们还可以用sapply( )10 实现程序的第四个版本:

> layout(matrix(1:3, 3, 1))

> species <- c(“swallow”, “wren”, “dunnock”)

> file <- c(“Swal.dat” , “Wren.dat”, “Dunn.dat”)

> sapply(species, myfun, file)

函数的调用与其参数的位置与名字(又称为标签参数)有关,假定函

数foo1( )有三个参数, 其定义为:

> foo1 <- function(arg1, arg2, arg3) {…}

10对于向量或列表X和作用它们的函数“Fun”, 在R中可使用命令lapply(X, Fun ) 和sapply(X, Fun

), 两者的差异仅在于: 前者返回与X长度相等的一个列表, 后者返回一个向量或矩阵. 两者本质上相同, 后者

只是为前者的友好形式.

2.7 R 编程 77

则计算函数foo(x,y,z)在pu, v, wq处的值, 可以采用下面两种方法中的一种:

> foo1(u, v, w) # 按位置调用函数

> foo1(arg3=w, arg2=v, arg1=u) # 按名字调用

R函数的另外一个特性是函数调用可以采用定义时的默认设置. 例如函

数foo2( )也有三个参数, 其定义为:

> foo2 <- function(arg1, arg2 = 5, arg3 = FALSE) {…}

则下面的三种命令等价

> foo2(x)}

> foo2(x, 5, FALSE)

> foo2(x, arg3 = FALSE)

使用一个函数的默认设置非常有用, 特别在使用标签参数的时候, 例如

> foo2(x, arg3 = TRUE)

仅仅改变一个默认设置.

在结束本章前, 我们来看另外一个例子. 尽管这个例子不是纯粹的统计学

例子, 但是它很好地展示了R语言的灵活性. 假定我们想研究一个非线性模型

的行为: 这个模型(Ricker 模型)的定义如下:

Nt 1 Nt exp

[

r

(

1

Nt

K

)]

这个模型广泛地用于种群动态变化的研究, 特别是鱼类的种群变化. 我们想用

一个函数去模拟这个模型关于增长率r和初始群体大小N0的变化情况(承载能

力K常常设定为1且以这个值作为默认值); 结果将以种群大小相对时间的图表

示. 我们还将设定一个可选项允许用户只显示最后若干步中种群大小(默认所

有结果都会被绘制出来). 下面的函数就是Ricker模型的数值模拟.

> ricker <- function(nzero, r, K=1, time=100, from=0, to=time) {

N <- numeric(time+1)

N[1] <- nzero

78 第二章 R的基本原理与核心

for (i in 1:time) N[i+1] <- N[i]*exp(r*(1 – N[i]/K))

Time <- 0:time

plot(Time, N, type=”l”, xlim=c(from, to))

}

你可以试一试下面的代码:

> layout(matrix(1:3, 3, 1))

> ricker(0.1, 1); title(“r = 1”)

> ricker(0.1, 2); title(“r = 2”)

> ricker(0.1, 3); title(“r = 3”)

2.7.4 养成良好的编程习惯

为了他人,更为你本人! 你的程序应该具有

ˆ 可读性(readability)

ˆ 可理解性(understandability)

为此你应该养成四个良好的习惯:

习惯之一: 采用结构化、模块化编程;

习惯之二: 增加注释(Commenting), R中使用# 作为注释语句的开始;

习惯之三: 使用意义明确的名字给变量命名, 切忌使用人或宠物的名字;

习惯之四: 行前自动缩进(Indentation), 在此推荐使用软件WinEdt, 现

在有针对R的平台: RWinEdt. 见附录A的具体介绍.

2.7 R 编程 79

第二章习题

2.1 用函数rep( )构造一个向量x, 它由3个3, 4个2, 5个1构成.

2.2 由1, 2, . . . , 16构成二个方阵, 其中矩阵A按列输入, 矩阵B按行输入, 并

计算:

1) C A B;

2) D AB;

3) E peijqnn;

4) 去除A和第3行, B的第3列, 重新计算上面的矩阵E.

2.3 函数solve( )有二个作用: solve(A,b)可用于求解线性方程组Ax b,

solve(A)可用于求矩阵A的逆. 设

A

1 2 34 5 6

7 8 10

 , b

11

1



用二种方法编程求方程组Ax b的解.

2.4 设x与y表示n维的向量, 则x%*%y或crossprod(x,y)用于求它们的内积,

即t(x)%*%y; 而x%o%y或outer(x, y)用于求它们的外积(叉积), 即x%*%t(y),

其中(t( ))表示矩阵或向量的转置. 设x p1, 2, 3, 4, 5q, y p2, 4, 6, 8, 10q. 用三

种不同的方法求它们的内积与外积.

2.5 编写一个用二分法求非线性方程根的函数, 并求方程

x3 x 1 0

在区间r1, 2s内的根, 精度要求² 105.

2.6 自己编写一个函数, 求数据y py1, y2, . . . , ynq的均值、标准差、偏度与

峰度.

2.7 有10名学生的身高与体重数据如表2.7所示.

1) 用数据框的形式读入数据;

2) 将数据表2.7写成一个纯文本的文件, 并用函数read.table( )读取该文

件中的数据;

80 第二章 R的基本原理与核心

表 2.7 学生身高与体重数据

序号 性别 年龄 身高/cm 体重/kg

1 F 14 156 42.3

2 F 16 158 45.0

3 F 15 161 48.5

4 F 17 156 51.5

5 F 15 153 44.6

6 M 14 162 48.8

7 M 16 157 46.7

8 M 14 159 49.9

9 M 15 163 50.2

10 M 16 165 53.7

3) 用函数write.csv( )写成一个能用Excel打开的文件, 测试是否成功.

第三章 概率与分布

本章概要

♦ 随机抽样的实现

♦ 常用的概率分布及其数字特征

♦ R中内嵌的分布

§3.1 随机抽样

众所周知, 概率论早期研究的是游戏或赌博等随机现象中有关的概率问

题. 这些现象在R中可以通过函数sample( )来实现.

1) 等可能的不放回的随机抽样:

> sample(x, n)

其中x为要抽取的向量, n为样本容量. 例如从52张扑克牌中抽取4张对应

的R命令为:

> sample(1:52, 4)

[1] 3 16 17 15

2) 等可能的有放回的随机抽样:

> sample(x, n, replace=TRUE)

其 中 选 项replace=TRUE表 示 抽 样 是 有 放 回 的, 此 选 项 省 略 或

为replace=FALSE表示抽样是不放回的. 例如抛一枚均匀的硬币10次

在R中可表示为:

82 第三章 概率与分布

> sample(c(“H”, “T”), 10, replace=T)

[1] “H” “T” “T” “H” “H” “T” “T” “H” “H” “H”

掷一棵骰子10次可表示为:

> sample(1:6, 10, replace=T)

[1] 4 3 4 5 4 6 2 6 3 4

3) 不等可能的随机抽样:

> sample(x, n, replace=TRUE, prob=y)

其中选项prob=y用于指定x中元素出现的概率, 向量y与x等长度. 例如一

名外科医生做手术成功的概率为0.90, 那么他做10次手术在R中可以表示

为:

> sample(c(“成功”, “失败”), 10, replace=T, prob=c(0.9,0.1))

若以1表示成功, 0表示失败, 则上述命令可变为:

> sample(c(1,0), 10, replace=T, prob=c(0.9,0.1))

[1] 1 1 1 0 1 1 1 1 1 1

§3.2 排列组合与概率的计算

我们仍以扑克牌为例加以说明.

例 3.2.1 从一副完全打乱的52张扑克中取4张, 求以下事件的概率:

1) 抽取的4张依次为红心A,方块A,黑桃A和梅花A的概率;

2) 抽取的4张为红心A,方块A,黑桃A和梅花A的概率.



1) 抽取的4张是有次序的, 因此使用排列来求解. 所求的事件(记为A)概率为

P pAq

1

52 51 50 49

.

在R中计算得到

3.3 概率分布 83

> 1/prod(52:49)

[1] 1.539077e-07

2) 抽取的4张是没有次序的, 因此使用组合数来求解. 所求的事件(记为B)概

率为

P pBq

1(

52

4

) ,

其中(n

m

)

n!

m!pnmq!

. 在R中计算得到

> 1/choose(52,4)

[1] 3.693785e-06

¥

§3.3 概率分布

概率论与数理统计是研究随机现象统计规律性的一门学科. 对于一个

具体的问题,通常归结为对一个随机变量或随机向量(X)的取值及其取值

概率的研究, 即对于事件P pX ¤ xq的研究. 这就是随机变量的累积分布函

数(CDF), 记为F pxq. 因此随机变量统计规律可以用累积分布函数来刻划. 对

于离散型随机变量(取值为有限或可列无限), 其统计规律通常转化为对分布

律fpxq P pX xq的研究, 它与分布函数的关系为F pxq ∑t¤x P pX tq;

而对于连续型随机变量(取值充满整个区间), 其统计规律通常转化为对概率密

度函数fpxq的研究, 它与分布函数的关系为F pxq ∫ x

8

fpxqdx. 下面我们分

离散与连续二种情况分别介绍它们的分布律或密度函数, 在此我们不加区分地

使用fpxq.

3.3.1 离散分布的分布律

1) 贝努里分布: binomp1, pq

ˆ 意义:一试验中有二个事件:成功(记为1)与失败(记为0), 出现的概率

是分别为p和1 p, 则一次试验(称为贝努里试验)成功的次数服从一

个参数为p的贝努里分布.

ˆ 分布律:

fpx|pq pxp1 pq1x, x 0, 1 p0   p   1q.

84 第三章 概率与分布

ˆ 数字特征: EpXq p,VarpXq pp1 pq.

2) 二项分布: binompn, pq

ˆ 意义: 贝努里试验独立地重复n次, 则试验成功的次数服从一个参数

为(n, p)的二项分布.

ˆ 分布律:

fpx|n, pq

(

n

p

)

pxp1 pqnx, x 0, 1, , n.

ˆ 数字特征: EpXq np,VarpXq npp1 pq.

ˆ 特例: n 1时分布为贝努里分布.

3) 多项分布: multinompn, p1, , pkq

ˆ 意义: 一试验中有k个事件Ai, i 1, 2, , k, 且P pAiq pi

(0   pi   1,

∑k

i1 pi 1). 将此试验独立地重复n次, 则事

件A1, A2, , Ak出现的次数服从一个参数为pn,pq的多项分布, 其

中p pp1, p2, , pkq.

ˆ 分布律:

fpx1, , xk|n,pq

n!

x1! xk!

px11 p

x2

2 p

xk

k , 0 ¤ xi ¤ n,

k∑

i1

xi n.

ˆ 数字特征: EpXiq np,VarpXiq npp1 pq,CovpXi, Xjq

npipj .

ˆ 特例: k 2时分布为二项分布.

4) 负二项分布: nbinompk, pq

ˆ 意义: 贝努里试验独立地重复进行, 一直到出现k次成功时停止试验,

则试验失败的次数服从一个参数为(k, p)的负二项分布.

ˆ 分布律:

fpx|k, pq

Γpk   xq

ΓpkqΓpxq

pkp1 pqx, x 0, 1, .

ˆ 数字特征: EpXq kp1pq

p

,VarpXq kp1pq

p2

.

3.3 概率分布 85

ˆ 特例: k 1时的分布为几何分布.

5) 几何分布: geomppq

ˆ 意义: 努里试验独立地重复进行, 一直到出现有成功出现时停止试

验, 则试验失败的次数服从一个参数为p的几何分布.

ˆ 分布律:

fpx|pq pp1 pqx, x 0, 1, 2, .

ˆ 数字特征: EpXq p1pq

p

,VarpXq p1pq

p2

.

6) 超几何分布: hyperpN,M,nq

ˆ 意义: 从装有N个白球和M个黑球的罐子中不放回地取出k(¤ N  

M)个球, 则其中的白球数服从超几何分布.

ˆ 分布律:

fpx|N,M, kq

(

N

x

)(

M

kx

)(

N M

k

) , x 0, 1, 2, min{N, k}.

ˆ 数字特征: EpXq pkNq

N M

,VarpXq

(

N Mk

N M1

)

kN

N M

(

1 N

N M

)

.

7) 泊松分布: poispλq

ˆ 意义: 单位时间, 单位长度, 单位面积, 单位体积中发生某一事件的

次数常可以用泊松(Poisson)分布来刻划, 例如某段高速公路上一年

内的交通事故数和某办公室一天中收到的电话数可以认为近似服从

泊松分布.

ˆ 分布律:

fpx|λq

λx

x!

eλ, x 1, 2, .

ˆ 数字特征: EpXq λ,VarpXq λ.

3.3.2 连续分布的密度函数

1) 贝塔分布: Betapa, bq

ˆ 意义: 在贝叶斯分析中, 贝塔分布常作为二项分布参数的共轭先验分

布.

86 第三章 概率与分布

ˆ 密度函数:

fpx|a, bq

1

Bpa, bq

xa1p1 xqb1, 0   x   1 pa, b ¡ 0q.

ˆ 数字特征: EpXq a

a b

,VarpXq ab

pa bq2pa b 1q

.

ˆ 特例: a 1, b 1时的分布为r0, 1s上的均匀分布.

2) 均匀分布: unifpa, bq

ˆ 意义: 区间ra, bs上随机投点对应的坐标服从ra, bs上的均匀分布.

ˆ 密度函数:

fpx|a, bq

1

b a

, a ¤ x ¤ b.

ˆ 数字特征: EpXq a b

2

,VarpXq b

2

a2

12

.

3) 柯西分布: cauchypa, bq

ˆ 意义: 柯西分布(又称为Lorentz分布)用于描述共振行为. 以一随机的

角度投向X轴的水平距离服从柯西分布.

ˆ 密度函数:

fpx|a, bq

1

pib

[



(

xa

b

)] , 0   x   1 pa, b ¡ 0q.

ˆ 数字特征: 均值与方差不存在.

4) 威布尔分布: weibullpa, bq

ˆ 意义: 最为常用的寿命分布, 用来刻划滚珠轴承、电子元器件等产品

的寿命.

ˆ 密度函数:

fpx|a, bq abxb1eax

b

, x ¡ 0 pa, b ¡ 0q.

ˆ 数字特征: EpXq Γ

(

1  1

b

)

a1{b

,

VarpXq

Γ

(

1  2

b

)

a2{b

{

Γ

(

1  1

b

)}2

a2{b

.

ˆ 特例: b 1时的分布为指数分布.

3.3 概率分布 87

5) 指数分布: exppλq

ˆ 意义: 泊松过程的等待时间服从指数分布. 形状参数b

1的Weibull分布为指数分布.

ˆ 密度函数:

fpx|λq λeλx, x ¡ 0 pλ ¡ 0q.

ˆ 数字特征: EpXq 1

λ

,VarpXq 1

λ2

.

6) 瑞利(Rayleigh)分布: raylpbq

ˆ 意义: 瑞利(Rayleigh)分布为Weibull分布的又一个特例: 它是参数

为p1{p2b2q, 2q的Weibull分布.

ˆ 密度函数:

fpx|bq

x

b2

exp

(

x2

2b2

)

.

ˆ 数字特征: EpXq √pi

2

b,VarpXq 4pi

2

b2.

7) 正态分布/高斯分布: normpµ, σ2q

ˆ 意义: 高斯分布是概率论与数理统计中最重要的一个分布. 中心极限

定理表明, 一个变量如果是由大量微小的、独立的随机因素的叠加

结果, 那么这个变量一定是正态变量. 因此许多随机变量可以用高

斯分布表述或近似描述..

ˆ 密度函数:

fpx|µ, σq 1√

2piσ

e

pxµq2

2σ2 , 8   x   8,

p8   µ   8, σ ¡ 0q

ˆ 数字特征: EpXq µ,VarpXq σ2.

8) 对数正态分布: lnormpµ, σ2q

ˆ 意义: lnpXq服从参数为pµ, σ2q的正态分布,则X服从参数为pµ, σ2q的

对数正态分布.

ˆ 密度函数:

fpx|µ, σq 1√

2piσx

e

plnpxqµq2

2σ2 , x ¡ 0

p8   µ   8, σ ¡ 0q

88 第三章 概率与分布

ˆ 数字特征: EpXq exp{µ  1

2

σ2

}

,VarpXq eσ

2

peσ

2

1qe2µ.

9) 逆正态分布: inormpµ, λq

ˆ 意义: 正态随机变量的倒数服从的分布.

ˆ 密度函数:

fpx|µ, λq



λ

2pix3

exp

λpx µq

2µ2x

p8   µ   8, λ ¡ 0q

ˆ 数字特征: EpXq µ,VarpXq µ3

λ

.

10) 珈玛分布: gammapa, bq

ˆ 意义: k个相互独立的参数为1{b的指数分布的和服从参数为pk, bq的

珈玛分布.

ˆ 密度函数:

fpx|a, bq

1

Γpaqba

xa1ex{b, x ¡ 0 pa ¡ 0, b ¡ 0q.

ˆ 数字特征: EpXq ab,VarpXq ab2.

ˆ 特例: a 1时的分布为指数分布; a n

2

, b 2时的分布为卡方分布.

11) 逆珈玛分布: igammapa, bq

ˆ 意义: 珈玛分布随机变量的倒数服从逆珈玛分布.

ˆ 密度函数:

fpx|a, bq

1

Γpaqba

xpa 1qe1{pbxq, x ¡ 0 pa ¡ 0, b ¡ 0q.

ˆ 数字特征: EpXq 1

bpa1q

pa ¡ 1q,VarpXq 1

b2pa1q2pa2q

pa ¡ 2q.

ˆ a n

2

, b 2的分布为逆卡方分布.

12) 卡方(χ2)分布: chisqpnq

ˆ 意义: n个独立正态随机变量的平方和服从自由度为n的卡方分布.

ˆ 密度函数:

fpx|nq

xn{21ex{2

2n{2Γpn{2q

, x ¡ 0.

3.3 概率分布 89

ˆ 数字特征: EpXq n,VarpXq 2n pn ¡ 2q.

13) 逆卡方分布: ichisqpnq

ˆ 意义: 卡方分布随机变量的倒数服从逆卡方分布.

ˆ 密度函数:

fpx|nq

xpn{2 1qe1{2x

2n{2Γpn{2q

, x ¡ 0.

ˆ 数字特征: EpXq 1

n2

pn ¡ 2q,VarpXq 2

pn2q2pn4q

pn ¡ 4q.

14) t分布: tpnq

ˆ 意义: 随机变量X与Y独立, X服从标准正态分布, Y服从自由度

为n卡方分布, 则T X√

Y {n

服从自由度为n的t分布.

ˆ 密度函数:

fpx|nq

(

1  x

2

n

)

pn 1q{2



nB

(

1

2

, n

2

) .

ˆ 数字特征: EpXq 0,VarpXq n

n2

pn ¡ 2q.

15) F分布: fpn,mq

ˆ 意义: 随机变量X与Y独立, X服从自由度为n卡方分布, Y服从自由

度为m卡方分布, 则T X{n

Y {n

服从自由度为pn,mq的F分布.

ˆ 密度函数:

fpx|n,mq

(

n

m

)n{2

xn2{2

B

(

n

2

, m

2

) (1  n

m

x

)

pn mq{2

.

ˆ 数字特征: EpXq m

m2

pm ¡ 2q,VarpXq 2m

2

pn m2q

npm 2q

pn ¡

2q.

16) logistic分布: logispa, bq

ˆ 意义: 生态学中的增长模型常用logistic分布来刻划, 它也常用

于logistic回归中.

ˆ 密度函数:

fpx|a, bq

[

1  epxaq{b

]

1

.

90 第三章 概率与分布

ˆ 数字特征: EpXq a,VarpXq pi2

3

b2.

17) Dirichlet分布: Dirichletpα1, , αkq

ˆ 意义: 在贝叶斯分析中可作为多项分布参数的共轭分布. Dirichlet分

布的密度函数表示在已知k个竞争事件已经出现了αi 1次条件下,

它们出现的概率为xi, i 1, 2, , k的信念.

ˆ 密度函数:

fpx1, , xk|αq

1

Bpαq

k∏

i1

xαi1i , xi ¡ 0,

k∑

i1

xi 1 pαi ¡ 0q,

其中Bpαq

∏k

i1 Γpαiq

Γp

∑k

i1 αiq

.

ˆ 数字特征: EpXq αi

α0

, VarpXq

αipα0 αiq

α20pα0   1q

,

CovpXi, Xjq

α0αi

α20pα0   1q

, 其中α0

∑k

i1 αi.

ˆ k 2为贝塔分布.

18) Pareto分布: pdpa, bq

ˆ 意义: 财富的分配的规则(称为Pareto规则)是大部分的财富(80%)被

少数人(20%)的人拥有, 这可以较好地用Pareto分布来刻划.

ˆ 密度函数:

fpx|a, bq

b

a

(a

x

)b 1

, x ¡ a pb ¡ 0q.

ˆ 数字特征: EpXq a b

b1

pb ¡ 1q,VarpXq a

2 b

pb1q2pb2q

pb ¡ 2q.

19) 非中心分布. 与前面卡方分布、t分布和F分布相对应还有三个非中心的

分布:

ˆ 非中心的卡方分布 — chisqpn, µq: n个独立正态随机变

量Npµi, σ2q, i 1, 2, , n的平方和服从自由度为n、非中心参

数为µ µ21 µ22 ,µ2n

σ2

的卡方分布.

ˆ 非中心的t分布 — tpn, µq: 随机变量X与Y独立, X服从标准正态

分布, Y服从自由度为n卡方分布, 则T X µ√

Y {n

服从自由度为n、非

中心参数为µ的t分布.

3.4 R中内嵌的分布 91

ˆ 非中心的F分布 — Fpn,m, µq: 随机变量X与Y独立, X服从自由度

为n、非中心参数为µ的非中心卡方分布, Y服从自由度为m卡方分

布, 则T X{n

Y {n

服从自由度为pn,mq、非中心参数为µ的F分布.

若无特别申明, 通常所说的卡方分布、t分布和F分布都是中心的卡方分

布、t分布和F分布.

§3.4 R中内嵌的分布

R提供了四类有关统计分布的函数: 密度函数、(累积)分布函数、分位数

函数、随机数函数. 它们都与分布的英文名称(或者其缩写)相对应. 下表按英

文字母顺序列出R中提供了18个分布的英文名称、R中的名称和函数中的选项:

分布名称 R名称 选项

beta beta shape1, shape2

binomial binom size, prob

Cauchy cauchy location=0, scale=1

chi-sqaured (χ2) chisq df, ncp

exponential exp rate

Fisher–Snedecor (F ) f df1, df2, ncp

gamma gamma shape, scale=1

geometric geom prob

hypergeometric hyper m, n, k

lognormal lnorm meanlog=0, sdlog=1

logistic logis location=0, scale=1

multinomial multinom size, prob

normal norm mean=0, sd=1

negative binomial nbinom size, prob

Poisson pois lambda

Student’s (t) t df

uniform unif min=0, max=1

Weibull weibull shape, scale=1

Wilcoxon’s statistics wilcox m, n

signrank n

92 第三章 概率与分布

对于所给的分布名称,加前缀“d”(代表密度函数, density)就得到R的密度

函数(对于离散分布, 指分布律); 加前缀“p”(代表分布函数或概率, CDF)就

得到R的分布函数; 加前缀“q”(代表分位函数, quantile)就得到R的分位数

函数; 加前缀“r”(代表随机模拟, random)就得到R的随机数发生函数. 而

且这四类函数的第一个参数是有规律的: 形为dfunc的函数为x,pfunc的函数

为q,qfunc的函数为p,rfunc的函数为n (但rhyper和rwilcox是特例,他们的第

一个参数为nn). 目前为止,非中心参数(non-centrality parameter)仅对CDF和

少数其它几个函数有效,细节请参考在线帮助.

若R中分布的函数名为func, 则四类函数的调用格式为:

1) 概率密度函数: dfunc(x, p1, p2, …), x为数值向量;

2) (累积)分布函数: pfunc(q, p1, p2, …), q为数值向量;

3) 分位数函数: qfunc(p, p1, p2, …), p为由概率构成的向量;

4) 随机数函数: rfunc(n, p1, p2, …), n为生成数据的个数

其中p1, p2, . . .是分布的参数值. 上面的表格中有具体数值的是这些参数在空

缺时对应的缺省值.

所有pfunc和qfunc的函数都具有逻辑参数lower.tail和log.p,而所有

的dfunc函数都有参数log. 此外,对于来自正态分布,具有学生化样本区间的

分布还有ptukey和qtukey这样的函数.

最后通过二个例子简单说明一下它们的作用:

1) 查找分布的分位数, 用于计算假设检验中分布的临界值或置信区间的置

信限. 例如,显著性水平为5%的正态分布的双侧临界值是:

> qnorm(0.025)

[1] -1.959964

> qnorm(0.975)

[1] 1.959964

2) 计算假设检验的p值. 比如自由度df 1的χ2 3.84时的χ2检验的p值为

> 1 – pchisq(3.84, 1)

[1] 0.05004352

3.5 应用: 中心极限定理 93

而容量为14的双边t检验的p值为

> 2*pt(-2.43, df = 13)

[1] 0.0303309

这些函数将在以后的章节中发挥极大的作用.

§3.5 应用: 中心极限定理

3.5.1 中心极限定理

正态分布在概率统计中起着至关重要的作用,其中的一个原因是当独立观

察(试验)的样本容量n足够大时, 那么所观察的随机变量X1, X2, , Xn的和近

似服从正态分布(假定EpXiq µ, V arpXiq σ2存在), 即∑n

i1Xi nµ√



.

Np0, 1q pnÑ8q



X

∑n

i1Xi

n

.

Npµ,

σ2

n

q pnÑ8q

3.5.2 渐近正态性的图形检验

下面的函数给出了从图形上考查一个由(R中已经提供的或自己定义的)已

知分布产生的容量为n的样本(可以为向量)经标准化变换后趋于标准正态分布

的近似程度.

limite.central <- function (r=runif, distpar=c(0,1), m=.5,

limite.central( )的定义

s=1/sqrt(12),

n=c(1,3,10,30), N=1000) {

for (i in n) {

if (length(distpar)==2){

x <- matrix(r(i*N, distpar[1],distpar[2]),nc=i)

}

else {

x <- matrix(r(i*N, distpar), nc=i)

}

94 第三章 概率与分布

x <- (apply(x, 1, sum) – i*m )/(sqrt(i)*s)

hist(x,col=’light blue’,probability=T,main=paste(“n=”,i),

ylim=c(0,max(.4, density(x)$y)))

lines(density(x), col=’red’, lwd=3)

curve(dnorm(x), col=’blue’, lwd=3, lty=3, add=T)

if( N>100 ) {

rug(sample(x,100))

}

else {

rug(x)

}

}

}

此函数的缺省值为:

1) 分布为r0, 1s上的均匀分布, 否则用选项r=声明;

2) 分布的均值为0.5, 否则用选项m=声明;

3) 分布的标准差为1{√12, 否则用选项s=声明;

4) 样本容量有4个:1,3,10 ,30, 否则用选项n=声明;

5) 重复次数为1000, 否则用选项N=声明.

对于程序作一简单说明:

1) hist(x, …)用于作出x的直方图;

2) lines(density(x),…)计算x的核密度估计值(窗宽为bw=1), 并连接

成线;

3) curve(dnorm(x), …)计算x处标准正态分布的密度函数值, 并连接成

线;

4) rug(x)在横坐标处用小的竖线画出x出现的位置.

有关的其它参数, 参见第二章的说明或通过R关于这些函数的帮助. 如果将程

序中的x改为样本的标准化值,就可检验一般样本的渐近正态性.

3.5 应用: 中心极限定理 95

3.5.3 举例

二项分布: bp10, 0.1q

op <- par(mfrow=c(2,2))

limite.central(rbinom, distpar=c(10 ,0.1), m=1, s=0.9)

par(op)

得到图3.1.

n= 1

x

D

en

si

ty

0 2 4 6

0.

0

0.

2

0.

4

0.

6

n= 3

x

D

en

si

ty

−2 −1 0 1 2 3 4

0.

0

0.

1

0.

2

0.

3

0.

4

n= 10

x

D

en

si

ty

−3 −2 −1 0 1 2 3 4

0.

0

0.

1

0.

2

0.

3

0.

4

n= 30

x

D

en

si

ty

−3 −2 −1 0 1 2 3 4

0.

0

0.

1

0.

2

0.

3

0.

4

图 3.1 二项分布的渐近正态性.

泊松分布: piosp1q

op <- par(mfrow=c(2,2))

limite.central(rpois, distpar=1, m=1, s=1, n=c(3, 10, 30 ,50))

par(op)

得到图3.2.

96 第三章 概率与分布

n= 3

x

D

en

si

ty

−2 −1 0 1 2 3 4

0.

0

0.

1

0.

2

0.

3

0.

4

0.

5

n= 10

x

D

en

si

ty

−3 −2 −1 0 1 2 3 4

0.

0

0.

1

0.

2

0.

3

0.

4

n= 30

x

D

en

si

ty

−3 −2 −1 0 1 2 3

0.

0

0.

1

0.

2

0.

3

0.

4

n= 50

x

D

en

si

ty

−3 −2 −1 0 1 2 3 4

0.

0

0.

1

0.

2

0.

3

0.

4

图 3.2 泊松分布的渐近正态性.

均匀分布: unifp0, 1q

op <- par(mfrow=c(2,2))

limite.central( )

par(op)

得到图3.3.

指数分布: expp1q

op <- par(mfrow=c(2,2))

limite.central(rexp, distpar=1, m=1, s=1)

par(op)

得到图3.4.

正态混合分布: 1

2

normp3, 1q   1

2

normp3, 1q

op <- par(mfrow=c(2,2))

3.5 应用: 中心极限定理 97

n= 1

x

D

en

si

ty

−2 −1 0 1 2

0.

0

0.

1

0.

2

0.

3

0.

4

n= 3

x

D

en

si

ty

−3 −2 −1 0 1 2 3

0.

0

0.

1

0.

2

0.

3

0.

4

n= 10

x

D

en

si

ty

−3 −2 −1 0 1 2 3

0.

0

0.

1

0.

2

0.

3

0.

4

n= 30

x

D

en

si

ty

−3 −2 −1 0 1 2 3

0.

0

0.

1

0.

2

0.

3

0.

4

图 3.3 均匀分布的渐近正态性.

n= 1

x

D

en

si

ty

−2 −1 0 1 2

0.

0

0.

1

0.

2

0.

3

0.

4

n= 3

x

D

en

si

ty

−3 −2 −1 0 1 2 3

0.

0

0.

1

0.

2

0.

3

0.

4

n= 10

x

D

en

si

ty

−3 −2 −1 0 1 2 3

0.

0

0.

1

0.

2

0.

3

0.

4

n= 30

x

D

en

si

ty

−3 −2 −1 0 1 2 3

0.

0

0.

1

0.

2

0.

3

0.

4

图 3.4 指数分布的渐近正态性.

98 第三章 概率与分布

mixn <- function (n, a=-1, b=1)

{rnorm(n, sample(c(a,b),n,replace=T))}

limite.central(r=mixn, distpar=c(-3,3),

m=0, s=sqrt(10), n=c(1,2,3,10))

par(op)

得到图3.5.

n= 1

x

D

en

si

ty

−2 −1 0 1 2

0.

0

0.

1

0.

2

0.

3

0.

4

0.

5

n= 2

x

D

en

si

ty

−2 −1 0 1 2

0.

0

0.

1

0.

2

0.

3

0.

4

0.

5

n= 3

x

D

en

si

ty

−2 −1 0 1 2

0.

0

0.

1

0.

2

0.

3

0.

4

n= 10

x

D

en

si

ty

−4 −3 −2 −1 0 1 2 3

0.

0

0.

1

0.

2

0.

3

0.

4

图 3.5 混合正态分布的渐近正态性.

3.5 应用: 中心极限定理 99

第三章习题

3.1 从1到100个自然数中随机不放回地抽取5个数, 并求它们的和.

3.2 从一副扑克牌(52张)中随机抽5张,求下列概率

ˆ 抽到的是10、J、Q、K、A;

ˆ 抽到的是同花顺.

3.3 从正态分布Np100, 100q中随机产生1000个随机数,

ˆ 作出这1000个正态随机数的直方图;

ˆ 从这1000个随机数中随机有放回地抽取500个, 作出其直方图;

ˆ 比较它们的样本均值与样本方差.

3.4 模拟随机游动: 从标准正态分布中产生1000个随机数, 并用函

数cumsum( )作出累积和, 最后使用命令plot( ) 作出随机游动的示意图.

3.5 从标准正态分布中随机产生100个随机数, 由此数据求总体均值

的95%置信区间, 并与理论值进行比较.

3.6 用本章给出的函数limite.central( ), 从图形上验证当样本容量足够

大时, 从贝塔分布Betap1{2, 1{2q 抽取的样本的样本均值近似服从正态分布.

3.7 除本章给出的标准分布外, 非标准的随机变量X的抽样可通过格式点离

散化方法实现. 设ppxq为X的密度函数, 其抽样步骤如下

1) 在X的取值范围内等间隔地选取N个点x1, x2, . . . , xN , 例如取N 1000;

2) 计算ppxiq, i 1, 2, . . . , N ;

3) 正则化ppxiq, i 1, 2, . . . , N , 使其成为离散的分布律, 即每一项除

以∑Ni1 ppxiq;

4) 按离散分布抽样方法使用命令sample( )从xi, i 1, 2, . . . , N有放回地抽

取n个数, 例如n 1000.

试以标准正态分布为例来说明. 为与R中的正态抽样函数rnorm( )进行比较,

将作图区域分为左右两部分,

100 第三章 概率与分布

ˆ 使用rnorm( )抽取n 1000个标准正态随机数, 并在左侧区域画出相应

的直方图和核密度估计曲线;

ˆ 用格子点离散化抽样方法完成抽样, 并在右侧区域画出相应的直方图和

核密度估计曲线, 离散化所用的N 1000, n 1000, 取点范围为r4, 4s.

第四章 探索性数据分析

本章概要

♦ 探索性数据分析的思想

♦ 分布的图形概括

♦ 单组数据的描述性统计分析

♦ 多组数据的描述性统计分析

♦ 分组数据的描述性统计分析

♦ 分类数据的描述性统计分析

数据的统计分析分为描述性统计分析和统计推断两部分, 前者又称为探索

性统计分析, 它是通过绘制统计图形、编制统计表格、计算统计量等方法来探

索数据的主要分布特征, 揭示其中存在的规律. 探索性数据分析是进行后期统

计推断的基础. 本章针对不同类型的数据通过R介绍探索性数据分析技巧,分

别从图形和描述性统计量(包括样本的均值、标准差、分位数、偏度、峰度等统

计量)刻划样本的特征.

§4.1 常用分布的概率函数图

了解总体分布的形态,有助于把握样本的基本特征. 我们先通过具体的例

子考查第三章中提到的一些常用分布的概率函数(对于离散分布指分布律,对

于连续分布指其密度函数)的图形.

二项分布

> n<-20

102 第四章 探索性数据分析

> p<-0.2

> k<-seq(0,n)

> plot(k,dbinom(k,n,p),type=’h’,

main=’Binomial distribution, n=20, p=0.2′,xlab=’k’)

得到图4.1.

0 5 10 15 20

0.

00

0.

05

0.

10

0.

15

0.

20

Binomial distribution, n=20, p=0.2

k

db

in

om

(k

, n

, p

)

图 4.1 二项分布的分布律图

0 5 10 15 20

0.

00

0.

05

0.

10

0.

15

0.

20

Poisson distribution, lambda=5.5

k

dp

oi

s(

k, 

lam

bd

a)

图 4.2 泊松分布的分布律图

泊松分布

> lambda<-4.0

> k<-seq(0,20)

> plot(k,dpois(k,lambda),type=’h’,

main=’Poisson distribution, lambda=5.5′,xlab=’k’)

得到图4.2.

几何分布

> p<-0.5

> k<-seq(0,10)

> plot(k,dgeom(k,p),type=’h’,

main=’Geometric distribution, p=0.5′,xlab=’k’)

4.1 常用分布的概率函数图 103

得到图4.3.

0 2 4 6 8 10

0.

0

0.

1

0.

2

0.

3

0.

4

0.

5

Geometric distribution, p=0.5

k

dg

eo

m

(k

, p

)

图 4.3 几何分布的分布律图

0 2 4 6 8 10

0.

00

0.

05

0.

10

0.

15

0.

20

0.

25

0.

30

Hypereometric distribution, N=30, M=10, n=10

k

dh

yp

er

(k

, N

, M

, n

)

图 4.4 超几何分布分布的分布律图

超几何分布

> N<-30

> M<-10

> n<-10

> k<-seq(0,10)

> plot(k,dhyper(k,N,M,n),type=’h’,

main=’Hypergeometric distribution,

N=30, M=10, n=10′,xlab=’k’)

得到图4.4.

负二项分布

> n<-10

> p<-0.5

> k<-seq(0,40)

> plot(k, dnbinom(k,n,p), type=’h’,

main=’Negative Binomial distribution,

n=10, p=0.5′,xlab=’k’)

104 第四章 探索性数据分析

得到图4.5.

0 10 20 30 40

0.

00

0.

02

0.

04

0.

06

0.

08

Negative Binomial distribution, n=10, p=0.5

k

dn

bi

no

m

(k

, n

, p

)

图 4.5 负二项分布的分布律图

−4 −2 0 2 4

0.

0

0.

2

0.

4

0.

6

0.

8

x

dn

or

m

(x

, 0

, 1

)

Gaussian distributions

sigma=1

sigma=2

sigma=1/2

图 4.6 正态分布的密度函数图

正态分布

> curve(dnorm(x,0,1), xlim=c(-5,5), ylim=c(0,.8),

col=’red’, lwd=2, lty=3)

> curve(dnorm(x,0,2), add=T, col=’blue’, lwd=2, lty=2)

> curve(dnorm(x,0,1/2), add=T, lwd=2, lty=1)

> title(main=”Gaussian distributions”)

> legend(par(‘usr’)[2], par(‘usr’)[4], xjust=1,

c(‘sigma=1’, ‘sigma=2’, ‘sigma=1/2’),

lwd=c(2,2,2),

lty=c(3,2,1),

col=c(‘red’, ‘blue’, par(“fg”)))

得到图4.6.

t分布

> curve(dt(x,1), xlim=c(-3,3), ylim=c(0,.4),

col=’red’, lwd=2, lty=1)

> curve(dt(x,2), add=T, col=’green’, lwd=2, lty=2)

4.1 常用分布的概率函数图 105

> curve(dt(x,10), add=T, col=’orange’, lwd=2, lty=3)

> curve(dnorm(x), add=T, lwd=3, lty=4)

> title(main=”Student T distributions”)

> legend(par(‘usr’)[2], par(‘usr’)[4], xjust=1,

c(‘df=1’, ‘df=2’, ‘df=10’, ‘Gaussian distribution’),

lwd=c(2,2,2,2),

lty=c(1,2,3,4),

col=c(‘red’, ‘blue’, ‘green’, par(“fg”)))

得到图4.7.

−3 −2 −1 0 1 2 3

0.

0

0.

1

0.

2

0.

3

0.

4

x

dt

(x

, 1

)

Student T distributions

df=1

df=2

df=10

Gaussian distribution

图 4.7 t分布的密度函数图

0 2 4 6 8 10

0.

0

0.

1

0.

2

0.

3

0.

4

0.

5

0.

6

x

dc

hi

sq

(x

, 1

)

df=1

df=2

df=3

df=5

Chi square Distributions

图 4.8 χ2分布的密度函数图

χ2分布

> curve(dchisq(x,1), xlim=c(0,10), ylim=c(0,.6), col=’red’, lwd=2)

> curve(dchisq(x,2), add=T, col=’green’, lwd=2)

> curve(dchisq(x,3), add=T, col=’blue’, lwd=2)

> curve(dchisq(x,5), add=T, col=’orange’, lwd=2)

> abline(h=0,lty=3)

> abline(v=0,lty=3)

> title(main=’Chi square Distributions’)

> legend(par(‘usr’)[2], par(‘usr’)[4], xjust=1,

c(‘df=1’, ‘df=2’, ‘df=3’, ‘df=5’),

106 第四章 探索性数据分析

lwd=3, lty=1,

col=c(‘red’, ‘green’, ‘blue’, ‘orange’)

)

得到图4.8.

F分布

> curve(df(x,1,1), xlim=c(0,2), ylim=c(0,.8), lty=1)

> curve(df(x,3,1), add=T, lwd=2,lty=2)

> curve(df(x,6,1), add=T, lwd=2, lty=3)

> curve(df(x,3,3), add=T, col=’red’, lwd=3,lty=4)

> curve(df(x,3,6), add=T, col=’blue’, lwd=3,lty=5)

> title(main=”Fisher’s F”)

> legend(par(‘usr’)[2], par(‘usr’)[4], xjust=1,

c(‘df=(1,1)’, ‘df=(3,1)’, ‘df=(6,1)’,

‘df=(3,3)’, ‘df=(3,6)’),

lwd=c(1,2,2,3,3),

lty=c(1,2,3,4,5),

col=c(par(“fg”), par(“fg”), par(“fg”), ‘red’, ‘blue’))

得到图4.9.

0.0 0.5 1.0 1.5 2.0

0.

0

0.

2

0.

4

0.

6

0.

8

x

df

(x

, 1

, 1

)

Fisher’s F

df=(1,1)

df=(3,1)

df=(6,1)

df=(3,3)

df=(3,6)

图 4.9 F分布的密度函数图

0 1 2 3 4 5

0.

0

0.

2

0.

4

0.

6

0.

8

1.

0

x

dl

no

rm

(x

)

Log normal  distributions

sigma=1

sigma=2

sigma=1/2

图 4.10 对数正态分布的密度函数图

4.1 常用分布的概率函数图 107

对数正态分布

> curve(dlnorm(x), xlim=c(-.2,5), ylim=c(0,1.0), lwd=2)

> curve(dlnorm(x,0,3/2), add=T, col=’blue’, lwd=2, lty=2)

> curve(dlnorm(x,0,1/2), add=T, col=’orange’, lwd=2, lty=3)

> title(main=”Log normal distributions”)

> legend(par(‘usr’)[2], par(‘usr’)[4], xjust=1,

c(‘sigma=1’, ‘sigma=2’, ‘sigma=1/2’),

lwd=c(2,2,2),

lty=c(1,2,3),

col=c(par(“fg”), ‘blue’, ‘orange’ ))

得到图4.10.

柯西分布

> curve(dcauchy(x),xlim=c(-5,5), ylim=c(0,.5), lwd=3)

> curve(dnorm(x), add=T, col=’red’, lty=2)

> legend(par(‘usr’)[2], par(‘usr’)[4], xjust=1,

c(‘Cauchy distribution’, ‘Gaussian distribution’),

lwd=c(3,1),

lty=c(1,2),

col=c(par(“fg”), ‘red’))

得到图4.11.

威布尔分布

> curve(dexp(x), xlim=c(0,3), ylim=c(0,2))

> curve(dweibull(x,1), lty=3, lwd=3, add=T)

> curve(dweibull(x,2), col=’red’, add=T)

> curve(dweibull(x,.8), col=’blue’, add=T)

> title(main=”Weibull Probability Distribution Function”)

> legend(par(‘usr’)[2], par(‘usr’)[4], xjust=1,

c(‘Exponential’, ‘Weibull, shape=1’,

‘Weibull, shape=2’, ‘Weibull, shape=.8’),

108 第四章 探索性数据分析

−4 −2 0 2 4

0.

0

0.

1

0.

2

0.

3

0.

4

0.

5

x

dc

au

ch

y(

x)

Cauchy  distribution

Cauchy distribution

Gaussian distribution

图 4.11 柯西分布的密度函数图

0.0 0.5 1.0 1.5 2.0 2.5 3.0

0.

0

0.

5

1.

0

1.

5

2.

0

x

de

xp

(x

)

Weibull Probability Distribution Function

Exponential

Weibull, shape=1

Weibull, shape=2

Weibull, shape=.8

图 4.12 威布尔分布的密度函数图

lwd=c(1,3,1,1),

lty=c(1,3,1,1),

col=c(par(“fg”), par(“fg”), ‘red’, ‘blue’))

得到图4.12.

珈码分布

> curve( dgamma(x,1,1), xlim=c(0,5), lwd=2, lty=1 )

> curve( dgamma(x,2,1), add=T, col=’red’, lwd=2, lty=2 )

> curve( dgamma(x,3,1), add=T, col=’green’, lwd=2, lty=3 )

> curve( dgamma(x,4,1), add=T, col=’blue’, lwd=2, lty=4 )

> curve( dgamma(x,5,1), add=T, col=’orange’, lwd=2, lty=5 )

> title(main=”Gamma distributions”)

> legend(par(‘usr’)[2], par(‘usr’)[4], xjust=1,

c(‘k=1 (Exponential distribution)’,

‘k=2’, ‘k=3’, ‘k=4’, ‘k=5’),

lwd=c(2,2,2,2,2),

lty=c(1,2,3,4,5),

col=c(par(‘fg’), ‘red’, ‘green’, ‘blue’, ‘orange’) )

得到图4.13.

4.1 常用分布的概率函数图 109

0 1 2 3 4 5

0.

0

0.

2

0.

4

0.

6

0.

8

1.

0

x

dg

am

m

a(

x, 

1,

 1

)

Gamma distributions

k=1 (Exponential)

k=2

k=3

k=4

k=5

图 4.13 珈码分布的密度函数图

0.0 0.2 0.4 0.6 0.8 1.0

0

1

2

3

4

x

db

et

a(

x, 

1,

 1

)

Beta distribution

(1,1)

(3,1)

(3,2)

(4,2)

(2,3)

(4,3)

图 4.14 贝塔分布的密度函数图

贝塔分布

> curve( dbeta(x,1,1), xlim=c(0,1), ylim=c(0,4) )

> curve( dbeta(x,3,1), add=T, col=’green’ )

> curve( dbeta(x,3,2), add=T, lty=2, lwd=2 )

> curve( dbeta(x,4,2), add=T, lty=2, lwd=2, col=’blue’ )

> curve( dbeta(x,2,3), add=T, lty=3, lwd=3, col=’red’ )

> curve( dbeta(x,4,3), add=T, lty=3, lwd=3, col=’orange’ )

> title(main=”Beta distributions”)

> legend(par(‘usr’)[1], par(‘usr’)[4], xjust=0,

c(‘(1,1)’, ‘(3,1)’, ‘(3,2)’,

‘(4,2)’, ‘(2,3)’, ‘(4,3)’ ),

lwd=c(1,1, 2,2, 3,3),

lty=c(1,1, 2,2, 3,3),

col=c(par(‘fg’), ‘green’, par(‘fg’),

‘blue’, ‘red’, ‘orange’ ))

得到图4.14.

110 第四章 探索性数据分析

§4.2 直方图与密度函数的估计

4.2.1 直方图

直方图是探索性数据分析的基本工具,它给出了数据的频率分布图形,在

组距相等场合下常用宽度相等的长条矩形表示,矩形的高低表示频率的大小.

在图形上,横坐标表示所关心变量的取值区间,纵坐标表示频率(或频数)的大

小, 这样就得到频数(或频数)直方图. 图形的形状与我们选择的各组区间端点

有关,故选择区间端点时我们要谨慎.

R中使用函数hist( )来画直方图,其常用的调用格式如下:

hist(x, breaks = “Sturges”, freq = NULL, probability = !freq,

hist( )的调用格式

col = NULL,

main = paste(“Histogram of” , xname),

xlim = range(breaks), ylim = NULL,

xlab = xname, ylab,

axes = TRUE, nclass = NULL)

说明:若选项breaks取向量,则用于指明直方图区间的分割位置; 若取正整数,

则用于指定直方图的小区间数. freq取T表示使用频数画直方图, 取F则使用频

率画直方图. probability与freq恰好相反. col用于指明小矩形的颜色. 其它

选项可参考hist( )的帮助说明. 后面我们还将给出hist( )的二种拓展.

4.2.2 核密度估计

样本的直方图粗略地描述了样本的分布, 我们还可以用函数density(

)得到样本的核密度估计值, 并用lines( )得到密度估计的曲线. density(

)常用的调用格式如下:

density(x, bw = “nrd0”,

density( )的调用格式

kernel = c(“gaussian”, “epanechnikov”, “rectangular”,

“triangular”, “biweight”, “cosine”, “optcosine”),

n = 512, from, to)

说明: 选项bw指定核密度估计的窗宽, 也用字符串表示窗宽选择规则, 具体可

参考函数bw.nrd( ). kernel为核密度估计所使用的光滑化函数, 缺省为正态

4.2 直方图与密度函数的估计 111

核函数. n给出等间隔的核密度估计点. from与to分别给出需要计算核密度估

计的左右端点. 其它选项可参考density( )的在线帮助1.

下面看两个模拟例子.

例 4.2.1 从二项分布binom(100,0.9)中抽取容量为N=100000的样本.

试作出它的直方图及核密度估计曲线.

> N <- 100000

> n <- 100

> p <- .9

> x <- rbinom(N,n,p)

> hist(x,

xlim=c(min(x),max(x)), probability=T,

nclass=max(x)-min(x)+1, col=’lightblue’,

main=’Binomial distribution, n=100, p=.5′)

> lines(density(x,bw=1), col=’red’, lwd=3)

得到图4.16.

Binomial distribution, n=100, p=.5

x

D

en

si

ty

75 80 85 90 95 100

0.

00

0.

02

0.

04

0.

06

0.

08

0.

10

0.

12

图 4.15 二项分布的样本的直方图

与核密度函数图

Negative binomial distribution, n=10, p=.25

x

D

en

si

ty

0 20 40 60 80

0.

00

0.

01

0.

02

0.

03

图 4.16 负二项分布的样本的直方

图与核密度函数图

例 4.2.2 从负二项分布nbinom(10,0.25)中抽取容量为N=100000的样

本. 试作出它的直方图及核密度估计曲线.

1样本的密度函数估计也可使用局部多项式估计程序包locfit中的density.lf( )函数实现.

112 第四章 探索性数据分析

> N <- 100000

> x <- rnbinom(N, 10, .25)

> hist(x,

xlim=c(min(x),max(x)), probability=T,

nclass=max(x)-min(x)+1, col=’lightblue’,

main=’Negative binomial distribution, n=10, p=.25′)

lines(density(x,bw=1), col=’red’, lwd=3)

得到图4.17.

§4.3 单组数据的描述性统计分析

4.3.1 单组数据的图形描述

单组数据的分布可以通过上面介绍的直方图以及茎叶图和框须图考查.

例 4.3.1 程序包DAAG中有内嵌数据集“possum”,它包括了从维多利

亚南部到皇后区的七个地区的104只负鼠(possum)的年龄、尾巴的长度、总长

度等9个特征值,我们仅考虑43只雌性负鼠的特征值,我们建立子集fpossum,

考查雌性负鼠(fpossum)的总长度的频率分布.

直方图

> library(DAAG)

> data(possum)

> fpossum <- possum[possum$sex==”f”,]

> par(mfrow=c(1,2))

> attach(fpossum)

> hist(totlngth,breaks=72.5+(0:5)*5,

ylim=c(0,22), xlab=”total length”,

main=”A:Breaks at 72.5,77.5⋯”)

> hist(totlngth,breaks=75+(0:5)*5,

ylim=c(0,22), xlab=”total length”,

main=”B:Breaks at 75,80⋯”)

得到图4.15. 两个图的唯一不同之处是选择的区间端点不同,我们可以看到左

4.3 单组数据的描述性统计分析 113

A:Breaks at 72.5,77.5…

total length

Fr

eq

ue

nc

y

75 80 85 90 95

0

5

10

15

20

B:Breaks at 75,80…

total length

Fr

eq

ue

nc

y

75 80 85 90 95 100

0

5

10

15

20

图 4.17 雌性负鼠的直方图.

边的图不对称,而右边显示该分布是对称的.

茎叶图

茎叶图也是考查数据分布的重要方法,我们仍然考虑上面的雌性负鼠的总

长度.

> stem(fpossum$totlngth)

得到

114 第四章 探索性数据分析

The decimal point is at the |

74 | 0

76 |

78 |

80 | 05

82 | 0500

84 | 05005

86 | 05505

88 | 0005500005555

90 | 5550055

92 | 000

94 | 05

96 | 5

说明: 左边茎是长度(厘米)的整数部分, 右边是小数点后边的部分, 由于数据

采用了近似, 所以右边只有0与5, 显然叶的部分是左边长度(厘米)整数部分的

频数. 图中有43个的数据,中位数是第22个. 可知从上至下第22个叶对应的茎

是88, 叶是5, 因此样本中位数应该是88.5. 茎叶图的外观很像横放的直方图,但

茎叶图中的叶增加了具体的数值,从而保留了数据更多的信息.

框须图

框须图, 或称为盒形图, 是五数(最小值、第三4分位数、中位数、第一4分

位数、最大值)的图形概括, 也是考查数据分析的一种有效的工具, 它可用来

对数据分布的形状进行大致的判断. 在R中使用函数boxplot( )作盒形图.

boxplot( )的调用格式如下:

boxplot(formula, data = NULL, …, subset, na.action = NULL)

boxplot( )的调用格式

说明: formula 是指明盒形图的作图规则(y grp,表示数值变量y根据因

子grp分类), data说明数据的来源.

> library(DAAG)

> data(possum)

> fpossum <- possum[possum$sex==”f”,]

> boxplot(fpossum$totlngth)

4.3 单组数据的描述性统计分析 115

得到图4.18. 箱子中的五根横线对应的坐标分别是最小值,第一4分位数, 中位

数, 第三4分位数和最大值.

75

80

85

90

95

图 4.18 雌性负鼠的框须图

−2 −1 0 1 2

75

80

85

90

95

Normality Check via QQ Plot

Theoretical Quantiles

Sa

m

pl



Qu

an

tile

s

图 4.19 雌性负鼠的QQ图

正态性检验

1) 使用QQ图

> qqnorm(fpossum$totlngth,

main=”Normality Check via QQ Plot”)

> qqline(fpossum$totlngth, col=’red’)

得到图4.19. 图4.19表明数据与正态性略有差异, 特别在图形的中部.

2) 与正态密度函数比较

> dens <- density(totlngth)

> xlim <- range(dens$x); ylim<-range(dens$y)

> par(mfrow=c(1,2))

> hist(totlngth,breaks=72.5+(0:5)*5,

xlim=xlim,ylim=ylim,

probability=T, xlab=”total length”,

main=”A:Breaks at 72.5,77.5…”)

> lines(dens,col=par(‘fg’),lty=2)

> m <- mean(totlngth)

116 第四章 探索性数据分析

> s <- sd(totlngth)

> curve( dnorm(x, m, s), col=’red’, add=T)

> hist(totlngth,breaks=75+(0:5)*5,

xlim=xlim,ylim=ylim,

probability=T, xlab=”total length”,

main=”B:Breaks at 75,80…”)

> lines(dens,col=par(‘fg’),lty=2)

> m <- mean(totlngth)

> s <- sd(totlngth)

> curve( dnorm(x, m, s), col=’red’, add=T)

得到图4.20. 图4.20表明数据totlngth与正态性也略有差异. 进一步需要

使用统计量进行正态性检验.

A:Breaks at 72.5,77.5…

total length

D

en

si

ty

70 75 80 85 90 95

0.

00

0.

02

0.

04

0.

06

0.

08

0.

10

B:Breaks at 75,80…

total length

D

en

si

ty

70 75 80 85 90 95

0.

00

0.

02

0.

04

0.

06

0.

08

0.

10

图 4.20 雌性负鼠的核密度与正态分布的比较.

3) 使用经验分布函数

> x <- sort(totlngth)

> n <- length(x)

> y <- (1:n)/n

4.3 单组数据的描述性统计分析 117

> m <- mean(totlngth)

> s <- sd(totlngth)

> plot(x,y, type=’s’, main=”empirical cdf of “)

> curve(pnorm(x,m,s),col=’red’, lwd=2, add=T)

得到图4.21. 结论与前面类似.

75 80 85 90 95

0.

0

0.

2

0.

4

0.

6

0.

8

1.

0

empirical cdf of 

x

y

图 4.21 雌性负鼠的经验分布.

4.3.2 单组数据的描述性统计

样本来自总体, 样本的观测值中含有总体各方面的信息, 但这些信息较为

分散, 有时显得杂乱无章. 为将这些分散在样本中的有关总体的信息集中起来

以反映总体的各种特征, 需要对样本进行加工得到统计量. 均值、标准差、五

数(最小值、第三4分位数、中位数、第一4分位数、最大值)是数据的主要的统

计量, 他们对数据的进一步分析很有帮助.

总体描述

在R中,函数summary( )可以计算出单组数据的均值和五数. 仍然用上一

节的例子,考虑雌性负鼠的总长度.

118 第四章 探索性数据分析

> summary(fpossum$totlngth)

得到

Min. 1st Qu. Median Mean 3rd Qu. Max.

75.00 85.25 88.50 87.91 90.50 96.50

如果只需要均值可以利用函数mean( )实现

> mean(fpossum$totlngth)

[1] 87.90698

五数及样本分位数概括

计算五数用函数fivenum( ). 若要得到分位数用函数quantile( ), 计算

中位数使用函数median( ), 最大值使用函数max( ), 最小值使用函数min( ).

我们在第二章中提过,计算更多概率值的样本分位数, 可使用选项probs. 以雌

性负鼠的总长度为例:

> fivenum(fpossum$totlngth)

[1] 75.00 85.25 88.50 90.50 96.50

> quantile(fpossum$totlngth)

0% 25% 50% 75% 100%

75.00 85.25 88.50 90.50 96.50

> quantile(fpossum$totlngth ,prob=c(0.25,0.5,0.75))

25% 50% 75%

85.25 88.50 90.50

> median(fpossum$totlngth)

[1] 88.5

> max(fpossum$totlngth)

[1] 96.5

> min(fpossum$totlngth)

[1] 75

离差的概括

样本的平均水平可以用上面介绍的平均值函数mean( )和中位数函

数median( )来计算. 样本的变异程度可以用极值(max( )-min( ))、四分位极

4.3 单组数据的描述性统计分析 119

值函数(IQR( ))、标准差函数(sd( ))、方差函数var( )和绝对离差函数(mad(

))来表示. 方差函数var( ) 也可用于计算两个向量协方差或一个矩阵的协方

差阵. 对于x px1, , xnq, sd( )的定义为

sdpxq

√∑n

i1pxi x¯q

n 1

.

mad( )在R中的定义为

1.4826*median(abs(x-median(x)))

其中系数1.4826约等于1/qnorm(3/4), 目的是为了使mad(x)作为方差的估计具

有一致性(在正态或大样本下). 仍以雌性负鼠的总长度为例:

> max(fpossum$totlngth)-min(fpossum$totlngth)

[1] 21.5

> IQR(fpossum$totlngth)

[1] 5.25

> sd(fpossum$totlngth)

[1] 4.182241

> sd(fpossum$totlngth)^2

[1] 17.49114

> var(fpossum$totlngth)

var(fpossum$totlngth)

> mad(fpossum$totlngth)

[1] 3.7065

样本偏度系数和峰度系数

设随机变量X的三阶矩存在,则称比值

β1

EpX EpXqq3

rEpX EpXq2s3{2

ν3

pν2q3{2

为X的偏度系数. β1 ¡ 0时分布为正偏(或右偏); β1 0时分布关于均值对称;

β1   0时分布为负偏(或左偏). 用样本的中心矩代替总体的中心矩就可得到样

本的偏度系数.

120 第四章 探索性数据分析

设随机变量X的四阶矩存在,则称比值

β2

EpX EpXqq4

rEpX EpXq2s2

3

ν4

pν2q2

3

为X的峰度系数. 峰度系数刻划的是分布的峰度, β2 ¡ 0时标准化后的分布形

状比高斯分布更尖峭,称为高峰度; β2 0时标准化后的分布形状与高斯分布相

当; β2   0时标准化后的分布形状比高斯分布更平坦,称为低峰度. 用样本的中

心矩代替总体的中心矩就可得到样本的偏度系数.

R的扩展统计程序包fBasics提供了函数skewness( )用来求样本的偏度,

函数kurtosis( )用来求样本的峰度. 对于雌性负鼠的总长度有

> library(fBasics)

> skewness(fpossum$totlngth)

[1] -0.54838

> kurtosis(fpossum$totlngth)

[1] 0.6170082

另外, fBasics程序包的函数basicStats( )提供了几乎上面所有的统计特征

量.

§4.4 多组数据的描述性统计分析

4.4.1 两组数据的图形概括

散点图

在两组数据的图形展示中, 散点图是简单而重要的工具, 因为它能清楚地

描述两组数据的关系. 下面我们来看一个例子.

例 4.4.1 在R的程序包DAAG中有数据集cars, 使用下边的命令得到数

据集.

> library(DAAG)

> data(cars)

> cars

speed dist

4.4 多组数据的描述性统计分析 121

1 4 2

2 4 10

3 7 4

… …

48 24 93

49 24 120

50 25 85

我们希望估计速度(speed)与终止距离(dist)之间的关系, 先考查它们之间

的散点图, 命令

> plot(cars$dist ~ cars$speed,

xlab = “Speed (mph)”,

ylab = “Stopping distance (ft)”)

> lines(lowess(cars$speed, cars$dist),lwd=2)

得到图4.22. 图4.22表明speed和dist基本呈现线性相依关系. 所以散点图在描

5 10 15 20 25

0

20

40

60

80

10

0

12

0

Speed (mph)

St

op

pi

ng

 d

ist

an

ce

 (ft

)

图 4.22 speed与dist的散点图.

述二维数据的关系方面很重要.

122 第四章 探索性数据分析

注意到我们用一条非线性的特殊曲线来拟和这种关系, 调用了函

数lowess( ). 在R中, 有两个函数可以实现这个功能, 一个是lowess( ),

另一个是loess( ), 前者只能适用于二维的情况, 而loess( )可以处理多维的

情况. lowess( )的具体的调用格式如下:

lowess(x, y = NULL, f = 2/3, iter = 3,

lowess( )的调用格式

delta = 0.01 *diff(range(xy$x[o])))

在散点图中加入拟和曲线对于我们认识总体的特征很有帮助.

进一步,通过函数rug( )可以在横轴和纵轴上标明数据的具体的位置.

> rug(side=2, jitter(cars$dist, 20))

> rug(side=1, jitter(cars$speed, 5))

得到图4.23.

5 10 15 20 25

0

20

40

60

80

10

0

12

0

Speed (mph)

St

op

pi

ng

 d

ist

an

ce

 (ft

)

图 4.23 带rug的散点图

5 10 15 20 25

0

20

40

60

80

100

120

cars data

St

op

pi

ng

 d

ist

an

ce

 (ft

)

Speed (mph)

图 4.24 加上箱形图的散点图

我们也可以在数轴两边加上单变量的箱形图.

> op <- par( )

> layout(matrix(c(2,1,0,3), 2, 2, byrow=T ), c(1,6), c(4,1))

> par(mar=c(1,1,5,2))

> plot(cars$dist ~ cars$speed,

xlab=”, ylab=”, las = 1)

4.4 多组数据的描述性统计分析 123

> rug(side=1, jitter(cars$speed, 5) )

> rug(side=2, jitter(cars$dist, 20) )

> title(main = “cars data”)

> par(mar=c(1,2,5,1))

> boxplot(cars$dist, axes=F)

> title(ylab=’Stopping distance (ft)’, line=0)

> par(mar=c(5,1,1,2))

> boxplot(cars$speed, horizontal=T, axes=F)

> title(xlab=’Speed (mph)’, line=1)

> par(op)

运行得到图4.24. 这样我们既可以了解两个变量的统计量也可以看出两变量之

间的关系.

等高线图

有时候数据太多太集中,散点图上的信息不容易看出来. 例如由

> library(chplot)

> data(hdr)

> x<- hdr$age

> y<- log(hdr$income)

> plot(x,y)

得到的图4.25. 这时我们要借助于二维的密度估计来认识图形. 首先使

用MASS程序包中的二维核密度估计函数kde2d( )来估计这个二维数据的密度

函数, 再利用函数contour( )画出密度的等高曲线图.

> library(MASS)

> z <- kde2d(x,y)

> contour(z, col = “red”, drawlabels = FALSE,

main = “Density estimation: contour plot”)

运行得到图4.26.

三维透视图

我们也可以利用函数persp( )作出三维透视图, 这样看更形象.

124 第四章 探索性数据分析

20 40 60 80 100

12

13

14

15

16

17

age

in

co

m

e

图 4.25 age与income的散点图

Density estimation: contour plot

age

in

co

m

e

20 40 60 80 100

12

13

14

15

16

17

图 4.26 age与income的等高线图

> persp(z, main = “Density estimation: perspective plot”)

运行得到图4.27.

z

Y

Z

Density estimation: perspective plot

图 4.27 三维图形.

4.4 多组数据的描述性统计分析 125

数据的变换

当直接用原数据得不到有意义的图形时, 可以对数值进行变换以得到有意

义的图形, 最常用是是对数变换、倒数变换、指数变换和更为一般的Box-Cox变

换:

fpxq



yλ 1

λ

, 如果λ  0,

logpyq, 如果λ 0.

我们用程序包MASS中的数据集Animal来举例说明.

例 4.4.2 首先调出数据集Animal

> library(MASS)

> data(Animals)

> Animals

输出数据结果如下:

body brain

Mountain beaver 1.350 8.1

Cow 465.000 423.0

Grey wolf 36.330 119.5

Goat 27.660 115.0

Guinea pig 1.040 5.5

Dipliodocus 11700.000 50.0



Pig 192.000 180.0

我们在R中画两个图, 一个使用原始的数据, 另一个对原来的数值取对数.

> par(mfrow=c(1,2))

> plot(brain~body,data=Animals)

> plot(log(brain)~log(body),data=Animals)

得到图4.28. 可以看到图4.28左侧的散点图没有价值, 而从右侧的散点图可以

看出两组数据在取对数后呈现明显的线性相依关系. 对两组数据取对数的技巧

在绘图中很常见, 生活中许多数据成指数上升趋势, 比如细胞繁殖, 这种数据

126 第四章 探索性数据分析

取对数后就呈线性上升趋势. 因此, 对数据作对数处理(或更为一般的变换)很

有意义.

0 40000 80000

0

10

00

20

00

30

00

40

00

50

00

body

br

ai

n

0 5 10

0

2

4

6

8

log(body)

lo

g(b

rai

n)

图 4.28 数据变换比较图.

4.4.2 多组数据的图形描述

对多组数据, 我们给出3种作图的方法(函数): pairs( )或plot( ),

matplot( )和boxplot( ). 它们都可以看成一维或二维画图函数的延伸.

我们仅通一个例子加以说明, 具有使方法可参考相应的帮助文件.

例 4.4.3

> n<-10

> d<-data.frame(y1 = abs(rnorm(n)),

y2 = abs(rnorm(n)),

y3 = abs(rnorm(n)),

y4 = abs(rnorm(n)),

4.4 多组数据的描述性统计分析 127

y5 = abs(rnorm(n))

)

散点图

多组数据的散点图就是不同变量的散点图像矩阵一样放在一起, 使用的函

数为pairs( ), 也可直接使用散点图函数plot( ). 运行

>plot(d) # 或者 pairs(d)

得到图4.29.

y1

0.5 1.5 0.5 1.5 2.5

0.

0

1.

0

0.

5

1.

5

y2

y3

0.

5

1.

5

0.

5

1.

5

2.

5

y4

0.0 1.0 0.5 1.5 0.2 0.8 1.4

0.

2

0.

8

1.

4

y5

图 4.29 多组数据的散点图.

128 第四章 探索性数据分析

矩阵图

matplot( )在处理多组数据时很好用. 它与散点图矩阵的区别是将各个

散点图放在同一个作图区域中. 对于上面的模拟数据运行

> matplot(d, type = ‘l’, ylab = “”, main = “Matplot”)

得到图4.30.

2 4 6 8 10

0.

0

0.

5

1.

0

1.

5

2.

0

Matplot

图 4.30 多组数据的matplot图.

框须图

使用函数boxplot( )可在同一个作图区域画出各组数的框须图(盒形图),

对于上面的数据运行

>boxplot(d)

4.4 多组数据的描述性统计分析 129

得到图4.31.

y1 y2 y3 y4 y5

0.

0

0.

5

1.

0

1.

5

2.

0

2.

5

图 4.31 多组数据的boxplot图.

分组数据比较特殊,它既含有定性的变量,又含有数值型变量, 而上面所

说的多组数据,我们仅局限于数值型的观测. 我们将在后面一节专门给出带定

性变量的分组数据的描述性统计分析.

4.4.3 多组数据的描述性统计

多组数据的概述

对多组数据进行概述与单组数据情形类似, 直接使用summary( )可以得

到各组数据的均值和五数. 先看一个例子

例 4.4.4 程序包datasets中数据框state.x77 描述了美国50个州的人

口数、人均收入、人均寿命、一年中有雾的天数等情况. 数据如下:

130 第四章 探索性数据分析

> state.x77

Population Income Illiteracy Life Exp …

Alabama 3615 3624 2.1 69.05 …

Alaska 365 6315 1.5 69.31 …

Arizona 2212 4530 1.8 70.55 …

… … …

Wisconsin 4589 4468 0.7 72.48 …

Wyoming 376 4566 0.6 70.29 …

使用函数summary( )概括state.x77, 结果如下:

> summary(state.x77)

Population Income Illiteracy Life Exp

Min. : 365 Min. :3098 Min. :0.500 Min. :67.96

1st Qu.: 1080 1st Qu.:3993 1st Qu.:0.625 1st Qu.:70.12

Median : 2839 Median :4519 Median :0.950 Median :70.67

Mean : 4246 Mean :4436 Mean :1.170 Mean :70.88

3rd Qu.: 4969 3rd Qu.:4814 3rd Qu.:1.575 3rd Qu.:71.89

Max. :21198 Max. :6315 Max. :2.800 Max. :73.60

Murder HS Grad Frost Area

Min. : 1.400 Min. :37.80 Min. : 0.00 Min. : 1049

1st Qu.: 4.350 1st Qu.:48.05 1st Qu.: 66.25 1st Qu.: 36985

Median : 6.850 Median :53.25 Median :114.50 Median : 54277

Mean : 7.378 Mean :53.11 Mean :104.46 Mean : 70736

3rd Qu.:10.675 3rd Qu.:59.15 3rd Qu.:139.75 3rd Qu.: 81163

Max. :15.100 Max. :67.30 Max. :188.00 Max. :566432

为了统计不同地区(Northeast, South, North Central, West)的这几个变量的均

值(或中位数、分位数) 可以使用分组概括函数aggregate( ), 其调用格式如

下:

aggregate(x, by, FUN, …)

aggregate( )的调用格式

说明: x是数据框, by指定分组变量, fun是用于计算的统计函数. 如果计算均

值, fun为mean. 接着上面的例子计算各个地区各个变量的均值:

4.4 多组数据的描述性统计分析 131

> aggregate(state.x77, list(Region = state.region), mean)

Region Population Income Illiteracy LifeExp …

1 Northeast 5495.111 4570.222 1.000000 71.26444 …

2 South 4208.125 4011.938 1.737500 69.70625 …

3 North Central 4803.000 4611.083 0.700000 71.76667 …

4 West 2915.308 4702.615 1.023077 71.23462 …

同样, 根据不同地区和是否一年中有雾的天数超过130来统计这几个变量的均

值:

aggregate(state.x77, list(Region = state.region,

Cold = state.x77[,”Frost”] > 130),mean)

Region Cold Population Income Illiteracy Life Exp …

1 Northeast FALSE 8802.8000 4780.400 1.1800000 71.12800 …

2 South FALSE 4208.1250 4011.938 1.7375000 69.70625 …

3 North Central FALSE 7233.8333 4633.333 0.7833333 70.95667 …

4 West FALSE 4582.5714 4550.143 1.2571429 71.70000 …

5 Northeast TRUE 1360.5000 4307.500 0.7750000 71.43500 …

6 North Central TRUE 2372.1667 4588.833 0.6166667 72.57667 …

7 West TRUE 970.1667 4880.500 0.7500000 70.69167 …

注: Cold为TRUE表示该地区一年有雾的天数超过130天; Cold为FALSE 表示该

地区一年有雾的天数没有超过130天.

标准差与协方差阵的计算

变量标准差的计算仍然使用函数sd( )

> options(digits=3)

> sd(state.x77)

Population Income Illiteracy Life Exp Murder HS Grad Frost Area

4464.49 614.47 0.61 1.34 3.69 8.08 51.98 85327.30

函数var( )应用在多组数据中计算的是协方差阵:

> var(state.x77)

Population Income Illiteracy Life Exp …

132 第四章 探索性数据分析

Population 19931684 571230 292.868 -4.08e+02 …

Income 571230 377573 -163.702 2.81e+02 …

Illiteracy 293 -164 0.372 -4.82e-01 …

Life Exp -408 281 -0.482 1.80e+00 …

Murder 5664 -522 1.582 -3.87e+00 …

HS Grad -3552 3077 -3.235 6.31e+00 …

Frost -77082 7228 -21.290 1.83e+01 …

Area 8587917 19049014 4018.337 -1.23e+04 …

同上,我们可以用函数aggregate( )分别计算不同区域的标准差:

> aggregate(state.x77, list(Region = state.region), sd)

Region Population Income Illiteracy Life Exp …

1 Northeast 6080 559 0.278 0.744 …

2 South 2780 605 0.552 1.022 …

3 North Central 3703 283 0.141 1.037 …

4 West 5579 664 0.608 1.352 …

相关系数的计算

散点图让我们对两组数据的线性相依关系有了直观的认识, 皮尔

逊(Pearson)相关系数可以度量这种线性相关性程度. 如果数据呈现的不是线

性关系,而是单调的,这时可使用斯皮尔曼(Spearman)或者肯德尔(Kendall)相

关系数, 因为它们描述的是秩相关性. 在R中我们使用函数cor( )计算相关系

数或相关系数矩阵, 其调用格式如下:

cor(x, y = NULL, use = “all.obs”, method =

cor( )的调用格式

c(“pearson”, “kendall”,”spearman”))

例如,我们计算下面二个向量x与y之间的三个相关系数:

> x<-c(44.4, 45.9, 46.0, 46.5, 46.7, 47, 48.7, 49.2, 60.1)

> y<-c(2.6, 10.1, 11.5, 30.0, 32.6, 50.0, 55.2, 85.8, 86.8)

> cor(x,y)

[1] 0.768587

> cor(x,y,method=”spearman”)

4.4 多组数据的描述性统计分析 133

[1] 1

> cor(x,y,method=”kendall”))

[1] 1

从x与y的散点图(见图4.32)可以看出, x与y的线性相关系数受到右上角一

个极端值的影而变小了. 因此在计算相关性度量的时候我们要考虑计算哪种相

关系数更有意义.

0 20 40 60 80

45

50

55

60

y

x

图 4.32 .

4.4.4 分组数据的图形概括

分组数据可视为特殊的多组数据, 他们的区别是: 在多组数据中各数值型

变量的观测值指向不同的对象,而分组数据是指同一个数值型变量的观测值按

另一个分类变量分成若干个子集, 因此, 这些子集指向同一个变量. 下面我们

通过DAAG中的数据集cuckoos来看一下分组数据的特殊图形描述方法.

例 4.4.5 杜鹃把蛋下在其它种类鸟的鸟巢中, 这些鸟会帮它们孵化, 我

们希望了解在不同类的鸟巢中杜鹃蛋的长度, 数据如下:

> data(cuckoos)

134 第四章 探索性数据分析

> cuckoos

length breadth species id

1 21.7 16.1 meadow.pipit 21

2 22.6 17.0 meadow.pipit 22

… …

118 20.8 15.9 wren 236

119 21.2 16.0 wren 237

120 21.0 16.0 wren 238

使用条件散点图

当数据集中含有一个或多个因子变量时, 可以使用条件散点图函

数coplot( )作出因子变量不同水平下的多个散点图, coplot( )的调用格

式为:

> coplot(formula, data,……)

coplot( )的调用格式

对于一个因子变量a, 变量x与y的条件散点图可用下面的命令得到:

> coplot(y ~ x | a)

对于二个因子变量a与b, 变量x与y的条件散点图可用下面的命令得到:

> coplot(y ~ x | a*b)

对于例4.4.5, 运行命令

> coplot(length ~ breadth | species)

得到图4.33.

使用直方图

简单而繁琐的方法是反复使用函数hist( ). 运行命令

data(cuckoos)

attach(cuckoos)

4.4 多组数据的描述性统计分析 135

20

21

22

23

24

25

15.0 15.5 16.0 16.5 17.0 17.5

15.0 15.5 16.0 16.5 17.0 17.5 15.0 15.5 16.0 16.5 17.0 17.5

20

21

22

23

24

25

breadth

le

ng

th

hedge.sparrow

meadow.pipit

pied.wagtail

robin

tree.pipit

wren

Given : species

图 4.33 各鸟巢杜鹃蛋长度与宽度的散点图.

length.mp <- length[species==”meadow.pipit”]

length.tp <- length[species==”tree.pipit”]

length.hs <- length[species==”hedge.sparrow”]

length.r <- length[species==”robin”]

length.pw <- length[species==”pied.wagtail”]

length.w <- length[species==”wren”]

par(mfrow=c(3,2))

hist(length.mp,breaks=6,probability=T,

xlim=c(19,25),ylim=c(0,1),main=””,col=6)

hist(length.tp,breaks=6,probability=T,

136 第四章 探索性数据分析

xlim=c(19,25),ylim=c(0,1),main=””,col=6)

hist(length.hs,breaks=6,probability=T,

xlim=c(19,25),ylim=c(0,1),main=””,col=6)

hist(length.r,breaks=6,probability=T,

xlim=c(19,25),ylim=c(0,1),main=””,col=6)

hist(length.pw,breaks=6,probability=T,

xlim=c(19,25),ylim=c(0,1),main=””,col=6)

hist(length.w,breaks=6,probability=T,

xlim=c(19,25),ylim=c(0,1),main=””,col=6)

par(mfrow=c(1,1))

得到图4.34.

我们可将上面的直方图纵向压缩在一起(像后面的框须图), 得到所谓的直

方组图. 直方组图函数hists( )定义为:

hists <- function (x, y, …) {

直方组图函数hists( )的定义

y <- factor(y)

n <- length(levels(y))

op <- par( mfcol=c(n,1), mar=c(2,4,1,1) )

b <- hist(x, …, plot=F)$breaks

for (l in levels(y)){

hist(x[y==l], breaks=b, probability=T, ylim=c(0,1.0),

main=””, ylab=l, col=’lightblue’, xlab=””, …)

points(density(x[y==l]), type=’l’, lwd=3, col=’red’)

}

par(op)

}

ylim的范围可以根据需要自己调整, 这更能直观地展示我们和数据. 由此运行

命令

> hists(cuckoos$length,cuckoos$species)

运行得到图4.35.

我们也可直接利用lattice包中的直方图函数histogram( ) 得到类似

于4.34的每组数据的直方图. 运行命令

4.4 多组数据的描述性统计分析 137

length.mp

D

en

si

ty

19 20 21 22 23 24 25

0.

0

0.

4

0.

8

length.tp

D

en

si

ty

19 20 21 22 23 24 25

0.

0

0.

4

0.

8

length.hs

D

en

si

ty

19 20 21 22 23 24 25

0.

0

0.

4

0.

8

length.r

D

en

si

ty

19 20 21 22 23 24 25

0.

0

0.

4

0.

8

length.pw

D

en

si

ty

19 20 21 22 23 24 25

0.

0

0.

4

0.

8

length.w

D

en

si

ty

19 20 21 22 23 24 25

0.

0

0.

4

0.

8

图 4.34 各鸟巢杜鹃蛋的直方图.

> histogram(~length|species,data=cuckoos)

到图4.36. 显然, 这种方法容易方便多了. lattice程序包还提供了其它许多功

能强大、使用方便的其它作图函数, 有兴趣的读者可通过其帮助文件学习和使

用.

使用框须图

我们可以用函数boxplot( )同时考查各组数据的分布. 命令

> boxplot(length~species,data=cuckoos,

138 第四章 探索性数据分析

he

dg

e.

sp

ar

ro

w

20 21 22 23 24 25

0.

0

0.

6

m

e

a

do

w.

pi

pi

t

20 21 22 23 24 25

0.

0

0.

6

pi

ed

.w

ag

ta

il

20 21 22 23 24 25

0.

0

0.

6

ro

bi

n

20 21 22 23 24 25

0.

0

0.

6

tre

e.

pi

pi

t

20 21 22 23 24 25

0.

0

0.

6

w

re

n

20 21 22 23 24 25

0.

0

0.

6

图 4.35 直方组图.

xlab=”length of egg”,horizontal=TRUE)

得到图4.37. 注意到horizontal=TRUE是让盒子横向放置. 从图上我们可以看

出在wren(鹪鹩)巢中的杜鹃蛋长度最小.

使用条形图

利用函数stripchart( )得到杜鹃蛋在不同鸟巢的长度的分布图. 函

数stripchart( )在数据不多的时候和函数boxplot( )的功能类似, 描绘了数

据分布的情况, 其调用格式如下:

> stripchart(x, method =”overplot”….)

stripchart( )的调用格式

说明: method说明数据重复的时候该如何放置, 有三种方式: overplot是重叠

放置, stack是把数据垒起来, jitter是散放在数值的周围.

4.4 多组数据的描述性统计分析 139

length

Pe

rc

en

t o

f T

ot

al

0

10

20

30

40

50

20 21 22 23 24 25

hedge.sparrow meadow.pipit

20 21 22 23 24 25

pied.wagtail

robin

20 21 22 23 24 25

tree.pipit

0

10

20

30

40

50

wren

图 4.36 各鸟巢杜鹃蛋的直方图.

> stripchart(cuckoos$length~cuckoos$species, method =”jitter” )

运行得到图4.38.

使用密度曲线图

lattice包中的函数densityplot( )可分别展示每组数据的密度曲线图.

> densityplot(~length|species,data=cuckoos)

运行得到图4.39.

140 第四章 探索性数据分析

he

dg

e.

sp

ar

ro

w

pi

ed

.w

ag

ta

il

ro

bi

n

tre

e.

pi

pi

t

w

re

n

20 21 22 23 24 25

length of egg

图 4.37 各鸟巢杜鹃蛋的boxplot图.

§4.5 分类数据的描述性统计分析

如果数据集中对应的变量都是定性变量, 这样的数据称为分类数据. 这种

数据常使用表格来描述, 并为进一步的统计分析服务. 我们主要考虑由二元定

性数据所构成的二维列联表数据. 这一节主要描述如何制作列联表和图形描

述, 列联表的独立性检验将在第七章§7.3中介绍.

4.5.1 列联表的制作

由分类数据构造列联表

例 4.5.1 为考查眼睛的颜色(Eye)与头发的颜色(Hair)之间的关系, 收

集了下面的一组数据

4.5 分类数据的描述性统计分析 141

20 21 22 23 24 25

he

dg

e.

sp

ar

ro

w

pi

ed

.w

ag

ta

il

ro

bi

n

tre

e.

pi

pi

t

w

re

n

图 4.38 各鸟巢杜鹃蛋的stripchart图.

Eye

Hair Brown Blue Hazel Green

Black 68 20 15 5

Brown 119 84 54 29

Red 26 17 14 14

Blond 7 94 10 16

我们可以通过矩阵建立这个列联表, 命令如下

> Eye.Hair <- matrix(c(68,20,15,5, 119,84,54,29,

26,17,14,14, 7,94,10,16), nrow=4,byrow=T)

> colnames(Eye.Hair) <- c(“Brown”, “Blue”, “Hazel”, “Green”)

> rownames(Eye.Hair) <- c(“Black”,”Brown”,”Red”, “Blond”)

> Eye.Hair

142 第四章 探索性数据分析

length

D

en

si

ty

0.0

0.2

0.4

0.6

20 22 24 26

hedge.sparrow meadow.pipit

20 22 24 26

pied.wagtail

robin

20 22 24 26

tree.pipit

0.0

0.2

0.4

0.6

wren

图 4.39 各鸟巢杜鹃蛋的密度曲线图.

由原始数据构造列联表

R中可以使用函数table( ), xtabs( ) 或ftable( )由原始数据构造列

联表, 具体用法参见它们的帮助. 我们仅以table( )为例加以举例说明. 其用

法为

> table(factor1,factor2,…)

table( )的调用格式

例 4.5.2 数据包ISwR中的数据集juul中含有三个分类变量: sex, tan-

ner, menarche. 则我们可以得到下面的一些列表:

> table(sex)

> table(sex,menarche)

> table(menarche,tanner)

4.5 分类数据的描述性统计分析 143

最后一个的显示结果为

tanner

menarche 1 2 3 4 5

1 221 43 32 14 2

2 1 1 5 26 202

获得边际列表

在实际使用时常需要按列联表中某个属性(因子)求和, 称之为边际

列表. 除了使用前面已经提到的函数apply( )外,更为方便的是使用函

数margin.table( ). 例如, 对于数据Eye.Hair, 我们有

> margin.table(Eye.Hair,1)

Black Brown Red Blond

108 286 71 127

> margin.table(Eye.Hair,2)

Brown Blue Hazel Green

220 215 93 64

其中选项1和2分别表示按行和按列求边际和.

频率列联表

上面的列联表的元素为分类变量(因子)的频数, 故可称为频数列联表.

由频数列联表除以边际和就可得到它们的(相对)频率列联表, 这可通过函

数prop.table( )实现. 若再乘上100就得到相对应的用百分比表示的(相

对)频率列联表. 仍以上面的例子加以说明

> prop.table(Eye.Hair,1)

Brown Blue Hazel Green

Black 0.63 0.2 0.14 0.05

Brown 0.42 0.3 0.19 0.10

Red 0.37 0.2 0.20 0.20

Blond 0.06 0.7 0.08 0.13

> prop.table(Eye.Hair,1)*100

Brown Blue Hazel Green

144 第四章 探索性数据分析

Black 63 19 14 5

Brown 42 29 19 10

Red 37 24 20 20

Blond 6 74 8 13

注意: 全局相对频率列联表不能由prop.table( )得到, 但可以用下面的命令

得到

> Eye.Hair/sum(Eye.Hair)

Brown Blue Hazel Green

Black 0.11 0.03 0.03 0.008

Brown 0.20 0.14 0.09 0.049

Red 0.04 0.03 0.02 0.024

Blond 0.01 0.16 0.02 0.027

4.5.2 列联表的图形描述

使用条形图

像单组数据一样, 我们可以用条形图(或称为柱状图)来表示. 运行

> data(HairEyeColor)

> a <- as.table(apply(HairEyeColor,c(1,2),sum))

> barplot(a, legend.text = attr(a, “dimnames”)$Hair)

得到图4.40. 这是按行(头发颜色)叠加、按列(眼睛颜色)排列的条形图. 我们也

可将列并列放, 这时只需选项beside取值为TRUE. 运行

> barplot(a, beside = TRUE,

legend.text = attr(a, “dimnames”)$Hair)

得到图4.41.

使用点图

函数dotchart( )给出Cleveland点图. 运行

> dotchart(Eye.Hair)

4.5 分类数据的描述性统计分析 145

Brown Blue Hazel Green

Blond

Red

Brown

Black

0

50

10

0

15

0

20

0

图 4.40 二元定性数据的条形图(1).

Brown Blue Hazel Green

Black

Brown

Red

Blond

0

20

40

60

80

10

0

图 4.41 二元定性数据的条形图(2).

146 第四章 探索性数据分析

得到图4.42.

Black

Brown

Red

Blond

Black

Brown

Red

Blond

Black

Brown

Red

Blond

Black

Brown

Red

Blond

Brown

Blue

Hazel

Green

20 40 60 80 100 120

图 4.42 二元定性数据的Cleveland点图.

4.5 分类数据的描述性统计分析 147

第四章习题

4.1 模拟得到1000个参数为0.3的贝努里分布随机数, 并用图示表示出来.

4.2 用命令rnorm( )命令产生1000个均值为10, 方差为4的正态分布随机数,

用直方图呈现数据的分布并添加核密度曲线.

4.3 模拟得到三个t分布混合而成的样本, 用直方图呈现数据的分布并添加

核密度曲线.

4.4 由程序包DAAG中的数据集possum,

1) 利用函数hist(possum$age)作出负鼠年龄的直方图. 试选用两种不同的

断点并作比较, 说明两图的不同之处;

2) 求出负鼠年龄变量的均值、标准差、中位数以及上下四分位数.

4.5 考虑程序包DAAG中的数据集tinting,

1) 获得变量tint和sex的列联表;

2) 在同一图上作出变量sex与tint的联合柱状图;

3) 作出age和it的散点图, 并进一步完成下面的操作:

i. 用函数lowness()作出拟合线;

ii. 在图的两边加上更细小的刻度;

iii. 在图的两边加上箱型图.

4) 作出age和it关于因子变量tint的条件散点图;

5) 作出age和it关于因子变量tint和sex的条件散点图;

6) 做出it与csoa的等高线图;

7) 使用matplot( )描述变量age, it和csoa.

4.6 由命令

> data(InsectSprays)

> InsectSprays

148 第四章 探索性数据分析

得到数据集InsectSprays, 根据数据作出有意义的图, 并对数据作出描述性统

计.

4.7 假定某校100名女生的血清总蛋白含量(g/L)服从均值为75, 标准差为3,

并假定数据由下面的命令产生

> options(digits=4)

> rnorm(100,75,9)

根据产生的数据

1) 计算样本均值、方差、标准差、极差、四分位极差、变异系数、偏度、峰度

和五数概括;

2) 画出直方图、核密度估计曲线、经验分布图和QQ图;

3) 画出茎叶图、框须图.

4.8 某校测得20名学生的四项指标: 性别、年龄、身高(cm)和体重(kg), 具体

数据如表4.1所示.

1) 绘制体重对身高的散点图;

2) 绘制不同性别下, 体重对身高的散点图;

3) 绘制不同年龄阶段, 体重对身高的散点图;

4) 绘制不同性别和不同年龄阶段, 体重对身高的散点图.

表 4.1: 学生身高与体重数据

学号 性别 年龄 身高 体重

01 F 18 166 54

02 F 18 155 58

03 F 19 154 50

04 F 18 160 47

05 F 20 162 46

(续下页)

4.5 分类数据的描述性统计分析 149

学生身高与体重数据(续表)

学号 性别 年龄 身高 体重

06 F 19 153 48

07 F 21 156 50

08 F 20 152 49

09 F 21 170 57

10 F 20 156 52

11 M 18 168 61

12 M 18 166 55

13 M 19 172 63

14 M 18 178 68

15 M 20 169 59

16 M 19 180 65

17 M 21 177 59

18 M 20 168 56

19 M 21 182 69

20 M 20 170 61

第五章 参数估计

本章概要

♦ 矩法估计和极大似然估计

♦ 单正态总体的均值和方差的估计

♦ 两正态总体的参数估计

♦ 比率的估计

♦ 样本容量的确定

根据样本推断总体的分布和分布的数字特征称为统计推断. 这一章我们

介绍统计推断的一个基本问题—参数估计问题. 在很多实际问题中, 总体的分

布类型已知但它包含一个或多个参数, 总体的分布完全由所含的参数决定, 这

样就需要对参数作出估计. 参数估计有两类,一类是点估计, 就是以某个统计量

的样本观测值作为未知参数的估计值; 另一类是区间估计, 就是用两个统计量

所构成的区间来估计未知参数.

§5.1 矩法估计和极大似然估计

5.1.1 矩法估计

由辛钦大数定律和科尔莫哥洛夫强大数定理可知,如果总体X的k阶矩存

在, 则样本的k阶矩以概率收敛到总体的k阶矩, 样本矩的连续函数收敛到总体

矩的连续函数. 这就启发我们可以用样本矩作为总体矩的估计量, 这种用相应

的样本矩去估计总体矩的估计方法就称为矩估计法.

5.1 矩法估计和极大似然估计 151

设X1, , Xn为来自某总体X的一个样本, 样本的k阶原点矩为

Ak

1

n

n∑

i1

Xki , k 1, 2, . . .

如果总体X的k阶原点矩µk EpXkq存在, 则按矩法估计的思想, 用Ak去估

计µk: µˆk Ak.

设总体X的分布函数含有k个未知参数θ pθ1, θ2, . . . , θkq, 且分布的前k阶

矩存在, 它们都是θ1, θ2, . . . , θk的函数, 此时求θjpj 1, 2, . . . , kq的矩估计的具

体步骤如下:

1) 求出EpXjq µj , j 1, 2, . . . , k, 并假定

µj gjpθ1, θ2, . . . , θkq, j 1, 2, . . . , k. (5-1.1)

2) 解方程组(5-1.1)得

θi hipµ1, µ2, . . . , µkq, i 1, 2, . . . , k. (5-1.2)

3) 在上式中用Aj代替µj , j 1, 2, . . . , k即得θ1, θ2, . . . , θk的矩估计:

θˆi hipA1, A2, . . . , Akq, i 1, 2, . . . , k.

若有样本观测值x1, x2, . . . , xk, 代入上式即得θ1, θ2, . . . , θk的矩估计值.

由于函数gj的表达式不同, 求解上述方程或方程组会相当困难, 这时需要通过

迭代算法数值求解, 且这需要具体问题具体分析, 我们不可能有固定的R语言

程序来直接估计θ, 只能利用R的计算功能根据具体问题编写相应的R程序, 下

面我们通过几个例子来说明如何在R中实现矩法估计.

例 5.1.1 设X1, , Xn 是来自bp1, θq的一个样本, θ 表示某件事件的成

功概率, 通常事件的成败机会比gpθq θ{p1 θq 是人们感兴趣的参数, 我们可

以用矩法估计轻松地给出gpθq 一个很不错的估计, 因为θ 是总体均值, 由矩法,

记X 1

n



Xi, 则

T pXq

X

1X

是gpθq的一个矩估计.

152 第五章 参数估计

例 5.1.2 对某个篮球运动员记录其在一次比赛中投篮命中与否, 观测

数据如下:

1 1 0 1 0 0 1 0 1 1 1 0 1 1 0 1

0 0 1 0 1 0 1 0 0 1 1 0 1 1 0 1

编写相应的R函数估计这个篮球运动员投篮的成败比.

> X<-c(1,1,0 ,1 ,0, 0, 1, 0 ,1 ,1,1, 0 ,1, 1 ,0 ,1,

0 ,0 ,1, 0 ,1 ,0,1, 0 ,0 ,1,1 ,0 ,1, 1, 0, 1)

> theta<-mean(X)

> t<-theta/(1-theta)

> t

[1] 1.285714

我们得到gpθq 的矩估计为1.285714.

例 5.1.3 设总体为参数为λ 的指数分布,其密度函数为

ppx|λq λ expλx, x ¡ 0

X1, , Xn是样本, 由于总体均值为1{λ ,则λ的矩法估计为

λˆ

1

X

另外, 由于V arpXq 1{λ2, 则λ 的另一个矩法估计为

λˆ

1√

s2

其中s2为样本方差. 这说明矩估计可能是不唯一的, 这是矩法估计的一个缺点,

此时通常应该尽量采用低阶矩给出未知参数的估计.

例 5.1.4 下面的观测值为来自指数分布的一个样本:

0.59132754 0.12854935 0.46900228 0.29835980 0.24341462

0.06566637 0.40085536 2.99687123 0.05278912 0.09898594

我们来估计其参数λ.

R程序如下(一阶矩法估计):

5.1 矩法估计和极大似然估计 153

> X<-c(0.59132754,0.12854935,0.46900228,0.29835980,0.24341462,

0.06566637,0.40085536,2.99687123,0.05278912,0.09898594)

> lambda<- 1/mean(X)

> lambda

[1] 1.87062

如果使用二阶矩进行矩法估计, 则得

> lambda<- 1/sd(x)

> lambda

[1] 1.13103

结论:

1) λ的一阶矩估计为1.87062, 二阶矩估计为1.13103. 实际上上面的数据是

模拟参数为2的指数分布,可见低阶矩更精确.

2) 在总体分布未知的情况下也可以用样本均值估计总体均值, 用样本方差

估计总体方差.

5.1.2 极大似然估计

极大似然估计法是建立在极大似然原理基础上的一种统计方法, 我们先看

一个例子: 某位同学与一位猎人一起外出打猎, 一只野兔从前方窜过. 只听一

声枪响, 野兔应声到下, 如果要你推测,这一发命中的子弹是谁打的? 你就会想,

只发一枪便打中, 由于猎人命中的概率一般大于这位同学命中的概率, 看来这

一枪是猎人射中的. 这种推断就体现了极大似然法的基本思想.

离散分布场合

设总体X是离散型随机变量, 其分布律为ppx|θq , 其中θ是未知参数(或

未知参数向量).设X1, X2, , Xn为取自总体X 的样本, 则其联合概率函数

为∏ni ppxi|θq.

若我们已知样本的观测值为x1, x2, , xn, 则事件pX1 x1, X2 x2,

, Xn xnq发生的概率为

∏n

i ppxi|θq. 这一概率随θ的值而变化. 从直观上

来看, 既然样本观测值x1, x2, , xn 出现了, 它们出现的概率, 即

∏n

i ppxi|θq相

154 第五章 参数估计

对来说应比较大. 换句话说, θ应使样本x1, x2, , xn的出现具有较大的概率.

将上式看作θ 的函数, 并用Lpθq 表示, 即

Lpθq Lpx1, x2, , xn; θq

n∏

i

ppxi|θq. (5-1.3)

称Lpθq为似然函数. 极大似然估计法就是在参数θ的可能取值范围Θ内, 选取

使Lpθq 达到最大的参数值θˆ作为参数θ的估计值. 即取θˆ, 使

Lpθq Lpx1, x2, , xn; θˆq max

θPΘ

Lpx1, x2, , xn; θq.

连续分布场合

设总体X是连续型随机变量, 其概率密度函数为ppx|θq, 其中θ是

未知参数(或未知参数向量).设X1, X2, , Xn为取自总体X的样本, 则

其联合密度函数值为∏ni fpxi|θq. 若取得样本观察值为x1, x2, , xn,

则因为pX1, X2, , Xnq 取px1, x2, , xnq(指落在其邻域中)的概率正比

于∏ni ppxi|θq, 所以, 按极大似然原理, 应选择θ的值使此概率达到最大. 我

们也称Lpθq ∏ni fpxi|θq为似然函数. 再按离散场合同样的方法求使似然函

数达到最大的参数θ的值, 即极大似然估计值.

可见, 不管在离散还是连续场合, 似然函数都可表示为(5-1.3), 其

中ppx|θq为总体X的概率函数, 它在离散表示分布律, 在连续场合表示密度

函数.

在单参数场合, 我们可以使用R中的函数optimize( )求极大似然估计值.

optimize( )的调用格式如下:

optimiz(f = , interval = , lower = min(interval),

optimize( )的调用格式

upper = max(interval), maximum = TRUE,

tol = .Machine$double.eps^0.25, …)

说明: f是似然函数, interval是参数θ的取值范围, lower是θ的下界,

upper是θ的上界, maximum = TRUE是求极大值, 否则(maximum = FALSE)表示

求函数的极小值, tol是表示求值的精确度, … 是对f的附加说明.

在多参数场合, 我们用函数optim( )或者nlm( )来求似然函数的极大值,

并求相应的极大值点. optim( )和nlm( )的定义如下:

5.1 矩法估计和极大似然估计 155

optim(par, fn, gr = NULL,

optim( )的调用格式

method = c(“Nelder-Mead”, “BFGS”, “CG”, “L-BFGS-B”, “SANN”),

lower = -Inf, upper = Inf,

control = list( ), hessian = FALSE, …)

nlm(f, p, hessian = FALSE, typsize=rep(1, length(p)), fscale=1,

nlm( )的调用格式

print.level = 0, ndigit=12, gradtol = 1e-6,

stepmax = max(1000 * sqrt(sum((p/typsize)^2)), 1000),

steptol = 1e-6, iterlim = 100, check.analyticals = TRUE, …)

三者的主要区别是: 函数nlm( )仅使用牛顿-拉夫逊算法求函数的最小值点;

函数optim( )提供method选项给出的5种方法中的一种进行优化; 上面二个可

用于多维函数的极值问题, 而函数optimize( )仅适用于一维函数, 但可以用

于最大与最小值点.

下面通过一个例子来说明θ为一维时如何求极大似然估计.

例 5.1.5 一地质学家为研究密歇根湖的糊滩地区的岩石成分, 随机地

自该地区取出100个样品, 每个样品有十块石子, 他记录了每个样品中属石灰石

的石子数, 所得到的数据如表5.1所示. 假设这100次观测相互独立, 求这地区石

子中的石灰石的比例p的最大似然估计.

表 5.1 岩石成分数据

样本中的石子数 0 1 2 3 4 5 6 7 8 9 10

样品个数 0 1 6 7 23 26 21 12 3 1 2

解 显然, 每个样品中的石子数服从二项分布b(10, p), 我们的目的是根

据100次观测估计参数p. 似然函数为

Lpθq Lpx1, x2, , xn; θq

n∏

i1

ppxi, θq

p1 26 102p1 pq10010p1 26 102q

p517p1 pq483

R中程序如下:

156 第五章 参数估计

> f <- function(P)(P^517)*(1-P)^483

> optimize(f,c(0,1),maximum = TRUE)

$maximum

[1] 0.5170006

$objective

[1] 1.663700e-301

因此该地区石子中的石灰石的比例p的最大似然估计为0.517. 在计算结果中,

$maximum是极大值的近似解, 即估计值pˆ 0.5170, $objective是目标函数在

近似解处的函数值. ¥

§5.2 单正态总体参数的区间估计

上一节我们讨论了点估计, 由于点估计值只是估计量的一个近似值, 因而

点估计本身既没有反映出这种近似值的精度,即指出用估计值去估计的误差范

围有多大, 而且也没有指出这个误差范围以多大的概率包括未知参数, 这些问

题正是区间估计要讨论的问题. 区间估计解决了这二个问题, 它给出了估计的

可信程度,是一种重要的统计推断形式. 我们在接下来的几节将讨论这个问题.

这一节我们讨论单正态总体参数的区间估计问题.

假设总体X Npµ, σ2q,X1, , Xn是来自此正态总体的一个样本, X

1

n

∑n

i1Xi为其样本均值, S2

1

n 1

∑n

i1pXi Xq

2为其样本方差.

5.2.1 均值µ的区间估计

1.方差σ2已知时µ的置信区间

由于

X Npµ,

σ2

n

q

因此有

Z

X µ

σ{



n

Np0, 1q. (5-2.1)

由P (z1α2   Z   z1α2 ) 1 α 即得

P

(

X

σ√

n

z1α2   µ   X  

σ√

n

z1α2

)

1 α

5.2 单正态总体参数的区间估计 157

所以, 对于单个正态母体Npµ, σ2q, 在σ2已知时, µ的置信度为1 α的置信区间

为 (

X

σ√

n

z1α2 , X  

σ√

n

z1α2

)

,

简记为

X

σ√

n

z1α2 .

同理可求得µ的置信度为1 α的单侧置信上限

X  

σ√

n

z1α,

µ的置信度为1 α的单侧置信下限为

X

σ√

n

z1α.

由在R中没有求方差已知时均值置信区间的内置函数, 需要自己编写函数.

编写的R程序如下:

z.test<-function(x,n,sigma,alpha,u0=0,alternative=”two.sided”){

z.test( )函数的定义

options(digits=4)

result<-list( )

mean<-mean(x)

z<-(mean-u0)/(sigma/sqrt(n))

p<-pnorm(z,lower.tail=FALSE)

result$mean<-mean

result$z<-z

result$p.value<-p

if(alternative==”two.sided”){

p<-2*p

result$p.value<-p

}

else if (alternative == “greater”|alternative ==”less” ){

result$p.value<-p

}

else return(“your input is wrong”)

result$conf.int<- c(

mean-sigma*qnorm(1-alpha/2,mean=0, sd=1,

lower.tail = TRUE)/sqrt(n),

158 第五章 参数估计

mean+sigma*qnorm(1-alpha/2,mean=0, sd=1,

lower.tail = TRUE)/sqrt(n))

result

}

利用此程序即可给出体均值的置信区间. 此程序还可用于进行第七章要讲的

单正态总体均值µ的假设检验, 之所以在程序中同时完成区间估计与假设检验,

是为了与R中的t检验函数t.test( )相对应. 实际上, 我们可以从上面的程序

中抽出区间估计的部分, 得到下面求置信区间的程序:

> conf.int<-function(x,n,sigma,alpha){

options(digits=4)

mean<-mean(x)

c(mean-sigma*qnorm(1-alpha/2,mean=0, sd=1,

lower.tail = TRUE)/sqrt(n),

mean+sigma*qnorm(1-alpha/2,mean=0, sd=1,

lower.tail = TRUE)/sqrt(n))

}

下面通过例子看一下在R中如何去求置信度为1 α的置信区间.

例 5.2.1 一个人10次称自己的体重(单位:斤): 175 176 173 175 174 173

173 176 173 179, 我们希望估计一下他的体重. 假设此人的体重服从正态分布,

标准差为1.5, 我们要求体重的置信水平为95%的置信区间.

解 由上述函数z.test( ), R程序为

> x<-c(175 ,176 ,173,175,174,173,173,176,173,179 )

> result<-z.test(x,10,1.5,0.05)

> result$conf.int

[1] 173.8 175.6

因此, 我们得到体重的置信水平为0.95的置信区间为(173.8 ,175.6).

注: 运行

> z.test(x, 10, 1,5, 0.05)

将同时获得假设检验的结果, 而上面的程序仅提取了区间估计的部分, 这相当

于执行了

5.2 单正态总体参数的区间估计 159

> x<-c(175 ,176 ,173,175,174,173,173,176,173,179 )

> conf.int(x,10,1.5,0.05)

¥

2.方差σ2未知时µ的置信区间

由于

X µ

σ{



n

Np0, 1q,

pn 1qS2

σ2

χ2pn 1q,

且二者独立, 所以有

T

X µ

S{



n

tpn 1q. (5-2.2)

同样由P pt1α2 pn 1q   T   t1α2 pn 1qq 1 α得到

P

(

X

S√

n

t1α2 pn 1q   µ   X  

S√

n

t1α2 pn 1q

)

1 α,

所以, 在σ2 未知时, µ的置信度为1 α的置信区间为(

X

S√

n

t1α2 pn 1q, X  

S√

n

t1α2 pn 1q

)

,

其中tppnq为自由度为n的t分布的下侧p分位数. 同理可求得µ的置信度为1

α的单侧置信上限为

X  

S√

n

t1αpn 1q,

µ的置信度为1 α的单侧置信下限为

X

S√

n

t1αpn 1q.

方差未知时我们直接利用R语言的t.test( )来求置信区间. t.test(

)的调用格式如下:

t.test(x, y = NULL,

t.test( )的调用格式

160 第五章 参数估计

alternative = c(“two.sided”, “less”, “greater”),

mu = 0, paired = FALSE, var.equal = FALSE,

conf.level = 0.95, …)

说明: 若仅出现数据x, 则进行单样本t检验; 若出现数据x和y, 则进行二

样本的t检验(见6.3节); alternative=c(“two.sided”, “less”, “greater”)

用于指定所求置信区间的类型; alternative=”two.sided”是缺省值, 表示求

置信区间alternative=”less”表示求置信上限; alternative=”greater”表

示求置信下限. mu表示均值, 它仅在假设检验中起作用, 默认值为零.

在上例中如果不知道方差, 就需要用函数t.test( )来求置信区间, 我们

看一下在R中是如何实现的.

R程序如下:

> x<-c(175 , 176 , 173 , 175 ,174 ,173 , 173, 176 , 173,179 )

> t.test(x)

运行结果如下:

One Sample t-test

data: x

t = 283.8161, df = 9, p-value < 2.2e-16

alternative hypothesis: true mean is not equal to 0

95 percent confidence interval:

173.3076 176.0924

sample estimates:

mean of x

174.7

我们可以看到置信水平为0.95的置信区间为(173.3076, 176.0924 ).

我们注意到这个输出结果过于繁琐, 关于假设检验的结果仅在第六章中用

到. 由于我们只需要置信区间的结果, 因此R程序:

> t.test(x)$conf.int

提取出置信区间的部分, 结果如下:

5.2 单正态总体参数的区间估计 161

[1] 173.3076 176.0924

attr(,”conf.level”)

[1] 0.95

以下用到的许多程序都可能输出很多结果, 如同此例, 在其后面加

上$conf.int将只输出置信区间的结果.

5.2.2 方差σ2的区间估计

此时虽然也可以就均值是否已知分两种情况讨论σ2 的置信区间, 但在实

际中µ已知的情形是极为罕见的, 所以我们只在µ 未知的条件下讨论σ2 的置信

区间.

由于

χ2

pn 1qS2

σ2

χ2pn 1q, (5-2.3)

所以由

P

(

χ2α

2

pn 1q  

pn 1qS2

σ2

  χ21α2 pn 1q

)

1 α

就可得到σ2的置信水平为1 α的置信区间(

pn 1qS2

χ21α2

pn 1q

,

pn 1qS2

χ2α

2

pn 1q

)

.

在R中也没有直接求σ2 的置信区间的函数, 我们需要编写自己需要的函

数,下面的函数chisq.var.test( )可以用来求σ2置信区间. (第六章还将用于

关于σ2的假设检验.)

chisq.var.test <- function (x,var,alpha,alternative=”two.sided”){

chisq.var.test( )的定义

options(digits=4)

result<-list( )

n<-length(x)

v<-var(x)

result$var<-v

chi2<-(n-1)*v/var

result$chi2<-chi2

p<-pchisq(chi2,n-1)

162 第五章 参数估计

if(alternative == “less”|alternative==”greater”){

result$p.value<-p

} else if (alternative==”two.sided”) {

if(p>.5)

p<-1-p

p<-2*p

result$p.value<-p

} else return(“your input is wrong”)

result$conf.int<-c(

(n-1)*v/qchisq(alpha/2, df=n-1, lower.tail=F),

(n-1)*v/qchisq(alpha/2, df=n-1, lower.tail=T))

result

}

将此函数用到上例, 由运行显示σ2的0.95置信区间为(1.793, 12.628).

§5.3 两正态总体参数的区间估计

设总体X与Y独立, X Npµ1, σ21q, Y Npµ2, σ22q, X1, , Xn1是来自

总体X的样本, X 1

n1

∑n1

i1Xi为其样本均值, S21

1

n 1

∑n

i1pXi Xq

2为

其样本方差. Y1, , Yn2是来自总体Y的样本, Y 1n2

∑n2

i1 Yi为其样本均值,

S22

1

n 1

∑n

i1pYi Y q

2为其样本方差.

5.3.1 均值差µ1 µ2的置信区间

1.两方差都已知时两均值差的置信区间

进一步假设σ21与σ22都已知, 要求µ1µ2置信水平为1α的置信区间. 由于

X N

(

µ1,

σ21

n1

)

, Y N

(

µ2,

σ22

n2

)

,

且两者独立, 得

X Y N

(

µ1 µ2,

σ21

n1

 

σ22

n2

)

,

5.3 两正态总体参数的区间估计 163

所以

Z

pX Y q pµ1 µ2q√

σ21

n1

 

σ22

n2

Np0, 1q. (5-3.1)



P pz1α2   Z   z1α2 q 1 α,

化简得

P

(

X X z1α2



σ21

n1

 

σ22

n2

  µ1 µ2   X Y   z1α2



σ21

n1

 

σ22

n2

)

1α.

所以µ1 µ2的置信水平1 α的置信区间为(

X Y z1α2



σ21

n1

 

σ22

n2

, X Y   z1α2



σ21

n1

 

σ22

n2

)

.

同理可求得µ1 µ2的置信水平1 α的单侧置信上限为

X Y   z1α



σ21

n1

 

σ22

n2

,

µ1 µ2的置信水平1 α的单侧置信下限为

X Y z1α



σ21

n1

 

σ22

n2

.

在R语言中可以编写函数求置信区间(单测置信限读者可以类似地编写程

序)

two.sample.ci<-function(x,y,conf.level=0.95, sigma1,sigma2 ){

two.sample.ci( )的定义

options(digits=4)

m= length(x); n = length(y)

xbar=mean(x)-mean(y) alpha = 1 – conf.level

zstar= qnorm(1-alpha/2)* (sigma1/m+sigma2/n)^(1/2)

xbar +c(-zstar, +zstar)

}

我们来看一个例子.

164 第五章 参数估计

例 5.3.1 为比较两个小麦品种的产量, 选择18块条件相似的试验田, 采

用相同的耕作方法做实验, 结果播种甲品种的8块实验田的单位面积产量和播

种乙品种的10块实验田的单位面积产量分别为:

甲品种 628 583 510 554 612 523 530 615

乙品种 535 433 398 470 567 480 498 560 503 426

假定每个品种的单位面积产量均服从正态分布,甲品种产量的方差为2140,

乙品种产量的方差为3250,试求这两个品种平均面积产量差的置信区间(取α

=0.05)

解 直接利用上面编写的函数:

> x<-c(628,583,510,554,612,523,530,615)

> y<-c(535,433,398,470,567,480,498,560,503,426)

> sigma1<-2140

> sigma2<-3250

> two.sample.ci(x,y,conf.level=0.95, sigma1,sigma2)

[1] 34.67 130.08

所以这两个品种平均面积产量差的置信水平0.95的置信区间为(34.67, 130.08).

¥

2.两方差都未知时两均值差的置信区间

设方差σ21与σ22都未知, 但σ21 σ22 σ2. 此时由于

Z

pX Y q pµ1 µ2q

σ2



1

n1

 

1

n2

Np0, 1q,

pn1 1qS21

σ2

χ2pn1 1q,

pn2 1qS22

σ2

χ2pn2 1q

且由S21与S22的相互性得

pn1 1qS21

σ2

 

pn2 1qS22

σ2

χ2pn1   n2 2q.

5.3 两正态总体参数的区间估计 165

由此可以得到

T

pX Y q pµ1 µ2q√

p

1

n1

 

1

n2

qS2

tpn1   n2 2q, (5-3.2)

其中

S2

pn1 1qS21   pn2 1qS

2

2

pn1 1q   pn2 1q

.



P pt1α2 pn1   n2 2q   T   t1α2 pn1   n2 2qq 1 α

解不等式即得µ1 µ2的置信水平为1 α的置信区间:

X Y t1α2 pn1   n2 2q



1

n1

 

1

n2

S.

同理可求得µ1 µ2的置信水平为1 α的单侧置信上限为

X Y   t1αpn1   n2 2q



1

n1

 

1

n2

S,

µ1 µ2的置信水平为1 α的单侧置信下限为

X Y t1αpn1   n2 2q



1

n1

 

1

n2

S.

如同求单正态总体的均值的置信区间, 在R中可以直接利用t.test( )求

两方差都未知但相等时两均值差的置信区间.

例 5.3.2 在例5.3.1中, 如果不知道两种品种产量的方差但已知两者相

等, 此时须在t.test( )中指定选项var.equal=TRUE, 则由

> x<-c(628,583,510,554,612,523,530,615)

> y<-c(535,433,398,470,567,480,498,560,503,426)

> t.test(x,y,var.equal=TRUE)

运行得到

Two Sample t-test

data: x and y

166 第五章 参数估计

t = 3.3007, df = 16, p-value = 0.004512

alternative hypothesis: true difference in means is not equal to 0

95 percent confidence interval:

29.46961 135.28039

sample estimates:

mean of x mean of y

569.375 487.000

可见, 这两个品种的单位面积产量之差的置信水平0.95的置信区间为(29.4696,

135.2804).

5.3.2 两方差比σ21{σ22的置信区间

由于

pn1 1qS21

σ21

χ2pn1 1q,

pn2 1qS22

σ22

χ2pn2 1q,

且s21与s22 相互独立, 故

F

s21{σ

2

1

s22{σ

2

2

F pn1 1, n2 1q. (5-3.3)

所以, 对给定的置信水平1 α, 由

P

(

Fα{2pn1 1, n2 1q ¤

S21

S22

σ22

σ21

¤ F1α{2pn1 1, n2 1q

)

1 α,

经不等式变形即得σ21{σ22的1 α置信区间(

S21

S22

1

F1α{2pn1 1, n2 1q

,

S21

S22

1

Fα{2pn1 1, n2 1q

)

,

其中Fppm,nq为自由度为pm,nq的F分布的下侧p分位数.

R中函数var.test( )可以直接用于求两正态总体方差比的置信区间, 其

调用格式如下:

var.test(x, y, ratio = 1,

var.test( )的调用格式

alternative = c(“two.sided”, “less”, “greater”),

5.3 两正态总体参数的区间估计 167

conf.level = 0.95, …)

在求置信区间时, 我们只需给出两个总体的样本x, y以及相应的置信水平, 选

项alternative用于下一章的假设检验. 我们用下面的例子来说明.

例 5.3.3 甲、乙两台机床分别加工某种轴承, 轴承的直径分别服从正态

分布Npµ1, σ21q和Npµ2, σ22q, 从各自加工的轴承中分别抽取若干个轴承测其直

径, 结果如表5.2所示. 试求两台机床加工的轴承直径的方差比σ21{σ22的0.95置

信区间.

表 5.2 机床加工的轴的直径数据

总体 样本容量 直径

X(机床甲) 8 20.5 19.8 19.7 20.4 20.1 20.0 19.0 19.9

Y (机床乙) 7 20.7 19.8 19.5 20.8 20.4 19.6 20.2

解 R程序如下:

> x<-c(20.5,19.8,19.7,20.4,20.1,20.0,19.0,19.9)

> y<-c(20.7,19.8,19.5,20.8,20.4,19.6,20.2)

> var.test(x,y)

运行结果如下:

F test to compare two variances

data: x and y

F = 0.7932, num df = 7, denom df = 6, p-value = 0.7608

alternative hypothesis: true ratio of variances is not equal to 1

95 percent confidence interval:

0.1392675 4.0600387

sample estimates:

ratio of variances

0.7931937

可见两台机床的加工的轴承的直行的方差比σ21{σ22 的0.95置信区间为(0.1393

,4.0600 ). 结果中sample estimates给出的是方差比σ21{σ22 的矩估计

168 第五章 参数估计

值0.7931937. ¥

§5.4 单总体比率p的区间估计

在许多实际问题中, 我们经常要去估计在总体中具有某种特性的个体占总

体的比例(率), 设为p. 例如, 整个学校中女生(或男生)占全校人数的比例, 一

批产品中合格产品占总产品数的比例, 产品的不合格品率、某一电视节目的收

视率、对某项政策的支持率等等. 关于点估计我们在第一节已经介绍, 这里介

绍一种求p的近似区间估计的方法.

称在样本中具有某种特征的个体占样本总数的比例为样本比例. 设x为容

量为n的样本中具有某种特征的个体数量, 则样本比例为x{n. 当总体中的样品

数足够多时, x近似服从二项分布bpn, pq(实际上它是超几何分布), 这时总体比

例可用样本比例来估计,即pˆ x

n

, 且为极大似然估计. 当n较大时, 由中心极限

定理知pˆ具有渐近正态性, 即

Z

pˆ p√

pp1 pq{n

Np0, 1q.

由于n较大, 所以可用pˆ来代替分母中的p, 从而近似地有

Z

pˆ p√

pˆp1 pˆq{n

Np0, 1q. (5-4.1)

这样由

P pz1α2   Z   z1α2 q 1 α

解不等式即得总体比例p的置信度为1 α的置信区间(

pˆ z1α2



pˆp1 pˆq{n, pˆ  z1α2



pˆp1 pˆq{n

)

同理可得p的置信度为1 α的单侧置信上限为

pˆ  z1α



pˆp1 pˆq{n,

p的置信度为1 α的单侧置信下限为

pˆ z1α



pˆp1 pˆq{n.

5.4 单总体比率p的区间估计 169

在R中, 我们可直利用函数prop.test( )对p进行估计与检验, 其调用格式如

下:

prop.test(x, n, p = NULL,

prop.test( )的调用格式

alternative = c(“two.sided”, “less”, “greater”),

conf.level = 0.95, correct = TRUE)

说明: x为样本中具有某种特性的样本数量, n为样本容量, correct选项为是否

做连续性校正. 根据抽样理论, p的1 α 的近似置信区间为

pˆ z1α2



p1 fqpˆp1 pˆq{pn 1q

1

2n

,

其中f为抽样比. 由于假设样本容量很大, 因此修正后p的置信度为1α的置信

区间近似地为

pˆ z1α2



pˆp1 pˆq{n

1

2n

.

它与刚才用中心极限定理推得的结论相比, 区间长了 1

n

, 这是由于用连续分布

去近似离散分布(超几何分布)引起的.

例 5.4.1 从一份共有3042人的人名录中随机抽200人, 发现38人的地址

已变动, 试以95%的置信度, 估计这份名录中需要修改地址的比例.

解 在R中键入

> prop.test(38,200,correct=TRUE)

得到如下的结果:

1-sample proportions test with continuity correction

data: 38 out of 200, null probability 0.5

X-squared = 75.645, df = 1, p-value < 2.2e-16

alternative hypothesis: true p is not equal to 0.5

95 percent confidence interval:

0.1394851 0.2527281

sample estimates:

p

0.19

170 第五章 参数估计

所以我们以95%的置信水平认为这份名录中需要修改地址的比例p为落

在(0.1395, 0.2527)中, 其点估计为0.19.

如果不进行校正,相应的R语句为:

> prop.test(38,200,correct=FALSE)

结果如下:

1-sample proportions test without continuity correction

data: 38 out of 200, null probability 0.5

X-squared = 76.88, df = 1, p-value < 2.2e-16

alternative hypothesis: true p is not equal to 0.5

95 percent confidence interval:

0.1416717 0.2500124

sample estimates:

p

0.19

此时p的95%置信区间为(0.1417, 0.2500), 其长度比修正的缩短了. ¥

前已指出, 样本中具有某种特性的样本数量x服从超几何分布, 上面我们用

正态分布来近似, 还可以用二项分布来近似超几何分布, 此时要求抽样比f很

小. R中函数binom.test( )可以求其置信区间, 其调用格式如下:

binom.test(x, n, p = NULL,

binom.test( )的调用格式

alternative = c(“two.sided”, “less”, “greater”),

conf.level = 0.95)

其含义和上面的函数prop.test( )一致. 用到上例中, 由

> binom.test(38,200)

得结果如下:

Exact binomial test

data: 38 and 200

number of successes = 38, number of trials = 200, p-value < 2.2e-16

5.5 两总体比率差p1 p2的区间估计 171

alternative hypothesis: true probability of success is not equal to 0.5

95 percent confidence interval:

0.1381031 0.2513315

sample estimates:

probability of success

0.19

可见用二项分布近似所得的p的95%置信区间为(0.1381, 0.2513), 它与修正的

正态近似方法更接近.

§5.5 两总体比率差p1 p2的区间估计

设 有 两 总 体X与Y相 互 独 立(总 体 容 量 都 较 大), 从 中 分 别 抽

取n1和n2个(n1, n2也较大)观察, 结果发现其中各有x1和x2个具有某种特性. 设

总体X与Y中具有上述待性的比率分别为p1和p2, 我们的目的是要估计p1 p2,

我们仅考虑近似正态性下的区间估计问题.

两个总体比例p1和p2的极大似然估计分别为pˆ1 x1n1 , pˆ2 x2n2 . 由上一节,

若n1和n2较大, 则pˆ1, pˆ2近似地服从正态分布:

pˆ1

N

(

p1,

p1p1 p1q

n1

)

, pˆ2

N

(

p2,

p2p1 p2q

n2

)

.

所以

pˆ1 pˆ2

N

(

p1 p2,

p1p1 p1q

n1

 

p2p1 p2q

n2

)

.

标准化, 并用pˆ1, pˆ2分别代替p1, p2, 得到

Z

ppˆ1 pˆ2q pp1 p2q√

pˆ1p1pˆ1q

n1

 

pˆ2p1pˆ2q

n2

Np0, 1q. (5-5.1)

这样由

P pz1α2   Z   z1α2 q 1 α,

通过不等式变形即得两比例差p1 p2的置信水平为1 α的区间估计:

ppˆ1 pˆ2q z1α2



pˆ1p1 pˆ1q

n1

 

pˆ2p1 pˆ2q

n2

.

172 第五章 参数估计

同理可得p1 p2的置信水平为1 α的单侧置信上限为

ppˆ1 pˆ2q   z1α



pˆ1p1 pˆ1q

n1

 

pˆ2p1 pˆ2q

n2

,

p1 p2的置信水平为1 α的单侧下限为

ppˆ1 pˆ2q z1α



pˆ1p1 pˆ1q

n1

 

pˆ2p1 pˆ2q

n2

.

例 5.5.1 据一项市场调查, 在A地区被调查的1000人中有478人喜欢

品牌K, 在B地区被调查750中有246人喜欢品牌K, 试估计两地区人们喜欢品

牌K比例差的95%置信区间.

解 可以利用R中的内置函数prop.test( )求两总体的比例差的置信区

间, R中运行

> like<-c(478, 246)

> people<-c(1000, 750)

> prop.test(like, people)

得结果如下:

2-sample test for equality of proportions

with continuity correction

data: like out of people

X-squared = 39.1394, df = 1, p-value = 3.946e-10

alternative hypothesis: two.sided

95 percent confidence interval:

0.1031446 0.1968554

sample estimates:

prop 1 prop 2

0.478 0.328

可以看出A地区喜欢品牌K的人更多, 且A、B两地区喜欢品牌K的比例之差

的95%的置信区间为(0.1031, 0.1969). ¥

注:

ˆ 同单样本一样, 上面的结果实际上是经过连续性修改后得到的;

5.6 样本容量的确定 173

ˆ 由上面的公式, 我们也可以自己编写没有修正的两比例之间的区间估计

函数ratio.ci( ):

ratio.ci<-function(x, y, n1, n2, conf.level=0.95){

ratio.ci( )的定义

xbar1=x/n1;xbar2=y/n2

xbar=xbar1-xbar2

alpha = 1 – conf.level

zstar=qnorm(1-alpha/2)

*(xbar1*(1-xbar1)/n1+xbar2*(1-xbar2)/n2)^(1/2)

xbar +c(-zstar, +zstar)

}

用到上例中, 运行

> ratio.ci(478,246,1000,750,conf.level=0.95)

[1] 0.1043112 0.1956888

因此, 这时两比例之差的95%的置信区间为(0.1043, 0.1957), 其长度修正

下的结果略小了些.

§5.6 样本容量的确定

确定样本容量n是抽样中的一个重要问题. 样本容量抽取过少会丢失样本

信息, 会导致误差太大而不满足要求; 若样本抽取太多, 虽然各种信息都包含

了, 误差也降低了, 但同时会增加所需的人力、物力和费用开销. 所以权衡两

者, 我们要抽取适当数量的样本.

5.6.1 估计正态总体均值时样本容量的确定

设总体X的均值为µ, 方差为σ2, 一般估计总体的均值时, 我们提出这样的

精度要求, 以置信度1 α, 允许均值的最大绝对误差为d, 即

P p|X µ| ¤ dq 1 α.

下面考虑总体X为正态(或近似正态)分布场合, 估计均值µ时所需的样本容量,

我们分两种情况进行讨论.

174 第五章 参数估计

1.总体方差σ2 已知

令σ2 σ20 , 则由

X µ

σ0{



n

Np0, 1q



P

(

|X µ|

σ0{



n

 

d

σ0{



n

)

1 α

所以

n

(z1α2 σ0

d

)2

. (5-6.1)

在R中可以定义如下的函数size.norm1( )求样本容量:

size.norm1<-function(d,var,conf.level) {

size.norm1( )的定义

alpha = 1 – conf.level

((qnorm(1-alpha/2)*var^(1/2))/d)^2

}

例 5.6.1 某地区有10000户, 拟抽取一个简单的样本调查一个月的平

均开支, 要求置信度为95%, 最大允许误差为2, 根据经验, 家庭间开支的方差

为500, 应抽取多少户进行调查?

> size.norm1(2,500,conf.level=0.95)

[1] 480.1824

所以应该抽取481户.

2.总体方差σ2未知

当σ2未知时, 由

P

(

|X µ|

s{



n

 

d

s{



n

)

1 α



n

(

t1α2 pn 1qs

d

)2

. (5-6.2)

5.6 样本容量的确定 175

注意到, t1α2 pn 1q 的值是随自由度pn 1q而变化的, 也就是说t1α2 pn 1q

的值原本就与样本容量n有关. 这样在n未确定之前t1α2 pn 1q 的值也是未知

的. 在这种情况之下, 一般用尝试法, 先将一个非常大的自由度代入(相当于

用z1α{2代替t1α{2pn 1q求出n1, 然后再将n1代入t1α2 pn 1q求出n2, 重复此

法直至先后两次所求得的n几乎相等为止, 最后的n2就是要确定的样本容量.

在R中我们可以通过循环确定样本容量:

size.norm2<-function(s,alpha,d,m){

size.norm2( )的定义

t0<-qt(alpha/2,m,lower.tail=FALSE)

n0<-(t0*s/d)^2

t1<-qt(alpha/2,n0,lower.tail=FALSE)

n1<-(t1*s/d)^2

while(abs(n1-n0)>0.5){

n0<-(qt(alpha/2,n1,lower.tail=FALSE)*s/d)^2

n1<-(qt(alpha/2,n0,lower.tail=FALSE)*s/d)^2

}

n1

}

说明: m是事先给定的一个很大的数.

例 5.6.2 某公司生产了一批新产品, 产品总体服从正态分布, 现要估计

这批产品的平均重量, 最大允许误差2, 样本标准差s 10, 试问α 0.01下要

抽取多少样本?

解 R中的程序:

> size.norm2(10,0.01,2,100)

[1] 169.6658

也就是说在最大允许误差为2的时候应抽取170个样本. ¥ 对估计量精度的要

求还有别的提出方法, 比如要求均值的最大相对误差为γ或者是变异系数不超

过√c. 类似地, 我们可以求出样本容量的表达式, 据此通过R求解.

176 第五章 参数估计

5.6.2 估计比例p时样本容量的确定

在样本容量较大的条件下, 样本比例pˆ的近似服从正态分布, 也即

pˆ p√

pp1 pq{n

Np0, 1q.

在置信水平1 α下, 若允许比例的最大绝对误差为d, 则由

P

(

|pˆ p|√

pp1 pq{n

 

d√

pp1 pq{n

)

1 α,

从而

n

(z1α2

d

)2

pp1 pq. (5-6.3)

如果根据经验, 能给出p的一个粗略的估计值或者知道p的取值范围, 问题就能

解决. (取值范围包括0.5时, 取p 0.5, 反之, 取接近0.5的值, 这样我们可以得

到n的一个较为保守的值, 因为pp1 pq ¤ 1{4.) 如果对p没有任何先验知识时,

取p 0.5.

在R中我们这样实现:

size.bin<-function(d, p, conf.level=0.95) {

size.bin( )的定义

alpha = 1 – conf.level

((qnorm(1-alpha/2))/d)^2*p*(1-p)

}

例 5.6.3 某市一所重点大学历届毕业生就业率为90%, 试估计应届毕

业生就业率,要求估计误差不超过3%,试问在α 0.05下要抽取应届毕业生多少

人?

解 R中的程序:

> size.bin(0.03, 0.9, 0.95)

[1] 384.1459

所以在α 0.05下要抽取应届毕业生385人估计误差不超过3%. ¥

5.6 样本容量的确定 177

第五章习题

5.1 设总体X是用无线电测距仪测量距离的误差, 它服从pα, βq 上的均匀分

布, 在200次测量中, 误差为Xi 的次数有ni次:

Xi 3 5 7 9 11 13 15 17 19 21

ni 21 16 15 26 22 14 21 22 18 25

求α, β 的矩法估计值(注: 这里的测量误差为Xi 是指测量误差在pXi 1, Xi  

1q间的代表值.)

5.2 为检验某自来水消毒设备的效果,现从消毒后的水中随机抽取50L,化

验每升水中大肠杆菌的个数(假设1L水中大肠杆菌个数服从泊松分布), 其化验

结果如下

大肠杆菌数/L 0 1 2 3 4 5 6

水的升数 17 20 10 2 1 0 0

试问平均每升水中大肠杆菌个数为多少时,才能使上述情况的概率达到最大?

5.3 已知某种木材的横纹抗压力服从Npµ, σ2q, 现对十个试件作横纹抗压力

试验,得数据如下(kg/cm2):

482, 493, 457, 471, 510, 446, 435, 418, 394, 469

1) 求µ 的置信水平为0.95的置信区间.

2) 求σ 的置信水平为0.90的置信区间.

5.4 某卷烟厂生产两种卷烟A和B,现分别对两种香烟的尼古丁含量进行6次

试验,结果如下

卷烟A 25 28 23 26 29 22

卷烟B 28 23 30 35 21 27

若香烟的尼古丁含量服从正态分布,

1) 问两种卷烟中尼古丁含量的方差是否相等?

2) 试求两种香烟的尼古丁平均含量差的95%置信区间.

178 第五章 参数估计

5.5 比较两个小麦品种的产量, 选择22块条件相似地试验田, 采用相同的耕

作方法做实验, 结果播种甲品种的12块实验田的单位面积产量和播种乙品种

的12块实验田的单位面积产量分别为:

甲品种 628 583 510 554 612 523 530 615 573 603 334 564

乙品种 535 433 398 470 567 480 498 560 503 426 338 547

假定每个品种的单位面积产量均服从正态分布,甲品种产量的方差为2140, 乙

品种产量的方差为3250, 试求这两个品种平均面积产量差的置信水平为0.95的

置信上限和置信水平为0.90的置信下限.

5.6 有两台机床生产同一型号的滚珠,根据以往经验知,这两台机床生产的

滚珠直径都服从正态分布. 现分别从这两台机床生产的滚珠中随机地抽取7个

和9个,测得它们的直径如下(单位: mmm)

机床甲 15.2 14.5 15.5 14.8 15.1 15.6 14.7

机床乙 15.2 15.0 14.8 15.2 15.0 14.9 15.1 14.8 15.3

试问机床乙生产的滚珠的方差是否比机床甲生产的滚珠直径的方差小?

5.7 某公司对本公司生产的两种自行车型号A、B的销售情况进行了了解,

随机选取了400人询问他们对A、B的选择, 其中有224人喜欢A, 试求顾客中喜

欢A的人数比例p的置信水平为0.99的区间估计.

5.8 某公司生产了一批新产品, 产品总体服从正态分布, 现要估计这批产品

的平均重量, 最大允许误差为1, 样本标准差s 10, 试问在0.95的置信度下至

少要抽取多少个产品?

5.9 根据以往的经验,船运大量玻璃器皿,损坏率不超过5%. 现要估计某船

中玻璃器皿的损坏率,要求估计与真值间不超过1%, 且置信度为0.90, 那么要

抽取多少样本验收可满足上述要求?

第六章 参数的假设检验

本章概要

♦ 假设检验的基本思想与检验的p值

♦ 正态总体均值和方差的假设检验

♦ 两正态总体均值和方差的比较

♦ 成对数据的假设检验

♦ 比例的检验与两比例的比较

上一章介绍了参数的点估计与区间估计的构造方法. 统计推断的另一重

要内容是假设检验. 先对总体的某个未知参数或总体的分布形式作某种假设,

然后由抽取的样本提供的信息, 构造合适的统计量, 对所提供的假设进行检验,

以做出统计判断是接受假设还是拒绝假设, 这类统计推断问题称为假设检验问

题, 前者称为参数假设检验, 后者称为非参数假设检验. 我们在本章和第七章

中分别加以介绍.

§6.1 假设检验与检验的p值

6.1.1 假设检验的概念与步骤

统计假设

下面先通过几个例子来说明什么是假设检验.

例 6.1.1 微波炉在炉门关闭时的辐射量是一个重要的质量指标. 设该

指标服从正态分布Npµ, 0.12q, 均值要求不超过0.12. 为检查近期产品的质量,

从某厂生产的微波炉中抽查了25台, 得其炉门关闭时辐射量的均值X 0.13,

180 第六章 参数的假设检验

问该厂生产的微波炉炉门关闭时辐射量是否偏高?

本例是希望通过样本检验炉门关闭时辐射量是否高于0.12.

例 6.1.2 某车间用一台包装机包装精盐, 额定标准每袋净重500g, 设包

装机包装出的盐每袋净重X Npµ, σ2q, 某天随机地抽取9袋, 称得净重为490,

506, 508, 502, 498, 511, 510, 515, 512. 问该包装机工作是否正常?

本例是希望通过样本检验包装机包装的盐的平均重量是否是500g.

以上两个例子都是参数的假设检验. 我们把施加于一个或多个总体的概率

分布或参数上的假设称为统计假设, 简称假设. 所作的假设可以是真的, 也可

能是假的. 为了判断一个统计假设是否正确, 需要作检验. 我们把判断统计假

设是否正确的方法称为统计假设检验, 简称为统计检验.

假设检验的基本思想

1) 假设检验的基本思想

无论是怎样的假设, 假设检验的思想是一样的, 就是所谓概率性质的反证

法. 其根据是实际推断原理: 小概率事件在一次实验中是几乎不可能发

生的. 进一步讲, 要检验某假设H0, 先假设H0正确, 在此假设下构造某一

事件A, 它在H0为正确的条件下的概率很小, 例如P pA|H0q αp 0.05q.

现在进行一次实验, 如果事件A发生了, 也就是说小概率事件在一次实验

中居然发生了, 这与实际推断原理相矛盾, 这表明“假定H0为正确”是错

误的, 因而拒绝H0; 反之, 如果小概率事件没有发生, 我们就没有理由拒

绝H0, 通常就接受H0.

通常称“结论”成立的假设为原假设(又称零假设), 记为H0; 与之对立的

假设为备择假设(又称对立假设), 记为H1. 我们将一个假设检验问题简

记为H0 Ø H1. 例如, 例6.1.1中的假设检验问题为H0 : µ ¤ 0.12 Ø H1 :

µ ¡ 0.12.

值得注意的是:

ˆ 小概率事件在一次实验中发生与实际推断原理相矛盾, 这种矛盾并

不是形式逻辑中的绝对矛盾, 因为“小概率事件在一次实验中几乎

是不会发生的”, 并不意味着“小概率事件在一次实验中绝对不会发

生”. 因此, 根据概率性质的反证法得出的接受H0或拒绝H0的决策,

并不等于我们证明了原假设H0正确或错误, 而只是根据样本所提供

的信息以一定的可靠程度认为H0正确或错误.

6.1 假设检验与检验的p值 181

ˆ 原假设与备择假设并不对称或可以交换, 它们在假设检验中的地位

是不同的. 原假设与备择假设的建立主要根据具体问题来决定的.

常把没有把握不能轻易肯定的命题作为备择假设, 而把没有充分理

由不能轻易否定的命题作原假设, 只有理由充分时才拒绝它, 否则应

予以保留.

2) 两类错误

从主观上讲, 我们总希望经过假设检验, 能作出正确的判断, 即若H0确实

为真, 则接受H0;若H0确实为假, 则拒绝H0 . 但在客观上, 我们是根据样

本所确定的统计量之值来推断的, 由于样本的随机性, 在推断时就不免

要犯错误. 因为当H0 正确时, 小概率事件也有可能发生而非绝对不可能

发生, 这时我们却错误地否定了H0. 这种“弃真”的错误, 称之为第一类

错误; 由上所述, 犯第一类错误的概率为Pp拒绝H0|H0为真q α. 还有可

能犯“取伪”的错误, 称之为第二类错误, 就是当H0 不真, 但我们却接受

了H0. 犯第二类错误的概率为Pp接受H0|H0为假q β.

我们当然希望犯两类错误的概率都很小, 但是在样本容量固定时是办不

到的. 通常把解决这一问题的原则简化成只对第一类错误的最大概率α加

以限制, 而不考虑犯第二类错误地概率β. 这种统计假设检验问题称为显

著性检验, 并将犯第一类错误地最大概率α 称为假设检验的显著性水平.

本书仅讨论显著性检验.

3) 检验步骤

先介绍接收域、拒绝域的概念: 对于一个检验问题H0 Ø H1, 当检验统

计量W取某区域C中的值时, 我们拒绝原假设H0, 则称区域C为H0关于

统计量W的拒绝域. 拒绝域的边界点称为临界点(或临界值). 当检验

统计量W取某区域C中的值时, 我们无法拒绝(接受)原假设H0, 则称区

域C为H0关于统计量W的接受域.

由以上的讨论, 我们归纳得到假设检验的主要步骤:

1) 提出原假设H0与备择假设H1;

2) 选择检验统计量W并确定其分布;

3) 在给定的显著性水平下, 确定H0关于统计量W的拒绝域;

4) 算出样本点对应的检验统计量的值;

5) 判断: 若统计量的值落在拒绝域内, 则拒绝H0, 否则接受H0.

182 第六章 参数的假设检验

6.1.2 检验的p值

定义 6.1.1 在一个假设检验问题中, 拒绝原假设H0的最小显著性水平

称为检验的p值.

从定义可知p值表示对原假设的怀疑程度, 或解释为首次拒绝原假设的概

率. p值越小, 表示原假设越可疑, 从而越应拒绝原假设. p值的具体计算依赖

于原假设、统计量的分布及其观测值. 现有的统计软件, 包括R都提供了检验

的p值.

引入检验的p值有明显的好处. 第一, 它比较客观地避免了事先确定显著

性水平; 其次, 由检验的p值与人们心目中的显著性水平α进行比较可以很容易

做出检验的结论: 如果α ¥ p, 则在显著性水平α下拒绝H0; 如果α   p, 则在显

著性水平α下保留H0.

§6.2 单正态总体参数的检验

在实际中, 很多现象都可以近似地用正态分布描述, 因此关于正态分布参

数均值和方差的检验, 是实际中常见的统计问题. 这一节先介绍单正态总体中

的假设检验问题, 下一节考虑两正态总体中的假设检验问题.

假设总体X Npµ, σ2q,X1, , Xn是来自此正态总体的一个样本, X

1

n

∑n

i1Xi为其样本均值, S2

1

n 1

∑n

i1pXi Xq

2为其样本方差.

6.2.1 均值µ的假设检验

1.方差σ2已知时µ的检验: Z检验

设方差σ2 σ20已知,考虑假设检验问题:

1) H0 : µ µ0 ÐÑ H1 : µ µ0(双边假设检验)

2) H0 : µ ¤ µ0 ÐÑ H1 : µ ¡ µ0(单边假设检验)

3) H0 : µ ¥ µ0 ÐÑ H1 : µ   µ0(单边假设检验)

6.2 单正态总体参数的检验 183

在µ µ0下可得

Z

X µ0

σ0{



n

Np0, 1q (6-2.1)

对于检验问题1), 若X偏离µ0(或左或右)均会倾向于拒绝原假设H0, 从而

接受对立假设H1 , 所以此问题的拒绝域为

C1 {|Z| ¡ z1α{2}.

对于检验问题2), 若X大于µ0, 则会倾向于拒绝原假设H0, 从而接受对立

假设H1, 所以此问题的拒绝域为

C2 {Z ¡ z1α}.

对于检验问题3), 若X大于µ0, 则会倾向于拒绝原假设H0, 从而接受对立

假设H1, 所以此问题的拒绝域为

C3 {Z   z1α}.

R程序在读入数据后, 还需要:

ˆ 指定显著性水平α、原假设中的均值µ0和已知的总体标准差σ0;

ˆ 按上式计算出统计量Z的值;

ˆ 计算p值.

设Zobs表示统计量Z的观测值, 则对于上述三个假设检验问题, 相应的p值

分别为:

1) P1 P p|Z| ¡ |Zobs|q

2) P2 P pZ ¡ Zobsq

3) P3 P pZ   Zobsq

R中没有直接的函数来做方差已知时均值的检验, 需自己编写. 这里我们

直接引用§5.2.1中做方差已知时均值的置信区间的函数z.test( ).

例 6.2.1 在显著性水平α 0.05下, 讨论例6.1.1的假设检验问题.

解 R程序如下:

184 第六章 参数的假设检验

> z.test(0.13, 25, 0.1, 0.05, u0=0.12, alternative=”less”)

运行结果为:

$mean

[1] 0.13

$z

[1] 0.5

$p.value

[1] 0.3085

$conf.int

[1] 0.0908 0.1692

结论: 因为p值=0.6915¡ α 0.05, 故接收原假设, 认为炉门关闭时辐射量没有

偏高. ¥

2.方差σ2未知时µ的检验: t检验

设方差σ2未知. 仍考虑假设检验问题1)、2)和3), 这时在µ µ0下可得:

T

X µ0

S{



n

tpn 1q (6-2.2)

由此得三个假设检验问题的拒绝域分别为:

C1 {|T | ¡ t1α{2pn 1q}

C2 {T ¡ t1αpn1q}

C3 {T   t1αpn1q}

与方差已知的情形相比, 我们并不需要复杂的编程, 直接利用R语言

的t.test( )函数就可完成原假设的检验. t.test( )的调用格式见§5.2.1, 这

里不再重复.

例 6.2.2 在显著性水平α 0.05下, 讨论例6.1.2的假设检验问题.

解 R程序如下:

> salt<-c(490 , 506, 508, 502, 498, 511, 510, 515 , 512)

> t.test(salt, mu=500)

6.2 单正态总体参数的检验 185

运行结果为:

One Sample t-test

data: salt

t = 2.198, df = 8, p-value = 0.05919

alternative hypothesis: true mean is not equal to 500

95 percent confidence interval:

499.7 511.8

sample estimates:

mean of x

505.8

结论: 因为p值=0.05919¡ α 0.05, 故接收原假设, 认为该包装机正常. ¥

例 6.2.3 已知某种水样中CaCO3的真值为20.7mg/L, 现用某种方法重

复测定该水样11次, CaCO3的含量为: 20.9, 20.41, 20.10, 20.00, 20.19, 22.60,

20.99, 20.41, 20, 23, 22. 问用该法测定的CaCO3含量的均值与真值有无显著

差异? (显著性水平为0.05)

解 R程序如下:

> CaCo3<-c(20.9, 20.41, 20.10, 20.00, 20.19,

22.60, 20.99, 20.41, 20, 23, 22)

> t.test(CaCo3, mu=20.7)

运行结果为:

One Sample t-test

data: CaCo3

t = 0.8078, df = 10, p-value = 0.438

alternative hypothesis: true mean is not equal to 20.7

95 percent confidence interval:

20.24 21.69

sample estimates:

mean of x

20.96

186 第六章 参数的假设检验

结论: 因为p值=0.3125¡ α 0.05, 故认为此法所测定的水中CaCO3的含量的

均值与真值无显著差异, 故此法可信. ¥

6.2.2 方差σ2的检验: χ2检验

考虑假设检验问题:

1) H0 : σ2 σ02 ÐÑ H1 : σ2 σ02(双边假设检验)

2) H0 : σ2 ¤ σ02 ÐÑ H1 : σ2 ¡ σ02(单边假设检验)

3) H0 : σ2 ¥ σ02 ÐÑ H1 : σ2   σ02(单边假设检验)

这时在σ2 σ02下可得:

χ2

pn 1qS2

σ02

χ2pn 1q (6-2.3)

由此得三个假设检验问题的拒绝域分别为:

C1 {χ2 ¥ χ21α{2pn 1q 或χ2 ¤ χ2α{2pn 1q}

C2 {χ2 ¥ χ21αpn 1q}

C3 {χ2 ¤ χ2αpn 1q}

在R中 没 有 直 接 的 函 数 来 做χ2检 验, 但§5.2.2中 编 写 的 函

数chisq.var.test( ) 可用于求单样本方差的检验.

例 6.2.4 检查一批保险丝, 抽出10根测量其通过强电流熔化所需的时

间(单位: 秒)为: 42, 65, 75, 78, 59, 71, 57, 68, 54, 55. 假设熔化所需时间服从

正态分布, 问能否认为熔化时间方差不超过80 (取α 0.05).

解 R程序如下:

> time<-c(42, 65, 75, 78, 59, 71, 57, 68, 54, 55)

> chisq.var.test(time, 80, 0.05, alternative=”less”)

运行结果为:

$var

6.3 两正态总体参数的检验 187

[1] 121.8

$chi2

[1] 13.71

$p.value

[1] 0.8668

$conf.int

[1] 57.64 406.02

结论: 因为p值=0.8668¡ α 0.05, 故接收原假设, 认为熔化时间方差不超

过80. ¥

§6.3 两正态总体参数的检验

上节讨论了单个正态总体参数的显著性检验, 它是把样本统计量的观察值

与原假设所提供的总体参数作比较, 这种检验要求我们事先能提出合理的参数

假设值, 并对参数有某种意义的备择值, 但在实际工作中很难做到这一点, 因

而限制了这种方法在实际中的应用.实际中常常选择两个样本, 一个作为处理,

一个作为对照, 在两个样本之间作比较. 比如, 要比较某班男生的成绩是否比

女生的高, 服用某种维生素的人是否比不服用的人不易感冒, 或判断它们之间

是否存在明显显著的差异, 等等.

设总体X与Y独立, X Npµ1, σ21q, Y Npµ2, σ22q, X1, , Xn1是来自总

体X的样本, X 1

n1

∑n1

i1Xi为其样本均值, S21

1

n1 1

∑n1

i1pXi Xq

2为

其样本方差. Y1, , Yn2是来自总体Y的样本, Y 1n2

∑n2

i1 Yi为其样本均值,

S22

1

n2 1

∑n2

i1pYi Y q

2为其样本方差.

6.3.1 均值的比较: t检验

设两正态总体的方差相等, 即σ12 σ22 σ2. 考虑假设检验问题:

1) H0 : µ1 µ2 ÐÑ H1 : µ1 µ2(双边假设检验)

2) H0 : µ1 ¤ µ2 ÐÑ H1 : µ1 ¡ µ2(单边假设检验)

3) H0 : µ1 ¥ µ2 ÐÑ H1 : µ  1 µ2(单边假设检验)

188 第六章 参数的假设检验

这时在µ1 µ2下可得:

T

px¯ y¯q pµ1 µ2q√

p

1

n1

 

1

n2

qs2

tpn1   n2 2q (6-3.1)

由此得三个假设检验问题的拒绝域分别为:

C1 {|T | ¡ t1α{2pn1   n2 2q}

C2 {T ¡ t1αpn1 n22q}

C3 {T   t1αpn1 n22q}

在R语言中可以直接利用t.test( )函数完成原假设的检验.

例 6.3.1 甲、乙两台机床分别加工某种轴承, 轴承的直径分别服从

正态分布Npµ1, σ21q和Npµ2, σ22q, 从各自加工的轴承中分别抽取若干个轴承测

其直径, 结果如表6.1所示. 设σ21 σ22 , 问两台机床的加工精度有无显著差

异?(取α 0.05)

表 6.1 机床加工的轴的直径数据

总体 样本容量 直径

X(机床甲) 8 20.5 19.8 19.7 20.4 20.1 20.0 19.0 19.9

Y (机床乙) 7 20.7 19.8 19.5 20.8 20.4 19.6 20.2

解 R程序如下:

> x<-c(20.5, 19.8, 19.7, 20.4, 20.1, 20.0, 19.0, 19.9)

> y<-c(20.7, 19.8, 19.5, 20.8, 20.4, 19.6, 20.2)

> t.test(x, y, var.equal=TRUE)

运行结果为:

Two Sample t-test

data: x and y

t = -0.8548, df = 13, p-value = 0.4081

alternative hypothesis: true difference in means is not equal to 0

6.3 两正态总体参数的检验 189

95 percent confidence interval:

-0.7684249 0.3327106

sample estimates:

mean of x mean of y

19.92500 20.14286

结论: 因为p值=0.4081¡ α 0.05, 故接收原假设, 认为两台机床的加工精度无

显著差异. ¥

6.3.2 方差的比较: F检验

考虑假设检验问题:

1) H0 : σ12 σ22 ÐÑ H1 : σ12 σ22(双边假设检验)

2) H0 : σ12 ¤ σ22 ÐÑ H1 : σ12 ¡ σ22(单边假设检验)

3) H0 : σ12 ¥ σ22 ÐÑ H1 : σ12   σ22(单边假设检验)

这时在σ12 σ22下可得:

F

S1

2

S22

F pn1 1, n2 1q (6-3.2)

由此得三个假设检验问题的拒绝域分别为:

C1 {F ¥ F1α{2pn1 1, n2 1q 或F ¤ Fα{2pn1 1, n2 1q}

C2 {F ¥ F1αpn1 1, n2 1q}

C3 {F ¤ Fαpn1 1, n2 1q}

R语言中的var.test( )函数可完成两样本的F检验. var.test( )的调

用格式见§5.3.2.

例 6.3.2 数据同例6.3.1, 问两台机床加工的轴的直径的方差是不是相

同?

解 R程序如下:

> x<-c(20.5, 19.8, 19.7, 20.4, 20.1, 20.0, 19.0, 19.9)

> y<-c(20.7, 19.8, 19.5, 20.8, 20.4, 19.6, 20.2)

> var.test(x, y)

190 第六章 参数的假设检验

运行结果为:

F test to compare two variances

data: x and y

F = 0.7932, num df = 7, denom df = 6, p-value = 0.7608

alternative hypothesis: true ratio of variances is not equal to 1

95 percent confidence interval:

0.1392675 4.0600387

sample estimates:

ratio of variances

0.7931937

结论: 因为p值=0.7608¡ α 0.05, 故接收原假设, 认为两台机床加工的轴的直

径的方差相同. ¥

从本例也可知, 例6.3.1中做方差相同的假设是没有问题的. 以后在做两样

本的均值检验时要先做方差齐性检验. 如果方差相等不满足, 则t.test( )函

数中使用选项var.equal=FALSE. 方差不等时均值检验问题还没有完全解决,

其近似检验方法请参看文献[1].

§6.4 成对数据的t检验

上一节我们提过, 对一般情况下的两样本均值检验还没有完全解决. 本节

考虑一种特殊的情况: 两样本成对数据的t检验. 所谓成对数据, 是指两个样本

的样本容量相等, 且两个样本之间除均值之外没有另的差异. 例如比较某一班

同一单元内容的第二次考试是否比第一次的高? 同一个人在服用某种维生素

后是否比未服用之前不易感冒? 这就是成对数据的比较检验.

设X1, , Xn是来自总体X的样本, Y1, , Yn是来自总体Y的样本, 定义:

Zi XiYipi 1, 2, , nq,记µ µ1µ2, σ2 σ21 σ22 ,则Z1, Z2, , Zn为

总体Z Npµ, σ2q的样本. 此时, µ1与µ2的检验问题等价于µ的检验问题. 因此

由单正态总体均值的假设检验知, 假设检验问题

1) H0 : µ µ0 ÐÑ H1 : µ µ0(双边假设检验)

2) H0 : µ ¤ µ0 ÐÑ H1 : µ ¡ µ0(单边假设检验)

6.4 成对数据的t检验 191

3) H0 : µ ¥ µ0 ÐÑ H1 : µ   µ0(单边假设检验)

的拒绝域分别为:

C1 {|T | ¡ tα{2pn 1q}

C2 {T ¡ tαpn 1q}

C3 {T   tαpn 1q}

其中µ µ0下

T

Z µ0

S{



n

tpn 1q (6-4.1)

Z和S分别表示总体Z的样本均值和样本标准差.

在R语言中可以直接利用t.test( )函数增加选项paired=TRUE完成原假

设的显著性检验. 下面通过例子来说明具体的用法.

例 6.4.1 在针织品漂白工艺过程中, 要考虑温度对针织品断裂强力(主

要质量指标)的影响. 为了比较70℃与80℃的影响有无差别, 在这两个温度下,

分别重复做了8次试验, 得数据如表6.2所示(单位: N):根据经验, 温度对针织

表 6.2 温度对针织品断裂强力的影响数据

70℃时的强力 20.5 18.8 19.8 20.9 21.5 19.5 21.0 21.2

80℃时的强力 17.7 20.3 20.0 18.8 19.0 20.1 20.0 19.1

品断裂强度的波动没有影响. 问在70℃时的平均断裂强力与80℃时的平均断裂

强力间是否有显著差别? 假定断裂强力服从正态分布(α 0.05)

解 R程序如下:

> x<-c(20.5, 18.8, 19.8, 20.9, 21.5, 19.5, 21.0, 21.2)

> y<-c(17.7, 20.3, 20.0, 18.8, 19.0, 20.1, 20.0, 19.1)

> t.test(x, y, paired=TRUE)

运行结果为:

Paired t-test

data: x and y

192 第六章 参数的假设检验

t = 1.8002, df = 7, p-value = 0.1149

alternative hypothesis: true difference in means is not equal to 0

95 percent confidence interval:

-0.3213757 2.3713757

sample estimates:

mean of the differences

1.025

结论: 因为p值=0.1149¡ α 0.05, 故接收原假设, 认为在70℃时的平均断裂强

力与80℃时的平均断裂强力间无显著差别. ¥

除了用t.test( )函数完成原假设的检验外, R中还可以用DAAG包中

的onesamp( )函数来完成检验, onesamp( )函数的调用格式如下:

onesamp(dset=corn, x=”unsprayed”, y=”sprayed”, xlab=NULL,

onesamp( )的调用格式

ylab=NULL, dubious=NULL, conv=NULL, dig=2)

说明: codedset为有两列的数据框或矩阵; x为处于“predictor”地位的列名;

y为处于“response”地位的列名.

下面用onesamp( )函数来做上面的例子.

R程序如下:

> data.x<-c(20.5, 18.8, 19.8, 20.9, 21.5, 19.5, 21.0, 21.2)

> data.y<-c(17.7, 20.3, 20.0, 18.8, 19.0, 20.1, 20.0, 19.1)

> z<-data.frame(data.x, data.y)

> onesamp(z, x=”data.y”, y=”data.x”)

运行结果为:

data.x 0.941124 0.8876132 1.610457

One Sample t-test

data: d

t = 1.8002, df = 7, p-value = 0.1149

alternative hypothesis: true mean is not equal to 0

95 percent confidence interval:

6.5 单样本比率的检验 193

-0.3213757 2.3713757

sample estimates:

mean of x

1.025

所得结论与前面相同.

§6.5 单样本比率的检验

设X1, X2, . . . , Xn为来自二点分布(贝努里分布)binomp1, pq的样本, 则T

n∑

i1

Xi binompn, pq.

6.5.1 比率p的精确检验

考虑假设检验问题:

1) H0 : p p0 ÐÑ H1 : p p0(双边假设检验)

2) H0 : p ¤ p0 ÐÑ H1 : p ¡ p0(单边假设检验)

3) H0 : p ¥ p0 ÐÑ H1 : p   p0(单边假设检验)

基于统计量T

n∑

i1

Xi作检验, 上述三个检验问题拒绝域分别有如下形式:

C1 {T ¤ c1或T ¥ c2}, c1   c2;

C2 T ¥ c;

C3 T ¤ c

1.

为获得水平为α的检验, 需要定出各拒绝域中的临界值c, c1, c1, c2. 下面仅

以检验问题2)来说明两种确定临界值的方法.

利用二项分布来确定临界值

对于检验问题2), c是满足下式的最小整数:

P pT ¥ cq

n∑

ic

(

n

d

)

pi0p1 p0q

ni

¤ α (6-5.1)

194 第六章 参数的假设检验

用F分布来确定临界值

根据二项分布与F分布之间的关系

n∑

ic

(

n

d

)

pi0 (1 p0)

ni

F

(

n2

n1

p0

1 p0

;n1, n2

)

(6-5.2)

右端是自由度为n1, n2的F分布的分布函数在n2

n1

p0

1 p0

处的值, n1 2c, n2

2pn c  1q. 这样为求出使(6-5.1)式成立的最小整数c等价于求使Fαpn1, n2q ¥

n2p0

n1p1 p0q

成立的最小整数c.

R语言中的binom.test( )函数可完成原假设的检验. binom.test( )的

调用格式见§5.4.

6.5.2 比率p的近似检验

在样本容量较大时, 比例p的抽样分布可近似地服从正态分布, 因此我们可

将问题转化为正态分布处理. 考虑上述假设检验问题, 在p p0条件下构造统

计量

Z

pˆ p0√

p0p1 p0q{n

Np0, 1q (6-5.3)

其中pˆ T

n

. 由此上述三个检验问题的拒绝域分别为:

1) C1 {|Z| ¡ z1α2 }

2) C2 {Z ¡ z1α}

3) C3 {Z   z1α}

R语言中的prop.test( )函数可完成原假设的检验. prop.test( )的调

用格式见§5.4.

例 6.5.1 某产品的优质品率一直保持在40%,近期技监部门抽查了12件

产品, 其中优质品为5件, 问在α 0.05水平上能否认为其优质品率仍保持

在40%?

解 由于本例的样本容量不大, 不适合用大样本的方法来处理, 故我们

对p做精确检验. R程序如下:

6.5 单样本比率的检验 195

> binom.test(c(7, 5), p=0.4)

运行结果为:

Exact binomial test

data: c(7, 5)

number of successes = 7, number of trials = 12, p-value = 0.2417

alternative hypothesis:

true probability of success is not equal to 0.4

95 percent confidence interval:

0.2766697 0.8483478

sample estimates:

probability of success

0.5833333

结论: 因为p值=0.2417¡ α 0.05, 故接收原假设, 认为该产品的优质品率仍保

持在40%.

同样的, 我们也可以用prop.test( )进行检验. R程序如下:

> prop.test(7, 12, p=0.4, correct=TRUE)

运行结果为:

1-sample proportions test with continuity correction

data: 7 out of 12, null probability 0.4

X-squared = 1.0035, df = 1, p-value = 0.3165

alternative hypothesis: true p is not equal to 0.4

95 percent confidence interval:

0.2859928 0.8350075

sample estimates:

p

0.5833333

Warning message:

In prop.test(7, 12, p = 0.4, correct = TRUE) :

Chi-squared approximation may be incorrect

196 第六章 参数的假设检验

结论: 因为p值=0.3165¡ α 0.05, 故接收原假设, 认为该产品的优质品率仍保

持在40%.

说明: 当样本容量较小而做近似检验时, R输出的结果会有警告信

息pwarning messageq:Chi-squared近似算法有可能不准. 在R中, 当样本容量

大于20时不会出现这样的警告信息. 通常, 我们一般在样本容量大于30时做大

样本近似. ¥

例 6.5.2 某大学随机调查120名男同学, 发现有35人喜欢看武侠小说,

问可否认为该大学有四分之一的男同学喜欢看武侠小说?p取α 0.05q

解 R程序如下:

> prop.test(35, 120, p=0.25, conf.level=0.975, correct=TRUE)

运行结果为:

1-sample proportions test with continuity correction

data: 35 out of 120, null probability 0.25

X-squared = 0.9, df = 1, p-value = 0.3428

alternative hypothesis: true p is not equal to 0.25

97.5 percent confidence interval:

0.2049114 0.3958969

sample estimates:

p

0.2916667

结论: 因为p值=0.3428¡ α 0.05, 故接收原假设, 认为该大学有四分之一的男

同学喜欢看武侠小说. ¥

§6.6 两样本比率的检验

设 有 两 总 体X与Y相 互 独 立(总 体 容 量 都 较 大), 从 中 分 别 抽

取n1和n2个(n1, n2也较大)观察, 结果发现其中各有x1和x2个具有某种性质.

设总体X与Y中具有上述待性的比率分别为p1和p2, 我们的目的是要估计对下

面的假设作出检验.

6.6 两样本比率的检验 197

1) H0 : p1 p2 ÐÑ H1 : p1 p2(双边假设检验)

2) H0 : p1 ¤ p2 ÐÑ H1 : p1 ¡ p2(单边假设检验)

3) H0 : p1 ¥ p2 ÐÑ H1 : p1   p2(单边假设检验)

两个总体比例p1和p2的极大似然估计分别为pˆ1 x1n1 , pˆ2 x2n2 . 由§5.5,

若n1和n2较大, 则pˆ1, pˆ2近似地服从正态分布:

pˆ1

N

(

p1,

p1p1 p1q

n1

)

, pˆ2

N

(

p2,

p2p1 p2q

n2

)

.

在p1 p2下, 有

Z

pˆ1 pˆ2√

pn1 n2qpˆp1pˆq

n1n2

Np0, 1q, (6-6.1)

其中pˆ n1pˆ1   n2pˆ2

n1   n2

. 由此可知, 上述三个检验问题的拒绝域分别为:

1) C1 {|Z| ¡ z1α2 }

2) C2 {Z ¡ z1α}

3) C3 {Z   z1α}

R语言中的prop.test( )函数可完成原假设的检验.

例 6.6.1 某高校随机抽取了102个男学生与135个女学生调查家中有无

计算机, 调查结果为23个男学生与25个女学家中有计算机. 问在α 0.05水平

上, 能否认为男、女学生家中拥有计算机的比率一致?

解 R程序如下:

> success<-c(23, 25)

> total<-c(102, 135)

> prop.test(success, total)

运行结果为:

2-sample test for equality of proportions

198 第六章 参数的假设检验

with continuity correction

data: success out of total

X-squared = 0.3615, df = 1, p-value = 0.5477

alternative hypothesis: two.sided

95 percent confidence interval:

-0.07256476 0.15317478

sample estimates:

prop 1 prop 2

0.2254902 0.1851852

结论: 因为p值=0.5477¡ α 0.05, 故接收原假设, 认为该大学的男、女学生家

中拥有计算机的比率一致. ¥

6.6 两样本比率的检验 199

第六章习题

6.1 有一批枪弹, 出厂时, 其初速ν Np950, σ2q(单位:m/s). 经过较长时

间储存, 取9发进行测试, 得样本值(单位:m/s)如下:914, 920, 910, 934, 953,

940, 912, 924, 930. 据经验, 枪弹储存后其初速仍服从正态分布, 且标准差不

变, 问是否可认为这批枪弹的初速有显著降低?pα 0.01q

6.2 已知维尼纶纤度在正常条件下服从正态分布, 且标准差为0.048. 从某天

生产的产品中抽取5根纤维, 测得其纤度为: 1.32, 1.55, 1.36, 1.40, 1.1, 问这天

抽取的维尼纶纤度的总体标准差是否正常?pα 0.05q

6.3 下面给出两种型号的计算器充电以后所能使用的时间(单位:小时)的观

测值

型号A 5.5 5.6 6.3 4.6 5.3 5.0 6.2 5.8 5.1 5.2 5.9

型号B 3.8 4.3 4.2 4.9 4.5 5.2 4.8 4.5 3.9 3.7 3.6 2.9.

设两样本独立且数据所属的两个总体的密度函数至多差一个平移量. 试问能否

认为型号A的计算器平均使用时间比型号B来得长?pα 0.01q

6.4 测得两批电子器件的样本的电阻pΩq为

A批(x) 0.140 0.138 0.143 0.142 0.144 0.137

B批(y) 0.135 0.140 0.142 0.136 0.138 0.130

设这两批器材的电阻值分别服从正态分布Npµ1, σ21q和Npµ2, σ22q, 且两样本独

立,

(1)试检验两个总体的方差是否相等?pα 0.01q

(2)试检验两个总体的均值是否相等?pα 0.05q

6.5 有人称某地成年人中大学毕业生比例不低于30%, 为检验之, 随机调查

该地15名成年人,发现有3名大学毕业生,取α 0.05 ,问该人的看法是否成立?

第七章 非参数的假设检验

本章概要

♦ 单一样本的检验

♦ 两样本比较与检验

♦ 多样本的比较与检验

上章讲的参数假设检验是在假设总体分布已知的情况下进行的. 但在实

际生活中,那种对总体的分布的假定并不是能随便作出的. 数据并不是来自所

假定分布的总体, 或者,数据根本不是来自一个总体; 还有可能数据因为种种

原因被严重污染. 这样,在假定总体分布已知的情况下进行推断的做法就可能

产生错误甚至灾难性的结论. 于是,人们希望在不对总体分布作出假定的情况

下,尽量从数据本身来获得所需要的信息, 这就是非参数统计推断的宗旨. 本

章分别就单一样本、两样本及多样本的位置参数与尺度参数给出一些非参数

的检验方法.

§7.1 单总体位置参数的检验

设X1, X2, . . . , Xn为来自总体X的容量为n的样本, 在有了样本观测

值x1, x2, , xn 之后,很自然地想要知道它所代表的总体的“中心”在哪

里? 它所代表的总体的分布是否与我们所希望的分布一样? 这些问题中不涉

及分布具体形式的假定, 因此属于非参数的假设检验问题. 我们先考虑前一问

题, 分别介绍两常用的中位数符号检验和对称中心的Wilcoxon符号秩检验, 后

面一节再介绍分布的拟合优度检验.

7.1 单总体位置参数的检验 201

7.1.1 中位数的符号检验

我们知道在总体为正态分布时, 要检验其均值是否为µ, 是用t检验. 它的

检验统计量T Xµ

S{



n

在零假设成立时服从自由度为n 1的t分布. 但是, t检验

并不稳健, 在不知道总体分布时,特别是在小样本场合,运用t检验就可能有风

险. 这时就要考虑使用非参数方法对分布的中心进行检验,如本小节讨论的中

位数的符号检验.

这一小节使用总体X的中位数M作为分布中心, 即M满足: P pX   Mq

P pX ¡Mq 1

2

.

考虑假设检验问题:

1) H0 :M M0 ÐÑ H1 :M ¡M0(单边假设检验)

2) H0 :M M0 ÐÑ H1 :M  M0(单边假设检验)

3) H0 :M M0 ÐÑ H1 :M M0(双边假设检验)

符号检验的检验统计量为:

S  # {Xi : Xi M0 ¡ 0, i 1, 2, . . . , n} (7-1.1)

其中#表示计数, 即S 是集合G中的元素的个数, 其中G是使得Xi M ¡ 0成

立的Xipi 1, 2, , nq构成的集合. S 也可以等价地表示为:

S  

n∑

i1

ui, ui

{

1, Xi M0 ¡ 0,

0, 其它. , i 1, 2, , n (7-1.2)

由上面的假设可知:

S   bpn,

1

2

q.

由此上述三个假设检验问题的拒绝域分别为:

C1 {S  ¥ C}, 其中C inf{C : p 12qn

n∑

iC

(

n

i

)

¤ α}

C2 {S  ¤ D}, 其中D sup{D : p 12qn

D∑

i0

(

n

i

)

¤ α}

202 第七章 非参数的假设检验

C3 {S  ¥ C或S  ¤ D}, 其中C,D满足:

C inf

{

C : p

1

2

q

n

n∑

iC

(

n

i

)

¤

α

2

}

, D n C (7-1.3)

注: 在实际问题中可能有某一些观察值xi正好等于M0, 一般采用的方法是将这

些正好等于M0的观察值舍去,并相应地减少样本容量的n值.

另外,因为EpS q n

2

,VarpS q

n

4

, 所以当n比较大时, 有

Z

S   n

2√

n{2

Np0, 1q. (7-1.4)

因为正态分布是连续性的,所以在离散的二项分布近似中,要用连续性修正

量,即用

Z 1

S   n

2

0.5√

n{2

Np0, 1q. (7-1.5)

这里分子的处,当S    n

2

时取加号,当S  ¡ n

2

时取减号.

在R中没有直接的函数来做符号检验, 需要编写函数来做检验. 借助函

数binom.test函数(见§5.4)sign.test( )定义如下:

sign.test<-function(x, m0, alpha=0.05, alter=”two.sided”){

sign.test( )的定义

p<-list( )

n<-length(x)

sign<-as.numeric(x>=m0)

s<-sum(sign)

result<-binom.test(s, n, p=0.5, alternative=alter,

conf.level=alpha)

p$p.value=result$p.value

p

}

说明: alter的取值为“two.sided”或“greater”,“two.sided”表示双边检验,

“greater”表示单边检验.

例 7.1.1 在某保险种类中, 一次关于2006年的索赔数额(单位:元)的随

机抽样为(按升幂排列):

7.1 单总体位置参数的检验 203

4632, 4728, 5052, 5064, 5484, 6972, 7696, 9048,

14760, 15013, 18730,21240, 22836, 52788, 67200.

已知2005年的索赔数额的中位数为6064元. 问2006年索赔的中位数与前一年是

否有所变化?pα 0.05q

解 R程序如下:

> insure<-c(4632, 4728, 5052, 5064, 5484, 6972, 7696, 9048,

14760, 15013, 18730, 21240, 22836, 52788, 67200)

> sign.test(insure,6064)

运行结果为:

$p.value

[1] 0.3017578

结论: 因为p值=0.3017578¡ α 0.05, 故接收原假设, 认为2006年索赔的中位

数与前一年没有发生变化. ¥

7.1.2 Wilcoxon符号秩检验

符号检验利用了观察值和原假设的中心位置之差的符号来进行检验, 但是

它并没有利用这些差的大小(体现于差的绝对值的大小)所包含的信息. 不同的

符号代表了在中心位置的哪一边, 而差的绝对值的秩的大小代表了距离中心的

远近. Wilcoxon符号秩检验把这两者结合起来, 所以要比仅仅利用符号的符号

检验要更有效.

Wilcoxon符号秩检验使用总体X的对称中心M作为分布中心, 即总体X的

分布F pxq关于M对称, M满足: F pM xq 1 F pxMq,@x P R. 在此我们

还要求X是连续型的.

仍考虑上一小节的假设检验问题. Wilcoxon符号秩检验的检验统计量为:

W  

n∑

i1

uiRi (7-1.6)

其中ui的定义同(7-1.2)式, Ri为|Xi|在样本绝对值|X1|, |X2|, , |Xn|中的秩.

由此以上三个假设检验问题的拒绝域分别为:

204 第七章 非参数的假设检验

C1 {W  ¥ C}, 其中C满足: C inf{C : P pW  ¥ Cq ¤ α}

C2 {W  ¤ D}, 其中D满足: D sup{D : P pW  ¤ Dq ¤ α}

C3 {W  ¥ C或S  ¤ D}, 其中C, D满足:

C inf{C : P pW  ¥ Cq ¤ α

2

}, D sup{D : P pW  ¤ Dq ¤ α

2

}

为求上述检验p值, 需要知道W 的分布. 我们有

定理 7.1.1 令S

n∑

i1

iui,则在总体的分布关于原点0对称时,W 与S同

分布.

定理 7.1.2 在总体的分布关于原点0对称时, W 的概率分布为:

P pW   dq P

(

n∑

i1

uiRi d

)

tnpdq

2n

,

d 1, 2, ,

npn  1q

2

(7-1.7)

其中tnpdq表示从1, 2, , n这n个数中任取若干个数其和恰为d的取法总数.

定理 7.1.3 在总体的分布关于原点0对称时, W 服从对称分布, 对称中

心为0, 1, 2, , npn 1q

2

的中点npn 1q

4

.

有了以上三个定理, 我们就可以计算p值了(从略). 另外, 由于

EpW q

npn  1q

4

,VarpW q

npn  1qp2n  1q

24

,

故当n比较大时,有

Z

W  

npn  1q

4√

npn  1qp2n  1q

24

Np0, 1q. (7-1.8)

R中的函数wilcoxon.test( )可完成原假设的检验, 调用格式如下:

wilcox.test(x, y=NULL, alternative=c(“two.sided”,”less”,”greater”),

wilcoxon.test( )的调用格式

mu=0, paired = FALSE, exact = NULL, correct =TRUE,

7.2 分布的一致性检验:χ2检验 205

conf.int = FALSE, conf.level = 0.95, …)

说明: exact表示是否算出准确的p值; correct表示大样本时是否做连续性修

正.

例 7.1.2 用Wilcoxon检检对例7.1.1的数进行检验.

解 R程序如下:

> insure<-c(4632, 4728, 5052, 5064, 5484, 6972, 7696, 9048,

14760, 15013, 18730, 21240, 22836, 52788, 67200)

> wilcox.test(insure,mu=6064,conf.int = TRUE)

运行结果为:

Wilcoxon signed rank test

data: insure V = 101, p-value = 0.01807 alternative hypothesis:

true mu is not equal to 6064 95 percent confidence interval:

6840 28926

sample estimates: (pseudo)median

13065

结论: 因为p值=0.01807  α 0.05, 故拒绝原假设, 认为2006年索赔的中位数

与前一年有变化. 根据95%的置信区间, 2006年索赔的中位数有所增加:并且给

出了一个(伪)中位数13065. 这与中位数的符号检验所得的结果不同, 说明

了Wilcoxon符号秩检验比符号检验利用了更多的信息, 检验应更有效. ¥

§7.2 分布的一致性检验:χ2检验

在给定一些数据之后, 我们往往会假设它们来自某种分布, 但是这种假设

对不对呢? 这一节我们讨论这一问题.

考虑假设检验问题

H0 : F pxq F0pxq ÐÑ H1 : F pxq F0pxq

在随机变量X的取值范围ra, bs(a可为8, b可为8)内选取m1个实数a

206 第七章 非参数的假设检验

a0   a1   a2     am1   am b, 它们将ra, bs分为m个小区间Ai

rai1, aiq, 记pi0 F0paiq F0pai1q

设px1, x2, , xnq为来自总体F pxq的容量为n的一组样本观测值, ni为观

测值落入Ai的频数,

m∑

i1

ni n. 若H0成立, 则实际频数ni与理论频数npi0比较

接近, 因此分布的拟合优度检验可转化为分类数据的实际频数与理论频数的一

致性检验. 下面的定理为此提供了理论依据.

定理 7.2.1 (Pearson定理)

1) 若F0pxq完全已知(不带有未知参数), 则当H0成立时, 统计量

χ2

m∑

i1

pni nPi0q

2

nPi0

χ2pm 1q.

2) 若F0pxq F0px, θ1, θ2, , θrq中含有r个未知参数θ1, θ2, , θr, 它

们的极大似然估计为θˆ1, θˆ2, , θˆr. 令pˆi0 F0pai, θˆ1, θˆ2, , θˆrq

F0pai1, θˆ1, θˆ2, , θˆrq, i 1, 2, ,m, 则

χ2

m∑

i1

pni nPˆi0q

2

nPˆi0

χ2pm r 1q,

其中m表示种类数, r表示参数个数.

由定理7.2.1知, 上述检验问题的拒绝域为C {χ2 ¡ χ21αpm 1q}.

R中函数chisq.test( )可完成原假设的检验. chisq.test( )的调用格

式如下:

chisq.test(x, y = NULL, correct =TRUE,p=rep(1/length(x),length(x)),

chisq.test( )的调用格式

rescale.p = FALSE, simulate.p.value = FALSE, B = 2000)

说明: x为向量或矩阵. 若x是一维的且y不给出(y NULL), 则chisq.test(

)函数用于本节分布的拟和优度检验, 这时是检验总体概率是否与给定的p相

同, p缺省表示进行等可能性检验; x与y同时给出时则进行7.3.1小节介绍的列

联表检验.

例 7.2.1 某箱子中盛有10种球,现在从中有返回地随机抽取200个, 其

中第i种球共取得νi个, 数据记录在表7.1. 问箱子中这10种球的比例是否一

7.2 分布的一致性检验:χ2检验 207

样?pα 0.05q

表 7.1 10种球的数目

种别 νi 种别 νi 种别 νi

1 35 5 17 9 30

2 16 6 19 10 14

3 15 7 11

4 17 8 16

解 R程序如下:

> v<-c(35,16,15,17,17,19,11,16,30,24)

> chisq.test(v)

运行结果为:

Chi-squared test for given probabilities

data: v

X-squared = 24.9, df = 9, p-value = 0.003084

结论: 因为p值=0.003084  α 0.05, 故拒绝原假设, 认为箱子中的10种球的比

例不一样. ¥

例 7.2.2 卢瑟福和盖革作了一个著名的实验, 他们观察了长为7.5秒

的时间间隔里由某块放射物质放出的到达某个计数器的α质点数, 共观察

了2608次. 表7.2的第一列给出的是质点数i, 第二列表示相应的频数ni. 试问这

种分布规律是否服从泊松分布?pα 0.05q

解 在R中没有直接算带参数的拟合检验函数, 故要根据具体问题自己编

程.

首先计算参数λ的极大似然估计

R程序如下:

> x<-c(0,1,2,3,4,5,6,7,8,9,10)

208 第七章 非参数的假设检验

表 7.2 放射物质放出的α质点数与频数

质点数i 频数ni 质点数i 频数ni 质点数i 频数ni

0 57 4 532 8 45

1 203 5 408 9 27

2 383 6 273 10 16

3 525 7 239

> y<-c(57,203,383,525,532,408,273,139,45,27,16)

> options(digits=3)

> likely<-function(lambda=3){

-sum(y*dpois(x, lambda=lambda, log=TRUE))

}

> mle(likely)

运行结果为:

Call:

mle(minuslogl = likely) Coefficients: lambda 3.87

由于函数chisq.test( )无法调整因参数估计引起的自由度调整, 因此需

要编程计算检验统计量及p值, R程序如下:

> chisq.fit<-function(x, y, r){

options(digits=4)

result<-list( )

n<-sum(y)

prob<-dpois(x,3.87,log=FALSE)

y<-c(y,0)

m<-length(y)

prob<-c(prob,1-sum(prob))

result$chisq<-sum((y-n*prob)^2/(n*prob))

result$p.value<-pchisq(result$chisq,m-r-1,lower.tail=FALSE)

result

7.3 两总体的比较与检验 209

}

> x<-c(0,1,2,3,4,5,6,7,8,9,10)

> y<-c(57,203,383,525,532,408,273,139,45,27,16)

> chisq.fit(x,y,1)

运行结果为:

$chisq

[1] 20.55

$p.value

[1] 0.02442

结论: 因为p值=0.02442  α 0.05, 故拒绝原假设, 认为该分布规律不服从泊

松分布. ¥

§7.3 两总体的比较与检验

在单样本问题中, 人们想要检验的是总体的中心是否等于一个已知的值.

但在实际问题中, 更受注意的往往是比较两个总体的位置参数; 比如, 两种训

练方法中哪一种更出成绩, 两种汽油中哪一种污染更少, 两种市场营销策略中

哪种更有效等等.

7.3.1 χ2独立性检验

若随机变量X,Y的分布函数分别为F1pxq和F2pyq, 且联合分布为F px, yq,

则X与Y的独立性归结为假设检验问题:

H0 : F px, yq F1pxqF2pyq ÐÑ H1 : F px, yq F1pxqF2pyq.

若X与Y为 分 类 变 量, 其 中X的 取 值 为X1, X2, . . . , Xr, Y的 取 值

为Y1, Y2, . . . , Ys, 将X与Y的各种情况的组合用一张r s列联表表示,

称为r s二维列联表, 如表7.3所示, 表中nij表示n个随机试验的结果

中X取Xi及Y取Yj的频数,

∑r

i1

∑s

j1 nij n,

ni.

s∑

j1

nij , i 1, 2, . . . , r,表示各行之和

210 第七章 非参数的假设检验

表 7.3 r s列联表

Y1 Y2 Ys 总和

X1 n11 n12 n1s n1.













Xr nr1 nr2 nrs nr.

总和 n.1 n.2 n.s n

n.j

r∑

i1

nij , j 1, 2, . . . , s,表示各列之和

令pij P pX Xi, Y Yjq, pi. P pX Xiq, p.j P pY

Yjq, i, 1, 2, . . . , r; j 1, 2, . . . , s, 则X与Y的独立性检验就等价于下述检验:

H0 : pij pi.p.j ,@1 ¤ i ¤ r, 1 ¤ j ¤ sÐÑ H1 : Dpi, jq, pij pi.p.j

注: 若X与Y为连续型随机变量, 这时将它们的取值范围分成r个及s个互不

相交的小区间, 用nij表示n个随机试验的结果中“X属于第i个小区间, Y属于

第k个小区间”的频数pi 1, 2, , r; k 1, 2, , sq. 这时可将X与Y的独立

性转化为列联表的独立性检验问题.

由于pi.的极大似然估计为pˆi. ni.{n, p.j的极大似然估计为pˆ.j n.j{n, 因

此若H0成立, 则pij的极大似然估计为pˆi.pˆ.j ni.n.j{n2. 从而X取Xi,Y取Yj(试

验数据落入第(i,j)个类)的理论频数为n ni.n.j{n2 ni.n.j{n. 由此构造检验

统计量

χ2

r∑

i1

s∑

k1

[

nij

ni.n.j

n

]2

{

ni.n.j

n

(7-3.1)

可以证明在原假设成立时, χ2近似服从χ2ppr 1qps 1qq.

R语言中函数chisq.test( )可完成独立性检验, chisq.test( )的调用

格式见§7.2.

例 7.3.1 表7.4是对63个肺癌患者和由43人组成的对照组的调查结果.

问总体中患肺癌是否与吸烟有关系?pα 0.05q

7.3 两总体的比较与检验 211

表 7.4 吸烟与肺癌关系的调查数据

吸烟 不吸烟

肺癌患者 60 3

对照组 32 11

解 R程序如下:

> compare<-matrix(c(60,32,3,11), nr = 2,

dimnames = list(c(“cancer”, “normal”),

c(“smoke”, “Not smoke”)))

> chisq.test(compare, correct=TRUE)

运行结果为:

Pearson’s Chi-squared test with Yates’ continuity correction

data: compare

X-squared = 7.93, df = 1, p-value = 0.004855

结论: 因为p值=0.004855  α 0.05, 故拒绝原假设, 即认为患肺癌与吸烟有关

系. ¥

7.3.2 Fisher精确检验

上述近似χ2检验要求2维列联表中只允许20%以下的格子的期望频数小

于5, 小于R会给出警告, 这时应该使用Fisher精确检验. 下面仅以2 2列联

表(见表7.5)加以叙述.

在X和Y独立的原假设下, 在给定边际频率时, 这个具体的列联表的条件

概率只依赖于四个值中的任意一个, 其条件概率为:

P{nij} n1.!n2.!n.1!n.2!

n!n11!n12!n21!n22!

, i 1, 2, j 1, 2, (7-3.2)

即nij服从超几何分布.

212 第七章 非参数的假设检验

表 7.5 2 2 列联表

B1 B2 总和

A1 n11 n12 n1.

A2 n21 n22 n2.

总和 n.1 n.2 n

在给定n11   n21 n.1后, 我们在n11比较大时拒绝H0, 所以给定水平α, 它

的临界值C满足条件:

P pn11 ¥ Cq



i¥C

n1.!n2.!n.1!n.2!

n!i!pn.1 iq!pn1. iq!pn n1. n.1 iq!

¤ α.

R语言中的fisher.test( )函数可完成原假设的检验. fisher.test( )的调

用格式如下:

fisher.test(x, y=NULL, workspace=200000, hybrid=FALSE, control=list( ),

fisher.test( )的调用格式

or = 1, alternative = “two.sided”, conf.int = TRUE,

conf.level = 0.95, simulate.p.value = FALSE, B = 2000)

说明: 参数workspace的值为整数, 指定工作空间的数量; 参数hybrid的值为

逻辑型, 指定是否计算精确的概率, 这两个参数只在维数高于22的列联表中

使用; 参数or指定假设的概率比率, 只在22列联表中使用.

例 7.3.2 数据同例7.3.1, 问总体中肺癌患者吸烟的比例是否比对照组

中吸烟的比例要大?pα 0.05q

解 R程序如下:

> compare<-matrix(c(60,32,3,11),nr = 2,

dimnames = list(c(“cancer”, “normal”),

c(“smoke”, “Not smoke”)))

> fisher.test(compare, alternative = “greater”)

运行结果为:

7.3 两总体的比较与检验 213

Fisher’s Exact Test for Count Data

data: compare

p-value = 0.002467

alternative hypothesis: true odds ratio is greater than 1

95 percent confidence interval:

1.95 Inf

sample estimates:

odds ratio

6.74691

结论: 因为p值=0.002467  α 0.05, 故拒绝原假设, 认为总体中肺癌患者吸烟

的比例是要比对照组中吸烟的比例大. ¥

7.3.3 Wilcoxon秩和检验法和Mann-Whitney U检验

Wilcoxon秩和检验法

在正态总体的假定下, 两样本的均值检验通常用t检验. 检验统计量

T

pX Y q pµ1 µ2q√

p

1

n1

 

1

n2

qS2

在零假设成立时服从自由度为n1   n2 2的t分布. 和单样本情况一样, t检验

并不稳健, 在不知总体分布时, 使用用t检验可能有风险. 这时考虑非参数方法:

Wilcoxon秩和检验法.

此检验法是用来检验两个样本的位置参数关系. 与单样本的Wilcoxon符号

检验一样, 它也充分利用了样本中秩的信息. 此检验需要的假设:

设X1, X2, . . . , Xm为 来 自 连 续 型 总 体X的 容 量 为m的 样 本,

Y1, Y2, . . . , Yn分别来自连续型总体Y的容量为n的样本, 且两样本相互独

立. 记MX为总体X的中位数, MY为总体Y的中位数.

考虑假设检验问题:

1) H0 :MX MY ÐÑ H1 :MX ¡MY (单边假设检验)

2) H0 :MX MY ÐÑ H1 :MX  MY (单边假设检验)

3) H0 :MX MY ÐÑ H1 :MX MY (双边假设检验)

214 第七章 非参数的假设检验

构造检验统计量的基本思想是: 把样本X1, X2, . . . , Xm和Y1, Y2, . . . , Yn混

合起来, 并把这N pm  nq个观测值从小到大排列起来, 这样每一个Y 的观

察值在混合排列中都有自己的秩. 令Ri为Yi在这N个数中的秩, 则这些秩的和

为WY

n∑

i1

Ri. 同样地由X的样本也可得到WX , 称WX或WY为Wilcoxon秩

和统计量, 它们的分布由下面的定理给出.

定理 7.3.1 在原假设H0为真时, WY的概率分布和累积概率分别为:

P pWY dq P p

n∑

i1

Ri dq

tm,npdq

p

N

n q

P pWY ¤ dq P p

n∑

i1

Ri ¤ dq



i¤d

tm,npiq

p

N

n q

(7-3.3)

其中d npn 1q

2

, , npn 1q

2

 mn; tm,npdq表示1, 2, , N pm  nq这N个数

中任取n个数, 其和恰为d的取法数.

由定理??可以给出以上三个假设检验问题的拒绝域及p值(略).

另外, 在样本量比较大时, 精确算法的计算量很大. 可以考虑用大样本近

似来简化计算和检验. 可以证明在原假设H0为真时,

EpWY q

npN   1q

2

, VarpWY q

mnpN   1q

12

,

故当m,n比较大时,

Z

WY

npN 1q

2√

mnpN 1q

12

Np0, 1q. (7-3.4)

Mann-Whitney U检验

与Wilcoxon秩和统计量等价的有Mann-Whitney U统计量. 令WXY为把所

有的X的观察值和Y的观察值做比较之后, Y的观察值大于X的观察值的个数,

则称WXY为Mann-Whitney U统计量. 它与Wilcoxon秩和统计量的关系如下:

WY WXY  

npn  1q

2

, WX WY X  

mpm  1q

2

.

故可以根据定理7.3.1给出WXY的概率分布和累积概率, 从而可以对假设检验

问题给出拒绝域和p值.

7.3 两总体的比较与检验 215

R语言中函数wilcoxon.test( )可完成原假设的检验, 其调用格式

见7.1.2.

例 7.3.3 有糖尿病的和正常的老鼠重量为(单位:克)

糖尿病鼠:42, 44, 38, 52, 48, 46, 34, 44, 38;

正常老鼠:34, 43, 35, 33, 34, 26, 30, 31, 31, 27, 28, 27, 30, 37, 32.

检验这两组的体重是否有显著不同?pα 0.05q

解 R程序如下:

> diabetes<-c(42,44,38,52,48,46,34,44,38)

> normal<-c(34,43,35,33,34,26,30,31,31,27,28,27,30,37,32)

> wilcox.test(diabetes,normal,exact = FALSE, correct=FALSE)

运行结果为:

Wilcoxon rank sum test

data: diabetes and normal

W = 128, p-value = 0.0003008

alternative hypothesis: true location shift is not equal to 0

结论: 因为p值=0.0003008  α 0.05, 故拒绝原假设, 认为这两组的体重显著

不同. ¥

7.3.4 Mood检验

位置参数描述了总体的位置, 而描述总体概率分布离散程度的参

数是尺度参数. 假定两独立样本X1, X2, , Xm和Y1, Y2, , Yn分别来

自Npµ1, σ21q和Npµ2, σ22q, 则检验H0 : σ21 σ22最常用的传统的统计方法是F检

验, 检验统计量为两独立样本的方差之比F S2X{S2Y . 在零假设成立时, 它服

从自由度为pm 1, n 1q的F分布. 但是在总体不是正态或有严重污染时, 上

述的F检验就不一定合适了. 本小节介绍的Mood检验是用来检验两样本尺度参

数之间关系的一种非参数方法.

设 两 连 续 总 体X与Y独 立, 样 本X1, X2, , Xm F pxθ1σ1 q,

Y1, Y2, , Yn F p

yθ2

σ2

q, 而且F p0q 1

2

, θ1 θ2. (若不相等, 可以通过

平移来使它们相等)

216 第七章 非参数的假设检验

考虑假设检验问题:

1) H0 : σ1 σ2 ÐÑ H1 : σ1 ¡ σ2(单边假设检验)

2) H0 : σ1 σ2 ÐÑ H1 : σ1   σ2(单边假设检验)

3) H0 : σ1 σ2 ÐÑ H1 : σ1 σ2(双边假设检验)

构造检验统计量的基本思想为: 把样本X1, X2, . . . , Xm和Y1, Y2, . . . , Yn混

合 起 来, 记R11, R12, , R1m为X的 观 察 值 在 混 合 样 本 中 的 秩,

而R21, R22, , R2n为Y的观察值在混合样本中的秩, N m  n. 对样本X来

说, 考虑秩统计量

M

m∑

j1

(

R1j

N   1

2

)2

. (7-3.5)

则以上三个假设检验问题的拒绝域分别为:

C1 {M ¥ c}, 其中c满足:c inf{c : P pM ¥ cq ¤ α};

C2 {M ¤ d}, 其中d满足:d sup{d : P pM ¤ dq ¤ α};

C3 {M ¥ c或M ¤ d}, 其中c, d满足:

c inf{c : P pM ¥ cq ¤ α

2

}, d sup{d : P pM ¤ dq ¤ α

2

}. (7-3.6)

当原假设H0成立时, 可以证明:

EpMq

mpN2 1q

12

,

VarpMq

mn

NpN 1q

N∑

i1

[

pi

N   1

2

q

2

N2 1

12

]2

. (7-3.7)



Z

M EpMq√

VarpMq

Np0, 1q. (7-3.8)

R语言中函数mood.test( )可完成原假设的检验, 其调用格式如下

7.3 两总体的比较与检验 217

mood.test(x, y, alternative =

mood.test( )的调用格式

c(“two.sided”, “less”, “greater”),…)

例 7.3.4 两个村农民的月收入分别为(单位: 元)

A村:321, 266, 256, 388, 330, 329, 303, 334, 299, 221, 365, 250, 258, 342,

343, 298, 238, 317, 354;

B村:488, 598, 507, 428, 807, 342, 512, 350, 672, 589, 665, 549, 451, 481,

514, 391, 366, 468.

问两个村农民的月收入的内部差异是否相同?pα 0.05q

解 R程序如下:

> A<-c(321, 266, 256, 388, 330, 329, 303, 334, 299,

221, 365, 250, 258, 342, 343, 298, 238, 317, 354)

> B<-c(488, 598, 507, 428, 807, 342, 512, 350, 672,

589, 665, 549, 451, 481, 514, 391, 366, 468)

> diff<-median(B)-median(A)

> A<-A+diff

> mood.test(A,B)

运行结果为:

Mood two-sample test of scale

data: A and B

Z = -2.4846, p-value = 0.01297

alternative hypothesis: two.sided

结论: 因为p值=0.01297  α 0.05, 故拒绝原假设, 认为这两个村的内部差异

是不同的. ¥

注意: 因为mood检验需要的假定之一是要两样本的中位数相同, 故在做检验时

要先消除两样本之间中位数的差异, 接着才可以做mood检验.

218 第七章 非参数的假设检验

§7.4 多总体的比较与检验

多样本问题是统计中最常见的一类问题. 例如多种投资方案在试行后效果

的比较、不同机器在同一条件下的稳定性是否相同等等. 本节就多样本模型讨

论位置参数与尺度参数的检验问题.

设k个 连 续 型 随 机 变 量(总 体) X1, X2, , Xk相 互 独 立, Xi

F

(

xθi

σi

)

, σi ¡ 0, Xi1, Xi2, , Xini是来自第i个总体Xi的容量为ni的样本,

N

k∑

i1

ni.

7.4.1 位置参数的Kruskal-Wallis秩和检验

设σ1 σ2 . . . σk, 不妨设为1 (其检验见下面二小节). 考虑假设检验

问题:

H0 : θ1 θ2 θk ÐÑ H1 : θ1, θ2, , θk不全相等

构造检验统计量的基本思想为: 把k个样本混合起来, 算出所有数据在混合

样本中的秩, 记样本Xij的秩为Rij(Rij的意义同§7.3.4), 对每一个样本的观察

值的秩求和得到Ri

ni∑

j1

Rij , i 1, 2, , k, 由此找到它们在每组中的平均

值Ri Ri{ni. 如果这些Ri很不一样, 就可以怀疑原假设.

构造检验统计量:

H

12

NpN   1q

k∑

i1

nipRi Rq

2

12

NpN   1q

k∑

i1

Ri

2

ni

3pN   1q (7-4.1)

其中R

k∑

i1

niRi{N

N 1

2

.

可以证明:

EpRiq nipN   1q,VarpRiq

nipN niqpN   1q

12

.

7.4 多总体的比较与检验 219

从而

EpRiq N   1,

VarpRiq

pN niqpN   1q

12ni

,

EpHq

12

NpN   1q

E

(

k∑

i1

ni

(

Ri

N   1

2

)2)

12

NpN   1q

k∑

i1

niVarpRiq k 1. (7-4.2)

当原假设H0成立时, 若min{n1, n2, , nk} ÝÑ  8, 且niN ÝÑ λi, i

1, 2, . . . , k, λi P p0, 1q, 则H χ2pk 1q.

故上述检验问题的拒绝域C {H ¥ χ21αpk 1q}.

R中函数kruskal.test( )可完成原假设的检验其调用格式如下:

kruskal.test(x, g, …)

kruskal.test( )的调用格式

说明: x为一向量或列表, g为对x分类的因子, 当x为列表时g可以省略.

例 7.4.1 下面的数据是游泳、打篮球、骑自行车等三种不同的运动

在30分钟内消耗的热量(单位:卡路里). 这些数据是否说明这三种运动消耗的

热量全相等?pα 0.05q

游泳: 306, 385, 300, 319, 320;

打篮球: 311, 364, 315, 338, 398;

骑自行车: 289, 198, 201, 302, 289.

解 R程序如下:

> x<-list(swim=c(306, 385, 300, 319, 320),

basketball=c(311, 364, 315, 338, 398),

bicycle=c(289, 198, 201, 302, 289))

> kruskal.test(x)

运行结果为:

220 第七章 非参数的假设检验

Kruskal-Wallis rank sum test

data: x

Kruskal-Wallis chi-squared = 9.1564, df = 2, p-value =0.01027

结论: 因为p值=0.01027  α 0.05, 故拒绝原假设, 认为这三种运动消耗的热

量不全相等. ¥

7.4.2 尺度参数的Ansari-Bradley检验

设θ1 θ2 θk. 考虑假设检验问题:

H0 : σ21 σ

2

2 σ

2

k ÐÑ H1 : σ

2

1 , σ

2

2 , , σ

2

k不全相等



Ai

1

ni

ni∑

j1

[

N   1

2

|Rij

N   1

2

|

]2

, i 1, 2, , k

构造检验统计量:

B

N3 4N

48pN   1q

k∑

i1

ni

[

Ai

N   2

4

]2

. (7-4.3)

可以证明在原假设H0成立时, B χ2pk 1q. 从而上述检验问题的拒绝域

为C {B ¥ χ21αpk 1q}.

R语言中函数ansari.test( )可完成原假设的检验, 其调用格式如下:

ansari.test(x, y, alternative = c(“two.sided”, “less”, “greater”),

ansari.test( )的调用格式

exact = NULL, conf.int = FALSE, conf.level = 0.95, …)

说明: x为一向量或列表, g为对x分类的因子, 当x为列表时g可以省略.

例 7.4.2 两个工人加工的零件尺寸(各10个)为(单位:mm):

工人A: 18.0, 17.1, 16.4, 16.9, 16.9, 16.7, 16.7, 17.2, 17.5, 16.9;

工人B: 17.0, 16.9, 17.0, 16.9, 17.2, 17.1, 16.8, 17.1, 17.1, 17.2.

这个结果能否说明两个工人的水平(加工精度)一致?pα 0.05q

解 R程序如下:

7.4 多总体的比较与检验 221

> worker.a<-c(18.0,17.1,16.4,16.9,16.9,16.7,16.7,17.2,17.5,16.9)

> worker.b<-c(17.0,16.9,17.0,16.9,17.2,17.1,16.8,17.1,17.1,17.2)

> ansari.test(worker.a,worker.b)

运行结果为:

Ansari-Bradley test

data: worker.a and worker.b

AB = 41.5, p-value = 0.04232

alternative hypothesis: true ratio of scales is not equal to 1

Warning message:

In ansari.test.default(worker.a, worker.b) :

cannot compute exact p-value with ties

结论: 因为p值=0.04232  α 0.05, 故拒绝原假设, 认为这两个工人的水平不

一样. 最后一句的警告信息是因为原数据中有结. 其定义及处理方法见附录A.

¥

7.4.3 尺度参数的Fligner-Killeen检验

该检验需要的假设与同Ansari-Bradley检验.

记θ1 θ2 θk θ, Vij |Xij θ|, i 1, 2, , k; j 1, 2, , ni.

当θ未知时, 用样本中位数M代替θ, 即Vij |Xij M |, 再用Rij表示在混合样

本中Vij的秩.

k=2时, 采用检验统计量

W

n1∑

i1

Rij .

可以证明在原假设H0成立时, 统计量W有Wilcoxon分布;

k ¡ 2时, 采用检验统计量

K

12

NpN   1q

k∑

i1

ni

(

R



i

N   1

2

)2

,

其中Ri 1

ni

ni∑

j1

Rij . 可以证明在H0成立时, 统计量K有Kruskal-Wallis零分

222 第七章 非参数的假设检验

布.

R语言中函数fligner.test( )可完成原假设的检验, 其调用格式如下:

fligner.test(x, g, …)

fligner.test( )的调用格式

说明: x为一向量或列表, g为对x分类的因子, 当x为列表时g可以省略.

例 7.4.3 三名不同的运动员A、B、C同时在同一条件下进行打靶比

赛,各打10发子弹,他们打中的环数如下:

A: 8, 7, 9, 10, 9, 6, 5, 8, 10, 5;

B: 8, 7, 9, 6, 8, 9, 10, 7, 8, 9;

C: 10, 10, 9, 6, 8, 3, 5, 6, 7, 4.

问这三名运动员的稳定性是否一样?pα 0.05q

解 R程序如下:

> x<-list(A=c(8,7,9,10,9,6,5,8,10,5),

B=c(8,7,9,6,8,9,10,7,8,9),

C=c(10,10,9,6,8,3,5,6,7,4))

> fligner.test(x)

运行结果为:

Fligner-Killeen test of homogeneity of variances

data: x

Fligner-Killeen:med chi-squared = 5.1905, df = 2, p-value =0.07463

结论: 因为p值=0.07463¡ α 0.05, 故接受原假设, 认为这三名运动员的稳定

性相同. ¥

7.4 多总体的比较与检验 223

第七章习题

7.1 某地区从事管理工作的职员的月收入的中位数是6500元. 现有一个该

地区从事管理工作的20个妇女组成的样本, 她们的月收入如下:

6100, 5300, 4900, 7100, 6400, 5700, 5200, 5100, 6800, 6200, 7000, 3900,

5300, 6200, 6500, 6300, 6200, 5300, 5800, 6700.

问该地区从事管理工作的妇女的月收入的中位数是否小于6500?pα

0.05q

7.2 调查某美发店上半年各月顾客数量,如表7.6所示. 问该店每月的顾客

数量是否服从均匀分布?

表 7.6 美发店1—6月份顾客数量

月份 1 2 3 4 5 6 合计

顾客人数(百人) 27 18 15 24 36 30 150

7.3 从某地区高中二年级学生中随机抽取45位学生测得他们的体重如

表7.7所示,问该地区学生的体重是否服从正态分布?

表 7.7 高二年级学生体重(单位: 公斤)

36 36 37 38 40 42 43 43 44 45 48 48 50 50 51

52 53 54 54 56 57 57 57 58 58 58 58 58 59 60

61 61 61 62 62 63 63 65 66 68 68 70 73 73 75

7.4 美国某年总统选举前,由社会调查总部抽查黑白种族与支持不同政党

是否有关,得到数据如表7.8所示, 问不同种族与支持持政党之间是否存在独立

性?pα 0.05q

7.5 为了解两种药物对治疗某种疾病的效果,抽取42名患者分别服用药

物A和B,数据如表所示,问药物的疗效与服用的药物是否相关?pα 0.05q

7.6 在一次社会调查中,以问卷的方式调查了总共901人的年收入及对工

作的满意程度,其中年收入(A)分为小于6000元、6000 15000元、15000

224 第七章 非参数的假设检验

表 7.8 种族与政党的关系数据

种族 民主党 共和党 无党

白人 341 405 105

黑人 103 11 15

表 7.9 某疾病两种药物的治疗效果

疗效

药物 有效 无效 合计

A 8 2 10

B 34 18 32

合计 22 20 42

25000元及超过25000元4档. 对工作的满意程度(B)分为很不满意、较不满意、

基本满意和很满意4档. 调查结果如表7.10所示. 问工作的满意程度与年收入高

低是否无关? pα 0.05q

表 7.10 工作满意程度与年收入列联表

很不满意 较不满意 基本满意 很满意 合计

  6000 20 24 80 82 206

6000 15000 22 38 104 125 289

15000 25000 13 28 81 113 235

¡ 25000 7 18 54 92 171

合计 62 108 319 412 901

7.7 股票的波动程度可以用来衡量投资的风险. 取自同一年11月和12月的

前10个交易日的股票指数样本数据, 如下:

11月: 1149, 1169, 1152, 1183, 1173, 1169, 1130, 1152, 1120, 1171;

7.4 多总体的比较与检验 225

12月: 1116, 1147, 1135, 1125, 1184, 1125, 1192, 1174, 1164, 1180.

问:

1) 这两段时间的股票指数的中位数是否相同?pα 0.05q

2) 这两段时间的股票指数的波动程度是否一样?pα 0.05q

7.8 对5位健康成年人的血液测量其中的尿酸浓度,分别用手工(X)和仪

器(Y )两种方法测量,结果如表7.11所示,问两种测量方法的精度是否存在差

异?pα 0.05q

表 7.11 尿酸浓度的两种测量值

手工(X) 4.5 6.5 7 10 12

仪器(Y ) 6 7.2 8 9 9.8

7.9 茶是世界上最为广泛的一种饮料, 但是很少人知其营养价值. 任一种茶

叶都含有叶酸, 它是一种维他命B. 如今已有测定茶叶中叶酸含量的方法. 为研

究各产地的绿茶的叶酸含量是否有显著差异, 特选四个产地绿茶, 其中A制作

了7个样品, B制作了5个样品, C和D各制作了6个样品, 共有24个样品, 按随机

次序测试其叶酸含量(单位:mg), 测试结果如表7.12所示.

表 7.12 四个产地茶叶的叶酸含量

产地 叶酸含量(单位:mg)

A 7.9, 6.2, 6.6, 8.6, 10.1, 9.6, 8.9

B 5.7, 7.5, 9.8, 6.1, 8.4

C 6.4, 7.1, 7.9, 4.5, 5.0, 4.0

D 6.8, 7.5, 5.0, y5.3, 6.1, 7.4

问:

1) 四个产地绿茶的叶酸含量的均值是否有显著差异?pα 0.05q

2) 四个产地绿茶的叶酸含量的方差是否有显著差异?pα 0.05q

第八章 方差分析

本章概要

♦ 单因子方差分析

♦ 双因子方差分析

♦ 协方差分析

方差分析(analysis of variance, 简写为ANOVA)是工农业生产和科学

研究中分析试验数据的一种有效的统计方法. 引起观测值不同(波动)的原因主

要有两类: 一类是试验过程中随机因素的干扰或观测误差所引起不可控制的的

波动, 另一类则是由于试验中处理方式不同或试验条件不同引起的可以控制的

波动. 方差分析的主要工作就是将观测数据的总变异(波动)按照变异的原因的

不同分解为因子效应与试验误差,并对其作出数量分析,比较各种原因在总变

异中所占的重要程度,以此作为进一步统计推断的依据.

§8.1 单因子方差分析

8.1.1 数学模型

设试验只有一个因子(又称为因素)A有r个水平A1, A2, . . . , Ar. 现在

水平Ai下进行ni次独立观测, 得到观测数据为Xij , j 1, 2, , ni, i

1, 2, , r, 则单因素方差模型可表示为

Xij µ  αi   εij , i 1, 2, , r, j 1, 2, , ni,

εij Np0, σ2q,且各εij相互独立,∑r

i1 niαi 0.

(8-1.1)

8.1 单因子方差分析 227

其中µ为总平均, αi是第i个水平的效应, εij是随机误差. 若n1 n2 nr, 称

模型是平衡的, 否则称为非平衡的.

我们的目的是要比较因素A的r个水平的京郊是否有显著差异,这可归结

为检验假设

H0 : α1 α2 αr ÐÑ H1 : α1, α2, . . . , αr不全相等

如果H0被拒绝, 则说明因素A的各水平的效应之间有显著的差异, 否则, 差异

不明显.

按照方差分析的思想, 将总离差平方和分解为二部分, 即

SST SSE   SSA

其中

SST

r∑

i1

ni∑

j1

pXij Xq

2, X

1

n

r∑

i1

ni∑

j1

Xij

SSE

r∑

i1

ni∑

j1

pXij Xi.q

2, Xi.

1

n

ni∑

j1

Xij

SSA

r∑

i1

ni∑

j1

pXi. Xq

2

这里称SST为总离差平方和(或称总变差), 它是所有数据Xij与总平均值X之

差的平方和, 描绘所有观察数据的离散程度; SSE为误差平方和(或组内平方

和), 是对固定的i, 观测值Xi1, Xi2, , Xini之间的差异大小的度量. SSA为因

素A的效应平方(和或组间平方和), 表示因子A各水平下的样本均值和总平均

值之差的平方和.

可以证明, 当H0成立时

SSE

σ2

χ2pn rq,

SSA

σ2

χ2pr 1q,

且SSA与SSE独立. 于是

F

SSA{pr 1q

SSE{pn rq

F pr 1, n rq (8-1.2)

228 第八章 方差分析

若F ¡ Fαpr 1, n rq, 则拒绝原假设, 认为因素A的r个水平有显著差异, 反

之“接受”原假设. 这也可以通过检验的p值来决定是接受还是拒绝原假设H0.

R中函数aov( )提供了方差分析的计算与检验, 其调用格式为

aov(formula, data=NULL, projections=FALSE,

aov( )的调用格式

qr=TRUE, contrasts=NULL, …)

说明: formula是方差分析的公式, 在单因素方差分析中它表示为x A, data是

数据框, 其它参见在线帮助.

例 8.1.1 以淀粉为原料生产葡萄的过程中, 残留许多糖蜜, 可作为生产

酱色的原料. 在生产酱色的过程之前应尽可能彻彻底底除杂, 以保证酱色质量.

为此对除杂方法进行选择. 在实验中选用5种不同的除杂方法, 每种方法做4次

试验, 即重复4次, 结果见表8.1.

表 8.1 不同除杂方法的除杂量

除杂方法Ai 除杂量Xij 均量Xi

A1 25.6 22.2 28.0 29.8 26.4

A2 24.4 30.0 29.0 27.5 27.7

A3 25.0 27.7 23.0 32.2 27.0

A4 28.8 28.0 31.5 25.9 28.6

A5 20.6 21.2 22.0 21.2 21.3

解 R程序为:

> X<-c(25.6, 22.2, 28.0, 29.8, 24.4, 30.0, 29.0, 27.5, 25.0, 27.7,

23.0, 32.2, 28.8, 28.0, 31.5, 25.9, 20.6, 21.2, 22.0, 21.2)

> A<-factor(rep(1:5, each=4))

> miscellany<-data.frame(X, A)

> aov.mis<-aov(X~A, data=miscellany)

> summary(aov.mis)

输出结果为

8.1 单因子方差分析 229

Df Sum Sq Mean Sq F value Pr(>F)

A 4 131.957 32.989 4.3061 0.01618 *

Residuals 15 114.915 7.661



Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ‘ 1

¥

说明: 上述结果中, Df表示自由度; sum Sq表示平方和; Mean Sq表示均方和;

F value表示F检验统计量的值, 即F比; Pr(>F)表示检验的p值; A就是因素A;

Residuals为残差.

可以看出, F 4.3061 ¡ F0.05p51, 205q 3.06,或者p=0.01618<0.05,

说明有理由拒绝原假设, 即认为五种除杂方法有显著差异. 据上述结果可以填

写下面的方差分析表:再通过函数plot( )绘图可直观描述5种不同除杂方法之

表 8.2 除杂方法试验的方差分析表

方差来源 自由度 平方和 均方和 F比 p值

因素A 4 131.957 32.989 4.3061 0.01618

误差 15 114.915 7.661

总和 19 246.872

间的差异, R中运行命令

> plot(miscellany$X~miscellany$A)

得到图8.1. 从图形上也可以看出, 5种除杂方法产生的除杂量有显著差异, 特别

第5种与前面的4种, 而方法1与3, 方法2与4的差异不明显.

8.1.2 均值的多重比较

进行方差分析后发现各效应的均值之间有显著差异, 此时只能知道有某些

均值彼此不同, 但无法知道哪些均值不同, 下面的方法帮助我们找出在进行方

差分析时哪些均值是不同的.

230 第八章 方差分析

1 2 3 4 5

22

24

26

28

30

32

miscellany$A

m

is

ce

lla

ny

$X

图 8.1 不同除杂方法的差异

多重t检验方法

这种方法就是针对因子A的两个效应进行比较, 假设检验为

H0 : αi αj , i j, pi, j 1, 2, , rq

检验统计量为

Tij

Xi. Xj.√

MSEp

1

ni

 

1

nj

q

, i j, ipj 1, 2, , rq

其中MSE SSE{pn rq为误差的均方和, 也是σ2的估计. 当H0成立时, Tij

tpn rq. 所以检验的拒绝域为

C {|Tij| ¡ t1α2 pn rq}. (8-1.3)

8.1 单因子方差分析 231

说明: 多重t检验方法使用方便, 但当多次重复使用t检验时会增大犯第一类错

误的概率, 从而使得“有显著差异”的结论不一定可靠, 所以在进行较多次重复

比较时, 我们要对p值进行调整.

R软件中p值调整使用函数p.adjust( ), 其调用格式为

p.adjust(p, method=p.adjust.methods, n=length(p))

p.adjust()的调用格式

说明: p是p值构成的向量, method是修正方法, 包括

ˆ Holm(1979)方法

ˆ Hochberg(1988)方法

ˆ Hommel(1988)方法

ˆ Bonferroni方法

ˆ Benjamini & Hochberg, BH(1995)方法

ˆ Benjamini & Yekutieli, BY(2001)方法

R中键入命令

> p.adjust.methods

得到调整方法的列表:

[1] “holm” “hochberg” “hommel” “bonferroni” “BH”

[6] “BY” “fdr” “none”

具体意义参见在线帮助.

当比较次数较多时, Bonferroni方法的效果较好, 所以在作多重t检验时

常采用Bonferroni法对p进行调整. 实际上, 它采用a a1{k作为给出“有无显

著差异”的检验水平, 其中k为两两比较的次数, a1为累积I类错误的概率.

R软件中函数pairwise.t.test( )可以得到多重比较的p值, 其调用格式



232 第八章 方差分析

pairwise.t.test(x, g, p.adjust.method=p.adjust.methods,

pairwise.t.test( )的调用格式

pool.sd=TRUE, …)

说明: x是响应变量构成的向量, g是分组向量(因子). p.adjust.method是上

面提到的调整p值的方法,“p.adjust.method=none”表示不作任何调整, 默认

值按Holm方法调整.

例 8.1.2 对例8.1.1作均值的多重比较, 进一步检验

H0 : αi αj i, j 1, 2, 3, 4, 5

解 用三种方法进行多重比较:

ˆ 不对p作出调整: R程序为

> pairwise.t.test(X, A, p.adjust.method=”none”)

检验结果如下:

data: X and A

1 2 3 4

2 0.5087 – – –

3 0.7729 0.7069 – –

4 0.2893 0.6793 0.4335 –

5 0.0189 0.0048 0.0104 0.0020

P value adjustment method: none

检验的结果与图8.1一致, 即µ5与其它4个差异明显,后者差异不明显.

ˆ 按缺省的“holm”对p值进行调整: R程序为

> pairwise.t.test(X, A, p.adjust.method=”holm”)

检验结果如下:

Pairwise comparisons using t tests with pooled SD

8.1 单因子方差分析 233

data: X and A

1 2 3 4

2 1.000 – – –

3 1.000 1.000 – –

4 1.000 1.000 1.000 –

5 0.132 0.043 0.084 0.020

P value adjustment method: holm

ˆ 按缺省的“holm”对p值进行调整: R程序为

> pairwise.t.test(X, A, p.adjust.method=”bonferroni”)

检验结果如下:

Pairwise comparisons using t tests with pooled SD

data: X and A

1 2 3 4

2 1.000 – – –

3 1.000 1.000 – –

4 1.000 1.000 1.000 –

5 0.189 0.048 0.104 0.020

P value adjustment method: bonferroni

从输出结果可以看出, 作调整后p值增大, 在一定程度上克服了多重t检验

的缺点.

¥

8.1.3 同时置信区间: Tukey法

若经前面的F检验, H0 : α1 αr被拒绝了, 则因子A的r个水平的效

应不全相等, 这时我们希望对效应之差αi αj pi  jq作出置信区间, 由此了

234 第八章 方差分析

解哪一些效应不相等. 这里仅介绍一种基于学生化极差分布的TUKEY 方法. 这

是J.W.Tukey(1952)提出的一种多重比较方法, 是以试验错误率为标准的, 又称

真正显著差(honesty significient difference, HSD)法. 该方法基于下面

的定理:

定理 8.1.1 设X1, X2, , Xn是iid的Npµ, σ2q, U m σˆ2σ2 χ2pmq,

且U,X1, . . . , Y n相互独立, 则

1)

max

i

Ximin

i

Xi

σˆ2{σ2

qpn,mq, 其中qpn,mq表示参数为n,m的学生化极差分布.

2) 所有αi αj , i  j的置信系数为1 α的同时置信区间为

Xi Xj q1αpn,mqσˆ ¤ αi αj ¤ Xi Xj   q1αpn,mq.

对于平衡的方差分析模型, 设n1 nr n,N nr, 由

X Npµ  αi, σ

2

{nq

且Xi与Xj独立,

pN rq

σˆ2

σ2

χ2pN rq,

故由定理知, 对一切i  j, αi αj的置信系数为1 α的同时置信区间(称

为Turkey区间)为

Xi Xj q1αpr, rpn 1qq

σ√

n

.

若ni  nj , 则αi αj的置信系数为1 α的同时置信区间近似为

Xi Xj q1αpr, rpn 1qq

σ√

2



1

ni

 

1

nj

.

在R软件中, 函数qtukey( )用于计算q分位数, 函数TukeyHSD( )用于计

算同时置信区间, 其调用格式为

TukeyHSD(x, which, ordered=FALSE, conf.level=0.95…)

TukeyHSD( )的调用格式

说明: x为方差分析的对象, which是给出需要计算比较区间的因子向量,

ordered是逻辑值, 如果为”true”, 则因子的水平先递增排序, 从而使得因子间

差异均以正值出现. conf.level是置信水平.

8.1 单因子方差分析 235

例 8.1.3 某商店以各自的销售方式卖出新型手表, 连续四天手表的销

售量如表8.3所示, 试考察销售方式之间是否有显著差异.

表 8.3 销售方式与销售量数据表

销售方式 销售量数据

A1 23 19 21 13

A2 24 25 28 27

A3 20 18 19 15

A4 22 25 26 23

A5 24 23 26 27

解 首先以数据框形式生成数据sales.

> sales<-data.frame(

X=c(23, 19, 21, 13, 24, 25, 28, 27, 20, 18,

19, 15, 22, 25, 26, 23, 24, 23, 26, 27),

A=factor(rep(1:5, c(4, 4, 4, 4, 4)))

)

其次进行方差分析, 由R命令

> summary(aov(X~A, sales))



Df Sum Sq Mean Sq F value Pr(>F)

A 4 212.800 53.200 7.98 0.001178 **

Residuals 15 100.000 6.667



Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.

可见不同的销售方式有差异.

最后再求均值之差的同时置信区间. R命令为

236 第八章 方差分析

> TukeyHSD(aov(X~A, sales))

运行结果为

Tukey multiple comparisons of means

95% family-wise confidence level

Fit: aov(formula = X ~ A, data = sales)

$A

diff lwr upr p adj

2-1 7 1.362247 12.637753 0.0120117

3-1 -1 -6.637753 4.637753 0.9805632

4-1 5 -0.637753 10.637753 0.0944731

5-1 6 0.362247 11.637753 0.0344328

3-2 -8 -13.637753 -2.362247 0.0041527

4-2 -2 -7.637753 3.637753 0.8062057

5-2 -1 -6.637753 4.637753 0.9805632

4-3 6 0.362247 11.637753 0.0344328

5-3 7 1.362247 12.637753 0.0120117

5-4 1 -4.637753 6.637753 0.9805632

可以看出, 共有10个两两比较的结果, A3A1、A4A2、A5A2和A5A4的

差异是显著的, 其它两两比较的结果均是不显著的. ¥

8.1.4 方差齐性检验

前面已提到要进行方差分析, 应具备以下三个条件:(1)可加性, (2)独立正

态性, (3)方差齐性. 方差齐性检验就是检验数据在不同水平下方差是否相同.

最常用的方法就是Bartlett检验和Levene检验.

Bartlett检验

方差齐性检验就是检验数据在不同水平下方差是否相同, 方差齐性检验最

常用的方法是Bartlett检验和Levene检验. 检验问题为:

H0: 各因子水平下的方差相同ÐÑ H1: 各因子水平下的方差不齐

8.1 单因子方差分析 237

当处理组的数据较多时, 令N ∑ri1 ni,

S2i

1

ni 1

ni∑

j1

pXij Xiq

2

S2c

∑k

i1

[∑ni

j1pXij Xiq

]∑k

i1pni 1q

1

N r

r∑

i1

pni 1qS2i MSE

C 1 

1

3pr 1q

[

r∑

i1

1

ni 1

1

N r

]

则在原假设成立下, 统计量

χ2

2.3026

C

[

pN rq lnS2c

r∑

i1

pni 1q lnS2i

]

, ν k 1

近似服从自由度为pr 1q的χ2分布. 因此对于给定的显著性水平α, 若p值小

于α, 则拒绝H0, 即认为至少有两个水平下的数据的方差不相等; 否则认为数据

满足方差齐性的要求.

R软件中, 函数Barlett.test( )提供Bartlett检验, 其调用格式为:

bartlett.test(x, g, …)

Barlett.test()调用格式

bartlett.test(formula, data, subset, no.action, …)

说明: x是由数据构成的向量或列表; g是由因子构成的向量, 当x是列表时, 此

项无效; formula是方差分析公式, data是数据框, 其余参数见在线帮助.

Levene检验

将原样本观察值作离均差变换, 或离均差平方变换, 然后进行方差分析, 其

检验结果用于判断方差是否齐性.

p1qdij |Xij Xi|; p2qdij |Xij mdi|; p3qdij |Xij Xi|2

其中mdi为第i水平下数据的样本中位数.

238 第八章 方差分析

Levene检验对原始数据是否为正态不灵敏, 所以比较稳健, 因此推荐采

用LEVENE方差齐性检验.

R的程序包car中提供了Levene检验的函数levene.test( ), 其调用格式

为:

levene.test(x, group)

levene.test( )调用格式

说明: x是由数据构成的向量, g是由因子构成的向量.

例 8.1.4 对例8.1.3的数据作方差齐性检验. 分别用Bartlett检验

和levene检验检验方差的齐性.

解 先用Bartlett检验, 程序

> bartlett.test(X~A, data=sales)

得检验结果:

Bartlett test of homogeneity of variances

data: X by A

Bartlett’s K-squared = 3.7231, df = 4, p-value = 0.4448

即p值(0.4448)>0.05, 接受原假设, 认为各处理组的数据是等方差的.

再用levene检验, 程序

> library(car)

> levene.test(sales$X, sales$A)

得检验结果:

Levene’s Test for Homogeneity of Variance

Df F value Pr(>F)

group 4 0.8182 0.5333

15

即p值(0.5333)>0.05, 接受原假设, 认为各处理组的数据满足方差齐性的要求.

因此两种检验方法有完全相同的结果. ¥

8.2 双因子方差分析 239

注:

1) 方差分析模型可视为一种特殊的线性模型, 因此方差分析还可以使用第

九章讲的线性模型函数lm( ), 并用函数anova( )提取其中的方差分析

表, 因此aov(formula)等价于anova(lm(formula));

2) 单因子方差分析还可使用函数oneway.test( ), 若各水平下数据的方差

相等(使用选项var.equal=TRUE), 它等同于使用函数aov( )进行一般的

方差分析; 若各水平下数据的方差不相等(使用选项var.equal=FALSE),

则它使用Welch(1951)的近似方法进行方差分析;

3) 当各水平下的分布未知时,则采用第七章讲的Kruskal-Wallis秩和检验

进行方差分析.

§8.2 双因子方差分析

对于两因素的方差分析, 基本思想和方法与单因素的方差分析相似, 前提

条件仍然是要满足独立、正态、方差齐性. 所不同的是在双因素方差分析中,

有时会出现交互作用, 即二因素的不同水平交叉搭配对指标产生影响. 我们先

讨论无交互作用的双因素方差分析.

8.2.1 无交互作用的方差分析

设有A!B两个因素, 因素A有r个水平A1, A2, , Ar; 因素B有s个水

平B1, B2, , Bs. 在因素A!B的每一个水平组合pAi, Bjq 下进行一次独立

试验得到观察值Xij , i 1, 2, , r, j 1, 2, , s, 假定Xij Npµij , σ2q, 且

各Xij相互独立. 则不考虑交互作用的两因素方差分析模型可表示为

Xij µi   αi   βj   εij , i 1, 2, , r, j 1, 2, , s,

εij Np0, σ2q,且各εij相互独立,∑r

i1 αi 0,

∑s

j1 βj 0.

其中µ 1

rs

∑r

i1

∑s

j1 µij为总平均. αi为因素A的第i个水平的效应, βj为因

素B的第j个水平的效应.

在给定显著性水平α下, 考虑如下假设检验:

240 第八章 方差分析

H01 : α1 α2 αr 0(因子A对指标影响不显著)

H02 : β1 β2 βs 0(因子B对指标影响不显著)

类似于单因素方差分析, 先对总离差平方和SST分解为因素A的效应平方

和SSA、因素B的效应平方和SSB及误差平方和SSE , 即

SST

r∑

i1

s∑

j1

pXij Xq

2

r∑

i1

s∑

j1

[

pxyij Xi. X .j  Xq   pXi. Xq   pX .j Xq

]2

r∑

i1

s∑

j1

pXi. Xq

2

 

r∑

i1

s∑

j1

pX .j Xq

2

 

r∑

i1

s∑

j1

pXij Xi. X .j  Xq

2

SSA   SSB   SSE

其中

X

1

rs

r∑

i1

s∑

j1

Xij

Xi.

1

s

s∑

j1

Xij pi 1, 2, , rq

X .j

1

r

r∑

i1

Xij pj 1, 2, , sq

可以证明:

1) 当H01成立时,

SSA

σ2

χ2pr 1q,

SSE

σ2

χ2ppr 1qps 1qq,

且SSA与SSE独立, 于是

FA

SSA{pr 1q

SSE{rpr 1qps 1qs

F pr 1, pr 1qps 1qq.

8.2 双因子方差分析 241

2) 当H02成立时,

SSB

σ2

χ2ps 1q,

且SSB与SSE独立, 于是

FB

SSB{ps 1q

SSE{rpr 1qps 1qs

F ps 1, pr 1qps 1qq.

所以, H01与H02的的拒绝域分别为

CA {FA ¡ F1αpr 1, pr 1qps 1qq}

CB {FB ¡ F1αps 1, pr 1qps 1qq}.

在R软件中, 方差分析函数aov( )既适合于单因素方差分析, 也同样适用

于双因素方差分析, 其中方差模型公式为x A   B, 加号表示两个因素具有

可加的. 下面用一个例子来说明.

例 8.2.1 原来检验果汁中含铅量有三种方法A1、A2、A3, 现研究出另

一种快速检验法A4, 能否用A4代替前三种方法, 需要通过实验考察. 观察的对

象是果汁, 不同的果汁当做不同的水平: B1为苹果, B2为葡萄汁, B3为西红柿

汁, B4为苹果饮料汁, B5桔子汁, B6菠萝柠檬汁. 现进行双因素交错搭配试验,

即用四种方法同时检验每一种果汁, 其检验结果如表8.4所示. 问因素A(检验方

法)和B(果汁品种) 对果汁的含铅量是否有显著影响?

表 8.4 果汁含铅比测试实验数据统计

因素 因素B

A B1 B2 B3 B4 B5 B6 Xi

A1 0.05 0.46 0.12 0.16 0.84 1.30 2.93

A2 0.08 0.38 0.40 0.10 0.92 1.57 3.45

A3 0.11 0.43 0.05 0.10 0.94 1.10 2.73

A4 0.11 0.44 0.08 0.03 0.93 1.15 2.74

X.j 0.35 1.71 0.65 0.39 3.63 5.12 X.. 11.85

解 首先建立数据框:

242 第八章 方差分析

> juice<-data.frame(

X = c(0.05, 0.46, 0.12, 0.16, 0.84, 1.30, 0.08, 0.38, 0.4,

0.10, 0.92, 1.57, 0.11, 0.43, 0.05, 0.10, 0.94, 1.10,

0.11, 0.44, 0.08, 0.03, 0.93, 1.15),

A = gl(4, 6),

B = gl(6, 1, 24)

)

注: 这里函数gl( )用来给出因子水平, 其调用格式为

gl(n, k, length=n*k, labels=1:n, ordered=FALSA)

gl( )的调用格式

说明: n是水平数, k是每一水平上的重复次数, length是总观测值数,

ordered指明各水平是否先排序.

下面作双因素方差分析, R程序为:

> juice.aov<-aov(X~A+B, data=juice)

> summary(juice.aov)

分析结果为

Df Sum Sq Mean Sq F value Pr(>F)

A 3 0.0570 0.0190 1.6287 0.2248

B 5 4.9022 0.9804 83.9755 2.003e-10 ***

Residuals 15 0.1751 0.0117



Signif. codes: 0‘***’ 0.001‘**’ 0.01‘*’ 0.05‘.’ 0.1‘ ’ 1

结论: p值说明果汁品种(因素B)对含铅量有显著影响, 而没有充分理由说明检

验方法(因素A)对含铅量有显著影响.

最后用函数bartlett.test( )分别对因素A和因素B作方差的齐性检验:

> bartlett.test(X~A, data=juice) # 对因素A

Bartlett test of homogeneity of variances

8.2 双因子方差分析 243

data: X by A

Bartlett’s K-squared = 0.268, df = 3, p-value = 0.966

> bartlett.test(X~B, data=juice) #对因素B

Bartlett test of homogeneity of variances

data: X by B

Bartlett’s K-squared = 17.4216, df = 5, p-value = 0.003766

结论: 对因素A, p值(0.966)远大于0.05, 接受原假设, 认为因素A的各水平下

的数据是等方差的; 对因素B, p值(0.003766)小于0.05, 拒绝原假设, 即认为因

素B不满足方差齐性要求. ¥

8.2.2 有交互作用的方差分析

设有两个因素A和B, 因素A有r个水平A1, A2, , Ar; 因素B有s个水

平B1, B2, , Bs. 在许多情况下, 两因素A与B之间存在着一定程度的交互

作用. 为了考察因素间的交互作用, 要求在两个因素的每一水平组合下进行重

复试验. 设在每种水平组合pAi, Bjq下重复试验t次. 记第k次的观测值为Xijk.

则有交互作用的两因素方差分析模型可表示为

Xij µ  αi   βj   δij   εijk, i 1, 2, . . . , r, j 1, 2, . . . , s, k 1, 2, . . . , t

εijk Np0, σ2q,且各εijk相互独立∑r

i1 αi 0,

∑s

j1 βj 0,

∑r

i1 δij

∑s

j1 δij 0

这里αi为因素A的第i个水平的效应, βj为因素B的第j个水平的效应,

δij为Ai和Bj的交互效应, µ 1rs

∑r

i1

∑s

j1 µij .

检验的假设为

H01 : α1 α2 αr 0 (因素A对指标X没有影响)

H02 : β1 β2 βs 0 (因素B对指标X没有影响)

H03 : δ11 δ12 δrs 0 (因素A和B没有联合作用)

244 第八章 方差分析

类似于无交互作用的方差分析, 总的离差平方和可分解为

SST

r∑

i1

s∑

j1

t∑

k1

pXijk Xq

2

r∑

i1

s∑

j1

t∑

k1

pXijk Xij.q

2

  st

r∑

i1

pXi.. Xq

2

rt

s∑

j1

pX¯.j. Xq

2

  t

r∑

i1

s∑

j1

pXij. Xi.. X .j.  Xq

2

SSE   SSA   SSB   SSAB.

其中

X

1

rst

r∑

i1

s∑

j1

t∑

k1

Xijk, Xij.

1

t

t∑

k1

Xijk,

Xi..

1

st

s∑

j1

t∑

k1

Xijk, X .j.

1

rt

r∑

i1

t∑

k1

Xijk.

可以证明,

1) 当H01成立时,

FA

SSA{pr 1q

SSE{rrspt 1qs

F pr 1, rspt 1qq.

2) 当H02成立时,

FB

SSB{ps 1q

SSE{rrspt 1qs

F ps 1, rspt 1qq.

3) 当H03成立时,

FAB

SSAB{rpr 1qps 1qs

SSE{rrspt 1qs

F ppr 1qps 1q, rspt 1qq.

R软件中仍用函数aov( )进行有交互作用的方差分析, 但其中的方差模型格式

为x A B  A : B. 下面用一个例子来全面展示有交互作用方差分析过程.

8.2 双因子方差分析 245

例 8.2.2 有一个关于检验毒品强弱的试验, 给48只老鼠注射I、II、III三

种毒药(因素A), 同时有A、B、C、D 4种治疗方案(因素B), 这样的试验在每一

种因素组合下都重复四次测试老鼠的存活时间, 数据如表8.5所示. 试分析毒药

和治疗方案以及它们的交互作用对老鼠存活时间有无显著影响.

表 8.5 老鼠存活时间(年)的实验报告

A B C D

I 0.31 0.45 0.82 1.10 0.43 0.45 0.45 0.71

0.46 0.43 0.88 0.72 0.63 0.76 0.66 0.62

II 0.36 0.29 0.92 0.61 0.44 0.35 0.56 1.02

0.40 0.23 0.49 1.24 0.31 0.40 0.71 0.38

III 0.22 0.21 0.30 0.37 0.23 0.25 0.30 0.36

0.18 0.23 0.38 0.29 0.24 0.22 0.31 0.33

解 首先以数据框形式输入数据, 并用函数plot( )作图. 图8.2显示两因

素的各水平均有较大差异存在.

> rats<-data.frame(

Time=c(0.31, 0.45, 0.46, 0.43, 0.82, 1.10, 0.88, 0.72, 0.43, 0.45,

0.63, 0.76, 0.45, 0.71, 0.66, 0.62, 0.38, 0.29, 0.40, 0.23,

0.92, 0.61, 0.49, 1.24, 0.44, 0.35, 0.31, 0.40, 0.56, 1.02,

0.71, 0.38, 0.22, 0.21, 0.18, 0.23, 0.30, 0.37, 0.38, 0.29,

0.23, 0.25, 0.24, 0.22, 0.30, 0.36, 0.31, 0.33),

Toxicant=gl(3, 16, 48, labels = c(“I”, “II”, “III”)),

Cure=gl(4, 4, 48, labels = c(“A”, “B”, “C”, “D”))

)

> op<-par(mfrow=c(1, 2))

> plot(Time~Toxicant+Cure, data=rats)

下面再用函数interaction.plot( )作出交互效应图, 以考查因素之间交互作

用是否存在, R程序为

> with(rats,

246 第八章 方差分析

I II III

0.

2

0.

4

0.

6

0.

8

1.

0

1.

2

Toxicant

Ti

m

e

A B C D

0.

2

0.

4

0.

6

0.

8

1.

0

1.

2

Cure

Ti

m

e

图 8.2 毒药和治疗方案两因素的各自效应分析

interaction.plot(Toxicant, Cure, Time, trace.label=”Cure”))

> with(rats,

interaction.plot(Cure, Toxicant, Time, trace.label=”Toxicant”))

输出结果如图8.3(a)和图8.3(b). 两图中的曲线并没有明显的相交情况出现, 因

此我们初步认为两个因素没有交互作用.

尽管如此, 由于实验误差的存在, 我们用方差分析函数aov( )对此进行确

认, 其中方差模型格式为x A B, 或A B A : B, 表示不仅考虑因素A、B各

自的效应, 还考虑两者的交互效应. 若仅考虑A与B的交互效应则方差模型格式

为A : B.

由R程序

8.2 双因子方差分析 247

0.

2

0.

3

0.

4

0.

5

0.

6

0.

7

0.

8

0.

9

Toxicant

m

e

a

n

 o

f  

Ti

m

e

I II III

   Cure

B

D

C

A

(a) 以治疗方案为跟踪变量

0.

2

0.

3

0.

4

0.

5

0.

6

0.

7

0.

8

0.

9

Cure

m

e

a

n

 o

f  

Ti

m

e

A B C D

   Toxicant

II

I

III

(b) 以毒药为跟踪变量

图 8.3 交互效应图

> rats.aov<-aov(Time~Toxicant*Cure, data=rats)

> summary(rats.aov)

得到检验结果为

Df Sum Sq Mean Sq F value Pr(>F)

Toxicant 2 1.03563 0.51781 23.2254 3.326e-07 ***

Cure 3 0.91462 0.30487 13.6745 4.132e-06 ***

Toxicant:Cure 6 0.24782 0.04130 1.8526 0.1163

Residuals 36 0.80262 0.02230



Signif. codes: 0‘***’ 0.001‘**’ 0.01‘*’ 0.05‘.’ 0.1‘ ’ 1

根据p值知, 因素Toxicant和Cure对Time的影响是高度显著的, 而交互作

用对Time的影响却是不显著的.

再 进 一 步 使 用 前 面 的Bartlett和Levene两 种 方 法 检 验 因

素Toxicant和Cure下的数据是否满足方差齐性的要求, R程序如下.

> library(car)

> levene.test(rats$Time, rats$Toxicant)

> levene.test(rats$Time, rats$Cure)

> bartlett.test(Time~Toxicant, data=rats)

248 第八章 方差分析

> bartlett.test(Time~Cure, data=rats)

结果显示从略, 其中各p值均小于0.05表明在0.05显著性水平下两因素下的方差

不满足齐性的要求, 这与图8.2是一致的. ¥

§8.3 协方差分析

前面两节介绍的方差分析方法中两组或多组均值间比较的假设检验, 其处

理因素一般是可以控制的. 但在实际工作中, 有时有些因素无法加以控制, 如

何在比较两组或多组均数间差别的同时扣除或均衡这些不可控因素的影响, 可

考虑采用协方差分析的方法.

协方差分析(Analysis of Covariance, 简称ancova)是将线性回归分析

与方差分析结合起来的一种统计分析方法. 其基本思想就是: 将一些对响应变

量Y有影响的变量(指未知或难以控制的因素)看作协变量(covariate), 建立响

应变量Y随协变量X变化的线性回归关系, 并利用这种回归关系把X值化为相

等后再对各处理组Y的修正均值(adjusted means)间差别进行假设检验, 其实

质就是从Y的总的平方和中扣除X对Y的回归平方和, 对残差平方和作进一步

分解后再进行方差分析, 以更好地评价这种处理的效应.

可见, 对于一个协方差分析模型, 方差分析是主要的, 我们的基本目的是

作方差分析, 而回归分析仅仅是因为回归变量(协变量)不能完全控制而引入的.

下面讨论最简单的情形: 一个协变量、单因素的协方差分析.

设试验只有一个因素A在变化, A有r个水平A1, A2, , Ar, 与之有关

的仅有一个协变量X, 在水平Ai下进行ni次独立观测, 得到n对观测数

据pXij , Yijq, i 1, 2, , r; j 1, 2, , ni, 则协方差模型可用线性模型表

示为

Yij µ  αi   βpXij X ..q   εij , i 1, 2, , r, j 1, 2, , ni

εij Np0, σ2q,且各εij相互独立∑r

i1 niαi 0, β 0

其中µ为总平均, αi为第i个水平的效应, β是Y对X的线性回归函数, εij为随机

误差, X ..为Xij的总平均数.

8.3 协方差分析 249

给定显著水平α, 考虑假设检验

H0 : α1 α2 αr 0,ÐÑ H1 : α1, α2, , αr不全相等



SST pyq

r∑

i1

ni∑

j1

pYij Y ..q

2

r∑

i1

ni∑

j1

Yij nY

2

.. py的总离均差平方和q

SSApyq

r∑

i1

ni∑

j1

pY i. Y ..q

2

r∑

i1

niY

2

i. nY

2

.. py的组间平方和q

SSEpyq

r∑

i1

ni∑

j1

pYij Y i.q

2

SST pyq SSApyq py的组内平方和q

SST pxq

r∑

i1

ni∑

j1

pXij X ..q

2

r∑

i1

ni∑

j1

Xij nX

2

.. px的总离均差平方和q

SSApxq

r∑

i1

ni∑

j1

pXi. XY..q

2

r∑

i1

niX

2

i. nX

2

.. px的组间平方和q

SSEpxq

r∑

i1

ni∑

j1

pXij X .iq

2

SST pxq SST pxq py的组内平方和q

SPT

r∑

i1

ni∑

j1

pXij X ..qpYij Y ..q

r∑

i1

ni∑

j1

XijYij nX ..Y ..

px与y的总离均差乘积和q

SPA

r∑

i1

ni∑

j1

pXi. X ..qpY i. Y ..q

r∑

i1

niXi.Y i. nX ..Y ..

px与y的组间乘积和q

SPE

r∑

i1

ni∑

j1

pXij Xi.qpYij Y i.q SPT SPA px与y的组内乘积和q

其中

Xi.

1

ni

ni∑

j1

Xij , Y i.

1

ni

ni∑

j1

Yij ,

250 第八章 方差分析

X ..

1

r

r∑

i1

1

ni

ni∑

j1

Xij

1

r

r∑

i1

Xi.,

Y ..

1

r

r∑

i1

1

ni

ni∑

j1

Yij

1

r

r∑

i1

Y i..

由此得参数µ、αi和β的估计为

µˆ Y .., βˆ b

SPE

SSEpxq

, αˆi Y i. Y .. b

pXi. X ..q

其中bpXi. X ..q反映了因线性回归系数显著时对数据知矫正. 这时矫正后的

组内平方和为

SSE SSEpyq b

SPE SSEpyq

SP 2E

SSEpxq

,

其自由度为df n r 1, 且SSE

σ2

χ2pn r 1q. 矫正后总平方和为

SST SST pyq

SP 2T

SST pxq

,

矫正后的组间平方和为

SSA SST SSE ,

其自由度为df r 1, 且SSA

σ2

χ2pr 1q. 而在H0成立时, SSA与SSE独立,

从而

F

SSA

r 1

SSE

n r 1

F pr 1, n r 1q.

因此, 若F ¡ F1αpr 1, n r 1q, 则拒绝H0, 即认为各水平效应显著不同.

反之“接受”原假设.

R中HH程序包中的函数ancova( )提供了方差分析的计算, 其调用格式为

ancova(formula, data.in = sys.parent(),

ancova( )的调用格式

x, groups)

说明:formula是协方差分析的公式, data.in是数据框, x为协方差分析中的

8.3 协方差分析 251

协变量, 在作图时若formula中没有x则需要指出, groups为因子, 在作图时

若formula的条件项中没有groups则需要指出, 其它参见在线帮助.

例 8.3.1 为研究A、B、C三种饲料对猪的催肥效果, 用每种饲料喂

养8头猪一段时间, 测得每头猪的初始重量(X)和增重(Y), 数据见表8.6. 试分析

三种饲料对猪的催肥效果是否相同?

表 8.6 三种饲料喂养猪的初始重量与增重

饲料A B饲料 C饲料

X1 Y1 X2 Y2 X3 Y3

1 15 85 17 97 22 89

2 13 83 16 90 24 91

3 11 65 18 100 20 83

4 12 76 18 95 23 95

5 12 80 21 103 25 100

6 16 91 22 106 27 102

7 14 84 19 99 30 105

8 17 90 18 94 32 110

解 饲料是人为可以控制的定性因素, 猪的初始重量是难以控制的定量因

子, 为协变量X; 实验的观察指标是猪的增量, 为响应变量Y . 各组的增重由于

受猪的原始体重影响, 不能直接进行方差分析, 需进行协方差分析. R程序及结

果如下:

ˆ 建立数据集

feed<-rep(c(“A”,”B”,”C”),each=8)

Weight_Initial <- c(15,13,11,12,12,16,14,17,17,16,

18,18,21,22,19,18,22,24,20,23,

25,27,30,32)

Weight_Increment <-c(85,83,65,76,80,91,84,90,97,90,

100,95,103,106,99,94,89,91,83,

95,100,102,105,110)

252 第八章 方差分析

data_feed<-data.frame(feed,Weight_Initial,Weight_Increment)

ˆ 若认为在三种不同饮料喂养下, 猪的初始体重不同,但增长速度相同, 这

时使用命令

> ancova(Weight_Increment ~ Weight_Initial+feed ,

data=data_feed)

得到图形8.4. 由函数anova( )提取协方差分析表得

Weight_Increment ~ Weight_Initial + feed

Weight_Initial

W

ei

gh

t_

In

cr

em

en

t

70

80

90

100

110

15 20 25 30

A

15 20 25 30

B

15 20 25 30

C

15 20 25 30

superpose

feed

A

B

C

图 8.4 增长速度相同下的回归

Analysis of Variance Table

8.3 协方差分析 253

Response: Weight_Increment

Df Sum Sq Mean Sq F value Pr(>F)

Weight_Initial 1 1621.12 1621.12 142.445 1.496e-10 ***

feed 2 707.22 353.61 31.071 7.322e-07 ***

Residuals 20 227.61 11.38



Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1

可见猪的初始体重和增长速度对猪的增重都有显著差异.

ˆ 若认为在三种不同饮料喂养下, 猪的初始体重和增长速度都不同, 这时使

用命令

> ancova(Weight_Increment ~ Weight_Initial*feed ,

data=data_feed)

得到图形8.5.

从两个图的比较及初始体重对增长的检验发现, 三种饲料对猪的催肥效果相

同, 猪的初始体重对其影响不大. ¥

254 第八章 方差分析

Weight_Increment ~ Weight_Initial * feed

Weight_Initial

W

ei

gh

t_

In

cr

em

en

t

70

80

90

100

110

15 20 25 30

A

15 20 25 30

B

15 20 25 30

C

15 20 25 30

superpose

feed

A

B

C

图 8.5 增长速度不同下的回归

第八章习题

8.1 有4个不同的实验室制作同一型号的纸张, 为比较各实验室生产纸张的

光滑度, 测量了每个实验室生产的8种张纸, 得其光滑度如表8.7所示. 假设上述

数据服从方差分析模型. 试在显著性水平α 0.05下, 检验各个实验室生产的

纸张的光滑度是否有显著差异.

8.2 在对比研究中观察正常人、萎缩性胃炎和胃癌三个不同群

体(用TYPE=A, B和C表示), 记录的资料见表8.8, 试对该组数据作方差分

析.

1) 检验三个群体中CEA含量的分布是否为正态分布, 方差是否相等(α

8.3 协方差分析 255

表 8.7 四个实验室生产纸张的光滑度

实验室 纸张光滑度

A1 38.7 41.5 43.8 44.5 45.5 46.0 47.7 58.0

A2 39.2 39.3 39.7 41.4 41.8 42.9 43.3 45.8

A3 34.0 35.0 39.0 40.0 43.0 43.0 44.0 45.0

A4 34.0 34.8 34.8 35.4 37.2 37.8 41.2 42.8

0.01)?

2) 试用方差分析(ANOVA)过程比较这三个群体CEA含量有无显著差异? 若

有显著差异, 请指出哪些群体间CEA的平均含量有显著差异? (α 0.05)

8.3 在饲料对样鸡增肥的研究中, 某研究所提出三种饲料配方:A1是以鱼粉

为主的饲料, A2是以槐树粉为主的饲料, A3是以苜蓿粉为主的饲料, 为比较三

种饲料的效果, 特选30只雏鸡随机均分为三组, 每组各喂一种饲料, 60天后观

察它们的重量, 试验结果如表8.9所示. 度在显著性水平α 0.05下进行方差分

析, 可以得到哪些结果?

8.4 为考察对纤维弹性测量的误差, 现对四个工厂(A1, A2, A3, A4)生产

的同一批原料进行测量, 每厂各找四个检验员(B1, B2, B3, B4)轮流使用各厂

设备进行重复测量, 试验数据如表8.10所示. 请问因素A与B的影响是否显

著(α 0.05)?

8.5 水稻试验问题: 考察的因子有水稻品种A和施肥量B; 考察的指标为水

稻的产量Y. 设因子A有三个水平: A1(窄叶青), A2(珍珠矮) 和A3(江二矮); 因

子B有四个水平:B1(无肥), B2(低肥), B3(中肥)和B4(高肥). 对这12种搭配的

每一种, 在两块试验田上做实验. 每块试验田分为12块面积相同的小田, 随机

地安排12种搭配条件进行试验. 得数据如下表8.11所示. 试分析水稻试验数据,

并回答以下问题:

1) 不同稻种的产量是否有显著的差别?哪种稻种更好些?

2) 不同的施肥量对产量是否有明显的影响? 最适合的施肥量是多少?

3) 稻种和施肥量对产量的影响哪个更大些?

4) 稻种和施肥量有无交互作用?

256 第八章 方差分析

表 8.8 胃液癌胚抗原(CEA)含量X(mg/ml)

20.4 30.2 210.4 365.0 56.8 37.8

265.3 175.0 169.8 356.4 254.0 262.3

正常人 170.5 360.0 78.4 86.4 128.0 24.1

(A) 28.5 108.5 472.5 158.6 238.7 253.6

57.0 189.6 59.3 259.3 380.2 210.5

64.6 87.3

281.0 377.1 230.0 537.9 248.7 571.4

766.2 495.0 87.3 389.8 423.9 577.3

萎缩性 66.8 521.3 327.8 421.4 149.7 47.5

胃炎 425.7 270.8 378.5 228.0 538.7 245.6

(B) 584.1 64.8 485.6 110.8 398.7 452.6

587.7 86.8 532.1 311.6 442.2

480.0 488.9 350.7 652.8 1400.0 850.0

725.6 590.0 765.0 1200.0 231.2 485.3

胃癌 600.0 1380.0 438.5 652.4 432.8 296.1

(C) 464.8 608.4 688.5 630.5 750.0 815.0

664.0 348.6 550.0 640.0

表 8.9 鸡饲料试验数据

饲料 鸡重/g

A1 1073 1058 1071 1037 1066 1026 1053 1049 1065 1051

A2 1061 1058 1038 1042 1020 1045 1044 1061 1034 1049

A3 1084 1069 1106 1078 1075 1090 1079 1094 1111 1092

5) 使产量达到最高的生产条件是什么?

8.6 用3种压力(B1、B2、B3)和四种温度(A1、A2、A3、A4)组成的集中试验

8.3 协方差分析 257

表 8.10 纤维弹性数据

检验员 A1 A2 A3 A4

B1 71.73 73.75 76.73 71.73

B2 72.73 76.74 79.77 73.72

B3 75.73 78.77 74.75 70.71

B4 77.75 76.74 74.73 69.69

表 8.11 水稻试验数据

B1 B2 B3 B4

A1 19.3 19.2 24.0 27.3 26.0 28.5 27.8 28.5

A2 21.7 22.6 27.5 30.3 29.0 28.7 30.2 29.8

A3 20.0 20.1 24.2 27.3 24.5 27.1 28.1 27.7

方案, 得到产品得率资料如表8.12所示, 试分析压力和温度以及它们的交互作

用对产品得率有无显著影响(α 0.05).

表 8.12 实验数据及计算表

温度A 压力B

B1 B2 B3

A1 52 43 39 41 47 53 49 38 42

A2 48 37 39 50 41 30 36 48 47

A3 34 42 38 36 39 44 37 40 32

A4 45 58 42 44 46 60 43 56 41

8.7 为了提高化工厂的产品质量, 需要寻求最优反应速度与压力的搭配, 为

此选择如下水平:

A: 反应速度(m/s) 60 70 80,

258 第八章 方差分析

B: 反应应力(kg) 2 2.5 3

在每个(Ai, Bj)条件下做2次试验, 其产量如表8.13所示.

表 8.13 试验数据

A1 A2 A3

B1 4.6 4.3 6.1 6.5 6.8 6.4

B2 6.3 6.7 3.4 3.8 4.0 3.8

B3 4.7 4.3 3.9 3.5 6.5 7.0

(1)对数据作方差分析(应考虑交互作用);

(2)对(Ai, Bj)条件下平均产量作多重比较.

8.8 在庆大霉素三种不同水平下, 即对照组(无), 30ug/ml和300ug/ml作兔

子结肠器官培养液中胸腺嘧啶核苷的吸收分析. 对每个试验, 可得到不同浓度

的胸腺嘧啶核苷X的含量和DNA的含成量Y , 数据如表8.14所示. 如果抗生素

有效, DNA(Y )合成率会降低. 试作协方差分析.

表 8.14 在兔结肠器官培养液中胸腺嘧啶核苷的吸收分析

对照 30ug/ml 300ug/ml

X1 Y1 X2 Y2 X3 Y3

1.40 0 1.6 0 2.2 0

1.5 3 2.0 3 2.3 3

1.8 5 2.3 5 3.0 10

2.2 10 2.9 10 3.2 5

3.4 2. 4.5 20 4.5 20

3.6 25 5.1 25 5.9 30

4.6 30 6.0 25 7.0 30

8.9 已知出生体重随种族的不同而不同. 白种人婴儿的出生体重比其他种

族的重. 出生体重也随孕期的增长而增加, 足月(40周)的婴儿通常比不足月(小

8.3 协方差分析 259

于40周)的重. 一般来说, 当比较不同种族婴儿的出生体重时必须对孕期长短进

行较正. 表8.15是出生体重孕期长短的数据. 试作协方差分析.

表 8.15 按母亲种族分类的出生体重的孕期

白人 黑人 西班牙人 亚洲人

孕期 出生体重 孕期 出生体重 孕期 出生体重 孕期 出生体重

(天数) (盎司) (天数) (盎司) (天数) (盎司) (天数) (盎司)

X1 Y1 X2 Y2 X3 Y3 X4 Y4

260 130 260 115 262 113 260 111

275 135 263 118 264 115 271 174

278 138 270 120 270 120 274 117

280 142 278 125 275 121 279 118

282 146 281 128 280 127 281 120

288 149 285 132 284 132 283 122

第九章 回归分析与相关分析

本章概要

♦ 相关性及其度量

♦ 一元线性回归分析

♦ 多元线性回归分析

♦ 回归诊断

♦ logistic回归

相关分析和回归分析是研究变量间相互关系, 测定它们联系的紧密程度.

揭示其变化的具体形式和规律性的统计方法, 是构造各种经济模型、进行结构

分析、政策评价、预测和控制的重要工具.

§9.1 相关性及其度量

9.1.1 相关性概念

变量之间相互关系大致可分为两种类型, 即函数关系和相关关系. 函数

关系是指变量之间存在的相互依存关系, 它们之间的关系可以用某一方程(函

数)y fpxq表达出来; 相关关系是指两个变量的数值变化存在不完全确定的

依存关系, 它们之间的数值不能用方程表示出来, 但可用某种相关性度量来刻

划. 相关关系是相关分析的研究对象, 而函数关系则是回归分析的的研究对象.

相关的种类繁多, 按照不同的标准可有不同的划分. 按照相关程度的不同,

可分为完全相关、不完全相关、不相关; 按照相关方向的不同, 可分为正相关和

负相关; 按照相关形式的不同, 又可分为线性相关和非线性相关; 按涉及变量的

9.1 相关性及其度量 261

多少可分为一元相关和多元相关; 按影响因素的不同, 可分为单相关和复相关.

在进行相关分析和回归分析之前, 可先通过不同变量之间的散点图直观地

了解它们之间的关系和相关程度. 常见的是一些连续变量间的散点图, 若图中

数据点分布在一条直线(曲线)附近, 表明可用直线(曲线)近似地描述变量间的

关系. 若有多个变量, 常制作多幅两两变量间的散点图来考察变量间的关系.

R中使用函数plot( )可以方便地画出两个样本的散点图, 从而直观地了

解对应随机变量之间的相关关系和相关程度.

例 9.1.1 某医生测定了10名孕妇的15-17周及分娩时脐带血TSH

(Mu/L)水平. 试绘制脐带血和母血的散点图.

表 9.1 10名孕妇的15-17周及分娩时脐带血TSH(Mu/L)

母血TSH(X) 1.21 1.30 1.39 1.42 1.47 1.56 1.68 1.72 1.98 2.10

脐带血(Y) 3.90 4.50 4.20 4.83 4.16 4.93 4.32 4.99 4.70 5.20

解 R程序如下:

> x<-c(1.21, 1.30, 1.39, 1.42, 1.47, 1.56, 1.68, 1.72, 1.98, 2.10)

> y<-c(3.90, 4.50, 4.20, 4.83, 4.16, 4.93, 4.32, 4.99, 4.70, 5.20)

> level <- data.frame(x,y)

> plot(level)

运行结果如图9.1. 从图上可以直观看出, 数据点分布相对较为分散, 但观察所

有点的分布趋势, 又可能存在某种递增的趋向, 所以可推测X和Y之间有某种

正相关关系. ¥

9.1.2 相关分析

散点图是一种最为有效最为简单的相关性分析工具. 若通过散点图可

以基本明确它们之间存在直线关系, 则可通过线性回归进一步确定它们之间

的函数关系(见$9.2), 它们之间的相关程度可以用Person相关系数来刻划, 因

此Person相关系数实际上反映了变量间的线性相关程度的大小. 除此之外, 还

有Spearman秩相关系数和Kendall相关系数.

262 第九章 回归分析与相关分析

1.2 1.4 1.6 1.8 2.0

4.

0

4.

2

4.

4

4.

6

4.

8

5.

0

5.

2

x

y

图 9.1 脐带血与母血TSH数据点的散点图

设两个随机变量X与Y的观测值为px1, y1q, px2, y2q . . . pxn, ynq, 则它们之

间的(样本)相关系数为:

γ

pX,Y q

n∑

i1

pxi xqpyi yq√

n∑

i1

pxi xq2

n∑

i1

pyi yq2

.

可以证明, 当样本个数n充分大时, 样本相关系数可以作为总体X和Y的相关系



ρ

pX,Y q

EpX EpY qqpY EpY qq√

V arpXqV arpY q

9.1 相关性及其度量 263

的估计. 因此|γ| ¤ 1. 当|γ| Ñ 1时, 表明两变量的数据有较强线性关系;

当|γ| Ñ 0时, 表明两变量的数据间几乎无线性关系, γ ¥ 0p¤ 0q表示正(负)相

关, 表示随x的递增(减), y的值大体上会递增(减).

进一步, 若pX,Y q服从二元正态分布, 则

T

γxy



n 2√

1 γ2xy

tpn 2q.

由此可以对X和Y进行Pearson相关性检验: 若T ¡ t1αpn 2q, 则认

为X和Y的观测值之间存在显著的(线性)相关性. 此外, 还可根据Spearman秩

相关系数和Kendall相关系数进行相应的Spearman秩检验和Kendall检验. 这

里只介绍R中的函数, 有关检验原理请参见参见数理统计教材.

在R软件中, cor.test( )提供了上述三种检验方法, 其调用格式为

cor.text(x, y,

cor.test( )的调用格式-1

alternative=c(“two.sided”, “less”, “greater”),

method=c(“pearson”, “kendall”, “spearman”),

exact=NULL, conf.level=0.95…)

说明: x, y是长度相同的向量; alternative是备择假设, 默认值为“two.side”;

method是选择检验方法, 默认值为Pearson检验; coef.level是置信水平, 默

认值为0.95.

cor.test( )函数还有另外一种调用格式

cor.test(formula, data, subset, na.action, …)

cor.test( )的调用格式-2

说明: formula是公式, 形如‘u+v’,‘u’,‘v’, 它们必须是具有相同长度的

数值向量; data是数据框; subset是可选择向量, 表示观察值的子集.

例 9.1.2 对例9.1.1中的两组数据进行相关性检验.

解 R程序如下:

> attach(level)

> cor.test(x, y)

264 第九章 回归分析与相关分析

运行结果为:

Pearson’s product-moment correlation

data: x and y t = 2.6284, df = 8,

p-value = 0.03025 alternative hypothesis:

true correlation is not equal to 0 95 percent confidence interval:

0.0894336 0.9172270

sample estimates:

cor

0.6807283

结论: 因为p值=0.03025 ¤ 0.05, 故拒绝原假设, 从而认为变量x与y相关. ¥

§9.2 一元线性回归分析

相关分析只能得出两个变量之间是否相关, 但却不能回答在两个变量之间

存在相关关系时, 它们之间是如何联系的, 即无法找出刻画它们之间因果关系

的函数关系. 回归分析就可以解决这一问题, 先从一元线性回归讲起.

9.2.1 数学模型

设变量x和y之间存在一定的相关关系, 回归分析方法即找出Y的值是如

何随X的值的变化而变化的规律, 我们称Y为因变量(或响应变量), X为自变

量(或解释变量), 现通过例子说明如何来确定Y与X之间的关系.

例 9.2.1 有10个同类企业的生产性固定资产价值(X)和工业总产

值(Y )资料如下(见表9.2):

为了直观起见, 可画一张“散点图”, 以x为横坐标, y为纵坐标, 每一数据

对pxi, yiq为X-Y坐标中的一个点, i 1, 2, . . . 10, 如下图9.2所示. 相应的命令



> x <- c(318, 910, 200, 409, 425, 502, 314, 1210, 1022, 1225)

> y <- c(524, 1019, 638, 815, 913, 928, 605, 1516, 1219, 1624)

> plot(x, y)

从图上发现, 10个点基本在一条直线附近, 从而可以认为Y与X的关系基本上

9.2 一元线性回归分析 265

表 9.2 企业固定资产价值和工业总产值

企业编号 生产性固定资产价值 工业总产值

(万元) (万元)

1 318 524

2 910 1019

3 200 638

4 409 815

5 425 913

6 502 928

7 314 605

8 1210 1516

9 1022 1219

10 1225 1624

合计 6525 9801

是线性的, 而这些点与直线的偏离是由其它一切不确定因素造成的, 为此可作

如下假定

Y β0   β1X   ε, (9-2.1)

其中Y β0   β1X表示Y随X变化而线性变化的部分; ² 是随机误差, 它是其

它一切不确定因素影响的总和, 其值不可观测, 通常假定² Np0, σ2q. 称函

数fpXq β0   β1X为一元线性回归函数, β0为回归常数, β1为回归系数, 统称

回归参数. 称X为回归自变量(或回归因子), Y为回归因变量(或响应变量).

若pX1, Y1q, pX2, Y2q, . . . , pXn, Ynq是pX,Y q的一组观测值(样本), 则一元线

性回归模型可表示为

Yi β0   β1Xi   εi i 1, 2, . . . , n, (9-2.2)

其中Epεiq 0, Varpεiq σ2, i 1, 2, . . . , n.

266 第九章 回归分析与相关分析

200 400 600 800 1000 1200

60

0

80

0

10

00

12

00

14

00

16

00

x

y

图 9.2 生产性固定资产价值与工业总产值的散点图

9.2.2 估计与检验

β0, β1的估计

求出未知参数β0, β1的估计βˆ0, βˆ1的一种直观想法就是要求图9.2中的

点pXi, Yiq与直线上的点Xˆi, Yˆi的偏离越小越好, 这里Yˆi βˆ0   βˆ1Xi称为回

归值或拟合值. 令

Qpβ0, β1q

n∑

i1

pYi β0 β1Xiq

2 (9-2.3)

则β0, β1的最小二乘估计就是使Qpβ0, β1q取得最小值时的βˆ0, βˆ1.

9.2 一元线性回归分析 267

用微分法可得

βˆ1

n∑

i1

pXi XqpYi Y q

n∑

i1

pXi Xq

2

Sxy

Sxx

(9-2.4)

βˆ0 Y βˆ1X (9-2.5)

其中

X

1

n

n∑

i1

Xi, Sxx

n∑

i1

pXi Xq

2

Y

1

n

n∑

i1

Yi, Sxy

n∑

i1

pXi XqpYi Y q

即(一元)回归方程为Y βˆ0   βˆ1X.

通常取σˆ2

n∑

i1

pYi β̂0 β̂1Xiq

2

{pn 2q为参数σ2的估计量( 也称为σ2的

最小二乘估计). 可以证明Epσˆ2q σ2.

回归方程的显著性检验

从回归参数的估计公式(9-2.4)可知, 在计算过程中并不一定要知

道Y与X是否有线性相关的关系, 但如果不存在这种关系, 那么求得的回归

方程毫无意义. 因此, 需要对回归方程进行显著性检验. 对于一元线性回归模

型, 它等价于回归系数β1的显著性检验.

对于检验问题

H0 : β1 0Ø H1 : β1 0

通常采用三种(等价)的检验方法:

(1) t检验法. 当H0成立时, 统计量

T

βˆ1

Sdpβˆ1q

βˆ1



Sxx

σˆ

tpn 2q (9-2.6)

对给定的显著性水平α , 检验的拒绝域为

C

{|T| ¥ t1α{2pn 2q}

268 第九章 回归分析与相关分析

.

(2) F检验法. 当H0成立时, 统计量

F

βˆ1Sxx

σˆ2

F p1, n 2q (9-2.7)

对于给定的显著性水平α, 检验的拒绝域为

C {F F1αp1, n 2q} .

(3) 相关系数检验法. 记样本相关系数可表示为γ

pX,Y q

Sxy√

SxxSxy

. 对于给

定的显著性水平α, 检验的拒绝域为

C

{∣∣γ

pX,Y q

∣∣

¡ γ1αpn 2q

}

. (9-2.8)

上述三种检验中, 当拒绝H0时, 就认为线性回归方程是显著的.

β0, β1的区间估计

由βˆ0与βˆ1的统计性质知

Ti

βˆi βi

Sdpβiq

tpn 2q, i 0, 1 (9-2.9)

因此, 对给定的置信水平1 α , 由

P

{∣∣∣∣∣ βˆi βiSdpβiq

∣∣∣∣∣ ¤ tα2 pn 2q

}

1 α, i 0, 1 (9-2.10)

得βipi 0, 1q的区间估计为

rβˆi Sdpβˆiqtα2 pn 2q, βˆi   Sdpβˆiqtα2 pn 2qs (9-2.11)

在R中, 由函数lm( )可以非常方便地求出回归方程, 函数confint( )可求

出参数的置信区间. 与回归分析有关的函数还有summary( ), anova( )

和predict( )等. 函数lm( )的的调用格式为

lm(formula, data, subset, weights, na.action,

lm( )的调用格式

9.2 一元线性回归分析 269

method=”qr”, model=TRUE, x=FALSE, y=FALSE,

qr=TRUE, singular.OK=TRUE, contrasts=NULL, offset, …)

说明: formula是显示回归模型, data是数据框, subset是样本观察的子

集, weights是用于拟合的加权向量, na.action显示数据是否包含缺失值,

method是指出用于拟合的方法, model, x, y, qr是逻辑表达, 如果是TRUE, 应

返回其值. 除了第一个选项formula是必选项, 其它都是可选项.

函数confint( )的调用格式为

confint(object, parm, level=0.95, …)

confint( )的调用格式

说明: object是指回归模型, parm要求指出所求区间估计的参数, 默认值为所

有的回归参数, level是指置信水平.

例 9.2.2 求例9.2.1的回归方程, 并对相应的方程作检验.

解 R程序如下:

> x<-c(318, 910, 200, 409, 415, 502, 314, 1210, 1022, 1225)

> y<-c(524, 1019, 638, 815, 913, 928, 605, 1516, 1219, 1624)

> lm.reg<-lm(y~1+x)

> summary(lm.reg)

> confint(lm.reg, level=0.95)

程序中, 第三行函数lm( )表示使用线性回归模型y β0   β1x, 第四行函

数summary( )为提取模型计算结果. 运行结果如下:

Call:

lm(formula = y ~ 1 + x) # 可简化为lm(formula = y ~ x)

Residuals:

Min 1Q Median 3Q Max

-191.78 -87.05 44.75 77.86 145.66

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 395.5670 80.2611 4.929 0.00115 **

x 0.8958 0.1066 8.403 3.06e-05 ***



270 第九章 回归分析与相关分析

Signif. codes: 0‘***’ 0.001‘**’ 0.01‘*’ 0.05‘.’ 0.1‘ ’ 1

Residual standard error: 126.6 on 8 degrees of freedom

Multiple R-Squared: 0.8982, Adjusted R-squared: 0.8855

F-statistic: 70.62 on 1 and 8 DF, p-value: 3.059e-05

结论: 从上述输出结果p-值可以看出回归方程通过回归参数的检验与回归方程

的检验, 由此得到回归方程Y 395.5670  0.8938X.

得到了回归方程, 还可以对误差项独立同正态分布的假设进行检验.

在R中只需再执行一个plot命令.

> op<-par(mfrow=c(2, 2))

> plot(lm.reg)

> par(op)

运行结果见图9.3. 上面的命令plot(lm.reg)实际上使用了四次plot(x, y),

产生四个图形, 它们分别为:

1) Residual vs fitted为拟合值yˆ对残差的图形, 可以看出, 数据点都基本均匀

地分布在直线y 0的两侧, 无明显趋势;

2) Normal QQ-plot图中数据点分布趋于一条直线, 说明残差是服从正态分

布的;

3) Scale-Location 图显示了标准化残差(standardized residuals)的平方根

的分布情况. 最高点为残差最大值点;

4) Cook距离(Cook’s distance)图显示了对回归的影响点.

¥

9.2.3 预测与控制

对X x0, Y y0的预测值为yˆ0 βˆ0   βˆ1×0, 置信度为1 α的预测区间



yˆ0 t1α{2pn 2qσˆ





1

n

 

pX x0q2

Sxx

(9-2.12)

9.2 一元线性回归分析 271

600 800 1000 1200 1400



20

0



10

0

0

10

0

Fitted values

R

es

id

ua

ls

Residuals vs Fitted

2

1

5

−1.5 −0.5 0.0 0.5 1.0 1.5



1.

5



0.

5

0.

5

1.

5

Theoretical Quantiles

St

an

da

rd

ize



re

sid

ua

ls

Normal Q−Q

2

1

10

600 800 1000 1200 1400

0.

0

0.

4

0.

8

1.

2

Fitted values

St

an

da

rd

ize



re

si

du

al

s

Scale−Location

2

1 10

0.00 0.10 0.20 0.30



2.

0



1.

0

0.

0

1.

0

Leverage

St

an

da

rd

ize



re

sid

ua

ls

Cook’s distance

1

0.5

0.5

Residuals vs Leverage

10

2

1

图 9.3 例9.2.2中回归分析的诊断图

由于当n Ñ 8时, t1α{2pn 2q z1α{2, 于是Y y0的置信度为1 α的预测区

间可近似为 [

yˆ0 σˆz1α{2, yˆ0   σˆz1α{2

]

. (9-2.13)

控制可视为是预测的反问题, 即要求观察值Y在某一区间pyl, yuq内取值时,

问应将X控制在什么范围内. 由式(9-2.13), 构造不等式{

yˆ σˆz1α{2 βˆ0   βˆ1x σˆz1α{2 ¥ yl

yˆ   σˆz1α{2 βˆ0   βˆ1x  σˆz1α{2 ¤ yu

(9-2.14)

由不等式(9-2.14)得到X的取值范围, 并以此作为控制X的上下界. 为了保证得

272 第九章 回归分析与相关分析

到的控制范围有意义, yu和yl应满足yu yl ¥ 2σˆz1α{2.

例 9.2.3 求例9.2.1中, X x0 415时相应Y的置信水平为0.95的预测

区间.

解 R程序: 利用predict( )函数求预测值和预测区间.

> point<-data.frame(x=415)

> lm.pred<-predict(lm.reg, point,

interval=”prediction”, level=0.95)

> lm.pred

fit lwr upr

[1,] 765.849 457.1226 1074.575

程中选项interval=“prediction”表示同时要给出相应的预测区间, 选项level指

出相应的预测水平,默认值为0.95,这时可省略.由计算结果得到: 当x 415时,

y的预测值为767.339, 预测区间为[455.5666, 1079.111]. ¥

9.2.4 计算例子

例 9.2.4 表9.3是有关15个地区某种食物年需求量(X, 单位: 10吨)和地

区人口增加量(X, 单位: 千人)的资料. 利用此表数据展示一元回归模型的统计

分析过程.

表 9.3 某种食物年需求量与人口增加量

编号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

X 274 180 375 205 86 265 98 330 195 53 430 372 236 157 370

Y 162 120 223 131 67 169 81 192 116 55 252 234 144 103 212

计算分析过程如下:

1) 建立数据集, 并画出散点图: 考查数据点的分布趋势, 看是否呈直线条状

分布. 程序如下

> x<-c(274, 180, 375, 205, 86, 265, 98, 330, 195, 53,

9.2 一元线性回归分析 273

430, 372, 236, 157, 370)

> y=c(162, 120, 223, 131, 67, 169, 81, 192, 116, 55,

252, 234, 144, 103, 212)

> A<-data.frame(x, y)

> plot(A$x, A$y)

运行结果如图9.4所示, 可以看出, 这些点基本上(但不精确的)落在一条直

线上.

2) 进行回归分析, 并在散点图上显示回归直线. bf R程序为

> lm.reg<-lm(y~x)

> summary(lm.reg)

> abline(lm.reg)

回归结果如下, 回归直线仍画在图9.4上.

Call: lm(formula = y ~ x)

Residuals:

Min 1Q Median 3Q Max

-9.9610 -4.6079 -0.2618 3.1500 14.2152

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 22.59595 3.92745 5.753 6.67e-05 ***

x 0.53008 0.01472 36.007 2.08e-14 ***



Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ‘ 1

Residual standard error: 6.435 on 13 degrees of freedom

Multiple R-Squared: 0.9901,

Adjusted R-squared: 0.9893

F-statistic: 1297 on 1 and 13 DF,

p-value: 2.079e-14

结论:

ˆ 回归系数的估计与检验: 回归系数的估计为βˆ0 22.59595, βˆ1

0.53008, 相应的标准差为Sdpβˆ0q 3.92745,Sdpβˆ1q 0.01472. 它们

的p值均很小, 故是非常显著的.

274 第九章 回归分析与相关分析

100 200 300 400

50

10

0

15

0

20

0

25

0

x

y

图 9.4 例9.2.4中数据的散点图

ˆ 相关分析: 相关系数的平方R2 0.9901, 表明数据中99%可由回归

方程来描述.

ˆ 方程的检验: F分布的p值为2.079 1014, 因此方程是非常显著的,

这与R2的结果一致.

3) 残差分析—图形诊断: 用函数residuals( )计算回归方程的残差, 并画

出关于残差的散点图, 见图9.5.

> res<-residuals(lm.reg)

> plot(res)

> text(12, res[12], labels=12, adj=(.05))

9.3 多元线性回归分析 275

2 4 6 8 10 12 14



10



5

0

5

10

15

Index

re

s

12

图 9.5 例9.2.4中残差的散点图

从图9.5可以看出, 第12个样本点可能有问题(程序中已用函数text( )标

注), 它比其它样本点的残差大很多, 因此, 这个点可能有问题: 或者由于

模型的假设不正确, 或是σ2不是常数, 或是异常点, 等等. 总之, 需要对这

个问题进行进一步的分析, 这在9.4节的回归诊断中进行详细介绍.

§9.3 多元线性回归分析

许多实际问题中, 影响响应变量的因素往往不只一个而是多个, 我们称这

类回归分析为多元回归分析. 这里仅讨论最为一般的线性回归问题和可以化为

线性回归的问题(如本章第四节logistic回归).

276 第九章 回归分析与相关分析

9.3.1 数学模型

假设随机变量Y与p个自变量X1, X2, . . . , Xp之间存在着线性相关关系

Y β0   β1X1   β2X2   . . .  βpXp,

其 中β0, β1, . . . , βp是 未 知 参 数(称 为 回 归 系 数 或 回 归 参 数),

X1, X2, . . . , Xp是p个可以精确测量并可控制的变量(称为回归因子或预测变

量), Y为响应变量. 若其n次观测值为pXi1, Xi2, . . . , Xip, Yiq, i 1, 2, . . . , n, 则

这n个观测值可写为如下形式:

y1 β0   β1X11   β2X12   . . .  βpX1p   ε1

y2 β0   β1X21   β2X22   . . .  βpX2p   ε2



yn β0   β1Xn1   β2Xn2   . . .  βpXnp   εn

(9-3.1)

其中ε1, ε2, . . . , εp 是随机误差, 和一元线性回归分析一样, 我们假定它们相互

独立且服从同一正态分布Np0, σ2q.

若将方程组(9-3.1)用矩阵表示, 则有

Y˜ Xβ˜  ε˜ , (9-3.2)

其中





y1

y2



yn

 ,X



1 X11 X12. . . X1p

1 X21 X22. . . X2p

. . . . . . . . . . . .

1 Xn1 Xn2. . . Xnp

 , β˜



β1

β2



βp

 , ε˜



ε1

ε2



εn

 .

9.3.2 估计与检验

多元线性回归分析的首要任务就是通过寻求β˜的估计值βˆ˜, 建立多元线性回归方程

Y βˆ0   βˆ1X1   βˆ2X2   . . .  βˆpXp, (9-3.3)

并对此方方程及其回归系数的显著性作出检验.

与一元线性回归分析相同, 求参数β˜的估计值βˆ˜, 就是求解βj使全部观察

9.3 多元线性回归分析 277

值Yi与回归值(拟合值)Ŷi (i 1, 2, . . . , n)的残差平方和

Qpβ0, β1, . . . , βpq

n∑

i1

pYi β0   β1Xi1   β2Xi2   . . .  βpXipq

2 (9-3.4)

达到最小.

可以证明, 若X是满列秩的, 则β˜的最小二乘估计为

βˆ˜ pX1Xq1X1Y˜ . (9-3.5)

由残差向量εˆ˜ Y˜ Xβˆ˜, 通常取

σˆ2

εˆ˜T εˆ˜

n p 1

(9-3.6)

作为σ2的估计, 也称为σ2的最小二乘估计.

得到了回归方程后, 由于我们无法像一元线性回归分析那样用直观的方法

帮助判断Y与X1, X2, . . . , Xp之间是否有线性关系, 为此必须对回归方程进行

显著性检验. 其次在p个变量中, 每个自变量对y的影响程度是不同的, 甚至有

的自变量是可有可无的. 这表现在回归系数中有的绝对值很大, 有的很小或接

近于零, 这就需要对回归系数进行显著性检验.

回归方程显著性检验

考虑假设检验问题:

H0 : β0 β1 . . . βp 0 Ø H1 : β0, β1, . . . , βp不全为0

可以证明当H0成立时, 统计量

F

SSR{p

SSE{pn p 1q

F pp, n p 1q (9-3.7)

其中

SSR

n∑

i1

pYˆi Y iq

2, SSE

n∑

i1

pYi Yˆiq

2,

Y

1

n

n∑

i1

Yi, Ŷi βˆ0   βˆ1Xi1   βˆ2Xi2   . . .  βˆpXip.

278 第九章 回归分析与相关分析

称SSR为回归平方和, 称SSE为残差平方和.

因此, 对于给定的显著性水平α, 检验回归方程的拒绝域为

F ¡ F1αpp, n p 1q.

回归系数的显著性检验

H0j : βj 0 Ø H1j : βj 0pj 0, 1, . . . , pq

可以证明, 当H0j成立时, 有

Fj

Qj

SSE/pn p 1q

F p1, n p 1q (9-3.8)

其中Qj SSEpjq SSE , SSEpjq是去掉Xj后的残差平方和.

对于给定的显著性水平α, 当Fj ¡ F1αp1, n p 1q时拒绝H0j , 认为变

量Xj对Y有显著影响.

例 9.3.1 某公司在各地区销售一种特殊的化妆品, 该公司观测了15个

城市在某月对该化妆品的销售量(Y ), 使用该化妆品的人数(X1)和人均收

入(X2), 数据见表9.4. 试建立Y与X1, X2的线性回归方程, 并作相应的检验.

解 R程序为:

> y<-c(162, 120, 223, 131, 67, 169, 81, 192, 116, 55,

252, 232, 144, 103, 212)

> x1<-c(274, 180, 375, 205, 86, 265, 98, 330, 195, 53,

430, 372, 236, 157, 370)

> x2<-c(2450, 3250, 3802, 2838, 2347, 3782, 3008, 2450,

2137, 2560, 4020, 4427, 2660, 2088, 2605)

> sales<-data.frame(y, x1, x2)

> lm.reg<-lm(y~x1+x2, data=sales)

> summary(lm.reg)

运行结果:

Call:

9.3 多元线性回归分析 279

表 9.4 某种化妆品的销售量及有关指标

地区i 销售量(Y )/箱 人数(X1)/千人 人均收入(X2)/元

1 162 274 2450

2 120 180 3250

3 223 375 3802

4 131 205 2838

5 67 86 2347

6 167 265 3782

7 81 98 3008

8 192 330 2450

9 116 195 2137

10 55 53 2560

11 252 430 4020

12 232 372 4427

13 144 236 2660

14 103 157 2088

15 212 370 2605

lm(formula = y ~ x1 + x2, data = sales)

Residuals:

Min 1Q Median 3Q Max

-3.8312 -1.2063 -0.2436 1.4819 3.3025

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 3.4457284 2.4266934 1.420 0.181

x1 0.4959724 0.0060455 82.039 < 2e-16 ***

x2 0.0092049 0.0009668 9.521 6.07e-07 ***



280 第九章 回归分析与相关分析

Signif. codes: 0‘***’ 0.001‘**’ 0.01‘*’ 0.05‘.’ 0.1‘ ’ 1

Residual standard error: 2.173 on 12 degrees of freedom

Multiple R-squared: 0.9989, Adjusted R-squared: 0.9988

F-statistic: 5699 on 2 and 12 DF, p-value: < 2.2e-16

结论: 由于用于回归方程检验的F统计量的p值与用于回归系数检验的t统计量

的p值均很小(<0.05), 因此回归方程与回归系数的检验都是显著的. 回归方程



Y 3.4457  0.4960X1   0.0092X2.

¥

9.3.3 预测与控制

当多元线性回归方程经过检验是显著的, 且其中每一个回归系数均显著

时(不显著的先剔除), 这时可用此回归方程作预测.

给定X˜ x˜0 px01, x02, . . . , x0pqT , 将其代入回归方程, 得预测值

Ŷ˜0 βˆ0   βˆ1×01   . . .  βˆpx0p. (9-3.9)

相应的置信度为1 α的预测区间为

Ŷ˜0 t1α{2pn p 1qσˆ



1  x˜01pX1Xq1x˜0. (9-3.10)

例 9.3.2 求例9.3.1中X˜ x˜0 p200, 3000q1时相应Y的观测值与0.95预测区间.

解 与一元回归一样, 在R中仍使用函数predict( )求多元回归预测.

> exa<-data.frame(x1=200, x2=3000)

> lm.pred<-predict(lm.reg, exa, interval=”prediction”, level=0.95)

> lm.pred

运行结果:

fit lwr upr

[1,] 130.2549 125.3274 135.1824

9.3 多元线性回归分析 281

由此求得, Ŷ˜0 130.2549, 相应的Y的0.95的预测区间为[125.3274, 135.1824].¥

9.3.4 计算例子

例 9.3.3 27名糖尿病人的血清总胆固醇(X1)、甘油三酯(X2)、空腹胰

岛素(X3)、糖化血红蛋白(X4)、空腹血糖(Y )的测量值列于表9.5中, 试建立血

糖与其它指标的多元线性回归方程, 并作进一步分析.

解 计算分析过程及相应的R程序如下:

1) 建立数据集:

> y<-c(11.2, 8.8, 12.3, 11.6, 13.4, 18.3, 11.1, 12.1,

9.6, 8.4, 9.3, 10.6, 8.4, 9.6, 10.9, 10.1,

14.8, 9.1, 10.8, 10.2, 13.6, 14.9, 16.0, 13.2,

20.0, 13.3, 10.4)

> x1<-c(5.68, 3.79, 6.02, 4.85, 4.60, 6.05, 4.90, 7.08,

3.85,4.65, 4.59, 4.29, 7.97, 6.19, 6.13, 5.71,

6.40,6.06, 5.09, 6.13, 5.78, 5.43, 6.50, 7.98,

11.54,5.84, 3.84)

> x2<-c(1.90, 1.64, 3.56, 1.07, 2.32, 0.64, 8.50, 3.00,

2.11, 0.63, 1.97, 1.97, 1.93, 1.18, 2.06, 1.78,

2.40, 3.67, 1.03, 1.71, 3.36, 1.13, 6.21, 7.92,

10.89, 0.92, 1.20)

> x3<-c(4.53, 7.32, 6.95, 5.88, 4.05, 1.42, 12.60, 6.75,

16.28, 6.59, 3.61, 6.61, 7.57, 1.42, 10.35, 8.53,

4.53,12.79, 2.53, 5.28, 2.96, 4.31, 3.47, 3.37,

1.20, 8.61, 6.45)

> x4<-c(8.2, 6.9, 10.8, 8.3, 7.5, 13.6, 8.5, 11.5,

7.9, 7.1, 8.7, 7.8, 9.9, 6.9, 10.5, 8.0,

10.3, 7.1, 8.9, 9.9, 8.0, 11.3, 12.3, 9.8,

10.5, 6.4, 9.6)

> blood<-data.frame(y, x1, x2, x3, x4)

2) 建立多元线性回归方程:

282 第九章 回归分析与相关分析

表 9.5 27名糖尿病人的指标

i X1 X2 X3 X4 Y

1 5.68 1.90 4.53 8.2 11.2

2 3.79 1.64 7.32 6.9 8.8

3 6.02 3.56 6.95 10.8 12.3

4 4.85 1.07 5.88 8.3 11.6

5 4.60 2.32 4.05 7.5 13.4

6 6.05 0.64 1.42 13.6 18.3

7 4.90 8.50 12.60 8.5 11.1

8 7.08 3.00 6.75 11.5 12.1

9 3.85 2.11 16.28 7.9 9.6

10 4.65 0.63 6.59 7.1 8.4

11 4.59 1.97 3.61 8.7 9.3

12 4.29 1.97 6.61 7.8 10.6

13 7.97 1.93 7.57 9.9 8.4

14 6.19 1.18 1.42 6.9 9.6

15 6.13 2.06 10.35 10.5 10.9

16 5.71 1.78 8.53 8.0 10.1

17 6.40 2.40 4.53 10.3 14.8

18 6.06 3.67 12.79 7.1 9.1

19 5.09 1.03 2.53 8.9 10.8

20 6.13 1.71 5.28 9.9 10.2

21 5.78 3.36 2.96 8.0 13.6

22 5.43 1.13 4.31 11.3 14.9

23 6.50 6.21 3.47 12.3 16.0

24 7.98 7.92 3.37 9.8 13.2

25 11.54 10.89 1.20 10.5 20.0

26 5.84 0.92 8.61 6.4 13.3

27 3.84 1.20 6.45 9.6 10.4

> lm.reg<-lm(y~x1+x2+x3+x4, data=blood)

> summary(lm.reg)

9.3 多元线性回归分析 283

运行结果如下:

Call: lm(formula = y ~ x1 + x2 + x3 + x4, data = blood)

Residuals:

Min 1Q Median 3Q Max

-3.6268 -1.2004 -0.2276 1.5389 4.4467

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 5.9433 2.8286 2.101 0.0473 *

x1 0.1424 0.3657 0.390 0.7006

x2 0.3515 0.2042 1.721 0.0993 .

x3 -0.2706 0.1214 -2.229 0.0363 *

x4 0.6382 0.2433 2.623 0.0155 *



Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ‘ 1

Residual standard error: 2.01 on 22 degrees of freedom

Multiple R-Squared: 0.6008,

Adjusted R-squared: 0.5282

F-statistic: 8.278 on 4 and 22 DF,

p-value: 0.0003121

结论: 回归方程的系数的显著性不高, 有的甚至没有通过检验(X1与X2),

这说明如果选择全部变量构造方程, 效果并不好. 这就涉及到变量选择的

问题, 以建立“最优”的回归方程.

3) 变量选择与最优回归: R软件提供了获得“最优”回归方程的方法,“逐步

回归法”的计算函数step( ), 它是以Akaike信息统计量为准则(简称AIC准

则), 通过选择最小的AIC信息统计量, 来达到删除或增加变量的目的. 函

数step( )的调用格式为

step(object, scope, scale=0,

step( )函数的调用格式

direction=c(“both”, “backward”, “forward”,

trace=1, keep=NULL, steps=1000, k=2, …)

说明: object是线性模型或广义线性模型分析的结果, scope是确定逐步

搜索的区域, direction确定逐步搜索的方向:“both”是“一切子集回归

284 第九章 回归分析与相关分析

法”,“backward”是“向后法”,“forward”是向前法, 默认值为both. 其

它参数见在线帮助.

对于本例用函数step( )作逐步回归:

> lm.step<-step(lm.reg)

回归结果为:

Start: AIC= 42.16

y ~ x1 + x2 + x3 + x4

Df Sum of Sq RSS AIC

– x1 1 0.613 89.454 40.343

<none> 88.841 42.157

– x2 1 11.963 100.804 43.568

– x3 1 20.064 108.905 45.655

– x4 1 27.794 116.635 47.507

Step: AIC= 40.34

y ~ x2 + x3 + x4

Df Sum of Sq RSS AIC

<none> 89.454 40.343

– x3 1 25.690 115.144 45.159

– x2 1 26.530 115.984 45.356

– x4 1 32.269 121.723 46.660

结论: 用全部变量作回归方程时, AIC统计量的值为42.16, 如果去掉

变量X1, AIC统计量的值为40.34; 如果去掉变量X2, AIC统计量的值

为43.568, 依次类推. 由于去掉X1使AIC统计量达到最小, 因此R软件

会自动去掉变量X1, 进入下一轮计算. 在下一轮中, 无论去掉哪一个变量,

AIC统计量的值均会升高, 因此R软件自动终止计算, 得到“最优”回归方

程.

再用函数summary( )提取相关回归信息.

> summary(lm.step)

提取结果为:

9.4 回归诊断 285

Call:

lm(formula = y ~ x2 + x3 + x4, data = blood)

Residuals:

Min 1Q Median 3Q Max

-3.2692 -1.2305 -0.2023 1.4886 4.6570

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 6.4996 2.3962 2.713 0.01242 *

x2 0.4023 0.1541 2.612 0.01559 *

x3 -0.2870 0.1117 -2.570 0.01712 *

x4 0.6632 0.2303 2.880 0.00845 **



Signif. codes: 0‘***’0.001‘**’0.01‘*’0.05‘.’0.1‘ ’1

Residual standard error: 1.972 on 23 degrees of freedom

Multiple R-squared: 0.5981, Adjusted R-squared: 0.5456

F-statistic: 11.41 on 3 and 23 DF, p-value: 8.793e-05

结论: 回归系数的显著性水平有很大提高, 所有的检验均是显著的, 由此

得到“最优”的回归方程

Y 6.4996  0.4023X2 0.2870X3   0.6632X4.

¥

§9.4 回归诊断

前面介绍了如何得到回归模型, 但没有对回归模型的一些特性作进一步的

研究, 并且没有研究对回归模型产生较大影响的异常值问题. 异常值的存在往

往会给回归模型带来不稳定, 为此, 人们提出了所谓回归诊断的问题, 其主要

内容有:残差分析、影响分析、共线性诊断等.

286 第九章 回归分析与相关分析

9.4.1 残差分析

残差及残差图

残差向量εˆ˜ Y˜ Yˆ˜ pIHqY˜是模型中误差项ε˜的估计, 其中H

XpX1Xq1X称为帽子矩阵. 由于

Epεˆ˜q 0, Varpεˆ˜q σ2pIHq (9-4.1)

因此, 对每个εˆi, 有

εˆi

σ



1 hii

Np0, 1q, (9-4.2)

其中hii是矩阵H对角线上第i个元素.

当用σˆ2 εˆ˜1 εˆ˜

n p 1

去估计σ2时, 称

ri

εˆi

σˆ



1 hii

(9-4.3)

为标准化残差, 或内学生化残差.

当用σˆ2

piq

1

n p 2



ji

pYi X˜ 1j βˆ˜piqq2 去估计σ2时, 称

εˆi

σˆ

piq



1 hii

(9-4.4)

为学生化残差, 或外学生化残差. 其中βˆ˜piq 是删去第i个样本点后用余下的n 1个样本点求得的回归系数, X˜j为设计矩阵X的第j行.

R软件中, 分别用函数residuals( ), rstandard( )和rstudent( )来计

算残差、标准化残差和学生化残差. 这些函数的调格式分别为:

residuals(object, …)

residuals( )的调用格式

resid(object, …)

rstandard(model, infl=lm.influence(model, do.coef=FALSE),

rstandard( )的调用格式

9.4 回归诊断 287

sd=sqrt(deviance(model)/df.residual(model)), …)

rstudent(model, infl=lm.influence(model, do.coef=FALSE,

rstudent( )的调用格式

res=infl$wt.res, …)

说明: object或model是由线性模型函数lm( )或广义线性模型函数glm( )生

成的对象, infl是由lm.influence( )返回值得到的影响结构, sd是模型的标

准差, res是模型残差.

凡是以残差为纵坐标, 以观测值Yi, 预测值Ŷi, 自变量Xijpj

1, 2, . . . ,mq或序号、观测时间等为横坐标的散点图, 均称为残差图. 如果

多元线性回归模型的假定成立, 从理论上可证明r1, r2, . . . , rn相互独立且近似

服从Np0, 1q, 故关于观测值等的残差图中散点应随机的分布在-2到+2的带子

里, 并称之为正常残差图(见图9.6a), 否则称为异常残差图(见图9.6b,c,d).

例 9.4.1 计算例9.3.1的残差和标准残差, 并画出相应的残差散点图.

解 R程序为:

> y.res<-residuals(lm.reg) #计算残差

> print(y.res)

> y.rst<-rstandard(lm.reg) #计算标准化残差

> print(y.rst)

> y.fit<-predict(lm.reg) #计算预测值

> op<-par(mfrow=c(1, 2)) #将两张散残差点图一并输出

> plot(y.res~y.fit)

> plot(y.rst~y.fit)

> par(op)

计算结果如下, 图形见图9.7. 从图9.7可以看出, 残差具有相同的分布且满

足模型的各个假设条件.

残差:

1 2 3 4 5

0.1058453 -2.6366596 -1.4323818 -0.2435552 -0.7032355

6 7 8 9 10

288 第九章 回归分析与相关分析

(a) (b)

(c) (d)

图 9.6 (1)正常的残差图; (b)应改为曲线模型; (c)主差齐性不成立; (d)观测值

不独立

-0.6913175 1.2606626 2.3313896 -3.8312025 1.7032127

11 12 13 14 15

-1.7175312 3.3024787 -0.9802297 2.4667892 1.0657346

标准化残差:

1 2 3 4 5

0.05281317 -1.30635637 -0.73052549 -0.11643248 -0.36046378

6 7 8 9 10

-0.35064339 0.66372152 1.23228395 -1.92770717 0.91558703

11 12 13 14 15

-0.93261640 1.89069180 -0.47083133 1.24503836 0.57927692

9.4 回归诊断 289

50 100 150 200 250



10



5

0

5

10

15

y.fit

y.

re

s

50 100 150 200 250



1

0

1

2

y.fit

y.

rs

t

图 9.7 例9.4.1中的残差与标准化残差图

¥

方差齐性的诊断及修正方法

从图9.7的残差图可以看出, 当残差的绝对值随预测值的增加也有明显增

加的趋势(或减少的趋势, 或先增加后减少的趋势)时, 表示关于误差的方差齐

性(即误差方差σ12 σ22 . . . σn2)的假定不成立.

误差方差非齐性时,有时可以通过对因变量作适当的变换,即令Z fpY q,

使得关于因变量Z在回归中误差的方差接近齐性. 理论上根据观测向量Y的

性质(如均值EpY q和方差VarpY q的关系等)可以判断出应做什么样的变换合适.

实用上, 常选用一些常用的变换, 变换后重新做回归及残差图, 如残差图有改

290 第九章 回归分析与相关分析

善或已属正常, 则认为该变换是合适的; 否则改变变换函数重新计算, 直到找

到合适的变换, 常见的方差稳定性变换有:

1) 开方变换Z √Y pY ¡ 0q;

2) 对数变换Z lnpY q pY ¡ 0q;

3) 倒数(逆)变换Z 1{Y pY 0q;

4) BOX-COX变换Z X

λ

1

λ

.

λ 0时的BOX-COX变换即为对数变换.

例 9.4.2 在对27家企业单位的研究中, 记录了企业管理人数(Y )与工人

人数(X)资料(见表9.6). 试建立Y对X的回归方程.

表 9.6 27各企业单位中企业管理人员数与员工数

序号 X Y 序号 X Y 序号 X Y

1 294 50 10 697 78 19 700 106

2 247 40 11 688 80 20 850 128

3 267 45 12 630 84 21 980 130

4 358 55 13 709 88 22 1025 160

5 423 70 14 627 97 23 1021 97

6 311 65 15 615 100 24 1200 180

7 450 55 16 999 109 25 1250 112

8 534 62 17 1022 114 26 1500 210

9 438 68 18 1015 117 27 1650 135

解 分析过程如下:

1) 输入数据.

> x<-c(294, 247, 267, 358, 423, 311, 450, 534, 438, 697,

688, 630, 709, 627, 615, 999, 1022, 1015, 700, 850,

9.4 回归诊断 291

980, 1025, 1021, 1200, 1250, 1500, 1650)

> y<-c(50, 40, 45, 55, 70, 65, 55, 62, 68, 78,

80, 84, 88, 97, 100, 109, 114, 117, 106, 128,

130, 160, 97, 180, 112, 210, 135)

> persons<-data.frame(x, y)

2) 作线性回归模型.

> lm.reg<-lm(y~x)

> summary(lm.reg)

得到:

Call:

lm(formula = y ~ x)

Residuals:

Min 1Q Median 3Q Max

-47.645 -11.136 -4.278 11.683 41.677

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 25.09434 9.27542 2.705 0.0121 *

x 0.09549 0.01099 8.691 5.02e-09 ***



Signif. codes: 0‘***’0.001‘**’0.01‘*’0.05‘.’0.1‘ ’1

Residual standard error: 21.08 on 25 degrees of freedom

Multiple R-squared: 0.7513, Adjusted R-squared: 0.7414

F-statistic: 75.54 on 1 and 25 DF, p-value: 5.018e-09

显然, 回归系数和回归方程都通过了检验, 所以Y对X的一元回归方程为

Y 25.09434  0.0549X.

3) 回归诊断. 画出标准化残差散点图, R程序为

292 第九章 回归分析与相关分析

> y.rst<-rstandard(lm.reg)

> y.fit<-predict(lm.reg)

> plot(y.rst~y.fit)

其图形如图9.8图所示. 直观上容易看出, 残差图从左向右逐渐散开, 这是

方差齐性不成立的典型征兆. 所以, 应考虑对响应变量Y作变换.

60 80 100 120 140 160 180



2



1

0

1

2

y.fit

y.

rs

t

图 9.8 标准化残差图

7 8 9 10 11 12 13 14



2



1

0

1

yn.fit

yn

.rs

t

图 9.9 对Y开方运算后标准化残差图

4) 模型更新. 在新的平方变换下进行回归分析, 并进行回归诊断, 相应

的R程序为:

> lm.new_reg<-update(lm.reg, sqrt(.)~.)

> coef(lm.new_reg)

说明: 函数update( )对回归模型按给定的方差稳定化变换进行修正, 函

数coef( )提取回归系数的估计.

计算结果为:

(Intercept) x

6.044644223 0.004780664

由此得到新的回归方程为

Y p6.044644223  0.004780664Xq2,

9.4 回归诊断 293



Y 36.5377238  0.0577948X   2.28547 105X2.

最后画出变换后的标准化残差散点图, 程序为

> yn.rst<-rstandard(lm.new_reg)

> yn.fit<-predict(lm.new_reg)

> plot(yn.rst~yn.fit)

其图形如图9.9所示, 散点图的趋势大有改善.

¥

异常点的识别

如果拟合后的模型能够很好地描述这组数据, 那么残差对预测值的散点图

应该像一些随机散布的点. 可是, 若某个观测不能和其它数据一起用这个模型

表示, 那么那个观测的残差通常很大. 这里“很大”指的是残差的绝对值. 因为

一个“很大”的残差可能是正的也可能是负的. 如果只有占很小百分比的观测

出现大的残差, 那么这些观测可能是异常点(outliers) — 它们不能用来与其

余数据一起拟合模型. 因此对数据中有残差“很大”的观测点, 必须仔细地检

查.

一般把标准化残差的绝对值¥2的观测点认为是可疑点; 而标准化残差的

绝对值¥3的观测点认为是异常点.

例 9.4.3 对例9.3.1中得到回归方程, 判断是否有异常点.

解 由例的计算结果并结合图形可以看出, 第12个点的残差比较大, 被认

定为异常点. 它可以用下列语句将异常点标出(见图9.10).

> text(219.78476, 2.4037012, labels=12, adj=(.2))

这里再做一个简单处理, 去掉第12观测样本点, 并重复上述回归分析及残差分

析的过程, 得到新的标准化残差图9.11. 与图9.10相比, 现在残差点的分布已有

了很大的改进, 它们基本上落在[-2, 2]的带状区域内. 但好像仍有一个可疑点存

在, 故需进一步分析(从略). ¥

294 第九章 回归分析与相关分析

50 100 150 200 250



2



1

0

1

2

y.fit

y.

rs

t

12

图 9.10 标准化残差图: 全部数据

50 100 150 200 250



2



1

0

1

y.fit

y.

rs

t

图 9.11 标准化残差图:去掉12号观测

9.4.2 影响分析

从分析观测点对回归结果的影响入手, 找出对回归结果影响很大的观测点

的分析方法称为影响分析.

影响函数

称向量Fi βˆ˜piq βˆ˜为第i个观测点的影响函数pi 1, 2, . . . , nq, 其中βˆ˜

pβˆ0, βˆ1, . . . , βˆmq

1是回归模型中参数向量β˜的最小二乘估计; βˆ˜piq是去掉第i个观测点重新计算得出β˜的最小二乘估计. 直观地看, 若βˆ˜与βˆ˜piq相差较大, 则表明第i个观测点对回归结果的影响就大.

R软件中计算影响函数的函数为lm.influence( ), 其调用格式为

lm.influence(model, do.coef=TRUE)

lm.influence( )的调用格式

说明: model为回归模型. do.coef=TRUE表示结果要求给出去掉第i个观测点

后的模型回归系数.

9.4 回归诊断 295

Cook距离

Cook距离是从估计角度提出的一种度量第i个观测点对回归影响大小的统

计量. 对每一个观测点, 定义Cook距离为

DipM,C0q

pβˆ

piq βˆq

1

Mpβˆ

piq βˆq

C0

(9-4.5)

一般取M为观测数据的离差阵, C0为回归模型均方误差(EMS). Di大的观测点

称为强影响点. 一般建议使用的判别标准是: 当|Di| ¡ 4{n 时, 认为是强影响

点, 其中n是样本容量.

R软件中用于计算Cook距离的函数为cooks.distance( ), 其调用格式

为:

cooks.distance(model, infl=im.influence(model, do.coef=FALSE),

cooks.distance( )的调用格式

res=weighted.residuals(model),

sd=sqrt(deviance(model)/df.residual(model)),

hat=infl$hat, …)

DFFITS准则

Belsley, Kuh和Welsch(1980)给出另一种准则, 所用的统计量为

Dipσq



hii

1 hii

εˆi

σ



1 hii

(9-4.6)

其中σ用估计量σˆpiq来代替. 对于第i个样本, 如果有

|Dipσq| ¡ 2



p  1

n

,

则认为第i个样本的影响比较, 这里的p  1是参数向量β的维数, n是样本容量.

R软件给出了DFFITS准则的计算函数dffits( ), 其调用格式为:

dffits(model, infl=…, res=…)

dffits( )的调用格式

296 第九章 回归分析与相关分析

COVRATIO准则

利用全部样本点的回归系数估计值的协方差阵和去掉第i个样本点后回归

系数估计值的协方差阵分别为

Varpβˆ˜q σ2pX1Xq1, Varpβˆ˜piqq σ2pX1piqXpiqqq1

其中X

piq是X剔除第i行后得到的矩阵. 使用时分别用σˆ和σˆpiq替代上面两式中

的σ.

为了比较其回归系数的精度, 考虑这两个协方差阵行列式的比值

COVRATIOi

detpσˆ2pX1

piqXpiqq

1

q

detpσˆ2pXTXq1q

pσˆ2

piqq

p 1

pσˆ2qp 1

1

1 hii

, i 1, 2, , n (9-4.7)

如果有一个样本点所对应的COVRATIO值离1越远, 则认为该样本点影响越大.

R软件中计算COVRATIO值的函数为covratio( ), 其调用格式为:

covratio(model, infl=lm.influence(model, do.coef=FALSE),

covration( )的调用格式

res=weighted.residuals(model))

注: 上面介绍了四种分析强影响点的方法及相应的R函数, 每种方法找

到的点是否是真正的强影响点还需要根据具体情况进行分析. 在R软件中, 函

数influence.measures( )可以做回归诊断中影响分析的概括, 它的调用格式

为:

influence.measures(model)

influence.measures( )的调用格式

结果返回一个列表, 列表中包括DFFITS统计量, COVRATIO统计量, Cooks距离

等.

例 9.4.4 电影院老板调查电视广告的费用x1和报纸广告的费用x2对每

周总收入y的影响(单位:元), 数据见表9.7. 试给出回归分析, 并进行回归诊断.

9.4 回归诊断 297

表 9.7 电视广告和报纸广告费用与收入的数据

x1 x2 y x1 x2 y

1500 5000 96000 2000 2000 90000

1500 4000 95000 2500 2500 92000

3300 3000 95000 2300 3500 95000

4200 2500 94000 2500 3000 94000

解 R程序如下:

> x1<-c(1500, 1500, 3300, 4200, 2000, 2500, 2300, 2500)

> x2<-c(5000, 4000, 3000, 2500, 2000, 2500, 3500, 3000)

> y<-c(96000, 95000, 95000, 94000, 90000, 92000, 95000, 94000)

> money<-data.frame(x1, x2, y)

> lm.reg<-lm(y~x1+x2, data=money)

> summary(lm.reg)

> influence.measures(lm.reg)

这里只给出influence.measures( )函数语句的返回结果:

Influence measures of

lm(formula = y ~ x1 + x2, data = money) :

dfb.1_ dfb.x1 dfb.x2 dffit cov.r cook.d hat inf

1 1.98495 0.06107 -3.8115 -5.167 0.0461 2.2838 0.633 *

2 0.11517 -0.26496 0.1105 0.533 1.7687 0.1018 0.301

3 -0.19968 0.33167 0.1285 0.468 1.7188 0.0791 0.262

4 0.88978 -1.56524 -0.3538 -1.871 1.8860 1.0056 0.660 *

5 -1.53634 1.11782 1.4109 -1.633 2.1558 0.8133 0.645 *

6 -0.16907 0.08580 0.1621 -0.242 2.1804 0.0233 0.226

7 -0.00772 -0.00518 0.1016 0.383 1.2356 0.0499 0.140

8 0.10067 -0.03095 -0.0686 0.305 1.4686 0.0335 0.132

结论: 可以看出, 第1、4、5个观测点为强影响点, 结果中已用“*”号标出. 其

中, 第一个样本点的cook.d值为2.2838比4/n=4/8=0.5 大得多; 第四个样本点

298 第九章 回归分析与相关分析

的cov.r值为1.8860, 与1距离很远; 第五个样本点的dffit值的绝对值1.633明显大

于2



p 1

n

2



2

8

1. 故这三个点被认为是强影响点. ¥

9.4.3 共线性诊断

共线性问题是指拟合多元线性回归时, 自变量之间存在线性关系或近似线

性关系. 自变量之间的线性关系将会隐蔽变量的显著性, 增加参数估计的误差,

还会产生一个很不稳定的模型. 所以, 共线性诊断就是找出哪些变量间存在共

线关系, 主要有以下几种方法:

特征值法

首先把X1X变换为主对角线是1的矩阵, 然后求特征值和特征向量. 若

有r个特征值近似等于0, 则回归设计阵X中有r个共线性关系, 且共线性关系的

系数向量就是近似为0的特征值对应的特征向量.

R软件中提供了计算矩阵特征值和特征向量的函数为eigen( ), 其调用格

式为:

eigen(x, symmetric, only.values=FALSE, EISPACK=FALSE)

eigen( )的调用格式

说明: x为所求矩阵, symmetric规定矩阵的对称性, only.value=TRUE表示只

返回了特征值. 否则, 返回特征值和特征向量. 其它参数见在线帮助.

条件指数

若自变量的交叉乘积矩阵X1X的特征值为d21 ¥ d22 ¥ . . . ¥ d2k, 则X的条件

数d1{dk就是刻画矩阵的奇异性的一个指标, 故称d1{djpj 1, , kq为条件指

数.

一般认为, 若条件指数值在10与30之间为弱相关; 在30与100之间为中等相

关; 大于100表明有强相关性.

在R软件中, 可使用函数kappa( )计算矩阵的条件数, 其调用格式为:

kappa(x, exact=FALSE, …)

kappa( )的调用格式

9.4 回归诊断 299

说明: x是矩阵, exact是逻辑变量: 当exact=TRUE时, 精确计算条件数; 否则

近似计算条件数.

方差膨胀因子

方差膨胀因子VIF是指回归系数的估计量由于自变量共线性使得方差增

加的一个相对度量. 对第j个回归系数pj 1, 2, ,mq, 它的方差膨胀因子定

义为

VIFj

第j个回归系数的方差

自变量不相关时第j个回归系数的方差

1

1R2j

1

TOLj

(9-4.8)

其中1 R2j是自变量xj对模型中其余自变量线性回归模型的R平方, VIFj的倒

数TOLj也称容限(Tolerence).

一般建议:若VIF¡10, 表明模型中有很强的共线性问题.

R软件的DAAG程序包中, 函数vif( )可用来计算方差膨胀因子, 其调用格

式为:

vif(lmobj, digits=5)

vif( )的调用格式

说明: lmobj为由lm( )生成的对象, digits给出小数点位数, 缺省为5位.

例 9.4.5 某种水泥在凝固时单位质量所释放的热量为Y卡/克, 它与水

泥中下列四种化学成分有关:

X1―3CaO Al2O3 的成分(%)

X2―3CaO SiO2 的成分(%)

X3―4CaO Al2O3 Fe2O3 的成分(%)

X4―2CaO SiO2 的成分(%)

共观测了13组数据(见表9.8), 试对自变量的共线性进行诊断.

解 回归分析的R程序如下:

> x1<-c(7, 1, 11, 11, 7, 11, 3, 1, 2, 21, 1, 11, 10)

> x2<-c(26, 29, 56, 31, 52, 55, 71, 31, 54, 47, 40, 66, 68)

> x3<-c(6, 15, 8, 8, 6, 9, 17, 22, 18, 4, 23, 9, 8)

300 第九章 回归分析与相关分析

表 9.8 水泥数据

序号 X1 X2 X3 X4 Y

1 7 26 6 60 78.5

2 1 29 15 52 74.3

3 11 56 8 20 104.3

4 11 31 8 47 87.6

5 7 52 6 33 95.9

6 11 55 9 22 109.2

7 3 71 17 6 102.7

8 1 31 22 44 72.5

9 2 54 18 22 93.1

10 21 47 4 18 115.9

11 1 40 23 34 83.8

12 11 66 9 12 113.3

13 10 68 8 12 109.4

> x4<-c(60, 52, 20, 57, 33, 22, 6, 44, 22, 18, 34, 12, 12)

> y<-c(78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7, 72.5,

93.1, 115.9, 83.8, 113.3, 109.4)

> cement<-data.frame(x1, x2, x3, x4)

> lm.reg<-lm(y~x1+x2+x3+x4, data=cement)

> summary(lm.reg)

> library(DAAG)

> vif(lm.reg, digits=3)

结果显示为

Call:

lm(formula = y ~ x1 + x2 + x3 + x4, data = cement)

Residuals:

Min 1Q Median 3Q Max

9.5 Logistic回归 301

-3.2777 -1.3956 -0.2374 1.1650 4.0379

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 64.8044 22.8867 2.832 0.02210 *

x1 1.4805 0.3598 4.115 0.00337 **

x2 0.4918 0.2285 2.153 0.06351 .

x3 0.0510 0.3299 0.155 0.88097

x4 -0.1563 0.2120 -0.737 0.48205



Signif. codes: 0‘***’ 0.001‘**’ 0.01‘*’ 0.05‘.’ 0.1‘ ’ 1

因此,在0.05的水平下,仅有X1是显著的. 再看一下变量X1, X2, X3, X4的方差

膨胀因子

> vif(lm.reg, digits=3)

x1 x2 x3 x4

9.54 26.90 9.51 31.40

结论: 由于X2与X4的方差膨胀因了均大于10,因此它们之间可能存在共线性

性. 由命令

> cor(x2, x4)

[1] -0.94797

知它们之间的线性相关系数达到0.95, 因此可以肯定它们之间的确存在严重的

共线性性. ¥

§9.5 Logistic回归

线性回归模型是定量分析中最常用的统计分析方法, 但线性回归分析要求

响应变量是连续型变量. 在实际研究中, 尤其是在生物、医学、经济和社会数

据的统计分析中, 研究遇到非连续型的响应变量, 即分类响应变量.

302 第九章 回归分析与相关分析

Logistic回归

在研究两元分类响应变量与诸多自变量间的相互关系时, 常选

用logistic回归模型.

将两元分类响应变量Y的一个结果记为“成功”, 另一个结果记为“失

败”, 分别用0和1表示. 对响应变量Y有影响的p个自变量(解释变量)记

为X1, X2, , Xp. 在m个自变量的作用下出现“成功”的条件概率记

为p P pY 1|X1, X2, , Xpq, 那么logistic回归模型表示为

p

exppβ0   β1×1   β2×2     βpxpq

1  exppβ0   β1×1   β2×2     βpxpq

(9-5.1)

其中β0称为常数项或截距, β1, β2, , βp称为logistic回归模型的回归系数.

从(9-5.1)式可以看出, logistic回归模型是一个非线性的回归模型, 自变

量Xjpj 1, 2, , pq可以是连续变量, 也可以是分类变量, 或哑变量(dummy

variable). 对自变量Xj 任意取值, β0   β1X1   β2X2     βpXp总落

在p8, 8q中, 因此公式(9-5.1)的比值, 即p的取值, 总在0到1之间变化, 这

是logistic回归模型的合理性所在.

对公式(9-5.1)作logit变换, logistic回归模型可以写成下列线性形式:

logitppq ln

(

p

1 p

)

β0   β1X1   β2X2     βpXp (9-5.2)

这样我们可以使用线性回归模型对参数βj , j 1, 2, . . . , p进行估计.

广义线性模型

logistic回归模型属于广义线性模型(Generalized Linear Model)的一种,

它是通常的正态线性模型的推广,它要求响应变量只能通过线性形式依赖于解

释变量. 上述推广体现在两个方面:

ˆ 通过一个连接函数ψ,即对响应变量期望的变换, 将响应变量的期望与解

释变量建立线性关系

ψpEpY qq β0   β1X1   β2X2     βpXp.

ˆ 通过一个误差函数, 说明广义线性模型的最后一部分随机项;

9.5 Logistic回归 303

表9.9给出了广义线性模型中常见的连接函数和误差函数. 可见, 若连接函数为

恒等变换,误差函数为正态分布,则得到通常的正态线性模型.

表 9.9 常见的连接函数和误差函数

变换 连接函数 回归模型 典型误差函数

恒等 ψpxq x Epyq X 1β˜ 正态分布对数 ψpxq lnpxq lnpEpyqq X 1β˜ 泊淞分布

logit ψpxq logitpxq logitpEpyqq X 1β˜ 二项分布逆(倒数) ψpxq 1{x 1{Epyq X 1β˜ 伽玛分布

与广义线性模型有关的R函数: glm( )

R语言提供了拟合和计算广义线性模型的函数glm( ), 其调用格式为

log<-glm(formula, family=family.generator,

glm( )的调用格式

data=data.frame)

说明: formula为拟合公式, 其意义与线性模型相同; family为分布族, 包

括正态分布(gaussian)、二项分布(binomial)、泊淞分布(poission)和伽玛分

布(gamma), 分布族还可通过选项link=来指定使用的连接函数; data为数据框.

1) 基于正态分布的广义线性模型:

log<-glm(formula, family = gaussian(link = identity),

基于正态分布族的glm( )的调用格式

data = data.frame)

说明: link=identity可以不写,因为正态分布族的连接函数默认值是

恒等,再者整个family=gaussian也可以不写,因为分布族的默认值是正

态分布. 正态分布族的广义线性模型等同于一般的线性模型, 因此

> fm <- glm(formula, family = gaussian, data = data.frame)

等同于

304 第九章 回归分析与相关分析

> fm <- lm(formula, data = data.frame)

2) 基于二项分布的广义线性模型:

基于二项分布族的广义线性模型就是本节讲的logistic回归模型, 因

此在R软件中, logistic回归分析可以通过调用广义线性回归模型函

数glm( )来实现, 其调用格式为

log<-glm(formula, family = binominal(link = logit),

基于二项分布族的glm( )的调用格式

data = data.frame)

说明: glm( )就是R软件中拟合和计算广义线性模型的函数. 公

式formula有两种输入方法: 一种是输入成功与失败的次数, 另一种

像线性模型通常数据的输入方法. link=logit可以不写, 因为logit是二

项分布族连接函数, 是默认状态.

3) 基于泊淞分布的广义线性模型:

log<-glm(formula, family = poisson(link = log),

基于二项分布族的glm( )的调用格式

data = data.frame)

4) 基于伽玛分布的广义线性模型:

log<-glm(formula, family = gamma(link = inverse),

基于伽玛分布族的glm( )的调用格式

data = data.frame)

例 9.5.1 表9.10为对45名驾驶员的调查结果, 其中四个变量的含义为:

1) X1: 表示视力状况, 它是一个分类变量, 1表示好, 0表示有问题);

2) X2: 年龄(age), 数值型);

3) X3: 驾车(drive)教育, 它也是一个分类变量, 1表示参加过驾车教育, 0表

示没有;

4) Y : 一个分类型输出变量accident, (去年是否出过事故, 1表示出过事故,

0表示没有).

9.5 Logistic回归 305

表 9.10 对45名驾驶员的调查结果

X1 X2 X3 Y X1 X2 X3 X X1 X2 X3 Y

1 17 1 1 1 68 1 0 0 17 0 0

1 44 0 0 1 18 1 0 0 45 0 1

1 48 1 0 1 68 0 0 0 44 0 1

1 55 0 0 1 48 1 1 0 67 0 0

1 75 1 1 1 17 0 0 0 55 0 1

0 35 0 1 1 70 1 1 1 61 1 0

0 42 1 1 1 72 1 0 1 19 1 0

0 57 0 0 1 35 0 1 1 69 0 0

0 28 0 1 1 19 1 0 1 23 1 1

0 20 0 1 1 62 1 0 1 19 0 0

0 38 1 0 0 39 1 1 1 72 1 1

0 45 0 1 0 40 1 1 1 74 1 0

0 47 1 1 0 55 0 0 1 31 0 1

0 52 0 0 0 68 0 1 1 16 1 0

0 55 0 1 0 25 1 0 1 61 1 0

试考察前三个变量X1, X2, X3与发生事故的关系.



1) 用数据框形式输入数据

> x1<-rep(c(1, 0, 1, 0, 1), c(5, 10, 10, 10, 10))

> x2<-c(17, 44, 48, 55, 75, 35, 42, 57, 28, 20,

38, 45, 47, 52, 55, 68, 18, 68, 48, 17,

70, 72, 35, 19, 62, 39, 40, 55, 68, 25,

17, 45, 44, 67, 55, 61, 19, 69, 23, 19,

72, 74, 31, 16, 61),

> x3<-c(1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0,

306 第九章 回归分析与相关分析

1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1,

0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1)

> y<-c(1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1,

0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0,

0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0)

> accident<-data.frame(x1, x2, x3, y)

2) 再作logistic回归

> log.glm<-glm(y~x1+x2+x3, family=binomial, data=accident)

> summary(log.glm)

回归结果为:

Call: glm(formula = y ~ x1 + x2 + x3, family = binomial,

data = accident)

Deviance Residuals:

Min 1Q Median 3Q Max

-1.5636 -0.9131 -0.7892 0.9637 1.6000

Coefficients:

Estimate Std. Error z value Pr(>|z|)

(Intercept) 0.597610 0.894831 0.668 0.5042

x1 -1.496084 0.704861 -2.123 0.0338 *

x2 -0.001595 0.016758 -0.095 0.9242

x3 0.315865 0.701093 0.451 0.6523



Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ‘ 1

(Dispersion parameter for binomial family taken to be 1)

Null deviance: 62.183 on 44 degrees of freedom

Residual deviance: 57.026 on 41 degrees of freedom

AIC: 65.026

Number of Fisher Scoring iterations: 4

9.5 Logistic回归 307

由此得到初步的logistic回归模型:

p

expp0.5976 1.4961X1 0.0016X2   0.3159X3q

1  expp0.5976 1.4961X1 0.0016X2   0.3159X3q

.



logitppq 0.5976 1.4961X1 0.0016X2   0.3159X3.

3) 模型的诊断与更新

在此模型中, 由于参数β2, β3没有通过检验, 可类似于线性模型, 用step(

)做变量筛选.

> log.step<-step(log.glm)

> summary(log.step)

计算结果为:

Start: AIC= 65.03

y ~ x1 + x2 + x3

Df Deviance AIC

– x2 1 57.035 63.035

– x3 1 57.232 63.232

<none> 57.026 65.026

– x1 1 61.936 67.936

Step: AIC= 63.03

y ~ x1 + x3

Df Deviance AIC

– x3 1 57.241 61.241

<none> 57.035 63.035

– x1 1 61.991 65.991

Step: AIC= 61.24

y ~ x1

308 第九章 回归分析与相关分析

Df Deviance AIC

<none> 57.241 61.241

– x1 1 62.183 64.183

Call: glm(formula = y ~ x1, family = binomial, data = accident)

Deviance Residuals:

Min 1Q Median 3Q Max

-1.4490 -0.8783 -0.8783 0.9282 1.5096

Coefficients:

Estimate Std. Error z value Pr(>|z|)

(Intercept) 0.6190 0.4688 1.320 0.1867

x1 -1.3728 0.6353 -2.161 0.0307 *



Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ‘ 1

(Dispersion parameter for binomial family taken to be 1)

Null deviance: 62.183 on 44 degrees of freedom

Residual deviance: 57.241 on 43 degrees of freedom

AIC: 61.241

Number of Fisher Scoring iterations: 4

可以看出, 新的回归方程为

p

expp0.6190 1.3728x1q

1  expp0.6190 1.3728x1q

.

4) 预测分析:

> log.pre<-predict(log.step, data.frame(x1=1))

> p1<-exp(log.pre)/(1+exp(log.pre));p1

> log.pre<-predict(log.step, data.frame(x1=0))

> p2<-exp(log.pre)/(1+exp(log.pre));p2

9.5 Logistic回归 309

运行得到:p1=0.32; p2=0.65, 说明了视力有问题司机发生交通事故的概

率是视力正常的司机的两倍以上.

¥

第九章习题

9.1 测得10名女中学生体重X1(kg)、胸围X2(cm)及肺活量Y(ml)的数据如

表9.11所示, 试画出Y与X1, X2的散点图, 并分析它们之间的相关关系.

表 9.11 10名女中学生体重X1(kg), 胸围X2(cm)及肺活量Y (ml)的值

X1 35 40 40 42 37 45 43 37 44 42

X2 60 74 64 71 72 68 78 66 70 65

Y 1600 2600 2100 2650 2400 2200 2750 1600 2750 2500

9.2 考察温度对产量的影响, 测得10组数据(见表9.12)

表 9.12 温度对产量的影响

温度X{C 20 25 30 35 40 45 50 55 60 65

产量Y{kg 13.2 15.1 16.4 17.1 17.9 18.7 19.6 21.2 22.5 24.3

1) 试建立X与Y之间的回归方程式;

2) 对其回归方程进行显著性检验;

3) 预测X 42C时产量的估计值及预测区间(置信度为95%).

9.3 根据表9.13提供的经济数据,

1) 试画出散点图, 判断国民收入(Y )与消费量(X)是否有线性关系;

2) 求出Y关于X的一元线性回归方程;

310 第九章 回归分析与相关分析

表 9.13 我国钢材消费量及国民收入

年份 钢材消费量 国民收入 年份 钢材消费量 国民收入

(万吨) (亿元) (万吨) (亿元)

1964 698 1097 1973 1765 2286

1965 872 1284 1974 1762 2311

1966 988 1502 1975 1960 2003

1967 807 1394 1976 1902 2435

1968 738 1303 1977 2013 2625

1969 1025 1555 1978 2446 2948

1970 1316 1917 1979 2736 3155

1971 1539 2051 1980 2825 3372

1972 1561 2111

3) 对方程作显著性检验;

4) 现测得1981年消费量X 3441, 试给出1981年国民收入的预测值及相应

的区间估计(α 0.05).

9.4 已知变量X与Y的观测值如表9.14所示.

1) 画出数据的散点图, 求回归直线Y βˆ0   βˆ1X, 同时将回归直线也画在

散点图上;

2) 对回归模型与参数分别进行F检验和t检验;

3) 画出残差(普通残差和标准残差)与预测值的残差图, 分析误差是否是等方

差的;

4) 修正模型. 对响应变量y作开方, 再完成(1)-(3)的工作.

9.5 某厂生产的一种电器的年销售量Y与竞争对手的价格X1及本厂的价

格X2有关. 表9.15是10个城市中记录的资料.

1) 建立Y与X1及X2的回归关系, 并说明回归方程式在α 0.05 的水平上是

否显著?并解释回归系数的含义;

9.5 Logistic回归 311

表 9.14 数据表

序号 X Y 序号 X Y 序号 X Y

1 1 0.6 11 4 3.5 21 8 17.5

2 1 1.6 12 4 4.4 22 8 13.4

3 1 0.5 13 4 5.1 23 8 4.5

4 1 1.2 14 5 5.7 24 9 30.4

5 2 2.0 15 6 3.4 25 11 12.4

6 2 1.3 16 6 9.7 26 12 13.4

7 2 2.5 17 6 8.6 27 12 26.2

8 3 2.2 18 7 4.0 28 12 7.4

9 3 2.4 19 7 5.5

10 3 1.2 20 7 10.5

表 9.15 10个城市某种电器的年销售量和竞争对手价格(单位:元)

X1 X2 Y X1 X2 Y

120 100 102 140 110 100

190 90 120 130 150 77

155 210 46 175 150 93

125 250 26 145 270 69

180 300 65 150 250 85

2) 对回归模型进行初步诊断, 并指出有无可疑点或异常点?

3) 已知某城市中本厂电器的售价X2 160元, 竞争对手售价X1 170元, 使

用上述建立起来的回归模型预测该城市的年销售量;

4) 您能否建立系数R2 ¡ 0.68, 模型中所有回归系数在0.10水平上是显著的

回归模型(考虑二次项和交叉项, 用逐步回归法).

9.6 某科学基金会的管理人员欲了解从事研究的工作人员中, 高水平的数

学家工资额Y与他们的研究成果(论文、著作等)的质量指标X1, 从事研究工作

312 第九章 回归分析与相关分析

的时间X2以及能成功获得资助的指标X3之间的关系, 为此按一定的设计方案

调查了24位此类型的数学家, 如表9.16.

表 9.16 24位数学家工资额及相关指标的调查数据

序号 Y X1 X2 X3 序号 Y X1 X2 X3

1 33.2 3.5 9 6.1 13 43.3 8.0 23 7.6

2 40.3 5.3 20 6.4 14 44.1 5.6 35 7.0

3 38.7 5.1 18 7.4 15 42.8 6.6 39 5.0

4 46.8 5.8 33 6.7 16 33.6 3.7 31 4.4

5 41.4 4.2 31 7.5 17 34.2 6.2 7 5.5

6 37.5 6.0 13 5.9 18 48.0 7.0 40 7.0

7 39.0 6.8 25 6.0 19 38.0 4.0 35 6.0

8 40.7 5.5 30 4.0 20 35.9 4.5 23 3.5

9 30.1 3.1 5 5.8 21 40.4 5.9 33 4.0

10 52.9 7.2 47 8.3 22 36.8 5.6 27 4.3

11 38.2 4.5 25 5.0 23 45.2 4.8 34 8.0

12 31.8 4.9 11 6.4 24 35.1 3.9 15 5.0

1) 假设误差服从Np0, σ2q分布, 建立Y与X1, X2和X3之间的线性回归方程

并研究相应的统计推断问题, 作相应的诊断和检验;

2) 假定某位数学家的关于X1, X2, X3的值为px01, x02, x03q p5.1, 20, 7.2q,

试预测他的年工资额, 并给出置信度为95%的置信区间.

9.7 某种水泥在凝固时放出的热量Y(cal/g)与水泥中四种化学成分X1, X2,

X3, X4有关, 现测得13组数据, 如表9.17所示.

1) 希望从中选出主要变量, 建立Y与它们的回归方程;

2) 考查X1, X2, X3, X4之间是否存在多重共线性;

3) 分析用函数step( )去掉的变量是否合理.

9.5 Logistic回归 313

表 9.17 水泥在凝固时放出的热量与四种化学成分

序号 Y X1 X2 X3 X4 序号 Y X1 X2 X3 X4

1 7 26 6 60 78.5 8 1 31 22 44 72.5

2 1 29 15 52 74.3 9 2 54 18 22 93.1

3 11 56 8 50 104.3 10 21 47 4 26 115.9

4 11 31 8 47 87.6 11 1 40 23 34 83.8

5 7 52 6 33 95.9 12 11 66 9 12 113.3

6 11 55 9 22 109.2 13 10 68 8 12 109.4

7 3 71 17 6 102.7

表 9.18 两种疗法对不同病情的某病的疗效

病情 有效(1) 无效(0)

甲药(0) 轻(1) 38 64

重(0) 10 82

乙药(1) 轻(1) 95 18

重(0) 50 35

丙药(2) 轻(1) 88 26

重(0) 43 37

9.8 某研究者欲比较3个不同的药物治疗病情不同的某病的效果, 研究数据

见表9.18, 试对数据进行logistic回归分析, 并作相应的统计推断.

9.9 表9.19是40名肺癌病人的生存资料, 其中X1表示生活行为能力评

分(1到100); X2表示病人的年龄(年); X3表示由诊断到进入研究时间(月); X4表

示肿瘤类型(“0”是鳞瘤,“1”是小型细胞癌,“2”是腺癌,“3”是大型细胞

癌); X5表示两种化疗方法(“1”是常规,“0”是试验新法); Y表示病人的生存

时间(“0”是生存时间短, 即生存时间小于200天;“1”表示生存时间长, 即生存

时间大于或等于200天).

314 第九章 回归分析与相关分析

表 9.19 40名肺癌病人的生存资料

序号 X1 X2 X3 X4 X5 Y 序号 X1 X2 X3 X4 X5 Y

1 70 64 5 1 1 1 21 60 37 13 1 1 0

2 60 63 9 1 1 0 22 90 54 12 1 0 1

3 70 65 11 1 1 0 23 50 52 8 1 0 1

4 40 69 10 1 1 0 24 70 50 7 1 0 1

5 40 63 58 1 1 0 25 20 65 21 1 0 0

6 70 48 9 1 1 0 26 80 52 28 1 0 1

7 70 48 11 1 1 0 27 60 70 13 1 0 0

8 80 63 4 2 1 0 28 50 40 13 1 0 0

9 60 63 14 2 1 0 29 70 36 22 2 0 0

10 30 53 4 2 1 0 30 40 44 36 2 0 0

11 80 43 12 2 1 0 31 30 54 9 2 0 0

12 40 55 2 2 1 0 32 30 59 87 2 0 0

13 60 66 25 2 1 1 33 40 69 5 3 0 0

14 40 67 23 2 1 0 34 60 50 22 3 0 0

15 20 61 19 3 1 0 35 80 62 4 3 0 0

16 50 63 4 3 1 0 36 70 68 15 0 0 0

17 50 66 16 0 1 0 37 30 39 4 0 0 0

18 40 68 12 0 1 0 38 60 49 11 0 0 0

19 80 41 12 0 1 1 39 80 64 10 0 0 1

20 70 53 8 0 1 1 40 70 67 18 0 0 1

1) 建立P (Y=1)对X1 X5的logistic回归模型, X1 X5对P (Y=1)的综合影

响是否显著?哪些变量是主要的影响因素, 显著水平如何?计算各病人生

存时间大于等于200天的概率估计值;

2) 用逐步回归法选取自变量, 结果如何?在所选模型下, 计算病人生存时间

大于或等于200天的概率估计值, 并将计算结果与(1) 中模型作比较, 差异

如何?哪一个模型更合理?

第十章 多元统计分析介绍

本章概要

♦ 主成分分析与因子分析

♦ 判别分析

♦ 聚类分析

♦ 典型相关分析

♦ 对应分析

多元统计分析(Multivariable Statistical Analysis)也称多变量统计

分析、多因素统计分析或多元分析, 是研究客观事物中多变量(多因素或多指

标)之间的相互关系和多样品对象之间差异以及以多个变量为代表的多元随机

变量之间的依赖和差异的现代统计分析理论和方法.

主成分分析与因子分析的目的是寻找多个变量的“代表”, 判别分析能将

对象分类到已知类别中, 聚类分析按照一定的尺度把对象分类, 典型相关分析

研究两组变量之间的相关问题,对应分析探究行列变量的关系.

§10.1 主成分分析与因子分析

做衣服时, 需要测量人体的许多尺寸, 如上体长, 手臂长, 胸围, 颈围, 总肩

宽等等. 然而,这些量之间是否有联系的,能否选出它们的某个线性组合,使之基

本能够刻画人对服装的要求. 若能,选出的线性组合就是诸多尺寸的主成分或

称主分量.

主成分分析(Principle Component Analysis)是把多维空间的相关多变

量的数据集, 通过降维化简为少量而且相互独立的新综合指标, 同时又使简化

316 第十章 多元统计分析介绍

后的新综合指标尽可能多的包括原指标群中的主要信息, 或是尽可能不损失原

有指标的主要信息的一种多元统计分析方法.

为了测验中学生的知识与能力, 出40道题目, 让若干学生回答, 每道题目

有一得分, 这是可以观测的随机变量, 我们希望找出有限个不可观测的潜在变

量来解释这40个随机变量. 这种分析称为因子分析. 这种不可观测的潜在变量

一般不能表示为原来随机变量的线性组合,但却是有实际意义的, 例如语言表

达能力,推理能力,艺术修养能力,历史知识和生活常识等,所以因子分析是寻求

潜在变量的一种方法.

因子分析(Factor Analysis)最早于1904年由英国著名统计学家、心理学家

查尔斯·皮尔逊(Chales.S.Pearson)提出, 主要目的是研究相关矩阵的内在

依赖关系, 把多个显在的变量综合为少数几个不可观测的“潜在因子”或称公

共因子, 来说明复杂多变量系统的内部结构, 并解释原始显在复杂多变量与少

数“潜在因子”之间的内在联系和相关关系. 然后, 根据专业知识和定性分析对

综合因子所反映的独特含义进行命名和解释的一种多元统计分析方法.

10.1.1 主成分的简要定义与计算

定义 10.1.1 设X px1, x2, , xpq1是p维随机向量, 二阶矩存在,

若向量t11 pt11, t12, , t1pq 在条件|t1| 1 下使得Varpt11Xq最大, 则

称Y1 t11X是X的第一主成分或第一主分量; 若向量t12 pt21, t22, , t2pq

在条件|t2| 1,Covpt12X,Y1q 0下使得Varpt12Xq最大, 则称Y2 t12X是X的

第二主成分或第二主分量等等.

由定义可见, Y1尽可能多地反映原来p个变量的信息, Y2在与Y1不相关条件

下尽可能多地反映原来p个变量的信息, 这样继续下去. 定理10.1.1给出主成分

的计算公式.

定理 10.1.1 设X为p维随机向量, CovpXq Σ存在, 则X的第i个主成

分为Yi t1iX, i 1, 2, , p, 其中VarpYiq λi是Σ的特征值从大到小排序后

第i个特征值; ti是λi的特征向量.

定义 10.1.2 λk{

p∑

i1

λi称为主成分Yk的方差贡献率;

k∑

i1

λi{

p∑

i1

λi称为主

成分Y1, Y2, , Yk的累计方差贡献率, Yk与X第i个分量的相关系数ρpxi, Ykq称

为因子载荷量.

易证明ρpxi, Ykq



λktki{σi, 其中σ2i是xi的方差, tki是tk第i个分量.

10.1 主成分分析与因子分析 317

通常取m使Y1, Y2, , Ym的累计方差贡献率达到70%或80%以上, 然后考

虑用Y1, Y2, , Ym来描述X的性质.

在实际问题中, X的不同分量有时有不同的量纲, 量纲变小时该分量的方

差会变大, 从而在主成分中变得突出, 造成不合理的结果. 为了避免量纲的影

响, 常常将随机变量都标准化, 令

xi

xi Epxiq√

Varpxiq

, i 1, 2, , p (10-1.1)

X px1 , x

2 , , x

pq

1, 再来求X的主成分, 而X的协差阵就是X的相

关阵, 也是X的相关阵R, 因此我们如下的定理.

定理 10.1.2 设X的相关阵为R, 其特征值λ1 ¥ λ2 ¥ ¥ λp ,

相应特征向量为t1 , t2 , , tp , 则X 的主成分分别是Y 1 t1 1X, Y 2

t2

1X, , Y p t

p

1X. xi与 主 成 分Y k 的 相 关 系 数(因 子 载 荷

量)为ρpxi , Y k q



λkt

ki, 其中tki是tk的第i个分量.

实际问题中协差阵、相关阵都是未知的, 总用样本协差阵与样本相关阵

代替, 这样是有道理的: 若X Npµ,Σq, Σˆ是Σ的极大似然估计, Σˆ的特征值

为ν1 ¥ ν2 ¥ ¥ νp , 相应单位特征向量ι1, ι2, , ιp; 而Σ的特征值, 特征向

量为λ1 ¥ λ2 ¥ ¥ λp,t1, t2, , tp. 则可以证明

定 理 10.1.3 ν1, ν2, , νp是λ1, λ2, , λp的 极 大 似 然 估 计,

ι1, ι2, , ιp 是t1, t2, , tp的极大似然估计.

10.1.2 主成分R通用程序

利用R语言的princomp( )函数就可完成主成分分析, princomp( )的二

种调用格式如下:

princomp(formula, data = NULL, subset, na.action, …)

princomp( )的调用格式-1

或者

princomp(x, cor = FALSE, scores = TRUE, covmat = NULL,

princomp( )的调用格式-2

318 第十章 多元统计分析介绍

subset = rep(TRUE, nrow(as.matrix(x))), …)

说明: formula是没有响应变量的公式; x是用于主成分分析的数据;

cor是逻辑变量, 当cor=TRUE表示用样本的相关阵R作主成分分析, 否则

当cor=FALSE(默认选项)表示用样本的协方差阵S作主成分, 具体说明见R帮

助.

例 10.1.1 (学生身体4项指标的主成分分析) 随机抽取30名某年级中

学生,测量其身高(X1), 体重(X2), 胸围(X3), 坐高(X4), 数据如下表所示, 试对

这30名学生身体四项指标作主成分分析.

表 10.1 30名学生的4项指标

序号 X1 X2 X3 X4 序号 X1 X2 X3 X4

1 148 41 72 78 2 139 34 71 76

3 160 49 77 86 4 149 36 67 79

5 159 45 80 86 6 142 31 66 76

7 153 43 76 83 8 150 43 77 79

9 151 42 77 80 10 139 31 68 74

11 140 29 64 74 12 161 47 78 84

13 158 49 78 83 14 140 33 67 77

15 137 31 66 73 16 152 35 73 79

17 149 47 82 79 18 145 35 70 77

19 160 47 74 87 20 156 44 78 85

21 151 42 73 82 22 147 38 73 78

23 157 39 68 80 24 147 30 65 75

25 157 48 80 88 26 151 36 74 80

27 144 36 68 76 28 141 30 67 76

29 139 32 68 73 30 148 38 70 78

解 R程序如下:

10.1 主成分分析与因子分析 319

> student<-data.frame(

X1=c(148, 139, 160, 149, 159, 142, 153, 150, 151, 139,

140, 161, 158, 140, 137, 152, 149, 145, 160, 156,

151, 147, 157, 147, 157, 151, 144, 141, 139, 148),

X2=c(41, 34, 49, 36, 45, 31, 43, 43, 42, 31,

29, 47, 49, 33, 31, 35, 47, 35, 47, 44,

42, 38, 39, 30, 48, 36, 36, 30, 32, 38),

X3=c(72, 71, 77, 67, 80, 66, 76, 77, 77, 68,

64, 78, 78, 67, 66, 73, 82, 70, 74, 78,

73, 73, 68, 65, 80, 74, 68, 67, 68, 70),

X4=c(78, 76, 86, 79, 86, 76, 83, 79, 80, 74,

74, 84, 83, 77, 73, 79, 79, 77, 87, 85,

82, 78, 80, 75, 88, 80, 76, 76, 73, 78)

)

> student.pr<-princomp(student, cor=TRUE)

> summary(student.pr,loadings=TRUE)

计算结果为:

Importance of components:

Comp.1 Comp.2 Comp.3 Comp.4

Standard deviation 1.8817805 0.55980636 0.28179594 0.25711844

Proportion of Variance 0.8852745 0.07834579 0.01985224 0.01652747

Cumulative Proportion 0.8852745 0.96362029 0.98347253 1.00000000

Loadings:

Comp.1 Comp.2 Comp.3 Comp.4

X1 -0.497 0.543 -0.450 0.506

X2 -0.515 -0.210 -0.462 -0.691

X3 -0.481 -0.725 0.175 0.461

X4 -0.507 0.368 0.744 -0.232

对上述结果我们作一些说明:

1) Standard deviation: 表示主成分的标准差, 即主成分的方差平方根, 即

相应特征值的开方;

320 第十章 多元统计分析介绍

2) Proportion of Variance: 表示方差的贡献率;

3) Cumulative Proportion: 表示方差的累计贡献率.

4) 用summmary函数中loadings=TRUE选项列出了主成分对应原始变量的系

数, 因此得到前两个主成分是

Y1 0.497×1   0.543x

2 0.450x

3   0.506x

4

Y2 0.515×1 0.210x

2 0.462x

3   0.691x

4

由于前两个主成分的累计贡献率已经达到96.36%, 所以取前两个主成分

来降维.

5) 对于主成分的解释: 由Y1的系数都接近与0.5, 它反映学生身材的魁

梧程度,因此我们称第一主成分为大小因子(魁梧因子); Y2的系数中体

重(X2)和胸围(X3)为正值, 它反映学生的胖瘦情况,故称第二主成分为形

状因子(或胖瘦因子).

¥

10.1.3 因子分析的简要定义与计算

因子分析方法根据研究对象和分析方法的不同, 分为R型和Q型两种不同

的类型. R型因子分析研究指标(变量)之间的相互关系, 通过对多变量相关系

数矩阵内部结构的研究, 找出控制所有变量的几个主因子(主成分); Q型因子

分析研究样品之间控制所有样品的几个主要因素. 由于这两种因子分析方法的

相关关系, 所以通过样品相似系数矩阵与通过变量相关系数矩阵内部结构的研

究, 找出分析的全部运算过程都是一样的, 只是出发点不同而已. R型分析从相

关系数矩阵出发, Q型分析从相似系数矩阵出发, 对于同一批观测数据, 可根据

所要求的目的决定采用哪一类型的分析. 只是R型分析须考虑变量量纲及数量

级, 而Q型分析则不必考虑这一问题, 在多变量的量纲及数量级差别很大时, 更

为方便. 而对于同一批观测数据, 可以根据其所要求的目的而决定采用哪一类

型的分析.

定义 10.1.3 设X为p 1随机向量, 其均值为µ, 协差阵为Σ pσijq,

若X能表示为

X µ  Λf   u (10-1.2)

10.1 主成分分析与因子分析 321

其中Σ是p k未知常数阵, f是k 1随机变量, µ是p 1随机向量, 且

Epfq 0,Varpfq I

Epµq 0,Varpµq Ψ diagpΨ21,Ψ

2

2, ,Ψ

2

p, q

Covpf, µq 0

(10-1.3)

则X µ   Λf   u称为X有k个因子的因子分析模型, f称为公共因子, µ称为

特殊因子, Σ叫做因子载荷矩阵, 其元素δij是第i个变量在第j个因子上的载荷.

由上面的关系我们可见CovpXq ΛΛ1  Ψ Σ, 从而Σ对角线上元素

σii

k∑

j1

λ2ij  Ψ

2

i h

2

i  Ψ

2

i , i 1, 2, , p (10-1.4)

其中h2i反映了公共因子对Xi的影响, 称为共同度或共性方差.

值得注意的是, 因子载荷不是唯一的, 若Γ是任意k阶正交阵, 则X可以表

示成X µ  pΛΓqpΓ1fq   u. 将ΛΓ作为因子载荷, Γ1f作为公共因子, 则(3)式

仍然成立, 因子载荷的不唯一性, 使得我们有更多地选择余地, 反而是有利的.

实际问题中, 总是给出随机向量的n个观测值, 从而得到样本方差阵, 进而

估计因子载荷, 并给公因子赋予有实际背景的解释.

模型X µ Λf u中µ可用样本均值来估计. Σ可用

n∑

i1

pXpiqXqpXpiq

Xq1{pn 1q估计, 其中Xpiq 是随机向量的第i次观察值.

提取因子的方法有多种, 常用的有主成分分析、主因子分析、迭代主因

子分析、极大似然分析等, 用上述方法之一估计出参数后, 还必须对得到的

公共因子进行解释, 对每个公共因子要给出一个名称, 说明其作用. 有时公

共因子f难以和实际问题相对应, 这时需要通过某个正交阵Γ作公共因子旋转,

使Γ1f 和ΛΓ有鲜明的实际意义. 另外一方面, 上述方法估计参数带有随意性,

通过旋转公因子, 可以减少随意性. 所以作公共因子旋转是有必要的. 有最大

方差旋转、最大均方旋转等旋转方法.

因子分析与主成分分析的形式上类似, 但有着明显的区别, 主要表现在五

个方面:

1) 因子分析需要构造因子模型, 是把原观测变量表现为公共因子(新综合因

子)与特殊因子的有机组合模型. 而主成分分析不能作为一个模型来描

322 第十章 多元统计分析介绍

述, 只能作为通常的变量变换, 也就是把新综合变量表现为原多变量的线

性变换(组合);

2) 在理论上主成分分析中的综合主分量数m和原变量的个数p之间是相等

的, 它是把一组具有相关性的变量变换为一组新的独立变量. 而因子分析

的目的是要求构造的因子模型中公共因子的数目尽可能少, 以便尽可能

构造一个结构简单的模型;

3) 因子分析是把原观测变量表示为新综合因子的线性组合, 即新因子的综

合指标, 而主成分分析是把主分量表示为原观测变量的线性组合. 另外,

因子分析模型在形式上与线性回归模型相似, 但两者之间有本质的区别:

回归模型中的自变量是可观测的, 而因子模型中各个公共因子是不可观

测的潜在因子, 而且两个模型的参数意义上很不相同;

4) 主成分分析的数学模型实质上是一种变换, 而因子分析模型是描述原指

标X协差阵Σ结构的一种模型;

5) 在主成分分析中每个主成分相应的系数是唯一确定的, 而在因子分析中

每个因子的相应系数不是唯一的, 即因子载荷阵不是唯一的.

10.1.4 因子分析R通用程序

利用R语言的factanal( )函数就可完成因子分析, 其基本的调用格式如

下:

factanal(x, factors, data = NULL, covmat = NULL, n.obs = NA,

factanal( )的调用格式

subset, na.action, start = NULL,

scores = c(“none”, “regression”, “Bartlett”),

rotation = “varimax”, control = NULL, …)

说明: x是用于因子分析的数据; factors表示因子个数, scores表示选用因

子得分的方法, rotation = “varimax”表示用最大方差旋转, 具体说明见R帮

助.

例 10.1.2 100名学生六门课程(数学、物理、化学、语文、历史、英语)的

成绩如下表(只列出了部分, 数据在student.txt). 目前的问题是, 能不能把这个

数据的6个变量用一两个综合变量来表示呢? 这一两个综合变量包含有多少原

来的信息呢? 怎么解释它们呢?

10.1 主成分分析与因子分析 323

表 10.2 100名学生六门课程成绩

学生代码 数学 物理 化学 语文 历史 英语

1 65 61 72 84 81 79

2 77 77 76 64 70 55

3 67 63 49 65 67 57

4 80 69 75 74 74 63

5 74 70 80 84 81 74

6 78 84 75 62 71 64

7 66 71 67 52 65 57

8 77 71 57 72 86 71

9 83 100 79 41 67 50

解 R程序如下:

> student<-read.table(“D:/Rdata/student.txt”)

> names(student)=c(“math”, “phi”, “chem”, “lit”, “his”, “eng”)

> fa<-factanal(student, factors=2)

> fa

R程序结果:

Call: factanal(x = student, factors = 2)

Uniquenesses:

math phi chem lit his eng

0.245 0.451 0.479 0.136 0.215 0.181

Loadings:

Factor1 Factor2

math -0.355 0.793

phi -0.201 0.713

324 第十章 多元统计分析介绍

chem -0.216 0.689

lit 0.850 -0.376

his 0.854 -0.235

eng 0.872 -0.242

Factor1 Factor2

SS loadings 2.425 1.868

Proportion Var 0.404 0.311

Cumulative Var 0.404 0.716

Test of the hypothesis that 2 factors are sufficient.

The chi square statistic is 0.39 on 4 degrees of freedom.

The p-value is 0.983

结果说明:

1) 我们用x1, x2, x3, x4, x5, x6来表示math(数学), phys(物理), chem(化学),

literat(语文), history(历史), english(英语)等变量. 这样因

子f1和f2与这些原变量之间的关系是

x1 0.355f1   0.793f2

x2 0.201f1   0.713f2

x3 0.216f1   0.689f2

x4 0.850f1 0.376f2

x5 0.854f1 0.235f2

x6 0.872f1 0.242f2

(10-1.5)

这里, 第一个因子主要和语文、历史、英语三科有很强的正相关, 相关系

数分别为0.850, 0.854, 0.872; 而第二个因子主要和数学、物理、化学三科

有很强的正相关相关系数分别为0.793, 0.713, 0.689.因此可以给第一个因

子起名为“文科因子”, 而给第二个因子起名为“理科因子”.

2) Proportion Var 是方差贡献率, Cumulative Var是累计方差贡献率, 检

验表明两个因子已经充分.

¥

10.2 判别分析 325

§10.2 判别分析

判别分析是用于判断样品所属类型的一种统计分析方法. 判别分析的目

的是对已知归类的数据建立由数值指标构成的归类规则, 然后把这样的规则应

用到未知归类的样品去归类. 在生产、科研和日常生活中经常会遇到如何根据

观测到的数据资料对所研究的对象进行判别归类的问题. 例如一个病人肺部有

阴影, 医生需要判断他患的是肺结核、肺部良性肿瘤还是肺癌. 这里, 肺结核病

人, 肺部良性肿瘤病人和肺癌病人组成了三个总体, 病人可能就来源于这三个

总体之一, 判别分析的目的是通过病人的指标(阴影大小, 阴影部位, 边缘是否

光滑, 是否有痰, 是否有热度⋯)来判断他该属于哪个总体(即判别他生的是什

么病). 又如根据已有的气象资料(气温, 气压等)来判断明天是晴天还是阴天,

是有雨还是无雨, 所以判别分析是应用性很强的一种多元分析的方法.

判别分析的一般提法是:设有k个总体G1, G2, , Gk, 已知样品X来自

这k个总体的某一个, 但不知它究竟来自哪一个. 判别分析就是要根据对这k个

总体的已知知识(由过去的经验或抽样获得)和待判样品的一些指标的观测值,

去判别样品X应归属于哪一个总体.

如同经典的数理统计分析, 我们对于这k个总体G1, G2, , Gk的

了解程度在不同的场合不尽相同. 有时其分布函数完全已知, 设

为F1pxq, F2pxq, , Fkpxq; 有时只知道其形式, 其中某个或某些未知参数

未知; 有时我们对于它们全然不知. 前面二种场合下的判别分析称为参数判别

方法, 后面一种场合下的判别分析称为非参数判别方法.

通常我们先对预先得到的来自这k个总体的若干个样品(称为训练样品)进

行检验和归类, 来决定相应的判别归类问题是否有意义及误判可能性大小. 然

后再对给定的一个或几个新的样品, 进行判别归类, 即决定它(们)自哪个总体.

解决这个问题可以有多种途径, 下面我们分别讨论几种常用的方法, 如距离判

别、Fisher判别等.

10.2.1 距离判别

距离判别法(或称直观判别法)的基本思想是: 样品和哪个总体距离最近,

就判它属于哪个总体.

两个总体的距离判别

设有两个总体(或称两类)G1, G2, 从第一个总体中抽取n1个样品, 从第二

326 第十章 多元统计分析介绍

个总体中抽取n2个样品, 每个样品观测m个指标x1, , xm. 所得的数据集称

为训练样本

今取一个样品X, 实测指标值X px1, , xmq, 问该样品应该判为哪一

类?

首先计算样品X到G1和G2两类的距离, 分别记为DpX,G1q和DpX,G2q, 按

照距离判别归类, 即: 样品离哪个总体距离最近, 就判它属于哪个总体; 如果样

品到两个总体距离相等, 则暂时不归类. 判别准则可以写为:



X P G1,如果DpX,G1q   DpX,G2q

X P G2,如果DpX,G2q   DpX,G1q

X待判,如果DpX,G1q DpX,G2q

(10-2.1)

距离D的定义有很多种, 但是考虑到判别分析中常涉及多个变量的问题, 且变

量之间可能有相关性, 故多用马氏(Mahalanobis)距离:

DpX,Gq pX µq1Σ1pX µq (10-2.2)

其中µ pµ1, , µmq1为G的均值向量, Σ pσijqmm为G的协差阵.

在实际问题中, 通常Gi(i=1, 2)的均值向量µi和协差阵Σi均未知, 故需要由

来自它们的训练样品Xpiqt , t 1, 2, , ni, i 1, 2进行估计. 它们的极大似然

估计分别为

X

piq

1

ni

ni∑

t1

Xpiq, i 1, 2

Si

1

ni 1

ni∑

t1

pXpiq X

piq

qpXpiq X

piq

q

1, i 1, 2

特别地, 若假定两总体的协差阵相等, 则它们的共同的协差阵Σ Σ1 Σ2就

用它们的样本合并协差阵S进行估计:

S 1

n2

rpn1 1qS1   pn2 1qS2s, n n1   n2.

这时可由两马氏距离之差得到线性判别函数W pXq a1pX Xq, 其中

a S1pX

p1q

X

p2q

q, X pX

p1q

 X

p2q

q{2.

10.2 判别分析 327

相应的判别规则变成 

X P G1,如果W pXq ¡ 0

X P G2,如果W pXq   0

X待判,如果W pXq 0

(10-2.3)

多个总体的距离判别

类似与两个总体的情况, 多个总体的情况, 按照距离最近的原则对X进行

判别归类时, 首先计算样品到各类的马氏(Mahalanobis)距离, 然后进行比较,

把待判样品判归距离最小的那个总体. 计算马氏(Mahalanobis)距离时, 类似地

可以考虑Σ1 Σ2 Σk或者Σi不仅相等的两种情况.

这种根据距离远近来判别的方法, 原理简单, 直观易懂, 且是后面要介绍

的Fisher判别的基础.

10.2.2 Fisher判别法

Fisher判别的基本思想是投影. 将k组m维数据投影到某个方向, 使得投影

后组与组之间尽可能地分开. 而衡量组与组之间是否分开的方法借助于一元方

差分析的思想.

设从p维总体Gtpt 1, 2, , kq中分别抽取nt个样品Xptqj , j

1, 2, , nt, 令a pa1, a2, , apq1为p维空间中的任一向量, upXq a1X

表示X向以a为法线方向的投影. 通过这样的投影, 可以将原来的数据转化

为k组一维数据: a1Xptqj , j 1, 2, , nt, t 1, 2, , k. 按一元方差分析的思

想, 其组间平方和为

B0

k∑

t1

ntpa

1X

ptq

j Xq

2

a1r

k∑

t1

ntpX

ptq

j XqpX

ptq

j Xq

1

sa a1Ba.

合并的组内平方和为

E0 a

1

r

k∑

t1

ni∑

j1

pX

ptq

j XqpX

ptq

j Xq

1

sa a1Ea,

328 第十章 多元统计分析介绍

其中Xptqj 和X分别为Gt的样本均值和总样本均值. 若k类的均值有显著差异,

则比值∆paq a1Ba

a1Ea

. 应该充分大. 利用方差分析的思想, 问题化为求投影

方向a, 使得∆paq达到极大值, 但∆paq达到极大值的a并不唯一. 等价地, 我

们可以对a加一约束条件, 即选取a 使得a1Ea 1. 问题化为求a, 使∆paq

a1Ba在a1Ea 1条件下达极大.

利用Lagrange乘数法可以容易地导出线性判别函数upXq a1X, 其中a为

特征方程|E1B λI| 0的最大特征根所对应的满足a1Ea 1的特征向量.

若仅用一个线性判别函数不能很好地区分各个总体, 则可用第二大特征

根、第三大特征根 对应的特征向量构造线性判别函数进行判别, 线性判别函

数的个数不超过k-1个. 判别的效率用这些特征根来度量.

10.2.3 R通用程序

首先我们要用命令

>library(MASS)

加载MASS宏包, 再用函数lda( )就可完成Fisher判别分析, 其基本调用格式

如下:

lda(formula, data, … , subset, na.action)

lda( )的调用格式

说明: formula用法为groups x1 + x2 + , group表明总体来源,

x1, x2, 表示分类指标; subset指明训练样本. 具体说明见R帮助.

例 10.2.1 Fisher于1936年发表的鸢尾花(Iris)数据被广泛地作为判别

分析的例子. 数据是对3品种(species)鸢尾花: 刚毛鸢尾花(setosa)、变色鸢

尾花(versicolor)、弗吉尼亚鸢尾花(virginica)各抽取一个容量为50的样本,

测量其花萼长(Sepal.Lenth)、花萼宽(Sepal.Width)、花瓣长(Petal.Lenth)、

花瓣宽(Petal.Width), 单位为mm. 试调用R内置档案中的iris数据文件进行

判别分析.

解 R程序如下:

> data(iris)

> attach(iris)

10.2 判别分析 329

> names(iris)

> library(MASS)

> iris.lda <- lda(Species ~ Sepal.Length + Sepal.Width

+ Petal.Length + Petal.Width)

> iris.lda

> iris.pred=predict(iris.lda) $ class

> table(iris.pred, Species)

> detach(iris)

predict( )是R内置函数, 可以将lda( )的输出应用于原本iris的数据进行预

测, 从而进行对比.

R程序结果:

Call: lda(Species ~ Sepal.Length + Sepal.Width

+ Petal.Length +Petal.Width)

Prior probabilities of groups:

setosa versicolor virginica

0.3333333 0.3333333 0.3333333

Group means:

Sepal.Length Sepal.Width Petal.Length Petal.Width

setosa 5.006 3.428 1.462 0.246

versicolor 5.936 2.770 4.260 1.326

virginica 6.588 2.974 5.552 2.026

Coefficients of linear discriminants:

LD1 LD2

Sepal.Length 0.8293776 0.02410215

Sepal.Width 1.5344731 2.16452123

Petal.Length -2.2012117 -0.93192121

Petal.Width -2.8104603 2.83918785

Proportion of trace:

LD1 LD2

330 第十章 多元统计分析介绍

0.9912 0.0088

Species

iris.pred setosa versicolor virginica

setosa 50 0 0

versicolor 0 48 1

virginica 0 2 49

结果说明:

1) Group means: 包含了每组的平均向量

2) Coefficients of linear discriminants: 线性判别系数

3) Proportion of trace: 表明了第i判别式对区分各组的贡献大小

4) Species: 表明将原始数据代入线性判别函数后的判别结果, setosa组没

有错判, versicolor有两个错判, virginica只有一个错判.

¥

例 10.2.2 盐泉含钾性判别(见表10.3, 并生成数据文件disc.txt): 某地

区经勘探证明A盆地是一个钾盐矿区, B盆地是一个钠盐矿区, 其他盐盆地是

否含钾盐有待作出判断. 今从A, B两盆地各抽取5个盐泉样品; 从其他盆地抽

得8个盐泉样品, 18个盐泉的四个指标数值见下表. 试对后8个待判盐泉进行含

钾性判别.

解 R程序如下:

> w <- read.table(“D:/Rdata/disc.txt”)

> names(w)=c(“group”, “x1”, “x2”, “x3”, “x4”)

> library(MASS)

> z <- lda(group~x1+x2+x3+x4, data=w, prior=c(1, 1)/2)

> newdata<-rbind(

c(8.85, 3.38, 5.17, 26.10), c(28.60, 2.40, 1.20, 127.0),

c(20.70, 6.70, 7.60, 30.20), c(7.90, 2.40, 4.30, 33.20),

c(3.19, 3.20, 1.43, 9.90), c(12.40, 5.10, 4.43, 24.60),

c(16.80, 3.40, 2.31, 31.30), c(15.00, 2.70, 5.02, 64.00))

> dimnames(newdata)<-list(NULL, c(“x1”, “x2”, “x3”, “x4”))

> newdata<-data.frame(newdata)

10.2 判别分析 331

表 10.3 盐泉含钾数据

盐泉类别 序号 X1 X2 X3 X4 类别号

第一类: 1 13.85 2.79 7.80 49.60 A

含钾盐泉 2 22.31 4.67 12.31 47.80 A

(A盆地) 3 28.82 4.63 16.18 62.15 A

4 15.29 3.54 7.50 43.20 A

5 28.79 4.90 16.12 58.10 A

第二类: 6 2.18 1.06 1.22 20.60 B

不含钾 7 3.85 0.80 4.06 47.10 B

盐泉 8 11.40 0.00 3.50 0.00 B

(B盆地) 9 3.66 2.42 2.14 15.10 B

10 12.10 0.00 5.68 0.00 B

1 8.85 3.38 5.17 26.10

2 28.60 2.40 1.20 127.0

待 3 20.70 6.70 7.60 30.20

判 4 7.90 2.40 4.30 33.20

盐 5 3.19 3.20 1.43 9.90

泉 6 12.40 5.10 4.43 24.60

7 16.80 3.40 2.31 31.30

8 15.00 2.70 5.02 64.00

> predict(z, newdata=newdata)

R程序结果:

$class [1] B A A B B A A A Levels: A B

$posterior

A B

1 1.639701e-03 9.983603e-01

332 第十章 多元统计分析介绍

2 1.000000e+00 1.932625e-83

3 1.000000e+00 1.269619e-20

4 8.302424e-02 9.169758e-01

5 1.190922e-06 9.999988e-01

6 1.000000e+00 1.129611e-10

7 1.000000e+00 1.161894e-26

8 1.000000e+00 7.135903e-22

$x

LD1

1 1.0536512

2 -31.2985593

3 -7.5286829

4 0.3947245

5 2.2416596

6 -3.7639282

7 -9.8136273

8 -8.0017623

结果说明:

1) 由$class可以看出8个待判样品, 待判样品1, 4, 5属于含钾盐泉(A盆地),

其余属于不含钾盐泉(B盆地);

2) $x给出了线性判别函数的数值.

¥

§10.3 聚类分析

聚类分析(cluster analysis)是研究“物以类聚”的一种方法, 在国内曾有人

称它为群分析、点群分析、簇群分析等. 人类认识世界往往首先将被认识的对

象进行分类, 因此分类学便成了人类认识世界的基础科学. 在古老的分类学中,

人们主要靠经验和专业知识实现分类. 随着人类对自然的认识不断加深, 分类

越来越细, 要求越来越高, 以致有时光凭借经验和专业知识还不能进行确切的

分类, 于是数学这个有用的工具逐渐被引进到分类学中, 形成了数值分类学.后

10.3 聚类分析 333

来随着多元分析的引进, 从数值分类学中逐渐地分离出了聚类分析这个分支.

和多元分析的其他方法相比,聚类分析的方法是比较粗糙的, 理论尚不完善, 但

由于它的应用取得很大的成功, 和回归分析、判别分析一起被称为多元分析的

三大方法.

值得一提的是聚类分析和判别分析都是研究分类问题, 但两者有本质的区

别. 聚类分析一般是寻求客观分类的方法, 事先对总体到底有几种类型从无知

晓, 而判别分析则是在总体类型划分已知, 在各总体分布或来自各个总体训练

样本的基础上, 对当前的新样品用统计分析的方法判定它们属于哪个总体.

10.3.1 基本思想

系统聚类法是将n个样品分成若干类的方法, 其基本思想是: 先将n个样品

各自看成一类, 然后规定类与类之间的距离(类之间的距离有多种定义方法),

选择距离最小的一对合并成新的一类, 计算新类与其他类的距离, 再将距离最

近的两类合并, 这样每次减少一类, 直至所有的样品都成为一类为止.

对于距离常用的有以下几种:

(1) 绝对值距离(R语言中用Manhattan表示), 用公式表示为

dijp1q

p∑

k1

|xik xjk| (10-3.1)

(2) 欧氏距离(Euclidean), 用公式表示为

dijp2q

[

p∑

k1

pxik xjkq

2

] 1

2

(10-3.2)

(3) 明考斯基距离(Minkowski), 用公式表示为

dijpqq

[

p∑

k1

pxik xjkq

q

] 1

q

, pp ¡ 0q (10-3.3)

(4) 切贝雪夫距离(R语言中用maximum表示), 用公式表示为

dijp8q max

1¤k¤p

|xik xjk| (10-3.4)

334 第十章 多元统计分析介绍

(5) 马氏距离, 用公式表示为

dijpMq pXpiq Xpjqq

1S1pX

piq Xpjqq (10-3.5)

式中S是样本协方差矩阵

(6) 兰氏距离(R语言中用canberra表示), 用公式表示为

dijpLq

1

p

p∑

k1

|xik xjk|

xik   xjk

, pxij ¡ 0q (10-3.6)

在R软件中, dist( )函数给出了各种距离的计算结果, 其调用格式为:

dist(x, method = “euclidean”, diag = FALSE, upper = FALSE, p = 2)

dist( )的调用格式

说明: method表示计算距离的方法, 默认值为euclidean(欧氏)距离,

diag是逻辑变量: 当diag=TRUE时, 输出距离矩阵对角线上的距离. upper也是

逻辑变量: 当upper=TRUE时, 输出距离矩阵上三角部分(默认仅输出下三角矩

阵)

类与类之间的距离有许多定义方法, 主要有下面七种:

(1) 类平均法(average Linkage)

(2) 重心法(centroid method)

(3) 中间距离法(median method)

(4) 最长距离法(complete method)

(5) 最短距离法(single method)

(6) 离差平方和法(ward method)

(7) Mcquitty相似法(Mcquitty method)

各类方法计算方式不同, 有学者推荐采用离差平方和法或最短距离法.

10.3.2 R通用程序

利用R语言的hclust( )函数就可完成系统聚类分析, 其基本调用格式如

10.3 聚类分析 335

下:

hclust(d, method = “complete”, members=NULL)

hclust( )的调用格式

说明: d是由“dist”构成的距离结构, method是系统聚类的方法(默认地是

最长距离法)具体说明见R帮助.

例 10.3.1 设有5个产品, 每个产品测得一项质量指标x, 其值如下: 1, 2,

4.5, 6, 8, 试用最短距离法、最长距离法、中间距离法、离差平方和法分别对5个

产品按质量指标进行分类

解 R程序如下:

> x<-c(1, 2, 4.5, 6, 8)

> dim(x)<-c(5, 1)

> d<-dist(x)

> hc1<-hclust(d, “single”)

> hc2<-hclust(d, “complete”)

> hc3<-hclust(d, “median”)

> hc4<-hclust(d, “ward”)

> opar<-par(mfrow=c(2, 2))

> plot(hc1, hang=-1);plot(hc2, hang=-1)

> plot(hc3, hang=-1);plot(hc4, hang=-1)

> par(opar)

R程序结果见图10.1. 可见, 四种分类方法结果一致, 都将第1, 2个分在一

类, 其余在第二类.

¥

例 10.3.2 对例10.2.1中的鸢尾花(Iris)数据进行聚类分析.

解 判别分析中, 我们已知鸢尾花的品种并应用了这些数据. 现在假设我

们只知道数据内有三种品种的鸢尾花而不知道每朵花的真正分类, 只能凭借花

萼及花瓣的长度和宽度去分成三类, 这就是聚类分析.

R程序如下:

336 第十章 多元统计分析介绍

1 2 5 3 4

1.

0

1.

5

2.

0

2.

5

Cluster Dendrogram

hclust (*, “single”)

d

H

ei

gh

t

1 2 5 3 4

1

2

3

4

5

6

7

Cluster Dendrogram

hclust (*, “complete”)

d

H

ei

gh

t

1 2 5 3 4

1.

0

2.

0

3.

0

4.

0

Cluster Dendrogram

hclust (*, “median”)

d

H

ei

gh

t

1 2 5 3 4

0

2

4

6

8

Cluster Dendrogram

hclust (*, “ward”)

d

H

ei

gh

t

图 10.1 聚类图

> data(iris); attach(iris)

> iris.hc<-hclust(dist(iris[,1:4]))

> # plot(iris.hc1, hang = -1)

> plclust(iris.hc1,labels = FALSE, hang=-1)

> re<-rect.hclust(iris.hc1,k=3)

> iris.id <- cutree(iris.hc1,3)

> table(iris.id,Species)

程序中我们调用R内置数据iris, 用函数hclust( )进行聚类分析, 输出

结果保存在iris.hc中, 用函数rect.hclust( ) 按给定的类的个数(或阈值)进

行聚类, 并用函数plclust( )代替plot( )绘制聚类的谱系图(两者使用方法

基本相同), 各类用边框界定, 选项labels=FALSE只是为了省去数据的标签. 函

数cuttree( )将iris.hc输出编制成若干组.

10.3 聚类分析 337

R程序的结果见图10.2和相应的输出.

0

2

4

6

hclust (*, “complete”)

dist(iris[, 1:4])

H

ei

gh

t

图 10.2 聚类图

Species

iris.id setosa versicolor virginica

1 50 0 0

2 0 23 49

3 0 27 1

338 第十章 多元统计分析介绍

说明: 图10.2为典型的聚类树枝型分类图(Cluster Dendrogram), 它是

将两相近(距离最短)的数据向量连接在一起, 然后进一步组合, 直至所有

数据都连接在一起; 函数cuttree( )将数据iris分类结果iris.hc编为三组,

分别以1, 2, 3表示, 保存在iris.id中. 将iris.id与iris中Species作比较

发现, 1应该是setosa类, 2应该是virginica类(因为virginica的个数明显多

于versicolor), 3是versicolor. 从聚类的结果来看, 明显与原始数据有着比

较大的差异. ¥

§10.4 典型相关分析

10.4.1 基本思想

在一元统计分析中, 研究两个随机变量之间的线性相关关系, 可用相关系

数(称为简单相关系数); 研究一个随机变量与多个随机变量之间的线性相关关

系, 可用复相关系数(称为全相关系数). 1936年Hotelling首先将它推广到研究

多个随机变量与多个随机变量之间的相关关系的讨论中, 提出了典型相关分

析.

实际问题中, 两组变量之间具有相关关系的问题很多, 例如几种主要产品

如猪肉、牛肉、鸡蛋的价格(作为第一组变量) 和相应这些产品的销售量(作为

第二组变量)有相关关系; 投资性变量(如劳动者人数、货物周转量、生产建设

投资等)与国民收入变量(如工农业国民收入、运输业国民收入、建筑业国民收

入等)具有相关关系; 患某种疾病的病人的各种症状程度(第一组变量)和用物理

化学方法检验的结果(第二组变量)具有相关关系; 运动员的体力测试指标(如

反复横向跳、纵跳、背力、握力等)与运动能力测试指标(如耐力跑、跳远、投球

等)之间具有相关关系等等.

典型相关分析就是研究两组变量之间相关关系的一种多元统计方法, 设两

组变量用X1, X2, , Xp1及Xp1 1, Xp1 2, , Xp1 p2 表示, 要研究两组变量

的相关关系, 一种方法是分别研究Xi 与Xj pi 1, , p1 j p1   1, , p1  

p2) 之间的相关关系, 然后列出相关系数表进行分析, 当两组变量较多时, 这

样做法不仅烦琐, 也不易抓住问题的实际; 另一种方法采用类似主成分分

析的做法, 在每一组变量中都选择若干个有代表性的综合指标(变量的线性

组合), 通过研究两组的综合指标之间的关系来反映两组变量之间的相关关

系. 比如猪肉价格和牛肉价格用X1, X2表示, 它们的销售量用X3, X4表示, 研

10.4 典型相关分析 339

究它们之间的相关关系, 从经济学观点就是希望构造一个X1, X2 的线性函

数y a11X1   a12X2 称为价格指数及X3, X4的线性函数y a21X3   a22X4

称为销售指数, 要求它们之间具有最大相关性, 这就是一个典型相关分析问题.

典型相关分析基本思想:首先在每组变量中找出变量的线性组合, 使其具

有最大相关性, 然后再在每组变量中找出第二对线性组合, 使其分别与第一对

线性组合不相关, 而第二对本身具有最大的相关性, 如此继续下去, 直到两组

变量之间的相关性被提取完毕为止. 有了这样线性组合的最大相关, 则讨论两

组变量之间的相关, 就转化为只研究这些线性组合的最大相关, 从而减少研究

变量的个数.

典型相关分析是对两组变量(指标)的每一组作为整体考虑的. 因此, 它能

够广泛应用于变量群之间的相关分析研究.

设有两组随机变量Xp1q pX1, X2, , Xp1q1, Xp2q pXp1 1, Xp1 2,

, Xp1 p2q

1, 记p p1   p2不妨设p1 ¤ p2 , 假定X

(

Xp1q

Xp2q

)

的协方差

阵Σ ¡ 0, 均值向量µ 0(否则只要以X µ 代替X即可), 相应的将Σ 剖分为

Σ

(

Σ11 Σ12

Σ21 Σ22

)

,

其中Σ11 是第一组变量的协方差阵, Σ12 是第一组变量与第二组变量的协方差

阵, Σ22 是第二组变量的协方差阵.要研究Xp1q, Xp2q 两组变量之间的相关关系,

前面已介绍作两组变量的线性组合, 即

U l1X1   l2X2     lp1Xp1 l

1Xp1q,

V m1Xp1 1  m2Xp1 2    mp2Xp1 p2 m

1Xp2q,

其中l1 pl1, l2, lp1q,m1 pm1, l2, lp2q 为任意非零常数向量, 易见:

VarpUq Varpl1Xp1qq l1Σ11l,

VarpV q Varpm1Xp2qq m1Σ22m,

CovpU, V q l1CovpX1, X2qm l

1Σ12m,

ρ

UV

l1Σ12m√

l1Σ11l



m1Σ22m

.

340 第十章 多元统计分析介绍

我们寻求l 与m 使得ρ

UV

达到最大, 但由于随机变量乘以常数时不改变他们的

相关系数, 为防止不必要的结果重复出现, 最好的限制是令VarpUq l1Σ11l

1, VarpV q m1Σ22m 1. 于是我们的问题就成为在约束条件: VarpUq 1,

VarpV q 1下, 寻求l 与m 使得ρ

UV

达到最大.

所以典型相关分析研究的是如何选取典型变量的最优组合. 选取的

原则是: 在所有的线性组合U, V 中, 选取典型相关系数最大的U, V, 即选

取lp1q1,mp1q1使得U1 lp1q1Xp1q, V1 mp1q1Xp2q之间的相关系数达到最大(在所

有U, V 中), 然后选取lp2q1,mp2q1使得U2 lp2q1Xp1q, V2 mp2q1Xp2q之间的相关

系数在与U1, V1不相关的组合U, V 中达到最大(第二高的相关). 如此继续下去,

直到选取出所有分别与U1, U2, , Uk1 和V1, V2, , Vk1都不相关的线性组

合Uk, Vk 为止, 此时k为两组原始变量中个数较少的那个数. 典型变量U1 和V1,

U2 和V2, , Uk 和Vk 是根据它们的相关系数由大到小逐对提取的, 直到两组

变量之间的相关性被分解完毕为止.

10.4.2 R通用程序

利用R语言的cancor( )函数就可完成典型相关分析. 其基本调用格式如

下:

cancor(x, y, xcenter = TRUE, ycenter = TRUE)

cancor( )的调用格式

说明: x, y是两组变量的数据矩阵, xcenter和ycenter是逻辑变量, TRUE表示

将数据中心化(默认选项), 具体说明见R帮助.

例 10.4.1 研究投资性变量与反映国民经济变量之间的相关关系.

投资性变量选6个, 分别为X1, X2, . . . , X6, 反映国民经济的变量选5个, 分别

为Y1, Y2, . . . , Y5. 抽取从1975-2002年共计28年的统计数据, 如表10.4, 采用典

型相关分析的方法来分析投资性变量与反映国民经济的变量的相关性.

解 R程序如下:

> invest=read.table(“D:/Rdata/invest.txt”)

> names(invest)=c(“x1”, “x2”, “x3”, “x4”, “x5”, “x6”,

“y1”, “y2”, “y3”, “y4”, “y5”)

> ca<-cancor(invest[, 1:6], invest[, 7:11])

R程序结果:

10.4 典型相关分析 341

表 10.4 1975-2002年的投资性变量与反映国民经济的变量

序列 X1 X2 X3 X4 X5 X6 Y1 Y2 Y3 Y4 Y5

1 173.28 93.62 60.10 86.72 38.97 27.51 75.3 117.4 74.6 61.8 4508

2 172.09 92.83 60.38 87.39 38.62 27.82 76.7 120.1 77.1 66.2 4469

3 171.46 92.73 59.74 85.59 38.83 27.46 75.8 121.8 75.2 65.4 4398

4 170.08 92.25 58.04 85.92 38.33 27.29 76.1 115.1 73.8 61.3 4068

5 170.61 92.36 59.67 87.46 38.38 27.14 72.9 119.4 77.5 67.1 4339

6 171.69 92.85 59.44 87.45 38.19 27.10 72.7 116.2 74.6 59.3 4393

7 171.46 92.93 58.70 87.06 38.58 27.36 76.5 117.9 75.0 68.3 4389

8 171.60 93.28 59.75 88.03 38.68 27.22 75.2 115.1 74.1 63.2 4306

9 171.60 92.26 60.50 87.63 38.79 6.63 74.7 117.4 78.3 68.3 4395

10 171.16 92.62 58.72 87.11 38.19 27.18 73.2 113.2 72.5 51.0 4462

11 170.04 92.17 56.95 88.08 38.24 27.65 77.8 116.9 76.9 65.6 4181

12 170.27 91.94 56.00 84.52 37.16 26.81 76.4 113.6 74.3 65.6 4232

13 170.61 92.50 57.34 85.61 38.52 27.36 76.4 116.7 74.3 61.2 4305

14 171.39 92.44 58.92 85.37 38.83 26.47 74.9 113.1 74.0 61.2 4276

15 171.83 92.79 56.85 85.35 38.58 27.03 78.7 112.4 72.9 61.4 4067

16 171.36 92.53 58.39 87.09 38.23 27.04 73.9 118.4 73.0 62.3 4421

17 171.24 92.61 57.69 83.98 39.04 27.07 75.7 116.3 74.2 51.8 4284

18 170.49 92.03 57.56 87.18 38.54 27.57 72.5 114.8 71.0 55.1 4289

19 169.43 91.67 57.22 83.87 38.41 26.60 76.7 117.5 72.7 51.6 4097

20 168.57 91.40 55.96 83.02 38.74 26.97 77.0 117.9 71.6 52.4 4063

21 170.43 92.38 57.87 84.87 38.78 27.37 76.0 116.8 72.3 58.0 4334

22 169.88 91.89 56.87 86.34 38.37 27.19 74.2 115.4 73.1 60.4 4301

23 167.94 90.91 55.97 86.77 38.17 27.16 76.2 110.9 68.5 56.8 4141

24 168.82 91.30 56.07 85.87 37.61 26.67 77.2 113.8 71.0 57.5 3905

25 168.02 91.26 55.28 85.63 39.66 28.07 74.5 117.2 74.0 63.8 3943

26 167.87 90.96 55.79 84.92 38.20 26.53 74.3 112.3 69.3 50.2 4195

27 168.15 91.50 54.56 84.81 38.44 27.38 77.5 117.4 75.3 63.6 4039

28 168.99 91.52 55.11 86.23 38.30 27.14 77.7 113.3 72.1 52.8 4238

$cor

342 第十章 多元统计分析介绍

[1] 0.8743062 0.7373122 0.5104993 0.3541742 0.1510162

$xcoef

[,1] [,2] [,3] [,4] [,5] [,6]

x1 0.07907994 -0.148819922 0.10698911 -0.023654480 0.13247040 0.510516673

x2 -0.06231142 -0.005330072 0.16195009 0.002344311 -0.47379144 -0.965367730

x3 0.05901271 0.181098314 -0.08095237 0.045803287 0.12588000 -0.078796849

x4 0.02720459 -0.142360745 -0.11291982 -0.015211819 -0.09859752 0.003270612

x5 -0.05046629 -0.026272162 -0.10552122 0.250540745 -0.43012143 0.205369791

x6 0.09818550 0.408743145 0.07539201 -0.489439843 0.25175511 0.209683441

$ycoef

[,1] [,2] [,3] [,4] [,5]

y1 -0.0097969228 -0.0157649468 0.1263997157 -4.494590e-02 0.0042832480

y2 -0.0064201995 0.0954303161 0.0052805529 -1.885232e-02 0.0249264752

y3 0.0179056849 -0.0279923087 0.0194826255 9.233173e-02 -0.1181715021

y4 0.0101074931 -0.0082248457 -0.0202537565 -4.602875e-02 0.0097856402

y5 0.0009083347 -0.0003598887 0.0007780556 -8.745514e-06 0.0008253158

$xcenter

x1 x2 x3 x4 x5 x6

170.37000 92.19750 57.69429 86.06679 38.47786 27.17107

$ycenter

y1 y2 y3 y4 y5

75.59643 116.01071 73.68571 60.11429 4251.35714

结果说明:

1) $cor给出了典型相关系数; $xcoef是对应于数据X的系数, 即为关于数

据X的典型载荷; $ycoef为关于数据Y的典型载荷; $xcenter与$ycenter是

数据X与Y的中心, 即样本均值;

2) 对于该问题, 第一对典型变量的表达式为

U1 0.079X1 0.062X2   0.059X3   0.027X4 0.050X5   0.098X6

V1 0.010Y1 0.006Y2   0.0179Y3   0.010Y4   0.001Y5

第一对典型变量的相关系数为0.8743062.

可以进行典型相关系数的显著性检验, 经检验也只有第一组典型变量.

10.5 对应分析 343

¥

§10.5 对应分析

对应分析(Correspondence Analysis)又称为相应分析, 是1970年由法国统

计学家J.P.Beozecri提出来的. 对应分析是因子分析的进一步推广, 该方法已

成为多元统计分析中同时对样品和变量进行分析, 从而研究多变量内部关系

的重要方法, 它是在R型和Q型因子分析基础上发展起来的一种多元统计方法.

而且我们研究样本之间或指标之间的关系, 归根结底是为了研究样本与指标之

间的关系, 而因子分析没有办法做到这一点, 对应分析则是为解决这个问题而

出现的统计分析方法.

10.5.1 基本思想

由于R型因子分析和Q型因子分析都是反应一个整体的不同侧面, 因而它

们之间一定存在着内在的联系. 对应分析就是通过对应变换后的过渡矩阵Z将

两者有机地结合起来.

假设有n个样本, 每个样本有p个指标, 原始数据矩阵用Xnp来表示. 研

究指标或样本之间的关系是分别通过研究它们的协方差矩阵App或相似矩

阵Bnn进行的, 实际上用到的只是这些矩阵的特征根和特征向量, 因此, 如能

由矩阵App的特征根和特征向量直接得出矩阵Bnn的特征根和特征向量, 而

不必计算相似矩阵Bnn, 则就解决了当样本数很大时做Q型因子分析计算上的

困难.

对应分析就是利用降维的思想, 通过一个过渡矩阵Z将上述二者有机地

结合起来, 具体地说, 首先给出变量点的协差阵A Z 1Z 和样品点的协差

阵B ZZ 1 . 由于A Z 1Z 和B ZZ 1 有相同的非零特征根记为λ1 ¥ λ2 ¥

λm, 0 ¤ m ¤ min pn, pq. 如果A的特征根λi 对应的特征向量为Ui, 则B的特

征根λi 对应的特征向量就是ZUi Vi, 根据这个结论(证明省略) 就可以很方

便的借助R型因子分析而得到Q型因子分析的结果. 因此求出A的特征根和特

征向量后就很容易地写出变量协差阵对应的因子载荷阵, 记为F , 则

344 第十章 多元统计分析介绍

F



u11



λ1 u12



λ1 u1m



λm

u21



λ1 u22



λ1 u2m



λm

. . . . . . . . . . . . . . . .

up1



λ1 up2



λ1 upm



λm



这样一来样品点协差阵B对应的因子载荷阵记为G, 则

G



v11



λ1 v12



λ1 v1m



λm

v21



λ1 v22



λ1 v2m



λm

. . . . . . . . . . . . . . . .

vn1



λ1 vn2



λ1 vnm



λm



由于A和B具有相同的非零特征根, 而这些特征根又正是各个公共因子

的方差, 因此可以用相同的因子轴同时表示变量点和样品点, 即把变量点和

样品点同时反映在具有相同坐标轴的因子平面上, 以便对变量点和样品点一

起考虑进行分类. 那么矩阵App与矩阵Bnn是否存在必然的联系呢?这种

联系的确是存在的, 因为App和Bn n都来自于同样的原始数据Xnp, Xnp

中的每一个元素xij都具有双重含义, 同时代表指标和样本. 实际上指标与

样本是不可分割的, 指标的特征如均值、协方差等是通过指标在不同样本上

的取值来表现的, 而样本的特征如样本属于哪一类型, 正是通过其在不同指

标上的取值来表现的. 但是, 要由矩阵App的特征根和特征向量直接求出矩

阵Bnn的特征根和特征向量还是有困难的, 因为App与Bnn的阶数不一样,

一般来说, 其非零特征根也不相等. 如果能将原始数据矩阵X进行某种变形后

成为Z, 使得A Z 1Z B ZZ 1 , 由线性代数可知, Z 1Z 和ZZ 1 有相同的非零

特征根, 记为λ1 ¥ λ2 ¥ λm, 0 ¤ m ¤ min pn, pq, 设u1, uγ为对应于特征

根λ1, , λγ 的A的特征向量, 则有

Auj Z

1Zuj λjuj .

将上式两边左乘Z, 得

ZZ 1Zuj Zλjuj λjZuj



BpZujq λjpZujq

10.5 对应分析 345

上式表明, Zuj为对应于特征根λj的B的特征向量. 换句话说, 当uj 为对应于λj

的A的特征向量时, 则Zuj就是对应于λj 的B的特征向量. 这样就建立起了因

子分析中R型与Q型的关系, 而且使计算变得方便多了.

综上所述, 若将原始数据矩阵变换X为Z时, 则指标和样本的协方差阵可

分别表示为A Z 1Z 和B ZZ 1, A和B具有相同的非零特征根, 相应的特

征向量具有很密切的关系, 这样就可很方便地从R型因子分析出发而直接得

到Q型因子分析的结果, 从而克服了大样本时做Q型因子分析计算上的困难. 又

由于A和B具有相同的非零特征根, 而这些特征根正是各个因子所提供的方差,

那么在p维指标空间Rp 中和n维样本空间Rn 中各个主因子在总方差中所占的

比重就完全相同, 即指标空间中的第一主因子也是样本空间中的第一主因子,

依次类推. 这样就可用相同的因子轴去同时表示指标和样本, 将指标和样本同

时反映在有相同坐标轴的因子轴的因子平面上. 因此, 对应分析的关键在于如

何将X变换成Z.

1970年, 法国统计学家J.P.Beoecri提出了上述求Z的方法.基本步骤为:

X标准化处理ÝÑ求指标的均值( 可证明亦是样本的均值)ÝÑ求协方差矩

阵AÝÑ将A变形为A Z 1Z ÝÑ A

10.5.2 R通用程序

首先我们要用指令library(MASS)加载MASS宏包, 再用corresp( )函数就

可完成简单对应分析, 其基本调用格式如下:

corresp(x, nf = 1, …)

corresp( )的调用格式

说明: x是数据矩阵, nf = 1表示计算因子个数, 具体说明见R帮助.

例 10.5.1 (妇女就业问题)利用90年代初期对某市若干个郊区已婚妇女

的调查资料, 主要调查她们对“应该男人在外工作, 妇女在家操持家务”的态

度, 依据文化程度和就业观点两个变量进行分类汇总, 数据如表10.5.

解 R程序如下:

> x.df=data.frame(HighlyFor=c(2, 6, 41, 72, 24),

For =c(17, 65, 220, 224, 61),

Against=c(17, 79, 327, 503, 300),

HighlyAgainst=c(5, 6, 48, 47, 41))

346 第十章 多元统计分析介绍

表 10.5 妇女就业问题调查

就业观点

文化程度 非常同意 同意 不同意 非常不同意

小学以下 2 17 17 5

小学 6 65 79 6

初中 41 220 327 48

高中 72 224 503 47

大学 24 61 300 41

> rownames(x.df)<-c(“BelowPrimary”, “Primary”,

“Secondary”, “HighSchool”,”College”)

> library(MASS)

> biplot(corresp(x.df, nf=2))

说明: biplot作出像因子分析的载荷图那样的, 这样可以直观地来展示两个变

量各个水平之间的关系.

R程序结果如图10.3.

结果说明:

1) 对于该图, 主要看横坐标的两种点(就业观点与文化程度)的距离, 纵坐标

的距离对于分析贡献意义不大.

2) 对于该图可以看出对该观点持赞同态度的是小学以下, 小学, 初中, 而大

学文化程度的妇女主要持不同意或者非常不同意的观点, 高中文化程度

的持有非常不赞同或者非常同意两种观点.

¥

10.5 对应分析 347

−0.3 −0.2 −0.1 0.0 0.1 0.2 0.3



0.

3



0.

2



0.

1

0.

0

0.

1

0.

2

0.

3

BelowPrimary

Primary

Secondary

HighSchool

College

−0.3 −0.2 −0.1 0.0 0.1 0.2 0.3



0.

3



0.

2



0.

1

0.

0

0.

1

0.

2

0.

3

HighlyFor

For

Against

HighlyAgainst

图 10.3 .

348 第十章 多元统计分析介绍

第十章习题

10.1 服装定型的分类问题: 为解决服装定型分类问题, 对128个成年人

的身材进行了测量, 每人各测得16项指标:身高(X1), 坐高(X2), 胸围(X3), 头

高(X4), 裤长(X5), 下档(X6), 手长(X7), 领围(X8), 前胸(X9), 后背(X10), 肩

厚(X11), 肩宽(X12), 袖长(X13), 肋围(X14), 腰围(X15), 腿肚(X16). 16项指标

的相关阵见第363页表10.6, 试从相关阵出发进行主成分分析.

10.2 第十章习题犯罪问题的主成分分析: 本例的输入资料文件是美国50个

州(state) 在七种犯罪项目上的发生频率. 这七种罪分别是: 谋杀(MURDER),

强暴(RAPE),抢劫(ROBBERY),骚扰(ASSAULT),夜间偷窃(简称夜盗, BUR-

GLARY), 盗窃(LARCENY)及偷车(AUTO), 数据如表10.7. 试图用主成分分

析降维处理.

表 10.7: 各州犯罪数据

州名 谋杀 强暴 抢劫 骚扰 夜盗 盗窃 偷车

Alabama 14.2 25.2 96.8 278.3 1135.5 1881.9 280.7

Alaska 10.8 51.6 96.8 284.0 1331.7 3369.8 753.3

Arizona 9.5 34.2 138.2 312.3 2346.1 4467.4 439.5

Arkansas 8.8 27.6 83.2 203.4 972.6 1862.1 183.4

California 11.5 49.4 287.0 358.0 2139.4 3499.8 663.5

Colorado 6.3 42.0 170.7 292.9 1935.2 3903.2 477.1

Connecticut 4.2 16.8 129.5 131.8 1346.0 2620.7 593.2

Delaware 6.0 24.9 157.0 194.2 1682.6 3678.4 467.0

Florida 10.2 39.6 187.9 449.1 1859.9 3840.5 351.4

Georgia 11.7 31.1 140.5 256.5 1351.1 2170.2 297.9

Hawaii 7.2 25.5 128.0 64.1 1911.5 3920.4 489.4

Idaho 5.5 19.4 39.6 172.5 1050.8 2599.6 237.6

续下页

10.5 对应分析 349

各州犯罪数据(续表)

州名 谋杀 强暴 抢劫 骚扰 夜盗 盗窃 偷车

Illinois 9.9 21.8 211.3 209.0 1085.0 2828.5 528.6

Indiana 7.4 26.5 123.2 153.5 1086.2 2498.7 377.4

Iowa 2.3 10.6 41.2 89.8 812.5 2685.1 219.9

Kansas 6.6 22.0 100.7 180.5 1270.4 2739.3 244.3

Kentucky 10.1 19.1 81.1 123.3 872.2 1662.1 245.4

Louisiana 15.5 30.9 142.9 335.5 1165.5 2469.9 337.7

Maine 2.4 13.5 38.7 170.0 1253.1 2350.7 246.9

Maryland 8.0 34.8 292.1 358.9 1400.0 3177.7 428.5

Masssachusetts 3.1 20.8 169.1 231.6 1532.2 2311.3 1140.1

Michigen 9.3 38.9 261.9 274.6 1522.7 3159.0 545.5

Minnesota 2.7 19.5 85.9 85.8 1134.7 2559.3 343.1

Mississippi 14.3 19.6 65.7 189.1 915.6 1239.9 144.4

Missouri 9.6 28.3 189.0 233.5 1318.3 2424.2 378.4

Montana 5.4 16.7 39.2 156.8 804.9 2773.2 309.2

Nebraska 3.9 18.1 64.7 112.7 760.0 2316.1 249.1

Nevada 15.8 49.1 323.1 355.0 2453.1 4212.6 559.2

New Hampshire 3.2 10.7 23.2 76.0 1041.7 2343.9 293.4

New Jersey 5.6 21.0 180.4 185.1 1435.8 2774.5 511.5

New Mexico 8.8 39.1 109.6 343.4 1418.7 3008.6 259.5

New York 10.7 29.4 472.6 319.1 1728.0 2782.0 745.8

续下页

350 第十章 多元统计分析介绍

各州犯罪数据(续表)

州名 谋杀 强暴 抢劫 骚扰 夜盗 盗窃 偷车

North Carolina 10.6 17.0 61.3 318.3 1154.1 2037.8 192.1

North Dakota 0.9 9.0 13.3 43.8 446.1 1843.0 144.7

Ohio 7.8 27.3 190.5 181.1 1216.0 2696.8 400.4

Oklahoma 8.6 29.2 73.8 205.0 1288.2 2228.1 326.8

Oregon 4.9 39.9 124.1 286.9 1636.4 3506.1 388.9

Pennsylvania 5.6 19.0 130.3 128.0 877.5 1624.1 333.2

Rhode Island 3.6 10.5 86.5 201.0 1489.5 2844.1 791.4

South Carolina 11.9 33.0 105.9 485.3 1613.6 2342.4 245.1

South Dakota 2.0 13.5 17.9 155.7 570.5 1704.4 147.5

Tennessee 10.1 29.7 145.8 203.9 1259.7 1776.5 314.0

Texas 13.3 33.8 152.4 208.2 1603.1 2988.7 397.6

Utah 3.5 20.3 68.8 147.3 1171.6 3004.6 334.5

Vermont 1.4 15.9 30.8 101.2 1348.2 2201.0 265.2

Virginia 9.0 23.3 92.1 165.7 986.2 2521.2 226.7

Washington 4.3 39.6 106.2 224.8 1605.6 3386.9 360.3

West Virginia 6.0 13.2 42.2 90.9 597.4 1341.7 163.3

Wisconsin 2.8 12.9 52.2 63.7 846.9 2614.2 220.7

Wyoming 5.4 21.9 39.7 173.9 811.6 2772.2 282.0

10.3 考试成绩分析: 某年级44名学生的期末考试共有5门课程, 有的用闭卷,

有的用开卷, 数据如表10.8. 试用因子分析方法分析这组数据.

10.5 对应分析 351

表 10.8: 考试成绩分析数据

力学(闭) 物理(闭) 代数(开) 分析(开) 统计(开)

X1 X2 X3 X4 X5

77 82 67 67 81

75 73 71 66 81

63 63 65 70 63

51 67 65 65 68

62 60 58 62 70

52 64 60 63 54

50 50 64 55 63

31 55 60 57 73

44 69 53 53 53

62 46 61 57 45

44 61 52 62 46

12 58 61 63 67

54 49 56 47 53

44 56 55 61 36

46 52 65 50 35

30 69 50 52 45

40 27 54 61 61

36 59 51 45 51

46 56 57 49 32

42 60 54 49 33

23 55 59 53 44

41 63 49 46 34

续下页

352 第十章 多元统计分析介绍

考试成绩分析数据(续表)

力学(闭) 物理(闭) 代数(开) 分析(开) 统计(开)

X1 X2 X3 X4 X5

63 78 80 70 81

55 72 63 70 68

53 61 72 64 73

59 70 68 62 56

64 72 60 62 45

55 67 59 62 44

65 63 58 56 37

60 64 56 54 40

42 69 61 55 45

31 49 62 63 62

49 41 61 49 64

49 53 49 62 47

54 53 46 59 44

18 44 50 57 81

32 45 49 57 64

46 49 53 59 37

31 42 48 54 68

56 40 56 54 35

45 42 55 56 40

40 63 53 54 25

48 48 49 51 37

46 52 53 41 40

10.4 医药行业数据分析: 数据集(见表10.9)中的数据是全国医药行业20个

10.5 对应分析 353

企业1980-1982年三年平均效益的几个数据, 总产值/消耗(X1), 净产值/工

资(X2), 盈利/资金占用(X3), 销售收入/成本(X4), 试用因子分析方法找出

这4个变量的公因子, 并进行合理的解释.

表 10.9: 医药行业效数据

总产值/消耗 净产值/工资 盈利/资金占用 销售收入/成本

X1 X2 X3 X4

1.611 10.59 0.69 1.67

1.429 9.44 0.61 1.50

1.447 5.97 0.24 1.25

1.572 10.72 0.75 1.71

1.483 10.99 0.75 1.44

1.371 6.46 0.41 1.31

1.665 10.51 0.53 1.52

1.403 6.11 0.17 1.32

2.620 21.51 1.40 2.59

2.033 24.15 1.80 1.89

2.015 26.86 1.93 2.02

1.501 9.74 0.87 1.48

1.578 14.52 1.12 1.47

1.735 14.64 1.21 1.91

1.453 12.88 0.87 1.52

1.765 17.94 0.89 1.40

1.532 29.42 2.52 1.80

1.488 9.23 0.81 1.45

2.586 16.07 0.82 1.83

1.992 21.63 1.01 1.89

354 第十章 多元统计分析介绍

10.5 胃癌的鉴别: 表10.10是从病例中随即抽取的部分资料. 这里有3个类

别(group): 胃癌(ca)、萎缩性胃炎(ga)和非胃炎患者(non). 从每个总体抽5个

病人, 每人化验4项生化指标: 血清铜蛋白(X1)、蓝色反应(X2)、尿乙酸(X3)和

中性硫化物(X4). 试对胃癌检验的生化指标值用Fisher 判别的方法进行判别

归类.

表 10.10: 胃癌检验的生化指标值

血清铜蛋白 蓝色反应 尿乙酸 中性硫化物

类别 序号

X1 X2 X3 X4

1 228 134 20 11

2 245 134 10 40

3 200 167 12 27

4 170 150 7 8

胃癌患者

5 100 167 20 14

6 225 125 7 14

7 130 100 6 12

8 150 117 7 6

9 120 133 10 26

萎缩性胃炎患者

10 160 100 5 10

11 185 115 5 19

12 170 125 6 4

13 165 142 5 3

14 135 108 2 12

非胃炎患者

15 100 117 7 2

10.6 设有6个产品, 每个产品测得一项质量指标X, 其值如下: 1, 2, 4, 6, 9,

11. 试对6个产品按质量指标进行分类, 试用各种系统聚类方法进行分析, 然后

比较之.

10.7 生活消费水平聚类分析: 表10.11中的资料是我国16个地区农民1982年

10.5 对应分析 355

支出情况的抽样调查的汇总资料, 每个地区都调查了反映每人平均生活消费支

出情况的六个指标, 分别是食品(X1), 衣着(X2), 燃料(X3), 住房(X4), 生活用

品及其他(X5), 文化生活服务支出(X6). 试利用调查资料对16个地区进行分类.

表 10.11: 中国农民1982年各类支出

地区 食品 衣着 燃料 住房 生活用品及 文化生活服务

(area) X1 X2 X3 X4 其他X5 支出X6

北京 190.33 43.77 9.73 60.54 49.01 9.04

天津 135.20 36.40 10.47 44.16 36.49 3.94

河北 95.21 22.83 9.30 22.44 22.81 2.80

山西 104.78 25.11 6.40 9.89 18.17 3.25

内蒙 128.41 27.63 8.94 12.58 23.99 3.27

辽宁 145.68 32.83 17.79 27.29 39.09 3.47

吉林 159.37 33.38 18.37 11.81 25.29 5.22

黑龙江 116.22 29.57 13.24 13.76 21.75 6.04

上海 221.11 38.64 12.53 115.65 50.82 5.89

江苏 144.98 29.12 11.67 42.60 27.30 5.74

浙江 169.92 32.75 12.72 47.12 34.35 5.00

安徽 153.11 23.09 15.62 23.54 18.18 6.39

福建 144.92 21.26 16.96 19.52 21.75 6.73

江西 140.54 21.50 17.64 19.19 15.97 4.94

山东 115.84 30.26 12.20 33.61 33.77 3.85

河南 101.18 23.26 8.46 20.20 20.50 4.30

10.8 矿产数据的典型相关分析: 为了了解某矿区下部矿Pt(铂),

Pd(钯)与Cu(铜), Ni(镍)的共生组合规律, 我们从其钻孔中取出27个样品(数

据见表10.12). 试用典型相关分析研究Pt(铂), Pd(钯)与Cu(铜), Ni(镍)的相关

关系.

356 第十章 多元统计分析介绍

表 10.12: 矿区下部的矿产数据

Pt(铂) Pd(钯) Cu(铜) Ni(镍)

序号

X1 X2 X3 X4

1 0.14 0.30 0.03 0.14

2 0.20 0.50 0.14 0.22

3 0.06 0.11 0.03 0.02

4 0.07 0.11 0.04 0.13

5 0.12 0.22 0.06 0.12

6 0.52 0.87 0.19 0.20

7 0.23 0.47 0.14 0.10

8 1.19 0.38 0.09 0.11

9 0.37 0.66 0.14 0.15

10 0.36 0.60 0.14 0.15

11 0.42 0.77 0.17 0.10

12 0.35 0.85 0.30 0.19

13 0.50 0.87 0.23 0.22

14 0.56 1.15 0.29 0.28

15 0.43 0.90 0.13 0.22

16 0.47 0.97 0.26 0.22

17 0.49 0.79 0.21 0.20

18 0.47 0.77 0.51 0.22

19 0.40 0.88 0.33 0.19

20 0.66 1.30 0.21 0.30

21 0.63 1.30 0.45 0.28

22 0.52 1.43 0.31 0.23

续下页

10.5 对应分析 357

矿区下部的矿产数据(续表)

Pt(铂) Pd(钯) Cu(铜) Ni(镍)

序号

X1 X2 X3 X4

23 0.44 0.87 0.17 0.25

24 0.03 0.07 0.05 0.08

25 0.20 0.28 0.04 0.08

26 0.04 0.10 0.11 0.07

27 0.17 0.28 0.15 0.09

10.9 遗传数据的典型相关分析: 表10.13列举了25个家庭的成年长子和次子

的头长和头宽, 可以想象, 长子和次子之间有相当的相关性. 试对长子和次子

之间作出典型相关分析.

表 10.13: 长子和次子的遗传数据

长子头长 长子头宽 次子头长 次子头宽

X1 X2 Y1 Y2

191 155 179 145

195 149 201 152

181 148 185 149

183 153 188 149

176 144 171 142

208 157 192 152

189 150 190 149

197 159 189 152

188 152 197 159

192 150 187 151

179 158 186 148

续下页

358 第十章 多元统计分析介绍

长子和次子的遗传数据(续表)

长子头长 长子头宽 次子头长 次子头宽

X1 X2 Y1 Y2

183 147 174 147

174 150 185 152

190 159 195 157

188 151 187 158

163 137 161 130

195 155 183 158

186 153 173 148

181 145 182 146

175 140 165 137

192 154 185 152

174 143 178 147

176 139 176 143

197 167 200 158

190 163 187 150

10.10 农业生产的典型相关分析: 对表10.14中给出的2001年全国30个省市

自治区农业产量(主要是粮食、油料)与农业投入(农作物总播种面积、有效灌溉

面积、化肥施用量、农业机械总动力)作典型相关分析.

表 10.14: 2001年全国30个省市自治区农业产量

粮食产量 油料产量 农作物总 有效灌 化肥施用量 农业机械

地区

(万吨) (万吨) 播种面积 溉面积 (万吨) 总动力

北京 104.9 4.3 386.4 322.7 15.7 395.0

天津 143.3 3.9 544.5 354.3 17.3 603.3

续下页

10.5 对应分析 359

2001年全国30个省市自治区农业产量(续表)

粮食产量 油料产量 农作物总 有效灌 化肥施用量 农业机械

地区

(万吨) (万吨) 播种面积 溉面积 (万吨) 总动力

河北 2491.8 153.8 8990.8 4485.4 273.4 7244.4

山西 692.1 18.1 3672.3 1104.3 84.9 1767.5

内蒙古 1239.1 80.6 5707.3 2472.3 79.3 1423.6

辽宁 1394.4 46.3 3964.8 1482.8 109.8 1401.3

吉林 1953.4 34.3 4890.1 1382.6 114.1 1096.5

黑龙江 2651.7 36.3 9989.2 2090.4 123.2 1648.3

上海 151.4 12.8 490.9 280.6 20.3 133.9

江苏 2942.1 232.5 7777.4 3900.0 338.0 2957.9

浙江 1072.7 58.2 3245.9 1400.3 90.3 2017.2

安徽 2500.3 298.8 8733.1 3228.7 280.7 3165.0

福建 817.3 26.1 2713.1 942.4 117.4 888.8

江西 1600.0 90.5 5534.7 1897.5 109.7 1002.0

山东 3720.6 377.3 11266.1 4836.1 428.6 7689.6

河南 4119.9 362.6 13127.7 4766.0 441.7 6078.7

湖北 2138.5 279.4 7489.0 2027.9 245.3 1469.2

湖南 2700.3 137.4 7931.7 2676.3 184.3 2358.0

广东 1600.1 80.9 5193.1 1447.1 195.1 1760.

广西 1511.4 57.2 6288.1 1519.6 168.1 1552.4

海南 195.8 10.3 871.7 180.8 27.0 212.2

重庆 1023.5 30.0 3555.9 631.9 72.6 628.1

四川 2926.5 181.0 9571.5 2533.0 212.0 1735.1

贵州 1100.3 71.3 4650.7 659.8 70.0 647.9

云南 1486.3 27.7 5929.6 1424.3 120.0 1397.8

续下页

360 第十章 多元统计分析介绍

2001年全国30个省市自治区农业产量(续表)

粮食产量 油料产量 农作物总 有效灌 化肥施用量 农业机械

地区

(万吨) (万吨) 播种面积 溉面积 (万吨) 总动力

西藏 98.3 4.4 230.9 154.4 3.0 123.2

陕西 976.6 37.5 4331.9 1314.1 131.1 1099.8

甘肃 753.2 38.4 3688.9 982.3 66.1 1122.0

青海 103.2 23.0 529.0 208.3 7.2 264.7

宁夏 274.8 7.3 1007.6 405.4 24.6 407.6

新疆 780.0 42.6 3404.1 3138.1 83.3 880.9

10.11 城镇居民消费支出结构对应分析: 选取8个反映城镇居民消费支出

结构的指标: X1—食品支出比重; X2—衣着支出比重; X3—家庭设备用品及

服务支出比重; X4—医疗保健支出比重; X5—交通和通讯支出比重; X6—娱

乐教育文化服务支出比重; X7—居住支出比重; X8—杂项商品支出比重. 根

据《2000年统计年鉴》的资料(见表10.15), 进行对应分析.

表 10.15: 城镇居民消费支出结构

地区 X1 X2 X3 X4 X5 X6 X7 X8

京 39.5 9.7 10 6.8 6.2 15.2 6.4 6.1

津 42 8.5 11.9 5.2 4.9 12.6 9.8 5.2

冀 37.1 12.8 9 7.1 6.8 13.4 9.1 4.7

晋 40.3 13.7 8.3 6 5.8 11.9 8.1 6.1

内 37.6 15.1 7.3 5.5 7.2 13.3 8.3 5.6

辽 43.4 13.9 6.2 7 6 11.2 8.3 4.1

吉 42.7 13.4 5.5 6 6 12.6 9.8 4

黑 40.5 14.7 6.1 8 6.5 10.8 9.1 4.4

苏 44.1 9 11.4 4.2 6 11.7 8.6 5

浙 40.3 8.5 10.6 6.7 7.9 12.2 8.8 5

续下页

10.5 对应分析 361

城镇居民消费支出结构(续表)

地区 X1 X2 X3 X4 X5 X6 X7 X8

皖 47.3 11 7 3.2 6.4 13.2 8 3.9

闽 51.4 8.1 6.3 3.1 7.7 8.8 10.2 4.4

赣 44.9 8.7 6.7 3.1 6 11.3 14.6 4.6

鲁 37.1 13.6 12.2 4.9 6 13.3 8.2 4.7

豫 40.8 12.3 8.3 6 6.2 9.7 12 4.7

鄂 41.1 11.8 6.5 4.6 5.5 14.2 12.1 4.2

湘 40.5 10.7 8.4 4.3 6.7 14.5 10.3 4.7

粤 40.6 4.7 7.5 4.7 10.8 11.6 14.4 5.6

桂 44.3 6.6 7.4 3.4 7.2 13.6 12.8 4.8

琼 51.2 4.6 5 4.3 8.2 11.9 7.8 6.9

渝 42.3 10.8 9.5 4.3 7.4 13.4 8.1 4.1

川 43.9 11.3 7.7 4.5 5.3 12.8 9.6 5

黔 42.2 11 11.6 3.9 6.4 11.2 8.7 4.8

滇 44.4 10.9 7.5 5.1 5.9 11.4 8.3 6.7

藏 49.9 15.8 3.9 3.9 7.1 7 5.1 7.3

陕 37.3 9.9 11.3 6.6 5.8 12.4 11.9 4.8

甘 41.4 12.8 8.9 6 5.6 12.2 6.8 6.2

青 42.4 11.2 6.6 7.8 6.3 12.3 7.4 6

宁 38.8 13.6 7.7 8.9 7.1 12 6.4 5.5

新 38.6 12.9 10.4 5.7 6 13 8.3 5.1

10.12 在研究读写汉字能力与数学的关系的研究时, 人们取得了232个美国

亚裔学生的数学成绩和汉字读写能力的数据. 关于汉字读写能力的变量有三个

水平:“纯汉字”意味着可以完全自由使用纯汉字读写,“半汉字”意味着读写

中只有部分汉字(比如日文), 而“纯英文”意味着只能够读写英文而不会汉字.

而数学成绩有4个水平(A、B、C、F). 这里只选取亚裔学生是为了消除文化差

362 第十章 多元统计分析介绍

异所造成的影响. 这项研究是为了考察汉字具有的抽象图形符号的特性能否会

促进儿童空间和抽象思维能力. 列联表形式数据如表10.4.

图 10.4 读写汉字能力与数学的关系数据

数学成绩

数学A 数学B 数学C 数学F 总分

汉字 纯汉字 47 31 2 1 81

使用 半汉字 22 32 21 10 85

纯英文 10 11 25 20 66

总分 79 74 48 31 231

10.5 对应分析 363



10

.6























X

1

X

2

X

3

X

4

X

5

X

6

X

7

X

y 8

X

9

X

1

0

X

y 1

1

X

1

2

X

y 1

3

X

1

4

X

y 1

5

X

1

6

X

y 1

1.

00

X

2

0.

79

1.

00

X

3

0.

36

0.

31

1.

00

X

y 4

0.

96

0.

74

0.

38

1.

00

X

5

0.

89

0.

58

0.

31

0.

90

1.

00

X

6

0.

79

0.

58

0.

30

0.

78

0.

79

1.

00

X

y 7

0.

76

0.

55

0.

35

0.

75

0.

74

0.

73

1.

00

X

8

0.

26

0.

19

0.

58

0.

25

0.

25

0.

18

0.

24

1.

00

X

9

0.

21

0.

07

0.

28

0.

20

0.

18

0.

18

0.

29

-0

.0

4

1.

00

X

y 1

0

0.

26

0.

16

0.

33

0.

22

0.

23

0.

23

0.

25

0.

49

-0

.3

4

1.

00

X

1

1

0.

07

0.

21

0.

38

0.

08

-0

.0

2

0.

00

0.

10

0.

44

-0

.1

6

0.

23

1.

00

X

y 1

2

0.

52

0.

41

0.

35

0.

53

0.

48

0.

38

0.

44

0.

30

-0

.0

5

0.

50

0.

24

1.

00

X

1

3

0.

77

0.

47

0.

41

0.

79

0.

79

0.

69

0.

67

0.

32

0.

23

0.

31

0.

10

0.

62

1.

00

X

1

4

0.

25

0.

17

0.

64

0.

27

0.

27

0.

14

0.

16

0.

51

0.

21

0.

15

0.

31

0.

17

0.

26

1.

00

X

1

5

0.

51

0.

35

0.

58

0.

57

0.

51

0.

26

0.

38

0.

51

0.

15

0.

29

0.

28

0.

41

0.

50

0.

63

1.

00

X

1

6

0.

21

0.

16

0.

51

0.

26

0.

23

0.

00

0.

12

0.

38

0.

18

0.

14

0.

31

0.

18

0.

24

0.

50

0.

65

1.

00

第十一章 贝叶斯统计分析

本章概要

♦ 贝叶斯统计分析介绍

♦ 单参数与多参数贝叶斯分析

♦ 分层贝叶斯分析

♦ 线性回归与贝叶斯分析

§11.1 贝叶斯统计分析与经典统计分析的比较

统计分析(推断)就是根据来自未知概率分布的观测数据, 对此分布或其参

数作出推断, 如给出分布中参数的点估计、区间估计或对某假设进行检验. 统

计分析主要有两大学派, 即贝叶学派与频率学派,有时称为贝叶斯统计分析和

经典统计分析,在历史上它们之间曾产生过很大的分岐, 因为两者在统计推断

的基本理论和方法上存在很大的差异. 但是, 现在它们之间开始相互尊重,由

此推动了现代数理统计的发展和许多实际问题的解决. 在叙述与讨论贝叶斯分

析之前我们先对两者之间的差异作一个简单的对比.

11.1.1 经典统计分析中存在的问题

假设检验中的p值

贝叶斯统计学家认为, 经典假设检验中p值的计算违反了似然法则, 原因在

于其涉及的数据信息超出了观测结果本身. 例如: 设随机变量Y Binp100, θq,

11.1 贝叶斯统计分析与经典统计分析的比较 365

其中θ为未知参数, 试验结果为y 8. 考虑假设检验问题

H0 : θ 0.03 Ø H1 : θ ¡ 0.03

按经典的统计分析方法, 该检验的p值为

PrpY ¥ y|θq PrpY 8|θ 0.03q     PrpY 100|θ 0.03.

可见, p值的计算运用了大于等于观测结果的所有可能值. 而贝叶斯学派在解决

此问题时, 则着重计算Prpθ ¡ 0.03|Y 8q的值(称为θ ¡ 0.03的后验概率).

置信区间

频率学派对于置信区间的解释是: 给定置信水平p1 αq, 一个参

数θ的100p1 αq%的置信区间就是一个按某种方法(如极大似然方法)构造

的区间. 如果我们将试验重复多次, 并按这种方法计算出置信区间, 那么其中

大约有100p1 αq%的比例包含参数θ的真值.

容易看出, 这种区间估计存在这样的几个问题:

1) 对于经典的统计学家而言,参数θ是固定而未知的,它没有分布可言. 因

此频率学派不能说“有95%的概率使得参数θ落在置信区间中”.

2) 经典统计推断的精度主要取决于样本量的大小, 因而当数据量较少时, 该

推断方法便难以实现.

3) 对于非对称分布、多峰分布及不可重复的数据, 此类置信区间很难获得.

造成这些问题的原因在于, 经典统计学派一贯用频率来解释概率, 并在此基础

上理解一切统计推断的结论.

相反地, 贝叶斯学派认为参数是服从于某一分布的随机变量, 并结合数据

信息与先验信息构造置信区间(在贝叶斯分析中通常称为可信区间), 使该未知

参数以某一特定概率落入该区间. 这样, 贝叶斯学派就可以说频率学派不可以

说的话:“有95%的概率这个区间包含参数θ.”

11.1.2 对贝叶斯统计分析的质疑及褒奖

关于主观性

鉴于贝叶斯统计分析对于经典统计分析的强烈冲击, 其独树一帜的推断理

366 第十一章 贝叶斯统计分析

念也不断受到质疑. 首先, 在样本量较小时, 未知参数的估计往往对先验分布

的选择相当敏感, 因而不少人认为此法过于主观. 其次,“将未知参数视为随机

变量”这一想法也很难被接受.

贝叶斯统计学家对这两点质疑的回应则是, 在分析时可以通过模糊先

验(diffuse prior)以及敏感性分析等方法弱化先验分布对结果的影响; 同时, 未

知参数的随机性仅旨在体现对此参数所包含信息的一种不确定, 而非实际意义

上的随机.

贝叶斯统计分析与经典统计分析的根本区别在于, 贝叶斯学派将已有的认

识或知识视为是主观的(用先验分布来表示), 因而有时也被认为具有主观性.

但在大多数问题中, 鉴于其分析所用的模型囊括了似然函数以及先验分布两部

分信息, 因此仍不失其客观性.

贝叶斯统计分析的优势

贝叶斯统计分析有着经典统计分析所无可比拟的优势,主要有

1) 它结合了数据的信息与参数的先验信息, 不断通过样本数据更新先前的

认知;

2) 与经典统计分析相比, 它的理论框架相对简洁, 且不需要繁杂的假设及数

学推导;

3) 它不但能对缺失数据、截尾数据等进行简明处理, 还能对模型进行全面而

稳健的估计.

事实上, 在不少统计问题中, 诸如线性回归、非参数统计等等, 经典统计方

法仅仅是贝叶斯统计方法的特例. 同时, 贝叶斯统计分析还能直观地解释某些

经典统计方法所无法阐述的问题, 诸如此前提到的置信区间问题等.

§11.2 贝叶斯统计分析与先验分布的选取

贝叶斯数据分析涉及两类估计量: 一类是通常所说的参数, 它(们)不可直

接观测;另一类则是可以潜在观测的量,通常是待预测的未来的观测值. 贝叶

斯统计分析的基本步骤包括:

1) 建立一个完整的概率模型. 它包括两部分,即参数的先验分布和观测数

据的抽样分布;

11.2 贝叶斯统计分析与先验分布的选取 367

2) 对数据进行条件化得到后验分布: 计算后验分布, 并对它进行合理的解

释;

3) 对模型的拟合及后验结果进行评估(包括合理性、敏感性等).

11.2.1 贝叶斯公式

贝叶斯学派的起点是贝叶斯的两项工作: 贝叶斯定理和贝叶斯假设. 贝叶

斯定理(或贝叶斯公式)有三种形式.

贝叶斯公式的事件形式

设事件A1, A2, . . . , Ak为互不相容的事件,它们的和包含事件B,即B €

k⋃

i1

Ai, 则有

P pAi|Bq

P pAiqP pB|Aiq

k∑

i1

P pAiqP pB|Aiq

, i 1, 2, . . . , k. (11-2.1)

贝叶斯公式的离散分布形式

设X,Y为随机变量,其中X为离散型的,其分布列为P pX xiq

pXpxiq, i 1, 2, . . . . 当X xi时, Y对X的条件密度函数(若Y是连续的)或分

布律(若Y为离散的)为PY |Xpy|xq, 则给定Y y时X对Y的条件列pX|Y pxi|yq可

表示为

pX|Y pxi|yq

pXpxiqpY |Xpy|xiq

8∑

j1

pXpxjqpY |Xpy|xjq

, i 1, 2, . . . (11-2.2)

贝叶斯公式的连续分布形式

设随机变量X,Y的联合密度函数为ppx, yq pXpxqpY |Xpy|xq. 其

中pXpxq为X的边际密度函数, pY |Xpy|xq为当X x时Y对X的条件密度函

数. 于是当Y y时X对Y的条件密度函数pX|Y px|yq可表示为

pX|Y px|yq

pXpxqpY |Xpy|xq∫

8

8

pXpxqpY |Xpy|xqdx

. (11-2.3)

368 第十一章 贝叶斯统计分析

贝叶斯定理

以后用y py1, y2, . . . , ynq表示数据, θ表示不可观测的未知参数,它可以

是一维的,也可以是多维的,y˜表示一个未知但可潜在观测的量(简称为预测

量). 在贝叶斯分析中y的抽样分布(也称为似然函数)表示为ppy|θq. 在抽样之

前, 我们对于θ可能有一定的了解(称为先验信息), 并用分布ppθq来表示,称之

为θ的先验分布. 在没有样本信息时,人们只能根据先验信息对θ作出推断; 在

有了观测数据y后,就可结合样本的信息与先验信息对θ作出推断, 而样本的信

息与先验信息可以用θ的后验分布ppθ|yq进行综合, 在此基础上可以得到y˜的预

测分布ppy˜|yq.

由上面的贝叶斯公式可得:

1) 若θ是连续的, 则θ的后验分布可表示为

ppθ|yq

ppθqppy|θq∫

Θ

ppθqppy|θqdθ

(11-2.4)

2) 若θ是离散的, 则θ的后验分布可表示为

ppθi|yq

ppθiqppy|θiq∑

j

pipθjqppx|θjq

, i 1, 2, . . . (11-2.5)

称这两个公式为贝叶斯定理(也称为贝叶斯公式、贝叶斯法则), 其中ppyq ∫

Θ

ppθqppy|θqdθ(连续场合)或ppyq ∑

j

pipθjqppx|θjq(离散场合)为y的边际分

布,它们与参数θ无关. 以后若不作特别说明,我们仅讨论参数是连续的场合.

由于ppyq不含θ的任何信息, 因此用分布的核来表示, 贝叶斯定理可简化为

ppθ|yq 9 ppθqppy|θq (11-2.6)

这是贝叶斯统计分析中常使用的贝叶斯公式的密度函数形式.

在y被观测到之前,它是有分布可言的,并称

ppyq



Θ

ppθqppy|θqdθ

为y的边际分布或先验预测分布. 而当y一经观测得到,我们就可对任一未知但

11.2 贝叶斯统计分析与先验分布的选取 369

可观测的量y˜进行预测, 其后验分布为

ppy˜|yq



Θ

ppy˜, θ|yqdθ



Θ

ppy˜|θ, yqppθ|yqdθ



Θ

ppy˜|θqppθ|yqdθ p因为y与y˜独立q. (11-2.7)

称之为y的后验预测分布.

11.2.2 先验分布的选取

贝叶斯统计中要使用先验信息,而先验信息主要是指经验和历史资料. 因

此如何利用人们的经验和过去的历史资料确定概率和先验分布是贝叶斯统计

推断中一个关键性问题. 若人们已经获得有关参数的先验信息,则可先确定先

验密度函数,然后根据专家的经验或利用经典的矩估计或极大似然估计确定先

验分布中的参数(称为超参数). 先验密度函数的形式应有利于后验推断,如

选择共轭的先验分布. 若没有先验信息,则可使用无信息先验分布.

为方便讨论, 先用贝叶斯观点叙述充分统计量的概念:

定义 11.2.1 设y1, y2, . . . , yn表示来自总体ppy|θq的样本. 对于参数θ而

言,统计量tpy1, y2, . . . , ynq称为充分的,如果不论θ的先验分布是什么,相应的

后验分布ppθ|y1, y2, . . . , ynq总是θ和tpy1, y2, . . . , ynq的函数.

定义11.2.1告诉我们,后验分布是通过tpy1, y2, . . . , ynq与样本y1, y2,

. . . , yn发生联系的. 充分性的判定可使用著名的奈曼因子分解定理.

定 理 11.2.1 若 样 本y1, y2, . . . , yn对 参 数θ的 条 件 密 度ppy1, y2,

. . . , yn|θq能表示成fpθ, tpy1, y2, . . . , ynqq与gpy1, y2, . . . , ynq的乘积, 则tpy1, y2,

. . . , ynq对参数θ是充分的.

例 11.2.1 设y1, y2, . . . , yn为来自正态总体Npµ, 1q的样本,则样本均

值y¯是参数µ的充分统计量.

例 11.2.2 设y1, y2, . . . , yn为来自正态总体Np0, σ2q的样本,则样本观

测值的平方和s2

n∑

i1

y2i是参数σ2的充分统计量.

先验分布的选取主要有三种方式:

370 第十一章 贝叶斯统计分析

1) 使用贝叶斯假设确定先验分布:

贝叶斯假设表述为: 参数θ的无信息先验分布ppθq应在θ的取值范围Θ 内

是“均匀”分布,用数学公式表示为ppθq c, θ P Θ, 或ppθq91, θ P Θ,其

中c为常数, Θ可为无限区间.

在贝叶斯假设下,似然函数Lpθ|y1, y2, . . . , ynq为后验密度的核, 即

pipθ|y1, y2, . . . , ynq9Lpθ|y1, y2, . . . , ynq. (11-2.8)

如果tpy1, y2, . . . , ynq为θ的充分统计量, 则上式可写成

ppθ|tq9Lpθ|tq. (11-2.9)

尽管pipθq91, θ P Θ并不是正常的密度函数(有时称为广义密度函数),

而其后验密度(11-2.8)和(11-2.9)通常为正常的密度函数. 因此有时也

称(11-2.8)或(11-2.9)为贝叶斯假设.

2) 使用杰弗莱原则确定无先验信息:

贝叶斯假设中的一个矛盾是: 如果对参数θ选用均匀分布,那么当θ的

函数gpθq作为参数时,也应该选用均匀分布作为先验分布. 然而由θ遵从

均匀分布这一前提,往往导出gpθq不是均匀分布,反之也然. 杰弗莱为了

克服这一矛盾提出了选取先验的不变原理—并被称为杰弗莱原则.

杰弗莱原则有两个部分: 一是对无信息先验分布有一合理的要求;

另一部分是给出一个具体的方法去求得符合要求的先验分布. 现设按照

同一准则决定的θ的先验分布为ppθq,η gpθq的先验分布为pgpηq, 由它

们应满足关系:

ppθq pgpgpθqq|g

1

pθq|. (11-2.10)

杰弗莱巧妙地利用了费歇信息阵的一个不变性质,找到了满

足(11-2.10)要求的先验分布ppθq: θ的无信息先验分布应以信息阵Ipθq的

行列式的平方根为核,即

ppθq9|Ipθq|1{2, (11-2.11)

其中θ可以是向量,

Ipθq E

(

B ln ppx1, …, xn|θq



)(

B ln ppx1, …, xn|θq



)

1

.

11.2 贝叶斯统计分析与先验分布的选取 371

由于Ipθq是非负定的,|Ipθq| ¡ 0, 因此|Ipθq|1{2有意义. 按(11-2.11)所确定

的先验分布的确具有不变性,因为我们可以证明下面的定理.

定理 11.2.2 设gpθq是θ的函数, η gpθq与θ具有相同的维数, 则



|Ipθq|1{2

∣∣∣∣Bgpθq



∣∣∣∣ |Ipηq|1{2. (11-2.12)

3) 共轭分布法

定义 11.2.2 设y1, y2, . . . , yn表示来自总体ppy|θq的样本. 先验分

布ppθq称为θ的共轭先验分布,如果后验分布ppθ|y1, y2, . . . , ynq与ppθq是

同一类型的, 即它们的核有相同的形式.

共轭先验分布的二个优点: 1) 计算方便; 2) 后验分布的一些参数可以得到很

好的解释(见后面的例子). 然而贝叶斯统计中先验分布的选取以合理性作为首

要原则,而计算的方便是第二位的. 一般的做法是:在没有具有的先验信息时,

采用贝叶斯假设或更为一般的杰弗莱原则采用无信息先验分布. 但是使用贝叶

斯统计分析方法的主要目的是充分利用专家的经验和历史数据,特别是在小样

本场合与多参数场合经典的统计分析方法显得特别困难或无能为力时,这时选

取一个合理的先验分布. 先验分布选取的合理性显得尤为重要: 贝叶斯统计分

析中先验分布的选取带有主观性(这是这种方法受到批评或攻击的原因), 我们

使用贝叶斯统计分析方法应尽可能将先验信息通过先验分布客观地反映到统

计分析中,以弥补数据中信息的不足,从而达到客观合理地解决实际问题的目

的. 具体方法可参考茆诗松的教材(1999).

11.2.3 贝叶斯分析体现了科学探索过程

设已观测到数据y1, 则由贝叶斯定理, 得后验分布

ppθ|y1q ∝ ppy1|θq ppθq.

假设后来又观测到数据y2(与y1独立), 则

ppy1, y2|θq ppy1|θq ppy2|θq.

因此,再由贝叶斯定理, 得后验分布

ppθ|y1, y2q ∝ ppθq ppy1|θq ppy2|θq

372 第十一章 贝叶斯统计分析

ppθ|y1q ppy2|θq.

从上述公式我们可以看到这样一个过程:由数据y1对先验ppθq作出更新得到后

验分布ppθ|y1q; 在观测到数据y2后, 将ppθ|y1q视为新的先验分布,并由y2对它

作出更新得到后验分布ppθ|y1, y2q. 这个过程可以不断重复, 由此随着对于参

数θ(或相关的分布)的信息不断增加, 将得出更符合实际(数据)的结论. 这个过

程体现了科学研究的不断探索过程.

注: 本章随机变量或其观测值均用小写字母表示. 在试验或观测之前它被

视为是随机的, 其分布称为抽样分布或数据分布; 在试验或观测之后它就被视

为样本或数据, 这时抽样分布就转化为似然函数(作为参数的函数).

§11.3 单参数贝叶斯统计分析

所谓单参数模型(分布), 即统计模型中仅含有一个未知参数. 常用的单参

数模型有两项分布、正态分布(其中仅有一个参数未知)、泊松分布、指数分布

等. 本节讨论基于此类模型下的贝叶斯统计推断.

11.3.1 两项分布下的贝叶斯推断

设随机变量y代表n次贝努利试验中的某事件A“成功”的次数, 参数θ代表

每次试验成功(事件A发生)的概率. θ也可表示总体中具有某种特征的个体所占

的比例. 由于n次贝努利试验独立,因此y服从二项分布Binpn, yq, 即

ppy|θq Binpy|n, θq Cynθ

y

p1 θqpnyq. (11-3.1)

在两项分布模型下进行贝叶斯统计推断, 还需给出参数θ的先验分布.

1) 基于贝叶斯假设的无信息先验分布

若事先没有关于参数θ的任何信息, 则通常假设其服从[0, 1]上的均匀分布,

即得到最简单的先验分布ppθq91, 即贝塔分布Betap1, 1q. 从而根据贝叶斯公

式导出θ的后验分布为:

ppθ|yq9θy1 θpnyq,



θ|y Betapy   1, n y   1q. (11-3.2)

11.3 单参数贝叶斯统计分析 373

2) 基于杰弗莱原则的无信息先验分布

由(11-3.1)不难得到(请读者自己证)

Ipθq

n

θp1 θq

,

因此由杰弗莱原则,得到θ的先验分布

ppθq9θ1{2p1 θq1{2,

即θ服从贝塔分布Betap1{2, 1{2q. 因此由贝叶斯公式得到θ的后验分布为:

ppθ|yq9θy1{2p1 θqny1{2,



θ|y Betapy   1{2, n y   1{2q. (11-3.3)

3) 基于共轭先验分布

取θ的先验分布为贝塔分布Betapα, βq, 即

ppθq9θα1p1 θqβ1.

由抽样分布(11-3.1)及先验分布得θ的后验分布为:

ppθ|yq9θy α1p1 θqny β1,



θ|y Betapy   α, n y   βq. (11-3.4)

由此我们可以得到结论:

1) 对于二项分布中参数θ,基于贝叶斯假设与基于杰弗莱原则的先验可以视

为共轭先验的特例;

2) 由于贝塔分布Betapα, βq分布的均值与方差分别为

Epθq

α

α  β

, V arpθq

αβ

pα  βq2pα  β   1q

,

374 第十一章 贝叶斯统计分析

故在共轭先验下参数θ的贝叶斯估计(后验均值)为

θˆ

y   α

n  α  β

. (11-3.5)

3) θ的贝叶斯估计的解释: α

α β

可视为仅利用先验信息对参数θ的估计,y

n



为利用样本对参数θ的估计,而θ的后验贝叶斯估计(11-3.5)为上述二个估

计的加权平均,即

y   α

n  α  β

α  β

n  α  β

α

α  β

 

n

n  α  β

y

n

4) 一个新的观测值y˜(假定与y1, . . . , yn独立)的预测值为

Prpy˜ 1|yq

∫ 1

0

Prpy˜ 1|θ, yqppθ|yqdθ

∫ 1

0

θppθ|yqdθ Epθ|yq

y   α

n  α  β

.

下面通过一些例子来说明贝叶斯分析中的影响因素.

例 11.3.1 相同数据下, 不同先验分布对贝叶斯分析的影响:

设y|θ Binpn, θq, n 10, y 3, 先验分布取为Betapα, βq, 其中

超参数取9组pα, βq p0.5, 0.5q, p0.5, 1.0q, p0.5, 1.5q, p1.0, 0.5q, p1.0, 1.0q,

p1.0, 1.5q, p1.5, 0.5q, p1.5, 1.0q, p1.5, 1.5q. 图11.1给出了9种先验分布及相应的

后验分布(R程序从略).

结论: 在相同的数据下,先验对于后验有一定的影响,但这种影响不是很明显.

例 11.3.2 相同先验及样本容量下, 不同观测对贝叶斯分析的

影响: 设y|θ Binpn, θq, n 10, θ取无信息先验Betap1, 1q, 图11.2给出

了y 0, 1, 2, 3, 4, 5时6种后验分布. R程序如下:

> x=seq(0,1,0.01)

> n=5

> z=dbeta(x,1,1)

> z0=dbeta(x,1,n+1)

> z1=dbeta(x,1+1,n-1+1)

> z2=dbeta(x,2+1,n-2+1)

> z3=dbeta(x,3+1,n-3+1)

11.3 单参数贝叶斯统计分析 375

0.0 0.2 0.4 0.6 0.8 1.0

1.

0

2.

0

3.

0

α = 1, β = 1

postmean=0.32,postmax=0.28

0.0 0.2 0.4 0.6 0.8 1.0

1

2

3

4

5

α = 0.5, β = 1

postmean=0.30,postmax=0.26

0.0 0.2 0.4 0.6 0.8 1.0

0

1

2

3

4

5

6

α = 0.5, β = 1.5

postmean=0.29,postmax=0.25

0.0 0.2 0.4 0.6 0.8 1.0

1

2

3

4

5

α = 1, β = 0.5

postmean=0.35,postmax=0.32

0.0 0.2 0.4 0.6 0.8 1.0

0.

6

0.

8

1.

0

1.

2

1.

4

α = 1, β = 1

x

postmean=0.33,postmax=0.30

0.0 0.2 0.4 0.6 0.8 1.0

0.

0

0.

5

1.

0

1.

5

α = 1, β = 1.5

postmean=0.32,postmax=0.29

0.0 0.2 0.4 0.6 0.8 1.0

0

1

2

3

4

5

6

α = 1.5, β = 0.5

postmean=0.38,postmax=0.35

0.0 0.2 0.4 0.6 0.8 1.0

0.

0

0.

5

1.

0

1.

5

α = 1.5, β = 1

postmean=0.36,postmax=0.33

0.0 0.2 0.4 0.6 0.8 1.0

0.

0

0.

4

0.

8

1.

2

α = 1.5, β = 1.5

postmean=0.35,postmax=0.32

图 11.1 后验分布: Bepα  y, n y   βq

> z4=dbeta(x,4+1,n-4+1)

> z5=dbeta(x,5+1,n-5+1)

> z.df=data.frame(cbind(z,z0,z1,z2,z3,z4,z5))

> matplot(x, z.df, ylim=c(0,4), xlab=”x”, ylab=””,

col=1:6, type=”l”, lwd=2)

> text(0.20,3,”y=0″)

> text(0.25,2.5,”y=1″)

> text(0.4,2.2,”y=2″)

> text(0.55,2.2,”y=3″)

> text(0.75,2.5,”y=4″)

> text(0.95,3,”y=5″)

> text(0.08,1.1,”Prior”)

376 第十一章 贝叶斯统计分析

0.0 0.2 0.4 0.6 0.8 1.0

0

1

2

3

4

x

y=0

y=1

y=2 y=3

y=4

y=5

Prior

图 11.2 后验分布: Bepα  y, n y   βq

结论: 在相同的样本容量下,不同的观测对后验的影响很明显.

例 11.3.3 随着观测信息的增加(样本容量的增加),不同先验对贝

叶斯分析的影响: 设y|θ Binpn, θq, θ取3种先验分布Betap1, 1q, Betap2, 5q,

Betap10, 1q, 考查2种观测数据: n 5, y 1和n 50, y 10, 这时经典的极

大似然估计均为θˆ 0.2. 图11.3给出了3种先验对后验分布的影响与样本容量

的关系. R程序如下:

> x=seq(0,1,0.01)

> par(mfrow=c(1,3))

> # 左侧图形 — 先验

> z1=dbeta(x,1,1);

> z2=dbeta(x,5,2);

> z3=dbeta(x,1,10)

> z.df=data.frame(cbind(z1,z2,z3))

11.3 单参数贝叶斯统计分析 377

> matplot(x,z.df, xlab=”y”, ylab=””,

col=c(“black”, “red”, “blue”),

type=”l”, lty=1:3, lwd=2)

> text(0.8,6,”Priors”)

> # 中间图形 — 后验: n=5, y=1

> n=5

> y=1

> z1=dbeta(x,y+1,n-y+1);

> z2=dbeta(x,y+5,n-y+2);

> z3=dbeta(x,y+1,n-y+10)

> z.df=data.frame(cbind(z1,z2,z3))

> matplot(x,z.df, xlab=”y”, ylab=””,

col=c(“black”, “red”, “blue”),

type=”l”, lty=1:3, lwd=2)

> text(0.8,3.5,”Posterios”)

> text(0.8,3.3,”n=5, y=1″)

> # 右侧图形 — 后验: n=50, y=10

> n=50

> y=10

> z1=dbeta(x,y+1,n-y+1);

> z2=dbeta(x,y+5,n-y+2);

> z3=dbeta(x,y+1,n-y+10)

> z.df=data.frame(cbind(z1,z2,z3))

> matplot(x,z.df, xlab=”y”, ylab=””,

col=c(“black”, “red”, “blue”),

type=”l”, lty=1:3, lwd=2)

> text(0.8,4.5,”Posterios”)

> text(0.8,4.3,”n=50, y=10″)

结论: 随机样本容量的增加,先验对后验的影响逐渐减小. 这说明在小样本场

合,先验的选取较为重要,但随机数据信息的增加,先验在贝叶斯分析中的敏

感性较弱,其选择可以考虑以方便计算为主,如共轭先验.

4) 基于后验分布的推断

前面我们已经看到后验分布是已有的数据信息对先验信息更新调整的结

378 第十一章 贝叶斯统计分析

0.0 0.2 0.4 0.6 0.8 1.0

0

2

4

6

8

10

y

Priors

0.0 0.2 0.4 0.6 0.8 1.0

0

1

2

3

4

5

y

Posterios

n=5, y=1

0.0 0.2 0.4 0.6 0.8 1.0

0

2

4

6

8

y

Posterios

n=50, y=10

图 11.3 随机样本信息的增加的后验分布变化

果,它概括了参数的一切信息,如我们最为关心的后验均值、后验众数、后验

方差或标准差、后验置信区间. 后验均值、后验众数都可作为贝叶斯点估计,

但前者更为常用,在后验分布对称或近似对称时,二者一致;后验方差或标

准差反映了贝叶斯估计(点估计或区间估计)的精度; 贝叶斯置信区间有两种形

式,其一是等尾的置信区间,这与经典的区间估计一致,其二称为最高概率密

度(Highest Probability Density)置信区间,其优点是在相同的置信水平下这样

的区间估计是最短的,但其计算需要使用数值方法. 本书讲的贝叶斯置信区间

是指等尾的,它很容易由后验分布的分位数求得.

另外,在一些实际问题中, 我们不仅关心分布中的参数本身,更关心

其函数的统计性质. 例如,在考虑某地区女性出生率时,样本可用二项分

布Binpn, θq描述, 这时我们不仅关心参数θ, 更为关心的是男性与女性出生

的比率φ 1θ

θ

, 有时在研究社会问题时还关心θ的logit变换logitpθq

logpθ{p1 θqq. 对于θ的变换,其后验分布通常不易获得,但我们可以通过

从θ的后验分布中随机抽取一系列的样本,从而获得其函数的样本,当抽样次

数足够大时,理论上可以获得这些参数或其函数的精确后验分布,因而我们只

要基于后验样本进行推断就足够了. 这是贝叶斯统计分析中最为常用的方法,

在多参数场合其优势更为明显. 另外,对参数进行适当的变换,可以使后验分

布具有更好的对称性,这样可以借助正态近似求得它们的贝叶斯置信区间. 下

面通过一个具体的例子予以说明.

例 11.3.4 早期在德国进行了一项试验,其结果显示, 在980例因非正常

受孕而导致胎盘位置过低的分娩中, 有437例为女婴. 由此能否判断在此类非

11.3 单参数贝叶斯统计分析 379

正常分娩中,女婴的出生率小于0.485呢?

解 可以认为这980名孕妇中,女婴的出生数y服从二项分布Binpn, θq, 现

已知n 980, y 437. 假设我们对θ没有任何可用的信息,故用无信息先验分

布Betap1, 1q作为θ的先验. 则θ的后验分布为θ|y Betap438, 544q.

1) 首先计算θ 后验均值、标准差、中位数及95%置信区间, R程序如下:

> alpha <- 438

> beta <- 544

> postmean<-alpha/(alpha+beta)

> print(“The posterior mean is”)

> print(postmean)

> poststd<-sqrt(alpha*beta/(alpha+beta)^2/(alpha+beta+1))

> print(“The posterior standard deviation is”)

> print(poststd)

> postmedian<-qbeta(0.5, alpha, beta)

> print(“The median based on

> posterior distribution is”)

> print(postmedian)

> CI_95<-c(qbeta(0.025,alpha, beta), qbeta(0.975, alpha, beta))

> print(“The 95% posterior confidence interval is”)

> print(CI_95)

结论: 运行上述程序得到θ后验均值、标准差、中位数及95%置信区间分

别为:

0.4460285

0.01585434

0.4459919

(0.4150655 0.4771998)

2) 运用随机模拟方法, 根据θ的后验分布进行推断, 即产生1000个Beta(438,

544)的随机数, 并计算其后验均值、标准差、中位数和基于正态近似

的95%置信区间. R程序如下:

> alpha <- 438; beta <- 544

380 第十一章 贝叶斯统计分析

> theta <- rbeta(1000, alpha, beta)

> sort_theta <- sort(theta)

> spostmean <- mean(theta)

> spoststd <-sd(theta)

> spostmedian <- sum(sort_theta[500:501])/2

> approxCI_95 <-c(spostmean-1.96*spoststd, spostmean+1.96*spoststd)

> print(spostmean)

> print(spoststd)

> print(spostmedian)

> print(“The 95% confidence interval of theta

based on normal approximation is”)

> print(approxCI_95)

结论: 运行上述程序得到θ后验均值、标准差、中位数及95%置信区间分

别为:

0.4463512

0.01531046

0.4461134

(0.4163427, 0.4763597)

它们与直接从后验分布计算的结果几乎没有差异.

3) 基于随机模拟,计算两种变换logit(θ)、φ p1 θq{θ的后验均值、标准

差、中位数和基于正态近似的95%置信区间. R程序如下:

> alpha <- 438; beta <- 544

> theta <- rbeta(1000, alpha, beta)

> logit_theta <- log(theta/(1-theta))

> sort_logit_theta <- sort(logit_theta)

> slogit_median <- sum(sort_logit_theta[500:501])/2

> slogit_postmean <- mean(logit_theta)

> slogit_poststd<-sd(logit_theta)

> L <- slogit_postmean-1.96*slogit_poststd

> U<-slogit_postmean+1.96*slogit_poststd

> approxlogit_CI=c(L, U)

> approx_CI=c(exp(L)/(1+exp(L)), exp(U)/(1+exp(U)))

11.3 单参数贝叶斯统计分析 381

> print(slogit_postmean)

> print(slogit_poststd)

> print(slogit_median)

> print(“The 95% confidence interval of logit(theta)

based on normal approximation is”)

> print(approxlogit_CI)

> print(“The 95% confidence interval of theta

based on normal approximation is”)

> print(approx_CI)

> # phi的推断

> phi<-(1-theta)/theta

> sort_phi <- sort(phi)

> sphi_median <- sum(sort_phi[500:501])/2

> sphi_postmean<-mean(phi)

> sphi_poststd <- sd(phi)

> L<-sphi_postmean-1.96*sphi_poststd

> U<-sphi_postmean+1.96*sphi_poststd

> approxphi_CI<-c(L, U)

> print(sphi_postmean)

> print(sphi_poststd)

> print(sphi_median)

> print(“The 95% confidence interval of phi=(1-theta)/theta is” )

> print(approxphi_CI)

结论: 运行上述程序得到logitpθq后验均值、标准差、中位数及95%置信

区间分别为:

-0.2157638

0.0635593

-0.2182796

(-0.34034002, -0.09118757)

而φ p1 θq{θ后验均值、标准差、中位数及95%置信区间分别为:

1.243318

0.07920171

382 第十一章 贝叶斯统计分析

1.243803

(1.088082, 1.398553)

另外, 由logitpθq的反变换得θ的95%置信区间为(0.4157269, 0.4772189),

与前面的结果也基本相同.

4) 作出θ, logitpθq和φ p1 θq{θ的频数直方图. R程序如下:

> alpha <- 438; beta <- 544

> theta <- rbeta(1000,alpha,beta)

> par(mfrow=c(1,3))

> #Fig(1,1)– histogram of theta

> par(mar=c(5,4,2,1))

> hist(theta, breaks = seq(0.35,0.55,0.005),

xlim = c(0.35,0.55),

main=””, xlab=quote(theta),

probability=”T”)

> #Fig(1,2) — histogram of log(theta)

> logit_theta <- log(theta/(1-theta))

> breaks <- quantile(logit_theta, 0:20/20)

> par(mar=c(5,4,2,1))

> hist(logit_theta, breaks = seq(-0.5,0.1,0.01),

xlim = c(-0.5,0.1), main=””,

xlab=quote(logit(theta)==log(theta/(1-theta))),

probability=T)

> #Fig(1,3) — histogram of phi=(1-theta)/theta

> phi=(1-theta)/theta

> breaks <- quantile(phi, 0:20/20)

> par(mar=c(5,4,2,1))

> hist(phi, breaks = seq(0.8,1.6,0.01),

xlim = c(1.0,1.6),

main=””, xlab=quote(phi==(1-theta)/theta),

probability=T)

结论: 运行上述程序得到图11.4. 由于欧洲人种新生儿的男女比率一般

为1.06(即女婴出生率为0.485), 因此根据φ的中位数及其基于正态近似下

得95%置信区间(1.088082, 1.398553)推断, 女婴出生率在上述非正常分娩

11.3 单参数贝叶斯统计分析 383

θ

D

en

si

ty

0.35 0.40 0.45 0.50 0.55

0

5

10

15

20

25

30

logit(θ) = log(θ (1 − θ))

D

en

si

ty

−0.5 −0.3 −0.1 0.1

0

2

4

6

8

φ = (1 − θ) θ

D

en

si

ty

1.0 1.1 1.2 1.3 1.4 1.5 1.6

0

1

2

3

4

5

6

图 11.4 由θ的后验分布产生的1000个随机样本的直方图.

状况下, 确实比一般情况下要低. 此例也可利用共轭先验分布假设进行推

断, 结果相同.

¥

11.3.2 正态分布下的贝叶斯统计推断

我们先考虑仅有一个观测值的情形,然后推到多个观测值的一般情形.

384 第十一章 贝叶斯统计分析

1) 单一正态观测值, 方差已知时

设观测值y服从正态分布Npθ, σ2q, 其中σ2已知, 则y的似然函数为

ppy|θq

1√

2piσ

exp

(

py θq2

2σ2

)

.

根据似然函数的形式不难推得θ的共轭先验密度为正态分布θ Npµ0, τ 20 q, 即

ppθq9 exp

(

1

2τ20

pθ µ0q

2

)

,

其中µ0,τ20为超参数(假定已知), 由此可得θ的后验密度

ppθ|yq9 exp

(

1

2

[

py θq2

σ2

 

pθ µ0q2

τ20

])

.

经整理后得

ppθ|yq9 exp

(

1

2τ21

pθ µ1q

2

)

, (11-3.6)

即θ Npµ1, τ 21 q, 其中

µ1

1

τ20

µ0  

1

σ2

y

1

τ20

 

1

σ2

, (11-3.7)

1

τ21

1

τ20

 

1

σ2

. (11-3.8)

由此我们得到结论:

ˆ 在正态分布中, 方差的倒数称为精度. 因此(11-3.7)表示后验均值等先验

均值与观测值y的加权平均, 其权数就是两者相应的精度.

ˆ (11-3.8)后验精度等于先验精度与数据精度之和.

最后再考虑后验预测分布. 由(11-2.7)得, 未来观测值y˜的预测分布为

ppy˜|yq



Θ

ppy˜|θqppθ|yqdθ

9



Θ

exp

(

1

2σ2

py˜ θq2

)

exp

(

1

2τ21

pθ µ1q

2

)

dθ.

11.3 单参数贝叶斯统计分析 385

由于上述积分的被积函是py˜, θq二次型的指数, 因此py˜, θq服从联合正态分布,

从而y˜的边际分布, 即ppy˜|yq是正态的. 因此我们只需求出其期望Epy˜|yq和方

差Varpy˜|yq. 而由Epy˜|θq θ, Varpy˜|θq σ2可得

Epy˜|yq EpEpy˜|θ, yq|yq Epθ|yq µ1,

Varpy˜|yq EpVarpy˜|θ, yq|yq   VarpEpy˜|θ, yq|yq

Epσ2|yq   Varpθ|yq

σ2   τ21 .

所以

y˜|y Npµ1, σ

2

  τ21 q.

由此我们得到结论:

ˆ y˜的预测分布的均值等于后验均值;

ˆ 预测分布的方差等于模型的方差与来自θ的后验不确定性的方差τ21之和.

2) 多个正态观测值, 方差已知时

设y py1, …, ynq为一系列独立同分布的观测值, yi Npθ, σ2q, i

1, …, n, 其中σ2已知. 则y¯ ∑ni1 yi{n为充分统计量, 且

y¯|θ Npµ, σ2{nq.

由此不难将多观测值情形转化为单一观测值情形来研究, 从而得到

ppθ|y1, …, ynq ppθ|y˜q Npθ|µn, τ

2

nq, (11-3.9)

其中

µn

1

τ20

µ0  

n

σ2

y

1

τ20

 

n

σ2

, (11-3.10)

1

τ2n

1

τ20

 

n

σ2

. (11-3.11)

386 第十一章 贝叶斯统计分析

未知观测值y˜的预测分布为

y˜|y¯ Npµn, σ

2

  τ2nq. (11-3.12)

值得一提的是, 在先验精度较低或样本容量较大时(即τ20 Ñ 8, n固定; 或n Ñ

8, τ20固定), 则有如下近似

ppθ|yq Npθ|y¯, σ2{nq.

此即无信息均匀先验ppθq91下的后验分布, 这是容易理解的.

3) 多个正态观测值, 均值已知时

若y1, . . . , yn iid Npθ, σ2q, 其中θ已知. 此时似然函数为

ppy|σ2q9pσ2qn{2 expp

n

2σ2

s2µq, (11-3.13)

其中

s2µ

1

2

n∑

i1

pyi θq

2

为充分统计量. 由于σ2的共轭先验分布为逆伽玛分布IGapα, βq, 即

ppσ2q9pσ2qpα 1q exppβ{σ2q,

在此先验下, σ2的后验分布为

ppσ2|s2µq9pσ

2

q

pα n2 1q exp

(

β   s2µ{2

σ2

)

,



σ2|s2µ IGa

(

α 

n

2

, β  

s2µ

2

)

. (11-3.14)

4) 泊松分布

单位时间内、单位面积或单位空间中某事件(设为A)发生的次数常可用泊

松分布来刻划,例如单位时间内飞机起飞或下降的次数、单位时间内某交通路

口通过的车辆数、单位面积内的害虫数等等都可用泊松分布来描述.

设y py1, . . . , ynq为来自泊松分布Poissonpθq的容量为n的样本, 参数θ表

11.3 单参数贝叶斯统计分析 387

示事件出现的频率(强度). 则y py1, . . . , ynq的似然函数为:

Lpθ|yq ppy|θq

n∏

i1

1

y!

θyieθ

9 θtpyqenθ, (11-3.15)

其中tpyq ∑ni1 yi为充分统计量. 由于θ的共轭先验分布为伽玛分布Gapα, βq,



ppθq9eβθθα1

与似然函数对照发现,我们可以将先验理解为: 在β次先验观察中事件A出现

了α 1次.

由此容易得到θ的后验分布

θ|y Gammapα  ny¯, β   nq, (11-3.16)

其中y¯ tpyq{n.

一个自然的推广是: yi Poissonpxiθq, i 1, 2, , n. 在流行病学研究

中θ为某疾病的发病率, xi为个体i的暴露(可能受感染)时间,这时有似然函数

Lpθ|yq ppy|θq9 exp

{

logpθq

n∑

i1

yi θ

n∑

i1

xi

}

. (11-3.17)

θ仍取共轭先验Gapα, βq, 则其后验分布为

θ|y Gamma

(

α 

n∑

i1

yi, β  

n∑

i1

xi

)

. (11-3.18)

5) 指数分布

以一定的频率θ独立出现的事件的时间间隔(等待时间)可用指数分布来描

述,许多产品的寿命也可用指数来刻划, 其密度函数为

ppy|θq θ exp{yθ}, y ¡ 0,

388 第十一章 贝叶斯统计分析

记为Expp1{θq. 指数分布具有独特的无记忆性, 即

Prpy ¡ t  s|y ¡ s, θq Prpy ¡ t|θq @s, t ¡ 0.

对于数据y py1, . . . , ynq, yi Expp1{θq, 基于共轭先验分布Gapα, βq, 得θ的后

验分布

θ|y Gamma

(

α  n, β  

n∑

i1

yi

)

. (11-3.19)

§11.4 多参数贝叶斯统计分析

许多实际的统计问题都含有多个未知参数, 但人们通常只对其中的一部分

参数感兴趣, 其余参数称为“讨厌”参数. 在处理这类问题时, 贝叶斯方法与其

他传统的推断方法有明显的优势.

11.4.1 方法概述

假设参数(向量)θ由两部分组成, θ pθ1, θ2q, 其中θ1为感兴趣的参数,θ2为

讨厌参数. 设数据y的分布为ppy|θ1, θ2q, θ的先验分布为ppθ1, θ2q, 则θ1与θ2联合

后验密度函数为

ppθ1, θ2|yq9ppy|θ1, θ2qppθ1, θ2q. (11-4.1)

在联合后验密度函数中对θ2求积分, 得到θ1的边际后验密度

ppθ1|yq



ppθ1, θ2|yqdθ2



ppθ1|θ2, yqppθ2|yqdθ2 (11-4.2)

11.4.2 正态分布参数中的贝叶斯分析

设y py1, , ynq iid Npµ, σ2q, 其中µ和σ2均未知. 在此仅考虑独立无信

息先验

ppµ, σ2q9pσ2q1.

11.4 多参数贝叶斯统计分析 389

此时pµ, σ2q的联合后验密度为

ppµ, σ2|yq 9 σn2 exp

{

1

2σ2

n∑

i1

pyi µq

2

}

σn2 exp

{

1

2σ2

rpn 1qs2   npy¯ µq2s

}

其中样本均值y¯与样本方差s2为充分统计量. 上式对µ求积后得到

ppσ2|y¯, s2q9σpn 1q{2 exp

{

1

2σ2

rpn 1qs2s

}

, (11-4.3)

即σ2的后验服从倒伽玛分布IGapn1

2

,

pn1qs2

2

q.

在实际问题中总体均值µ通常是感兴趣的参数. 将联合后验密度对σ2求积,

得到

ppµ|y¯, s2q9

[



npy¯ µq2

pn 1qs2

]

n{2

,



µ y¯

s{



n

∣∣∣∣ y¯, s2 tpn 1q. (11-4.4)

11.4.3 随机模拟方法

在大多数的实际问题中, 像上面正态分布那样能够得到感兴趣参数的边际

后验分布是很少的. 然而我们可以通过随机模拟的方法获得边际后验分布的样

本. 由公式(11-4.2), 得到θ1的边际后验样本的抽样方法为:

第一步: 从ppθ2|yq中抽取θ2;

第二步: 从ppθ1|θ2, yq中抽取θ1.

上述二步不断重复即可得到所需要的后验样本.

例 11.4.1 除了从t分布(11-4.4)直接抽取样本外,我们也可按下面的二

步简接获得µ的后验样本:

第一步: 按倒伽玛分布从ppσ2|yq中抽取σ2;

第二步: 从ppµ|σ2, yq Npy¯, σ2{nq中抽取µ.

390 第十一章 贝叶斯统计分析

有时可能遇到边际后验ppθ2|yq无法得到显式表示, 特别是在多参数贝叶斯

分析中, 这时经常采用Gibbs抽样法. 在两个参数θ1, θ2场合, 只需要改变一下上

面的第一步. 整个算法变成

第一步: 给定θ1的初始值;

第二步: 从ppθ2|θ1, yq中抽取θ2;

第三步: 从ppθ1|θ2, yq中抽取θ1.

将此抽取过程重复进行, 即得到一系列基于后验分布的θ1与θ2的后验样本. 为

保证独立性, 在使用之前应舍去没有达到平衡状态的那些样本.

最后, 若上述一维的边际后验分布或条件后验分布不易抽样, 则可以采用

近似的离散化格式点抽样方法, 它也适用于二维分布的抽样, 其实施方法见下

面的例子.

11.4.4 一个实例

除正态分布等少数模型之外, 一般多参数模型都无法得到后验分布的显式

表示. 在实际应用中, 经常采用随机模拟的方法来解决这类问题. 下面给出一

个在新药开发中动物试验的实例.

例 11.4.2 在药物以及其他一些化学合成剂的开发过程中, 需做毒性测

试, 即在一批动物身上注射不同剂量的药物, 设动物的反应由两个对立的结果

来描述, 例如“生存”或“死亡”. 此类试验的数据可以表示为

pxi, ni, yiq, i 1, 2, , k,

其中k为动物的分组数, ni表示第i批动物的动物个数, xi表示第i批动物接受的

剂量水平(通常以对数形式出现), yi表示第i批动物服用剂量xi后出现阳性反应

的动物数(如“死亡”或“有肿块”的动物数). 现有一批动物共20只分为4组, 每

组注射相同的剂量. 具体数据见表11.1. 如何根据试验数据判断该药物的毒性

呢?

解 我们在无信息先验下分步讨论模型的建立与贝叶斯分析.

模型建立

对于第i批动物, ni个动物样本的试验结果可认为相互独立, 由此可导出二

11.4 多参数贝叶斯统计分析 391

表 11.1 动物的注射药物后的阳性反应

剂量plogpg{mlqq 动物个数 死亡个数

-0.86 5 0

-0.30 5 1

-0.05 5 3

0.73 5 5

项分布抽样模型

yi|θi Binpni, θiq,

其中θi死亡率. 同时θ1, , θ4也可认为相互独立, 且在许多场合中可假

设θi与xi有如下线性关系

logitpθiq logp

θi

1 θi

q α  βxi. (11-4.5)

回归分析

为考查动物的死亡率与接受药物新剂量的关系(11-4.5)是否合理, 我们考

查logitpyi{niq对xi, i 1, 2, 3, 4的回归关系. 由于y1 0和y4 5时无法求

得logitpyi{niq, 故适当微调: y1 0.01, y4 4.99. R程序如下

> logit<-function(x){

y=log(x/(1-x))

return(y)

}

> bioassay<-data.frame(

> x <- c(-0.86, -0.30, -0.05, 0.73),

> n <- c(5, 5, 5, 5),

> y <- c(0.01, 1, 3, 4.99),

> r <- logit(y/n))

> plot(x,r)

> lm.bioassay<-lm(formula = r~x)

> abline(lm.bioassay)

392 第十一章 贝叶斯统计分析

> summary(lm.bioassay)

回归分析的结果为:

Call:

lm(formula = r ~ x)

Residuals:

1 2 3 4

-0.2190 0.2572 0.1069 -0.1450

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 0.6870 0.1383 4.967 0.038226 *

x 7.7681 0.2368 32.810 0.000928 ***



Signif. codes: 0‘***’0.001‘**’0.01‘*’0.05‘.’0.1‘ ’1

Residual standard error: 0.2707 on 2 degrees of freedom

Multiple R-Squared: 0.9981, Adjusted R-squared: 0.9972

F-statistic: 1076 on 1 and 2 DF, p-value: 0.0009277

图11.5和回归分析的结果都表明上述假设是合理的. 且得到α和β的估计分别

为αˆ 0.69和βˆ 7.77, 标准误差分别为0.1和0.24.

贝叶斯估计

若关于参数α和β没有可以利用的先验信息, 则采用无信息先验ppα, βq91.

这时后验分布即为似然函数

ppα, β|y, n, xq 9 ppα, βqppy|α, βq

9

k∏

i1

p

eα βxi

1  eα βxi

q

yi

p

1

1  eα βxi

q

niyi (11-4.6)

我们用后验众数作为参数α和β的点估计, 也即极大似然估计, 这可直接利用软

件包stats4中的函数mle( )求得, 下面的R程序先定义后验密度函数和负对数

似然函数, 最后调用函数mle( ), 具体代码为:

11.4 多参数贝叶斯统计分析 393

−0.5 0.0 0.5



6



4



2

0

2

4

6

Relation between logit death rate with dosage level

x

r

图 11.5 由θ的后验分布产生的1000个随机样本的直方图.

> bioassay.post<-function(alpha=0.1,beta=5){

> k<-4

> x <- c(-0.86, -0.30, -0.05, 0.73)

> n <- c(5, 5, 5, 5)

> y <- c(0, 1, 3, 5)

> prod<-1

> prod <- prod((exp(alpha+beta*x)/(1+exp(alpha+beta*x[i])))^y

*(1/(1+exp(alpha+beta*x)))^(n-y))

> return(prod)}

> mlpost<-function(alpha=0.1,beta=5){-log(bioassay.post(alpha,beta))}

> mle(mlpost)

得到的贝叶斯估计(极大似然估计)为αˆ 0.85和βˆ 7.75.

394 第十一章 贝叶斯统计分析

后验密度及离散化抽样

由(11.4.4)无法得到α和β的后验分布, 因而无法得到相应的后验样

本. 我们这里介绍一种连续密度的格子点离散化方法. 我们先

画出在取值范围pα, βq P r5, 10s r10, 40s的等高线图, 等高线分

为0.05, 0.15, , 0.95共10水平, R程序如下:

> modedensity<-bioassay.post(0.87,7.91)

> alphax<-seq(-5,10,length=1000)

> betay<-seq(-10,40,length=1000)

> post<-outer(alphax,betay,’bioassay.post’)

> par(mfrow=c(1,2))

> contour(alphax,betay,post,

levels=seq(0.05,0.95,length=10)

*modedensity, xlim=c(-5,10),

ylim=c(-10,40), xlab=quote(alpha),

ylab=quote(beta), drawlabels= FALSE)

运行得到图11.8(a), 此图表明α与β有一定的正相关性.

对联合后验密度在pα, βq P r5, 10s r10, 40s的1000 1000个格子点处

离散化并抽样的步骤为:

1) 计算ppα, β|y, n, xq在所有格子点处的值;

2) 正则化使∑

α



β

ppα, β|yq 1得到离散的联合后验分布列.

3) 由公式ppα|yq ∑

β

ppα, β|yq 得到α的边际后验分布;

4) 从离散的ppα|yq中抽取1000个α;

5) 对抽得的每一个α, 由离散化条件分布ppβ|α, yq(也需要正则化)抽取相应

的β值.

获得1000个后验样本点及相应的散点图(见图11.8)的R程序如下(续上):

> post<-post/sum(post)

> posta<-apply(post,MARGIN=1,FUN=sum)

11.5 分层贝叶斯统计分析 395

> w<-posta/sum(posta)

> n<-1000

> ra<-rep(0,n)

> rb<-rep(0,n)

> for(j in 1:n){

ra[j]<-sample(alphax,1,replace=T,prob=w)

postb<-bioassay.post(ra[j],betay)

wb<-postb/sum(postb)

rb[j]<-sample(betay,1,replace=T,prob=w)

}

> plot(ra, rb, xlim=c(-5,10), ylim=c(-10,40),

xlab=quote(alpha), ylab=quote(beta))

存活率为50%的剂量的估计

在此类生物鉴定试验中, 人们通常对导致50%存活率的剂量大小感兴趣,

记为LD50. 在本例的logit模型中, 由

E

(

yi

ni

)

logit1pα  βxiq 0.5

解出xi即得LD50 α{β. 利用上面抽取的α, β的1000个后验样本, 可以得

到LD50的(离散)后验分布, 其频率直方图图(见11.7)可由下面的R程序得到:

> ld50 <- -ra/rb

> hist(ld50,freq=FALSE,breaks=1000,xlim=c(-0.8,0.5),

axes = TRUE, xlab=”LD50″,main=””)

α, β 及LD50的后验分位数如表11.2. 由这些结果可以得到动物的死亡率与接

受的剂量成正比(因为β ¡ 0), 而有50%受试动物死亡的剂量为expp0.11q

0.90(g/ml).

¥

§11.5 分层贝叶斯统计分析

许多实际问题都会涉及多个参数,而且这些参数会呈现出某种相关性. 统

396 第十一章 贝叶斯统计分析

(a)

−5 0 5 10



10

0

10

20

30

40

−5 0 5 10



10

0

10

20

30

40

(b)

rb

图 11.6 (a)α, β基于后验密度的等高图(b)从后验密度中重新抽取1000对样本

的散点图.

计上可以用一个联合概率分布来刻划参数之间的相依性. 例如, 在一个心脏

病治疗的研究中, 考查J个医院使用某种药物后的存活率θj , j 1, 2, . . . , J. 可

以认为由数据得到的这些θj的估计应该是相互联系的. 在贝叶斯统计分析中,

这种参数间的相关性可以通过假设θj , j 1, 2, . . . , J为来自一个共同的先验分

布(称为参数的总体分布)的样本来实现,即θ|φ iid ppθ|φq, 其中φ为未知超参数,

其本身有先验分布ppφq. 这就是分层贝叶斯建模的思想.

这一节主要以数据yj|θj为正态分布Npθj , σ2j q, 其中方差σ2j已知, 均值参数

具有正态共轭先验θj|φ Npµ, τ2q为例介绍分层模型的贝叶斯推断及其应用.

11.5 分层贝叶斯统计分析 397

表 11.2 α, β, LD50的后验分位数

2.5% 25% 50% 75% 97.5%

α -0.6 0.6 1.3 2.0 4.1

β 3.5 7.5 11.0 15.2 26.0

LD50 -0.28 -0.16 -0.11 -0.06 0.12

LD50

D

en

si

ty

−0.6 −0.4 −0.2 0.0 0.2 0.4

0

1

2

3

4

图 11.7 LD50的后验频率直方图.

11.5.1 分层模型的建立及其贝叶斯推断

模型的建立

考虑J组试验, 由试验j得到数据pyj1, . . . , yjnj q, 并综合为一个统计量yj(通

常为充分统计量). 试验j所涉及的参数(向量)为θj . 分层贝叶斯模型由三部分

398 第十一章 贝叶斯统计分析

组成:

1) 数据的分布(似然函数):

yj|θj ppy|θjq

令y py1, y2, . . . , yJq, θ pθ1, θ1, . . . , yJq, 从而得到

y|θ

J∏

j1

ppyj|θjq. (11-5.1)

2) 参数θj的先验分布: θj , j 1, 2, . . . , J 为来自同一共分布ppθ|φq的样本,

因此

θ|φ

J∏

j1

ppθj|φq. (11-5.2)

3) 超参数的先验分布:

φ ppφq. (11-5.3)

实际上这是一个双层贝叶斯模型, 我们还可引入更多层次的贝叶斯模型. 它也

可视为一个多参数的贝叶斯模型, 但与我们前面讨论的多参数模型不同的是:

1) 在多参数的贝叶斯模型中超参数φ是通过历史数据估计(这时称为经验贝

叶斯分析)或通过专家经验给定, 而在多层贝叶斯模型中pθ, φq都是模型的

参数, 尽管θ为主要关心的参数;

2) 在多参数的贝叶斯模型中参数θ1, θ2, . . . , θJ通常假设为独立的, 没有相关

的结构, 而在多层贝叶斯模型中θ1, θ2, . . . , θJ之间存在着一种相关性, 这

种相关性是通过其先验分布来刻划的.

由(11-5.1)、(11-5.2)和(11-5.3)得pθ, φq的联合后验密度

ppθ, φ|yq 9 ppθ, φqppy|θ, φq

9 ppφqppθ|φqppy|θq. (11-5.4)

上式第二行是由于y仅依赖于θ,或者说φ仅通过θ影响y.

θ的统计推断

由多参数贝叶斯模型, 我们主要关心参数θ的统计推断和某一试验j下y的

11.5 分层贝叶斯统计分析 399

预测. 由(11-5.4), θ的后验分布为

ppθ|yq9



ppθ|φ, yqppφ|yqdφ (11-5.5)

其中ppθ|φ, yq对于共轭先验分布容易得到, 为给定φ下θj的共轭后验分布的乘

积, 而由条件概率密度计公式, ppφ|yq可表示为

ppφ|yq

ppθ, φ|yq

ppθ|φ, yq

. (11-5.6)

此式可避开积分计算: ppφ|yq ∫ ppθ, φ|yqdφ. 因此关于θ的推断(抽样)可按下

面的二步进行:

第1步: 由后验边际分布ppφ|yq推断(抽取)φ;

第2步: 视φ为已知, 由条件后验分布ppθ|φ, yq推断(抽取)θ.

预测

通常人们可能关心两类后验预测, 其一是基于现有的数据(试验), 这是一

类常见的后验预测; 其二是基于新的试验, 当试验环境(协变量) 不同时考试这

种预测.

ˆ 基于现有试验的预测: 现有试验的效应为θ pθ1, . . . , θJq, 这时抽样步骤

为:

1) 从ppφ|yq中抽取φ;

2) 对于给定j P p1, 2, . . . , Jq, 从ppθj|φ, yq中抽取θj ;

3) 从ppy|θjq中抽取y˜.

ˆ 基于新试验的预测: 这时需要先获得试验的效应θ˜, 抽样步骤变为

1) 从ppφ|yq中抽取φ;

2) 从参数(效应)的总体分布ppθ|φq中抽取新的参数θ˜ pθ˜1, . . . , θ˜J˜q;

3) 从ppy|θ˜q中抽取y˜.

400 第十一章 贝叶斯统计分析

11.5.2 N-N模型与应用

问题的叙述

数据与参数都服从正态分布的多层贝叶斯模型称为N-N模型. 我们先从经

典的统计分析中引出这个问题.

考查J个试验, 测得数据为yij , 设

yij

iid

Npθj , σ

2

q, i 1, 2, . . . , njpj 1, 2 . . . , Jq (11-5.7)

其中方差σ2已知. 则样本均值y¯.j 1nj

∑nj

i1 yij为θj的充分统计量, 有分布

y¯.j | θj Npθj , σ

2

j q, (11-5.8)

其中σ2j σ

2

nj

.

现在我们考查某个特定θj的估计. 我们可想到两种估计:

1) 使用单个y.j进行估计: θˆj y.j 这时当nj很小时显然是不合理的, 因为它

的精度会很低.

2) 使用合并数据的估计, 即将J个试验的条件和对像没有多少差异, 即认

为θ1 θJ , 则

θˆj y¯..

∑J

j1

1

σ2j

y¯.j∑J

j1

1

σ2j

.

到底选用哪一个,可通过J个组(试验)下θj , j 1, 2, . . . , J的差异的方差分

析(F检验)进行. 设τ2为θj , j 1, 2, . . . , J的(先验)方差. 为方便起见,在此仅

考虑J组试验是均衡的, 即nj n, σ2j σ2, j 1, 2, . . . , J. 则理论上,F检验的

方差分析表可表示为

由此我们得出:

1) 如果组间平方和与组内平方和之比显著大于1,就认为θj , j

1, 2, . . . , J之间有显著差异, 这时就取θˆj y.j ;

2) 如果组间平方和与组内平方和之比并不显示大于1,就认为θj , j

1, 2, . . . , J之间没有有显著差异, 即F检验无法拒绝H0 : τ 0, 这时

就取θˆj y¯…

11.5 分层贝叶斯统计分析 401

表 11.3 F检验理论上的方差分析表

自由度 SS MS E(MS|σ2, τ)

组间 J 1 ∑i∑jpy¯.j y¯..q2 SSJ 1 nτ 2   σ2

组内 J(n-1) ∑i∑jpy¯ij y¯.jq2 SSJpn 1q σ2

总和 Jn-1 ∑i∑jpy¯ij y¯..q2 SSJn 1 σ2

实际上, 我们还可提出第三种估计

θˆj λj y¯.j   p1 λjqy¯..,

其中0 ¤ λj ¤ 1. 它是前二种估计的加权平均,它可视为J个组平均之间有一

定的联系或存在一定的相依结构. 与方差分析表比较发现, λj 1对应于τ2很

大, 在此视为8, λj 0对应于τ2 0, 而0 ¤ λj ¤ 1应对应一个较适中的τ2.

采用分层贝叶斯模型恰能获得这种折衷的估计, 且能包含前二种特殊的情形,

由此进一步假设θj , j 1, 2, . . . , J 为来自正态分布Npµ, τ2q的样本, 而超参

数pµ, τq服从先验ppµ, τ 2q. θj , j 1, 2, . . . , J之间的相依性就是通过引入这个

共同的先验分布来实现的.

为方便起见令y.j yj , 则N-N的数据与参数分别为y py1, y2, . . . , yJq,

θ pθ1, θ2, . . . , θJq. 这样N-N分层贝叶斯模型可表示为

ppy|θq

J∏

j1

Npyj|θj , σ

2

j q (11-5.9)

ppθ|µ, τq

J∏

j1

Npθj|µ, τ

2

q (11-5.10)

pµ, τq ppµ, τq (11-5.11)

我们仅考虑ppµ|τq91, ppτq91, 所以ppµ, τq ppµ|τqppτq91. 由此得

402 第十一章 贝叶斯统计分析

到pθ, µ, τq的后验分布

ppθ, µ, τ |yq 9 τJ exp

[

1

2



j

1

τ2

pθj µq

2

]

exp

[

1

2



j

1

σ2j

pyj θjq

2

]

(11-5.12)

下面我们列出一些结果

1) 给定µ, τ, y下, θ的分布

θj|µ, τ, y Npθˆj , Vjq, (11-5.13)

其中

θˆj

1

σ2j

yj  

1

τ2

µ

1

σ2j

 

1

τ2

, Vj

1

1

σ2j

 

1

τ2

2) 给定y下, µ, τ的分布

ppµ, τ |yq 9

J∏

j1

Npyj|µ, σ

2

j   τ

2

q

9

J∏

j1

pσ2j   τ

2

q

1{2 exp

(

pyj µq

2

2pσ2j   τ2q

)

(11-5.14)

3) 给定τ, y下, µ的分布

µ|τ, y Npµˆ, Vµq, (11-5.15)

其中

µˆ

∑J

j1

1

σ2j τ

2 yj∑J

j1

1

σ2j τ

2

, Vµ

1∑J

j1

1

σ2j τ

2

4) 给定y下, τ的分布

ppτ |yq

ppµ, τ |yq

ppµ|τ, yq

9

∏J

j1Npyj|µˆ, σ

2

j   τ

2

q

Npµˆ|µˆ, Vµq

11.5 分层贝叶斯统计分析 403

9 V 1{2µ

J∏

j1

pσ2j   τ

2

q

1{2 exp

(

pyj µˆq

2

2pσ2j   τ2q

)

.(11-5.16)

可见, θj的估计恰为单个数据的估计yj与µ的加权平均, 而µ的估计为各θj , j

1, 2, . . . , J的”合并估计”. 若τ 0, θj的估计即为基于单个数据的估计, 而

当τ 8时, θj的估计即为µ的估计.

由此可得N-N模型的抽样方法:

1) 按格子点离散化方法由公式(11-5.16)从ppτ |yq抽取τ ;

2) 按正态分布由公式(11-5.15)从ppµ|τ, yq抽取µ;

3) 按独立正态性由公式(11-5.13)从Npθˆj , Vjq抽取θj , j 1, 2, . . . , J .

案例分析

例 11.5.1 SAT考试旨在真实地考察学生经过多年教育之后所获取的

知识与能力, 同时极力避免因短期突击而带来的成绩提高. 为研究短期考前

培训是否能提高SAT(学校智能测试)的成绩, 现对8所进行过此类培训的高中

进行独立随机试验, 经过协方差调整(以消除其它因素的影响)后得到的数据如

表11.4所示. 由于每个学校参加测试的学生数都至少有32人,因此可以认为yj

具有正态近似, 并用样本方差作为σ2j的值. 现要研究8所学校短期考前培训的真

实效果, 并进行比较.

解 我们用N-N模型逐步展开讨论:

1) 二个极端的估计: 考虑学校A的培训效应, 若认为8个学校没有关系, 则用

单个的数据估计, 即θˆ1 28(标准差为15); 若认为8个学校的培训效应没

有差异, 则使用合并估计(pooled estimate):

θˆ1 µˆ

∑8

j1pyj{σ

2

j q∑8

j1p1{σ

2

j q

7.9(标准差为=4.2).

2) 初步分析: 一些学校的培训呈现了一定的效果(18到28之间), 一些学校则

效果较小, 还有的有相反的效果. 而且较大的标准误差意味着各平均效

应θj的置信区间会有较大的重叠,即统计上很难区分它们. 然而, 经典的

统计分析却拒绝各θj , j 1, 2, . . . , J相等的假设. 因此,上面的二个估计

404 第十一章 贝叶斯统计分析

表 11.4 SAT成绩

学校 培训效果 培训效果估

估计值 计值标准误

A 28 15

B 8 10

C -3 16

D 7 11

E -1 9

F 1 11

G 18 10

H 12 18

都是不合理的. 下面用N-N多层贝叶斯模型给出一个介于二者之间的一

个折衷的估计.

3) N-N多层贝叶斯分析: 套用N-N模型对此问题进行分析. 现在的模型为

yj|θj , σ

2

j Npµj , σ

2

j q

其中θjpj 1, 2, , 8q即为8所学校各自短期培训的”真实”效果, 且

θj|µ, τ Npµ, τ

2

q,

其中未知超参数µ与τ相互独立, 并假设ppµ, τq91.

ˆ τ的后验分布: 利用网格法画出τ的边际后验密度ppτ |yq的函数, R程

序如下

> y<-c(28, 8, -3, 7, -1, 1, 18 ,12)

> sd<-c(15, 10, 16, 11, 9, 11, 10, 18)

> v<-sd*sd

> tau<-c(0:3000)/100

> tausq<-tau*tau

> ptau.y<-rep(0,3001)

11.5 分层贝叶斯统计分析 405

> vmu<-rep(0,3001)

> muhat<-rep(0,3001)

> for(i in (1:3001)){

vmu[i]<-1/sum(1/(tausq[i]+v))

muhat[i]<-vmu[i]*sum(y/(tausq[i]+ v))

ptau.y[i]<-sqrt(vmu[i]*prod(1/(tausq[i]+v)))

*prod(exp(-0.5*(y-muhat[i])

*(y-muhat[i])/(tausq[i]+v)))

}

> plot(tau,ptau.y,type=”l”,yaxt=”n”,xlab=quote(tau))

得到图11.8. 由图11.8可知, τ值趋近于0时最为合理, 且有

0 5 10 15 20 25 30

τ

图 11.8 边际后验密度函数ppτ |yq.

Prpτ ¡ 10q   0.5, P rpτ ¡ 25q 0.

406 第十一章 贝叶斯统计分析

ˆ 给定τ下各效应的平均水平与波动: 为进一步了解τ的性质, 现考虑

在τ给定下的后验均值Epθj|τ, yq及其相应标准差Sdpθj|τ, yq. 经计算

得到

Epθj|τ, yjq

1

σ2j

yj  

1

τ2

µˆ

1

σ2j

 

1

τ2

,

Sdpθj|τ, yjq

1

1

σ2j

 

1

τ2

 

(

1

τ2

1

σ2j

 

1

τ2

)2

Vµ,

其中

µˆ

J∑

j1

1

σ2j τ

2 yj

J∑

j1

1

σ2j τ

2

, V 1µ

J∑

j1

1

σ2j   τ

2

.

根据上述公式对两者作图比较. R程序如下(接上段程序):

> eth.tauy<-matrix(rep(0,24008),8,3001)

> sdth.tauy<-matrix(rep(0,24008),8,3001)

> for (j in (1:8)){

> for (i in (1:3001)){

eth.tauy[j,i]<-(y[j]/v[j]+muhat[i]/tausq[i])

/(1/v[j]+1/tausq[i])

sdth.tauy[j,i]<-sqrt(((1/tausq[i])/(1/v[j]+1/tausq[i]))

*((1/tausq[i])/(1/v[j]+ 1/tausq[i]))

*vmu[i]+1/(1/v[j]+1/tausq[i]))

}

}

> par(mfrow=c(1,2))

> taux<-matrix(rep(tau,8),8,byrow=T)

> matplot(t(taux),t(eth.tauy), ylim=(c(-5,30)),

type=”l”, xlab=”tau”,lty = 1:8, lwd = 1,col=1,

ylab=”Estimate Treatment Effects”,

main=”Conditional posterior mean”)

> School<-c(“A”,”B”,”C”,”D”,”E”,”F”,”G”,”H”)

> text(x=rep(20,8),y=t(eth.tauy)[2400,],School)

> matplot(t(taux),t(sdth.tauy), ylim=(c(0,20)),

11.5 分层贝叶斯统计分析 407

type=”l”, xlab=”tau”,lty = 1:8, lwd = 1, col=1,

ylab=”Posterior Standard Deviations”,

main=”Conditional posterior SD”)

> text(x=rep(20,8),y=t(sdth.tauy)[2400,],School)

0 5 10 15 20 25 30



5

0

5

10

15

20

25

30

Conditional posterior mean

τ

Es

tim

at



Tr

ea

tm

en

t E

ffe

ct

s

A

B

C

D

E

F

G

H

0 5 10 15 20 25 30

0

5

10

15

20

Conditional posterior SD

τ

Po

st

er

io

r S

ta

nd

ar



De

via

tio

ns

A

B

C

D

E

F

G

H

图 11.9 条件后验均值Epθj|τ, yjq与标准差Sdpθj|τ, yjq..

运行得到图11.9. 图11.9表明, 当τ取最合理的值(即为0)时, 8个不同

学校的效应值θj的均值与标准差都几乎相同, 而随着τ不断变大, 它

们之间的差异也变得明显起来, 且与各自最初的试验数据相接近. 因

此, 仅根据τ无法得到满意的结果.

ˆ 后验抽样: 下面的R矩阵中x放置抽样的结果, 其中第1列xr, 1s放

置ppτ |yq的样本,第1列xr, 2s放置ppµ|τ, yq的样本, 第3-10列xr, js, j

408 第十一章 贝叶斯统计分析

3, 4 . . . , 10放置ppθj|τ, µ, yq, j 1, 2, . . . , 8的样本.

> m<-200

> ptau.y<-ptau.y/(sum(ptau.y))

> tausamp<-sample(tau,m,replace=T,prob=ptau.y)

> tausamp<-sort(tausamp)

> tauid<-tausamp*100 + 1

> x<-matrix(rnorm(m*10,0,1),m,10)

> x[,1]<-tausamp

> x[,2]<-muhat[tauid] + sqrt(vmu[tauid])*x[,2]

> for(j in (1:8)) {

thmean<-(y[j]*x[,1]*x[,1]+v[j]*x[,2])/(v[j]+x[,1]*x[,1])

thsd<-sqrt(v[j]*x[,1]*x[,1]/(v[j]+x[,1]*x[,1]))

x[,j+2]<-thmean + thsd*x[,j+2]

}

> par(mfrow=c(1,2))

> hist(x[,2],breaks=c(-40:50),xlab=quote(mu),

yaxt=”n”,main=””)

> hist(x[,3],breaks=c(-20:60),xlab=”Effect in School A”,

yaxt=”n”,main=””)

画出了µ与θ1的后验密度的直方图, 见图11.10.

ˆ 后验推断: 对于每个θj的200个样本运用函数sort( )进行排序后,可

以得到相应的五个分位数. 由表11.5不难发现, 根据200个样本, 8个

学校实际培训效果的95%置信区间有很高的重叠性, 且其均值都处

于5至10的范围之内.

¥

§11.6 贝叶斯线性回归分析

11.6.1 模型的表示

本节主要就正态线性回归模型进行简单的讨论: 设y为响应变量,

x1, x2, . . . , xk为k个预测变量, β1, β2, . . . , βk为对应的回归系数. 对n个个体

进行观察, 第i个响应变量与预测变量的值分别为yi和xi pxi1, xi2, . . . , xikq,

11.6 贝叶斯线性回归分析 409

 

µ

 

−20 0 20 40

Effect in School A

 

−20 0 20 40 60

图 11.10 分别从ppµ|τ, yq及ppθ1|µ, τ, yq中抽取200个样本的频数直方图.

i 1, 2, . . . , n. 记y py1, y2, . . . , ynq1, β pβ1, β2, . . . , βkq1,

X px1, x2, . . . , xnq1



x11 x12 . . . y1k

x21 x22 . . . y2k

xn1 xn2 . . . ynk

 ,

这时正态回归模型可表示为

y|β, σ2,X NnpXβ, σ2Inq, (11-6.1)

或表示为

yi β1xi1   β2xi2   . . .  βkxik   ²i, i 1, 2, . . . , n, (11-6.2)

² p²1, . . . , ²nq

iid

Np0, σ2q.

410 第十一章 贝叶斯统计分析

表 11.5 θj的后验分位数

学校 2.5% 25% median 75% 97.5%

A -2. 6 9 15 32

B -5 4. 8 11 21

C -9 2 6 10 19

D -5 4 7 11 20

E -9 1 5 8 15

F -11 2 6 10 18

G -1 6 9 13 24

H -7 4 8 12 30

其中y称为观测向量, X称为设计阵, θ pβ, σ2q均为未知参数向量, In为单位矩

阵, Nnpµ,Aq为n元正态分布, µ为其均值向量, A为其协方差矩阵.

11.6.2 后验分布

为了进行贝叶斯分析, 还需要给出θ pβ, σ2q的先验分布, 在此我们仅对

未知参数进行无信息先验假设, 即

ppβ, σ2q9pσ2q1. (11-6.3)

基于多元正态分布的性质, 此模型的贝叶斯推断可以借鉴多参数模型的情况.

现将后验分布表示为

ppβ, σ2|yq ppσ2|yqppβ|σ2, yq. (11-6.4)

其中

β|σ2, y Nnpβˆ, Vβσ

2

q, (11-6.5)

σ2|y IGappn kq{2, S{2q, (11-6.6)

βˆ pX1Xq1X1Y, Vβ pX1Xq1, S pyXβˆqT pyXβˆq.不难发现, βˆ正是β的

最小二乘估计.

11.6 贝叶斯线性回归分析 411

因此按随机模拟的方法, 先由ppσ2|Y q抽取σ2, 再从ppβ|σ2, yq中抽取β, 便

能得到未知参数以及其函数的后验模拟值. 这可根据多元正态分布和逆伽玛分

布自行编程获得pβ, σ2q的后验样本. 但是在无信息先验假设下我们也可直接

利用R中的LearnBayes程序包(可在R社区下载)内的函数函数blinreg( )完

成pβ, σ2q的后验抽样.

11.6.3 回归拟合

有了pβ, σ2q的后验样本, 就可得到β的贝叶斯估计(如后验样本众数或后验

样本均值), 记为βˆ, 由此可得给定预测变量x处响应变量y的值

yˆ xβˆ.

如果β为β的后验抽样, 则xβ就是xβ的边际后验的抽样. LearnBayes程序

包中的函数blinregexpected( )可以用于获得这样的样本.

11.6.4 后验预测

由多参数贝叶斯模型知,给定预测变量x处, y的后验预测分布为

ppy˜|yq



ppy˜|β, σ2qppβ, σ2|yqdβσ2. (11-6.7)

因此y的后验预测样本可在上面获得的pβ, σ2q的后验样本的基础上, 再从正态

分布Npxβ, σ2q抽取y˜ 得到. LearnBayes程序包中的函数blinregpred( )可

以用于获得这样的后验预测样本. 显然, x处, y的回归拟合均值与预测均值都

为xβ.

下面通过一个实例来说明这些函数的使用.

例 11.6.1 (Ramsey and Schafer, 1997)LearnBayes程 序 包 中

的birdextinct数据集为过去几十年中在英国周围的16个岛屿上收集的62种鸟

的四类数据:

ˆ 在岛上的平均灭绝时间(TIME);

ˆ 平均筑巢数(NESTING);

ˆ 种群规模(SIZE), 分为“大”(用1表示)与“小”(用0表示)两类;

412 第十一章 贝叶斯统计分析

ˆ 栖息状态(STATUS), 分为“迁徙”(用1表示)与“久居”(用0表示)两类.

由命令

> data(birdextinct)

> attach(birdextinct)

> birdextict

得到数据(仅前后一部分)

species time nesting size status

1 Sparrowhawk 3.030 1.000 0 1

2 Buzzard 5.464 2.000 0 1

3 Kestrel 4.098 1.210 0 1

4 Peregrine 1.681 1.125 0 1

… … … … … … …

60 Starling 41.667 11.620 1 1

61 Pied_flycatcher 1.000 1.000 1 0

62 Siskin 1.000 1.000 1 1

研究目的是找出该地区鸟类的灭种时间与其余三个量之间的关系.



1) 预测变量的显著性: 按习惯, 用y表示响应变量TIME, x1表示预测变

量NESTING, x2表示预测变量SIZE, x3表示预测变量STATUS. 由于前

期分析中发现变量y严重右偏,因此对其进行对数处理. 最终将此问题归

为线形回归模型

logpyiq β0   β1xi1   β2xi2   β3xi3   ²i,

²i

iid

Np0, σ2q

首先用函数lm( )进行最小二乘拟合. R命令为

> logtime=log(time)

> fit=lm(logtime ~ nesting+size+status,

data=birdextinct, x=TRUE, y=TRUE)

> summary(fit)

11.6 贝叶斯线性回归分析 413

其中x=TRUE, y=TRUE是为了让设计矩阵和响应变量成为fit这个结构的

一部分, 便于在后面的函数中引用. 输出的主要结果为

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 0.43087 0.20706 2.081 0.041870 *

nesting 0.26501 0.03679 7.203 1.33e-09 ***

size -0.65220 0.16667 -3.913 0.000242 ***

status 0.50417 0.18263 2.761 0.007712 **



Signif. codes: 0‘***’ 0.001‘**’ 0.01‘*’ 0.05‘.’ 0.1‘ ’ 1

Residual standard error: 0.6524 on 58 degrees of freedom

Multiple R-Squared: 0.5982, Adjusted R-squared: 0.5775

F-statistic: 28.79 on 3 and 58 DF, p-value: 1.577e-11

结论: 回归方程为

y 0.43087  0.2650×1 0.6522×2   0.5042×3.

且筑巢数NESTING(x1)是高度显著的,表明筑巢数越多,种类灭绝的时

间越长; 种群规模SIZE(x2)和栖息状态STATUS(x3)也显著, 但稍差一点,

表明大的鸟类其灭绝的时间短; 而迁徙的鸟类其灭绝的时间长.

2) 产生θ pβ, σq的后验样本: 命令

> theta.sample <- blinreg(fit$y,fit$x,5000)

得到β, σ的5000个后验样本.

说明: 函数blinregpy,X,mq 所需输入的变量为: 观测向量y,结构矩

阵X以及样本量m. 此函数的返回值分为两部分: 第一部分为β的m k矩

阵样本,其每一行分别代表该次抽样的βi值pi 0, 1, 2, . . . , kq, 第二部

分则为m个σ的样本值,且这两部分的值被赋予变量名beta和sigma. 在

此m 5000, k 3.

命令

> par(mfrow=c(2,2))

414 第十一章 贝叶斯统计分析

> hist(theta.sample$beta[,2], main=”NESTING”,

xlab=expression(beta[1]))

> hist(theta.sample$beta[,3], main=”SIZE”,

xlab=expression(beta[2]))

> hist(theta.sample$beta[,4], main=”STATUS”,

xlab=expression(beta[3]))

> hist(theta.sample$sigma, main=”ERROR SD”,

xlab=expression(sigma))

得到β1, β2, β3和σ的直方图(见图11.11).

NESTING

β1

Fr

eq

ue

nc

y

0.15 0.25 0.35 0.45

0

20

0

40

0

60

0

80

0

SIZE

β2

Fr

eq

ue

nc

y

−1.4 −1.0 −0.6 −0.2

0

20

0

60

0

10

00

STATUS

β3

Fr

eq

ue

nc

y

0.0 0.5 1.0

0

20

0

60

0

10

00

ERROR SD

σ

Fr

eq

ue

nc

y

0.5 0.6 0.7 0.8 0.9 1.0

0

50

0

10

00

15

00

图 11.11 β1, β2, β3和σ的后验频数直方图.

11.6 贝叶斯线性回归分析 415

3) 对参数的概括: 根据需要我们可以用后验样本对未知参数作出

推断,例如使用函数apply( )及quantile( ) 计算β与σ的后验样本

的5%、50%、95%分位数. R命令与结果如下

> apply(theta.sample$beta,2, quantile, c(.05,.5,.95))

X(Intercept) Xnesting Xsize Xstatus

5% 0.0885280 0.2049362 -0.9288856 0.1987654

50% 0.4275055 0.2642518 -0.6503313 0.4998742

95% 0.7789398 0.3247912 -0.3739433 0.8085352

> quantile(theta.sample$sigma,c(.05,.5,.95))

5% 50% 95%

0.5676048 0.6545287 0.7729843

若用summery命令观察最小二乘估计的结果不难发现,各未知参数的后

验中位数与该结果基本一致, 其原因在于,本例的贝叶斯推断采用了无信

息先验假设.

另外我们还可得到已知预测变量xi, i 1, 2, . . . , k(本例k 3)时回归均值与预

测值, 这部分作为练习(习题11.8)请读者完成. ¥

416 第十一章 贝叶斯统计分析

第十一章习题

11.1 试证明:对于二项分布Binpn, θq中的比率θ, 基于杰弗莱原则的先验分

布为贝塔分布Betap1{2, 1{2q.

11.2 考虑女性的出生比率θ, 设θ仅有二种可能: θ 0.5与θ 0.485,且θ的

先验分布是等可能的. 令y为n个出生的新生婴儿中女性的数目,试分别在1)

n 100, y 48, 2) n 1000, y 480 两种场合,分别求θ的后验分布、后验均

值(贝叶斯估计)和后验方差. 并对两者的差异进行说明.

11.3 设y|θ Binpn, θq, θ先信息先验分布Betap1, 1q, 试根据已有的试验结

果n, y预测下一次试验成功(y˜ 1)与失败(y˜ 0)的概率.

11.4 设y|θ Binpn, θq, θ先信息先验分布Betap1, 1q, 考查4种观测数据:

n 5, y 3、n 20, y 12、n 100, y 60、n 1000, y 600,

1) 求4种场合参数θ的经典极大似然估计;

2) 用R编程计算4种场合参数θ的贝叶斯估计和精度,并画图予以说明.

11.5 在例11.3.4中,若取θ的后验分布为共轭分布Betap50, 25q, 求θ、φ



θ

和logitpθq logpθ{p1 θqq 后验均值与95%后验置信区间.

11.6 给定如下的贝叶斯模型: 对于j 1, 2

yj1, , yjnj |µj , σ

2

j Npµj , σ

2

j q,

ppµj , σ

2

j q 9 σ

2

j ,

且pµ1, σ22q与pµ2, σ22q独立. 证明ps21{s22q{pσ21{σ22q的后验分布为F分布:

s21{s

2

2

σ21{σ

2

2

∣∣∣∣ y¯j , s2j , j 1, 2 F pn1 1, n2 1q.

11.7 设y py1, , ynq iid Npµ, σ2q, 其中µ和σ2均未知, 其先验取为无信

息先验ppµ, σ2q9pσ2q1.

1) 从正态分布Np100, 1q中产生1000个随机数;

2) 求参数µ和σ2的贝叶斯估计(后验众数);

3) 作出后验密度函数的等高线图;

11.6 贝叶斯线性回归分析 417

4) 用例(11.4.1)的算法产生pµ, σ2q的1000个后验样本,并作出散点图;

5) 用后验密度函数ppµ, σ2|yq的格子点离散近似方法产生pµ, σ2q的1000个后

验样本,并作出散点图,并与上一散点图并列放置在一张图上进行比较.

11.8 基于例11.6.1, 取如下4组预测变量(协变量)

表 11.6 协变量

编号 x1 x2 x3

A 4 0 0

B 4 1 0

C 4 0 1

D 4 1 1

1) 对于4组协变量分别得到回归均值xβ的样本, 并在同一个图中画出它们

的直方图(使用命令blinregexpected( ));

2) 对于4组协变量分别得到预测响应变量的预测值y˜的样本, 并在同一个图

中画出它们的直方图(使用命令blinregpred( ));

418 附录A 秩与结的介绍

附录 A 秩与结的介绍

设有独立同分布的样本X1, X2, . . . , Xn,不妨假设总体是连续型随

机变量,从而以概率1保证样本单元X1, X2, . . . , Xn互不相等,将样本单

元有小到大排列成X

p1q   Xp2q     Xpnq. 若Xi XpRiq,则

称Xipi 1, 2, , nq在X1, X2, , Xn中的秩为Ri, 简称Xi 的秩为Ri, Ri

1, 2, , n. 秩方法的基本思想是,用Xi的秩Ri代替Xi作统计推断. R

pR1, R2, . . . , Rnq以及由R构造的任意的统计量都称为秩统计量.

R服从离散分布, 它取n!个值. 由于样本X1, X2, , Xn独立同分

布, 所以R取任意一组值pr1, r2, . . . , rnq的概率是1{n!, 其中pr1, r2, , rnq

是p1, 2, . . . , nq的任意一个排列,这说明R服从均匀分布. 由此可见,秩统计

量的分布与总体服从什么样的分布无关,这就是称秩方法为非参数方法的原

因.

由于R服从均匀分布, 所以单个样本的秩Ripi 1, 2, . . . , nq也服从均匀分

布:P pRi rq 1n , i 1, 2, . . . , n, 从而有:

定理1 对任意的i 1, 2, . . . , n, 都有

EpRiq

n  1

2

,VarpRiq

n2 1

12

.

同样地, Ri和Rjpi jq的联合分布也是均匀分布

P pRi ri, Rj rjq

1

npn1q

,

其中ri rj , 从而有:

定理2 对任意的1 ¤ i   j ¤ n, 都有CovpRi, Rjq n  112 .

419

在许多情况下, 数据中有相同的数字, 称为结(tie). 结中数字的秩为它们

按升幂排列后位置的平均值. 比如数据2, 3, 3, 6, 10这五个数的秩分别为1, 2.5,

2.5, 4, 5. 也就是说, 处于第二和第三位置的两个3得到秩(2+3)/2=2.5. 这样

的秩称为中位秩. 如果结多了, 零分布的大样本公式就不准了, 因此需要修正.

420 附录B R的图形界面

附录 B R的图形界面

§B.1 R Commander

不同于S-PLUS, R自带的RGui没有提供专门的用于统计分析的菜单. 然

而John Fox基于R开发了一套进行基础统计分析的菜单驱动的分析系统, 称

为R Commander: A Basic-Statistics GUI for R. 有关的信息可参见John

Fox的主页.

http://socserv.mcmaster.ca/jfox/Misc/Rcmdr/index.html

下面简单介绍一下R Commander的安装、功能与使用等.

B.1.1 功能

R Commander是一个交互式菜单/对话框系统(menu/dialog-box inter-

faces),用于进行数据的读、写、转换及常用的统计分析.作者还添加了线

性与广义线性模型等统计分析工具.

B.1.2 (网络)安装

R Commander的网络安装比较方便, 但需要较长的时间. 其步骤如下:

ˆ 启动R. R缺省的安装为MDI模式, 建议改为SDI模式. 这可通过菜单“编

辑”下的“GUI选项”设置;

ˆ 点击菜单“程序包”=>“安装程序包”

ˆ 选择一个较快的镜像站点(CRAN Mirror)

ˆ 选择Rcmdr 安装. 期间会自动安装其它必要的程序包,时间较长!

B.1 R Commander 421

B.1.3 运行

1) 方法1: 在RGui下通过“程序包”=>“载入程序包”加载Rcmdr程序包;

2) 方法2: 在RGui的命令窗口键入命令

> library(Rcmdr)

此后就激活R Commander, 如图B-1所示.

图 B-1 R Commander的窗口.

B.1.4 结构与使用

R Commander窗口从上到下的组成如下:

422 附录B R的图形界面

ˆ 主 菜 单(Menu), 包 括: File, Edit, Data, Statistics, Graphs,

Models, Distribution, Tools 和Help.

ˆ 工具条(Tool bar), 包括: Data set, Edit data set, View data set

和Model.

ˆ 命令(代码)窗口(Scipt Window). 通过菜单所进行的操作的R代码在这

里显示出来,并立即被执行. 在这里你也可以修改已有的代码, 也可以

输入自己的命令, 按Scrip窗口右下方的Submit按钮就可发送命令让R执

行. 通过菜单进行的统计分析指向(激活)一个数据集. 一旦读入一个新的

数据集,它就被激活.

ˆ 输出窗口(Output Window): Scrip窗口中执行的命令将在Output窗口

中重新以红色显示出来, 并且给出相应的结果. 如果是作图, 则启动R

Graphics页面.

ˆ 信息窗口(Messages): 这里主要列出代码运行时出现的错误信息,关以

红色显示.

详细请阅读随R Commander安装的Help下的Introduction to R Commander:

Getting Started With the R Commander(John Fox, 2006).

在R Commander 中进行数据分析的步骤如下:

1) 通过Data菜单建立或载入数据. 之后在Data set左侧出现数据集的名字;

2) 通过菜单的Statistics, Graphs, Models, Distributions等进行有

针对性的分析. 菜单的有些项目是灰色的,表示此项当前不可使用.

具体参看帮助文件的菜单树(Menu tree).

§B.2 PMG

下面主要就PMG的功能、安装与基本的使用方法作一简单的介绍.

B.2.1 功能

PMG为另一款用于基础统计分析的菜单驱动分析系统, 但与R

Commander不同的是其动态的对话框, 即我们可以用鼠标的拖拉完成一系

列的作图与具体的统计分析工作,包括

B.2 PMG 423

\item 描述性统计分析

\item 数据的概括

\item 常规的统计推断

\item 线性回归分析

B.2.2 安装

PMG的安装与使用命令分别为:

> install.packages(“pmg”, dep=TRUE)

> require(pmg)

此后就激活PMG, 如图C-1所示.

图 B-2 PMG的窗口.

424 附录B R的图形界面

B.2.3 结构与使用

PMG窗口从上到下的组成如下:

ˆ 窗口上方第一排的主菜单(Menu): 包括File, Data, Plots, Tests,

Models 和Help.

ˆ 窗口上方第二排的工具条(Tool bar): 包括quit, save, plotnotebook

和help.

ˆ 窗口左侧的快速拖动区域(quick drop area): 从上到下各按钮分

别为数据的编辑(data.entry( ))、数据的作图(plot( ))、数据的概

括(summary( ))和数据的移除(rm( )).

ˆ 下侧的命令区域(command area): 在这里你可以输入或复制自己的命令,

按evaluate按钮可发送命令让R执行. 上面通过拖拉的方式运行的命令

和结果也在这里显示出来.

ˆ 中间较大的为对话区域: 许多带选项的命令, 如boxplot( )的选项会在

这里出现,等待你的给出(特出拉或直接输入).

下面举例来说明PMG的动态拖拉式操作过程.

1) 打开数据集: 通过“Data”ñ“Load data set…”打开数据集women;

2) 计算变量weight的均值: 通过“Data”ñ “Univariate summaries”ñ

“mean”在对话区域打开函数mean( )及选项; 将women的变量weight用

鼠标拖拉到x=处, 再按“确定”按钮. 结果得到如图C-2所示的显示.

3) 计算并作出分位数: 通过“Data”ñ “Univariate summaries”ñ

“quantiles”在对话区域打开函数quantile( )及选项; 将women的

变量weight用鼠标拖拉到x处, 再选择probs的一组值,譬如probs:

c(0.25, 0.5, 0.95), 结果得到如图C-3所示的画面.

其它功能与用法,可通过菜单各条目的在线帮助或尝试了解, 在些不再细说.

B.2 PMG 425

图 B-3 PMG求样本均值时的窗口.

图 B-4 PMG求分位数时的窗口.

426 附录C R的编程环境

附录 C R的编程环境

§C.1 R WinEdt

优秀的程序编辑器很多, 这里我们介绍三款适合于R的编辑器,供大家选

择.

WinEdt 在是一款非常流行的源代码编辑器,特别是它与LATEX组合

后的CTEX套装软件已为科技排版人员熟悉. WinEdit同样适合于R, Uwe

Ligges开发的R WinEdt融合了WinEdt的优点, 并添加了R的菜单和工具条,

由此可以大大提供编程的效率. 下面对R WinEdt的安装、功能与使用等作一简

单的介绍.

C.1.1 (网络)安装

R WinEdt 的网络安装比较方便, 但需要较长的时间. 其步骤如下:

ˆ 在SDI模式启动R

ˆ 点击菜单“程序包”=>“安装程序包”

ˆ 选择一个较快的镜像站点(CRAN Mirror)

ˆ 选择RWinEdt安装. 在这过程中请选择添加桌面快击.

C.1.2 运行

1) 方法1: 在RGui下通过“程序包”=>“载入程序包”加载RWinEdt程序包;

2) 方法2: 在RGui的命令窗口键入命令

C.1 R WinEdt 427

> library(“RWinEdt”)

3) 方法3: 点击桌面的RWinEdt快击键.

此后就激活RWinEdt, 如图C-1所示. R WinEdt中的R菜单及工具条如图C-2所

图 C-1 R WinEdit的窗口.

示.

C.1.3 R WinEdt的特点

ˆ 与RGui共同运行

ˆ 具有WinEdt的强大功能(如Delimiter检查, 高级搜索, 书签, 宏, 缩进与

注释的对齐等)

ˆ 语法高亮显示(Syntax-Highlighting)

ˆ 同时可以编辑多个R程序

ˆ 设置简单快速的按钮与快击键(见表C-1)

ˆ 将窗口中的R文件(文件的所有代码)发送到R中运行

428 附录C R的编程环境

图 C-2 R WinEdit中R菜单.

ˆ WinEdt中选中的代码发送到R中运行

ˆ 单行代码发送到R中运行

ˆ 及时更新历史命令记录文件.Rhistory,以便重复使用旧的命令

ˆ 提供结构化的模块, 如: for(_ in _){_}

C.1.4 R WinEdt的菜单与热键

§C.2 Tinn-R

Tinn也是一个很好的文本编辑器, 它与R的结合与R WinEdt类似.

1) 下载: http://www.sciviews.org/Tinn-R/

2) 安装: 点击Tinn-R x.xx.x.x setup.exe

3) 运行:

ˆ 启动R

C.3 SciViews R 429

表 C-1 R WinEdt的菜单与热键

命令 热键 菜单图标 说明

Brackets Check Ctrl+F12 括号配对检查

R History ALT+H R HIST. 保存历史记录

R-line – and go ALT+L 单行发送

R-line Ctrl+ALT+L 单行发送并返回

R<- R-paste – and go ALT+P R<-PASTE 选中后发送

R<- R-paste Ctrl+ALT+P 选中后发送并返回

R<- R-source – and go ALT+S R<-SOURCE R文件发送(先打开)

R<- R-script Ctrl+ALT+S R SCRIPT R文件发送并返回

function Ctrl+Alt+F 生成函数框架

for Ctrl+Alt+O 生成for循环框架

if Ctrl+Alt+I 生成if框架

ifelse Ctrl+Alt+E 生成ifesle框架

<- Ctrl+- 生成赋值符号

ˆ 点击快击按扭, 启动Tinn-R

4) 使用: 与R WinEdt类似. 与R WinEdt不同的一个特点是,Tinn-R的R

card对于熟悉R中的函数及编辑是非常有用的. 更多关于Tinn-R,

见Tinn-R FAQ:

http://www.sciviews.org/Tinn-R/Tinn-R_FAQ.html

Tinn-R中的R菜单及如图C-3所示.

§C.3 SciViews R

SciViews R与Tinn-R类似, 它是由Philippe Grosjean, Eric Lecoutre,

JoséCláudio Faria, Marta Rufino开发.

1) 下载: http://www.sciviews.org/SciViews-R/

2) 安装:点击SciViews-R_x.x-xx Setup.exe

3) 运行: 点击快击按扭SciViews R Console

430 附录C R的编程环境

图 C-3 Tinn-R中R菜单.

注: 不同于R WinEdt和Tinn-R, 启动SciViews R 会自动启动R, 并使之

成为SciViews R的一部分.

4) 使用: 点击文本编辑器左侧的小三角形就可执行光标所在的行或选中的

代码段. 详见SciViews R主页的手册.

SciViews R中的窗口布局如图C-4所示.

图 C-4 SciViews R的窗口布局.

参考文献 431

参考文献

[1] Peter Dalgaard, Introductory Statistics with R, Springer, 2002.

[2] John Maindonald, John Braun, Data Analysis and Graphics Using R —

An Example-based Approach, Cambridge University Press,2003.

[3] John Maindonald, Using R for Data Analysis and Graphics — Introduc-

tion, Examples and Commentary, 2004.

(http://www.ats.ucla.edu/stat/R/sk/booksusingr.htm)

[4] John Fox, An R and S-Plus Companion to Applied Regression, Sage Pub-

lications, Inc., 2002.

[5] Julian J. Faraway, Linear Models With R, Chapman & Hall/CRC, 2004.

[6] Julian J. Faraway, Extending the Linear Model with R, Chapman &

Hall/CRC, 2006.

[7] Julian J. Faraway, Practical Regression and ANOVA Uing R, 2002.

http://www.stat.lsa.umich.edu/ faraway/,

http://www.ats.ucla.edu/stat/r/sk/bookspra.htm

[8] John Verzani, Simple R — Using R for Introductory Statistics, 2002.

(http://www.math.csi.cuny.edu/Statistics/R/simpleR/index.html)

[9] W. N. Venables, D. M. Smith and the R Development Core Team, An

Introduction to R — Notes on R: A Programming Environment for Data

Analysis and Graphics, 2006. (中译本1.7—R语言介绍, 中译本2.3.0—R导

论)

[10] The R Development Core Team, R Reference Mannual. (R: A Language

and Environment for Statistical Computing ―Reference Index), 2006

[11] The R Development Core Team, R Data Import/Export, 2006. (中译

本2.2.1—R数据导入与导出)

432 参考文献

[12] Emmanuel Paradis, R for Beginners, 2005. (中译本2.2.1, 2006)

[14] Søren Højsgaard and Ulrich Halekoh, R in a few hours –a brief intro-

duction, 2006.

[14] Ulrich Halekoh, Jørgen Vinsløv Hansen, Søren Højsgaard, Basic graphics

in R, 2006.

[15] http://cran.r-project.org/doc/FAQ/R-FAQ.html.

[16] Ihaka R & Gentleman R.R:A Language for data analysis and graphics

[J].J Comput Graph Stat,1996;5(3):299-314.

[17] Eric Zivot and Jiahui Wang, Modelling Financial Time Series with S-

PLUS, 2002.

[18] Paul Murrell, R Graphics, Chapman & Hall/CRC, 2006.

[19] Jim Albert, Bayesian Computation with R, Springer, 2007.

[20] A. Gelman, J.B. Carlin, H.S. Stern and D.B. Rubin, Bayesian Data Anal-

ysis, Chapman & Hall/CRC, 2004.

[21] S-Plus应用统计教程, 上海财经大学出版社, 2005.

[22] 茆诗松, 周纪芗, 概率论与数理统计, 中国统计出版社, 1999.

[23] 茆诗松, 程依明, 濮晓龙, 概率论与数理统计教程, 高等教育出版社, 2004.

[24] 何书元, 概率论与数理统计, 高等教育出版社, 2006.

[25] 王岩, 隋思涟, 王爱青, 数理统计与MATLAB工程数据分析, 清华大学出版

社, 2006.

[26] 梁小筠,祝大平,抽样调查的方法和原理,华东师范大学出版社,1994.

[27] 梁之舜, 邓集贤, 杨维权, 司徒荣, 邓永录, 概率论与数理统计(下), 高等教

育出版社, 2003.

[28] 王静龙, 梁小筠, 非参数统计, 高等教育出版社,2006.

[29] 王静龙, 梁小筠, 定性数据分析, 华东师范大学出版社, 2005.

[30] 吴喜之, 非参数统计, 中国统计出版社, 1999.

[31] 吴喜之, 统计学: 从数据到结论, 第二版, 中国统计出版社, 2004.

[32] 王星, 非参数统计, 中国人民大学出版社, 2005.

[33] 高惠璇,实用统计方法与SAS系统,北京大学出版社, 2001.

[34] 方开泰, 实用多元统计分析, 华东师范大学出版社, 1989.

[35] 薛毅, 陈立萍, 统计建模与R软件, 清华大学出版社, 2007.

[36] 陈毅恒, 梁沛霖, R软件操作入门, 中国统计出版社, 2006.

[37] 耿修林, 应用统计学: 学习指导、软件介绍及习题, 科学出版社, 2004.

参考文献 433

本书特色

统计学以数据为研究对象,它是以概率统计为基础、应用统计学的基本原

理和方法并结合统计软件对实际数据进行收集、整理和分析的一门科学. 数据

的统计分析涉及大量的统计计算,包括向量与矩阵的运算,这时传统的手工或

基于计算器的计算几乎无法进行,必须借助于现代化的计算工具—统计软件,

特别是在参数不断增多、数据维数不断增大、变量之间相关性不断密切的经

济、金融、生物、制药、社会、心理等领域, 统计软件的使用显得尤为重要. 因

此我们不仅要通过数理统计这门课程的学习掌握统计学中的基本理论与方法,

更应该将这些理论与方法运用于实践,并通过统计软件用图形直观展示数据中

存在的特征,用具体的统计方法揭示其中存在的规律,解决一些具体的实际问

题. 作为自由、免费、源代码开放、维护更新及时的软件、其强大的图形展示和

统计分析功能,使R语言成为学好数理统计最好的工具.

作为数据统计分析的教科书,本书有如下几个特点:

1) R软件介绍精简实用,自成一体;

2) 原理讲解与软件使用高度结合;

3) 内容全面,涵盖统计各学科需要的主要统计方法;

4) 内容安排循序渐进,又相对独立,不失为数据统计分析的工具书;

5) 突出对原理与方法的理解、更注重实例通过R的求解过程和对结果的解

释.

6) 全书使用LATEX编辑排版,印刷质量一流, 是中英文LATEX排版的经典作

品.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144191.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • [原创]对于运行ASP.NET程序时,提示:无法启动程序“http://localhost:3532/Default.aspx”。的解决办法…[通俗易懂]

    [原创]对于运行ASP.NET程序时,提示:无法启动程序“http://localhost:3532/Default.aspx”。的解决办法…

  • Xray基础使用介绍

    Xray基础使用介绍官方使用文档:https://docs.xray.cool/#xray简介xray是一款功能强大的安全评估工具,由多名经验丰富的一线安全从业者呕心打造而成,主要特性有:检测速度快。发包速度快;漏洞检测算法高效。支持范围广。大至OWASPTop10通用漏洞检测,小至各种CMS框架POC,均可以支持。代码质量高。编写代码的人员素质高,通过CodeReview、单元测试、集成测试等多层验证来提高代码可靠性。高级可定制。通过配置文件暴露了引擎的各种参数,通过修改配置文件可以极大的客

  • 【路由】静态路由「建议收藏」

    【路由】静态路由「建议收藏」静态路由1、静态路由的概念1.1、概念1.2、注意事项1.3、弊端2、静态路由的配置须知2.1、出接口为BMA类型2.2、出接口为P2P类型2.3、出接口为NBMA类型3、默认路由3.1、概念3.2、实验场景3.3、适用场景3.4、注意事项4、浮动静态路由4.1、静态路由负载均衡的实验场景4.2、静态路由负载均衡讲解4.3、静态路由负载分担的优点4.4、浮动静态路由的原理4.5、浮动静态路由的应用场景1、静态路由的概念1.1、概念1.2、注意事项1.3、弊端2、静态路由的配置须知2.1、出接口为

  • Laravel 5 如何实现网站在维护模式下允许指定 IP 用户访问(白名单)

    Laravel 5 如何实现网站在维护模式下允许指定 IP 用户访问(白名单)

  • tomcat java_tomcat和maven的区别

    tomcat java_tomcat和maven的区别复杂的sql查询环境搭建CREATE TABLE `teacher` ( `id` INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO teacher(id, name) VALUES (1,’秦老师’); CREATE TABLE `student` ( `id` INT(10) NOT NULL

  • 一、数据库表设计规范「建议收藏」

    一、数据库表设计规范「建议收藏」一、三范式为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。1.第一范式确保每列保持原子性列不可分 有主键根据实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号