python 相关分析

目录


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{rsqrt{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{6sum 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 二列相关公式

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

4.3 点二列相关适用条件

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

4.4 点二列相关公式

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) #卡方检验

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年5月9日
下一篇 2023年5月9日

相关推荐