python 相关分析

目录

1、背景

2、连续变量的相关分析

2.1 使用条件

2.2 使用系数 pearson

2.2.1 系数计算逻辑

2.2.2 系数公式

2.2.3 结果解释

2.3 应用案例

2.4 相关系数的显著性检验

2.4.1 显著性检验案例

3、等级变量的相关分析

3.1 适用条件

3.2 使用系数 spearmanr

3.2.1 系数使用公式

4、连续变量&分类变量 相关分析

4.1 二列相关适用条件

4.2 二列相关公式

4.3 点二列相关适用条件

4.4 点二列相关公式

4.5 代码实现

5、类别变量相关分析

5.1 适用条件

5.2 使用卡方进行相关分析


1、背景

用于考察变量间数量关联密切程度的统计分析方法,比如身高越高,体重一般会越大。

几乎所有涉及到多个变量的假设检验方法,都可以被看做是这些变量间的关联性分析。

1、t检验:分组变量与连续因变量间的关联性分析

2、卡方检验:行、列分类变量间的关联性分析

3、聚类分析:案例间的关联性分析

4、多变量回归:因变量和一组自变量间的关联性分析

以下是常见的相关分析以及代码实现:

2、连续变量的相关分析

2.1 使用条件

两个变量都是连续正态连续变量,且两者之间呈线性关系。备注:在进行相关分析之前进行图表展示以查看数据是否为线性分布

# 图表展示的代码

import matplotlib.pyplot as plt
plt.scatter(x,y) #使用散点图
plt.show()

2.2 使用系数 pearson

2.2.1 系数计算逻辑

计算两个变量的协方差,协方差可以放映两个随机变量的相关程度,但是可能存在二维空间中分布的一些数据,变量之间相关程度较小,但是数据分布的比较离散,这样会导致求出的协方差值较大,只用协方差就不合理,所以pearson相关系数是在协方差的基础上除以两个随机变量的标准差。

2.2.2 系数公式

\rho_{X,Y }=\frac{cov(X,Y))}{\sigma _{X}\sigma _{Y}} = \frac{E[(X-\mu_{X })(Y-\mu_{Y })]}{\sigma _{X}\sigma _{Y}}

2.2.3 结果解释

该系数结果是一个-1到1之间的值,绝对值越大表明相关性越强,正数为正相关,负数为相关,相关系数为0,表明它们之间不存在线性相关关系。

2.3 应用案例

#调用代码
np.corrcoef(a)#可计算行与行之间的相关系数,
np.corrcoef(a,rowvar=0)#用于计算各列之间的相关系数


#应用案例
import numpy as np 
data = np.array([[10, 10, 8, 9, 7],  
       [4, 5, 4, 3, 3],  
       [3, 3, 1, 1, 1]])

np.corrcoef(data) 
#输出结果,可见第一组数据和第三组数据相关性挺高
'''
array([[ 1.        ,  0.64168895,  0.84016805],
       [ 0.64168895,  1.        ,  0.76376262],
       [ 0.84016805,  0.76376262,  1.        ]])
'''
np.corrcoef(data,rowvar=0) #用于计算列之间的相关系数
#输出结果
'''
array([[ 1.        ,  0.98898224,  0.9526832 ,  0.9939441 ,  0.97986371],
       [ 0.98898224,  1.        ,  0.98718399,  0.99926008,  0.99862543],
       [ 0.9526832 ,  0.98718399,  1.        ,  0.98031562,  0.99419163],
       [ 0.9939441 ,  0.99926008,  0.98031562,  1.        ,  0.99587059],
       [ 0.97986371,  0.99862543,  0.99419163,  0.99587059,  1.        ]])
'''

2.4 相关系数的显著性检验

假设:

H0:\rho=0

H1:\rho \neq0

使用t检验统计量

t = \frac{r\sqrt{n-2}}{\sqrt{1-r^{2}}}

2.4.1 显著性检验案例

import numpy as np 
import scipy.stats as stats 
import scipy 

x = [10.35, 6.24, 3.18, 8.46, 3.21, 7.65, 4.32, 8.66, 9.12, 10.31]  
y = [5.1, 3.15, 1.67, 4.33, 1.76, 4.11, 2.11, 4.88, 4.99, 5.12]  
correlation,pvalue = stats.stats.pearsonr(x,y) 
print ('correlation',correlation) #correlation 0.989176319869
print ('pvalue',pvalue) #pvalue 5.92687594648e-08 拒绝原假设,接受备择假设

3、等级变量的相关分析

3.1 适用条件

等级顺序或者等距等比数据,数据总体分布不是正态分布,数据容量可能大于30。比如数据呈现幂函数关系。

3.2 使用系数 spearmanr

3.2.1 系数使用公式

\rho = 1-\frac{6\sum d_{i}^{2}}{n^{3}-n}   

其中n为等级个数;d为二列成对变量的等级差数

x = [10.35, 6.24, 3.18, 8.46, 3.21, 7.65, 4.32, 8.66, 9.12, 10.31]  
y = [5.13, 3.15, 1.67, 4.33, 1.76, 4.11, 2.11, 4.88, 4.99, 5.12]  
correlation,pvalue = stats.stats.spearmanr(x,y)  #使用斯皮尔曼计算相关性 

print ('correlation',correlation) #correlation 1.0
print ('pvalue',pvalue) #pvalue 6.64689742203e-64 p值

4、连续变量&分类变量 相关分析

4.1 二列相关适用条件

1、两个变量都是连续正态分布变量;

2、变量之间是线性相关;

3、其中一个变量被人为的划分为二分变量,比如及格与不及格

4、样本容量应当大于80

4.2 二列相关公式

python 相关分析_第1张图片

案例如:10名考生成绩,包括总分和一道问道题,求问答题的区分度(6分以上为通过,包括6分)

4.3 点二列相关适用条件

其中一个变量为正态连续性变量,另一个是真正的二分名义变量(如男女)

4.4 点二列相关公式

python 相关分析_第2张图片

4.5 代码实现

x = [1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,0,0,0] #第一个变量为bool值
y = [84,82,76,60,72,74,76,84,88,90,78,80,92,94,96,88,90,78,76,74]
stats.pointbiserialr(x, y) # PointbiserialrResult(correlation=0.7849870641173371, pvalue=4.1459279734903919e-05)

5、类别变量相关分析

5.1 适用条件

两个变量都是按性质分为几种类别,比如一个变量是性别男女,一个变量是按照成绩分为优秀、良好、差。

5.2 使用卡方进行相关分析

代码实现

#使用scipy 实现案例
s1 = ['及格','不及格','及格','及格','及格','及格','及格','及格','不及格']
s2 = ['有','没有','没有','没有','没有','没有','没有','没有','没有']

tbl = pd.crosstab(s1, s2) #数据汇总
ss.contingency.expected_freq(tbl) #期望频数
ss.contingency.margins(tbl) #列联表边际汇总
ss.chi2_contingency(tbl, False) #卡方检验

你可能感兴趣的:(Python,统计分析,python,机器学习,开发语言)