时间序列预测分析方法(一):相关分析

        针对特定的预测问题,只是拥有数据还不够,想要从纷繁复杂的数据关系中挖掘出可用于预测的规律或模式,还得运用恰当的分析方法。比如聚类分析,恰当地选择聚类算法,可以按维度将数据适当地分群,根据各类的特征制订营销计划或决策,抑或是根据各类不冋规律建立起更有针对性的预测模型;还有常用的关联分析,可以从事物的历史数据中挖掘出变化规律有指导性地对未来进行预测,如此等等。本内容将分别介绍常用的分析方法,本节介绍相关分析。

目录

1. 自相关分析            2. 偏相关分析           3. 简单相关分析           4. 互相关分析           5. 典型相关分析

       相关关系是一种与函数关系相区别的非确定性关系,而相关分析就是研究事物或现象之间是否存在这种非确定性关系的统计方法。相关分析按处理问题的不同,通常可分为自相关分析、偏相关分析、简单相关分析、互相关分析及典型相关分析。其中:

  • 自相关分析、偏相关分析:适用于分析变量自身的规律;
  • 简单相关分析:通常可分析任意两个等长数列间的相关性;
  • 互相关分析:允许在一定的间隔下进行简单相关分析;
  • 典型相关分析:适用于分析两组变量的相关性。

变量与变量的关系通常有两种:

  • 函数关系:表示确定的非随机变量之间的关系,可以用表达式具体地定义。比如,位移与速度就是确定的函数关系。
  • 非确定性关系:表示非随机变量与随机变量的关系,也就是说当给定一个变量时,另一个变量是随机的,它不能由具体的表达式来定义。比如,身高和体重就无法用一个确定的函数关系来表达,但是根据经验,身高比较高的人,其体重也比较重,说明两者是相关关系

1. 自相关分析

        自相关是指同一时间序列在不同时刻取值的相关程度,假设有时间序列《时间序列预测分析方法(一):相关分析》,则在时刻《时间序列预测分析方法(一):相关分析》和滞后n阶《时间序列预测分析方法(一):相关分析》之间的相关即为n阶自相关,其定义如下: 

                            《时间序列预测分析方法(一):相关分析》

其中,函数f为计算相关系数的函数,可通过上式计算滞后n阶自相关系数的值。这里使用 airmiles时序数据来分析时间序列的自相关性,该数据集记录的是从1937年到1960年美国商业航空公司的飞机里程数据,如图1-1所示。 

                       《时间序列预测分析方法(一):相关分析》

                                                  图 1-1 从1937年到1960年美国商业航空公司的飞机里程趋势

在R语言中,可用acf函数分析时间序列的自相关性,该函数定义及参数说明如下表: 

《时间序列预测分析方法(一):相关分析》《时间序列预测分析方法(一):相关分析》

acf(airmiles,type='correlation',lag.max=10)

# airmiles:美国1937-1960年客运里程营收(实际售出机位乘以飞行哩数)

效果图如下: 

                   《时间序列预测分析方法(一):相关分析》

如图可见,滞后阶数为0时,相关系数为1,随着滞后阶数的增加,相关系数逐渐减弱,并趋于稳定。 

2. 偏相关分析 

       在分析当期与前n期指标的相关性时,1期到n-1期之间的指标会对相关性的分析有影响,于是将这些影响指标去掉后,再进行的相关分析叫作偏相关分析。

        由于自相关性分析的是时间序列《时间序列预测分析方法(一):相关分析》,在时刻《时间序列预测分析方法(一):相关分析》《时间序列预测分析方法(一):相关分析》之间取值的相关性程度,其值是未在限定《时间序列预测分析方法(一):相关分析》取值的情况下进行计算的,所得的自相关系数多少会受《时间序列预测分析方法(一):相关分析》取值的影响。为了更加真实地计算自相关关系数值,需要在限定其他值的情况下进行计算,这就是所谓的偏相关,其定义如下:

        《时间序列预测分析方法(一):相关分析》

      其中pf函数是求解《时间序列预测分析方法(一):相关分析》《时间序列预测分析方法(一):相关分析》在排除《时间序列预测分析方法(一):相关分析》因素影响的情况下的偏相关系数。同时,对《时间序列预测分析方法(一):相关分析》《时间序列预测分析方法(一):相关分析》在限定《时间序列预测分析方法(一):相关分析》的情况下,其偏相关系数定义如下: 

                                       《时间序列预测分析方法(一):相关分析》

     在R语言中,可直接使用pacf函数分析时间序列的偏相关性,该函数定义及参数说明如表3-1-2所示 :

        《时间序列预测分析方法(一):相关分析》 

pacf(airmiles,lag.max=10)

 效果图如下: 

 《时间序列预测分析方法(一):相关分析》

       如图所示,最小为1阶滞后,对应值为0.876,与对应的1阶自相关系数相等,随着滞后阶数的增加(大于2阶),偏相关系数一直较小并且稳定。

1阶滞后:相当于《时间序列预测分析方法(一):相关分析》《时间序列预测分析方法(一):相关分析》,因此其自相关系数和偏自相关系数相等。

3. 简单相关分析

       相关关系是一种非确定的关系,就好像身高与体重的关系一样,它们之间不能用一个固定的函关系来表示。而相关分析就是研究这种随机变量间相关关系的统计方法。此处,主要探讨不同特征对研究对象的相关性影响。常见进行相关分析的方法,主要有散点图和相关图。

3.1 散点图

       散点图就是数据点在直角坐标系上的分布图,通常分为散点图矩阵和三维散点图。其中散点矩阵是由变量两两组合由数据点分布图构成的矩阵,而三维散点图就是从所有变量中选择三个变量进行绘制,进一步在三维空间里观察数据的形态。

(1)散点图矩阵

       常用于绘制散点矩阵的方法是R语言中:

  • car包中的 scatterplotMatrix函数;
  • graphics包中的pais函数。

       这里以R语言自带的iris数据集为例,说明分析鸢尾花的四个指标的相关关系,绘制散点图矩阵,代码如下。

# 图3-1
pairs(~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width,data=iris, 
   main="Simple Scatterplot Matrix")

# 图3-2
library(car)
scatterplotMatrix(~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width|Species, 
       data=iris)

# 图3-3
library(rgl)
scatter3d(iris$Sepal.Length, iris$Petal.Length, iris$Petal.Width)

          《时间序列预测分析方法(一):相关分析》  

                                                                                      图 3-1

       如图3-1所示为所有变量的两两组合的散点图矩阵,每个散点图中呈现的是任意两变量的数据点,可通过数据点的分布,了解变量之间的相关性。此图中 Petal.Length与 Petal.Width对应的散点图比较接近线性,说明这两个变量间的相关性较强。

           《时间序列预测分析方法(一):相关分析》

                                                                                                 图 3-2

       如代码所示,通过“|”指定了分组的变量,这里使用鸢尾花的种类进行分组。如图3-2所示对角线上的图形表示各个变量在不同鸢尾花类型下的分布情况;其他图形分别用不同颜色为数据点着色,同时实线表示对数据点的拟合线,上下虚线表示浮动范围,直接表示线性拟合线。根据该图可以更进一步地知道不同类型鸢尾花各变量的相关关系,以及线性及非线性的变化规律

(2)三维散点图

        常用于绘制三维散点图的方法是:

  • car包的 scatter3d函数

        通过该函数绘制的图形,可以进行转动,以便切换不同角度,查看数据在三维空间的分布情况。通过使用 scatter3d函数绘制鸢尾花的 Sepal.Length、 Petal.Length、 Petal.Width这三个指标在三维空间的散点图,如下所示,该函数为三维空间中的点拟合了线性平面,通过旋转可以更直观地观察数据的分布规律。

                                         《时间序列预测分析方法(一):相关分析》

                                                                                            图 3-3

3.2 相关图

        所谓相关图是基于变量间的相关关系大小,通过可视化方式反应不同变量组合间相关关系的差异的图形。可以把相关图分为相关矩阵图、相关层次图。

(1)相关矩阵图

       R语言中,绘制相关矩阵图的包,主要有两个,分别为:

  • corrgram包中的 corrgram函数;

        panel:统一设置非对角的面板,

        lower.panel和 upper panel:分别设置相关矩阵下三角和上三角的面板形状,

        通常可以设置:panel.pie(饼图)、 panel.shade(阴影图)、 panel.ellipse(椭圆图)、panel.pts(散点图)

library(corrgram)

#1、设置排序处理
corrgram(mtcars,order=TRUE)

#2、设置上下三角面板形状
corrgram(mtcars,order=TRUE,lower.panel=panel.shade,upper.panel=panel.pie)

#3、只显示下三角部分
corrgram(mtcars,order=TRUE,lower.panel=panel.shade,upper.panel=NULL)

#4、调整面板颜色
corrgram(mtcars,order=TRUE,lower.panel=panel.shade,upper.panel=panel.pie,
         col.regions=colorRampPalette(c("darkgoldenrod4","burlywood1","white",
         "darkkhaki","darkgreen")))

 《时间序列预测分析方法(一):相关分析》《时间序列预测分析方法(一):相关分析》

《时间序列预测分析方法(一):相关分析》《时间序列预测分析方法(一):相关分析》

                                                                图 3-4:以上程序1、2、3、4效果图

  • complot包中的 complot函数

         method:可以取7个值,分别为 circle(圆形,默认) 、square(方形) 、ellipse(椭圆)、number(数字)、pie(饼图) 、shade(阴影) 、color(热力图)。

        type:用来设置相关矩阵图的显示区域,通常取full全部,默认)upper(上三角)、lower(下三角)

        col:可通过 colorRampPalette函数向col参数赋值来设置颜色

        order:用来指定相关系数变量的排序方式,通常可取 original(原始顺序,默认),AOE(特征向量的角顺序,FPC(第一主成分的顺序), hclust(层次聚类的顺序)以及 alphabet(字母表顺序)

library(corrplot)

#1、设置method=color绘制热力矩阵图
corrplot(cor(mtcars), method="color", order = "AOE",tl.col="black",tl.srt=45,
         addCoef.col="black",col=colorRampPalette(c("#7F0000","red","#FF7F00",
         "yellow","white", "cyan", "#007FFF", "blue","#00007F"))(20))

#2、绘制上下三角及不同色彩的相关矩阵图
library(RColorBrewer)
par(mfrow=c(2,2))
corrplot(cor(mtcars),type="lower")
corrplot(cor(mtcars),type="lower",order="hclust", col=brewer.pal(n=8,name="RdYlBu"))
corrplot(cor(mtcars),type="upper",order="AOE", col=c("black","white"),bg="lightblue")
corrplot(cor(mtcars),type="upper",order="FPC", col=brewer.pal(n=8, name="PuOr"))
par(mfrow=c(1,1))

《时间序列预测分析方法(一):相关分析》    《时间序列预测分析方法(一):相关分析》

                                                                     图 3-5:以上程序1、2效果图 

(2)相关层次图

      层次图,通过计算样本间的距离来判断各样本是否属于同一类。通过将相关系数转化为距离度量,进行系统聚类,旨在分析各变量的相关关系及组合影响情况。通常有四种方法将相关系数转化为相异性度量d

 使用mtcars数据集,进行系统聚类,如下: 方式一:hclust() 

  • 《时间序列预测分析方法(一):相关分析》
  • 《时间序列预测分析方法(一):相关分析》
  • 《时间序列预测分析方法(一):相关分析》
  • 《时间序列预测分析方法(一):相关分析》
d<-sqrt(1-cor(mtcars)^2)
hc<-hclust(as.dist(d))
plot(hc)
rect.hclust(hc,k=3)  # 添加聚类分类矩形,如分为3类

 效果如下图所示: 

                       《时间序列预测分析方法(一):相关分析》

方式二:pvclust(),通过p值来评估层次聚类的不确定性,表明了影响显著的聚类,显著的类越多,效果越好。

参数:method.dist() 指定用于计算距离的方法,设定为correlation时,按 《时间序列预测分析方法(一):相关分析》 计算;设定为abscor时,按 《时间序列预测分析方法(一):相关分析》 计算。

library(pvclust)
cluster.bootstrap <- pvclust(mtcars, nboot=1000, method.dist="correlation")
plot(cluster.bootstrap)
pvrect(cluster.bootstrap)  # 添加聚类分类矩形

 效果如下图所示:

                     《时间序列预测分析方法(一):相关分析》

  • AU值:Approxiamtely Unbiased,通过多尺度自助重抽样法计算而来;
  • BP值:Bootstrap Probability,通过普通自助重抽样法计算而来 

4. 互相关分析

      与自相关不同,互相关是指两个时间序列在做任意两个不同时刻的相关程度,假设有时间序列《时间序列预测分析方法(一):相关分析》《时间序列预测分析方法(一):相关分析》,则X在时刻t和y在时刻t+n之间的相关即为n阶互相关,其定义如下:

                          《时间序列预测分析方法(一):相关分析》

        其中函数∫为计算相关系数的函数,可通过上式计算滞后n阶互相关系数的值。

        使用 airmiles和 Lakehuron数据集,来说明互相关分析的方法。其中 airmiles数据集记录了从1937年到1960年美国商业航空公司每年的乘客里程数据,而 Lakehuron数据集记录了从1875年到1972年休伦湖每年的湖平面的测量数据。将它们的时间限制在1937年到1960年,并绘制各自的时间序列曲线如图4-1所示。 

                   《时间序列预测分析方法(一):相关分析》              

                      《时间序列预测分析方法(一):相关分析》

                                                                                      图 4-1 

在R语言中,可直接使用ccf函数分析时间序列的互相关性,该函数定义及参数说明如表3-1-3所示:

        《时间序列预测分析方法(一):相关分析》

       《时间序列预测分析方法(一):相关分析》 

plot(airmiles)
plot(LakeHuron,xlim=c(1937,1960))

ccf(airmiles, ts(LakeHuron, start = 1937, end = 1960), type="correlation")

结果如下: 

                     《时间序列预测分析方法(一):相关分析》

        效果如图所示,当没有延迟(即Lag=0)时,互相关系数取得最小,将近-0.8,两个时间序列大致上呈负相关关系。而当延迟10阶时,两个时间序列互相关系数最大,且为弱正相关。可通过互相关性的分析,构建用于预测的合适指标。 

5. 典型相关分析

        典型相关是指两组变量间的相关关系,当然,它不是指对两组变量进行两两组合的简单相关,而是反映两组变量作为两个整体之间的相关性。所以典型相关的问题就是如何构建综合指标使其相关性最大。常见的做法是:

        从两组变量中提取一对线性组合,使其相关性最大;然后,从剩余的且与前面不相关的线性组合中再提取一对,使其具有最大的相关性,这样依次进行下去。所提取的线性组合就是典型变量,两组典型变量对应的相关系数就是典型相关系数。

        R语言程序包 stats中的 cancor函数,可以直接求解两个数值矩阵的典型相关系数,它的定义及参数说明如表3-1-4所示。

             《时间序列预测分析方法(一):相关分析》 

         现使用iris数据集,分别将第1、2列和3、4列转换成数值矩阵,使用 cancor函数求解典型相关系数,代码如下。

x<-as.matrix(iris[,1:2])
y<-as.matrix(iris[,3:4])
cancor(x,y)

  结果如下: 

                                 《时间序列预测分析方法(一):相关分析》

       由结果可知,典型相关系数有两个,分别是0.9409690和0.1239369,说明第一组典型变量的相关性很强,第二组典型变量的相关性很弱。这种情况,通常第一个典型相关系数用于分析。

       xcof和ycof分别表示矩阵x和y中典型变量与原变量对应的系数矩阵,可通过标准化的数据矩阵进行乘法运算得到典型变量。

 

    原文作者:满腹的小不甘_静静
    原文地址: https://blog.csdn.net/qq_27586341/article/details/92786669
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞