相关与回归分析-(数值自变量与数值因变量的关系)

2020-09-08  本文已影响0人  echolvan

相关分析

相关要解决的问题

1) 变量是否存在关系?
2) 如果存在关系,那是存在的什么关系???
3) 有关系的话,它的关系强度是多少???
4) 是否可以用样本反映的变量上关系来代表总体上变量的关系???

  1. 首先绘制散点图判断变量之间的关系形态
  2. 如果是线性关系,则可以利用相关系数来测度两个变量的关系强度
  3. 然后对相关系数进行显著性检验,判断样本所反映的关系是否可以代表两个变量总体上的关系。

画散点图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings

sns.set(style='darkgrid')
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
warnings.filterwarnings('ignore')

# 用searborn画特征与特征之间的散点图
sns.pairplot(data[['AQI', 'PopulationDensity', 'GreenCoverageRate']])

计算相关系数

相关系数的计算公式是pearson相关系数


image.png
# 我们可以手写,其中data是我的pandas DataFrame数据,比如我想知道AQI空气质量指数与降雨的相关系数'Precipitation

x = data['AQI']
y = data['Precipitation']
# 计算AQI与Precipitation的协方差
a = (x - x.mean())*(y - y.mean())
cov = np.sum(a)/(len(a)-1)
print('协方差:', cov)
# 计算AQI与Precipitation的相关系数
corr = cov / np.sqrt(x.var()*y.var())
print('相关系数:',corr)

# 也可以直接一步用numpy里函数算出
print('covarience:', x.cov(y))
print('corrlation:', x.corr(y))

# 甚至可以直接使用dataframe里的corr函数
data.corr()

#为了直观我们可以用热力图看相关性的强度
plt.figure(figsize=(15,10))
ax = sns.heatmap(data.corr(), cmap=plt.cm.RdYlGn, annot=True, fmt='.2f')

可以根据经验将相关程度分为几种情况:
这里我用abs(r)代表相关系数的绝对值

相关度r 相关程度
abs(r)>=0.8 高度相关
0.5<=abs(r)<0.8 中度相关
0.3<=abs(r)<0.5 低度相关
abs(r)<0.3 相关性超级弱可视为不相关

相关系数的显著性检验

对r的正态性假设是具有很大风险的,因此通常不采用正态检验,而采用t检验,这个可以用于小样本也可以大样本。

检验步骤

scipy.stats.pearsonr(x, y)
scipy.stats.spearmanr(x, y)

scipy.stats.kendalltau(x, y)
上一篇 下一篇

猜你喜欢

热点阅读