Matlab内部数据cites.mat进行主成分析

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

首先载入数据,包含3个变量>> clear

>> load cities

>> who

Your variables are:

categories names ratings

复制代码

用箱图表达下:>> boxplot(ratings,0,'+',0)

>> set(gca,'yticklabel',categories)

复制代码

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

当原始数据的量级和量纲存在较大差异时,需要先对数据进行标准化,然后进行主成分析。标准化的方法是将原始数据的各列除以各列的标准差:stdr=std(ratings);

sr=ratings./stdr(ones(329,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的结果来判断其正交性:>> p4'*p4

ans =

1.0000 -0.0000 0.0000 -0.0000

-0.0000 1.0000 0.0000 -0.0000

0.0000 0.0000 1.0000 -0.0000

-0.0000 -0.0000 -0.0000 1.0000

计算结果为单位矩阵,说明主成分之间满足正交。

(2)第2个输出——主成分得分(newdata)

主成分得分是原始数据在主成分所定义的新坐标系中的确定的数据,其大小与输入数据矩阵大小相同。

下面我们看看newdata的前两列数据作为前两个主成分时的结果:>> x=newdata(:,1);

>> y=newdata(:,2);

>> plot(x,y,'+')

>> xlabel('第一主成分')

>> ylabel('第二主成分')

从图像可以看出,在右侧有一些异常点。可以使用gnames()函数标注图中的点,下面使用字符串矩阵names调用gnames:>> gname(names)

此时将在图像中生成一个十字交叉线,交点跟随鼠标移动。在散点附近单击,将标注该点的字符串。标注结束后,敲回车。结果显示如下:

对于这些异常值我们可以直接删除,也即是将那几行的元素直接置空,比如New York对应第213行:rsubset=ratings;

rsubset(213,:)=[];

复制代码

(3)第3个输出——主成分方差(var)

主成分方差var是有newdata的对应列所解释的包含方程的向量:>> var

var =

3.4083

1.2140

1.1415

0.9209

0.7533

0.6306

0.4930

0.3180

0.1204

复制代码

可以很方便的计算每个主成分所解释的总方差的百分比:>> percent_explained=100*var/sum(var)

percent_explained =

37.8699

13.4886

12.6831

10.2324

8.3698

7.0062

5.4783

3.5338

1.3378

复制代码

可见,前面5个主成分所解释的方差占了80%以上。

用帕累托图描述每个注册烦恼所占的百分数:>> pareto(percent_explained)

>> xlabel('主成分')

>> ylabel('方差解释')

复制代码

有图可以看出,前面3个主成分基本解释了2/3的标准化ratings的总变异性。

(4)第4个输出——Hotelling的T2检验

Hotelling的T2检验统计量是描述每一测量值与数据中心距离的统计量,用它可以找到数据中的极值点:>> [st,ind]=sort(ts);

>> st=flipud(st);

>> ind=flipud(ind);

>> ex=ind(1);

>> ex=ind(1)

ex =

213

>> names(ex,:)

ans =

New York, NY

说明New York, NY是离数据中心最远的城市!!!!

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

首先载入数据,包含3个变量>> clear

>> load cities

>> who

Your variables are:

categories names ratings

复制代码

用箱图表达下:>> boxplot(ratings,0,'+',0)

>> set(gca,'yticklabel',categories)

复制代码

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

当原始数据的量级和量纲存在较大差异时,需要先对数据进行标准化,然后进行主成分析。标准化的方法是将原始数据的各列除以各列的标准差:stdr=std(ratings);

sr=ratings./stdr(ones(329,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的结果来判断其正交性:>> p4'*p4

ans =

1.0000 -0.0000 0.0000 -0.0000

-0.0000 1.0000 0.0000 -0.0000

0.0000 0.0000 1.0000 -0.0000

-0.0000 -0.0000 -0.0000 1.0000

计算结果为单位矩阵,说明主成分之间满足正交。

(2)第2个输出——主成分得分(newdata)

主成分得分是原始数据在主成分所定义的新坐标系中的确定的数据,其大小与输入数据矩阵大小相同。

下面我们看看newdata的前两列数据作为前两个主成分时的结果:>> x=newdata(:,1);

>> y=newdata(:,2);

>> plot(x,y,'+')

>> xlabel('第一主成分')

>> ylabel('第二主成分')

从图像可以看出,在右侧有一些异常点。可以使用gnames()函数标注图中的点,下面使用字符串矩阵names调用gnames:>> gname(names)

此时将在图像中生成一个十字交叉线,交点跟随鼠标移动。在散点附近单击,将标注该点的字符串。标注结束后,敲回车。结果显示如下:

对于这些异常值我们可以直接删除,也即是将那几行的元素直接置空,比如New York对应第213行:rsubset=ratings;

rsubset(213,:)=[];

复制代码

(3)第3个输出——主成分方差(var)

主成分方差var是有newdata的对应列所解释的包含方程的向量:>> var

var =

3.4083

1.2140

1.1415

0.9209

0.7533

0.6306

0.4930

0.3180

0.1204

复制代码

可以很方便的计算每个主成分所解释的总方差的百分比:>> percent_explained=100*var/sum(var)

percent_explained =

37.8699

13.4886

12.6831

10.2324

8.3698

7.0062

5.4783

3.5338

1.3378

复制代码

可见,前面5个主成分所解释的方差占了80%以上。

用帕累托图描述每个注册烦恼所占的百分数:>> pareto(percent_explained)

>> xlabel('主成分')

>> ylabel('方差解释')

复制代码

有图可以看出,前面3个主成分基本解释了2/3的标准化ratings的总变异性。

(4)第4个输出——Hotelling的T2检验

Hotelling的T2检验统计量是描述每一测量值与数据中心距离的统计量,用它可以找到数据中的极值点:>> [st,ind]=sort(ts);

>> st=flipud(st);

>> ind=flipud(ind);

>> ex=ind(1);

>> ex=ind(1)

ex =

213

>> names(ex,:)

ans =

New York, NY

说明New York, NY是离数据中心最远的城市!!!!


相关文章

  • (更新版)小波分析原理与操作详解
  • 小波分析理论分析多时间尺度变化特征 时间序列(Time Series)是地学研究中经常遇到的问题.在时间序列研究中,时域和频域是常用的两种基本形式.其中,时域分析具有时间定位能力,但无法得到关于时间序列变化的更多信息:频域分析(如Fouri ...查看


  • MRI数据预处理流程
  • 数据处理基本流程 由于MRI 是断层扫描,耗费时间较长,患者在进行MRI 扫描的时候不可避免的会头部挪动,导致照射出来的图像不能一一映射:不同人的头颅,脑部大小,形状都会有所差异,获得的MRI 图像也千差万别,无法对其进行对比.所以我们就必 ...查看


  • 随机信号处理实验报告
  • 随机信号处理 实验报告 目录 一.实验要求: ................................................................................................. ...查看


  • 导线测量实验报告
  • 课程设计报告 设计题目: "误差理论与测量平差基础"课程设计 专 业: 班级学号: 姓 名: 指导教师: 测绘工程 测绘10001.08 董恩忠 蒋 辉 起屹日期: 2012年9月3日-2012年9月9日 南京工业大学测 ...查看


  • MATLAB求解数学模型的基本知识
  • MATLAB 求解数学模型的基本知识 目录 1. 熟悉MATLAB 软件运算环境 ............................................................................... ...查看


  • python中有关矩阵的创建.求逆.转置
  • 注:NumPy是Numarray的后继者,用来代替NumArray.SAGE是基于NumPy和其他几个工具所整合成的数学软件包,目标是取代Magma, Maple, Mathematica和Matlab 这类工具. 今天我想在网上找一些关于 ...查看


  • 空间面板数据分析--R的splm包
  • 空间面板数据分析--R 的splm 包 (任建辉,暨南大学) The package provides methods for fitting spatial panel data by maximum likelihood and GM. ...查看


  • 毕业论文-基于MATLAB的数字图像处理
  • 摘 要 数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人们服务.数字图像处理是一种通过计算机采用一定的算法对图形图像进行处理的技术.数字 ...查看


  • 2011年度数学建模A组省级一等奖论文
  • 城市表层土壤重金属污染分析 摘要 问题一中本文利用Surfer 软件,根据提供的数据,绘制出8种重金属的空间立体含量图.再运用地质累积指数法,用I PL 以及I PLzone 表示出单一金属污染负荷指数和8种重金属元素的区域污染负荷指数.由 ...查看


热门内容