MATLAB对应分析------------2019/8/27

对应分析

  • 使用对应分析的条件(满足其中一条即可):
    (1)研究变量与样本间的双重关系
    (2)样品容量 n 很大(如 n > 1000 )
    (3)变量数量级相差很大
  • 基本思想:
     由于R型因子分析和Q型因子分析都是反映一个整体的不同侧面,因而它们之间一定存在内在的联系。对应分析就是通过对应变换后的标准化矩阵 Z 将两者有机地结合起来。
     具体:
    在这里插入图片描述
    在这里插入图片描述
  • 对应分析的数据变换具体步骤:
    设有n 个样品,每个样品观测 p 个指标,原始数据阵为:
    X = [ x 11 x 12 ⋯ x 1 p x 21 x 22 ⋯ x 2 p ⋮ ⋮ x n 1 x n 2 ⋯ x n p ] X=\begin{bmatrix} x_{11} & x_{12 } \cdots x_{1p} \\ x_{21}&x_{22} \cdots x_{2p} \\ \vdots&\vdots \\ x_{n1}&x_{n2} \cdots x_{np} \end{bmatrix} X=x11x21xn1x12x1px22x2pxn2xnp
    (1)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 对应分析的计算步骤:
    (1)由原始数据阵 X 出发计算对应阵 P 和对应变换后的新数据阵 Z ,计算公式
    见(95)和(97)。

    (2)计算行轮廓分布(或行形象分布),记:
    在这里插入图片描述
    (3)计算列轮廓分布(或列形象分布),记:
    在这里插入图片描述
    (4)计算总惯量和 χ 2 χ^2 χ2 统计量,第 k k k 个与第 i i i 个样品间的加权平方距离(或称 χ 2 χ2 χ2 距离)为:
    在这里插入图片描述
    在这里插入图片描述 χ 2 χ^2 χ2的最大维度 = m i n { 行 数 , 列 数 } − 1 =min\{行数,列数\}-1 =min{}1
    (5)对标准化后的新数据阵 Z 作奇异值分解
    在这里插入图片描述
    (6)计算行轮廓的坐标G 和列轮廓的坐标 F 。
    在这里插入图片描述
    在这里插入图片描述
    (7)在相同二维平面上用行轮廓的坐标G 和列轮廓的坐标 F (取 m = 2 )绘制出点的平面图 .
    也就是把 n 个行点(样品点)和 p 个列点(变量点)在同一个平面坐标系中绘制出来,对一组行点或一组列点,二维图中的欧氏距离与原始数据中各行(或列)轮廓之间的加权距离是相对应的。但请注意,对应行轮廓的点与对应列轮廓的点之间没有直接的距离关系。
    (8)求总惯量Q 和 2 χ 统计量的分解式。
    在这里插入图片描述
    (9)对样品点和变量点进行分类,并结合专业知识进行成因解释。
    解:
x=[0.583910 0.111480 0.092473 0.050073 0.038193 0.018803 0.079946
0.581218 0.081315 0.112380 0.042396 0.043280 0.040004 0.083!
0.530918 0.105360 0.116952 0.045064 0.043735 0.038508 0.095256
0.555201 0.096500 0.143498 0.037566 0.052111 0.026267 0.072829 
0.654952 0.047852 0.095238 0.047945 0.022134 0.018519 0.096844
0.640012 0.061680 0.116677 0.048471 0.033529 0.017439 0.072043
0.725239 0.056362 0.073262 0.044388 0.016366 0.015720 0.057261
0.678630 0.058043 0.088316 0.038100 0.039794 0.015167 0.067999
0.665913 0.088508 0.096899 0.038191 0.039275 0.019243 0.033801];
T=sum(sum(x));
P=x/T;
%计算对应矩阵P
r=sum(P,2);
c=sum(P);
%计算边缘分布
Row_prifile=x./repmat(sum(x,2),1,size(x,2));
%计算行轮廓分布阵
Z=(P-r*c)./sqrt((r*c));
%计算标准化数据Z
[u,s,v]=svd(Z,'econ');
%对标准化后的数据阵Z作奇异值分解
w2=sign(repmat(sum(v),size(v,1),1));
%修改特征向量的符号矩阵 
%使得v中的每一个列向量的分量和大于0
w1=sign(repmat(sum(v),size(u,1),1)) ;
%根据v对应地修改u的符号
ub=u.*w1;
%修改特征值的正负号
vb=v.*w2;
%修改特征向量的正负号
lamda=diag(s).^2;
%计算Z'*Z的特征值
ksi2square=T*(lamda);
%计算卡方统计量的分解
T_ksi2square=sum(ksi2square);
%计算总卡方统计量
con_rate=lamda/sum(lamda);
%计算贡献率
cum_rate=cumsum(con_rate);
%计算累积贡献率
%由累积贡献率的总统计量的83.98%可用前两维说明,即行点和列点的关系用二维表示就够
B=diag(r.^(-1/2))*ub;
%求加权特征向量
G=B*s;
%求行轮廓坐标
A=diag(c.^(-1/2))*vb;
%求加权特征向量
F=A*s;
%求列轮廓坐标F
num1=size(G,1);
%样本点的个数
num2=size(F,1);
%变量个数
rang=minmax(G(:,[1 2])');
%坐标的取值范围
delta=(rang(:,2)-rang(:,1))/(6*num1);
%画图的标注位置调整量,
ch='ABCDEFG';
yb={'山西','内蒙','辽宁','吉林','黑龙江','海南','四川','贵州','甘肃','青海'};
hold on
for i=1:num1
    plot(G(i,1),G(i,2),'*');
    %画出行点散布图
    text(G(i,1)+delta(1),G(i,2),int2str(i)) 
    %对行点进行标注 
end 
for i=1:num2 
plot(F(i,1),F(i,2),'H') %画列点散布图 
text(F(i,1)+delta(1),F(i,2),ch(i)) %对列点进行标注 
end 
% 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)
%提出第一类变量

%先由图判断出点分为几类,然后找出他们的分界线,如此题中行坐标由x(G(:,1))==0来分类
ind12=find(G(:,1)<0);
%根据行坐标第一维进行分类
rowclass12=yb(ind12)
%提出第一类样本点
ind22=find(F(:,1)<0);
%根据行坐标第一维进行分类
colclass2=ch(ind22)
%提出第一类变量

在这里插入图片描述
解:

 x=[4489 4303 4402 4350 4266 4361
   4101 3800 3749 3572 3410 3234 
   3354 3286 3344 3278 3137 3008 
   2444 2587 2749 2878 2960 3049 
   3338 3144 2959 2791 2641 2432 
   1222 1196 1149 1003 959 959];
T=sum(sum(x));
P=x/T;
%计算对应矩阵P
r=sum(P,2);
c=sum(P);
%计算边缘分布
Row_prifile=x./repmat(sum(x,2),1,size(x,2));
%计算行轮廓分布阵
Z=(P-r*c)./sqrt((r*c));
%计算标准化数据Z
[u,s,v]=svd(Z,'econ');
%对标准化后的数据阵Z作奇异值分解
w2=sign(repmat(sum(v),size(v,1),1));
%修改特征向量的符号矩阵 
%使得v中的每一个列向量的分量和大于0
w1=sign(repmat(sum(v),size(u,1),1)) ;
%根据v对应地修改u的符号
ub=u.*w1;
%修改特征值的正负号
vb=v.*w2;
%修改特征向量的正负号
lamda=diag(s).^2;
%计算Z'*Z的特征值
ksi2square=T*(lamda);
%计算卡方统计量的分解
T_ksi2square=sum(ksi2square);
%计算总卡方统计量
con_rate=lamda/sum(lamda);
%计算贡献率
cum_rate=cumsum(con_rate);
% 计算累积贡献率
% 由累积贡献率的总统计量的96.04%可用前两维说明,即行点和列点的关系用一维表示就够
B=diag(r.^(-1/2))*ub;
%求加权特征向量
G=B*s;
%求行轮廓坐标
A=diag(c.^(-1/2))*vb;
%求加权特征向量
F=A*s;
%求列轮廓坐标F
num1=size(G,1);
%样本点的个数
num2=size(F,1);
%变量个数
rang=minmax(G(:,[1 2])');
%坐标的取值范围
delta=(rang(:,2)-rang(:,1))/(6*num1);
%画图的标注位置调整量,
yb={'1973','1974','1975', '1976','1977','1978'};
ch={'L','P','S','B','E','M'};

hold on
for i=1:num1
plot(G(i,1),G(i,2),'*') %画行点散布图 
text(G(i,1)+delta(1),G(i,2),ch(i)) %对行点进行标注 
end
for i=1:num2
plot(F(i,1),F(i,2),'H') %画列点散布图 
text(F(i,1)+delta(1),F(i,2),yb(i)) %对列点进行标注 
end 
xlabel('dim1')
 ylabel('dim2')
% xlswrite('tt',[diag(s),lamda,ksi2square,con_rate,cum_rate]) 
%把计算结果输出到Excel文件,这样便于把数据直接贴到word中的表格
  • 对应分析在品牌定位研究中的应用研究
    对应分析是研究变量间相互关系的有效方法,通过对交叉列表结构的研究,揭示变量不同水平间的对应关系,是市场研究中经常用到的统计技术.
    (1 )基本原理
    在这里插入图片描述
    在这里插入图片描述
    (2)应用实例:
    受某家电企业的委托,调查公司在全国10个大城市进行了入户调查,重点检测5个空调品牌的形象特征,形象空间包括少男、少女、白领等8个形象指标。
    解:
    步骤:
    1)基础资料整理
      对应分析需要将品牌指标与形象指标数据按交叉列表的方式整理.
    2)计算惯量,确定维数
    惯量实际上就是 Z T Z Z ^TZ ZTZ 的特征值,表示相应维数对各类别的解释量,维数的数量最大= m i n { “ 行 变 量 数 − 1 ” , “ 列 变 量 数 − 1 ” } min\{“行变量数-1”,“列变量数-1”\} min{1,1}选取几个维数对结果进行分析,需结合实际情况,一般解释量累积达85%以上即可
    3)计算行坐标和列坐标
    4)补充
    由于品牌与形象指标在同一坐标系下,可以借助欧氏距离公式从数量的角度度量品牌与形象的密切程度。
    MATLAB程序:
x=[543 342 453 609 261 360 243 183 
245 785 630 597 311 233 108 69 
300 200 489 740 365 324 327 228 
401 396 395 693 350 309 263 143 
147 117 410 726 366 447 329 420]; 
x_i_dot=sum(x,2) %计算行和 
x_dot_j=sum(x) %计算列和 
T=sum(x_i_dot) %计算数据的总和 
P=x/T; %计算对应矩阵P 
r=sum(P,2), c=sum(P) %计算边缘分布 
Row_prifile=x./repmat(sum(x,2),1,size(x,2)) %计算行轮廓分布阵 
Z=(P-r*c)./sqrt((r*c)); %计算标准化数据Z 
[u,s,v]=svd(Z,'econ') %对标准化后的数据阵Z作奇异值分解 
w2=sign(repmat(sum(v),size(v,1),1)) %修改特征向量的符号矩阵 
%使得v中的每一个列向量的分量和大于0 
w1=sign(repmat(sum(v),size(u,1),1)); %根据v对应地修改u的符号 
ub=u.*w1; %修改特征向量的正负号 
vb=v.*w2; %修改特征向量的正负号 
lamda=diag(s).^2 %计算Z'*Z的特征值 
ksi2square=T*(lamda) %计算卡方统计量的分解 
T_ksi2square=sum(ksi2square) %计算总卡方统计量 
con_rate=lamda/sum(lamda) %计算贡献率 
cum_rate=cumsum(con_rate) %计算累积贡献率 
B=diag(r.^(-1/2))*ub; %求加权特征向量 
G=B*s %求行轮廓坐标 
A=diag(c.^(-1/2))*vb; %求加权特征向量 
F=A*s %求列轮廓坐标F 
num1=size(G,1); %样本点的个数 
num2=size(F,1); %变量个数 
rang=minmax(G(:,[1 2])'); %行坐标的取值范围 
delta=(rang(:,2)-rang(:,1))/(4*num1); %画图的标注位置调整量 
chrow='ABCDE'; 
strcol={'少男',' 少女',' 白领', '工人', '农民', '士兵', '主管', '教授'};
hold on 
for i=1:num1 
plot(G(i,1),G(i,2),'*') %画行点散布图 
text(G(i,1)+delta(1),G(i,2),chrow(i)) %对行点进行标注
end 
for i=1:num2 
plot(F(i,1),F(i,2),'H') %画列点散布图 
text(F(i,1)+delta(1),F(i,2),strcol(i)) %对列点进行标注 
end 
xlabel('dim1'), ylabel('dim2') 
% xlswrite('tt',[diag(s),lamda,ksi2square,con_rate,cum_rate]) 
%把计算结果输出到Excel文件,这样便于把数据直接贴到word中的表格 
dd=dist(G(:,1:2),F(:,1:2)') 
%计算第一个矩阵的行向量与第二个矩阵的列向量之间的距离
  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值