相关系数研究两变量之间的关联性问题,来揭示它们之间的内在规律。
两个总体服从正态分布的变量,且数据为定量数据时,要研究两个变量之间的线性相关程度。
1、两变量的总体服从正态分布 2、样本容量较大 3、变量必须是成对数据 |
|
表示 的样本均值, 表示 的样本均值。 |
|
|
原假设为,接受原假设说明两变量之间不存在线性关系。 |
反之假设为,表明两变量之间存在显著的线性关系。
检查样本量服从F分布,可计算出检验的P值,也就是拒绝原假设的最小的显著性水平,将检验的P值与常规的显著性水平相比(0.05)。最后做出相应的检验结论。 如果检验的P值<0.05,则接受原假设,反之拒接原假设,表面两变量之间存在显著的线性关系。 |
例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.9995,p = 3.9401e-07<0.05,则广告费与营业额有显著的线性相关性。 |
当两个变量的分布未知,并且样本数据量不大时,可用数据的排序等级来反映两个变量之间的关联性。 |
1、对变量总体分布、样本容量不作要求 2、变量必须是成对数据 3、使用有序数据 |
|
原假设为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不存在等级相关性。 |
|
当两个变量的分布未知、样本数据量不大且为分类数据时,可用前后两组数对的秩的大小变化方向是同向还是反向来反映两个变量之间的关联性。
|
其中n 为样本量,Nc 为同向数对的数,Nd 为反向数对的数。
|
总结:三种相关系数的显著性检验均类似。 例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、定量数据(数值型数据)相关分析 定性数据(品质数据)列联分析 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