Matlab多元统计分析程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%确定观测矩阵x的尺寸,以便数据标准化.
%
[n,p]=size(x);
%
%数据处理方式设置,即是否先将数据标准化.
%
fprintf('\n 1---使用原始数据直接计算距离')
fprintf('\n 2---使用标准化后的数据计算距离')
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对典型相关变量显著相关,否则其相关性不显著。
fprintf('\n')
fprintf('%8.4f',m(:,i)')
end
fprintf('\n\n各对典型相关变量的显著性检验结果:')
fprintf('\n显著性水平alpha = %6.3f',alpha)
fprintf('\n\n序号统计量自由度临界值相关系数显著性')
for i=1:k
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');
%矩阵的特征值latent和每个数据点的Hotelling统计量tsquare.
%Leabharlann Baidu
[pc score latent tsquare]=princomp(xs)
2.典型相关分析M程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%在运行本程序之前,请先把数据输入/导入到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));
else
res3(i)=0;
end
end
p12=sum(res3)/n2;
%
%输出判别结果和误判概率
%
fprintf('\n两总体(A、B两组)判别分析结果输出:\n\n')
fprintf('待判别样品数量:%d\n\n',k)
fprintf('判别结果为%s\n\n',res1)
fprintf('误判概率P(2|1)= %f\n\n',p21)
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模距离)')
fprintf('误判概率P(1|2)= %f\n',p12)
4.聚类分析M程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%按距离大小对样品进行系统聚类分析
%要求先将观测矩阵输入到变量x,每行一个样品.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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)
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的协方差
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;
%内存空间,并存放在变量x中,每行存放一个样本。
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%确定观测矩阵x的尺寸
%
[n,h]=size(x);
%
%输入基本参数
%
p=input('\n第一组变量的个数p = ? ');
fprintf('\n1--使用样本协方差矩阵计算典型相关变量')
%两总体(A、B两组)判别分析
%
%要求将第一个总体(A组)的样品放在数据文件DataA.xls中,每行一个样品
%将第二个总体(B组)的样品放在数据文件DataB.xls中,每行一个样品
%将待判别样品放在数据文件DataC.xls中,每行一个样品
%并将上述3个数据文件放在MATLAB安装目录的work子目录下
%
%确定观测矩阵x的尺寸.
%
[n,p]=size(x);
%
%数据处理方式设置,即是否先将数据标准化.
%
fprintf('\n 1---使用原始数据直接计算距离')
fprintf('\n 2---使用标准化后的数据计算距离')
k=input('请输入你的选择(1~2)');
%
%数据标准化
%
switch k
%
for i=1:n1
d1(i)=(Data_A(i,:)-ma)*inv(sa)*(Data_A(i,:)-ma)';
d2(i)=(Data_A(i,:)-mb)*inv(sb)*(Data_A(i,:)-mb)';
if d1(i)<d2(i)
res2(i)=0;
else
res2(i)=1;
end
%输出变量w1存放a的特征值,v1存放a的特征向量。
%
a=inv(s11)*s12*inv(s22)*s21;
[v1,w1]=eig(a);
%
%计算第i对典型相关变量的系数向量l(:,i)和m(:,i),i=1,2,...k.
%
for i=1:p
t1(i,1)=w1(i,i);
end
q=h-p;
[y1 i1]=sort(t1);
fprintf('\n 3---使用马氏距离(Mahalanobis距离)')
fprintf('\n 4---使用绝对值距离')
fprintf('\n 5---使用闵氏距离(Minkowski距离)')
k=input('请输入你的选择(1~5)');
switch k
case 1
y=pdist(xs,'Euclid');
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程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
lemuda=ones(1,k);
for i=1:k
for j=i:k
lemuda(i)=lemuda(i)*(1-y1(p-j+1));
end
Q(1,i)=-(n-i-0.5*(h+1))*log(lemuda(i));
Q(2,i)=(p-i+1)*(q-i+1);
Q(3,i)=chi2inv(1-alpha,Q(2,i));
end
%
%绘制聚类图
%
h=dendrogram(z)
Matlab多元统计分析程序
1.主成分分析M程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%主成分分析
%
%设对变量x1,x2,...,xp进行n次观测,得到n×p数据矩阵x=x(i,j),
%本程序对初始数据进行主成分分析,要求先请将观测矩阵输入到变
%量x,再运行本程序。
%
fprintf('\n 1---最短距离法')
fprintf('\n 2---最长距离法')
fprintf('\n 3---平均距离法')
fprintf('\n 4---重心距离法')
fprintf('\n 5---离差平方和方法(Ward方法)')
k=input('请输入你的选择(1~5)');
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('\n2--使用样本相关矩阵计算典型相关变量')
ctl=input('\n请输入你的选择');
%
%默认的显著性水平为alpha=0.05,可以改变下面语句中的alpha值。
%
alpha=0.05;
%
%按要求计算样本协方差矩阵或样本相关矩阵
%
switch ctl
case 1
st=cov(x);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Data_A=xlsread('DataA.xls'); %读入数据
Data_B=xlsread('DataB.xls');
Data_C=xlsread('DataC.xls');
n1=length(Data_A(:,1)); %获得样品数量
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
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)')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%确定观测矩阵x的尺寸,以便数据标准化.
%
[n,p]=size(x);
%
%数据处理方式设置,即是否先将数据标准化.
%
fprintf('\n 1---使用原始数据直接计算距离')
fprintf('\n 2---使用标准化后的数据计算距离')
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对典型相关变量显著相关,否则其相关性不显著。
fprintf('\n')
fprintf('%8.4f',m(:,i)')
end
fprintf('\n\n各对典型相关变量的显著性检验结果:')
fprintf('\n显著性水平alpha = %6.3f',alpha)
fprintf('\n\n序号统计量自由度临界值相关系数显著性')
for i=1:k
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');
%矩阵的特征值latent和每个数据点的Hotelling统计量tsquare.
%Leabharlann Baidu
[pc score latent tsquare]=princomp(xs)
2.典型相关分析M程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%在运行本程序之前,请先把数据输入/导入到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));
else
res3(i)=0;
end
end
p12=sum(res3)/n2;
%
%输出判别结果和误判概率
%
fprintf('\n两总体(A、B两组)判别分析结果输出:\n\n')
fprintf('待判别样品数量:%d\n\n',k)
fprintf('判别结果为%s\n\n',res1)
fprintf('误判概率P(2|1)= %f\n\n',p21)
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模距离)')
fprintf('误判概率P(1|2)= %f\n',p12)
4.聚类分析M程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%按距离大小对样品进行系统聚类分析
%要求先将观测矩阵输入到变量x,每行一个样品.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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)
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的协方差
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;
%内存空间,并存放在变量x中,每行存放一个样本。
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%确定观测矩阵x的尺寸
%
[n,h]=size(x);
%
%输入基本参数
%
p=input('\n第一组变量的个数p = ? ');
fprintf('\n1--使用样本协方差矩阵计算典型相关变量')
%两总体(A、B两组)判别分析
%
%要求将第一个总体(A组)的样品放在数据文件DataA.xls中,每行一个样品
%将第二个总体(B组)的样品放在数据文件DataB.xls中,每行一个样品
%将待判别样品放在数据文件DataC.xls中,每行一个样品
%并将上述3个数据文件放在MATLAB安装目录的work子目录下
%
%确定观测矩阵x的尺寸.
%
[n,p]=size(x);
%
%数据处理方式设置,即是否先将数据标准化.
%
fprintf('\n 1---使用原始数据直接计算距离')
fprintf('\n 2---使用标准化后的数据计算距离')
k=input('请输入你的选择(1~2)');
%
%数据标准化
%
switch k
%
for i=1:n1
d1(i)=(Data_A(i,:)-ma)*inv(sa)*(Data_A(i,:)-ma)';
d2(i)=(Data_A(i,:)-mb)*inv(sb)*(Data_A(i,:)-mb)';
if d1(i)<d2(i)
res2(i)=0;
else
res2(i)=1;
end
%输出变量w1存放a的特征值,v1存放a的特征向量。
%
a=inv(s11)*s12*inv(s22)*s21;
[v1,w1]=eig(a);
%
%计算第i对典型相关变量的系数向量l(:,i)和m(:,i),i=1,2,...k.
%
for i=1:p
t1(i,1)=w1(i,i);
end
q=h-p;
[y1 i1]=sort(t1);
fprintf('\n 3---使用马氏距离(Mahalanobis距离)')
fprintf('\n 4---使用绝对值距离')
fprintf('\n 5---使用闵氏距离(Minkowski距离)')
k=input('请输入你的选择(1~5)');
switch k
case 1
y=pdist(xs,'Euclid');
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程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
lemuda=ones(1,k);
for i=1:k
for j=i:k
lemuda(i)=lemuda(i)*(1-y1(p-j+1));
end
Q(1,i)=-(n-i-0.5*(h+1))*log(lemuda(i));
Q(2,i)=(p-i+1)*(q-i+1);
Q(3,i)=chi2inv(1-alpha,Q(2,i));
end
%
%绘制聚类图
%
h=dendrogram(z)
Matlab多元统计分析程序
1.主成分分析M程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%主成分分析
%
%设对变量x1,x2,...,xp进行n次观测,得到n×p数据矩阵x=x(i,j),
%本程序对初始数据进行主成分分析,要求先请将观测矩阵输入到变
%量x,再运行本程序。
%
fprintf('\n 1---最短距离法')
fprintf('\n 2---最长距离法')
fprintf('\n 3---平均距离法')
fprintf('\n 4---重心距离法')
fprintf('\n 5---离差平方和方法(Ward方法)')
k=input('请输入你的选择(1~5)');
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('\n2--使用样本相关矩阵计算典型相关变量')
ctl=input('\n请输入你的选择');
%
%默认的显著性水平为alpha=0.05,可以改变下面语句中的alpha值。
%
alpha=0.05;
%
%按要求计算样本协方差矩阵或样本相关矩阵
%
switch ctl
case 1
st=cov(x);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
Data_A=xlsread('DataA.xls'); %读入数据
Data_B=xlsread('DataB.xls');
Data_C=xlsread('DataC.xls');
n1=length(Data_A(:,1)); %获得样品数量
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
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)')