数学建模:6 相关系数
目录
对数据进行正态分布检验:正态分布JB检验(大样本 n>30)
对数据进行正态分布检验:Shapiro-wilk夏皮洛‐威尔克检验(小样本3≤n≤50)
选择哪个相关系数
- 连续数据、正态分布、线性关系,用pearson相关系数最恰当,用spearman相关系数也可以,效率没有pearson相关系数高。
- 上述任一条件不满足,就用spearman相关系数,不能用pearson相关系数。
- 两个定序数据之间也用spearman相关系数,不能用pearson相关系数。

总步骤
目的:得到变量的相关系数、相关性
- 对数据进行描述性统计(笔记目录靠后部分 matlab、SPSS、excel)
- 在求皮尔逊相关系数前,先绘制数据的散点图,根据散点图粗略判断是否线性关系(用SPSS,步骤见笔记SPSS描述性统计)
- 满足线性关系,才可以计算皮尔逊相关系数 matlab:corrcoef函数
- 对数据进行正态性检验(大样本:JB 用matlab;小样本:Shapiro-wilk 用SPSS)
- 符合正态分布,才可以假设检验皮尔逊系数的显著性(matlab、spss)
- 连续数据、正态分布、线性关系 上述任一条件不满足,就用spearman相关系数
- 计算斯皮尔曼相关系数(matlab函数corr) 并 假设检验显著性(小样本查表、大样本假设检验p值判断)
皮尔逊相关系数、假设检验
总体皮尔逊Pearson相关系数

- 协方差为正 - 正相关性:X、Y变化方向相同,即当X大于(小于)其均值时,Y 也大于(小于)其均值;
- 协方差为负 - 负相关性:X、Y变化方向相反,即当X大于(小于)其均值时,Y 小于(大于)其均值,则协方差为负;
- 如果X、Y变化方向之间相互无规律,即分子中有的项为正,有的项为负,那么累加后正负抵消,接近0
结论:协方差绝对值越接近 1 ,相关性越强;接近 0 ,相关性越弱
样本皮尔逊Pearson相关系数
与总体相关系数相比,是 n-1

皮尔逊相关系数注意点
- 只能用来衡量两个变量线性相关程度,必须先确认这两个变量是线性相关,不是线性相关不能用这个;
- 如何确定两变量线性相关:在求皮尔逊相关系数前,先绘制数据的散点图,根据散点图粗略判断是否线性关系;
- 计算出皮尔逊相关系数的绝对值很接近1:不能说明有很大相关性,因为可能受异常值、离群值的影响;
- 计算出皮尔逊相关系数的绝对值很接近0:只能说明没有线性相关性,可能存在非线性相关性

对相关系数大小的解释

皮尔逊相关系数假设检验的条件
- 实验数据通常假设是成对的来自于正态分布的总体。在求皮尔逊相关性系数以后,通常还会用 t 检验之类的方法来检验皮尔逊相关性系数,而 t 检验是基于数据呈正态分布的假设的。(这个是最需要验证的条件:实验数据服从正态分布;后两个条件一般默认满足)
- 实验数据之间的差距不能太大。皮尔逊相关性系数受异常值的影响比较大。
- 每组样本之间是独立抽样的。构造t统计量时需要用到。
对数据进行正态分布检验:正态分布JB检验(大样本 n>30)
偏度和峰度:

matlab计算偏度和峰度:
x = normrnd(2,3,100,1); % 生成100*1的随机向量,每个元素是均值为2,标准差为3的正态分布
skewness(x) %偏度
kurtosis(x) %峰度
步骤:
- 构造JB统计量
- 进行假设检验、p值判断法

matlab将上述步骤封装到 jbtest 中:
%% 正态分布检验
% 检验第一列数据是否为正态分布
[h,p] = jbtest(Test(:,1),0.05)
% 当输出h等于1时,表示拒绝原假设;h等于0则代表不能拒绝原假设
% p是p值,p < 置信水平0.05 就不是正态分布
% alpha就是显著性水平,一般取0.05,此时置信水平为1‐0.05=0.95
% x就是我们要检验的随机变量,注意这里的x只能是向量
% 只能一列列数据检验
% 用循环检验所有列的数据
n_c = size(Test,2); % 数据的列数
H = zeros(1,6); % 先初始化矩阵,以免后面插入数据的同时扩展矩阵 造成效率低
P = zeros(1,6);
for i = 1:n_c
[h,p] = jbtest(Test(:,i),0.05);
H(i)=h;
P(i)=p;
end
disp(H)
disp(P)
对数据进行正态分布检验:Shapiro-wilk夏皮洛‐威尔克检验(小样本3≤n≤50)
matlab没有实现这个,用SPSS:

得到的结果只要看最后一列显著性,这就是p值:小于置信水平0.05就不服从正态分布

对数据进行正态分布检验:Q-Q图(大样本)(不推荐)
原理:
matlab函数:qqplot

对皮尔逊相关系数进行假设检验
- 置信水平 β = 1 - α:相信原假设成立的概率
- 显著性水平 α :有多大的可能拒绝原假设,又称犯第一类错误的概率(原假设正确、但我们却认为错了)
假设检验皮尔逊相关系数是否显著接近于0
原假设:r = 0 皮尔逊系数与0没有显著差异,相关性并不强


x = -4:0.1:4;
y = tpdf(x,28); % 服从t分布的概率密度曲线
plot(x,y,'-')
grid on % 在画出的图上加上网格线
更好的方法:p值判断法
根据检验值(把待检验的皮尔逊系数 r 带入到检验统计量后得到的值)得到该检验值对应的 p 值,该 p 值再与置信水平比较检验,p > 显著性水平,说明 p 落在接受域,接受假设
matlab代码:
disp((1-tcdf(3.055,28))*2)
% tcdf(3.055,28):x=3.055处,自由度为28的累积分布函数
% x处累积分布函数:-∞到x区间对应的概率
% 双侧检验的p值要乘以2

matlab计算相关系数及p值、得到显著性标记
matlab 计算的是双侧检验的 p 值,单侧就手动除以2
%% 计算各列之间的相关系数以及双侧检验的p值,单侧就手动除以2
[R,P] = corrcoef(Test)
% 下面的运算得到01矩阵,1的位置就是显著性标志的位置
% 在EXCEL表格中手动加上显著性标记 *
P < 0.01 % 标记3颗星的位置
(P < 0.05) .* (P > 0.01) % 标记2颗星的位置
(P < 0.1) .* (P > 0.05) % 标记1颗星的位置

SPSS显著性检验
SPSS进行显著性标记:“双变量”选项

Matlab计算描述性统计

MIN = min(Test); % 每一列的最小值
MAX = max(Test); % 每一列的最大值
MEAN = mean(Test); % 每一列的均值
MEDIAN = median(Test); %每一列的中位数
SKEWNESS = skewness(Test); %每一列的偏度
KURTOSIS = kurtosis(Test); %每一列的峰度
STD = std(Test); % 每一列的标准差
RESULT = [MIN;MAX;MEAN;MEDIAN;SKEWNESS;KURTOSIS;STD]
%将这些统计量放到一个矩阵中表示
corrcoef函数: correlation coefficient相关系数
R = corrcoef(A)
返回 A 的相关系数的矩阵,其中 A 的列表示随机变量(指标),行表示观测值(样本)。
R = corrcoef(A,B)
返回两个随机变量 A 和 B (两个向量)之间的系数。
Excel计算描述性统计

美化表:


SPSS计算描述性统计

斯皮尔曼spearman相关系数
斯皮尔曼相关系数 定义1:下面的公式

斯皮尔曼相关系数 定义2:斯皮尔曼 求的是这两列等级之间的 皮尔逊相关系数

MATLAB中计算斯皮尔曼相关系数
- corr(X , Y , 'type' , 'Spearman') % 这里的X 和 Y必须是列向量
- corr(X , 'type' , 'Spearman') % 计算X矩阵各列之间的斯皮尔曼相关系数,matlab这一函数封装使用的是定义2的计算方式
斯皮尔曼相关系数的假设检验
小样本 n<=30 检验斯皮尔曼相关系数的显著性:查表
大样本检验斯皮尔曼相关系数的显著性
p 值 大于 显著性水平,接受假设,相关系数与0没有显著性差别

Matlab:
% 直接给出相关系数和p值
[R,P]=corr(Test, 'type' , 'Spearman')
SPSS:
下表只需要相关系数那一行贴到论文中,因为包括了计算出的相关系数及显著性标志 * ;下面的双尾显著性水平就是 p 值,属于计算过程不需要贴入论文;第三行是样本个数

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)