备战数学建模16-相关性分析SPSSMATLAB
目录
一、变量类型与相关性分析
1-变量类型及分析
2-两变量的相关性分析
二、相关性检验实例
1-卡方检验
2-Eta检验
3-Pearson检验
4-Speraman与kendall检验
三、偏相关分析
1-偏相关分析基本概念
2-偏相关分析的案例
一、变量类型与相关性分析
1-变量类型及分析
2-两变量的相关性分析
Peaeson系数法需要通过t检验,通过则说明结果不具有偶然性。
pearson系数法需要是定距或者定比变量。
二、相关性检验实例
1-卡方检验
对于定类和定类的变量,我们采用卡方检验,具体如下所示:
我们使用SPSS进行相关性分析,具体步骤如下:
首先导入数据,如下所示:
点击分析->描述统计->交叉表->统计->勾选卡方检验,检验结果可以发现,显著性0.079,大于0.05,我们认为性别和吸烟存在偶然性,不存在很强的相关性。
我们修改一下数据,尽量让数据一致,也就是尽量让性别和吸烟有关,数据如下:
卡方检验结构如下,很明显,显著性小于0.05,说明抽烟和性别具有很强的相关性。
如果题目给出的数据类型是带频数的数据,如下所示,我们看一下:
在spss中点击数据->个案加权->勾选个案加权系数后。
此时再通过分析去作卡方检验就可以了。由下图可知显著性检验的值为0.00,则说明吸烟和性别由明显的相关关系。
2-Eta检验
Eta检验除了不适用于作定距和定距变量的相关性检验,其它的基本都适用。
一般是:行作为自变量,列作为因变量。我们将数据导入SPSS,然后点击分析->描述统计->交叉表->导入变量-> 在统计中勾选相关性即可。
从检验结果中发现,检验值为0.91,大于0.5,说明显著相关。
3-Pearson检验
Pearson检验可以用于定距和定比变量的相关性检验。
在SPSS中导入数据,依次点击分析->相关->双变量->勾选皮尔逊,点击确定即可。
得到的检验结果如下所示,相关性的绝对值为0.95,说明销售额和价格极高相关,即相关性显著。
上述Pearson相关性检验可以使用如下MATLAB函数,具体如下:
function coeff = myPearson(X , Y)
% 本函数实现了皮尔逊相关系数的计算操作
% 皮尔逊相关系数计算公式(P18)及无偏相关系数矫正公式(P19)参见《现代气候统计诊断与预测技术》-魏凤英
%
% 输入:
% X:输入的数值序列
% Y:输入的数值序列
%
% 输出:
% coeff:两个输入数值序列X,Y的相关系数
%if length(X) ~= length(Y)error('两个数值数列的维数不相等');return;
endfenzi = sum((X-sum(X)/length(X)).*(Y-sum(Y)/length(Y)));
fenmu = sqrt(sum((X-sum(X)/length(X)).^2))*sqrt(sum((Y-sum(Y)/length(Y)).^2));
coef = fenzi / fenmu;if length(X)>30coeff = coef;
elseif length(X)>4 && length(X)<30coeff = coef*(1+(1-coef^2)/(2*(length(X)-4))); %计算无偏相关系数加以矫正
elsecoeff = coef;fprintf('数据长度小于5 %8.4f\n',coeff);
endend %函数myPearson结束
在命令行输入如下代码:
X = [2.00 46.00
3.00 42.00
4.00 41.00
3.00 43.00
4.00 39.00
5.00 38.00
6.00 33.20
7.50 20.60
3.30 41.30
2.50 51.50
6.80 28.00] ;
x = X(:,1) ;
y = X(:,2) ;
myPearson(x,y)
得到的检验结果如下,和SPSS检验结果一致。
也可以使用MATLAB编程实现t检验,t检验函数具体如下:
function ttest = myttest005(X , Y) if Y <= 2 error('计算相关系数的样本量不够');return;endif X == NaNttest = Z;return;endr2 = myPearson(X , Y);%计算pearson系数[m,n]=size(Y);Z = m-2;%求出自由度tvalue=abs(r2/(sqrt((1-r2^2)/Z)));if Z == 1tnorm = 12.71;if tvalue > tnormttest = Z;elsettest = NaN;endelseif Z == 2tnorm = 4.30;if tvalue > tnormttest = Z;elsettest = NaN;endelseif Z == 3tnorm = 3.18;if tvalue > tnormttest = Z;elsettest = NaN;endelseif Z == 4tnorm = 2.78;if tvalue > tnormttest = Z;elsettest = NaN;endelseif Z == 5tnorm = 2.57;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 6tnorm = 2.45;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 7tnorm = 2.37;if tvalue > tnormttest = Z;elsettest = NaN;endelseif Z == 8tnorm = 2.31;if tvalue > tnormttest = X;elsettest = NaN;endelseif Z == 9tnorm = 2.26;if tvalue > tnormttest = Z;elsettest = NaN;endelseif Z == 10tnorm = 2.23;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 11tnorm = 2.20;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 12tnorm = 2.18;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 13tnorm = 2.16;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 14tnorm = 2.15;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 15tnorm = 2.13;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 16tnorm = 2.12;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 17tnorm = 2.11;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 18tnorm = 2.10;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 19tnorm = 2.09;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 20tnorm = 2.09;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 21tnorm = 2.08;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 22tnorm = 2.07;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 23tnorm = 2.07;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 24tnorm = 2.06;if tvalue > tnormttest = Z;elsettest = NaN;endelseif Z == 25tnorm = 2.06;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 26tnorm = 2.06;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 27tnorm = 2.05;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 28tnorm = 2.05;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 29tnorm = 2.04;if tvalue > tnormttest = Z;elsettest = NaN;end elseif Z == 30tnorm = 2.04;if tvalue > tnormttest = Z;elsettest = NaN;end else tnorm = 1.96;if tvalue > tnormttest = X;elsettest = NaN;end endif ttest ~=NaNdisp('通过t检验!!!') ;elsedisp('未通过t检验!!!') ;end %函数myttest005结束
在命令窗口调用t检验函数,具体如下:
myttest005(x,y) ;
输出结果:
4-Speraman与kendall检验
使用SPSS,分析->相关->勾选斯皮尔曼,确定即可。可以看出结果-0.986,有极高相关性。
当然也可以使用MATLAB编程,进行斯皮尔曼检验,函数如下:
function coeff = mySpearman(X , Y)
% 本函数用于实现斯皮尔曼等级相关系数的计算操作
%
% 输入:
% X:输入的数值序列
% Y:输入的数值序列
%
% 输出:
% coeff:两个输入数值序列X,Y的相关系数if length(X) ~= length(Y)error('两个数值数列的维数不相等');return;
endN = length(X); %得到序列的长度
Xrank = zeros(1 , N); %存储X中各元素的排行
Yrank = zeros(1 , N); %存储Y中各元素的排行%计算Xrank中的各个值
for i = 1 : Ncont1 = 1; %记录大于特定元素的元素个数cont2 = -1; %记录与特定元素相同的元素个数for j = 1 : Nif X(i) < X(j)cont1 = cont1 + 1;elseif X(i) == X(j)cont2 = cont2 + 1;endendXrank(i) = cont1 + mean([0 : cont2]);
end%计算Yrank中的各个值
for i = 1 : Ncont1 = 1; %记录大于特定元素的元素个数cont2 = -1; %记录与特定元素相同的元素个数for j = 1 : Nif Y(i) < Y(j)cont1 = cont1 + 1;elseif Y(i) == Y(j)cont2 = cont2 + 1;endendYrank(i) = cont1 + mean([0 : cont2]);
end%利用差分等级(或排行)序列计算斯皮尔曼等级相关系数
fenzi = 6 * sum((Xrank - Yrank).^2);
fenmu = N * (N^2 - 1);
coeff = 1 - fenzi / fenmu;end %函数mySpearman结束
在命令窗口输入数据,进行斯皮尔曼检验,具体如下:
x = [20 15 40 30 42 60 65 70 53 78; 25 18 60 45 62 88 92 99 75 98];
x = x';
mySpearman(x(:,1),x(:,2))
myttest005(x(:,1),x(:,2));
得到的结果:0.9879,通过t检验!!
三、偏相关分析
1-偏相关分析基本概念
2-偏相关分析的案例
在spss中导入数据,点击分析->相关->偏相关,将评价的变量和控制的变量导入,点击去确定即可。
检验结果如下所示,从相关性表中可以发现,控制降雨量的情况下,降雨强度和土壤侵蚀量的相关性系数是0.754,如果不控制,则是0.612,说明降雨量的存在,降低了降雨强度和土壤侵蚀量的相关性。
当有变革变量的时候,两个变量分析相关性,需要控制其余变量,才能保证相关性检验更准确。
备战数学建模16-相关性分析SPSSMATLAB相关推荐
- 备战数学建模9-层次分析法模型
层次分析法,简称AHP,是建模比赛中最基础的模型之一,其主要用于解决评价类问题,例如:哪中方案更好?哪位运动员或者员工表现得更优秀? 一.层次分析模型建立部分 下面我们看一道引出层次分析得例题,如下所 ...
- 数学建模之相关性分析2
斯皮尔曼spearman相关系数 一,计算斯皮尔曼相关系数 步骤一: 步骤二: 二,通过matlab计算各个变量之间的斯皮尔曼相关系数 如果是矩阵,计算则如下图所示 三,斯皮尔曼相关系数的假设检验 方 ...
- 数学建模专栏 | 开篇:如何备战数学建模竞赛之 MATLAB 编程
作 者 简 介 卓金武,MathWorks中国高级工程师,教育业务经理,在数据分析.数据挖掘.机器学习.数学建模.量化投资和优化等科学计算方面有多年工作经验,现主要负责MATLAB校园版业务.曾2次获 ...
- 备战数学建模(Python)
备战数学建模(Python) Python之建模规划篇 Python之建模数值逼近篇 Python之建模微分方程篇 由于美国大学生数学建模大赛很快就要开赛了,所以我就打算在这几天内,好好的看看< ...
- 通用优化软件GAMS的数学建模和优化分析
优化分析是很多领域中都要面临的一个重要问题,求解优化问题的一般做法是:建立模型.编写算法.求解计算.常见的问题类型有线性规划.非线性规划.混合整数规划.混合整数非线性规划.二次规划等,优化算法包括人工 ...
- 基于通用优化软件GAMS的数学建模和优化分析实践
优化分析是很多领域中都要面临的一个重要问题,求解优化问题的一般做法是:建立模型.编写算法.求解计算.常见的问题类型有线性规划.非线性规划.混合整数规划.混合整数非线性规划.二次规划等,优化算法包括人工 ...
- 备战数学建模32-相关性分析2
目录 一.皮尔逊相关系数 二.斯皮尔曼相关系数 三.典型相关分析 1-定义及具体步骤 2-典型相关分析的案例1 3-典型相关分析的案例2 本节重点学习两种相关性分析,pearson和spearman, ...
- 2023年美国大学生数学建模时间、分析及算法代码
美国大学生数学建模--干货 2023年美赛比赛日期和时间 赛题类型 算法代码 美赛常见数模问题 分类问题 判别分析: 聚类分析: 神经网络分类: 优化问题 线性规划: 非线性规划: 整数规划: 动态规 ...
- 备战数学建模国赛,快速搞定算法模型!
全世界只有3.14 % 的人关注了 青少年数学之旅 说到数学建模,大家的第一反应就是国赛.美赛等数学建模比赛,但这只是冰山一角,不过这个反应却也很正常,因为很多小伙伴接触数学建模的契机,大部分还是因为 ...
- 一文数学数模-相关性分析(二)斯皮尔曼相关(spearman)相关性分析一文详解+python实例代码
前言 相关性分析算是很多算法以及建模的基础知识之一了,十分经典.关于许多特征关联关系以及相关趋势都可以利用相关性分析计算表达.其中常见的相关性系数就有三种:person相关系数,spearman相关系 ...
最新文章
- revit导出lumion插件_建筑工程BIM建模入门级教程——REVIT的几种渲染方式
- java jnotify_java JNotify (基于内核)实时监控文件
- CountDownLatch简介
- 02-NVIDIA Jetson TX2 通过JetPack 3.1刷机完整版(踩坑版)
- 故宫首开夜场门票秒空官网崩溃:7本书让网站挺住
- SQUID优化重要参数
- 2020胡润百富榜:马云蝉联首富,马化腾财富增长最多
- 将ubuntu安装在用剩下的硬盘改装成的移动硬盘时遇到的问题及解决办法
- ETC passwd 用户和组管理
- new和delete运算符
- 多团队协作开发的大型项目Git工作流设计分享
- web常见的五种前端布局方式
- spss和python财务数据分析_用SPSS做数据分析?先弄懂SPSS的基础知识吧
- java.lang.ClassNotFoundException(通俗易懂)
- UBUNTU16.04使用CornerNet_Lite进行目标识别并嵌入到ROS中
- 微信小程序里面的标签和html标签的对比、微信小程序基础之常用控件
- duilib学习------网易云信图片中间加文字
- ESP8266人体感应项目
- [Setting]win7下运行exe失败:应用程序无法启动,因为应用程序的并行配置不正确
- HTML5的input增加哪些type