【数模】相关性分析

声明:文章参考数学建模清风的网课编写。

相关系数

 通常提到相关系数并不过多强调的话指的都是person(皮尔逊)相关系数。person相关系数表现的是两组变量之间的线性相关程度

 给定两组数据 X : { X 1 , X 2 , . . . , X n } X:\left \{ X_{1},X_{2},...,X_{n} \right \} X:{X1,X2,...,Xn} Y : { Y 1 , Y 2 , . . . , Y n } Y:\left \{ Y_{1},Y_{2},...,Y_{n} \right \} Y:{Y1,Y2,...,Yn}是总体数据,那么:
 总体均值:
E ( X ) = ∑ i = 1 n X i n ,   E ( Y ) = ∑ i = 1 n Y i n E(X) = \frac{\sum_{i=1}^{n} X_{i}}{n} ,\ \ E(Y) = \frac{\sum_{i=1}^{n} Y_{i}}{n} E(X)=ni=1nXi  E(Y)=ni=1nYi
 总体协方差:
C o v ( X , Y ) = ∑ i = 1 n ( X i − E ( X ) ) ( Y i − E ( Y ) ) n Cov(X,Y) = \frac{\sum_{i=1}^{n} (X_{i} - E(X))(Y_{i} - E(Y))}{n} Cov(X,Y)=ni=1n(XiE(X))(YiE(Y))
 总体person相关系数:
ρ X Y = C o v ( X , Y ) σ X σ Y \rho _{XY} = \frac{Cov(X,Y)}{\sigma _{X}\sigma _{Y}} ρXY=σXσYCov(X,Y)
σ \sigma σ 是指标准差:
σ X = ∑ i = 1 n ( X i − E ( X ) ) 2 n ,     σ Y = ∑ i = 1 n ( Y i − E ( Y ) ) 2 n \sigma _{X} = \sqrt{\frac{\sum_{i=1}^{n} (X_{i} - E(X))^2}{n} } , \ \ \ \sigma _{Y} = \sqrt{\frac{\sum_{i=1}^{n} (Y_{i} - E(Y))^2}{n} } σX=ni=1n(XiE(X))2 ,   σY=ni=1n(YiE(Y))2
 可以证明, ∣ ρ X Y ∣ ≤ 1 |\rho _{XY}|\le 1 ρXY1,且当 Y = a X + b Y = aX +b Y=aX+b时, ρ X Y ∣ ≤ = { 1 , a > 0 − 1 , a < 0 。 \rho _{XY}|\le = \left\{\begin{matrix} 1, a > 0\\ -1, a < 0 \end{matrix}\right.。 ρXY≤={1,a>01,a<0

 样本均值:
X ˉ = ∑ i = 1 n X i n Y ˉ = ∑ i = 1 n Y i n \bar{X} = \frac{\sum_{i=1}^{n} X_{i}}{n} \\ \bar{Y} = \frac{\sum_{i=1}^{n} Y_{i}}{n} Xˉ=ni=1nXiYˉ=ni=1nYi
 样本协方差:
C o v ( X , Y ) = ∑ i = 1 n ( X i − X ˉ ) ( Y i − Y ˉ ) n − 1 Cov(X,Y) = \frac{\sum_{i=1}^{n} (X_{i} - \bar{X} )(Y_{i} - \bar{Y} )}{n-1} Cov(X,Y)=n1i=1n(XiXˉ)(YiYˉ)
 总体person相关系数:
r X Y = C o v ( X , Y ) S X S Y r _{XY} = \frac{Cov(X,Y)}{S _{X}S _{Y}} rXY=SXSYCov(X,Y)
σ \sigma σ 是指标准差:
S X = ∑ i = 1 n ( X i − E ( X ) ) 2 n − 1 ,     S Y = ∑ i = 1 n ( Y i − E ( Y ) ) 2 n − 1 S _{X} = \sqrt{\frac{\sum_{i=1}^{n} (X_{i} - E(X))^2}{n-1} } , \ \ \ S _{Y} = \sqrt{\frac{\sum_{i=1}^{n} (Y_{i} - E(Y))^2}{n-1} } SX=n1i=1n(XiE(X))2 ,   SY=n1i=1n(YiE(Y))2
 为什么样本协方差和样本方差的分母是n-1,因为此时的计算结果是无偏估计量。

皮尔逊相关系数使用误区

  1. 非线性相关也可能导致相关系数很大;
  2. 离群点对相关系数影响很大;
  3. 相关系数很大也不能说明两变量相关,有可能收到异常值影响;
  4. 相关系数为0不能说明两变量无相关性,也许存在更复杂的关系(如二次)。

 使用person相关系数应注意:

  1. 确定两变量是线性关系时,person相关系数才有意义;
  2. person相关系数绝对值很大或接近0不能说明相关性大小,甚至不能说明相关。可以作相关性检验前画散点图来初步判断是否有线性相关趋势。

假设检验

 假设检验基本步骤:

  • 确定原假设与备择假设(原假设与备择假设是互斥事件,二者概率和为1)。
  • 确定 α \alpha α即显著性水平(我们有多大概率拒绝原假设), α \alpha α又被称为犯第一类错误的概率,因为我们的出发点是“小概率事件在一次试验中基本上不会发生”,但小概率事件仍有可能发生。
  • 置信水平 β = 1 − α \beta = 1- \alpha β=1α,相信原假设成立的概率(一般是90%、95%或99%)。
  • 在原假设成立的条件下构造符合某一分布的统计量(统计量相当于我们为要检验量的一个函数不能包含其它随机变量)。
  • 将检验值带入我们构造的统计量中,得到 P P P值。 P P P值:根据统计量的大小和分布确定出检验值发生的概率。
  • 得出结论。如果 P P P值落在拒绝域中( P < α P < \alpha P<α)说明:对于一次检验发生了小概率事件,于是我们称在 β \beta β的置信水平上拒绝原假设;但如果 P P P值落在接受域中( P > α P > \alpha P>α)并不能说明任何问题(因为接受域是大概率事件,本来就应该发生不是吗),此时我们称在 β \beta β的置信水平上无法拒绝原假设。

 假设检验的基本思想是“小概率事件”原理,其统计推断方法是带有某种概率性质的反证法。小概率思想是指小概率事件在一次试验中基本上不会发生。反证法思想是先提出检验假设,再用适当的统计方法,利用小概率原理,确定假设是否成立。即为了检验一个假设H0是否正确,首先假定该假设H0正确,然后根据样本对假设H0做出接受或拒绝的决策。如果样本观察值导致了“小概率事件”发生,就应拒绝假设H0,否则应接受假设H0 。

一组随机变量相关性分析步骤

 假设有n个样本,p个指标(每一个指标都是一个随机变量),构成大小为n*p的样本矩阵x:
x = [ x 11 x 12 . . . x 1 p x 21 x 22 . . . x 2 p ⋮ ⋮ ⋱ ⋮ x n 1 x n 2 . . . x n p ] = [ x 1 , x 2 , … , x p ] x = \begin{bmatrix} x_{11}& x_{12}& ...& x_{1p}\\ x_{21}& x_{22}& ...& x_{2p}\\ \vdots & \vdots & \ddots & \vdots \\ x_{n1}& x_{n2}& ...& x_{np} \end{bmatrix} = \begin{bmatrix} x_{1},x_{2} , \dots ,x_{p} \end{bmatrix} x= x11x21xn1x12x22xn2.........x1px2pxnp =[x1,x2,,xp]

例如指标为:身高、体重、肺活量、50米跑、立定跳远、坐位体前屈时(下图只截取了部分数据):

在这里插入图片描述

注意:进行相关性分析之前必须要画散点图初步判断随机变量之间是否适合作线性相关分析。

绘制散点图初判相关性

 这里推荐使用SPSS进行多个随机变量两两之间散点图的绘制:

  1. 将数据导入SPSS:
    在这里插入图片描述
  2. 选择矩阵散点图:
    在这里插入图片描述
  3. 选择绘制变量:
    在这里插入图片描述
  4. 得到绘制效果:
    在这里插入图片描述
求出person系数并假设检验

 观察图中变量间的趋势可以发现大部分数据不能呈现出线性相关,我们先忽略这一点接着叙述相关性分析的步骤。使用matlab函数corrcoef()求出指标两两间的相关系数。
得到结果:

>> cor = corrcoef(A)
cor =

    1.0000    0.0665   -0.2177   -0.1920    0.0440    0.0951
    0.0665    1.0000    0.0954    0.0685    0.0279   -0.0161
   -0.2177    0.0954    1.0000    0.2898    0.0248   -0.0749
   -0.1920    0.0685    0.2898    1.0000   -0.0587   -0.0019
    0.0440    0.0279    0.0248   -0.0587    1.0000   -0.0174
    0.0951   -0.0161   -0.0749   -0.0019   -0.0174    1.0000

对结果进行初步解释(单元格ij表示第i行和第j列随机变量的相关性):
在这里插入图片描述
使用函数corrcoef()的重载版本可以一同求出 P P P值:

>> [cor, P] = corrcoef(A)

cor =

    1.0000    0.0665   -0.2177   -0.1920    0.0440    0.0951
    0.0665    1.0000    0.0954    0.0685    0.0279   -0.0161
   -0.2177    0.0954    1.0000    0.2898    0.0248   -0.0749
   -0.1920    0.0685    0.2898    1.0000   -0.0587   -0.0019
    0.0440    0.0279    0.0248   -0.0587    1.0000   -0.0174
    0.0951   -0.0161   -0.0749   -0.0019   -0.0174    1.0000


P =

    1.0000    0.1061    0.0000    0.0000    0.2859    0.0208
    0.1061    1.0000    0.0204    0.0960    0.4978    0.6963
    0.0000    0.0204    1.0000    0.0000    0.5469    0.0687
    0.0000    0.0960    0.0000    1.0000    0.1542    0.9637
    0.2859    0.4978    0.5469    0.1542    1.0000    0.6728
    0.0208    0.6963    0.0687    0.9637    0.6728    1.0000

 这里的 P P P值是基于以下几个条件求出的:

  1. 原假设:变量i和变量j不相关。
  2. 备择假设:变量i和变量j相关。
  3. 统计量的构造以及检验值(检验值 = 变量i和变量j的person系数)的带入已经由matlab封装并完成了。

 根据P值的取值范围我们可以说明:

  1. 变量之间是否显著相关:

    P P P值是否小于
    0.01在99%的置信水平上拒绝原假设(变量i和变量j显著相关)在99%的置信水平上无法拒绝原假设
    0.05在95%的置信水平上拒绝原假设(变量i和变量j显著相关)在95%的置信水平上无法拒绝原假设
    0.10在90%的置信水平上拒绝原假设(变量i和变量j显著相关)在90%的置信水平上无法拒绝原假设
  2. 标注person系数的显著程度(以SPSS标注为例(分析->相关->双变量)):
    在这里插入图片描述

正态分布检验

 我们使用matlab求出 P P P值是为了对person系数的显著性水平进行假设检验。但是person相关系数假设检验是有条件的:

  1. 实验数据通常假设是成对的来自于正态分布总体(求解 P P P值构造统计量是基于数据呈正态分布的假设的);
  2. 实验数据之间差距不能太大(person相关系数容易受异常值影响);
  3. 每组样本之间是独立抽样的(求解 P P P值构造统计量要用到)。

两种正态分布检验:

  • 雅克-贝拉检验(Jarque-Bera test)
    对于一个随机变量 X X X,假设偏度为 S S S,峰度为 k k k,那么我们可以构造 J B JB JB统计量:
    J B = n 6 [ s 2 + ( K − 3 ) 2 4 ] JB = \frac{n}{6} \left [ s^2 + \frac{(K - 3)^2}{4} \right ] JB=6n[s2+4(K3)2]
    可以证明,如果 X X X服从正态分布,那么在大样本情况下(n>30) J B − χ 2 ( 2 ) JB-\chi ^2(2) JBχ2(2)(自由度为2的卡方分布)。

    进行假设检验步骤如下:
     原假设:该变量服从于正态分布。备择假设:该变量不服从正态分布。然后计算检验值 J B ∗ JB^* JB代入并计算正态分布检验的 P P P值,并与 α \alpha α显著水平作比较。

    使用matlab进行正态假设检验:
    使用函数jbtest( X X X, α \alpha α)返回检验结果(结果为1表示拒绝原假设)和正态分布检验的 P P P值。其中 X X X表示一组随机变量是一个向量,注意不能是多组随机变量。 α \alpha α为显著性水平值。
    输入:

    [n, m] = size(A);
    
    h = zeros(1, m);
    p = zeros(1, m);
    
    for i = 1:m
    	% 正态分布检验
        [h(i), p(i)] = jbtest(A(:, i), 0.05);
    end
    
    disp(h);
    disp(p);
    

    输出:

         1     1     1     1     1     1
    
        0.0110    0.0010    0.0136    0.0010    0.0010    0.0393
    

    可以看到,正太检验全不通过(无法在95%的置信水平上拒绝原假设)。也因此,之前的假设检验工作作废了。

  • 夏皮洛-威尔克检验(Shapiro-wilk)
    夏皮洛-威尔克检验适用于小样本3<=n<=50)进行假设检验步骤如下:
     原假设:该变量服从于正态分布。备择假设:该变量不服从正态分布。然后计算正态分布检验的 P P P值(SPSS翻译为显著性),并与 α \alpha α显著水平作比较。

    使用SPSS进行正态假设检验:
    1.打开SPSS依次选择:
    在这里插入图片描述
    2 如图依次勾选:
    在这里插入图片描述

3.得到结果(最后一列即为 P P P值):
在这里插入图片描述

斯皮尔曼相关系数(Spearman)

 在介绍斯皮尔曼相关系数之前我们回顾以下person相关系数的使用条件。使用person相关系数前,首先需要作散点图初步判断是否线性相关;然后,求出person相关系数的值;最后,如果我们需要判断相关性是否显著需要先进行正态分布检验,后进行显著性检验。
 与person相关系数不同,斯皮尔曼相关系数使用条件要弱很多。
 定义: X X X Y Y Y为两组随机变量,其斯皮尔曼(等级)相关系数:
r i = 1 − 8 ∑ i = 1 n d i 2 n ( n 2 − 1 ) r_{i} = 1 - \frac{8\sum_{i=1}^{n} d_{i}^2}{n(n^2-1)} ri=1n(n21)8i=1ndi2
其中, d i d_{i} di X i X_{i} Xi Y i Y_{i} Yi之间的等级差。(一个数的等级,就是将一列数从小到大排列后,这个数所在位置。注意:求解斯皮尔曼系数,两个数相同时要将它们的位置取算术平均值。)

 可以证明, − 1 ≤ r i ≤ 1 -1\le r_{i}\le 1 1ri1
 使用matlab求Spearman相关系数:

  • corr( X X X, Y Y Y, ‘type’, ‘Spearman’)
    这里的 X X X Y Y Y必须为列向量,表示求两列随机变量的Spearman相关系数。

  • corr( X X X, ‘type’, ‘Spearman’)
    这里的 X X X是一个矩阵,每一列都是一个随机变量。表示求矩阵个列两两之间的Spearman相关系数。

    s = corr(A, 'type', 'Spearman')
    
    s =
    
        1.0000    0.0301   -0.2430   -0.1990    0.0624    0.1099
        0.0301    1.0000    0.1305    0.0898    0.0216   -0.0488
       -0.2430    0.1305    1.0000    0.2626    0.0219   -0.0801
       -0.1990    0.0898    0.2626    1.0000   -0.0910   -0.0029
        0.0624    0.0216    0.0219   -0.0910    1.0000   -0.0399
        0.1099   -0.0488   -0.0801   -0.0029   -0.0399    1.0000
    

    使用重载版本获得 P P P值:

    >> [s, p]= corr(A, 'type', 'Spearman')
    
    s =
    
        1.0000    0.0301   -0.2430   -0.1990    0.0624    0.1099
        0.0301    1.0000    0.1305    0.0898    0.0216   -0.0488
       -0.2430    0.1305    1.0000    0.2626    0.0219   -0.0801
       -0.1990    0.0898    0.2626    1.0000   -0.0910   -0.0029
        0.0624    0.0216    0.0219   -0.0910    1.0000   -0.0399
        0.1099   -0.0488   -0.0801   -0.0029   -0.0399    1.0000
    
    
    p =
    
        1.0000    0.4647    0.0000    0.0000    0.1295    0.0075
        0.4647    1.0000    0.0015    0.0290    0.5996    0.2362
        0.0000    0.0015    1.0000    0.0000    0.5944    0.0517
        0.0000    0.0290    0.0000    1.0000    0.0270    0.9436
        0.1295    0.5996    0.5944    0.0270    1.0000    0.3330
        0.0075    0.2362    0.0517    0.9436    0.3330    1.0000
    

    P P P值可以判断显著性水平同上(以SPSS标注为例):

相关系数的选择

  1. 连续数据,正态分布,线性关系,用pearson相关系数是最恰当;
  2. 不满足连续数据、正态分布、线性关系,就用spearman相关系数,不能用pearson相关系数;
  3. 两个定序数据之间也用spearman相关系数,不能用pearson相关系数。
    定序数据是指仅仅反映观测对象等级、顺序关系的数据,是由定序尺度计量形成的,表现为类别,可以进行排序,属于品质数据。
    例如:优、良、差;
     我们可以用1表示差、2表示良、3表示优,但请注意,用2除以1得出的2并不代表任何含义。定序数据最重要的意义代表了一组数据中的某种逻辑顺序。

 注意:斯皮尔曼相关系数的适用条件比皮尔逊相关系数要广,只要数据满足单调关系(例如线性函数、指数函数、对数函数等)就能够使用。

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
灰色相关性分析是一种用于处理少样本、非线性、非平稳数据的方法,常用于预测和分析。在Python中,可以使用`pygrey`库来进行灰色相关性分析。下面是几类数做灰色相关性分析的Python代码示例: 1. GM(1,1)模型: ```python import numpy as np from pygrey import GM # 输入原始数据 x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 4, 6, 8, 10]) # 创建GM(1,1)模型对象 model = GM() # 拟合数据 model.fit(x, y) # 预测未来数据 future_x = np.array([6, 7, 8]) future_y = model.predict(future_x) print("预测结果:", future_y) ``` 2. 灰色关联度分析: ```python import numpy as np from pygrey import GreyRelationalAnalysis # 输入原始数据 x = np.array([1, 2, 3, 4, 5]) y1 = np.array([2, 4, 6, 8, 10]) y2 = np.array([3, 5, 7, 9, 11]) # 创建灰色关联度分析对象 model = GreyRelationalAnalysis() # 计算关联度 relativity1 = model.calculate_relativity(x, y1) relativity2 = model.calculate_relativity(x, y2) print("关联度1:", relativity1) print("关联度2:", relativity2) ``` 3. 灰色马尔可夫模型: ```python import numpy as np from pygrey import GreyMarkovModel # 输入原始数据 x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 4, 6, 8, 10]) # 创建灰色马尔可夫模型对象 model = GreyMarkovModel() # 拟合数据 model.fit(x, y) # 预测未来数据 future_x = np.array([6, 7, 8]) future_y = model.predict(future_x) print("预测结果:", future_y) ``` 以上是几类数做灰色相关性分析的Python代码示例,你可以根据自己的数据和需求进行相应的调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_zhizi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值