当前位置:
文档之家› Matlab多元统计分析程序
Matlab多元统计分析程序
k=0;
for i=1:p
if y1(p-i+1)>0
k=k+1;
end
end
for i=1:k
l(:,i)=v1(:,i1(p-i+1))/sqrt(v1(:,i1(p-i+1))'*s11*v1(:,i1(p-i+1)));
m(:,i)=inv(s22)*s21*l(:,i)/sqrt(y1(p-i+1));
fprintf('\n')
fprintf('%8.4f',m(:,i)')
end
fprintf('\n\n各对典型相关变量的显著性检验结果:')
fprintf('\n显著性水平alpha = %6.3f',alpha)
fprintf('\n\n序号统计量自由度临界值相关系数显著性')
for i=1:k
case 2
st=corrcoef(x);
end
%
%就两组变量,分别由st确定4个协方差矩阵。
%
s11=st(1:p,1:p);
s22=st((p+1):h,(p+1):h);
s12=st(1:p,(p+1):h);
s21=s12';
%
%计算矩阵a=inv(s11)*s12*inv(s22)*s21的特征值与特征向量。
fprintf('\n 3---使用马氏距离(Mahalanobis距离)')
fprintf('\n 4---使用绝对值距离')
fprintf('\n 5---使用闵氏距离(Minkowski距离)')
k=input('请输入你的选择(1~5)');
switch k
case 1
y=pdist(xs,'Euclid');
Matlab多元统计分析程序
1.主成分分析M程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%主成分分析
%
%设对变量x1,x2,...,xp进行n次观测,得到n×p数据矩阵x=x(i,j),
%本程序对初始数据进行主成分分析,要求先请将观测矩阵输入到变
%量x,再运行本程序。
fprintf('误判概率P(1|2)= %f\n',p12)
4.聚类分析M程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%按距离大小对样品进行系统聚类分析
%要求先将观测矩阵输入到变量x,每行一个样品.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Q(4,i)=sqrt(y1(k-i+1));
end
%
%计算结果屏幕输出
%
fprintf('\n\n\n典型相关分析计算结果:')
for i=1:k
fprintf('\n\n%s\n',['第',int2str(i),'对典型相关变量的系数向量(按行排列):'])
fprintf('%8.4f',l(:,i)')
switch k
case 1
Z = linkage(y,'single');
case 2
Z = linkage(y,'complete');
case 3
Z = linkage(y,'average');
case 4
Z = linkage(y,'centroid');
case 5
Z = linkage(y,'ward');
k=input('请输入你的选择(1~2)');
%
%数据标准化
%
switch k
case 1
xs=x;
case 2
mx=mean(x);
stdr=std(x);
xs=(x-repmat(mx,n,1))./repmat(stdr,n,1);
end
%
%主成分分析,返回各主成分pc,所谓的z-得分score,x的协方差
end
%
%计算检验第i对典型相关变量是否显著的卡方统计量Q(1,i),i=1,2,...,k.
%计算卡方统计量Q(1,i)的自由度Q(2,i),i=1,2,...,k.
%计算相应的临界值Q(3,i),i=1,2,...,k.
%当Q(1,i)>Q(3,i)时第i对典型相关变量显著相关,否则其相关性不显著。
n2=length(Data_B(:,1));
k=length(Data_C(:,1));
ma=mean(Data_A); %计算均值向量
mb=mean(Data_B);
sa=cov(Data_A); %计算协方差矩阵
sb=cov(Data_B);
%
%分别计算待判样品到两总体的距离,并作出判别
%
for i=1:k
d1(i)=(Data_C(i,:)-ma)*inv(sa)*(Data_C(i,:)-ma)';
d2(i)=(Data_C(i,:)-mb)*inv(sb)*(Data_C(i,:)-mb)';
if d1(i)<d2(i)
res1(i)='A';
else
res1(i)='B';
end
end
%
%计算误判概率P(2|1)和P(1|2)
sig='不显著';
if Q(1,i)>Q(3,i)
sig='显著';
end
fprintf('\n%5d %8.4f%8.4f%8.4f%8.4f%s',i,Q(1,i),Q(2,i),Q(3,i),Q(4,i),sig)
end
%
%程序结束
%
3.判别分析M程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%矩阵的特征值latent和每个数据点的Hotelling统计量tsquare.
%
[pc score latent tsquare]=princomp(xs)
2.典型相关分析M程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%在运行本程序之前,请先把数据输入/导入到MATLAB的
case 2
y=pdist(xs,'SEuclid');
case 3
y=pdist(xs,'Mahal');
case 4
y=pdist(xs,'CityBlock');
case 5
k=input('请输入闵氏距离中的参数q: ');
y=pdist(xs,'Minkowski',q);
end
%
%选择聚类方法,生成聚类树
end
p21=sum(res2)/n1;
for i=1:n2
d1(i)=(Data_B(i,:)-ma)*inv(sa)*(Data_B(i,:)-ma)';
d2(i)=(Data_B(i,:)-mb)*inv(sb)*(Data_B(i,:)-mb)';
if d1(i)<d2(i)
res3(i)=1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Data_A=xlsread('DataA.xls'); %读入数据
Data_B=xlsread('DataB.xls');
Data_C=xlsread('DataC.xls');
n1=length(Data_A(:,1)); %获得样品数量
%
%确定观测矩阵x的尺寸.
%
[n,p]=size(x);
%
%数据处理方式设置,即是否先将数据标准化.
%
fprintf('\n 1---使用原始数据直接计算距离')
fprintf('\n 2---使用标准化后的数据计算距离')
k=input('请输入你的选择(1~2)');
%
%数据标准化
%
switch k
end
%
%绘制聚类图
%
h=dendrogram(z)
fprintf('\n2--使用样本相关矩阵计算典型相关变量')
ctl=input('\n请输入你的选择');
%
%默认的显著性水平为alpha=0.05,可以改变下面语句中的alpha值。
%
alpha=0.05;
%
%按要求计算样本协方差矩阵或样本相关矩阵
%
switch ctl
case 1
st=cov(x);
case 1
xs=x;
case 2
mx=mean(x);
stdr=std(x);
xs=(x-repmat(mx,n,1))./repmat(stdr,n,1);
end
%
%计算样品间的距离.
%
fprintf('\n 1---使用欧氏距离')
fprintf('\n 2---使用标准欧氏距离(B模距离)')