Person相关分析原理以及python实现


总体——所要考察对象的全部个体叫做望得到总体数据的一些特征(例如均值方差等)
样本——从总体中所抽取的一部分个体叫做总体的一个样本

1.总体Person相关系数

如果两组数据 X : { X 1 , X 2 , ⋯   , X n } X:\left\{X_{1}, X_{2}, \cdots, X_{n}\right\} X:{X1,X2,,Xn} Y : { Y 1 , Y 2 , ⋯   , Y n } Y:\left\{Y_{1}, Y_{2}, \cdots, Y_{n}\right\} Y:{Y1,Y2,,Yn} 是总体数据
那么总体均值: E ( X ) = ∑ i = 1 n X i n , E ( Y ) = ∑ i = 1 n Y i n E(X)=\frac{\sum_{i=1}^{n} X_{i}}{n}, E(Y)=\frac{\sum_{i=1}^{n} Y_{i}}{n} E(X)=ni=1nXi,E(Y)=ni=1nYi
总协方差: Cov ⁡ ( X , Y ) = ∑ i = 1 n ( X i − E ( X ) ) ( Y i − E ( Y ) ) n \operatorname{Cov}(X, Y)=\frac{\sum_{i=1}^{n}\left(X_{i}-E(X)\right)\left(Y_{i}-E(Y)\right)}{n} Cov(X,Y)=ni=1n(XiE(X))(YiE(Y))
直观理解协方差:如果X、Y变化方向相同,即当X大于(小于)其均值时,Y也大于(小于)其均值,在这两种情况下,乘积为正。如果X、Y的变化方向一直保持相同,则协方差为正;同理,如果X、Y变化方向一直相反,则协方差为负;如果X、Y变化方向之间相互无规律,即分子中有的项为正,有的项为负,那么累加后正负抵消。

注意:协方差的大小和两个变量的量纲有关,因此不适合做比较。
总体 Pearson 相关系数: ρ X Y = Cov ⁡ ( X , Y ) σ X σ Y = ∑ i = 1 n ( X i − E ( X ) ) σ X ( Y i − E ( Y ) ) σ Y n \rho_{X Y}=\frac{\operatorname{Cov}(X, Y)}{\sigma_{X} \sigma_{Y}}=\frac{\sum_{i=1}^{n} \frac{\left(X_{i}-E(X)\right)}{\sigma_{X}} \frac{\left(Y_{i}-E(Y)\right)}{\sigma_{Y}}}{n} ρXY=σXσYCov(X,Y)=ni=1nσX(XiE(X))σY(YiE(Y))
其中 σ X , σ Y {{\sigma }_{X}},{{\sigma }_{Y}} σX,σY X , Y X,Y X,Y 的标准差
σ X = ∑ i = 1 n ( X i − E ( X ) ) 2 n , σ Y = ∑ i = 1 n ( Y i − E ( Y ) ) 2 n \sigma_{X}=\sqrt{\frac{\sum_{i=1}^{n}\left(X_{i}-E(X)\right)^{2}}{n}}, \sigma_{Y}=\sqrt{\frac{\sum_{i=1}^{n}\left(Y_{i}-E(Y)\right)^{2}}{n}} σX=ni=1n(XiE(X))2 ,σY=ni=1n(YiE(Y))2

可以证明, ∣ ρ X Y ∣ ≤ 1 \left|\rho_{X Y}\right| \leq 1 ρXY1, 且当 Y = a X + b Y=a X+b Y=aX+b 时, ρ X Y = { 1 , a > 0 − 1 , a < 0 \rho_{X Y}=\left\{\begin{array}{cc}1, & a>0 \\ -1, & a<0\end{array}\right. ρXY={1,1,a>0a<0

2. 样本Person相关系数

假设有两组数据 X : { X 1 , X 2 , ⋯   , X n } X:\left\{X_{1}, X_{2}, \cdots, X_{n}\right\} X:{X1,X2,,Xn} Y : { Y 1 , Y 2 , ⋯   , Y n } Y:\left\{Y_{1}, Y_{2}, \cdots, Y_{n}\right\} Y:{Y1,Y2,,Yn} (一般调查得到的数据均为样本数据)
样本均值: X ˉ = ∑ i = 1 n X i n , Y ˉ = ∑ i = 1 n Y i n \bar{X}=\frac{\sum_{i=1}^{n} X_{i}}{n}, \bar{Y}=\frac{\sum_{i=1}^{n} Y_{i}}{n} Xˉ=ni=1nXi,Yˉ=ni=1nYi
样本协方差: Cov ⁡ ( X , Y ) = ∑ i = 1 n ( X i − X ˉ ) ( Y i − Y ˉ ) n − 1 \operatorname{Cov}(X, Y)=\frac{\sum_{i=1}^{n}\left(X_{i}-\bar{X}\right)\left(Y_{i}-\bar{Y}\right)}{n-1} Cov(X,Y)=n1i=1n(XiXˉ)(YiYˉ)
样本Pearson 相关系数: r X Y = Cov ⁡ ( X , Y ) S X S Y r_{X Y}=\frac{\operatorname{Cov}(X, Y)}{S_{X} S_{Y}} rXY=SXSYCov(X,Y)
其中: S X , S Y {{S}_{X}},{{S}_{Y}} SX,SY 是的样本标准差
S X = ∑ i = 1 n ( X i − X ˉ ) 2 n − 1 , S Y = ∑ i = 1 n ( Y i − Y ˉ ) 2 n − 1 S_{X}=\sqrt{\frac{\sum_{i=1}^{n}\left(X_{i}-\bar{X}\right)^{2}}{n-1}},S_{Y}=\sqrt{\frac{\sum_{i=1}^{n}\left(Y_{i}-\bar{Y}\right)^{2}}{n-1}} SX=n1i=1n(XiXˉ)2 ,SY=n1i=1n(YiYˉ)2
注:为什么除以n-1? 如果除以n,对样本方差的估计不是无偏估计,比总体方 差要小,要想是无偏估计就要调小分母,所以除以n-1

3. 相关系数误区

  1. 四个散点图对应的数据的皮尔逊相关系数均为0.816(图1-4)
    在这里插入图片描述

  2. 冰激凌的销量和温度之间的关系,相关系数计算结果为0(图5)blog.csdn
    在这里插入图片描述

这里的相关系数只是用来衡量两个变量线性相关程度的指标;也就是说,你必须先确认这两个变量是线性相关的,然后这个相关系数才能告诉你他俩相关程度如何。
(1)非线性相关也会导致线性相关系数很大,例如图2。
(2)离群点对相关系数的影响很大,例如图3,去掉离群点后,相关系数为0.98。
(3)如果两个变量的相关系数很大也不能说明两者相关,例如图4,可能是受到了异常值的影响。
(4)相关系数计算结果为0,只能说不是线性相关,但说不定会有更复杂的相关关系(非线性相关),例如图5。

4. Person总结

(1)如果两个变量本身就是线性的关系,那么皮尔逊相关系数绝对值大的就是相关性强,小的就是相关性弱;
(2)在不确定两个变量是什么关系的情况下,即使算出皮尔逊相关系数,发现很大,也不能说明那两个变量线性相关,甚至不能说他们相关,我们一定要画出散点图来看才行。

5. 相关系数的假设检验

在判断样本的 r \mathrm{r} r 是否有意义,需与总体相关系数 ρ = 0 \rho=0 ρ=0 进行比较,看两者的差别有无统计学意义。这就要对进行假设检验,判断不等于 0 是 由于抽样误差所致,还是两个变量之间确实存在相关关系。 步骤:

  1. 提出假设
    H 0 : P = 0 H_0:P=0 H0P=0 无关
    H 1 : P ≠ 0 H_1:P \neq 0 H1P=0 相关
  2. 确定显著水平 a = 0.05 \mathrm{a}=0.05 a=0.05
    如果从相关系数 ρ = 0 \rho=0 ρ=0 的总体中取得 r r r 值的概率 P > 0.05 P>0.05 P>0.05 ,我们就接受假设,认为此 r r r 值很可能是从此总体中取得的。因此判断两变量间无 显著关系;
    如果取得 r r r 值的概率 P < = 0.05 P<=0.05 P<=0.05 P < = 0.01 P<=0.01 P<=0.01 ,我们就在 α = 0.05 \alpha=0.05 α=0.05 α = 0.01 \alpha=0.01 α=0.01 水准上拒绝检验假设,认为该 r r r 值不是来自 ρ = 0 \rho=0 ρ=0 的总体,而是来自 ρ ≠ 0 \rho \neq 0 ρ=0 的另一个总体,因此就判断两变量间有显著关系。
  3. 计算检验统计量,查表得到 P P P 值。拒绝 H 0 H_0 H0,则两变量相关。否则,两变量无关。

t检验法
计算检验统计量 t r t_r tr,查界值表,得到 P P P
t r = ∣ r − 0 ∣ 1 − r 2 n − 2 t_r=\frac{|r-0|}{\sqrt{\frac{1-r^2}{n-2}}} tr=n21r2 r0∣

5. Python实现

5.1 程序

# %%
import numpy as np
import pandas as pd
from scipy.stats import pearsonr
import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats

# 2.0.1无法读取xlsx文件,降低版本到1.2.0 pip install xlrd==1.2.0
test_data = pd.read_excel(r"八年级女生体测数据.xlsx")
# 数据统计
Desc = test_data.describe()
"""
方式一:
Dataframe.corr()   计算两两之间的相似度,返回Dataframe类型
Series.corr(other)  计算该序列与传入序列相关度,返回一个数值
例如:data['身高'].corr(data['体重'])

DataFrame.corr(method='pearson', min_periods=1)
参数说明:
method:可选值为{‘pearson’, ‘kendall’, ‘spearman’}
Pearson相关系数样本必须是正态分布,衡量两个数据集合是否在一条线上面,即针对线性数据的相关系数计算,针对非线性数据便会有误差。
kendall:用于反映分类变量相关性的指标,即针对无序序列的相关系数,非正太分布的数据
spearman:非线性的,非正太分布的数据的相关系数
min_periods:样本最少的数据量,最少为1
"""
result_1 = test_data.corr(method='pearson')



"""
方式二:
将Dataframe转换为array,array.corrcoef(data),返回相关度二维数组
"""
data = np.array(test_data)
# numpy自带函数,rowvar=False代表以列为变量
result_2 = np.corrcoef(data, rowvar=False)




"""
方式三:
scipy.stats中的pearsonr(X,Y)分析两个变量,无法计算相关矩阵
返回值:
r : float,皮尔逊相关系数,[-1,1]之间。
p-value : float,Two-tailed p-value(双尾P值)。
注:p值越小,表示相关系数越显著,一般p值在500个样本以上时有较高的可靠性。可以理解为显著性水平。
"""
result_3 = pearsonr(test_data['身高'], test_data['体重'])

"""
数据可视化
"""
# 相关性热力图可视化
ax = sns.heatmap(result_1, vmax=1, cmap='RdYlGn', annot=True)
ax.set_xticklabels(list(test_data))
ax.set_yticklabels(list(test_data))
# 设置中文标签显示
plt.rcParams['font.sans-serif'] = ['Kaitt', 'SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()
# 生成散点图,可以初步判断正态分布
ax_1 = sns.pairplot(test_data)
plt.show()

for i in list(test_data):
    index_i = list(test_data).index(i)
    plt.subplot(3,2,index_i+1)
    sns.histplot(test_data[i], kde=True)
plt.show()

"""
正态分布KS检验
满足p > 0.05的情况,服从正态分布。
"""
print(Desc)
All_mean = Desc.loc['mean']
All_std = Desc.loc['std']
for i in list(test_data):
    statistic, pvalue = stats.kstest(test_data[i], 'norm', (All_mean.loc[i], All_std.loc[i]))
    print(pvalue)

5.2 数据

在这里插入图片描述

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值