精华内容
下载资源
问答
  • 展开全部相关系数越大,说明两个变量之间关系就越强。当相关系数为1时,两个变量其e68a84e8a2ad3231313335323631343130323136353331333431353431实就是一次函数关系。相关系数介于0与1之间,用以反映变量之间相关...

    展开全部

    相关系数越大,说明两个变量之间的关系就越强。当相关系数为1时,两个变量其e68a84e8a2ad3231313335323631343130323136353331333431353431实就是一次函数关系。

    相关系数介于0与1之间,用以反映变量之间相关关系密切程度的统计指标。相关系数是按积差方法计算,同样以两变量与各自平均值的离差为基础,通过两个离差相乘来反映两变量之间相关程度;着重研究线性的单相关系数。

    相关系数是最早由统计学家卡尔·皮尔逊设计的统计指标,是研究变量之间线性相关程度的量,一般用字母 r 表示。由于研究对象的不同,相关系数有多种定义方式,较为常用的是皮尔逊相关系数。

    扩展资料

    (1)相关系数的应用

    1、概率论

    例:若将一枚硬币抛n次,X表示n次试验中出现正面的次数,Y表示n次试验中出现反面的次数。计算ρXY。

    解:由于X+Y=n,则Y=-X+n,根据相关系数的性质推论,得ρXY = − 1。

    2、企业物流

    例:一种新产品上市,在上市之前,公司的物流部需把新产品合理分配到全国的10个仓库,新品上市一个月后,要评估实际分配方案与之前考虑的其他分配方案中,是实际分配方案好还是其中尚未使用的分配方案更好。

    通过这样的评估,可以在下一次的新产品上市使用更准确的产品分配方案,以避免由于分配而产生的积压和断货。表1是根据实际数据所列的数表。

    通过计算,很容易得出这3个分配方案中,B的相关系数是最大的,这样就评估到B的分配方案比实际分配方案A更好,在下一次的新产品上市分配计划中,就可以考虑用B这种分配方法来计算实际分配方案。

    3、聚类分析

    例:如果有若干个样品,每个样品有n个特征,则相关系数可以表示两个样品间的相似程度。借此,可以对样品的亲疏远近进行距离聚类。例如9个小麦品种(分别用A1,A2,...,A9表示)的6个性状资料见表2,作相关系数计算并检验。

    由相关系数计算公式可计算出6个性状间的相关系数,分析及检验结果见表3。由表3可以看出,冬季分蘖与每穗粒数之间呈现负相关(ρ = − 0.8982),即麦冬季分蘖越多,那么每穗的小麦粒数越少,其他性状之间的关系不显著。

    (2)相关系数的缺点:

    需要指出的是,相关系数有一个明显的缺点,即它接近于1的程度与数据组数n相关,这容易给人一种假象。

    因为,当n较小时,相关系数的波动较大,对有些样本相关系数的绝对值易接近于1;当n较大时,相关系数的绝对值容易偏小。特别是当n=2时,相关系数的绝对值总为1。因此在样本容量n较小时,我们仅凭相关系数较大就判定变量x与y之间有密切的线性关系是不妥当的。

    参考资料来源

    展开全文
  • 探索变量之间关系(python3)

    千次阅读 2020-02-10 15:42:29
    在做数据分析的过程中。...探索数据变量之间是否存在某种关系/关联。大致步骤有: 变量的类型:类别型/数值型 可视化给出可能的方向:散点图、箱型图、直方图、... 需建立更严格的分析方式:假设检验。

    在做数据分析的过程中。我们往往是–理解需求–获取数据–清洗数据–简单描述统计–统计型分析报告;
    其实到这里还没完。如果我们还需要深入探索数据的价值,那么,单变量的分布检验–探索变量间的关系–建立关系模型–评估–总结等。
    接下来就来看看数据分析的其中重要的一环–探索变量间的关系。

    探索变量之间的关系

    探索数据变量之间是否存在某种关系/关联。大致步骤有:

    • 变量的类型:类别型/数值型
    • 可视化给出可能的方向:散点图、箱型图、直方图、…
    • 需建立更严格的分析方式:假设检验。假设变量间存在某种函数/逻辑等关联关系,进行检验。

    一、准备工具和数据

    1.1、工具:我们用python3

    通常我们把用于做数据分析的几个库直接先导入,基本是固定导入使用。

    import numpy as np               #科学计算基础库,多维数组对象ndarray
    import pandas as pd              #数据处理库,DataFrame(二维数组)
    import matplotlib as mpl         #画图基础库
    import matplotlib.pyplot as plt  #最常用的绘图库
    from scipy import stats          #scipy库的stats模块
    
    mpl.rcParams["font.family"]="SimHei"  #使用支持的黑体中文字体
    mpl.rcParams["axes.unicode_minus"]=False # 用来正常显示负号  "-"
    plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
    # % matplotlib inline  #jupyter中用于直接嵌入图表,不用plt.show()
    import warnings
    warnings.filterwarnings("ignore") #用于排除警告
     
    #用于显示使用库的版本
    print("numpy_" + np.__version__)
    print("pandas_" + pd.__version__)
    print("matplotlib_"+ mpl.__version__)
    
    numpy_1.17.4
    pandas_0.23.4
    matplotlib_2.2.3
    

    1.2、案例数据

    某餐厅顾客消费记录数据作为主要的案例数据。

    数据源:https://download.csdn.net/download/weixin_41685388/12144418

    '''
    某餐厅顾客消费记录.
    解释数据结构:
    total_bill:消费,tip:小费,sex:服务员性别,
    smoker:是否抽烟,day:星期几,time:午餐/晚餐,size:本桌人数
    '''
    tips = pd.read_csv(r"E:\tips.txt",sep='\t',encoding='utf-8') #导入txt格式数据
    display(tips.shape)  #样本量
    display(tips.sample(5))  #随机抽样5行
    
    (244, 7)
    
    total_billtipsexsmokerdaytimesize
    9627.284.00MaleYesFriDinner2
    23024.012.00MaleYesSatDinner4
    1716.293.71MaleNoSunDinner3
    11014.003.00MaleNoSatDinner2
    23510.071.25MaleNoSatDinner2

    二、数据变量与变量间的关系

    2.1、类别型数据 ~ 类别型数据间的独立性检验

    在这里插入图片描述
    在这里插入图片描述
    通用:用卡方检验

    小样本:用费舍尔检验(劣势:只能检验2*2)

    • 问题1:探索案例数据中服务员性别与星期几的关系?

    卡方检验

    '''①看变量的类型:类别型/数值型'''
    display(tips.sample(3))  #随机抽样3行
    
    statistics = tips[["sex","day"]].describe() #统计
    display(statistics)
    
    #两个变量均是类别型数据,统计往往是进行分类汇总,即需要生成交叉表,用pd.crosstab()
    count=pd.crosstab(tips.sex, tips.day)  
    display(count)
    
    total_billtipsexsmokerdaytimesize
    11629.935.07MaleNoSunDinner4
    14618.641.36FemaleNoThurLunch3
    16910.632.00FemaleYesSatDinner2
    sexday
    count244244
    unique24
    topMaleSat
    freq15787
    dayFriSatSunThur
    sex
    Female9281832
    Male10595830
    '''②可视化给出可能的方向'''
    count.T.plot(kind='bar')
    plt.show()
    

    在这里插入图片描述

    count=pd.crosstab(tips.sex, tips.day)  #构造交叉表
    print(stats.chi2_contingency(count,correction=False))
    #chi2 卡方检验   contingency列联表  列联表中每个格子数量至少为5
    #对性别和星期几进行卡方检验
    chi2, p, dof, ex = stats.chi2_contingency(count, correction=False)  #卡方检验,p值很小,AB有关
    print(p)
    #P值很小,拒绝原假设,说明性别与星期几有关系
    #独立性检验中,H0:AB无关,H1:AB有关系
    
    (13.22200137240661, 0.004180302092822257, 3, array([[ 6.77459016, 31.0204918 , 27.09836066, 22.10655738],
           [12.22540984, 55.9795082 , 48.90163934, 39.89344262]]))
    0.004180302092822257
    
    • 问题2:探索服务员性别与顾客是否吸烟是否有关?

    费舍尔精确检验(小样本)

    count=pd.crosstab(tips.sex,tips.smoker)  
    print(count)
    
    oddsratio,pvalue=stats.fisher_exact(count)  #费舍尔精确检验
    print(oddsratio,pvalue)
    #P值很大,不能拒绝H0,是否吸烟和男女没有关系
    
    smoker  No  Yes
    sex            
    Female  54   33
    Male    97   60
    1.0121836925960637 1.0
    
    #如果修改一下列联表中数据
    count.iat[0,0]=2  #手动将交叉表中的[0,0]位置的元素修改为2
    print(count)
    oddsratio,pvalue=stats.fisher_exact(count)  ##费舍尔精确检验
    print(oddsratio,pvalue)
    #0.03748828491096532 3.9900059898475383e-10
    #P值很小,拒绝H0,吸烟和男女有关系
    #fisher精确检验的优势:每个表格中数据不一定大于五
    #  费舍尔精确检验劣势:只能检验2*2
    
    chi2, p, dof, ex = stats.chi2_contingency(count, correction=False)  #卡方检验
    print(p)
    #卡方检验结果:P值很小,拒绝H0,吸烟和男女有关系
    
    smoker  No  Yes
    sex            
    Female   2   33
    Male    97   60
    0.03748828491096532 3.9900059898475383e-10
    1.9484526423911992e-09
    

    2.数值型~数值型间独立性检验

    • pearson:积差相关系数,反应两个变量之间的线性相关性
      在这里插入图片描述
      在这里插入图片描述

    • spearman:等级相关系数(Ranked data)—常用
      在这里插入图片描述
      spearman相关系数:先对所有变量进行排序,在做线性相关。与pearson不同,不假设变量为正态分布

    • Kendall’s Tau:非参数等级相关系数

      tau=(P-Q)/sqrt((P+Q+T)*(P+Q+U))

      P:同步数据对数,Q:异步,T:tie in x,U:tie in y

    区别及选用

    • pearson和spearman区别:

      如果有线性模式,也有一些离散点,spearman线性相关系数要大一些,因为离散点破坏了线性相关性,但是对rank排序影响不太大

      pearson只能处理两组数据,spearman可以处理多组序列

    • 如何选择:

      Kendall’s tau-b(肯德尔)等级相关系数:用于反映分类变量相关性的指标,适用于两个分类变量均为有序分类的情况。对相关的有序变量进行非参数相关检验;取值范围在-1-1之间,此检验适合于正方形表格;

      计算积距pearson相关系数,连续性变量才可采用;计算Spearman秩相关系数,适合于定序变量或不满足正态分布假设的等间隔数据; 计算Kendall秩相关系数,适合于定序变量或不满足正态分布假设的等间隔数据。

      计算相关系数:当资料不服从双变量正态分布或总体分布未知,或原始数据用等级表示时,宜用 spearman或kendall相关。

      总结:在大多数情况下选用spearman检验即可

    '''可视化给出可能的方向'''
    plt.scatter(tips.total_bill,tips.tip)
    plt.title("total_bill与tip散点图")
    plt.xlabel("total_bill") 
    plt.ylabel("tip") 
    plt.show()
    

    在这里插入图片描述

    #pearson就是统计学中学过的相关系数
    print(stats.pearsonr(tips.total_bill,tips.tip))
    #线性相关度和P值
    #相关系数=0.6757341092113643,p=6.692470646864041e-34
    #p<0.01,拒绝原假设,存在相关性
    
    (0.6757341092113643, 6.692470646864041e-34)
    
    # spearman:等级相关系数(Ranked data)
    rho,pval=stats.spearmanr(tips.total_bill,tips.tip)
    print(rho,pval)
    #p<0.01,拒绝原假设,两变量存在相关性
    
    0.6789681219001009 2.501158440923619e-34
    
    #多组数据的spearmanr独立性检验
    x2n=np.random.randn(100,2)
    y2n=np.random.randn(100,2)
    rho,pval=stats.spearmanr(x2n,y2n)
    print(rho)
    print(pval)
    print("\n")
    rho,pval=stats.spearmanr(x2n.T,y2n.T,axis=1)
    print(rho)
    print(pval)
    
    [[ 1.          0.04819682  0.22357036 -0.0589619 ]
     [ 0.04819682  1.          0.02417042 -0.09821782]
     [ 0.22357036  0.02417042  1.         -0.05353735]
     [-0.0589619  -0.09821782 -0.05353735  1.        ]]
    [[0.         0.63394219 0.02535319 0.56008632]
     [0.63394219 0.         0.81133805 0.33095957]
     [0.02535319 0.81133805 0.         0.59679005]
     [0.56008632 0.33095957 0.59679005 0.        ]]
    
    
    [[ 1.          0.04819682  0.22357036 -0.0589619 ]
     [ 0.04819682  1.          0.02417042 -0.09821782]
     [ 0.22357036  0.02417042  1.         -0.05353735]
     [-0.0589619  -0.09821782 -0.05353735  1.        ]]
    [[0.         0.63394219 0.02535319 0.56008632]
     [0.63394219 0.         0.81133805 0.33095957]
     [0.02535319 0.81133805 0.         0.59679005]
     [0.56008632 0.33095957 0.59679005 0.        ]]
    
    #Kendall's Tau:非参数等级相关系数
    x=[1, 2, 3, 4, 5, 5, 4, 6,-1]
    y=[3, 4, 3, 4, 5, 5, 3, 7, 7]
    '''
    tau=(P-Q)/sqrt((P+Q+T)*(P+Q+U))
    P:同步数据对数,Q:异步,T:tie in x,U:tie in y
    x中1-2增加,y中3-4增加,即为同步P
    x中2-3增加,y中4-3减少,即为异步Q
    x中两个数相等,但y中不相等,即为T
    y中两个数相等,但x中不相等,即为U
    '''
    plt.scatter(x,y)
    plt.title("x与y散点图")
    plt.xlabel("x") 
    plt.ylabel("y") 
    plt.show()
    
    tau, p_value = stats.kendalltau(x,y)#Kendall's Tau:非参数等级相关系数
    print(tau, p_value) #p>0.05,接受原假设,不相关
    
    rho,pval=stats.spearmanr(x,y) #用spearmanr独立性检验
    print(rho,pval) #p>0.05,接受原假设,不相关
    

    在这里插入图片描述
    0.3444233600968322 0.22913623766848912
    0.3247514077354534 0.3938410708377398

    3.数值型~类别型(自变量类别型,因变量数值型)

    • 服务员男女性别中顾客给小费是否不同?

    t检验:比较两个样本(比较两组均值)

    stats.ttest_ind(rvs1,rvs2) # 对两个样本进行t检验
    
    #结果分析:原假设两样本无差异,当p值越小时越拒绝
    
    rvs1 = stats.norm.rvs(loc=5, scale=10, size=500)
    rvs2 = stats.norm.rvs(loc=5, scale=10, size=500)
    print(stats.ttest_ind(rvs1, rvs2))
    #p值较大,接受原假设,两个样本的均值无明显差异
    
    Ttest_indResult(statistic=-0.7847691950148168, pvalue=0.4327751444523158)
    
    rvs1=tips[tips['sex']=='Male']['tip']
    print(rvs1.mean())
    rvs2=tips[tips['sex']=='Female']['tip']
    print(rvs2.mean())
    print(stats.ttest_ind(rvs1, rvs2))  
    #P值较大,不能拒绝原假设:男女性别与小费的多少无差异
    
    3.0896178343949052
    2.833448275862069
    Ttest_indResult(statistic=1.3878597054212687, pvalue=0.16645623503456763)
    
    #如果同一个样本重复抽样,stats.ttest_rel()需要用这个检验,但必须保证两组数据长度相等
    print(stats.ttest_rel(rvs1[:87],rvs2))
    #Ttest_relResult(statistic=1.3639526706337008, pvalue=0.1761417001637746)
    #t检验比较的是两组数的点估计和理想值得比较
    
    Ttest_relResult(statistic=1.3639526706337008, pvalue=0.1761417001637746)
    

    Kolmogorov-Smirnov 双样本检测 ks_2samp(比较两组分布)

    stats.ks_2samp(rvs1, rvs2) #判断两样本分布是否有差异
    
    #检查两样本分布之间是否存在差异,原假设两样本之间不存在差异
    
    rvs1=tips[tips['sex']=='Male']['tip']
    rvs2=tips[tips['sex']=='Female']['tip']
    print(stats.ks_2samp(rvs1, rvs2)) 
    #p值较大,接受原假设,两样本的分布不存在差异
    
    #画图检验一下,加上total_bill作为x轴,tip作为y轴
    plt.title("total_bill与tip关系图")
    plt.xlabel('total_bill')
    plt.ylabel('tip')
    plt.plot(tips[tips['sex']=='Male']['total_bill'],tips[tips['sex']=='Male']['tip'],'bo',label='Male')
    plt.plot(tips[tips['sex']=='Female']['total_bill'],tips[tips['sex']=='Female']['tip'],'go',label='Female')
    plt.legend(["Male","Female"],loc="best", frameon=True, title=" sex", ncol=1)
    plt.show()
    
    Ks_2sampResult(statistic=0.0797276520975182, pvalue=0.8545295823550555)
    

    在这里插入图片描述

    #进一步探索,费率,在国外餐厅费率即指小费/消费
    rvs1=tips[tips['sex']=='Male']['tip']/tips[tips["sex"]=='Male']['total_bill']
    rvs2=tips[tips['sex']=='Female']['tip']/tips[tips["sex"]=='Female']['total_bill']
    
    fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(10, 4))
    
    ax0.set_title('Male')
    ax0.set_xlabel("tip/total_bill")
    ax0.set_ylabel("数量")
    ax0.hist(rvs1, bins=50, facecolor='g', alpha=0.8)
    
    ax1.set_title('Female')
    ax1.set_xlabel("tip/total_bill")
    ax1.set_ylabel("数量")
    ax1.hist(rvs2, bins=50, rwidth=0.8)
    
    #fig.tight_layout()
    plt.show()
    
    #从两个直方图上看有些分布相似,但需要进一步探索
    
    #看一下均值和标准差
    print('Male:',rvs1.mean(),rvs1.std())
    print('Female:',rvs2.mean(),rvs2.std())
    
    #t检验(均值是否有明显不同,原假设是均值基本一样无差异)
    print(stats.ttest_ind(rvs1, rvs2))  
    #P值较大,不能拒绝原假设:男女性别对费率的影响无差异
    
    #正态分布检验
    print(stats.normaltest(rvs1)) #结果拒绝
    print(stats.normaltest(rvs2)) #结果拒绝
    
    print(stats.ks_2samp(rvs1, rvs2)) #判断两样的分布是否存在差异
    # p=0.08440693699139794,可以说是接受原假设,具有相同的分布,但是正态分布检验拒绝了,所以还可以做更多的探索
    # 由于p值相对较小,也可以说拒绝原假设,不具有相同的分布,p值的大小需要根据实际业务逻辑进行设定
    # 最常见的p值设置是0.01,0.05,0.1三个阀值
    # ANOVA方差分析、ANCOVA协方差分析、MANOVA多因素方差分析等方法做更多的探索
    

    在这里插入图片描述

    Male: 0.15765054700429748 0.06477787270951386
    Female: 0.16649073632892475 0.0536317262299475
    Ttest_indResult(statistic=-1.0833972270477996, pvalue=0.2797103849605489)
    NormaltestResult(statistic=174.74433683510114, pvalue=1.1343560308586256e-38)
    NormaltestResult(statistic=36.21379581439844, pvalue=1.368592496283602e-08)
    Ks_2sampResult(statistic=0.1651658247309466, pvalue=0.08440693699139794)
    

    单因素ANOVA方差分析

    原假设H0:所有组的均数相同
    方差分析检验对数据的假设条件:
        1. 样本之间相互独立
        2. 样本均来自正态分布
        3. 方差齐次性:各组方差相等
    对误差平方和,因素平方和进行F检验。如果F检验为1左右,认为不能拒绝原假设
    print(stats.f_oneway(rvs1,rvs2))
    
    #接着上面构造的数据
    rvs1=tips[tips['sex']=='Male']['tip']/tips[tips["sex"]=='Male']['total_bill']
    rvs2=tips[tips['sex']=='Female']['tip']/tips[tips["sex"]=='Female']['total_bill']
    print(stats.f_oneway(rvs1,rvs2)) #p=0.279710384960558,认为不能拒绝原假设,rvs1与rvs2均值相同
    
    '''
    注意:
    原假设的三个条件,其中方差齐次性:各组方差相等,但也不是说需要完全相等。
    如何检验方差齐次性假设?
    方差齐次性:stats.fligner(rvs1,rvs2) # 原假设方差相等
    '''
    x=[1,2,3,4,5]
    y=[1,2,3,4,5]
    print(stats.fligner(x,y))
    print('两组数的方差:',rvs1.var(),rvs2.var())
    print(stats.fligner(rvs1,rvs2)) #在方差检验过程中我们也接受方差是齐次的,虽然我们计算他们的方差明显是不相等的,但相差不大
    
    F_onewayResult(statistic=1.1737495515748593, pvalue=0.279710384960558)
    FlignerResult(statistic=6.590905151254103e-31, pvalue=0.9999999999999993)
    两组数的方差: 0.0041961727927699805 0.0028763620584040393
    FlignerResult(statistic=0.9521374099494737, pvalue=0.3291758341219779)
    

    ANOVA的非参数版本:Kruskal-Wallis H-test

    H0: 各组中值近似相等
        对数据亦有假设条件:Chi2分布,因此样本容量需不小于5
        stats.kruskal(rvs1,rvs2)
    相比于单因素ANOVA方差分析更加宽松
    
    rvs1=tips[tips['sex']=='Male']['tip']/tips[tips["sex"]=='Male']['total_bill']
    rvs2=tips[tips['sex']=='Female']['tip']/tips[tips["sex"]=='Female']['total_bill']
    print(stats.kruskal(rvs1,rvs2)) #p值较大,接受原假设,即中位数基本相同,两组变量无明显差异,且相互独立
    
    KruskalResult(statistic=2.2351202029645436, pvalue=0.13490613264268328)
    
    #练习:星期几对小费是否有影响
    display(pd.crosstab(tips.tip,tips.day).head())  #生成交叉表
    Thur=tips[tips['day']=='Thur']['tip']
    Fri=tips[tips['day']=='Fri']['tip']
    Sat=tips[tips['day']=='Sat']['tip']
    Sun=tips[tips['day']=='Sun']['tip']
    print(stats.f_oneway(Thur,Fri,Sat,Sun)) #单因素ANOVA方差分析
    #F_onewayResult(statistic=1.6723551980998699, pvalue=0.1735885553040592)
    
    '''
    方差分析检验对数据得假设:
    1.样本之间相互独立
    2.样本均来自正态分布
    3.方差齐次性:各组方差相等
    '''
    print(stats.fligner(rvs1,rvs2))  #方差齐次性检验
    #FlignerResult(statistic=1.6183029033640117, pvalue=0.20332858592898514)
    #P值较大,认为方差齐次
    
    #如果不满足以上任意一条
    '''
    ANOVA的非参数版本
    Kruskal-Wallis H-test
    H0:各组中值相等
    对数据也有假设:Chi2卡方分布,因此样本容量需不小于5
    给出得结果宽松一些,没有ANOVA强
    '''
    count=pd.crosstab(tips.tip,tips.day).head()  #构造交叉表
    print(stats.chi2_contingency(count,correction=False))  #卡方检验,p值较大,各类别变量间相互独立
    
    print(stats.kruskal(rvs2,rvs1))  #ANOVA的非参数版本检验
    #KruskalResult(statistic=0.7615717066668545, pvalue=0.38283710822789807)
    
    dayFriSatSunThur
    tip
    1.001300
    1.010010
    1.100100
    1.170100
    1.250201
    F_onewayResult(statistic=1.6723551980998699, pvalue=0.1735885553040592)
    FlignerResult(statistic=0.9521374099494737, pvalue=0.3291758341219779)
    (13.809523809523808, 0.3130368414958159, 12, array([[0.4, 2.8, 0.4, 0.4],
           [0.1, 0.7, 0.1, 0.1],
           [0.1, 0.7, 0.1, 0.1],
           [0.1, 0.7, 0.1, 0.1],
           [0.3, 2.1, 0.3, 0.3]]))
    KruskalResult(statistic=2.2351202029645436, pvalue=0.13490613264268328)
    
    展开全文
  • 目录散点图描述关系特征相关性协方差Pearson相关性非线性关系Spearman秩相关相关性和因果关系 之前提到过描述单个随机变量的一些...研究两个变量之间关系的最简单方法是散点图(scatter plot)。但好的散点图的绘...


    之前提到过描述单个随机变量的一些工具,比如正针对整体总体细节的“分布”、针对总体概述的各种统计量(期望、方差等),也提到过针多元随机变量的描述量:协方差和相关系数,现在此总结下多个变量之间关系的研究。

    注:针对机器学习的问题,“变量”可以直接理解为“特征”。

    1. 散点图

    研究两个变量之间关系的最简单方法是散点图(scatter plot)。但好的散点图的绘制并不简单。

    注:可以将数据进行抖动(jittering),即加入随机噪音弥补四舍五入的效果,以减少丢失信息对散点图的影响。
    但是,抖动数据通常只应用于视觉效果,你应该避免在分析时使用经过抖动处理的数据。
    在这里插入图片描述
    即便经过了抖动处理,散点图也不是展示数据的最佳方法。图中有很多重叠的点,遮盖了密集部分的数据,使离群值显得特别突出。这种效果称为饱和(saturation)。

    2. 描述关系特征

    散点图能让我们对变量关系有个大体了解,而其他可视化方法则可以让我们更深入地了解变量关系的本质。一种方法是对一个变量进行分区,绘制另一个变量的百分位数

    3. 相关性分析

    相关性(correlation)是一个统计量,用于量化两个变量之间关系的强弱

    度量相关性的困难之处在于,我们需要比较的变量通常使用不同的单位。即便变量使用相同的单位,也可能来自不同的分布。

    这些问题有两个常见的解决方法。

    • 将每个值都转换为标准分数(standard score),即其偏离均值的标准差数。这种转换会产生“Pearson乘积矩相关系数”。
    • 将每个值都转换为秩,即其在所有值的排序列表中的索引。这种转换会产生“Spearman秩相关系数”。

    3.1 协方差

    协方差(covariance)可以度量两个变量共同变化的趋势
    对于随机变量X和Y,两者的协方差定义如下:
    Cov[X,Y] = E[(X-μx)(Y-μy)],(中括号只是一种约定俗成的表示手段)可以这样理解:
    在这里插入图片描述

    • 协方差公式中包含的含义
      协方差为正,表示X增大时,Y也增大——正相关性;
      协方差为负,表示X增大时,Y倾向于减小——负相关性;
      协方差为0时,表示X增大,Y没有明显的增大或减小的倾向——两者独立相关。

    几点注意:

    1.与方差的关系
    Var[X] = E[(X-μ)2] = E[(X-μ)(X-μ)] ,其实方差就是一种特殊的协方差

    2.协方差矩阵

    我们可以引入一个协方差矩阵,将一组变量X1,X2,X3两两之间的协方差用矩阵的形式统一进行表达:

    [ 
    V[X~1~]      Cov[X~1~X~2~]      Cov[X~2~X~3~]
    Cov[X~2~X~1~      V[X~2~]       Cov[X~2~X~3~]
    Cov[X~2~X~1~]      Cov[X~3~X~2~]     V[X~3~]     
    ]
    

    注:看上面的公示就会发现若均值μ都为0 ,则计算会简便很多,所以一般先对变量进行0均值处理(xi或者yi减去他们的均值)

    3.PCA降维的过程

    假设我们研究的对象有两个特征属性X和Y,对 5 个样本进行数据采样的结果如下:

    XY
    样本122
    样本226
    样本346
    样本488
    样本548

    我们的目标是对其降维,只用一维特征来表示每个样本,只用一维特征来表示每个样本。我们首先将其绘制在二维平面图中进行整体观察:
    在这里插入图片描述
    查看这两个变量的协方差矩阵,

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = [2,2,4,8,4]
    y = [2,6,6,8,8]
    S = np.vstack((x,y))
    
    print(np.cov(S))
    
    
    [[ 6.  4.]
     [ 4.  6.]]
    

    结合之前的二维散点图可以发现5个样本的特征 X 和特征 Y 呈现出正相关性,数据彼此之间存在着影响。

    若直接粗暴地去掉一个特征,可行么?则会变成:
    在这里插入图片描述显然效果不理想:忽视了数据中的内在结构关系,并且带来了非常明显的信息损失。
    (降维——>高维数据向低维进行投影)

    一个解决思路便是:

    ① 去除原始特征的相关性,使用心新的一组特征来表示原始数据
    ② 然后从新的彼此无关的特征中舍弃不重要的特征,保留较少的特征,实现降维。

    首先,第一点的目的是使用新的特征来对样本来进行描述为了让这两个新特征满足彼此无关的要求,就需要让这两个新特征的协方差为0,构成的协方差矩阵是一个对角矩阵(原始特征X和Y的协方差不是0,只是一个普通的对称矩阵

    对变量分别进行0均值处理后,通过求解协方差矩阵的特征向量,就可以得到线性无关的特征矩阵(图中两个新的坐标方向)。

    在这里插入图片描述
    接下来的工作就是从这两个特征中选取一个作为原始数据的特征表达,其判断标准是方差,方差越大表示这个特征里的数据分布的离散程度就越大,特征所包含的信息量就越大。

    在这里插入图片描述

    3.2 Pearson相关性

    协方差在一些计算中非常有用,但其含义很难解释,因此人们很少将协方差作为摘要统计量。别的不提,协方差的单位是 X 和 Y 的单位乘积,这一点就很难理解。例如,BRFSS数据集中体重和身高的协方差是113千克-厘米,天晓得这是什么意思。
    解决这个问题的方法之一是将偏差除以标准差,得到标准分数,然后计算标准分数的乘积。
    Pearson相关性容易计算,也易于解释。因为标准分数是无量纲(无单位),所以 ρ 也是无单位的。

    非线性关系

    如果Pearson相关性接近0,你可能会认为变量之间没有关系,但这个结论并不成立。Pearson相关性只度量了线性(linear)关系。如果变量之间存在非线性关系,那么 ρ 对变量相关性强弱的估计就可能是错误的。

    Spearman秩相关

    如果变量之间的关系是线性的,而且变量大致符合正态分布,那么Pearson相关性能够很好地说明相关性的强弱。但是离群值会影响Pearson相关性的稳健性。Spearman秩相关能够缓解离群值以及偏斜分布的的影响,也可以用于描述变量的相关性。要计算Spearman相关性,必须计算每个值的秩(rank),即该值在排序样本中的索引。

    相关性和因果关系

    记住:“相关性并不意味着因果关系”

    我们可以用 X 的信息,去预测 Y 的分布或者某些特征,但并不能告诉我们 X 的变化一定会导致 Y 的变化。

    统计关系,无论多么强、多么富有启示性,都不能确立因果关系。因果关系的思想必须来自于统计学之外,来源于一些理论或者其他方面
    ——Kendall & Stuart(1961)

    参考:

    1. 《概率思维》
    2. 线性回归:描述变量间预测关系最简单的回归模型
    3. 简单相关性分析(两个连续型变量)
    4. 矩阵特征值分解与主成分分析(Python 实现)
    展开全文
  • 一 用表格方式汇总两个变量的数据 1 交叉分组表 常用于一个变量为分类型变量,一个变量为数量型变量 下面是由洛杉矶300家饭店组成的一个样本,其质量等级与参加数据的应用。 质量等级是一个分类变量,等级...

    一  用表格方式汇总两个变量的数据

    1  交叉分组表

        常用于一个变量为分类型变量,一个变量为数量型变量

        下面是由洛杉矶300家饭店组成的一个样本,其质量等级与参加数据的应用。

        质量等级是一个分类变量,等级类别:好,很好,优秀

        餐价是一个数量变量,变化的范围:10~49,被分为四个组:10~19, 20~29, 30~39, 40~49

        绘制的交叉分组表如下:

    二   图形显示方式汇总两个变量的数据

    1  复合条形图与结构条形图

        使用复合条形图比较不同质量评级的饭店参加的不同,可视化图如下:

    下面是代码:

    import numpy as np
    import matplotlib.pyplot as plt
    
    # 设置中文为仿宋,避免中文乱码
    plt.rcParams['font.sans-serif'] = ['Adobe Fangsong Std']
    plt.rcParams['axes.unicode_minus'] = False
    
    
    def work4():
    
        N = 4   # 频数分布中的组数
        width = 0.27    # bar width
        
        g_arr = [53.8, 33.9, 2.6, 0.0]  # 评级为好的餐厅,餐价的百分频数分布
        vg_arr = [43.6, 54.2, 60.5, 21.4]   # 评级为很好的餐厅,餐价的百分频数分布
        yx_arr = [2.3, 11.9, 36.8, 78.6]    # 评级为优秀的餐厅,餐价的百分频数分布
        fig, ax = plt.subplots()
        ind = np.arange(N)
        good = ax.bar(ind, g_arr, width, color='#DEB887')
        verygood = ax.bar(ind+width, vg_arr, width, color='#5F9EA0')
        yx = ax.bar(ind+width+width, yx_arr, width, color='#A52A2A')
        ax.set_xticks(ind+width)
        ax.set_xticklabels(['10~19', '20~29', '30~39', '40~49'])
        ax.legend((good[0], verygood[0], yx[0]), ('好', '很好', '优秀'))
    
        def autolabel(rects):
            for rect in rects:
                height = rect.get_height()
                hcap='$'+str(height)
                ax.text(rect.get_x()+rect.get_width()/2.0, height, hcap,
                        ha='center', va='bottom', rotation='vertical')
        autolabel(good)
        autolabel(verygood)
        plt.show()
    
        return

    使用结构条形图比较不同质量评级的饭店参加的不同,可视化图如下:

    这里使用了pandas

    fv1 = [53.8, 43.6, 2.3]     # 10~19餐价对应的不同评级百分频数分布
        fv2 = [33.9, 54.2, 11.9]
        fv3 = [2.6, 60.5, 36.8]
        fv4 = [0.0, 21.4, 78.6]
        data_arr = np.array([fv1, fv2, fv3, fv4])
        df = pd.DataFrame(data_arr, index=['10~19', '20~29', '30~39', '40~49'],
                          columns=pd.Index(['好', '很好', '非常好'], name='分类'))
        df.plot.bar(stacked=True, title='餐价的评级分布')
        plt.show()

     

    展开全文
  • R_展示变量之间关系的图形

    千次阅读 2018-04-02 22:54:51
    #绘制普通矩阵散点图plot(dataframe)#绘制带有拟合直线,最佳拟合曲线和直方图的矩阵散点图library(car)attach(dataframe)...,gap=0.5)#绘制气泡图symbols(var1,var2,circles = var3/pi) #用气泡图表示三变...
  • 如果能从一个变量的信息中得到另一个变量的信息,那么这两个变量之间就是相关的。
  • python数据可视化seaborn(三)——探索变量之间关系 我们常常想知道变量之间是否存在关联,以及这些关联是否收到其他变量影响。可视化能够帮助我们非常直观的展示这些。 import numpy as np import pandas as pd ...
  • R学习连续变量之间关系

    千次阅读 2017-10-08 11:51:44
    1 plot (x,y)能够创建散点图,其中x代表横坐标,y代表纵坐标,这两个向量坐标一致。 2 若我们向他人展示图形的话,那么绘图时注意使用xlab,ylab 和main选项作为图形加上合适的标签,这样便于理解图像 3 使用参数...
  • 交换两个变量的值,不使用第三个变量的四种法方

    千次阅读 多人点赞 2019-09-13 18:42:27
    交换两个变量的值,不使用第三个变量的四种法方 通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换。代码如下: int a,b; a=10; b=15; int t; t=a; a=b; b=t; 这种算法易于理解,特别适合...
  • 相关系数是衡量两个变量之间是否存在相关,如果接近于1那就相关,如果小于0那就负相关。采取的假设检验是t检验。
  • 两个变量与因变量相关性分析提问:用SPSS一个分析,有一个因变量和N个自变量,先做相关性发现有很多自变量与因变量有关,相关性也比较高.继续说,但是再做多重回归方程的时候只有3个因变量入选,其他都被排除了,那在写...
  • 三、观察多个变量之间关系 首先看看变量之间的相关性: cov(iris[ , 1 : 4 ]) # 计算变量之间的协方差矩阵 cor(iris[ , 1 : 4 ]) # 计算变量之间的相关系数矩阵 然后研究一些在不同的目标变量水平...
  • 前言我们在分析两组变量之间的相关性时,比如X=[X1,X2,...,Xm]X=[X_1,X_2,...,X_m]和Y=[Y1,Y2,...,Yn]Y=[Y_1,Y_2,...,Y_n],最原始的方法就是直接计算X和Y的协方差矩阵,矩阵有m*n值。有了协方差矩阵就得到了两两...
  • 一、线性相关描述 问题:两变量间是否存在相关或关联? 身高与体重 尿铅排出量与血铅含量 凝血时间与凝血酶浓度 ...例 在某地一项膳食调查中,随机抽取了14...例 计算上例子中基础代谢Y与体重X之间的样本相关系数...
  • 应用场景:在实际应用中,我们常常会想了解两个变量之间关系 这里举一个简单的例子:一个商店的经理想确定,周末电视广告播放的次数与下周商店销售额之间的关系 我们使用:协方差和相关系数,作为衡量两个变量关系...
  • 当数据存储为data.frame格式时,我们通常先将其转为可以使用 PerformanceAnalytics 包之间求相关,并将结果可视化。 chart.Correlation(dda, histogram=TRUE, pch=19) 其中,dda 为data.frame格式的数据,要求...
  • 协方差衡量的是两个变量之间的相关性,如: 正相关:两个变量具有相同的变化趋势(也称同方向),要么同时变大,要么同时变小,这时协方差是正的; 负相关:两个变量具有相反的变化趋势(也称反方向),一个变...
  • 提问:我是在做问卷,然后是要研究A与B两个问题之间关系.然后AB分别设定了n个问题,从完全不符合到完全符合设为1到5的数值.昨晚问卷后我就有A1,A2……An这些自变量,然后B1,B2……Bn这些因变量,都有数值,要分析A对B的...
  • 两个指针变量可以进行的运算”

    千次阅读 2019-08-06 09:28:50
    两个指针变量不可以(A) 提供了四个选项:A.相加 B.比较 C.相减 D.指向同一地址。牛客网给出的答案A。 分析以及知识点回顾 指针变量保存的是地址,而地址本质上是一个整数,所以指针变量可以进行部分运算,例如...
  • SPSS-两变量相关性分析(转)

    千次阅读 2019-09-28 01:38:08
    两个变量之间存在确定性:关系和不确定关系(会存在一定的波动范围),就好比你的亲生母亲绝对只有一个,而你的亲叔叔可能有好几个(可以在1叔—4叔之间波动) 相关性一般分为 1:强正相关关系 (一个值会随着另一...
  • 准备数据 拓展Excel数据分析功能 选择excel加载项: 勾上分析工具库: 分析相关系数 数据分析 - 相关系数 - 选择输入范围 - 输出范围 ...ps: 会使用python的同学可以直接用pandas的矩阵相关系数...
  • 协方差为什么能表示两个随机变量的相关性?

    万次阅读 多人点赞 2015-08-12 20:48:58
    在machine learning中有时候要测评两个特征之间的联系的程度,举ml中一个简单的例子,现在要预测房子的价格,告诉了房子的面积X和花园的面积Y这两个特征,我们要测评一下X和Y之间的相关程度,即房子的面积和花园的...
  • 通常我们的做法是(尤其是在学习阶段):定义一新的变量,借助它完成交换。代码如下: int a,b; a=10; b=15; int t; t=a; a=b; b=t; 这种算法易于理解,特别适合帮助初学者了解计算机程序的特点,是赋值语句...
  • 0.001),财政收入与城乡居民储蓄存款年底余额之间关系最为密切(r = 0.995,ρ < 0.001) 相关系数表明了各变量与财政收入之间的线性关系程度相当高,由此可以认为所选取的九因素都与财政收入存在着线性关系...
  • 交换两个变量的值,容易联想到【两量交换借助中间变量】的方法。 若用函数调用的方式来实现交换,沿用上述思路初步实现如下: #include&lt;stdio.h&gt; void exchange(int,int); void exchange(int one,...
  • SPSS-两变量相关性分析

    千次阅读 2020-12-28 21:14:06
    两个变量之间存在确定性:关系和不确定关系(会存在一定的波动范围),就好比你的亲生母亲绝对只有一个,而你的亲叔叔可能有好几个(可以在1叔—4叔之间波动)相关性一般分为 1:强正相关关系 (一个值会随着另一个值的...
  • 两个指针之间的运算

    千次阅读 多人点赞 2018-07-23 10:28:27
    只有指向同一数组的俩指针变量之间才可以进行计算。否则是没有意义的。 指针变量相减 指针变量相减所得之差是俩指针所指数组之间相差的元素数。实际上是俩指针值(地址)相减之差再除以该数组元素的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 702,211
精华内容 280,884
关键字:

两个变量之间的关系

友情链接: voltmeter.rar