SPSS和MATLAB实现【典型相关分析】

典型相关分析(Canonical Correlation analysis ),是用于研究 两组 变量(每组变量中都可能有多个指标 ) 之间相关关系的一种多元统计方法。它能够揭示出两组变量之间的内在联系

我们之前总结的相关性分析 ,也就是上图中的简单相关分析,用于分析一组变量------也即两两之间的相关性,计算方式就是本科阶段概率论学过的斯皮尔曼相关系数。多变量相关分析则是分析一组具有共同点的变量与某个变量的相关性(多对一)。而今天介绍的典型相关分析,则是多对多,换句话说,即研究两组变量之间的相关性,例如:喜欢骑自行车的群体和喜欢开车的群体有什么关系?喜欢看足球的男生和执着的男生有什么关系?以此类推,具体看下文。


一.引例

假设有下面一张表,我自己用rand函数编的,没什么实际意义:

现在有需求,分析:

  1. 成绩和娱乐时间是否存在某种关系?
  2. 文科主课是否和看书、看外剧时间存在某种关系?

显然,对于这种情况,分别求彼此的相关系数是无法达到要求的------他无法直观说明多个因素的共同作用~

如果是两两比较,那么我们直接计算相关系数即可。因此不过不妨这样考虑:对于问题一来说假设学校更看重数学成绩,而打游戏是最影响学习的存在,那么我们可以计算数学和打游戏时间的相关系数,直接代替了问题一种成绩和娱乐时间的相关系数!

二.理论

收收味,理工男不能这么随性,上面所表达的意思,如果你在复习考研数学,你可以从下面两个角度,形象地理解:

  • 数学和玩游戏是主要矛盾 ,因此可以类比计算极限中的抓大头思想:当x趋于无穷,我们只需要看高次方------在这里,我们只需要关注主要矛盾而忽视次要矛盾
  • 语文、数学、英语之间存在线性相关性,因此我们可以用数学直接代表了语文和英语 ------相当于语文英语两个多余的变量(不改变向量组的秩)。而玩游戏时间也是同理。

从高数和线代这两个不严谨的思考方式来比喻,强调的是:在成绩这一类变量中,选择主要矛盾数学,在不利影响着一类变量中,选择主要矛盾玩游戏时间,计算两者之间的相关性------即可代表成绩和不利影响两类变量之间的相关性------这就是典型相关分析一种通俗的解释!!!

实际上,虽然上面的例子纯属博主在"胡扯",严格的理论部分,也是将各个变量看做一个独立的列向量,而这个找所谓主要矛盾(代表)的过程,往往通过该组变量的线性组合。

理论性的部分不用管太多------除非你是相关专业~否则只需要知道这么几个事情:

  • 在每组变量中找出变量的线性组合,使得两组的线性组合之间具有最大的相关系数;
  • 选取和最初挑选的这对线性组合不相关的线性组合,使其配对,并选取相关系数最大的一对; 直到两组变量之间的相关性被提取完毕为止。
  • 被选出的线性组合配对称为典型变量,它们的相关系数称为典型相关系数

三.操作方式

1.SPSS实现

需要注意的是,spss版本应该高于26(不然不能直接用这个功能!)博主用的27代~

安装,导入数据,检查数据类型这都是基本功,这里不再赘述~需要注意所有变量都是【标度】!也就是尺子形状:

导入数据后,点击【分析-相关-典型相关性】

根据前面提到的方式分组!

然后就是分析结果:

这一张表关注后面的显著性~我们要通过它确定典型相关系数的个数。如上,这数据瞎编的没有参考性,假设我们规定P值为0.6(实际上0.05或者0.1)那么只有一个相关系数符合要求!即第一个~

注:

  • p<0.01,说明在99%的置信水平上拒绝原假设:
  • p<0.05,说明在95%的置信水平上拒绝原假设;
  • p<0.10,说明在90%的置信水平上拒绝原假设;
  • p>0.01,说明在99%的置信水平无法拒绝原假设:
  • p>0.05,说明在95%的置信水平上无法拒绝原假设;
  • p>0.10,说明在90%的置信水平上无法拒绝原假设;

然后看这一张表的第一列:写出线性组合:(有几个显著性达标的相关系数就写几组!这里只写一组~)

  • 成绩集合X=-.035*语文+0.277*数学+1.137*英语
  • 不利因素集合Y=0.314*玩游戏+1.154*看书-0.626*看外剧

典型变量每个分量前面的系数代表着重要程度,可结合典型相关系数进行分析。

这一组对应的相关性为0.858~


至于后面的,随便写写就行~

2.MATLAB实现

原理差不多,这里博主直接把数据粘了进去,你也可以用一些别的什么read函数。

这里用到一个新的canoncorr函数~

Matlab 复制代码
X =data1; %语数英成绩
Y = data2; %娱乐时间

[A,B,r,U,V,stats]=canoncorr(X,Y);%分析结果
%通过返回的stats里面的p值进行,选择第几典型相关对相关系数
%选择p<0.01的部分或者p<0.05

运行后可以得到一系列答案:

首先看变量r中,即为典型相关系数,各位根据自己选择的显著性水平选择需要保留的个数。可以返回去看看,和SPSS计算的一致!

A和B即上文提到的线性组合的组合系数:

把线性组合写出来以后各位自圆其说就行,主要关注点还是典型相关系数!

此外还有一个叫stats的结构体变量,大家看看就行,全是数理统计的知识:

  • Wilks:似然比统计量
  • df1,df2:自由度
  • F:统计量
  • pF:F统计量右边检验概率值
  • chisq:卡方统计量
  • pChisq:卡方统计量检验概率值
  • def:卡方检验自由度

四.实战案例

怎么说,实际上CCA也就是典型相关分析,**不是一个很高端的统计方式。**所以博主在本科期间参加的十多次大大小小的数模竞赛,只用过一次典型相关分析,也就是2022年的华数杯,虽然还拿了一等奖。。。不过这个比赛本身含金量有限,而且我们还用了BPNN和模拟退火,大概率不是他的功劳。。。。。


写法如下,看看就行:

看看就好,这不是一个很让人眼前一亮的方式------建议还是用斯皮尔曼相关系数和主成分分析处理类似的题目~

相关推荐
2401_857439691 小时前
SSM 架构下 Vue 电脑测评系统:为电脑性能评估赋能
开发语言·php
孤亭远见1 小时前
COMSOL with Matlab
matlab
SoraLuna2 小时前
「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台
开发语言·macos·ui·华为·harmonyos
xlsw_2 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
Dream_Snowar3 小时前
速通Python 第三节
开发语言·python
图南楠4 小时前
simulink离散传递函数得到差分方程并用C语言实现
matlab
高山我梦口香糖4 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
信号处理学渣4 小时前
matlab画图,选择性显示legend标签
开发语言·matlab
红龙创客4 小时前
某狐畅游24校招-C++开发岗笔试(单选题)
开发语言·c++
jasmine s4 小时前
Pandas
开发语言·python