总体——所要考察对象的全部个体叫做望得到总体数据的一些特征(例如均值方差等)
样本——从总体中所抽取的一部分个体叫做总体的一个样本
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)=n∑i=1nXi,E(Y)=n∑i=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)=n∑i=1n(Xi−E(X))(Yi−E(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)=n∑i=1nσX(Xi−E(X))σY(Yi−E(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=n∑i=1n(Xi−E(X))2,σY=n∑i=1n(Yi−E(Y))2
可以证明, ∣ ρ X Y ∣ ≤ 1 \left|\rho_{X Y}\right| \leq 1 ∣ρXY∣≤1, 且当 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ˉ=n∑i=1nXi,Yˉ=n∑i=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)=n−1∑i=1n(Xi−Xˉ)(Yi−Yˉ)
样本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=n−1∑i=1n(Xi−Xˉ)2,SY=n−1∑i=1n(Yi−Yˉ)2
注:为什么除以n-1? 如果除以n,对样本方差的估计不是无偏估计,比总体方 差要小,要想是无偏估计就要调小分母,所以除以n-1
3. 相关系数误区
-
四个散点图对应的数据的皮尔逊相关系数均为0.816(图1-4)
-
冰激凌的销量和温度之间的关系,相关系数计算结果为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 是 由于抽样误差所致,还是两个变量之间确实存在相关关系。 步骤:
- 提出假设
H 0 : P = 0 H_0:P=0 H0:P=0 无关
H 1 : P ≠ 0 H_1:P \neq 0 H1:P=0 相关 - 确定显著水平
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 的另一个总体,因此就判断两变量间有显著关系。 - 计算检验统计量,查表得到 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=n−21−r2∣r−0∣
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)