精华内容
下载资源
问答
  • 计算给定 Pearson 相关系数和样本大小 n 的双尾置信区间 (CI)。 用于从不提供原始数据值的报告中获取 CI。
  • 线性相关系数

    千次阅读 2017-06-09 14:27:19
    问题是这样开始的:在处理数据时,无意中发现年龄和费用的均值呈现了过分好的线性相关性 如下图所展示的:用肉眼就可以看出他们线性相关性很大 ...尝试考察下这个正相关系数的可靠性:用的单变量线性回归

    问题是这样开始的:在处理数据时,无意中发现年龄和费用的均值呈现了过分好的线性相关性

    如下图所展示的:用肉眼就可以看出他们线性相关性很大



    经过计算,皮尔逊相关系数达到0.983。


    年龄和费用均值之间的线性相关性居然有那么高么?根据经验,规律好得不可思议,肯定有问题。。。

     

    尝试考察下这个正相关系数的可靠性:用的单变量线性回归来检验。

    因为单变量线性回归的时候,回归系数和两个变量的线性相关系数只差一个应变量的标准差比变量的标准差。线性相关系数=回归系数*变量标准差/应变量标准差。当变量和应变量在构造线性回归方程式事先归一化了,那么回归系数就等于二个变量的线性相关系数。

    因此,想通过检验单变量回归方程的系数来确定,两个变量之间的正相关系数不可能为0。运算结果如下:


     其中,变量前面的估计系数是8.992

     


     

    验证一下刚才提到的系数关系:8.992*变量标差/应变量标差0.983296。

    所以,年龄和平均费用的有很明显的线性关系,并且是可靠的?

     

    那年龄直接和费用计算线性相关系数结果应该也会很好吗?


    结果线性相关系数从0.983跌到只有0.028,低于一般的参考阀值0.3,通常是认为没有线性关系的。

     

    现在有的结论是,年龄和费用均值有明显的线性关系,但是年龄和费用却没有线性关系,与变量本身没关系,但是与其均值有线性关系,这是种什么关系? 


    毫无头绪的时候,考虑画点图找些灵感

    只有二个字段:年龄和费用,显然最简单直观的是画散点图:


    看上去每个年龄阶段的分布都很相似,有一些费用超高的,大量点集中在较低的费用区间。

    经过考虑画箱形图,并且放大费用较低的位置,如下:在箱形图中位数附近的点是均值点。看上去均值确实随着年龄在蜿蜒向上,但是每个年龄区间的费用分布似乎都差不多,有夸张的大值,不同年龄间的上下四分位数浮动十分接近,忽高忽低。


    就算,均值可以和年龄有良好的线性关系,但是插值或者预测出来的费用均值对单个样本费用的预估几乎是毫无帮助,因为上下浮动范围太大到毫无用处。

     

    经过思考,费用的均值和年龄有正相关关系的意义,可能是想提示人们,可以试着进行类别细分。

    限制同一种条件A下,考察年龄和费用的线性相关系数:0.125,比之前0.028提升不少。



    甚至可以考虑,条件A且条件B同时不变的情况下,年龄和收费的线性相关系数:0.225,进一步提高了。虽然还是比参考临界阀值0.3低,但是新考虑的二个维度对关系的考察是很有帮助的。有理由相信,再考虑增加一些维度可以得到更加明显的关系。


    这也是提醒我们在建模的时候,不要随便用过滤式变量选择法剔除字段,兴许在其他字段的共同作用下,隐藏的未知关系就浮现了。




    展开全文
  • 第七章.线性相关系数的计算

    千次阅读 2019-11-23 15:32:42
    7.1.1线性相关系数的计算 线性相关分析是用相关系数来表示两个变量间相互的线性关系,并判断其密切程度的统计方法。 为了下面编程方便起见,我们令X=身高,Y=体重。 > x=ug$height > y=ug$weight > par...

    7.1.1线性相关系数的计算

    线性相关分析是用相关系数来表示两个变量间相互的线性关系,并判断其密切程度的统计方法。

    为了下面编程方便起见,我们令X=身高,Y=体重。

    > x=ug$height
    > y=ug$weight
    > par(mfrow=c(1,2))
    > plot(x,y)
    > plot(y,x)

    下面编写一个离均差积和函数来计算相关系数。

    > lxy<-function(x,y){
    +     n=length(x)
    +     l=sum(x*y)-sum(x)*sum(y)/n
    +     l}
    > lxy(x,x)
    [1] 4923.917
    > lxy(y,y)
    [1] 4363.917
    > lxy(x,y)
    [1] 4096.417
    > r=lxy(x,y)/sqrt(lxy(x,x)*lxy(y,y))
    > r
    [1] 0.8837116

    在R中求相关系数的函数是cor()

    > cor(x,y)
    [1] 0.8837116
    > cor(y,x)
    [1] 0.8837116

    虽然身高和体重的散点图与体重和身高的散点图不一样,但其相关系数是一样的,都为0.8837,说明这两个变量具有较高的线性相关程度。

    至于相关系数r是否显著,尚需进行假设检验

    7.1.2 相关系数的假设检验

    r与其他统计指标一样,也有抽样误差。从同一总体内抽取若干大小相同的样本,各样本的相关系数总有波动。要判断不等于0的r值是来自总体相关系数p=0的总体还是来自p不等于0的总体,必须进行显著性检验

    (1)建立假设检验:H0:p=0,H1:p不等于0,α=0.05

    (2)计算相关系数r的t值:

    > n=length(x)
    > tr=r/sqrt((1-r^2)/(n-2))
    > tr
    [1] 12.80602

    (3)计算t值和p值,做结论

    可直接用R语言中检验相关系数的函数cor.test()

    > cor.test(x,y)
    
    	Pearson's product-moment correlation
    
    data:  x and y
    t = 12.806, df = 46, p-value < 2.2e-16
    alternative hypothesis: true correlation is not equal to 0
    95 percent confidence interval:
     0.8006027 0.9334607
    sample estimates:
          cor 
    0.8837116 

    由于p<0.05,因此拒绝原假设,可认为该学生人群身高与体重呈现正的线性关系。

    下面简要说明相关分析的主要事项:

    (1)零相关不一定意味着独立性

    (2)相关系数的显著性与自由度相关。

    (3)相关系数不能用于描述非线性关系

    (4)做相关分析时,必须剔除异常点

    (5)相关分析要有实际意义,两变量相关并不代表两变量间一定存在内在联系

    7.1.3 分组数据的相关分析

    下面我们来研究基于性别分组的学生身高和体重之间的线性相关分析。这里我们将性别作为分组变量

    一、绘制分组散点图

    > library(lattice, lib.loc = "C:/Program Files/data app/R-3.6.1/library")
    > xyplot(weight~height|sex,data=ug)

    二.分组相关分析

    > cor.test(~weight+height,data=ug[ug$sex=='男',])
    
    	Pearson's product-moment correlation
    
    data:  weight and height
    t = 10.702, df = 23, p-value = 2.094e-10
    alternative hypothesis: true correlation is not equal to 0
    95 percent confidence interval:
     0.809217 0.961127
    sample estimates:
          cor 
    0.9125599 
    > cor.test(~weight+height,data=ug[ug$sex=='女',])
    
    	Pearson's product-moment correlation
    
    data:  weight and height
    t = 7.3909, df = 21, p-value = 2.861e-07
    alternative hypothesis: true correlation is not equal to 0
    95 percent confidence interval:
     0.6737095 0.9346582
    sample estimates:
          cor 
    0.8498926 
    

    同理可对其他分组变量进行相关关系分析。

    7.2 线性回归分析模型

    7.2.1一元线性回归模型

    一.一元线性回归模型的建立

    > x=ug$height
    > y=ug$weight
    > b=lxy(x,y)/lxy(x,x)
    > b
    [1] 0.8319427
    > a=mean(y)-b*mean(x)
    > a
    [1] -70.98137

    一般可直接使用R语言中的函数lm来构建一个线性模型,用命令plot和abline来绘制图形和回归线

    > fm=lm(y~x)
    > fm
    
    Call:
    lm(formula = y ~ x)
    
    Coefficients:
    (Intercept)            x  
       -70.9814       0.8319  
    > plot(x,y)# 根据回归模型绘制回归线
    > abline(fm)

    二.一元线性回归模型检验

    线性回归模型的主要步骤有:建立回归模型,求解回归模型中的参数,对回归模型进行检验等

    如果统计模型可以很好的拟合数据,那么就可以进行统计推断。

    > fm=lm(weight~height,data=ug)
    > summary(fm)
    
    Call:
    lm(formula = weight ~ height, data = ug)
    
    Residuals:
         Min       1Q   Median       3Q      Max 
    -11.6086  -2.8312   0.1268   2.4712  12.2150 
    
    Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
    (Intercept) -70.98137   10.94744  -6.484 5.43e-08 ***
    height        0.83194    0.06496  12.806  < 2e-16 ***
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 4.559 on 46 degrees of freedom
    Multiple R-squared:  0.7809,	Adjusted R-squared:  0.7762 
    F-statistic:   164 on 1 and 46 DF,  p-value: < 2.2e-16

    从中可以看出,模型的截距和斜率的p值都小于0.01,故身高对体重有显著的线性影响

    三.回归模型的预测和估计

    建立模型有三个主要的作用:(1)影响因素分析;(2)进行估计;(3)进行预测。

    上面我们主要探讨了线性回归模型的影响因素,下面用模型来进行预测和估计。其实他们是一个问题,估计就是在自变量范围内对

    因变量的估算,预测是在自变量范围以外对因变量的推算。R语言所用的命令都是predict。如predict(fm)相当于模型的拟合值

    fitted(fm)

    > predict(fm,data.frame(height=160))
           1 
    62.12947 
    > predict(fm,data.frame(height=c(150,160,170,180,190,200)))
           1        2        3        4        5        6 
    53.81004 62.12947 70.44890 78.76832 87.08775 95.40718 

    四:应用R获取分析结果

    下面就调用上面建立的lm命令输出中间结果,具体如下:

    (1)创建一个lm对象:使用lm函数并储存结果

    (2)查看对象的元素:names将给出对象fm的大部分细节信息

    > names(fm)
     [1] "coefficients"  "residuals"     "effects"       "rank"          "fitted.values"
     [6] "assign"        "qr"            "df.residual"   "xlevels"       "call"         
    [11] "terms"         "model" 

    (3)调用回归系数

    > fm$coefficients
    (Intercept)      height 
    -70.9813665   0.8319427 

    若要得到单个值,可用序号去引用它们,或者按如下方法命名

    > coef(fm)[1]
    (Intercept) 
      -70.98137 
    > coef(fm)[2]
       height 
    0.8319427 

    7.2.2多元线性回归模型

    第一步:得到线性回归模型

    > fm=lm(weight~height+income,data=ug)
    > fm
    
    Call:
    lm(formula = weight ~ height + income, data = ug)
    
    Coefficients:
    (Intercept)       height       income  
      -71.86674      0.83885     -0.00994

    第二步:进行统计检验

    统计检验是运用数理统计的方法,对模型所建立的方程以及模型中的参数进行检验,主要有以下三种:t检验(变量的显著性检验)、F检验(模型的显著性检验)、和R^2检验(模型的拟合优度检验)

    (1)t检验:选出主要因素,删除可有可无的因素

    即检验每个偏回归系数是否为0

    (2)F检验:用于判断自变量和因变量之间是否有线性关系。对于多元线性回归模型方程,检验因变量y和自变量x之间的线性关系是否显著,即检验假设:

    H0:所有系数均为0

    H1:至少有一个系数不为0

    F=MS回/MS残~F(P,N-P-1)

    MS回=S回/p,MS残=S残/(n-p-1)

    三、多元线性模型的检验

    > summary((fm))
    
    Call:
    lm(formula = weight ~ height + income, data = ug)
    
    Residuals:
        Min      1Q  Median      3Q     Max 
    -11.795  -2.884   0.207   2.512  11.988 
    
    Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
    (Intercept) -71.86674   11.25338  -6.386 8.32e-08 ***
    height        0.83885    0.06766  12.398 4.10e-16 ***
    income       -0.00994    0.02406  -0.413    0.681    
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 4.6 on 45 degrees of freedom
    Multiple R-squared:  0.7818,	Adjusted R-squared:  0.7721 
    F-statistic:  80.6 on 2 and 45 DF,  p-value: 1.335e-15
    

    从中可以看出,学生的身高对学生的体重有显著的影响,而家庭收入实际上对学生的体重影响不显著。但整个模型还是显著的(F=80.6,p<0.05).模型的拟合效果较好,因为模型的拟合优度较高(R^2=0.78)

    7.2.3 多元回归模型诊断

    回归模型的诊断就是对回归模型基本假设的合理性、回归方程拟合效果等的验证和判定。

    对回归模型的诊断主要是基于误差的残差来进行的。诊断的主要方面是:误差项是否满足独立、等方差性、正态性等

    下面介绍几个基于残差的诊断统计量。

    一、残差值

    > y=ug$weight
    > yhat=fm$fitted.values
    > e=y-yhat
    > cbind(y,yhat,e)
        y     yhat            e
    1  66 65.54011   0.45989342
    2  65 63.82264   1.17735728
    3  87 84.11911   2.88088900
    4  67 65.76071   1.23928515
    5  69 66.50619   2.49381358
    6  89 84.85161   4.14839026
    7  69 72.10979  -3.10978547
    8  57 54.44716   2.55283721
    。。。。。。。
    > par(mfrow=c(1,2))
    > plot(e)
    > abline(h=0)
    > plot(y,e)
    > abline(h=0)

    从上面两个图可以看出,模型的残差基本上是服从正态分布的

    二.杠杆值(leverage)

    yhat=Hy,H为投影矩阵,hi是投影阵H矩阵主对角线上的元素,一般0<=hi<=1

    虽然假定的随机误差项是同方差的,残差的方差却是不相等的,它与H矩阵主对角线上的值密切相关。当hi的值很大时,残差的方差会很小。但反应在图形上,是该样本把回归直线向自身拉近,从而对整个模型的拟合性造成很大的影响,所以对于hi特别大的样本,一般判定界限为2p/n(注意:这里的p需包含常数项)。

    三.学生化残差

    残差的重要应用之一就是根据它的绝对值大小判定异常值。

    7.2.4分组多元回归模型

    下面我们来研究基于性别分组的学生身高和体重之间的线性回归模型,这里我们将性别作为分组变量

    > summary(lm(weight~height,data=ug[ug$sex=='男',]))
    
    Call:
    lm(formula = weight ~ height, data = ug[ug$sex == "男", ])
    
    Residuals:
         Min       1Q   Median       3Q      Max 
    -10.5972  -2.0498   0.4835   3.4028   5.5923 
    
    Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
    (Intercept) -69.47248   13.06416  -5.318 2.13e-05 ***
    height        0.81754    0.07639  10.702 2.09e-10 ***
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 4.549 on 23 degrees of freedom
    Multiple R-squared:  0.8328,	Adjusted R-squared:  0.8255 
    F-statistic: 114.5 on 1 and 23 DF,  p-value: 2.094e-10
    
    > summary(lm(weight~height,data=ug[ug$sex=='女',]))
    
    Call:
    lm(formula = weight ~ height, data = ug[ug$sex == "女", ])
    
    Residuals:
        Min      1Q  Median      3Q     Max 
    -5.1461 -3.2409 -0.2911  1.7926 10.8093 
    
    Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
    (Intercept) -95.9350    22.1760  -4.326 0.000298 ***
    height        0.9888     0.1338   7.391 2.86e-07 ***
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Residual standard error: 4.396 on 21 degrees of freedom
    Multiple R-squared:  0.7223,	Adjusted R-squared:  0.7091 
    F-statistic: 54.63 on 1 and 21 DF,  p-value: 2.861e-07

    7.3数据分类与模型选择

    7.3.1数据与模型

    根据获得的数据,建立因变量和解释变量间恰当的统计模型(关系),解决下列三个问题:

    (1)解释变量对因变量的效应

    (2)效应有无统计学意义

    (3)因变量随解释变量的变化规律

    一.变量的取值类型

    因变量y一般有两种取值类型

    1:连续变量

    2:y为“0-1”变量或称二分类变量

    解释变量xi一般有如下三种取值方式:

    (1)xi为连续变量

    (2)xi为分类变量

    (3)xi为等级变量

    二.模型的选择方式

    1.y为连续变量

    (1)当xi均为变量时,就是上节讲的线性回归模型

    (2)当xi是由因素构成的哑变量时,y为反应变量(实验结果),x为设计阵,称为实验设计模型或方差分析模型。

    2.y为两分类变量

    一般用logistic回归模型来描述y与诸解释变量或因素之间的关系,通过建立模型得到解释变量对反应变量y的效应or值

    3.y为多分类变量

    这时宜用对数线性模型和logistic回归模型来描述y与x间的关系,解释变量x既可以是因素可以是等级变量

    7.3.2线性模型分析

    一.单因素方差分析模型

    > anova(lm(weight~region,data=ug))
    Analysis of Variance Table
    
    Response: weight
              Df Sum Sq Mean Sq F value Pr(>F)
    region     2  322.1 161.054  1.7931 0.1781
    Residuals 45 4041.8  89.818   

    从结果可知,不同来源地的学生的体重的均值无显著不同

    二.两因素方差分析模型

    > anova(lm(weight~sex+region,data=ug))
    Analysis of Variance Table
    
    Response: weight
              Df Sum Sq Mean Sq F value Pr(>F)  
    sex        1   56.6  56.612  0.6500 0.4244  
    region     2  475.2 237.596  2.7281 0.0764 .
    Residuals 44 3832.1  87.093                 
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

     

     

     

    展开全文
  • 针对一对一策略的支持向量机算法进行了加权改造,提出一种新的基于非线性相关系数的核方法,在没有地物真实参考图的情况下进一步提高了超谱数据的分类精度。该方法考虑到遥感超谱数据信息依波段分布不均匀的特性,...
  • 线性相关系数、卡方检验、互信息

    万次阅读 2017-02-07 17:39:02
    线性相关系数、卡方检验、互信息线性相关系数卡方检验互信息 线性相关系数 卡方检验 互信息 总结相信大家在数据挖掘的很多地方大家都看到这三个概念,比如说线性拟合的时候,看线性相关系数来评估拟合程度;在特征...

    线性相关系数、卡方检验、互信息

    相信大家在数据挖掘的很多地方大家都看到这三个概念,比如说线性拟合的时候,看线性相关系数来评估拟合程度;在特征工程中,这三个都是filter类方法之一(过滤型)。那今天给大家总结下这三个概念,个人才疏学浅,有啥问题还请大家批评指正。


    线性相关系数

    也叫Pearson相 关 系 数, 主要衡量两个变量线性相关的程度,由卡尔·皮尔森1880年提出。它的公式为

    线性相关系数公式

    其中 X¯¯¯ X 的平均值,Y¯¯¯ Y 的平均值。r的取值[-1,1]。越接近1,表示 X Y越相关,其中负数表示负相关。

    需要特别注意的是:
    1. 线性相关系数必须建立在因变量与自变量是线性的关系基础上,否则线性相关系数是无意义的。实例可以参看博文
    2. 从公式中可以看出,如果只有一个数据,分母为0,线性相关系数也是无意义的。其实少量数据量,计算线性相关性也是无意义的(怎么画那条直线呢)。
    因此,建议在给出线性相关系数之前,画图展示下数据的分布。

    线性相关系数python代码实现

    import sys
    import re
    import math
    def matrix_multiply(x, y):
        fxy = 0.0
        for i in range(len(x)):
            fxy = fxy + x[i]*y[i]
        return fxy;
    
    def compute_pearson_correlation_coefficient(x_label, y_label):
        no = len(x_label);
        sum_x = sum(x_label)
        sum_y = sum(y_label);
    
        fxy = matrix_multiply(x_label, y_label);
        fx2 = sum([pow(i,2) for i in x_label])
        fy2 = sum([pow(j,2) for j in y_label])
    
        #分子
        numerator = no*fxy - float(sum_x)*float(sum_y);
        #分母
        denominator = math.sqrt((no*fx2-float(sum_x**2))*(no*fy2-float(sum_y**2)))
        return numerator*1.0/denominator
    

    计算示例为,计算月月销售额跟广告投入的关系:
    月均销售额与广告投入的关系


    卡方检验

    卡方检验(chi-square test),也叫作 χ2 检验。卡方检验有多种方法,最著名的就是皮尔逊卡方检验,也是卡尔·皮尔森提出(被誉为现代统计科学的创立者,牛掰)。我们通常用卡方来检测两个变量or样本的独立性。

    卡方检验的理论假设是:一个样本中已发生事件的次数分配会遵守某个特定的理论分配。通常的讲:观测频数跟实际频数应该没有区别,除非两个变量不是独立的。举个例子:XX公司不同部门职员的性别跟部门两者是独立的么?很明显不是哦。这儿我们的期望男女比例是1.05:1,但是在IT研发部分,比例可能是3:1,在HR、客服等部门,比率可能是1:3了。因此这儿的观测值就跟实际值不一致,我们就可以说两个不是独立的。

    卡方检验通常有三个步骤
    1. 计算卡方统计值, χ2 统计值的公式是:
    卡方计算公式
    2. 计算自由度 df=(r1)(c1)
    3. 依据研究者设定的置信水准,查出自由度为 df 的卡方分配临界值,比较它与第1步骤得出的 χ2 统计值,推论能否拒绝虚无假设。如果1计算出来的统计值大于表的值,则可以拒绝两个独立的假设,也就是说两者相关的,越相关 χ2 值越大。

    从这儿可以看出, χ2 比线性相关系数作用会广一些,因为它没有线性的前提假设。但是卡方检验时需要查卡方临界表,但是比较相关性大小就可以不用了。
    对于连续型的特征,怎么计算卡方分布呢?这儿需要将连续型的特征进行分段,变为离散的特征然后再计算卡方分布。

    卡方检验python代码实现

    import sys
    import re
    import math
    
    def gen_observe_list(x, y):
        '''
            生成观测数组
        '''
        feature_no = len(x[0])
    
        label_dict = {};
        label_no = 0;
        for i in y:
            if i not in label_dict:
                label_dict[i] = label_no
                label_no = label_no + 1
        observe_list = [([0] * (feature_no+1)) for i in range(label_no + 1)]
    
        idx = 0;
        while idx < len(x):
            label = y[idx]
            y_idx = label_dict[label];
    
            features = x[idx];
            x_idx = 0;
            while x_idx < len(features):
                observe_list[idx+1][0] = observe_list[idx+1][0] + features[x_idx]
                observe_list[idx+1][x_idx+1] = observe_list[idx+1][x_idx+1] + features[x_idx]
    
                observe_list[0][x_idx+1] = observe_list[0][x_idx+1] + features[x_idx]
                observe_list[0][0] = observe_list[0][0] + features[x_idx]
                observe_list
                x_idx = x_idx+1;
            idx = idx + 1
        return observe_list
    
    def gen_expect_list(observe_list):
        '''
            计算期望数组
        '''
        expect_list = [([0.0] * len(observe_list)) for i in range(len(observe_list[0]))]
        x_idx = 0
        y_idx = 1;
        while y_idx < len(observe_list):
            x_idx = 1
            while x_idx < len(observe_list[0]):
                expect_list[y_idx][x_idx] = observe_list[y_idx][0]*observe_list[0][x_idx]*1.0/observe_list[0][0]
                x_idx = x_idx + 1
            y_idx = y_idx + 1
        return expect_list
    
    def compute_chi2(x, y):
        if len(x) != len(y) or len(x) < 2:
            print >>sys.stderr, "feature is too less..."
    
        observe_list = gen_observe_list(x, y)
        expect_list = gen_expect_list(observe_list);
    
        ##计算chi2
        y_idx = 1;
        chi2 = [0.0] * len(expect_list[0]);
        while y_idx < len(observe_list):
            x_idx = 1
            while x_idx < len(observe_list[0]):
                expect_val = expect_list[y_idx][x_idx];
                observe_val = observe_list[y_idx][x_idx];
    
                chi_val = 1.0*(expect_val - observe_val)**2/expect_val
                chi2[0] = chi2[0] + chi_val;
                chi2[x_idx] = chi2[x_idx] + chi_val;
                x_idx = x_idx + 1;
            y_idx = y_idx + 1
        return chi2
    

    具体实例可以参看wikipedia词条解释


    互信息

    互信息的概念来自于信息熵,相信大家在很多机器学习,数据挖掘的数据都有看到。互信息广泛使用在特征选择、机器学习数模型中。
    在概率论和信息论中,互信息是两个随机变量的互信息(Mutual Information,简称MI)或转移信息(transinformation)是变量间相互依赖性的量度。通俗的来讲:互信息是一个随机变量包含另外一个随机变量的信息量,或者说如果已知一个变量,另外一个变量减少的信息量。

    互信息的公式为:
    互信息公式

    互信息有如下信息:
    1. I(X;Y)=0 当且仅当 X Y 为独立随机变量。从一个方向很容易看出:当 X Y 独立时, p(x,y)=p(x)p(y) ,因此: log(p(x,y)p(x)p(y))=log(1)=0
    2. 互信息是对偶的。也就是说 I(X;Y)=I(Y;X)
    互信息图解
    3. 互信息是非负的。从概念上来讲,互信息是已知一个变量,另外一个变量减少的信息量,减少的信息量最少为0(两个不相关),不可能减少为负吧。
    4. I(X;Y)=H(Y)H(Y|X) 。详细推导为:
    公式推导
    5. 需要注意的是,互信息也是只能处理离散的特征。如果连续的情况,需要先离散化。

    互信息python代码实现

    import sys
    import re
    import math
    def gen_info_data(x, y):
        '''
            基础统计
        '''
        feature_no = len(x[0])
    
        label_dict = {};
        label_no = 0;
        for i in y:
            if i not in label_dict:
                label_dict[i] = label_no
                label_no = label_no + 1
        info_data = [([0] * (feature_no+1)) for i in range(label_no + 1)]
    
        idx = 0;
        while idx < len(x):
            label = y[idx]
            y_idx = label_dict[label];
    
            features = x[idx];
            x_idx = 0;
            while x_idx < len(features):
                info_data[idx+1][0] = info_data[idx+1][0] + features[x_idx]
                info_data[idx+1][x_idx+1] = info_data[idx+1][x_idx+1] + features[x_idx]
    
                info_data[0][x_idx+1] = info_data[0][x_idx+1] + features[x_idx]
                info_data[0][0] = info_data[0][0] + features[x_idx]
                info_data
                x_idx = x_idx+1;
            idx = idx + 1
        return info_data
    
    def compute_mutual_information(x, y):
        if len(x) != len(y) or len(x) < 2:
            print >>sys.stderr, "feature is too less..."
    
        info_data = gen_info_data(x, y)
    
        mut_info = [0.0] * len(info_data[0]);
        ret_data = 1.0;
        x_idx = 1;
        y_idx = 1;
    
        total = info_data[0][0];
        while y_idx < len(info_data):
    
            x_idx = 1
            while x_idx < len(info_data[0]):
                mut_info_val = info_data[y_idx][x_idx]*1.0/total*math.log(1.0*info_data[y_idx][x_idx]*total/(info_data[y_idx][0]*info_data[0][x_idx]))/math.log(2);
                mut_info[0] = mut_info[0] + mut_info_val
    
                mut_info[x_idx] = mut_info[x_idx] + mut_info_val
                x_idx = x_idx + 1;
    
            y_idx = y_idx + 1;
    
        return mut_info;
    

    计算示例
    计算A班性别跟是否化妆的互信息:
    互信息计算示例

    总结

    本文主要介绍了线性相关系数、卡方检验、互信息三个概念。
    1. 线性相关系数,基于两个变量在线性的基础上,主要用来衡量两个变量的线性相关的程度,其它类型的相关性Pearson相 关 系 数就无法衡量了。
    2. 卡方检验基于两个样本会遵守特定的理论分配,用来检验两个样本or变量是否独立。计算也相对比较简单。能做大小比较,但是如果判断自变量与因变量是否相关,需要查卡方临界表。
    3. 互信息基于信息熵理论,可以作为变量间相互依赖性的量度,涉及log计算,计算稍微复杂些。后面两个方法都只能计算离散特征,如果是连续特征,需要先将特征离散化之后再进行计算。
    4. 特征选择时:卡方检验,偏向于选择出现次数较少的特征。因为是期望-观测值的平方再除以期望,互信息不会出现这个情况。因为互信息有乘以 p(x,y) 。从大多数实验来看,卡方跟互信息效果差不多,看具体的数据集而定。


    展开全文
  • python 计算 Pearson 线性相关系数

    千次阅读 2018-07-21 11:59:46
    1. 代码 import scipy from scipy.stats import pearsonr x = scipy.array([1, 2, 3, 4, 5]) y = scipy.array([2, 4, 6, 8, 9]) r_row, p_value = pearsonr(x, y) print r_row print p_value ...

    1. 代码

    import scipy
    from scipy.stats import pearsonr
    
    x = scipy.array([1, 2, 3, 4, 5])
    y = scipy.array([2, 4, 6, 8, 9])
    
    r_row, p_value = pearsonr(x, y)
    print r_row
    print p_value
    

    效果
    这里写图片描述

    展开全文
  • 简单线性相关系数 r及检验

    千次阅读 2017-08-17 00:30:00
    相关系数仅能反映两个变量间的线性相关关系 d、相关系数的取值范围  相关系数的取值 a、r 的取值范围:-1 b、r > 0表现正相关, r 表示负相关 c、r = 0...
  • double coefficient(double acuan[],double sample[],int start1,int start2,int m) { int Length=m; double sum_sam=0; double avg_sam=0; double sum_acu=0;... double avg_acu=0;... for(int i=start1,j=
  • 简单相关系数计算器

    2015-04-14 22:50:44
    在统计学中,皮尔逊积矩相关系数(英语:Pearson product-moment correlation coefficient,又称作 PPMCC或PCCs[1], 文章中常用r或Pearson's r表示)用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间...
  • 线性拟合可以寻求与一组散点走向趋势规律相适应的线型表达式方程,这个程序是基于matlab实现线性拟合和相关系数,有很高的参考价值
  • c# 拟合曲线 求相关系数R 线性拟合y=kx+b;多项式拟合
  • 在统计学中有三个可以衡量两个变量之间相关程度的指标:线性相关系数(linear correlation coefficient)、斯皮尔曼相关性系数(Spearman’s rank correlation coefficient)、肯德尔相关性系数(kendall ...
  • 皮尔森相关系数,又称积差相关系数、积矩相关系数,可以看做将两组数据首先做Z分数处理之后, 然后两组数据的乘积和除以样本数Z分数一般代表正态分布中, 数据偏离中心点的距离.等于变量减掉平均数再除以标准差。按照...
  • 线性相关相关系数

    千次阅读 2016-08-25 17:58:58
    是研究两个向量之间线性相关程度的量 相关系数的计算 r ( X , Y ) = ∑ n i = 1 x ′ i y ′ i n = ∑ n i = 1 x i − x ¯ s ( x ) y i − y ¯ s ( y ) n = c o v ( X , Y ) v a r ( Y ) ) ‾ ‾ ‾ ‾ ‾ ‾...
  • 线性关系和相关系数

    千次阅读 2019-01-08 02:48:47
    线性关系 定义 两个变量之间存在一次函数关系,就称它们之间存在线性关系。 即如果可以用一个二元一次方程来表达两个变量之间关系的话,这两个变量之间的关系称为线性关系,因而,二元一次方程也称为线性方程...
  • 皮尔逊积矩线性相关系数(Pearson's r)用于计算两组数组之间是否有线性关联,举个例子: a = pd.Series([1,2,3,4,5,6,7,8,9,10]) b = pd.Series([2,3,4,5,6,7,8,9,10,11]) 计算两组数据的线性相关性,就是,b...
  • (statistic)三种线性相关系数

    千次阅读 2014-04-29 22:54:33
    pearson线性相关系数: 假设shu
  • 回归 最早由英国科学家弗朗西斯高尔顿提出,生物学家,他发现一个现象,虽然有一个趋势“父母高,儿女也高;...一元线性回归 回归分析:用来建立方程模拟两个或者多个变量之间如何关联。 被预测的变量叫做因变量...
  • 皮尔逊Person相关系数

    千次阅读 2020-12-11 16:54:10
    二、总体皮尔逊Person相关系数 三、样本皮尔逊Person相关系数 四、相关性可视化 五、关于皮尔逊相关系数的一些理解误区 (一)容易犯错的点 (二)总结 六、对相关系数大小的解释 七、例题——计算皮尔逊相关...
  • 线性相关系数 CC: 其中,u为均值。即为:x 和 y 的方差,除以 x 的标准差与 y 的标准差之积,CC越大越相关。 1)如果 x 等于 y,由公式红色部分可知 CC = 1,最相关; 2)而当x 完全不等于 y,即 x ...
  • MATLAB程序分享MATLAB实现线性拟合和相关系数源程序代码-MATLAB实现线性拟合和相关系数 源程序代码.rar 程序代码见附件,拿资料请顺便顶个贴~~ 如果下载有问题,请加我 qq 1530497909,给你在线传
  • 最常用的相关系数有两种,皮尔逊相关系数和斯皮尔曼相关系数,在选取用何种相关系数时,需要根据不同的条件进行计算和分析,否则容易建模出错。 总体和样本 总体是指所要考虑对象的全部个体。我们通常需要求总体数据...
  • (3)计算相关系数并进行相关性检验; (4)计算 、 时y的预测值. 2.代码 #二元线性回归 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import numpy as np import s...
  • 为了更加准确地描述变量之间的线性相关程度,可以通过计算相关系统来进行相关分析。 在二元变量的相关分析过程中比较常用的有Pearson相关系数,Spearman秩相关系数和判定系数。 皮尔逊相关系数(Pearson Correlation...
  • 文章目录多重共线性检验-方差膨胀系数(VIF)1、原理:2、多重共线性:3、检验方法:方差膨胀系数(VIF):相关性检验:4、代码测试4.1 导入相关库4.2准备数据4.3计算膨胀因子4.4计算相关系数4.5分割测试集4.6模型...
  • python相关系数

    千次阅读 2018-11-08 10:25:00
    用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。 几组的点集,以及各个点集中和之间的相关系数。我们可以发现相关系数反映的是变量之间的线性关系和相关性的方向(第一排),而不是相关性的...
  • 【C++】 代码实现:计算相关系数

    千次阅读 2019-07-02 20:21:11
    代码实现:计算相关系数
  • 相关系数,或称线性相关系数、皮氏积矩相关系数(Pearson product-moment correlation coefficient, PPCC)等,是衡量两个随机变量之间线性相关程度的指标。它由卡尔·皮尔森(Karl Pearson)在1880年代提出,现已广泛地...
  • MATLAB实现线性拟合和相关系数 源程序代码
  • 简单相关系数:又叫相关系数或线性相关系数,一般用字母r 表示,用来度量两个变量间的线性关系。 复相关系数:又叫多重相关系数。复相关是指因变量与多个自变量之间的相关关系。例如,某种商品的季节性需求量与其...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,832
精华内容 25,532
关键字:

线性相关系数