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

2024-08-24 13:20

本文主要是介绍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函数~

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和模拟退火,大概率不是他的功劳。。。。。


写法如下,看看就行:

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

这篇关于SPSS和MATLAB实现【典型相关分析】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102592

相关文章

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja