数学建模常用模型16 :对应分析

对应分析( correspondence analysis )是在R型和Q型因子分析基础上发展起来的多元统计分析方法,又称为R-Q型因子分析。

例 试用对应分析研究我国部分省份的农村居民家庭人均消费支出结构。选取7个变量:A为食品支出比重,B为衣着支出比重,C为居住支出比重,D为家庭设备及服务支出比重,E为医疗保健支出比重,F为交通和通讯支出比重,G为文教娱乐、日用品及服务支出比重。考察的地区(即样品)有10个:山西、内蒙古、吉林、辽宁、黑龙江、海南、四川、贵州、甘肃、青海(原始数据见表1)。

表1 中国10个省份农村居民家庭人均消费支出数据

地区

A

B

C

D

E

F

G

1山西

0.583910

0.111480

0.092473

0.050073

0.038193

0.018803

0.079946

2内蒙古

0.581218

0.081315

0.112380

0.042396

0.043280

0.040004

0.083339

3辽宁

0.565036

0.100121

0.123970

0.041121

0.043429

0.031328

0.078919

4吉林

0.530918

0.105360

0.116952

0.045064

0.043735

0.038508

0.095256

5黑龙江

0.555201

0.096500

0.143498

0.037566

0.052111

0.026267

0.072829

6海南

0.654952

0.047852

0.095238

0.047945

0.022134

0.018519

0.096844

7四川

0.640012

0.061680

0.116677

0.048471

0.033529

0.017439

0.072043

8贵州

0.725239

0.056362

0.073262

0.044388

0.016366

0.015720

0.057261

9甘肃

0.678630

0.058043

0.088316

0.038100

0.039794

0.015167

0.067999

1青海

0.665913

0.088508

0.096899

0.038191

0.039275

0.019243

0.033801

数据表41中列变量(A,B,C,D,E,F,G)是消费支出的几个指标,可以理解为属性变量“消费支出”的几个水平(或类目)。表41中的样品(行变量)是几个不同的地区,可理解为属性变量“地区”的几个不同水平(或类目)。

表2和图1给出了计算的主要结果。

表2 惯量和 (卡方)分解

奇异值

主惯量

卡方

贡献率

累积贡献率

0.13161

0.017321

0.170306

0.655946

0.655946

0.069681

0.004855

0.04774

0.183872

0.839818

0.048169

0.00232

0.022814

0.087868

0.927686

0.035818

0.001283

0.012614

0.048585

0.976271

0.022939

0.000526

0.005174

0.019927

0.996198

0.01002

0.0001

0.000987

0.003802

1

{\chi ^2} 统计量等于0.2596,总 统计量的83.98%可用前两维即可说明,它表示行点和列点之间的关系用二维表示就足够了。

在图1中,给出10个样品点(用1,2,…,10表示)和7个变量点(用A,B,…,G表示)在相同坐标系上绘制的散布图。从图中可以看出,样品点和变量点可以分为两类;第一类包括变量点B,C,E,F,G和样品点1,2,3,4,5;第二类包括变量点A,D和样品点6,7,8,9, 10。

在第一类中,变量为衣着(B),居住(C),医疗保健(E),交通和通讯(F), 文教娱乐、日用品及服务(G)的支出分别占总支出的比重;地区有:山西(1),内蒙 古(2),辽宁(3),吉林(4),黑龙江(5),它们位于我国的东部和北部地区,说 明这5个地区的消费支出结构相似。在第二类中,变量为食品(A),家庭设备及服务(D) 的支出分别占总支出的比重;地区有:海南(6),四川(7),贵州(8),甘肃(9),青海(10),它们位于我国的南部和西部地区,说明这5个地区的消费支出结构相似。

MATLAB源代码:

clc, clear
a=load('xf.txt');   %原始文件保存在纯文本文件xf.txt中
T=sum(sum(a));
P=a/T;   %计算对应矩阵P
r=sum(P,2); c=sum(P);  %计算边缘分布
Row_prifile=a./repmat(sum(a,2),1,size(a,2));   %计算行轮廓分布阵
B=(P-r*c)./sqrt((r*c));   %计算标准化数据B
[u,s,v]= svd(B,'econ');    %对标准化后的数据阵B作奇异值分解
d=diag(s);
fprintf('奇异值为:\n');
disp(d);
w1=sign(repmat(sum(v),size(v,1),1)); %修改特征向量的符号矩阵,使得v中的每一个列向量的分量和大于0
w2=sign(repmat(sum(v),size(u,1),1));  %根据v对应地修改u的符号
vb=v.*w1;  %修改特征向量的正负号
ub=u.*w2;  %修改特征向量的正负号,本例中样本点个数和变量个数不等
lamda=diag(s).^2;   %计算Z'*Z的特征值,即计算主惯量
fprintf('主惯量为:\n');
disp(lamda);
ksi2square=T*(lamda);  %计算卡方统计量的分解
fprintf('卡方为:\n');
disp(ksi2square);
T_ksi2square=sum(ksi2square); %计算总卡方统计量
fprintf('总卡方统计量为:\n');
disp(T_ksi2square);
con_rate=lamda/sum(lamda);  %计算贡献率
cum_rate=cumsum(con_rate);  %计算累积贡献率
fprintf('累积贡献率为:\n');
disp(cum_rate);
beta=diag(r.^(-1/2))*ub;  %求加权特征向量
G=beta*s;   %求行轮廓坐标
alpha=diag(c.^(-1/2))*vb;   %求加权特征向量
F=alpha*s;   %求列轮廓坐标F
num1=size(G,1);  %样本点的个数
rang=minmax(G(:,[1,2])');  %坐标的取值范围
delta=(rang(:,2)-rang(:,1))/(5*num1); %画图的标注位置调整量
ch={'A', 'B', 'C', 'D', 'E', 'F', 'G'};
yb={'山西','内蒙古','辽宁','吉林','黑龙江','海南','四川','贵州','甘肃','青海'};
hold on
plot(G(:,1),G(:,2),'*','Color','k','LineWidth',1.3)  %画行点散布图
text(G(:,1)-delta(1),G(:,2)-3*delta(2),yb) %对行点进行标注
plot(F(:,1),F(:,2),'H','Color','k','LineWidth',1.3) %画列点散布图
text(F(:,1)+delta(1),F(:,2),ch) %对列点进行标注
xlabel('dim1'), ylabel('dim2')
xlswrite('tt',[diag(s),lamda,ksi2square,con_rate,cum_rate])
%把计算结果输出到Excel文件,这样便于把数据直接贴到word中的表格
ind1=find(G(:,1)>0); %根据行坐标第一维进行分类
rowclass=yb(ind1);  %提出第一类样本点
ind2=find(F(:,1)>0); %根据列坐标第一维进行分类
colclass=ch(ind2);  %提出第一类变量
fprintf('第一类样本及变量:\n');
disp(rowclass);
fprintf('\n')
disp(colclass);

猜你喜欢

转载自blog.csdn.net/qq_41686130/article/details/81870866