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

相关分析

相关要解决的问题

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检验,这个可以用于小样本也可以大样本。

检验步骤

  • 提出假设 H0:ρ = 0; H1:ρ不为0
scipy.stats.pearsonr(x, y)
scipy.stats.spearmanr(x, y)

scipy.stats.kendalltau(x, y)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容