文章目录
本文参考了维基和 minitab网站,只是汇总梳理和强调了相关知识点。
本文讲了两种最为常见的相关系数,但是这两种相关系数经常容易被用错!!!!我们要搞清楚他们的实质和使用场景,避免用错。
0 matlab,excel和spss的描述性统计
excel
spss
1 pearson相关系数
皮尔孙相关系数只是描述变量的线性相关程度
皮尔孙相关系数只是描述变量的线性相关程度
皮尔孙相关系数只是描述变量的线性相关程度
你必须先确认这两个变量确实是线性相关的(可以用spss画出散点图肉眼观看判断: 图形 - 旧对话框 - 散点图/点图 - 矩阵散点图),才可以来用这个相关系数去衡量有多线性相关!!!
相关性一定要通过散点图可视化,你才可以看出你的数据之间是否有单调相关或者线性相关的关系,如果图画出来一看就是非线性相关的形式就不需要再折腾咯
总体皮尔逊Person相关系数
两个变量的协方差是两个变量中心化以后的相关再除以n。也就是说变量只是进行了中心化,没有进行标准化(再除以自己的标准差),所以计算出来的协方差是有量纲的,没法看出来相关性的大小,没有一个共同的尺度去看。
协方差只能看出数据之间线性关系的方向,不能判别强度,因为他的取值没有固定范围,只能得到正线性相关或者负线性相关的结论。
样本皮尔逊Pearson相关系数
样本方差除以n-1是为了使得样本方差是无偏估计
易错的地方
实验数据之间的差距不能太大。皮尔逊相关性系数受异常值的影响比较大
不要轻易下结论!!!
2 斯皮尔曼spearman等级相关系数
Spearman’s rank correlation coefficient,是衡量两个变量的依赖性的 非参数 指标(衡量分级定序变量之间的相关程度),利用单调方程评价两个统计变量的相关性。 如果数据中没有重复值, 并且当两个变量完全单调相关时,斯皮尔曼相关系数则为+1或−1。用途是描述数据间的相关性。
计算例子
另一种定义
可以看到
斯皮尔曼相关系数的计算根本没有使用原始数据,只是用了数据的等级
excel计算的相关系数,可以看到实际上excel用的是pearson相关系数
斯皮尔曼相关系数表明X(独立变量)和Y(依赖变量)的相关方向。如果当X增加时,Y趋向于增加,斯皮尔曼相关系数则为正。如果当X增加时,Y趋向于减少,斯皮尔曼相关系数则为负。斯皮尔曼相关系数为零表明当X增加时Y没有任何趋向性。当X和Y越来越接近完全的单调相关时,斯皮尔曼相关系数会在绝对值上增加。当X和Y完全单调相关时,斯皮尔曼相关系数的绝对值为1。完全的单调递增关系意味着任意两对数据Xi,Yi和Xj,Yj,有Xi−Xj和Yi−Yj总是同号。完全的单调递减关系意味着任意两对数据Xi,Yi和Xj,Yj,有Xi−Xj和Yi−Yj总是异号。
斯皮尔曼相关系数经常被称作"非参数"的。这里有两层含义。首先,当X和Y的关系是由任意单调函数描述的,则它们是完全皮尔逊相关的。与此相应的,皮尔逊相关系数只能给出由线性方程描述的X和Y的相关性。其次,斯皮尔曼不需要先验知识(也就是说,知道其参数)便可以准确获取XandY的采样概率分布。
3 假设检验
假设检验实际上就是一种逻辑推理的方法,设置两个完全相反的假设(把自己想推翻的结论设置为零假设
),然后根据样本数据计算零假设成立的概率p,然后比较p和显著性水平以做出接受或拒绝的判断。
中心极限定理,足够多的样本可以代表总体。
p值:在零假设成立的前提下,样本数据计算出零假设成立的概率,在统计概率中有个专门的术语叫p值。也就是,在零假设成立的前提下,得到样本观察结果出现的概率。
显著性水平Significance Level
显著性是假设检验里常常用的一个概念
显著性水平α: 当 H0 为真时否定 H0 的概率,是一个概率值,是做出决策的判断标准,用于表示不可能发生和可能发生的临界值,p小于这个值就表示零假设不成立。
假设检验常用的判断标准是与0.1%,1%,5%
-
如果p< =α,那么拒绝零假设,也就是备选假设成立。
-
如果p>α,那么零假设成立
在EXCEL表格中给数据右上角标上显著性符号
- P < 0.01 % 标记3颗星
- (P < 0.05) .* (P > 0.01) % 标记2颗星
- (P < 0.1) .* (P > 0.05) % % 标记1颗星
置信水平 confidence level
置
信
水
平
=
1
−
显
著
性
水
平
置信水平=1-显著性水平
置信水平=1−显著性水平
常用有三: 90% 95%(最常用) 99%
对pearson相关系数进行假设检验
检验的目的是判断相关系数是否显著异于0
对pearson相关系数r进行假设检验,对r的统计分布构造的是t分布,即认为r的取值满足t分布,然后根据计算的实际r值和置信水平判断是否拒绝零假设。
实验数据通常假设是成对的来自于正态分布的总体,而t检验是基于数据呈正态分布的假设的,所以在对pearson相关系数进行t检验之前还需要首先检验实验数据是否满足正态分布(也是个假设检验,哈哈哈,事儿挺多的吧)。
如何检验数据是否满足正态分布
大样本就做JB检验
是对样本数据是否具有符合正态分布的偏度和峰度的拟合优度的检验
这里用591条数据做个实验,共有六个变量,六列数据(身高、体重、肺活量、50米跑、立定跳远、坐位体前屈)
load 'physical fitness test.mat' % 身体素质数据 591*6
%% 正态分布检验
% 当输出h等于1时,表示拒绝原假设;h等于0则代表不能拒绝原假设。
% alpha就是显著性水平,一般取0.05,此时置信水平为1-0.05=0.95
% x就是我们要检验的随机变量,注意这里的x只能是向量。
% 循环检验所有列的数据
n_c = size(Test,2); % number of column 数据的列数
H = zeros(1,6);
P = zeros(1,6);
for i = 1:n_c
[h,p] = jbtest(Test(:,i),0.01);
H(i)=h;
P(i)=p;
end
disp(H)
disp(P)
输出:六列数据(身高、体重、肺活量、50米跑、立定跳远、坐位体前屈)输出h=1则拒绝原假设,不服从正态分布。输出0的接受原假设,服从正态分布,这里我挺纳闷的,数据是591条,算是大样本了,在spss中检验出来是妥妥的正态分布(spss没有JB检验,只有shapiro-wilk检验和柯尔莫哥洛夫斯米尔诺夫检验),怎么在matlab里要把置信水平提到99%才假设结果是正太呢?检查了程序和逻辑都没错,不明白
0 1 0 1 1 0
0.0110 0.0010 0.0136 0.0010 0.0010 0.0393
spss做柯尔莫哥洛夫斯米尔诺夫检验,p都大于0.05,所以接受原假设,在95%置信水平上认为数据是正太的。但是可以看到p不是远大于0.05。
大样本还可以用QQ图检验法
下面是是spss导出的QQ图,画法在下面的小样本检验方法的教程截图中
可以看出都是很接近这条直线的,说明数据确实来源于正态分布
用matlab画qq图,可以看到实际上也是很接近直线的,就是不懂为啥jbtest输出1······
%% 正态分布检验
% 当输出h等于1时,表示拒绝原假设;h等于0则代表不能拒绝原假设。
% 原假设:样本服从正态分布
% alpha就是显著性水平,一般取0.05,此时置信水平为1-0.05=0.95
% x就是我们要检验的随机变量,注意这里的x只能是向量。
% 循环检验所有列的数据
n_c = size(Test,2); % number of column 数据的列数
H = zeros(1,6);
P = zeros(1,6);
figure,
str=string({'身高';'体重';'肺活量';'50米跑';'立定跳远';'坐位体前屈'});
for i = 1:n_c
[h,p] = jbtest(Test(:,i),0.01);
H(i)=h;
P(i)=p;
subplot(2, 3, i)
qqplot(Test(:,i));
title(str(i))
xlabel('标准正态分位数 ')
ylabel('样本分位数 ')
hold on
end
disp(H)
disp(P)
小样本做shapiro-wilk检验
可以看到p都接近于1,说明零假设可信度非常高!!数据是正态分布
小结: 目前感觉matlab的jbtest不太可靠,,但不是特别懂原理所以说不出什么有效理由,总之还是用spss的检验结果吧
- P < 0.01 % 标记3颗星,0.5***表示在99%的置信水平显著异于0
- (P < 0.05) .* (P > 0.01) % 标记2颗星,0.5**表示在95%的置信水平显著异于0
- (P < 0.1) .* (P > 0.05) % % 标记1颗星,0.5*表示在90%的置信水平显著异于0
自己也画了画
代码
% 对pearson相关系数进行假设检验
% 假设计算的相关系数是0.5,有30个样本
clc
clear all
clf
x = -4:.1:4;
y = tpdf(x,28);% 假设有30个样本,则相关系数服从自由度为28的t分布
plot(x,y,'-')
grid on
% 设置置信水平95%,即总共被拒绝(单侧或者两侧相加)的概率是5%
% 由于是双侧检验,所以单侧应该查97.5%!!!
% 查t分布表得到临界值2.048
% t分布表 https://wenku.baidu.com/view/d94dbd116bd97f192279e94a.html
hold on % 保留原来的图,以便继续在上面操作
% matlab可以求出临界值,函数如下
tinv(0.975,28) % 2.0484
% 这个函数是累积密度函数cdf的反函数
plot([-2.048,-2.048],[0,tpdf(-2.048,28)],'g-')
plot([2.048,2.048],[0,tpdf(2.048,28)],'g-')
for i=-4:.05:-2.048
plot([i,i],[0,tpdf(i,28)],'r-')
end
for i=2.048:.05:4
plot([i,i],[0,tpdf(i,28)],'r-')
end
for i=-2.048:.05:2.048
plot([i,i],[0,tpdf(i,28)],'b-')
end
plot([-2.048,-2.048],[0,0.4],'k-')
plot([2.048,2.048],[0,0.4],'k-')
text(-3.5,.3,'拒绝域','fontsize',15)
text(-.5,.3,'接受域','fontsize',15)
text(2.5,.3,'拒绝域','fontsize',15)
% 画线段的方法,t*=3.055检验值
text(3.055,0,'o','fontsize',15)
text(2.055,.05,'检验值r=3.055','fontsize',10)
% plot([-3.055,-3.055],[0,tpdf(-3.055,28)],'r-')
% plot([3.055,3.055],[0,tpdf(3.055,28)],'r-')
disp('该检验值对应的p值为:')
disp((1-tcdf(3.055,28))*2) %双侧检验的p值要乘以2
disp('p<<alpha=0.05,在95%的置信水平上拒绝原假设')
尝试计算六个变量的相关系数,并加上显著性标记
只需要一句代码
load 'physical fitness test.mat'
[R,P] = corrcoef(Test)% R是相关系数表,P是p值表
输出
R =
1.0000 0.0665 -0.2177 -0.1920 0.0440 0.0951
0.0665 1.0000 0.0954 0.0685 0.0279 -0.0161
-0.2177 0.0954 1.0000 0.2898 0.0248 -0.0749
-0.1920 0.0685 0.2898 1.0000 -0.0587 -0.0019
0.0440 0.0279 0.0248 -0.0587 1.0000 -0.0174
0.0951 -0.0161 -0.0749 -0.0019 -0.0174 1.0000
P =
1.0000 0.1061 0.0000 0.0000 0.2859 0.0208
0.1061 1.0000 0.0204 0.0960 0.4978 0.6963
0.0000 0.0204 1.0000 0.0000 0.5469 0.0687
0.0000 0.0960 0.0000 1.0000 0.1542 0.9637
0.2859 0.4978 0.5469 0.1542 1.0000 0.6728
0.0208 0.6963 0.0687 0.9637 0.6728 1.0000
把相关系数存起来,方便复制粘贴到excel进行美化处理,加显著性标记
>> save('R.mat','R')
>> load('R.mat')
把R.mat打开,复制到excel
美化
加标记(根据p的大小),这里懒得标了
对spearman等级相关系数进行假设检验
小样本(n<=30) 直接查表
直接查表,如果斯皮尔曼等级相关系数的计算值大于临界值,则可以推翻零假设,得到显著性的结论。
大样本(n>30) p值检验法
r
s
r_s
rs是斯皮尔曼等级相关系数
我们是去构造一个标准正太分布的统计量
直接用这句代码算出相关系数和p值(corr函数自己就算了上面图中的公式),然后直接比较p值和显著性水平即可。cant be easier