数学建模之相关系数

文章详细介绍了Pearson、Spearman和Kendall三种相关系数的适用条件、计算公式和显著性检验,以及如何在Python中使用`corr()`函数进行计算。通过案例分析展示了如何评估变量间的线性相关性和等级相关性,并提供了正态性检验的方法。
摘要由CSDN通过智能技术生成

相关系数

研究两变量之间的关联性问题,来揭示它们之间的内在规律。

  • Pearson相关系数

两个总体服从正态分布的变量,且数据为定量数据时,要研究两个变量之间的线性相关程度。

    1. pearson相关系数的适用条件:

1、两变量的总体服从正态分布

2、样本容量较大

3、变量必须是成对数

    1. 计算公式:

 表示  的样本均值,  表示  的样本均值。

    1. 相关性系数的的显著性检验


原假设为,接受原假设说明两变量之间不存在线性关系。

反之假设为,表明两变量之间存在显著的线性关系。

检查样本量服从F分布,可计算出检验的P值,也就是拒绝原假设的最小的显著性水平,将检验的P值与常规的显著性水平相比(0.05)。最后做出相应的检验结论。

如果检验的P<0.05,则接受原假设,反之拒接原假设,表面两变量之间存在显著的线性关系。

    1. 案例分析

1一组数据如下,考虑都服从正态分布,试问两者的相关程度如何?

广告费

120.5

150.3

260.1

344.2

456.6

662.4

营业额

212.2

240.7

349.6

460.7

567.8

786.5

具体操作:

x = [120.5 150.3 260.1 344.2 456.6 662.4]'; % 注意是列向量
y = [212.5 240.7 349.6 460.7 567.8 786.5]';
[rho,pvalue] = corr(x,y,'type','Pearson') % r相关系数,p检验的值
% rho = 0.9995 pvalue = 3.9401e-07

结论:广告费与营业额的相关系数为0.9995p = 3.9401e-07<0.05,则广告费与营业额有显著的线性相关性。

  • Spearman等级相关系数

当两个变量的分布未知,并且样本数据量不大时,可用数据的排序等级来反映两个变量之间的关联性。

    1. Spearman等级相关系数的使用条件:

1、对变量总体分布、样本容量不作要求

2、变量必须是成对数据

3、使用有序数据

  1. 计算公式

    1. 其中,di表示两组样本数据的等级之差。

      Spearman等级相关系数也要进行显著性检验。

原假设为H0 ,接受原假设说明两变量之间不存在等级相关性。

反之假设为H1,表明两变量之间存在显著的等级相关性。

检查样本量服从F分布,也可计算出检验的P值,检验结果同pearson系数一样。

例2:

x

86

97

99

100

101

103

106

110

112

113

y

0

20

28

27

50

29

7

17

6

12

x = [86 97 99 100 101 103 106 110 112 113]';
y = [0 20 28 27 50 29 7 17 6 12]';
[rho,pvalue] = corr(x,y,'type','Spearman')
% rho = -0.1758 pvalue = 0.6320

结论:Spearman相关系数为-0.1758,p = 0.6320>0.05,则x与y不存在等级相关性。

  • Kendall秩相关系数

当两个变量的分布未知、样本数据量不大且为分类数据时,可用前后两组数对的秩的大小变化方向是同向还是反向来反映两个变量之间的关联性。

    1. Kendall秩相关系数适用条件
  1. 同Spearman等级相关系数
  2. 适用有序分类数据
    1. 计算公式

其中n 为样本量,Nc 为同向数对的数,Nd 为反向数对的数。

    1. Kendall秩相关系数的显著性检验

总结:三种相关系数的显著性检验均类似。

例3:一组数据如下,试问两者的相关程度?

体重

75

95

85

70

76

68

60

66

80

88

肺活量

2.6

2.9

2.9

2.1

2.2

1.9

2.1

2.2

2.7

2.6

x = [75 95 85 70 76 68 60 66 80 88]';
y = [2.6 2.9 2.9 2.1 2.2 1.9 2.1 2.2 2.7 2.6]';
[rho,pvalue] = corr(x,y,'type','Kendall')
% rho = 0.6751 pvalue = 0.0109

结论:Kendall秩的相关系数为0.6751,p = 0.0109<0.05,则体重与肺活量存在显著的正相关性。

  • 总结

    1. 三种相关系数的异同点

相同点:测量两变量的相关程度和变换方向,取值范围相同。

不同点:

  1. Pearson相关系数适用于正态分布的总体,连续型数据的变量和度量之间线性相关程度,是参数统计方法。
  2. Spearman与Kendall秩相关系数对样本容量、总体分布不作要求,是非参数统计方法。3、 Spearman适用有序数据,Kendall秩适用分类数据

补充:

1、定量数据(数值型数据)相关分析

定性数据(品质数据)列联分析

2、Pearson相关系数:连续变量的线性相关关系

  Spearman等级相关系数:定序变量的线性相关关系

  Kendall秩相关系数:非参数方法来度量定序变量的线性相关关系

3、例1结论:广告费与营业额的样本Pearson相关系数为0.9995,强正相关。总体相关系数为零的假设检验P值为3.9401e-07<0.05,拒绝广告费与营业额总体相关系数为零的假设,相关性显著。

在SPSS中,采用的是K-S检验以及Shapiro-Wilk检验的结果。当Sig(显著性)>0.05时,表明该变量服从正态分布,否则为非正态分布。

注:当样本量大于50时用K-S检验结果,样本量小于50时用Shapiro-Wilk检验结果。

所以例1的数据服从正态分布。

 python中Pearson系数

1.	import seaborn as sns  
2.	import numpy as np  
3.	import scipy.stats as ss  
4.	import pandas as pd  
5.	from pandas.core.frame import DataFrame  
6.	  
7.	data = pd.DataFrame({'x':[120.5,150.3,260.1,344.2,456.6,662.4],  
8.	                     'y':[212.5,240.7,349.6,460.7,567.8,786.5]})  
9.	print(data.head())  
10.	print('------')  
11.	  
12.	sns.pairplot(data) #图5  
13.	pd.plotting.scatter_matrix(data,figsize=(12,12),  
14.	                         c = 'k',  
15.	                         marker = '+',  
16.	                         diagonal='hist',  
17.	                         alpha = 0.8,  
18.	                         range_padding=0.1) #图6  
19.	  
20.	u1,u2 = data['x'].mean(),data['y'].mean()  # 计算均值  
21.	std1,std2 = data['x'].std(),data['y'].std()  # 计算标准差  
22.	print('x正态性检验:\n',ss.kstest(data['x'], 'norm', (u1, std1)))  
23.	print('y正态性检验:\n',ss.kstest(data['y'], 'norm', (u2, std2)))  
24.	print('------')  
25.	# 正态性检验 → pvalue >0.05  
26.	  
27.	data['(x-u1)*(y-u2)'] = (data['x'] - u1) * (data['y'] - u2)  
28.	data['(x-u1)**2'] = (data['x'] - u1)**2  
29.	data['(y-u2)**2'] = (data['y'] - u2)**2  
30.	print(data.head())  
31.	print('------')  
32.	# 制作Pearson相关系数求值表  
33.	  
34.	rho = data['(x-u1)*(y-u2)'].sum() / (np.sqrt(data['(x-u1)**2'].sum() * data['(y-                   u2)**2'].sum()))  
35.	print('Pearson相关系数为:%f' % rho)  
36.	 # rho = Pearson相关系数为:0.999487  
37.	# Pearson相关系数 - 算法  
38.	data.corr() 

 Python中pd包含内置的求解spearman系数

1.	import pandas as pd
2.	import numpy as np
3.	# spearman相关系数 - 算法
4.	data = pd.DataFrame({'x':[86,97,99,100,101,103,106,110,112,113],
5.	                       'y':[0,20,28,27,50,29,7,17,6,12]})
6.	print(data)
7.	print('------')
8.	# 创建样本数据
9.	data.corr(method='spearman', min_periods=1)
10.	# pandas相关性方法:data.corr(method='pearson', min_periods=1) → 直接给出数据字段的相关系数矩阵
11.	# method默认pearson
12.	x = [86,97,99,100,101,103,106,110,112,113]
13.	y = [0,20,28,27,50,29,7,17,6,12]
14.	[rho,pvalue] = ss.spearmanr(x,y)
15.	#rho = -0.175758 pvalue = 0.627189

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王的傲骨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值