爱情 (1) 安装 (2) 北斗 (1) 毕业 (1) 变量 (1) 测绘局 (1) 测量 (2) 插件 (1) 查询 (1) 常用 (1) 成果转化 (1) 词汇 (1) 慈善 (1) 答辩 (2) 代码 (2) 电台 (1) 发泄 (1) 感悟 (4) 高程 (1) 搞笑 (5) 共产党 (1) 古诗词 (1) 管理 (1) 函数 (3) 绘图 (1) 加密 (1) 交际 (1) 教程 (4) 教育 (2) 解决 (4) 解密 (1) 精度 (1) 酒桌 (2) 开源 (2) 科技 (1) 科学 (1) 刻录 (1) 老外 (1) 励志 (5) 连续剧 (1) 恋爱 (1) 列表 (1) 领导 (1) 美食 (2) 名人 (3) 命令 (4) 区别 (1) 日记 (2) 软件 (12) 商业 (3) 时政 (1) 视频 (1) 数据 (1) 算法 (1) 投影 (2) 图论 (1) 网络 (1) 网站 (1) 卫星 (3) 未成年 (1) 慰问 (1) 文本 (1) 文件 (2) 下载 (4) 笑话 (2) 学习 (9) 遥感 (1) 疑问 (5) 营销 (1) 娱乐 (3) 源代码 (2) 政策 (1) 指导 (3) 智慧 (5) 主成分分析 (2) 抓图 (1) 专家 (1) 资料 (5) 字符串 (1) 最短路径 (1) 坐标 (1) baidu (3) Bernese (1) blog (2) c# (9) China (3) Dijkstra (1) DNS (1) doris (1) dos (1) excel (1) firefox (3) GAMIT (8) gcc (1) GIS (3) GMT (1) GPS (5) ITRF (1) linux (5) mapx (1) matlab (6) movie (4) music (3) oracle (2) pic (1) PPT (3) PROJ.4 (2) python (2) QQ (2) rinex (1) shell (2) sql (1) teqc (3) tools (1) tps (1) ubuntu (5) USA (1) website (1)

博客归档

2010年5月12日星期三

matlab-统计概率工具箱详解——主成分析

主 成分析是把多个指标化为少数几个综合指标的一种统计方法。在多变量研究中,往往由于变量个数太多,并且彼此之间存在一定的 相关性,使得观测数据在一定程度上反映的信息有所重叠。利用主成分析则可 以将这一问题化简,即通过降维,找出几个综合因子来代表原来众多 变量,使这些综合因子尽可能反应原来变量的信息量,而其彼此之间互不相关。

1、bartlett维数检验
[ndim,prob,chi]=barttest(x,alpha)
用给定的显著性概率alpha,返回维数、显著性概率和卡方值,用于解释x数据矩阵的非随即变化特征。维数由一系列假设检验确定。假设 ndim=1的检验是检验与每个因子一起的方差是否相等;ndim=2的检验则检验第2个因子至最后一个因子一起的方差是否相等,依此类推。。。


2、使用协方差矩阵进行主成分析
[pc,latent,explained]=pcacov(X)
利用协方差矩阵X,返回主要因子pc、协方差矩阵的特征值latent、观测量中每一个特征向量所解释的总方差百分比explained。
  1. >> clear
  2. >> load hald
  3. >> covx=cov(ingredients)
  4. >> [pc,variances,explained]=pcacov(covx)

  5. pc =

  6. -0.0678 0.6460 -0.5673 0.5062
  7. -0.6785 0.0200 0.5440 0.4933
  8. 0.0290 -0.7553 -0.4036 0.5156
  9. 0.7309 0.1085 0.4684 0.4844


  10. variances =

  11. 517.7969
  12. 67.4964
  13. 12.4054
  14. 0.2372


  15. explained =

  16. 86.5974
  17. 11.2882
  18. 2.0747
  19. 0.0397
复 制代码
3、计算源于主成分析的残差
pcares(X,ndim)
通过保留X的ndim个因子成分来获得残差,注意,ndim为标量并且必须小于X的列数。将数据矩阵、协方差和该函数一起使用。
  1. >> r1=pcares(ingredients,1);
  2. >> r2=pcares(ingredients,2);
  3. >> r3=pcares(ingredients,3);

  4. >> r11=r1(1,:)

  5. r11 =

  6. 2.0350 2.8304 -6.8378 3.0879

  7. >> r21=r2(1,:)

  8. r21 =

  9. -2.4037 2.6930 -1.6482 2.3425

  10. >> r31=r3(1,:)

  11. r31 =

  12. 0.2008 0.1957 0.2045 0.1921
复制代码
4、主成分析
[pc,score,latent,tsquare]=princomp(X)
根据数据矩阵返回因子成分pc、z分数score、特征值latent和Hotelling的T2统计量tsquare。Z分数是 通过将原来数据转换到因子成分空间得到的数据;latent向量的值为score的列数据的方差;Hotelling的T2为来自 数据集合中心的每一个观测量的多变量距离的度量。
  1. %为 ingredients数据计算因子成分,及由每个成分解释的方差
  2. >> [pc,score,latent,tsquare]=princomp(ingredients)

  3. pc =

  4. 0.0678 0.6460 -0.5673 0.5062
  5. 0.6785 0.0200 0.5440 0.4933
  6. -0.0290 -0.7553 -0.4036 0.5156
  7. -0.7309 0.1085 0.4684 0.4844


  8. score =

  9. -36.8218 6.8709 4.5909 0.3967
  10. -29.6073 -4.6109 2.2476 -0.3958
  11. 12.9818 4.2049 -0.9022 -1.1261
  12. -23.7147 6.6341 -1.8547 -0.3786
  13. 0.5532 4.4617 6.0874 0.1424
  14. 10.8125 3.6466 -0.9130 -0.1350
  15. 32.5882 -8.9798 1.6063 0.0818
  16. -22.6064 -10.7259 -3.2365 0.3243
  17. 9.2626 -8.9854 0.0169 -0.5437
  18. 3.2840 14.1573 -7.0465 0.3405
  19. -9.2200 -12.3861 -3.4283 0.4352
  20. 25.5849 2.7817 0.3867 0.4468
  21. 26.9032 2.9310 2.4455 0.4116


  22. latent =

  23. 517.7969
  24. 67.4964
  25. 12.4054
  26. 0.2372


  27. tsquare =

  28. 5.6803
  29. 3.0758
  30. 6.0002
  31. 2.6198
  32. 3.3681
  33. 0.5668
  34. 3.4818
  35. 3.9794
  36. 2.6086
  37. 7.4818
  38. 4.1830
  39. 2.2327
  40. 2.7216
复 制代码



应用Matlab内部数据cites.mat进行分析。该数据是美国329个城市反应生活质量的9项指标 的数据。9项指标依次为:气候、住房、健康、犯罪、交通、教育、艺术、娱乐和经济。

首先载入数据,包含3个变量
  1. >> clear
  2. >> load cities
  3. >> who

  4. Your variables are:

  5. categories names ratings
复制代码
用箱图表达下:
  1. >> boxplot(ratings,0,'+',0)
  2. >> set(gca,'yticklabel',categories)
复制代码

从图可以看出,艺术和住房的变化很大,气候的变化很小。

当原始数据的量级和量纲存在较大差异时,需要先对数据进行标准化,然后进行主成分析。标准化的方法是将原始数据的各列除以各列的标准差:
  1. stdr=std(ratings);
  2. sr=ratings./stdr(ones(329,1),:);
复制代码
现在寻找主要成分:
  1. [pcs,newdata,var,ts]=princomp(sr);
复制代码
(1)第一个输出——主成分pcs
pcs包括9个主成分,下面只是给出前四列
>> p4=pcs(:,1:4)

p4 =

0.2064 0.2178 -0.6900 0.1373
0.3565 0.2506 -0.2082 0.5118
0.4602 -0.2995 -0.0073 0.0147
0.2813 0.3553 0.1851 -0.5391
0.3512 -0.1796 0.1464 -0.3029
0.2753 -0.4834 0.2297 0.3354
0.4631 -0.1948 -0.0265 -0.1011
0.3279 0.3845 -0.0509 -0.1898
0.1354 0.4713 0.6073 0.4218[/code]
可以看出第一个主成分中第7个元素的权重最大。
可以通过查看p3乘以p3T的结果来判断其正交性:
  1. >> p4'*p4

  2. ans =

  3. 1.0000 -0.0000 0.0000 -0.0000
  4. -0.0000 1.0000 0.0000 -0.0000
  5. 0.0000 0.0000 1.0000 -0.0000
  6. -0.0000 -0.0000 -0.0000 1.0000
复制代码
计算结果为单位矩阵,说明主成分之间满足正交。

(2)第2个输出——主成分得分(newdata)
主成分得分是原始数据在主成分所定义的新坐标系中的确定的数据,其大小与输入数据矩阵大小相同。
下面我们看看newdata的前两列数据作为前两个主成分时的结果:
  1. >> x=newdata(:,1);
  2. >> y=newdata(:,2);
  3. >> plot(x,y,'+')
  4. >> xlabel('第一主成分')
  5. >> ylabel('第二主成分')
复制代码

从图像可以看出,在右侧有一些异常点。可以使用gnames()函数标注图中的点,下面使用字符串矩阵names调用gnames:
  1. >> gname(names)
复制代码
此时将在图像中生成一个十字交叉线,交点跟随鼠标移 动。在散点附近单击,将标注该点的字符串。标注结束后,敲回车。结果显示如下:


对于这些异常值我们可以直接删除,也即是将那几行的元素直接置空,比如New York对应第213行:
  1. rsubset=ratings;
  2. rsubset(213,:)=[];
复制代码
(3)第3个输出——主成分方差(var)
主成分方差var是有newdata的对应列所解释的包含方程的向量:
  1. >> var

  2. var =

  3. 3.4083
  4. 1.2140
  5. 1.1415
  6. 0.9209
  7. 0.7533
  8. 0.6306
  9. 0.4930
  10. 0.3180
  11. 0.1204
复 制代码
可以很方便的计算每个主成分所解释的总方差的百分比:
  1. >> percent_explained=100*var/sum(var)

  2. percent_explained =

  3. 37.8699
  4. 13.4886
  5. 12.6831
  6. 10.2324
  7. 8.3698
  8. 7.0062
  9. 5.4783
  10. 3.5338
  11. 1.3378
复 制代码
可见,前面5个主成分所解释的方差占了80%以上。
用帕累托图描述每个注册烦恼所占的百分数:
  1. >> pareto(percent_explained)
  2. >> xlabel('主成分')
  3. >> ylabel('方差解释')
复制代码

有图可以看出,前面3个主成分基本解释了2/3的标准化ratings的总变异性。
(4)第4个输出——Hotelling的T2检验
Hotelling的T2检验统计量是描述每一测量值与数据中心距离的统计量,用它可以找到数据中的极值点:
  1. >> [st,ind]=sort(ts);
  2. >> st=flipud(st);
  3. >> ind=flipud(ind);
  4. >> ex=ind(1);
  5. >> ex=ind(1)

  6. ex =

  7. 213

  8. >> names(ex,:)

  9. ans =

  10. New York, NY
复制代码
说明New York, NY是离数据中心最远的城市!!!!

http://www.matlabsky.com/thread-1213-1-1.html

没有评论:

发表评论

浏览统计