其他

技术贴│典型相关及其MATLAB代码

2017-01-12 郑连虎 Tiger·Z 公共管理定量方法学习

点击上方蓝字,关注:

公共管理定量方法学习  微信公众号



这个公众号颓了好长时间,小编真心对不住各位父老乡亲…… [ 流泪检讨.gif ]

那么,为了回馈大家的资瓷,也为了让公众号搞得更加Excited ,小编决定新开一个“技术贴”栏目,做一点微小的工作。虽然起步too young ,但还是希望能帮助大家解决点实际问题,顺便搞个大新闻。

作为“技术贴”栏目的第一期,今天来介绍一下典型相关分析方法及其MATLAB代码。另外,深谙“所有节日都是情人节”套路的我们想要办场活动,文末有料哦!

 

典型相关分析的思想:它是干嘛滴?

在相关分析中,如果我们要研究两组变量(X1 , X2 ,……, Xp ) 及(Y1 , Y2 , ……, Yq ) 的相关关系,可以用传统方法,分别计算两组变量之间的全部相关系数,那一共就有(p×q)个简单相关系数,这样又繁琐又不能抓住问题的本质。如果能够采用类似于主成分的思想,分别找出两组变量的各自的某个线性组合,讨论线性组合之间的相关关系,则更简捷,这就产生了典型相关分析的方法。

最初付诸实践的Hotelling于1936年在《生物统计》期刊上发表论文“两组变量之间的关系”中首次提出典型相关分析(Canonical Correlation Analysis)的概念,将简单相关系数推广到多个随机变量与多个随机变量之间的相关关系的讨论中。后来Cooley, Lohnes (1971),Kshirsagar (1972)和 Mardia,Kent,Bibby(1979)等推动了典型相关分析的应用和推广。

典型相关分析是测度两组变量间整体相关关系的统计分析方法,它验证一组变量与另一组变量之间的整体相关性,即一个变量组的综合结果与另一个变量组的综合结果之间是否存在相关。

就其具体应用来说,典型相关分析可以研究以下问题:毕业生求职对用人单位的要求和用人单位招工的条件之间的相关关系;公务员的工作能力与工作绩效之间的关系;科技投入与科技产出间的关系等等。

 

典型相关分析的步骤:它该怎么做?

这里简单介绍一下具体步骤,不做数学上的深入讨论 [ 其实就是懒 ] ……因为不做数理上的讨论,只做实践论,就不写数学公式了。但是这里需要知道这4步,才可以明白MATLAB的结果解读顺序。

1.计算相关系数阵并将其剖分;

2.求典型相关系数及典型变量;

3.典型相关系数的显著性检验;

4.典型结构与典型冗余分析。


MATLAB代码:空口无凭,实践先行

MATLAB是美国MathWorks公司出品的数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。至于这货有多牛,请自行百度[ 当然了,如果你有机会同理工科异性讨论这一话题,没准会提高撩汉/妹技能…… ]

MATLAB可以读取Excel文件里的数据,体现在下面的就是第2、3行代码。我以测试文件test.xlsx为例来介绍,其中x组的数据是“城市基础设施构成要素得分”,包括“文化设施指数”,“卫生设施指数”等6组数据;y组的数据是“城市竞争力表现要素得分”,包括“长期经济增长率”,“居民人均收入”等4组数据。百分号后面是每行代码的解释。


clc,clear

x= xlsread('test.xlsx','Sheet1'); %读取x组的数据

y= xlsread('test.xlsx','Sheet2'); %读取y组的数据

p=size(x,2);q=size(y,2);

x=zscore(x);y=zscore(y); %标准化数据

n=size(x,1); %观测数据的个数

%下面做典型相关分析,a,b返回的是典型变量的系数,r返回的是典型相关系数

%u,v返回的是典型变量的值,stats返回的是假设检验的一些统计量的值

[a1,b1,r,u1,v1,stats]=canoncorr(x,y)

%下面修正a,b每一列的正负号,使得a,b每一列的系数和为正

%对应的,典型变量取值的正负号也要修正

a=a1.*repmat(sign(sum(a1)),size(a1,1),1)

b=b1.*repmat(sign(sum(b1)),size(b1,1),1)

u=u1.*repmat(sign(sum(a1)),size(u1,1),1)

v=v1.*repmat(sign(sum(b1)),size(v1,1),1)

x_u_r=x'*u/(n-1) %计算x,u的相关系数

y_v_r=y'*v/(n-1) %计算y,v的相关系数

x_v_r=x'*v/(n-1) %计算x,v的相关系数

y_u_r=y'*u/(n-1) %计算y,u的相关系数

ux=sum(x_u_r.^2)/p %x组原始变量被u_i解释的方差比例

ux_cum=cumsum(ux) %x组原始变量被u_i解释的方差累积比例

vx=sum(x_v_r.^2)/p %x组原始变量被v_i解释的方差比例

vx_cum=cumsum(vx) %x组原始变量被v_i解释的方差累积比例

vy=sum(y_v_r.^2)/q %y组原始变量被v_i解释的方差比例

vy_cum=cumsum(vy) %y组原始变量被v_i解释的方差累积比例

uy=sum(y_u_r.^2)/q %y组原始变量被u_i解释的方差比例

uy_cum=cumsum(uy) %y组原始变量被u_i解释的方差累积比例

val=r.^2 %典型相关系数的平方,M1或M2矩阵的非零特征值

 

MATLAB结果解读:拨开迷雾

我用的是MATLAB R2012a版本跑的数据,不同版本其输出界面略有不同。

1. 典型相关系数及其检验

典型相关系数看结果中的r,从中可以看出前两个典型相关系数较高。


    然后进行卡方检验,看结果中的stats部分,其自由度、卡方计算值和卡方临界值(显著水平0.05)看stats部分的df1、chisq和p三项内容。可以看出4对典型变量均通过了卡方统计量检验,表明相应典型变量之间相关关系显著,能够用城市基础设施变量组来解释城市竞争力变量组。


2. 典型相关模型

典型相关方程的系数看结果中的a和b部分,可以看出基础设施方面的主要因素是X2,X3,X4(典型系数分别为0.3423,0.4913,0.3372)


3. 典型结构

结果中的x-u-r表示X组变量与“基础设施组”的典型变量的关系,比如X1,X2,X3,X4与“基础设施组”的第一典型变量U1均呈高度相关,说明X1,X2,X3,X4在反映城市基础设施方面占有主导地位(相关系数分别是0.7145,0.6373,0.7190和0.7232),其中又以X4居于首位。y-v-r,x-v-r,y-u-r的解释亦同。


4. 典型冗余分析与解释能力

典型冗余分析用来表示各典型变量对原始变量组整体的变差解释程度,分为组内变差解释和组间变差解释。结果中的两对典型变量U1、U2和V1、V2均较好地预测了对应的那组变量,而且交互解释能力也比较强。来自城市“竞争力组”的方差被“基础设施组”典型变量U1、U2解释的比例和为64.04%;来自“基础设施组”的方差被“竞争力组”典型变量V1、V2解释的方差比例和为56.81%。




文末有料:“花式表白”活动


    为贯彻“做有趣的研究”的号召,本着“所有节日都是情人节”的原则,我们想在2017年的情人节到来之际,发起一场花式表白活动。方法是用定量研究软件做出独特的表白(比如用MATLAB代码画一颗心之类),配上自己想要说的话(不要太长哦……),然后将代码或截图啥的发到我们的邮箱pap_qrm@163.com,我们会在情人节当天推送特辑。当然,考虑到单身汪的感受(比如小编我,呜呜……),为了不使“花式表白”变成“花式虐狗”,大家的表白对象可以是父母亲人、恩师好友(或是小编我……)等等。还有,记得留下你的名字哟(昵称、网名或真实姓名皆可)!


数据来源及主要参考:

[1]范柏乃,蓝志勇. 高级公共管理研究方法[M].北京:科学出版社,2013

[2]司守奎,孙玺菁. 数学建模算法与应用[M].北京:国防工业出版社,2012

[3]倪鹏飞等,城市竞争力蓝皮书:中国城市竞争力报告[M]北京:社会科学出版社,2003



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存