在这之前先聊点基础的
方差
标准差
方差和标准差都用来描述数据的离散程度,越小说明数据越集中。
需要注意的是,标准差和方差的大小只和数据本身的距离有关,如果数值大,但是间距小,那么标准差就是小的,所以不要觉得数值大一定是标准差也会大
data1的间距大
数值不一致,但是间距是一致的
协方差与相关系数:
协方差是一个数字,协方差矩阵是矩阵,不要被协方差的名字吓到了
μx是x的均值
也可以写成如下,E就是期望,可以用平均值来代替
协方差的含义是反应两个变量的协同关系, 变化趋势是否一致,如果协方差为正数,代表是同方向变化,反之就是反方向变化。同时协方差的数值越大,说明两个变量同向程度也就越大。(有没有觉得这个和相关系数非常像)
相关系数
相关系数就是在协方差的基础上,除以了x和y的标准差,其实就相当于对协方差做了一个线性拉伸变换,就是协方差的归一化,是无量纲的。但是相关系数的好处就是范围限定在【-1,1】之间,越接近于1说明越相关。
也有的地方不写协方差和标准差,而是用x,均值这种东西,具体过程可以参考下面的例子
pearsonr相关系数
pearsonr相关系数的定义和传统的相关系数一模一样,python中的代码也是很简单
import numpy as np
>>> from scipy import stats
>>> x, y = [1, 2, 3, 4, 5, 6, 7], [10, 9, 2.5, 6, 4, 3, 2]
>>> res = stats.pearsonr(x, y)
>>> res
PearsonRResult(statistic=-0.828503883588428, pvalue=0.021280260007523286)
输入x矩阵,y矩阵,返回的结果包括相关系数和显著性P值,P值用来衡量是否具有显著相关性,这个案例中相关系数很高(虽然是负数),P小于0.05就说明显著负相关。
Spearman 秩阶相关系数
简单来说,personr相关系数是研究两个原始数据之间的相关性,Spearman 不是研究原始数据之间的相关性,而是基于两个变量的秩次来研究。说人话就是,比如研究血红蛋白含量与贫血的相关性,血红蛋白是连续的数值,比如100,99,98.5这些含量,但是贫血特征是不连续的,被分为阴性贫血,严重贫血,一般贫血这些概念。因此一个变量连续,一个变量离散,就需要将这两者都进行编秩,然后使用personr相关系数进行计算
import numpy as np
>>> # total collagen (mg/g dry weight of liver)
>>> x = np.array([7.1, 7.1, 7.2, 8.3, 9.4, 10.5, 11.4])
>>> # free proline (μ mole/g dry weight of liver)
>>> y = np.array([2.8, 2.9, 2.8, 2.6, 3.5, 4.6, 5.0])
>>> from scipy import stats
>>> res = stats.spearmanr(x, y)
>>> res.statistic
0.7000000000000001
代码和personr几乎一样,非常简单
kendalltau一致性检验
具体来说,kendalltau不应该算是相关系数了,而是所谓的一致性,也就是A增加,B也增加,这叫一致性,至于A增加了多少,B增加的是多还是少都不管他的事情了。
import numpy as np
>>> # total collagen (mg/g dry weight of liver)
>>> x = np.array([7.1, 7.1, 7.2, 8.3, 9.4, 10.5, 11.4])
>>> # free proline (μ mole/g dry weight of liver)
>>> y = np.array([2.8, 2.9, 2.8, 2.6, 3.5, 4.6, 5.0])
>>> from scipy import stats
>>> res = stats.kendalltau(x, y)
>>> res.statistic
0.5499999999999999