一、相关关系和相关系数
世上除了因果关系,还有相关关系。
有一个叫“相关系数”的指标来量化两个事物之间的相关程度。
其中相关系数用“r”表示,取值范围介于-1和1之间。
当(X,Y)正相关的时候,r=1;当(X,Y)负相关的时候,r=-1;当(X,Y)不相关的时候,r=0。
当然一般的线性相关有更严格的划分:r|<0.3 不存在线性关系
0.3<|r|<0.5 低度线性关系
0.5<|r|<0.8 显著线性关系
|r|>0.8 高度线性关系
二、相关性和假设检验
有指标来衡量两者之间的相关程度,不代表能够去衡量相关程度。
因引入两个概念:
现在,针对我们分析的两组数据(X,Y)(两组数据被称为抽样),我们的疑问来了:
抽样的(X,Y)是否可以正确反应总体的情况呢?
这里涉及:假设检验。
具体操作如下:
零假设H0:总体的数据不呈相关性(相关系数为0),并先认为H0正确
备选假设H1:总体的数据呈现相关性(相关系数不为0)
引入一个指标:显著性水平p,一般将其设定为0.05或者0.01
当p<0.05,拒绝原假设,备选假设正确;
当p>0.05,原假设正确。
所以,在进行相关性分析实验的之前,我们需要分两步走:
1.进行假设检验,获得p值<0.05,得到结论:总体的数据呈现相关性
2.进行相关性分析,得到r值
如果p值>0.05(或者0.01),则实验失败,抽样数据无法反应整体情况。不管r值表现如何都是偶然事件。
只有在p值<0.05(或者0.01)的前提下,才可以参考r值,进而判断相关程度。
三、兼谈假设检
假设检验的3种类型
假设检验的套路:
四、利用Python进行相关性分析
判定两者相关的方式有两种:图形观测法:通过绘制散点图判断两者是否存在一定相关关系
科学计算法:通过计算相关性系数r
我们用第二种
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import kstest
from scipy import stats
#读入数据
data=pd.read_csv('/datasets/normtemp.dat.txt',header=None,sep='\s+',names=['Temperature','sex','heart'])
print(data.describe())
Temperature_data = data['Temperature']
u = data['Temperature'].mean()
std = data['Temperature'].std()
r,p = stats.pearsonr(data.Temperature, data.heart)
print('相关系数r为 = %6.3f,p值为 = %6.3f'%(r,p))
相关系数r为 = 0.254,p值为 = 0.004
得到:相关系数r=0.021,p值为=0.004
结论:总体的数据呈相关性,且相关系数为:0.021,但不是线性相关。
五、拓展
对于多维数据,需要计算两两之间的相关性。
比如是思维数据,列名分别为:A、B、C、D
就需要计算:
A:B、C、D
B:A、C、D
C:A、B、D
D:A、B、C
代码如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.stats as stats
# 导入数据
data = pd.DataFrame(数据地址)
#或者
data=pd.read_csv(数据地址)
# 相关性计算
print(data.corr())
# 绘图
fig = pd.plotting.scatter_matrix(data,figsize=(6,6),c ='blue',marker = 'o',diagonal='',alpha = 0.8,range_padding=0.2) # diagonal只能为'hist'/'kde'
plt.show()
假设检验Python真香:用Python作假设检验