判别分析(数学建模)
- 格式:ppt
- 大小:600.50 KB
- 文档页数:39
心脏病的判别摘要本文研究的是一个判别分析类问题,解决的是如何根据就诊者的各项生理指标数据,判别就诊者是否患有心脏病以及患病的程度,并确定哪些指标是影响人们患心脏病的关键因素,从而减少化验的指标,以便人们可以及时发现疾病。
首先我们对题目中给出的数据进行了处理,通过查找资料以及合理的判断,将-9进行了合理的赋值。
问题一中,我们将250个就诊者按患病程度分为五个总体,建立了多总体fisher判别模型,利用spss软件对13个样本进行分析,剔除X L,最后得出判别函数,并根据Fisher后验概率最大这一判别规则进行回代,最终得出运用本判别方法判断“是否患病”的正确率为97.2%,判断“患病程度”的正确率为85.6%。
0问题二中,我们以问题一的判别函数和判别准则为基础,通过分析,剔除X E、X L、X,得到了新的判别函数。
然后我们运用matlab软件,将44名就诊人员13项指标的M数据代入判别函数求解,通过判断,得出各自的患病情况。
问题三中,题目要求确定影响人们患心脏病的关键或主因素,以便减少化验的指标。
为此我们运用逐步剔除法,结合spss软件,将F分布统计检定值中数值小的指标进行剔除。
当剔除F、G、B、A、D、E时,分类正确率为82.4%,而将H也剔除时,正确率降为79.6%。
因此,我们得出H、C、K、J、I、M为主要因素。
问题四中,我们运用与问题二相同的方法,将44名就诊人员13项指标的数据代入问题三得出的判别函数中进行求解,将得出的结果与问题二比较,我们发现:所建判别方法及判别准则在判断“是否患病”时,正确率较高;而在判别“患病程度”时,就有一定的偏差。
这与模型以及算法本身的准确度有一定的关系,也与我们处理数据时的正确性有一定关系。
本文最后对所建模型的优缺点进行了分析,并提出了改进与推广。
关键字:多总体fisher判别spss软件逐步剔除法心脏病的判断1.问题重述1.1问题背景心脏是维持全身血液循环的最重要器官。
数学建模中的统计分析工具1. 比较——方差分析比较不同总体间均值有无显著差异.方差分析是处理试验数据的一种常用统计方法,其基本思想是:把指标数据的总变差(总离差平方和),分解为由所考察因素引起的变差(因素变差或组间离差平方和)和随机因素引起的变差(随机变差或组内离差平方和),然后通过比较这些变差来推断因素对指标影响是否显著.因为判定因素对指标影响是否显著时,是从指标的总变差入手,将之分解为由各因素引起的变差和随机波动引起的变差,所以称此类分析为方差分析.在方差分析中,影响指标的因素称为因子,因子的取值称为水平. 例如,考察学生性别对学习成绩的影响时,学习成绩是所考察的指标,性别是影响指标的因子,而性别的取值“男”和“女”是性别因子的水平.实质上,此处是要比较男生和女生学习成绩有无显著差异,属两组比较问题,是方差分析的特殊情况,一般的方差分析研究的是多组比较问题.试验中如果只考虑一个因子对指标的影响,这种试验称为单因子试验,相应的方差分析称为单因子方差分析.若试验中同时考虑两个因子,则称相应的试验为两因子试验,所做的方差分析称为两因子方差分析.类似地可以定义三因子、多因子试验和方差分析.① 为研究新药的降糖效果,某医院用40名病人同期随机对照实验。
实验者将病人随机等分成实验组和对照组,分别测得实验开始前和8周后空腹血糖,算得空腹血糖下降值的均数,见下表,能否认为新药对空腹血糖的降糖效果显著?(检验水平0.05α=)实验组1X -0.7 -5.6 2.0 2.8 0.7 3.5 4.0 5.8 7.1 -0.5 20人2.5 -1.6 1.73.0 0.44.5 4.6 2.5 6.0 -1.4 对照组2X3.7 6.5 5.0 5.2 0.8 0.2 0.6 3.4 6.6 -1.1 20人 6.0 3.8 2.0 1.6 2.0 2.2 1.2 3.1 1.7 -2.0② 某养鸡场为提高经济效益,研制了三种鸡饲料配方.为比较三种饲料在养鸡增肥上的效果,分别用每种饲料喂养10只小鸡,60天后测量鸡重.请通过试验数据分析,三种饲料在养鸡增肥效果上有无显著差异(检验水平皆取0.05α=)?2.相关与回归分析在生产实践中,人们关心的某项重要指标往往受一个或多个变量的影响,此时令人关注的是变量与指标之间的关系.线性回归分析研究的是一维因变量(也称响应变量)Y与回归变量(也称解释变量或自变量)之间的线性相关关系,其中回归变量是可观测或可控制的①为确定运动员耗氧量与其他因素的关系,对31个人测量了年龄age、体重weight、跑完1.5公里的时间runtime、静态心率rstpulse、跑动时心率runpulse、跑步时最大Maxpulse、每公斤体重每分钟耗氧量oxy,数据见\Sas_Ex\oxy.txt,试以oxy为因变量作回归分析。
第5章判别分析判别分析(discriminantanalysis)是在已知样品分类的前提下,将给定的新样品按照某种分类准则判入某个类中,它是研究如何将个体“归类”的一种统计分析方法.这里的判别规则通常是以已有的数据资料或者现有的部分样品数据作为所谓的“训练样本”建立起来的,并用来对未知类别的新样品进行判别.这种统计方法在实际中很常用,例如医生在掌握了以往各种病症(如肺炎、肝炎、冠心病、糖尿病等)指标特点的情况下,根据一个新患者的各项检查指标来判断该病人有哪类病症;又如在天气预报中,利用已有的一段时期某地区每天气象的记录资料(阴晴雨、气温、风向、气压、湿度等),建立一种判别准则来判别(预报)明天或未来多天的天气状况;再如研究人员依照国家划分不同地区经济类型的数量标准,根据某个地区的GDP、人均收入、消费水平等相关指标判断该地区属于哪一种经济类型等.当然,我们要求判别规则在某种意义下是最优的,例如样品距所属类别的距离最短,或样品归属某个类别的概率最大,或错判平均损失最小等.判别分析与聚类分析的主要区别在于:作聚类分析时,人们事先并不知道所讨论的样品应该分成几类,完全根据样品数据的具体情况来确定;而作判别分析时,样品的分类事先已经明确,需要做的主要工作是利用训练样本建立判别准则,对新样品所属类别进行判定.判别分析的方法很多,本章主要介绍常用的三种,即距离判别、Fisher判别和Bayes判别,并介绍它们在R中的实现过程.5.1 距离判别5.1.1 距离距离是判别分析中的基本概念,距离判别法根据一个样品与各个类别距离的远近对该样品的所属类别进行判定.第4章中列举了六种距离,其中常用的是欧氏距离和马氏距离.设和是两个随机向量,有相同的协方差矩阵Σ,则α与y之间的马氏距离定义为:(5.1)特别地,当∑=I时,马氏距离就是通常的欧氏距离.在判别分析中,马氏距离更常用,这是因为欧氏距离对每一个样品同等对待,将样品x的各分量视作互不相关,而马氏距离考虑了样品数据之间的依存关系,从绝对和相对两个角度考察样品,消除了变量单位不一致的影响,更具合理性.这里以二维情形下一个简单的图形做直观的解释:如图5-1所示,设大椭圆和小椭圆分别表示两个总体G₁和G₂的置信度均为1-α的置信区域,尽管样品x到总体G₂的欧氏距离比到总体G₁的欧氏距离更短,但x却包含在总体G₁的置信椭圆内,同时位于总体G₂的置信椭圆外,说明若用马氏距离这种“标准化”距离来度量的话,样品x到总体G₁的距离更近,应该把样品x判入总体G₁.图5-1欧氏距离与马氏距离的选择示意图5.1.2 两个总体的距离判别设有两个总体G₁和G₂,其均值分别为μ₁和μ₂,有相同的协方差矩阵Σ,对于给定的一个样品x,要判断它属于哪一个总体.如果将样品x到两个总体G₁和G₂的距离d(x,G₁)和d(x,G₂)分别规定为x与μ(i=1,2)的马氏距离,那么,直观的方法i是分别计算样品x到两个总体G₁和G₂的马氏距离d(x,μ₁)和d(x,μ₂),再根据这两个距离的大小来判断x的归属:当d(x,μ₁)<d(x,μ₂)时,判x属于总体G₁;当d(x,μ₁)>d(x,μ₂)时,判α属于总体G₂;当d(x,μ₁)=d(x,μ₂)时,x可以属于总体G₁和G₂中的任何一个,通常把x判入总体G₁.因此判别准则可描述为:由于马氏距离与马氏距离的平方等价,为方便起见,以下考虑两个马氏距离的平方的差(5.2)令,并记(5.3)于是判别准则等价于这个判别准则取决于W(x)的值,通常称W(x)为判别函数,由于它是x的线性函数,又称其为线性判别函数,称a为判别系数.线性判别函数W(x)使用最方便,在实际中应用也最广泛.特别地,当p=1,G₁和G₂的分布分别为N(μ₁,o²)和N(μ₂,o²),μ₁,μ2,o²均为已知,且μ₁<μ₂时,则判别系数为,判别函数为.判别准则为:在实际应用中,总体的均值和协方差矩阵一般是未知的,可由样本均值和样本协方差矩阵分别进行估计.设是来自总体G₁的样本,是来自总体G₂的样本,μ₁和μ₂的一个无偏估计分别为:协方差矩阵Σ的一个联合无偏估计为:式中,此时,判别函数为,其中.这样,判别准则为:应该注意,当μi≠μz,Z₁≠Z₂时,我们仍可采用式(5.2)的变式作为判别函数,即(5.4)它是x的二次函数,相应的判别规则为:最后要强调的就是作距离判别时,μ₁和μ₂要有显著的差异才行,否则判别的误差较大,判别结果没有多大意义.【例5.1】已知某种昆虫的体长和翅长是表征性别的两个重要体形指标,根据以往观测值,雌虫的体型标准值为,雄虫的体型标准值,它们的共同的协方差矩阵为.现捕捉到这种昆虫一只,测得它的体长和翅长分别为7.2和5.6,即,试判断这只昆虫的性别.解:由已知条件,可由式(5.3)计算得所以可判断这只昆虫是一只雄虫.在R中可编写一个简单的程序计算W(x)(注意W(x)=[d²(x,μ₂)-d²(x,μ₁)]/2).>W2equal=function(x,mu1,mu2,S){(mahalanobis(x,mu2,S)-mahalanob is(x,mu1,S))/2}>mu1=c(6,5);mu2=c(8,6);S=matrix(c(9,2,2,4),nrow=2);x=c(7.2,5.6 )>W2equal(x,mu1,mu2,S)[1]-0.053125所以应判断这只昆虫是一只雄虫.若又捕捉到另一只同类昆虫,其体长和翅长数据为,则可继续计算如下:>x=c(6.3,4.9>W2equal(x,mu1,mu2,S)[1]0.225应将其判断为一只雌虫.当雌虫和雄虫的协方差矩阵不相同时,可由式(5.4)来计算W*(x),再根据计算结果作出判别.假定雌虫和雄虫总体数据对应的协方差矩阵分别为和那么可编写R程序如下:>W2unequal=function(x,mu1,mu2,S1,S2){mahalanobis(x,mu2,S2)-mah alanobis(x,mu1,S1)}>mu1=c(6,5);mu2=c(8,6);S1=matrix(c(9,2,2,4),nrow=2);S2=matrix( c(6,22,3),nrow=2)>x=c(7.2,5.6>W2unequal(x,mu1,mu2,S1,S2)[1]-0.07696429这里仍然用了最初那只昆虫的体长和翅长数据,结果仍然判断它是一只雄虫.两总体的距离判别还可使用自编程序“DDA2.R”,用法参见本章附录1.5.1.3 多个总体的距离判别设有k个总体G₁,G₂,…,Gk ,其均值和协方差矩阵分别是μ₁,μ₂,…,μg和Σ₁,Σ₂,…,Σk,而且Σ₁= Σ₂= … = Σk = Σ.对于一个新的样品x,要判断它来自哪个总体.该问题与两个总体的距离判别问题的解决思路一样,计算新样品x到每一个总体的距离,即式中,.故可以取线性判别函数为:相应的判别规则为:与二维情形类似,当μ₁,μ₂,…,μk和Σ均未知时,可以通过相应的样本均值和样本协方差矩阵来替代.另外,各总体的协方差矩阵Σ₁,Σ₂,…,Σk,不完全相同时也可以仿照二维情形讨论(参阅参考文献[10]).多总体的距离判别可使用本章附录所给出的R程序“DDAM.R”,使用方法可参见本章附录2后的说明.5.2 Fisher判别Fisher于1936年提出了该判别法,这是判别分析中奠基性的工作.该方法的主要思想是通过将多维数据投影到一维直线上,使得同一类别(总体)中的数据在该直线上尽量靠拢,不同类别(总体)的数据尽可能分开.从方差分析的角度来说,就是组内变差尽量小,组间变差尽量大.然后再利用前面的距离判别法来建立判别准则.Fisher判别法属于确定性判别法,有线性判别、非线性判别和典型判别等多种常用方法.以下主要介绍线性判别法.5.2.1两总体Fisher判别先考虑有两个总体G₁和G₂的情形,判别法的思想是将高维空间中的点投影到一维直线y上,使得由总体G₁和G₂产生的y尽可能分开,在此基础上再利用前面的距离判别法来建立判别准则.我们用一个简单的图形(见图5-2)来说明其原理.如图5-2所示,二维平面上有两类点,小圆点属于总体G₁,大圆点属于总体G₂,按照原来的横坐标x₁和纵坐标x₂,很难将它们区分开,但若把它们都投影到直线y上,则它们的投影点明显分为两组,同类的点聚集在一起,容易区分;又若把它们投影到与直线y垂直的直线上,则它们的投影点混杂在一起,难以分开.可见,投影直线的选取不一样,数据点的分类效果就大不相同,这提示我们要去寻找分类效果最好的投影直线y,使得在该投影直线上,同一类别的点的投影点尽量靠拢,不同类别的点的投影点尽量分开.显然,直线y是x₁和x₂的线性组合,即y=c₁x₁+c₂x₂.一般,在p维情况下,x的线性组合为:(5.5)图5-2投影直线选取示意图式中,a为p维实向量.设总体G₁和G₂的均值分别为μ₁和μ₂,它们有共同的协方差矩阵Σ,那么线性组合的均值为:(5.6)方差为:(5.7)显然,使得μ1y 与μ2y的距离越大的线性组合越好,所以考虑比值(5.8)现在的问题简化为:如何选取a,使得式(5.8)达到最大.定理5.1设x为p维随机向量,,当(c≠0为常数)时,式(5.8)达到最大.特别地,当c=1时,线性函数(5.9)称为Fisher线性判别函数(证明略).取(5.10)在μ₁≠μ₂的条件下,容易证明,于是可得Fisher判别准则如果记,则判别准则等价于需要指出的是:当总体的均值和协方差矩阵未知时,通常用样本均值和样本协方差矩阵来估计.设和,分别是来自总体G₁和G₂的样本,就可以分别用和估计μ₁和μ₂,用来估计Σ,这里.5.2.2多总体Fisher判别如果变量很多或有多个总体,通常要选择若干个投影,即若干个判别函数来进行判别.设有k个总体G₁,G ₂,…,Gx,它们有共同的协方差矩阵Σ,均值分别为μ₁,μ₂,…,μk,令(5.11)考虑p维随机向量x的线性组合,a为p维实向量,则均值和方差分别为:(5.12)注意到(5.13)考虑比值(5.14)问题等价于:如何选择a,使得式(5.14)达到最大.为了方便起见,设.定理5.2设λ₁,λ₂,…,λs(λ₁≥λ₂≥…≥λs>0)为Σ-¹G的s个非零特征值,s≤min(k-1,p),e₁,e₂,…,e为相应的特征向量且满足,那么当a₁=e₁s时,式(5.14)达到最大,称为第一判别函数,而a₂=e₂是在约束条件之下使得式(5.14)达到最大值的解,称为第二判别函数,如此下去,as =es是在约束条件之下使得式(5.14)达到最大值的解,称为第s个判别函数(证明略).当总体的均值和协方差矩阵未知时,通常用样本均值和样本协方差矩阵来估计,与两总体的Fisher判别方法类似,也可以建立多个总体的Fisher判别准则,但形式比较复杂,这里不再讨论.【例5.2】在R软件的内置档案中自带了著名的鸢尾花(iris)数据,该数据框有5列:Sepal.Length(花萼长度),Sepal.Width(花萼宽度),Petal.Length(花瓣长度),Petal.Width(花瓣宽度)和Species(品种).品种又分为setosa(刚毛鸢尾花),versicolor(变色鸢尾花)和virginica(弗吉尼亚鸢尾花).每个品种各有50行,即数据框共有150行.解:先读取iris数据,再用程序包MASS中的线性判别函数lda()作判别分析,R程序如下:>data(iris)>irisSepal.Length Sepal.Width Petal.LengthPetal.Width Species1 5.1 3.5 1.4 0.2setosa2 4.9 3.0 1.4 0.2setosa......50 5.0 3.3 1.4 0.2setosa51 7.0 3.2 4.7 1.4versicolor52 6.4 3.2 4.5 1.5versicolor......100 5.7 2.8 4.1 1.3 versicolor101 6.3 3.3 6.0 2.5 virginica102 5.8 2.7 5.1 1.9 virginica......150 5.9 3.0 5.1 1.8 virginica>attach(iris) #把数据变量的名字放入内存,这样能直接使用各列数据>library(MASS) #加载MASS程序包,这是必须的,否则找不到1da()函数>1d=lda(Species~Sepal.Length+Sepal.Width+Petal.Length+Petal.Wi dth)#也可以用命令iris.lda=lda(iris[,1:4],iris[,5]),注意第5列是品种,取作因变#量y>1dCall:lda(Species~Sepal.Length+Sepal.Width+Petal.Length+Petal.WidthPriorprobabilitiesofgroups:setosa versicolor virginica0.3333333 0.3333333 0.3333333Groupmeans:Sepal.Length Sepal.Width Petal.LengthPetal.Widthsetosa 5.006 3.428 1.4624.260Versicolor 5.936 2.770 4.2601.326Virginica 6.588 2.974 5.5522.026Coefficientsoflineardiscriminants:LD1 LD2Sepal.Length 0.8293776 0.02410215Sepal.Width 1.5344731 2.16452123Petal.Length -2.2012117 -0.93192121Petal.Width -2.8104603 2.83918785Proportionoftrace:LD1 LD20.9912 0.0088以上输出中包括lda()所用的公式、先验概率、各组均值向量、第一及第二线性判别函数的系数、两个判别式对区分各总体贡献的大小等.可以在R中使用help(lda)查看该函数的详细用法.需要指出的是,R中有内置函数predict(),可以对原始数据进行回判分类,从而可以将lda()的输出结果与原始数据真正的分类进行对比,考察误差的大小.R程序及结果如下:>Z=predict(ld)>newG=Z$class>cbind(Species,newG,Z$x) #Z$x给出了Z中两个判别函数相应的值Species new GLD1 LD21 1 1 8.0617998 0.3004206212 1 1 7.1286877 -0.786660426 ......70 2 2 -1.0904279 -1.62658349671 2 3 -3.7158961 1.04451442172 2 2 -0.9976104 -0.490530602 ......83 2 2 -0.8987038 -0.90494003484 2 3 -4.4984664 -0.88274991585 2 2 -2.9339780 0.027379106133 3 3 -6.8001500 0.580895175134 3 2 -3.8151597 -0.942985932 135 3 3 -5.1074897 -2.130589999 ......149 3 3 -5.8861454 2.345090513150 3 3 -4.6831543 0.332033811 这里Species是原始类别,newG是回判类别,LD1和LD2分别是第一和第二线性判别函数的值.我们还可以用table()函数来列表比较,R程序及结果如下:>tab=table(newG,Species)>tabSpeciesnewG setosa versicolor virginicasetosa 50 0 0Versicolor 0 48 1virginica 0 2 49由结果可以看出,对150个原始数据的预测中,只有3个错误,误差率为2%,其中有2朵versicolor鸢尾花(71号和84号)被误认为是virginica鸢尾花,有1朵virginica鸢尾花(134号)被误认为是versicolor鸢尾花.5.3 Bayes判别上面讲的几种判别分析方法计算简单,易于操作,比较实用.但是这些方法也有明显的不足之处.一是判别方法与总体各自出现的概率的大小无关;二是判别方法与错判之后所造成的损失无关.Bayes判别法就是为了解决这些问题而提出的一种判别方法,它假定对研究对象已经有了一定的认识,这种认识可以用先验概率来描述,当取得样本后,就可以利用样本来修正已有的先验概率分布,得到后验分布,再通过后验分布进行各种统计推断.Bayes判别法属于概率判别法,判别准则是以个体归属某类的概率最大或错判总平均损失最小为标准.5.3.1两总体的Bayes判别设有两个总体G₁和G₂,它们的概率密度函数分别为f₁(x)与f₂(x),其中x是一个p维随机向量,Ω为x的所有可能取值构成的样本空间,R₁为x的根据某种规则被判入总体G₁的取值全体的集合,那么R₂=Ω-R₁就为x的根据同样规则被判入总体G₂的取值全体的集合.设样本α来自总体G₁(形式记为x∈G₁),但被判入总体G₂的概率为:又记x来自总体G₂(形式记为x∈G₂),但被判入总体G₁的概率为:类似地,x来自总体G₁被判入G₁,来自总体G₂被判入G₂的概率可分别记为:又设总体G₁和G₂出现的先验概率(priorprobabilities)分别为p₁和pz,且p ₁+p₂=1,于是同理假设L(j|i)(i,j=1,2)表示x来自总体Gi而被误判入总体Gj引起的损失,显然有L(1|1)=L(2|2)=0,将上述误判概率与误判损失结合起来,可以定义所谓的平均误判损失(expected cost of misclassification,ECM)为:(5.15)一个合理的判别选择是极小化ECM.可以证明(见参考文献[10]):极小化ECM 所对应的样本空间2的划分为:(5.16)因此,可以将式(5.16)作为Bayes判别的判别准则.当两总体服从正态分布时,设,可分两种情形讨论.若Σ₁=Σ₂=Σ,则两总体的密度函数为:此时式(5.16)等价于(5.17)式中(5.18)(5.19)由此可见,对于两正态分布总体的Bayes判别,其判别式(5.17),(5.18)和(5.19)可以看成两总体距离判别的推广,当p₁=pz,L(1|2)=L(2|1)时,β=ln1=0,这正是距离判别,这里的W(x)也与两总体距离判别的W(x)完全一致,参见式(5.3).若Σ₁≠Σ₂,可仿照上面对式(5.16)作推广,参见参考文献[12].5.3.2多总体的Bayes判别从上面的讨论可知,Bayes判别的本质就是寻找一种适当的判别准则,使得平均误判损失ECM达到最小.在两总体情形下,由式(5.15)可知,若假设所有错判损失相同,即设L(2|1)=L(1|2)=C,那么要ECM尽量小,相当于要p₁P(1|1)+p₂P(2|2)尽量大,这有助于理解多总体Bayes判别所用的判别准则.设有k个总体G₁,G₂,…,Gx,其各自的分布密度函数为f(x),f2(x),…,fk(x),相应的先验概率分别为p₁,p₂,…,pk,并假设所有的错判损失相同,对待判样品x,相应的判别准则为:(5.20)以下只对G₁,G₂,…,Gk均为正态总体,即进行讨论.当k个总体的协方差矩阵都相同,即时,总体Gi 的密度函数为:计算函数在计算过程中,协方差矩阵Σ可用其估计式代替.当k个总体的协方差矩阵不全相同时,总体Gj的密度函数为:则相应计算函数在计算过程中,协方差矩阵Σj可用其估计式代替.判别准则式(5.20)等价于【例5.3】(数据文件为eg5.3)表5-1是某气象站预报有无春旱的数据资料,x₁和x₂是两个综合性预报因子.表中给出了有春旱的6个年份数据和无春旱的8个年份数据.它们的先验分布用各组数据出现的比例(6/14,8/14)来估计,并假设误判损失相等,试用Bayes判别法对数据进行分析.表5-1某气象站有无春旱的数据资料解:先在eg5.3中选取G,x1,x₂三列数据,然后复制,回到R命令窗口中输入如下命令后再确定,就可将复制的数据读入R.R程序及结果如下:>d5.3=read.table("clipboard",header=T)>attach(d5.3)>library(MASS)>1d=1da(G~x1+x2,prior=c(6,8)/14)>1dCall:lda(G~x1+x2,prior=c(6,8)/14)Prior probabilities of groups:1 20.4285714 0.5714286#若先验概率未知,可以先设为均匀分布,即prior=c(0.5,0.5) Groupmeans:x1 x21 25.31667 -2.4166672 22.02500 -1.187500Coefficients of linear discriminants:LD1x1 -0.6312826x2 1.0020661再用函数predict()对原始数据进行回判分类,并与lda()的输出结果进行对比,R程序及结果如下:>Z=predict(1d)>newG=Z$class>cbind(G,newG,Z$x)#Z$x为判别函数的值G newG LD11 1 1 -1.14755452 1 1 -1.10648313 1 1 -3.28592944 1 2 -0.22668045 1 1 -1.68965906 1 1 -3.89116217 2 2 1.85959468 2 2 1.4737896......13 2 2 1.358561514 2 2 1.7002528>tab=table(G,newG)>tabnewgG 1 21 5 12 0 8>sum(diag(prop.table(tab)))[1] 0.9285714程序输出说明,第一组样本中只有第4号样本被误判入第二组,第二组样本回判全部正确,回判符合率为92.857%.我们还可以用命令Z$post计算后验概率:>Z$post1 21 0.9386546174 6.134538e-022 0.9303445828 6.965542e-023 0.9999448424 5.515761e-05......13 0.0038092358 9.961908e-0114 0.0012325974 9.987674e-015.4案例分析与R实现案例5.1(数据文件为case5.1)表5-2中列出了1994年我国30个省、直辖市、自治区影响各地区经济增长差异的制度变量数据,分为两组.其中,x₁为经济增长率(%);x₂为非国有化水平(%);x₃为开放度(%);x₄为市场化程度(%).借助R 软件,分别用两总体的距离判别法、Fisher判别法和Bayes判别法进行判别分析,并对江苏、安徽和陕西三个待判地区作出判定.(注:样本号为28,29,30的待判样品的类别先暂定为2,待实际判别分析后再确定,这样做的好处是录入和处理数据较为方便.)表5-2 1994年我国30个省、直辖市、自治区影响各地经济增长差异的制度变量数据解:(1)距离判别法.要读入Excel数据,先在case5.1中选取数据区域D1:H31(注意:要连待判数据一起选),然后复制,回到R命令窗口中输入如下命令后再确定,就可将复制的数据读入R.然后把本章附录中两总体距离判别程序“DDA2.R”放到当前工作目录下,再载入R并执行,还可以用var(classG1)和var(classG2)分别计算两个训练样本的协方差矩阵,结果发现它们明显不相等.R程序及结果如下:>case5.1=read.table("clipboard",header=T) #将已复制到剪贴板中的数据读入R>attach(case5.1) #把数据变量名字放入内存>classG1=case5.1[1:11,2:5] #选取训练样本1>classG2=case5.1[12:27,2:5] #选取训练样本2>newdata=case5.1[28:30,2:5] #选取待测样本用于后面判定>source("DDA2.R") #载入自编程序DDA2.R>DDA2(classG1,classG2) #执行程序DDA2.R1 2 ... 8 9 10 11 12 13 (24)25 26 27blong 1 1 ... 1 1 2 1 2 2 (2)2 2 2回代判别的结果说明只有第10号样本“广西”被错判入第二组,判别符合率为26/27=96.3%.最后对江苏、安徽和陕西三个样本进行判定(样本号为28,29,30),数据已包含在newdata中,R程序为:>DDA2(classG1,classG2,newdata)#对待判样本newdata进行判定1 2 3blong 1 2 2输出结果第一行中的1,2,3分别表示江苏、安徽和陕西三个待测样本(样本号为28,29,30),判别结果是江苏被判入第一组,安徽和陕西均被判入第二组.(2)Fisher判别法也是先要读入数据,在case5.1中选取数据区域D1:H28(注意:这里不选待判数据,因为lda()函数要使用已有的各列数据作为变量来建立判别模型),然后复制,回到R命令窗口中输入如下命令后再确定,就可将复制的数据读入R.R 程序及结果如下:>case5.1=read.table("clipboard",header=T)>attach(case5.1)>library(MASS)>1d=1da(G~x1+x2+x3+x4)>ldCalllda(G~x1+x2+x3+x4)Prior probabilities of groups:1 20.4074074 0.5925926Groupmeans:x1 x2 x3 x41 15.73636 65.02818 25.149091 74.3502 11.56250 40.10625 9.228125 58.105Coefficients of linear discriminants:LD1x1 -0.06034498x2 -0.01661878x3 -0.02532111x4 -0.08078449以上输出结果中包括lda()所用的公式、先验概率、各组均值向量、第一线性判别函数的系数.再用predict()函数对原始数据进行回判分类,将lda()判别的输出结果与原始数据真正的分类进行对比.R程序及结果如下:>Z=predict(ld) #预测判定结果>nevG=Z$class #新分类>cbind(G,newG,Z$x) #合并原分类、新分类及判别函数值G newG LD11 1 1 -0.636598122 1 1 -0.85792242....9 1 1 -3.8115753710 1 2 0.1086677611 1 1 -0.65403492....26 2 2 2.2650082627 2 2 1.52288285>tab=table(G,newG) #原分类和新分类列表比较>tabnevGG 1 21 10 12 0 1>sum(diag(prop.table(tab))) #计算判别符合率[1] 0.962963可见,只有第一组中的第10号样品“广西”被错判入第二组,与距离判别法结果一致.还可以用命令sum(diag(prop.table(tab)))计算判别符合率.最后对三个待判样本进行判定.先要读入待判样本数据,在case5.1中选取待判样本数据区域D1:H31(注意:要连待判数据一起选),然后复制,回到R命令窗口中输入如下命令后再确定,将复制的数据读入R.在其基础上选取待判样本数据.R程序及结果如下:>case5.1=read.table("clipboard",header=T)>newdata=case5.1[28:30,2:5] #选取待判样本用于下面判别>predict(ld,newdata=newdata)$class[1] 1 2 2Levels: 1 2$posterior1 228 0.87303785 0.126962229 0.48273895 0.517261130 0.01957491 0.9804251$xLD128 -1.187448129 -0.348841830 1.2655298说明:由$class可以看出28号样本被判人第一组,29,30号样本被判入第二组,结果与距离判别法一致;$x给出了线性判别函数的值.(3)Bayes判别法Bayes判别法和Fisher判别法类似,不同的是在使用函数lda()时要输入先验概率.它们的先验概率用各组数据出现的比例(11/27,16/27)来估计(默认情形),并假设误判损失相等.同Fisher判别法的分析过程一样,先复制数据,读入R,具体操作及结果如下:>case5.1=read.table("clipboard",header=T)>attach(case5.1)>library(MASS)>1d=lda(G~x1+x2+x3+x4,prior=c(11/27,16/27))>ldCall:lda(G~x1+x2+x3+x4,prior=c(11/27,16/27))Prior probabilities of groups:1 20.4074074 0.5925926Groupmeans:x1 x2 x3 x41 15.73636 65.02818 25.149091 74.3502 11.56250 40.10625 9.228125 58.105Coefficients of linear discriminants:LD1x1 -0.06034498x2 -0.01661878x3 -0.02532111x4 -0.08078449>Z=predict(ld)>newG=Z$class>cbind(G,newG,Z$x)G newG LD11 1 1 -0.636598122 1 1 -0.85792242....9 1 1 -3.8115753710 1 2 0.1086677611 1 1 -0.65403492....26 2 2 2.2650082627 2 2 1.52288285>tab=table(G,newG)>tabnewGG 1 21 10 12 0 16>sum(diag(prop.table(tab))[1] 0.962963判别结果与距离判别法、Fisher判别法一致.另外,Bayes判别法对三个样本数据的判别过程和判定结果也与Fisher判别法相同.习题5.1在定理5.1的假设下,证明:当μ₁≠μ₂时,有μ₁y-μ₂>0及μ2y-μy<0成立.5.2(数据文件为ex5.2)根据经验,今天的湿温差x₁和气温差x₂是预报明天下雨或不下雨的两个重要因子,试就表5-3中的数据建立Fisher线性判别函数进行判别.又设今天测得x₁=8.1,x₂=2.0,问:应该预报明天是雨天还是晴天?表5-3 雨天和晴天的湿温差x₁和气温差x₂续前表5.3(数据文件为ex5.3)某企业生产的产品,其造型、性能和价位及所属级别如表5-4所示.试利用表中数据,使用Fisher判别法和Bayes判别法进行判别分析.表5-4 某企业产品的造型、性能、价位及级别等指标序号造型性能价位级别13342872286577337775614164379153446841617556827487851286562692944796021037542731188874531256733631338567631477288435.4(数据文件为ex5.4)在研究砂基液化问题中,选了七个因子.今从已液化和未液化的地层中分别抽了12个和23个样本,其中1类表示已液化类,2类表示未液化类.试用距离判别法对原来的35个样本进行回代分类并分析误判情况.表5-5 砂基液化原始分类数据编号类别x1 x2 x3 x4 x5 x6 x71 1 6.6 39 1.0 6.0 6 0.12 202 1 6.6 39 1.0 6.0 12 0.12 203 1 6.1 47 1.0 6.0 6 0.08 124 1 6.1 47 1.0 6.0 12 0.08 125 1 8.4 32 2.0 7.5 19 0.35 756 1 7.2 6 1.0 7.0 28 0.30 307 1 8.4 113 3.5 6.0 18 0.15 758 1 7.5 52 1.0 6.0 12 0.16 409 1 7.5 52 3.5 7.5 6 0.16 4010 1 8.3 113 0.0 7.5 35 0.12 180续前表编号类别T1 T2 Z3 Z4 T5 Z6 T711 1 7.8 172 1.0 3.5 14 0.21 4512 1 7.8 172 1.5 3.0 15 0.21 4513 2 8.4 32 1.0 5.0 4 0.35 7514 2 8.4 32 2.0 9.0 10 0.35 7515 2 8.4 32 2.5 4.0 10 0.35 7516 2 6.3 11 4.5 7.5 3 0.20 1517 2 7.0 8 4.5 4.5 9 0.25 3018 2 7.0 8 6.0 7.5 4 0.25 3019 2 7.0 8 1.5 6.0 1 0.25 3020 2 8.3 161 1.5 4.0 4 0.08 7021 2 8.3 161 0.5 2.5 1 0.08 7022 2 7.2 6 3.5 4.0 12 0.30 3023 2 7.2 6 1.0 3.0 3 0.30 3024 2 7.2 6 1.0 6.0 5 0.30 3025 2 5.5 6 2.5 3.0 7 0.18 1826 2 8.4 113 3.5 4.5 6 0.15 7527 2 8.4 113 3.5 4.5 8 0.15 7528 2 7.5 52 1.0 6.0 6 0.16 4029 2 7.5 52 1.0 7.5 8 0.16 4030 2 8.3 97 0.0 6.0 5 0.15 18031 2 8.3 97 2.5 6.0 5 0.15 18032 2 8.3 89 0.0 6.0 10 0.16 18033 2 8.3 56 1.5 6.0 13 0.25 18034 2 7.8 172 1.0 3.5 6 0.21 4535 2 7.8 283 1.0 4.5 6 0.18 455.5(数据文件为ex5.5)表5-6是某金融机构客户的个人资料.对一个金融机构来说,对客户信用度的了解至关重要,因为利用这些资料,可以挖掘出许多重要的信息,建立客户的信用度评价体系.所选8个指标:x₁为月收入;x₂为月生活费支出;x₃是虚拟变量,住房的所有权属于自己的为“1”,租用的为“0”;x₄为目前工作的年限;x₅为前一个工作的年限;x₆为目前住所的年限;x₇为前一个住所的年限;x₈为家庭赡养的人口数;G为信用度级别,信用度最高为“5”,信用度最低为“1”.试对表5-6中的数据进行Fisher判别分析;又若一位新客户的8个指标分别为(2500,1500,0,3,2,3,4,1),试对该客户的信用度进行评价.表 5-6某金融机构客户的个人信用度评价数据序号x1 x2 x3 x4 x5 x6 x7 x8 G1 1000 3000 0 0.1 0.3 0.1 0.3 4 12 3500 2500 0 0.5 0.5 0.5 2 1 13 1200 1000 0 0.5 0.5 1 0.5 3 14 800 800 0 0.1 15 1 3 1续前表序号x1 x2 x3 x4 x5 x6 x7 x8 G5 3000 2800 0 1 2 3 4 3 16 4500 3500 0 8 2 10 1 5 27 3000 2600 1 6 1 3 4 2 28 3000 1500 0 2 8 6 2 5 39 850 425 1 3 3 25 25 1 310 2200 1200 1 6 3 1 4 1 311 4000 1000 1 3 5 3 2 1 412 7000 3700 1 10 4 10 1 4 413 4500 1500 1 6 4 4 9 3 414 9000 2250 1 8 4 5 3 2 515 7500 3000 1 10 3 10 3 4 516 3000 1000 20 5 15 10 1 517 2500 700 10 5 15 5 3 55.6(数据文件为ex5.6)为了研究中小企业的破产模型,选定4个经济指标:x₁为总负债率(现金收益/总负债);x₂为收益性指标(纯收入/总财产);x₃为短期支付能力(流动资产/流动负债);x₄为生产效率性指标(流动资产/纯销售额).对17个破产企业(1类)和21个正常运行企业(2类)进行了调查,得如下资料(见表5-7).试对表5-7中的数据进行Bayes判别分析并对8个待判样品类别进行判定.表5-7 中小型企业破产模型经济指标续前表附录附录1(两总体G₁和G₂距离判别的R程序“DDA2.R”)DDA2<-function(TrnG1,TrnG2,TstG=NULL,var.equal=FALSE){if(is.null(TstG)==TRUE)TstG<-rbind(TrnG1,TrnG2)if(is.vector(TstG)==TRUE)TstG<-t(as.matrix(TstG))elseif(is.matrix(TstG)!=TRUE)TstG<-as.matrix(TstG)if(is.matrix(TrnG1)!=TRUE)TrnG1<-as.matrix(TrnG1)if(is.matrix(TrnG2)!=TRUE)TrnG2<-as.matrix(TrnG2);nx<-nrow(TstGblong<-matrix(rep(0,nx),nrow=1,byrow=TRUE,dimnames=list("blong ",1:nx))mu1<-colMeans(TrnG1);mu2<-colMeans(TrnG2)if(var.equal==TRUE||var.equal==T){S<-var(rbind(TrnG1,TrnG2))w<-mahalanobis(TstG,mu2,S)-mahalanobis(TstG,mu1,S)}else{S1<-var(TrnG1);S2<-var(TrnG2)w<-mahalanobis(TstG,mu2,S2)-mahalanobis(TstG,mu1,S1)}for(iin1:nx){if(w[i]>0)blong[i]<-1elseblong[i]<-2}blong在该程序中,输入变量TrnG1和TrnG2分别表示来自总体G₁和G₂的训练样本,其输入格式是数据框或矩阵(样本按行输入);输入变量TstG是待测样本,其输入格式是数据框、矩阵(样本按行输入)或向量(一个待测样本).如果不输入TstG(默认值),则待测样本为两个训练样本之和,即计算训练样本的回判情况.输入变量var.equal是逻辑变量,var.equal=TRUE表示两个总体的协方差矩阵相同,否则(默认值)为不同.函数的输出是由“1”和“2”构成的一维矩阵,“1”表示待测样本属于G₁类,“2”表示待测样本属于G₂类.当两总体样本协方差矩阵相同时,该程序的使用命令为:DDA2(classG1,classG2,var.equal=TRUE).当两总体样本协方差矩阵不相同时,该程序的使用命令为:DDA2(classG1,classG2),附录2(多总体距离判别的R程序“DDAM.R”)DDAM<-function(TrnX,TrnG,TstX=NULL,var.equal=FALSE){if(is.factor(TrnG)==FALSE){mx<-nrow(TrnX);mg<-nrow(TrnG)TrnX<-rbind(Trnx,TrnG)TrnG<-factor(rep(1:2,c(mx,mg)))}if(is.null(TstX)==TRUE)TstX<-TrnXif(is.vector(TstX)==TRUE)TstX<-t(as.matrix(TstX))elseif(is.matrix(TstX)!=TRUE)TstX<-as.matrix(TstX)if(is.matrix(TrnX)!=TRUE)TrnX<-as.matrix(TrnX)nx<-nrow(TstX)blong<-matrix(rep(0,nx),nrow=1,dimnames=list("blong",1:nx))g<-length(levels(TrnG))mu<-matrix(0,nrow=g,ncol=ncol(Trnx))for(iin1:g)mu[i,]<-colMeans(TrnX[TrnG==i,])D<-matrix(0,nrow=g,ncol=nx)if(var.equal==TRUE|var.equal==T){for(iin1:g)D[i,]<-mahalanobis(Tstx,mu[i,],var(TrnX))}else{for(iin1:g)D[i,]<-mahalanobis(Tstx,mu[i,],var(Trnx[TrnG==i,]))}。