欢迎来到天天文库
浏览记录
ID:44912178
大小:149.59 KB
页数:12页
时间:2019-11-04
《R语言中的多元统计之判别分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、前言判别分析(discriminantanalysis)是多元统计分析中较为成熟的一种分类方法,它的核心思想是“分类与判断”,即根据已知类别的样本所提供的信息,总结出分类的规律性,并建立好判别公式和判别准则,在此基础上,新的样本点将按照此准则判断其所属类型。例如,根据一年甚至更长时间的每天的湿度差及压差,我们可以建立一个用于判别是否会下雨的模型,当我们获取到某一天(建立模型以外的数据)的湿度差及压差后,使用已建立好的模型,就可以得出这一天是否会下雨的判断。根据判别的组数来区分,判别分析可以分为两组判别和多组判别。接下来,我们将学习三种常见的判别分析方法,分别
2、是:·距离判别·Bayes判别·Fisher判别一、距离判别基本理论假设存在两个总体和,另有为一个维的样本值,计算得到该样本到两个总体的距离和,如果大于,则认为样本属于总体,反之样本则属于总体;若等于,则该样本待判。这就是距离判别法的基本思想。在距离判别法中,最核心的问题在于距离的计算,一般情况下我们最常用的是欧式距离,但由于该方法在计算多个总体之间的距离时并不考虑方差的影响,而马氏距离不受指标量纲及指标间相关性的影响,弥补了欧式距离在这方面的缺点,其计算公式如下:,为总体之间的协方差矩阵二、距离判别的R实现(训练样本)首先我们导入数据#读取SAS数据>li
3、brary(sas7bdat)>data1<-read.sas7bdat('disl01.sas7bdat')#截取所需列数据,用于计算马氏距离>testdata<-data1[2:5]>head(testdata,3)X1X2X3X41-0.45-0.411.090.452-0.56-0.311.510.1630.060.021.010.40#计算列均值>colM<-colMeans(testdata)>colMX1X2X3X40.096304348-0.0069565222.0334782610.431739130#计算矩阵的协方差>cov_test<-
4、cov(testdata)>cov_testX1X2X3X4X10.0681838160.0277670530.14996870-0.002566763X20.0277670530.0153638650.058782510.001252367X30.1499686960.0587825121.013098740.028607150X4-0.0025667630.0012523670.028607150.033912464#样本的马氏距离计算>distance<-mahalanobis(testdata,colM,cov_test)>head(distance
5、,5)[1]12.72646511.2246811.6927021.3478852.369820这样,我们得到了距离判别中最关键的马氏距离值,在此基础上就可以进行进一步的判别分析了。不过我们介绍一个R的第三方包WMDB,该包的wmd()函数可以简化我们的距离判别过程,函数将输出样本的分类判别结果、错判的样本信息以及判别分析的准确度。>library(WMDB)>head(data1,3)AX1X2X3X411-0.45-0.411.090.4521-0.56-0.311.510.16310.060.021.010.40#提取原始数据集的A列生成样品的已知类别
6、>testdata_group<-data1$A#转换为因子变量,用于wmd()函数中>testdata_group<-as.factor(testdata_group)>wmd(testdata,testdata_group)123456789101112131415161718192021222324252627blong11111111111111221112111122228293031323334353637383940414243444546blong2222221222111112122[1]"numofwrongjudgement"[1]15
7、162022232434383940414244[1]"samplesdividedto"[1]2221111111111[1]"samplesactuallybelongsto"[1]1112222222222Levels:12[1]"percentofrightjudgement"[1]0.7173913由分析结果可知,根据已知分类的训练样品建立的判别规则,重新应用于训练样品后,出现了13个错判样品,拥有71.7%的准确度。三、距离判别的R实现(测试样本)接着,当我们获取到未分类的新样本数据时,使用wmd()函数,在训练样本的基础上进行这些数据的距离判别
8、#导入数据,一共10个样本>data2<-read.
此文档下载收益归作者所有