matlab中主成分分析的函数
1.princomp函数
功能:主成分分析
格式:PC=princomp(X)
[PC,SCORE,latent,tsquare]=princomp(X)
说明:[PC,SCORE,latent,tsquare]=princomp(X)对数据矩阵(即样本观测值矩阵)X进行主成分分析,给出各主成分 (PC)、所谓的Z-得分(SCORE)、X的方差矩阵的特征值(latent)和每个数据点的服务霍特林(Hotelling)T2统计量(tsquare)。
2.pcacov函数
功能:运用协方差矩阵或相关系数矩阵进行主成分分析
格式:PC=pcacov(X)
[PC,latent,explained]=pcacov(X)
说明:[PC,latent,explained]=pcacov(X)通过协方差矩阵X或相关系数矩阵进行主成分分析,返回主成分(PC)、协方差矩阵X的特征值(latent)和每个特征向量表征在观测量总方差中所占的百分数(explained)(即是主成分的贡献向量)。
3.pcares函数
功能:主成分分析的残差
格式:residuals=pcares(X,ndim)
说明:pcares(X,ndim)返回保留X的ndim个主成分所获的残差。
注意,ndim是一个标量,用来指定所用的主成分的个数,必须小于X 的列数。
而且,X是数据矩阵,而不是协方差矩阵。
4.barttest
功能:主成分的巴特力特检验
格式:ndim=barttest(X,alpha)
[ndim,prob,chisquare]=barttest(X,alpha)
说明:巴特力特检验是一种等方差性检验。
ndim=barttest(X,alpha)是在显著性水平alpha下,给出满足数据矩阵X的非随机变量的n维模型,ndim即模型维数,它由一系列假设检验所确定,ndim=1表明数据X对应于每个主成分的方差是相同的;ndim=2表明数据X对应于第二成分及其余成分的方差是相同的。
例1:从样本观测值矩阵出发求解主成分
表中列出了2007年我国31个省、市、自治区和直辖市的农村居民家庭平均每人全年消费性支出的8个主要变量数据。
数据文件保存在A.xls中。
试根据这8个
主要变量数据,进行主成分分析
表:2007年各地区农村居民家庭平均每人生活消费支出(单位:元)
[x,textdata]=xlsread(‘A.xls’);%从excel中读取数据
Xz=zscore(x) % 数据标准化
[PC,SCORE,latent,tsquare]=princomp(Xz)
%利用princomp函数根据标准化后原始样本观测数据作主成分分析,返回主成分表达式的系数矩阵PC, 主成分得分数据SCORE,样本相关系数矩阵的特征值向量latent和每个观测的霍特(Hotelling)T2统计量(tsquare)。
explained=100*latent/sum(latent)%计算贡献率
[m,n]=size(x)%求x的行数和列数
result1=cell(n+1,4);%定义一个n+1行,4列的元胞数组
result1(1,:)={'特征值','差值','贡献率','累积贡献率'}
result1(2:end,1)=num2cell(latent);%存放特征值
result1(2:end-1,2)=num2cell(-diff(latent));%存放特征值之间的差值
result1(2:end,3:4)
=num2cell([explained ,cumsum(explained )]);%存放(累积)贡献率varname=textdata(1,2:end);%提取变量名数据
result2=cell(n+1,3);%定义一个n+1行,3列的元胞数组
result2(1,:)={'标准化变量','主成分prin1','主成分prin2'} result2(2:end,1)=varname
result2(2:end,2:end)=num2cell(PC(:,1:2));%存放前2个主成分表达式的系数数据
cityname= textdata(2:end,1);%提取地区名称数据
sumxz=sum(xz,2)%每一个地区总的消费性支出
[s1,id]=sortrows(SCORE,1);%将主成分得分数据按第一主成分得分从小到大排序
result3=cell(m+1,4);%定义一个m+1行,4列的元胞数组
result3(1,:)={‘地区’,'总支出','第一主成分得分y1','第二主成分得分y2’}
result3(2:end,1)=cityname(id)%排序后地区名
result3(2:end,2:end)=num3cell([sumxz(id),s1(:,1:2)]);%存放排序后每一地区总的消费性支出,以及前2个主成分的得分数据plot(SCORE(:,1), SCORE(:,2),’ko’)%绘制两个主成分得分的散点图
xlabel(‘第一主成分得分‘),
ylabel(‘第二主成分得分‘)
gname(cityname)%交互式标注每个地区的名称
%根据霍特林T^2统计量寻找极端数据
result5=sortrows([cityname,num2cell(tsquare)],2)
%转为胞元数组,并按第二列排序
[{‘地区‘,’霍特林T^2统计量‘;result5}
练习:应用MATLAB内部的数据cities.mat进行分析。
该数据是美国329个城市反映生活质量的9项指标的数据。
这9项指标分别为:气候、住房、健康状况、犯罪、交通、教育、艺术、娱乐和经济。
例2:从协方差矩阵或相关系数矩阵出发求解主成分
表:128名成年男子身材的六项指标的相关系数矩阵
PHO=[];%输入相关系数矩阵
[PC,latent,explained]=pcacov(PHO)%相关系数矩阵进行主成分分析,返回主成分表达式的系数矩阵(PC)、相关系数矩阵PC的特征值向量(latent)和每个特征向量表征在观测量总方差中所占的百分数(explained)(即是主成分的贡献向量)。
%为了更加直观,以元胞数组的形式显示结果
%result1=cell(n+1,4);%定义一个n+1行,4列的元胞数组
result1(1,:)={'特征值','差值','贡献率','累积贡献率'}
result1(2:7,1)=num2cell(latent);%存放特征值
result1(2:6,2)=num2cell(-diff(latent));%存放特征值之间的差值
result1(2:7,3:4)
=num2cell([explained ,cumsum(explained )]);%存放(累积)贡献率%以元胞数组的形式显示前3个主成分表达式
s={'标准化变量';'身高(x1)’;’坐高(x2)’;’胸围(x3)’;’手臂长(x4)’;’肋围(x5) ’;‘腰围(x6)’}
result1(:,1)=s;
result1(1,2:4)={‘主成分prin1','主成分prin2', '主成分prin3'};
result2(2:end,1)=varname
result2(2:7,2:4)=num2cell(PC(:,1:3));%存放前3个主成分$表达式的系数数据。