Python 相关性分析 显著性检验

Pandas中有pandas.DataFrame.corr和pandas.Series.corr两个方法进行相关性的计算,第一个针对整个dataframe数据返回一个矩阵,第二个针对不同的column。下面对第二个方法的函数内容、使用方法以及重要的显著性检验三个方面进行介绍。

第一部分:相关性系数计算方法及相应函数介绍

Pandas函数
Series.corr(self, other, method='pearson', min_periods=None)[source]

参数:
otherSeries: 需要用来计算相关性的Series
method{‘pearson’, ‘kendall’, ‘spearman’} :用来计算相关性的方法,可以是这三种,或者其他的可调动函数,默认是皮尔森相关系数。
min_periodsint:可选参数,为了获得有效结果所需要的最小的观察数量
返回:float类型的相关系数

主要参数methods介绍:

  1. pearson correlation coefficient(皮尔逊相关性系数)。
    常用的相关系数求法,采用协方差cov(X,Y)/标准差的乘积(σX, σY)。
    数据要求: 线性数据、连续且符合正态分布;数据间差异不能太大;变量准差不能为0,即两变量中任何一个值不能都是相同。
  2. spearman correlation coefficient(斯皮尔曼秩相关性系数)。
    根据原始数据的排序位置进行计算。
    数据要求:用于解决称名数据和顺序数据相关的问题,适用于两列变量,而且具有等级变量性质具有线性关系的数据,能够很好处理序列中相同值和异常值。
  3. kendall correlation coefficient(肯德尔相关性系数)。
    等级相关系数,适用于两个变量均为有序分类的情况
    数据要求:肯德尔相关性系数,它也是一种秩相关系数,不过它所计算的对象是分类变量。

所以针对【连续、正态分布、线性】数据,采用pearson相关系数;针对【非线性的、非正态】数据,采用spearman相关系数;针对【分类变量、无序】数据,采用Kendall相关系数。一般来讲,线性数据采用pearson,否则选择spearman,如果是分类的则用kendall。

该部分内容部分参考https://blog.csdn.net/tcy23456/article/details/83910011

第二部分:Pandas包Series.corr()调用

import pandas as pd
x = [1,2,3,4,5]
y = [6,7,8,9,6]
df = pd.DataFrame({'x':x, 'y':y})

df
Out[138]: 
   x  y
0  1  6
1  2  7
2  3  8
3  4  9
4  5  6

df.x.corr(df.y)
Out[139]: 0.24253562503633297

df.x.corr(df.y, method='spearman')
Out[140]: 0.20519567041703082

df.x.corr(df.y, method='kendall')
Out[141]: 0.31622776601683794

df.corr()
Out[142]: 
          x         y
x  1.000000  0.242536
y  0.242536  1.000000

可以看出,构造出的数据采用顺序方法即Kendall相关系数最高。最后调用DataFrame.corr()可以得到一个相关性矩阵。

第三部分:显著性检验

显著性检验的目的是为了 将从样本中得到的结论推广到总体中,通过“小概率事件是不可能事件”这一原理进行推断。一般而言是对总体做出原假设,然后通过对随机的样本数据对原假设进行分析,判断其与原假设是否存在显著性的差异。

调用Python代码计算相关系数是非常简单的,但是如果没有显著性检验,那么所得的结果是没有意义的。不方便的是pandas内嵌的函数中不提供p值的统计,需要采用其他的统计软件包。

在对相关性检验前,需要先画一个散点图,看看两个变量是否具有线性关系。关于方差齐性的问题,采用 stats.levene() 方法进行检验。如果同方差性结果不满足的话,则不能采用pearson 这总参数性的方法,需要采用separsman或者是Kendall这两种非参数性的方法进行计算。

在scipy这一个统计包中,采用scipy.stats.spearmanr()等函数可以直接获得相关系数以及双边检验的P值。
correlation, p-value = scipy.stats.pearsonr(x, y)
correlation, p-value = scipy.stats.spearmanr(x, y)
correlation, p-value = scipy.stats.kendalltau(x, y)

采用这种方法,可以直接得到相关系数和P值,如下所示:


import scipy
import pandas as pd
x = [1,2,3,4,5]
y = [6,7,8,9,6]
df = pd.DataFrame({'x':x, 'y':y})

df
Out[138]: 
   x  y
0  1  6
1  2  7
2  3  8
3  4  9
4  5  6

scipy.stats.pearsonr(x, y)
Out[144]: (0.24253562503633297, 0.6942488516293593)

scipy.stats.spearmanr(x, y)
Out[145]: SpearmanrResult(correlation=0.20519567041703082, pvalue=0.7405819415910722)

scipy.stats.kendalltau(x, y)
Out[146]: KendalltauResult(correlation=0.31622776601683794, pvalue=0.44848886103153185)

虽然看着相关性系数达到了0.3, P-value高达0.4,所以结果是不显著的。

附录

在网上搜到了一些关于相关性计算方法对数目要求的描述,对相关性的检验描述非常详细,下面截取部分内容:

Pearson correlation assumptions
Pearson correlation test is a parametric test that makes assumption about the data. In order for the results of a Pearson correlation test to be valid, the data must meet these assumptions:

1. The sample is independently and randomly drawn. 【正态】
2. A linear relationship between the two variables is present【线性】
3. When plotted, the lines form a line and is not curved【成对】
4. There is homogeneity of variance【方差齐性】

The variables being used in the correlation test should be continuous and measured either on a ratio or interval sale, each variable must have equal number of non-missing observations, and there should be no outliers present.【无异常值、缺失个数一致、变量连续】

Spearman Rank correlation assumptions
The Spearman rank correlation is a non-parametric test that does not make any assumptions about the distribution of the data. The assumption for the Spearman rank correlation test is:

There is a monotonic relationship between the variables being tested【单调性】
A monotonic relationship exists when one variable increases so does the other
For the Spearman rank correlation, the data can be used on ranked data, if the data is not normally distributed, and even if the there is not homogeneity of variance.

Kendall’s Tau correlation assumptions
The Kendall’s Tau correlation is a non-parametric test that does not make any assumptions about the distribution of the data. The only assumption is:

There should be a monotonic relationship between the variables being tested【单调性】
The data should be measured on either an ordinal, ratio, or interval scale.
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容