美文网首页
相关与回归分析-(数值自变量与数值因变量的关系)

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

作者: echolvan | 来源:发表于2020-09-08 17:38 被阅读0次

    相关分析

    相关要解决的问题

    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)
    

    相关文章

      网友评论

          本文标题:相关与回归分析-(数值自变量与数值因变量的关系)

          本文链接:https://www.haomeiwen.com/subject/zedjektx.html