精华内容
下载资源
问答
  • Jupyter中的时间序列预处理工作室:Jupyter笔记本中的时间序列数据预处理Studio
  • 时间序列分析:数据预处理

    千次阅读 2020-06-03 19:17:22
    时间序列分析:数据预处理步骤引言:什么是时间序列分析一.平稳时间序列1.什么是平稳时间序列2.平稳时间序列的意义3.时间序列的特征统计量二.时间序列的平稳性检验1.导入数据(以分析某公司2000年--2003年每月销售...

    步骤

    引言:什么是时间序列分析

    时间序列分析法,就是将经济发展、购买力大小、销售变化等同一变数的一组观察值,按时间顺序加以排列,构成统计的时间序列,然后运用一定的数字方法使其向外延伸,预计市场未来的发展变化趋势,确定市场预测值。时间序列分析法的主要特点,是以时间的推移研究来预测市场需求趋势,不受其他外在因素的影响。不过,在遇到外界发生较大变化,如国家政策发生变化时,根据过去已发生的数据进行预测,往往会有较大的偏差。

    一.平稳时间序列

    1.什么是平稳时间序列

    时间序列是指将某种现象某一个统计指标在不同时间上的各个数值,按时间先后顺序排列而形成的序列。平稳时间序列粗略地讲,一个时间序列,如果均值没有系统的变化(无趋势)、方差没有系统变化,且严格消除了周期性变化,就称之是平稳的。

    2.平稳时间序列的意义

    归根结底,我们分析时间序列数据是希望能捕捉到数据当中的规律,基于规律,我们可以做预测。因此平稳,可以理解为这个规律是不随时间变化的,基于此,我们后面的分析和预测才有意义。

    3.时间序列的特征统计量

    在这里插入图片描述

    二.时间序列的平稳性检验

    1.导入数据(以分析某公司2000年–2003年每月销售数据为例)

    在R中输入一下命令

    sale = read.table("/home/ddy/桌面/five.txt",header=T,sep = '\t')
    head(sale)
    

    得到结果如下:
    在这里插入图片描述
    销售量数据的序列为:
    在这里插入图片描述

    2.时序图检验

    销售量数据的序列的时序图为:

    plot(sale_volume,main = "2000-2003年每月销售量",col = 8)
    

    在这里插入图片描述
    由时序图可得出该公司每月的销售数据以年为周期呈现规则的周期性,因此该公司每月的销售数据序列一定不是平稳序列。

    3.自相关检验

    销售量数据的序列的自相关图为:

    > acf(sale_volume)
    

    在这里插入图片描述
    在自相关图中,我们发现图中显示出明显的对称性,这是具有单调趋势的非平稳序列的一种典型的自相关图形式,即认为该序列为非平稳序列。

    4.时序图和自相关 图的注意事项

    无论是时序图还是自相关 图,使用它们作为检验方法时都具有较强的主观性,没有引入客观的统计量。因此,时序图与 自相关 图仅能用来排除非平稳时序,不能用来判断一个时序是否是平稳时序!即描述性检验方法仅仅是为计量性检验方法作一个初步筛选,如果时序没有通过描述性检验方法,就不需要进行计量性检验了;而即使时序通过了描述性检验方法,仍需要进行计量性检验来进一步确认时序为平稳时序。

    三.纯随机性检验

    1.白噪声序列的性质

    白噪声序列,是指白噪声过程的样本实称,简称白噪声。白噪声序列的特点表现在任何两个时点的随机变量都不相关,序列中没有任何可以利用的动态规律,因此不能用历史数据对未来进行预测和推断。
    白噪声序列的自相关函数为0。白噪声是平稳时间序列中的一个极端情况,具有十分广泛的应用。由于前后时点上的值不相关,白噪声序列可以作为新息序列,即t时刻的白噪声值εt与之前的白噪声序列{εt-1,εt-2,…}不相关,可以看做t-1到t之间进入系统的新信息。下图给出的是一个白噪声序列的折线图。
    在这里插入图片描述

    2.纯随机性检验

    (1)检验原理

    Barlett定理:如果一个时间序列是纯随机的,得到一个观察期数为n的观察序列,那么该序列的延迟非零期的样本自相关系数将近似服从均值为0,方差为序列观察期数倒数的正态分布。
    即是:
    在这里插入图片描述

    (2)检验假设条件

    原假设:延迟期数小于或等于m期的序列值之间相互独立

    在这里插入图片描述

    备择假设:延迟期数小于或等于m期的序列值之间有相关性
    在这里插入图片描述

    (3)检验统计量

    Q统计量:
    在这里插入图片描述
    LB统计量:
    在这里插入图片描述

    (4)检验结果分析

    在这里插入图片描述
    根据检验结果我们可以得出,P值都小于显著性水平0.05。因此,我们拒绝序列纯随机的原假设,我们可以认为该公司每月的销售数据序列变动不属于随机变动,这说明我们可以根据历史信息来预测未来年份的该公司每月的销售数据以及其他统计分析。

    展开全文
  • 二、时间序列预处理

    万次阅读 2018-06-11 11:28:29
    一般情况下,拿到一个观察值序列之后,首先要对它的平稳性和纯随机性进行检验,这两个重要的检验称为序列预处理。根据检验的结果可以将序列分为不同的类型,对不同类型的序列我们会采用不同的分析方法。 一、平稳...

    一般情况下,拿到一个观察值序列之后,首先要对它的平稳性纯随机性进行检验,这两个重要的检验称为序列的预处理。根据检验的结果可以将序列分为不同的类型,对不同类型的序列我们会采用不同的分析方法。

    一、平稳性检验

    1、特征统计量

    (1)概率分布

              数理统计的基础知识告诉我们分布函数或者密度函数能够完整地描述一个随机变量的统计特征。同样,一个堆积变量族{Xt} 的统计特征也完全由它们的联合分布函数或联合密度函数决定。

               当由于在实际应用中,要想得到序列的联合概率分布几乎是不可能的,而且联合概率分布通常涉及非常复杂的数学运算,这些原因导致我们很少直接使用联合概率分布进行时间序列分析。

    (2)特征统计量

             一个更简单的、更实用的描述时间序列统计特征的方法是研究该序列的低阶矩,特别是均值、方差、自协方差和自相关系数,它们也被称之为特征统计量。  

            尽管这些特征统计量不能描述随机序列全部的统计性质,但由于它们概率意义明显,易于计算,而且往往能代表随机序列的主要概率特征,所以我们对时间序列进行分析,主要就是通过分析这些特征量的统计特性,推断出随机序列的性质。 
    1.均值 
    2.方差 
    3.自协方差函数(autocovariance function)和自相关系数(autocorrelation coefficients)

    (3)自协方差函数与协方差函数的区别

            通常的协方差函数和自相关系数度量的是两个不同事件彼此之间的相互影响程度,而协方差函数和自相关系数度量的是同一事件在两个不同时期之间的相关程度,形象地讲就是度量自己过去的行为对自己现在的影响。

    2.平稳时间序列的定义 

       根据限制条件的严格程度,分为严平稳时间序列和宽平稳时间序列 

    (1)严平稳(strictly stationary)

             一种条件比较苛刻的平稳性定义,它认为只有当序列所有的统计性质都不会随着时间的推移而发生变化时,该序列才被认为平稳。随机变量族的统计性质由它们的联合概率分布族决定 。
            在实际中,要想获得随机序列的联合分布式一件非常困难的事,所以严平稳时间序列通过只有理论意义,在实践中更多的是条件比较宽松的平稳时间序列。

    (2)宽平稳(week stationary)

          使用序列的特征统计量来定义一种平稳性。它认为序列的统计性质主要由它的低阶矩决定,所以只要保证序列低阶平稳(二阶),就能保证序列的主要性质近似稳定。 

    在实际应用中,研究中最多的是宽平稳随机序列,以后见到平稳随机序列,如果不加特殊注明,指的都是宽平稳随机序列。如果序列不满足平稳条件,就称为非平稳序列。

            要证明某个随机过程是否是宽平稳过程(广义平稳过程)就必须的满足以上定义中的三个条件:

    (1)E[X(t)]=μ(常数)

    (2)E[X(t) X(t + h)]= γ( h ) ;(自协方差函数只与时间间隔有关,与起始点无关)

    (3)E[X2(t)< +∞ 。

          严平稳比宽平稳条件严格。严平稳是对序列联合分布的要求,以保证序列所有的统计特征都相同;而宽平稳只要求序列二阶平稳,对于高于二阶的矩没有任何要求。所以通常情况下,严平稳序列也满足宽平稳条件,而宽平稳序列不能反推平稳成立。

            这个不是绝对的,两种情况都有特例:

             比如服从可惜柯西分布的严平稳序列就不是宽平稳序列,因为它不存在一、二阶矩,所以无法验证它二阶平稳。严格地讲,只有存在二阶矩的严平稳序列才能保证它一定也是宽平稳序列。

    3.平稳时间序列的统计性质

    (1)常数均值

    (2)自协方差函数和自相关系数只依赖于时间的平移长度而与时间的起始点无关

    4.平稳性的检验

          一种是根据时序图和自相关图显示的特征做出判断的图检验方法;一种是构造检验统计量进行假设检验的方法。 图检验是一种操作简便,运用广泛的平稳性判别方法,它的缺点是判别结论带有很强的主观色彩。所以最好能用统计检验的方法加以辅助判断。目前最常用的平稳性检验方法是单位根检验(unit root test)。 

    (1)时序图检验 

    根据平稳时间序列均值、方差Wie常数的性质,平稳时间序列的时序图应该是显示出该数列始终在一个常数值附近随机波动,而且波动的范围有界的特点。

     

     

    (2)自相关图检验

           自相关图就是一个平面二维坐标垂线图,一个坐标轴表示延迟时期数,另一个坐标轴表示自相关系数,通过以垂线表示自相关系数的大小。

           平稳时间序列通常具有短期相关性,该性质使用自相关系数来描述就是随着延迟期数k的增加,平稳时间序列的自相关系数ρ会很快地衰减为0;反之,非平稳序列的自相关系数ρ衰减向0的速度通常会比较慢,这就是利用自相关图进行平稳性判断的标准。

    二、纯随机性检验

         当拿到一个观察值序列之后,首先是判断它的平稳性,通过平稳性检验,序列可以分为平稳序列和非平稳序列两大类。

          对于非平稳序列,由于它不具有二阶矩平稳的性质,所以对它的统计分析要周折一些,通常要进行进一步的检验、变换或处理之后,才能确定适当的拟合模型。 
           如果序列平稳,情况就简单多了,我们有一套非常成熟的平稳序列建模方法。但是,并不是所有的平稳序列都值得建模。只有那些序列值之间具有密切的相关关系,历史数据对未来的发展有一定影响的序列,才值得我们花时间去挖掘历史数据中的有效信息,用来预测序列未来的发展。 
            如果序列值彼此之间的任何相关性,那就意味着该序列是一个没有记忆的序列,过去的行为对将来的发展没有任何的影响,这种序列我们称之为纯随机序列。从统计分析的角度而言,纯随机序列是没有任何分析价值的序列。 

    1、纯随机性检验

            纯随机性检验也称为白噪声检验,是专门用来检验序列是否为随机序列的一种方法。如果一个序列是纯随机序列,那么它的序列值之间应该是没有任何相关关系。

     

    2、假设条件

    由于序列之间的变异性是绝对的,而相关性是偶然的,所以假设条件如下确定:

    • 原假设:延迟期数小于或等于m期的序列值之间相互独立。
    • 备选假设:延迟期数小于或等于m期的序列值之间有相关性。

    3、检验统计量

    (1)Q统计量

    Box和Pierce推导出了Q统计量

    根据正态分布和卡方分布之间的关系,我们很容易推导出Q统计量近似服从自由度为m的卡方分布:

     

    当Q统计量大于卡方分布的分位点,或者统计量的P值小于a时候,可以以1-a的置信水平拒绝原假设,认为该序列为非白噪声序列,否则,接受原假设,认为序列为纯随序列。

    (2)LB统计量

    在实际应用中人们发现Q统计量在大样本长夜(n很大的场合)检验效果很好,但是在小样本场合就不太精确,为了弥补这一缺陷,Box和Ljong又推导出LB统计量

     

    Box和Ljung证明LB统计量同样近似的服从自由度为m的卡方分布。
    实际上LB统计量就是Box和Pierce的Q统计量的修正,所以人们习惯上吧他们统称为Q统计量,分别纪委QNP和QLB统计量,在各种检验场合普遍采用的Q统计量通常指的就是LB统计量。

    注意:一般情况下我们只检验前6期和前12期的Q统计量和LB统计量就可以直接判断该序列是否为白噪声序列。这是因为,

     1、平稳序列通常具有短期相关性,如果序列之间存在明显的相关关系,通常指存在于延迟时期比较短的序列值之间,所以,如果一个平稳序列的短期延迟值之间不存在显著的相关关系,通常长期之间就更不会存在显著的相关关系。

    2、假如一个平稳序列显示出短期显著的短期相关性,那么该序列就一定不是白噪声序列,我们就可以继续对该序列进行相关性分析。

    展开全文
  • 时间序列预测(一)—— 数据预处理

    万次阅读 多人点赞 2019-05-20 15:20:56
    时间序列预测(一)—— 数据预处理   最近在做时间序列的预测问题,这里就稍微总结回顾一下,便于以后查阅,也希望能给大家提供到帮助,有什么问题欢迎多多交流。   这是一个系列的文章,主要从代码的角度分析...

    时间序列预测(一)—— 数据预处理

    欢迎大家来我的个人博客网站观看原文:https://xkw168.github.io/2019/05/20/时间序列预测-一-数据预处理.html

      最近在做时间序列的预测问题,这里就稍微总结回顾一下,便于以后查阅,也希望能给大家提供到帮助,有什么问题欢迎多多交流。
      这是一个系列的文章,主要从代码的角度分析问题(争取做到代码片段的随用随取),不涉及太多的模型原理(我会尽可能讲一下自己的理解),本系列文章包含了数据预处理和基本时间序列分析预测模型:

    (一)数据预处理

    (二)AR模型(自回归模型)

    (三)Xgboost模型

    (四)LSTM模型

    (五)Prophet模型(自回归模型)


    数据预处理(pre-processing)

    数据预处理在数据分析中占据了重要的地位,这里主要介绍几种常见的预处理方法

    1. 归一化(反归一化)

      归一化可以说是数据预处理里面最常用的方法之一了,在模型训练中不同的数据取值范围假如相差过大很容易造成模型错误的分配权重,所以很多时候归一化必不可少。

    def normalize(data, method="MinMax", feature_range=(0, 1)):
        """
        normalize the data
        :param data: list of data
        :param method: support MinMax scaler or Z-Score scaler
        :param feature_range: use in MinMax scaler
        :return: normalized data(list), scaler
        """
        data = np.array(data)
        if len(data.shape) == 1 or data.shape[1] != 1:
            # reshape(-1, 1) --> reshape to a one column n rows matrix(-1 means not sure how many row)
            data = data.reshape(-1, 1)
        if method == "MinMax":
            scaler = MinMaxScaler(feature_range=feature_range)
        elif method == "Z-Score":
            scaler = StandardScaler()
        else:
            raise ValueError("only support MinMax scaler and Z-Score scaler")
        scaler.fit(data)
        # scaler transform apply to each column respectively
        # (which means that if we want to transform a 1-D data, we must reshape it to n x 1 matrix)
        return scaler.transform(data).reshape(-1), scaler
    
    
    def denormalize(data, scaler):
        """
        denormalize data by scaler
        :param data:
        :param scaler:
        :return: denormalized data
        """
        data = np.array(data)
        if len(data.shape) == 1 or data.shape[1] != 1:
            data = data.reshape(-1, 1)
        # max, min, mean, variance are all store in scaler, so we need it to perform inverse transform
        return scaler.inverse_transform(data).reshape(-1)
    

    2.重采样

      有时候原始数据的采样频率可能太高,导致噪声比较大,重采样可以在一定程度上降低噪声,同时数据量较大的时候还可以起到减小数据量提高模型的迭代速度。

    def resample(data, period="W"):
        """
        resample the original data to reduce noise
        :param data:
        :param period: the period of data e.g. B - business day, D - calendar day, W - weekly, Y - yearly etc.
        (reference: pandas DateOffset Objects'http://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html')
        :return:
        """
        data = data.set_index(pd.DatetimeIndex(data['ds']))
        return data.resample(period, label="right").mean().reset_index()
    

    3.数据划分

      用于将原始数据划分为训练机,测试集和验证集,可以自行调整分配权重。

    def split_data(observed_data, split_ratio=(8, 2, 1)):
        """
        split the observed data into train-evaluation-test three part
        :param observed_data:
        :param split_ratio: relative proportion among train,evaluation,test
        :return: train, evaluation, test data
        """
        total = split_ratio[0] + split_ratio[1] + split_ratio[2]
        length = len(observed_data)
        train_cnt = int((split_ratio[0] / total) * length)
        test_cnt = int((split_ratio[2] / total) * length)
        return observed_data[:train_cnt], observed_data[train_cnt:-test_cnt], observed_data[-test_cnt:]
    

    4.各种滤波(中值,均值,巴特沃斯)

      这个主要用于信号处理,一般的数据分析可能用的不多。

    def median_filter(datas, length=3):
        """
        median filter, length must be odd number
        :param datas:
        :param length:
        :return:
        """
        return signal.medfilt(datas, length).tolist()
    
    
    def average_filter(datas, length=3):
        """
        average filter, length should not greater than 5
        :param datas:
        :param length:
        :return:
        """
        if isinstance(datas, np.ndarray):
            datas = datas.tolist()
        updated = []
        if length == 2:
            for d1, d2 in zip(datas[:-1], datas[1:]):
                updated.append(np.average([d1, d2]))
        elif length == 3:
            for d1, d2, d3 in zip(datas[:-2], datas[1:-1], datas[2:]):
                updated.append(np.average([d1, d2, d3]))
        elif length == 4:
            for d1, d2, d3, d4 in zip(datas[:-3], datas[1:-2], datas[2:-1], datas[3:]):
                updated.append(np.average([d1, d2, d3, d4]))
        else:
            for d1, d2, d3, d4, d5 in zip(datas[:-4], datas[1:-3], datas[2:-2], datas[3:-1], datas[4:]):
                updated.append(np.average([d1, d2, d3, d4, d5]))
        return updated
    
    
    # noinspection PyTupleAssignmentBalance
    def butter_filter(datas, hc=0.1):
        b, a = signal.butter(5, hc, btype="low")
        return signal.filtfilt(b, a, datas)
    

    5.数据可视化

      数据可视化也是预处理中很重要的一个手段,可以用于分析数据的各项属性。

    • 折线图:用于分析数据的变化趋势
    • 箱型图:用于分析数据异常值
    • 正态分布图:用于分析数据是否符合正态分布
    • 散点图:用于分析数据的分布情况(线性度,聚合度等)
    • 热力图:用于分析多组数据间的相关系数(注意,一定是多组数据)
    • 柱状图:用于分析数据的相对大小/占比
    • 饼状图:用于分析数据的占比
    def plot_data(y_val, x_val=None, legend="", x_label="", y_label="", title="", file_name=""):
        if x_val is None:
            x_val = range(len(y_val))
        plt.figure()
        plt.plot(x_val, y_val, label=legend)
        if legend:
            # show legend(line label)
            plt.legend()
        # show x label
        plt.xlabel(x_label)
        # show y label
        plt.ylabel(y_label)
        # show title
        plt.title(title)
        if file_name:
            plt.savefig('./result/%s.png' % file_name, bbox_inches='tight')
        plt.tight_layout()
        plt.show()
    
    
    def box_plot(data, file_name=""):
        """
        box plot —— use to see the distribution of the datas
        :param data: list of data
        :param file_name: file name of the plot figure
        :return: None
        """
        plt.boxplot(np.array(data), sym="o")
        if file_name:
            plt.savefig('./result/%s.png' % file_name, bbox_inches='tight')
        plt.show()
    
    
    def distribution_plot(data, file_name=""):
        """
        distribution plot —— use to see the distribution of the data
        :param data: list of data
        :param file_name: file name of the plot figure
        :return: None
        """
        plt.figure(figsize=(8, 5))
        sns.set_style('whitegrid')
        sns.distplot(np.array(data), rug=True, color='b')
        plt.title("distribution")
        if file_name:
            plt.savefig("./result/%s.png" % file_name, bbox_inches='tight')
        plt.show()
    
    
    def scatter_plot(y_val, x_val=None, x_label="", y_label="", title="", file_name=""):
        """
        scatter plot —— use to see the distribution of the data
        :param y_val: y value
        :param x_val: x value, if None will use 0 ~ range(len(y_val))
        :param x_label:
        :param y_label:
        :param title:
        :param file_name: file name of the plot figure
        :return: None
        """
        if x_val is None:
            x_val = range(len(y_val))
        plt.scatter(x_val, y_val, marker='o', color='black', s=10)
        plt.xlabel(x_label)
        plt.ylabel(y_label)
        plt.title(title)
        if file_name:
            plt.savefig('./result/%s.png' % file_name, bbox_inches='tight')
        plt.show()
    
    
    def heatmap(data, file_name="", method="pearson"):
        """
        draw the heat map of sets of data
        :param data: DataFrame format
        :param file_name:
        :param method: method used to calculate the correlation
                       pearson - range -1 ~ 1(only two variable in perfect linear relation, it will be ±1)
                       spearman - range -1 ~ 1(it will be ±1 when
                       the relation between two variable can be described by a monotonic function)
        reference
        < 0.1 : no relation
        0.10 ~ 0.29: weak relation
        0.30 ~ 0.49: medium relation
        > 0.5: strong relation
        :return: None
        """
        sns.heatmap(
            data.corr(method=method),
            xticklabels=data.corr(method=method).columns,
            yticklabels=data.corr(method=method).columns,
            annot=True, annot_kws={'weight': 'bold'},
            vmin=-0.5, vmax=1, cmap="YlGnBu"
        )
        plt.tight_layout()
        if file_name:
            file_name = file_name.split(".")[0]
            plt.savefig("./result/heatmap/%s.png" % file_name)
        plt.show()
        plt.close()
    
    
    def bar_plot(y_val, x_val=None, x_label=None, horizontal=False, file_name=""):
        if x_val is None:
            x_val = range(len(y_val))
        if x_label is None:
            x_label = x_val
        if horizontal:
            plt.barh(y=x_val, width=y_val, tick_label=x_label)
            for a, b in zip(y_val, x_val):
                plt.text(a + 0.01, b, '%.0f' % a, ha='left', va='center', fontsize=11)
        else:
            plt.bar(x=x_val, height=y_val, tick_label=x_label)
            for a, b in zip(x_val, y_val):
                plt.text(a, b + 0.01, '%.0f' % b, ha='center', va='bottom', fontsize=11)
        plt.tight_layout()
        plt.savefig('./result/%s.png' % file_name, bbox_inches='tight')
        # if file_name:
        #     plt.savefig('./result/%s.png' % file_name, bbox_inches='tight')
        plt.show()
    
    
    def pie_plot(data, labels=None):
        """
        draw data in pie figure
        :param data:list(pure data) or dict(use keys as labels and values as data)
        :param labels: None if data is a dict
        :return:
        """
        X = []
        if isinstance(data, dict):
            labels = []
            for k in data.keys():
                labels.append(k)
                X.append(data[k])
    
        if labels is None:
            raise ValueError("labels should be specify")
    
        plt.pie(X, labels=labels, autopct='%1.2f%%')  # 画饼图(数据,数据对应的标签,百分数保留两位小数点)
        plt.title("Pie chart")
    
        plt.show()
    

    模型结果衡量

      当有多个模型的时候,我们需要有一个指标衡量模型建表现的好坏,针对时间序列(连续),可以选取均方误差(mse)和均方根误差(rmse)。

    def rmse(predictions, targets):
        """
        root-mean-square error
        :param predictions:
        :param targets:
        :return:
        """
        predictions = np.array(predictions)
        targets = np.array(targets)
        return np.sqrt(((predictions - targets) ** 2).mean())
    
    
    def mse(predictions, targets):
        """
        mean-square error
        :param predictions:
        :param targets:
        :return:
        """
        predictions = np.array(predictions)
        targets = np.array(targets)
        return ((predictions - targets) ** 2).mean()
    
    展开全文
  • 2、时间序列预处理

    2020-06-09 08:47:50
    时间序列预处理 平稳性检验 特征统计量 概率分布 分布函数 密度函数 特征统计量 (研究序列低阶矩) 均值 方差 自协方差函数 自相关系数 平稳时间序列的定义 严平稳 宽平稳 通过特征统计量定义...

    时间序列的预处理

    平稳性检验

    特征统计量

    • 概率分布

      • 分布函数

      • 密度函数

    • 特征统计量
      (研究序列低阶矩)

      • 均值
      • 方差
      • 自协方差函数
      • 自相关系数

    平稳时间序列的定义

    • 严平稳

    • 宽平稳

      • 通过特征统计量定义

    平稳时间序列的统计性质

    • 常数均值

      • 每一个统计量都拥有大量的样本观察值
      • 减少了随机变量的个数,增加了待估变量的样本变量
      • 简化了统计分析的难度,提高了对特征统计量的估计精度
    • 自协方差函数和自相关函数只依赖于时间的平移长度而与时间的起止点无关

      • 延迟k自协方差函数

        • 自相关系数

          • 规范性
          • 对称性
          • 非负定性
          • 非唯一性

    平稳时间序列的意义

    • 传统统计分析的数据结构

      • 有限个变量,每个变量有多个观察值
    • 时间序列数据结构

      • 可列多个随机变量,而每个变量只有一个样本观察值

    平稳性检验

    • 图检验方法

      • 时序图检验

        • 平面二维坐标图 x时间,y序列值

          • 明显递增趋势

            • 不是平稳序列
          • 沿水平线上下波动

            • 是平稳序列
      • 自相关图检验

        • 平面二维坐标悬垂线图 x自相关系数y延迟时期数

        • 明显波动

          • 非平稳序列
        • 零轴附近波动

          • 平稳序列
      • 操作简单,应用广泛,但结论带有一定的主观性

    • 统计检验方法

      • 单位根检验

      • 基于假设检验的思想

        • 构造检验统计量
        • 根据检验统计量的取值来进行判断

    纯随机性检验

    纯随机序列 白噪声序列

    • 纯随机性
    • 方差齐性
    • 没有分析价值

    非纯随机序列

    纯随机性检验

    • 假设条件

      • 原假设H0

        • 白噪声
      • 备择假设H1

        • 非白噪声
    • 检验统计量

      • Q统计量

        • QBP统计量 或Q统计量
        • QBL统计量 或LB统计量
    • 检验

      • P值显著大于0.05

        • 序列不能拒绝原假设

          • 白噪声序列

    导图

    #时序图
    #2.1 默认格式输出
    yield=c(15.2,16.9,15.3,14.9,15.7,15.1,16.7)
      #用行输入的方式将7个序列值赋值给向量yield
    yield=ts(yield,start=1884)
      #指定yield为时序变量,观察值起始时间为1884年,数据频率为年度数据
    plot(yield)
      #绘制yield的时序图,按R语言默认格式输出
    
    #自定义图形参数
    #点线结构参数
    #type="p"   点     type="o"   线穿过点
    #type="l"   线     type="h"    悬垂线
    #type="b" 点连线   type="s"    阶梯线
    
    #散点图
    plot(yield,type="p")
    
    #点线图
    plot(yield,type="o")
    
    #符号参数
    plot(yield,type="o",pch=17)
    
    #连线类型参数
    #lty=1    实线     lty=4    点+短虚线
    #lty=2    虚线     lty=5    长虚线
    #lty=3    点线     lty=6    点+长虚线
    plot(yield,lty=2)
    
    #线的宽度参数
    #lwd=1       默认宽度
    #lwd=k     默认宽度的k倍
    #lwd=-k   默认宽度的1/k倍
    plot(yield,lwd=2)
    
    #颜色参数
    #col=1     col="black"     黑色
    #col=2     col="red"       红色
    #col=3     col="green"     绿色
    #col=4     col="blue"      蓝色
    
    #添加文本
    plot(yield,main="1884-1890 年英格兰和威尔士地区小麦平均亩产量",xlab="年份",ylab="亩产量")
    
    #指定坐标轴范围
    #指定输出横轴范围
    plot(yield,xlim=c(1886,1890))
    
    #指定输出纵轴范围
    plot(yield,ylim=c(15,16))
    
    #添加参照线
    #添加一条垂线
    plot(yield)
    abline(v=1887,lty=2)
    
    #添加多条垂直参照线
    plot(yield)
    abline(v=c(1885,1889),lty=2)
    
    #添加水平线
    plot(yield)
    abline(h=c(15.5,16.5),lty=2)
    
    #绘制序列自相关图
    # acf(x,lag=)
    #-x:变量名
    #-lag:延迟阶数,若用户不特殊指定的话,系统会根据序列长度自动指定延迟阶数
    
    acf(yield)
    
    #2.1 时序图检验
    sha=read.table("E:/data/file4.csv",sep=",",header=T)
    output=ts(sha$output,start=1964)
    plot(output)
    #有明显递增趋势→不满足均值、方差为常数→不是平稳时间序列
    
    #2.2 
    a=read.table("E:/data/file5.csv",sep=",",header=T)
    milk=ts(a$milk,start=c(1962,1),frequency=12)
    plot(milk)
    #有明显递增趋势及周期性→不是平稳时间序列
    
    #2.3
    b=read.table("E:/data/file6.csv",sep=",",header=T)
    temp=ts(b$temp,start=1949)
    plot(temp)
    #最高温度在37度上下波动→是平稳序列
    
    #自相关图检验
    #2.1
    acf(output,lag=25)
    #平面二维悬垂线
    #不是平稳时间序列
    
    #2.2
    acf(milk)
    #不是平稳时间序列
    
    #2.3
    acf(temp)
    #是平稳序列
    
    #2.4
    # rnorm(n=,mean=,sd=)
    #n:随机数个数
    #mean:均值,缺省值默认为0;
    #sd:标准差,缺省值默认为1;
    #rnorm函数也可简写为rnorm(n,均值,标准差)
    #如果要产生n个服从标准正态分布的随机数,可以简写为rnorm(n)
    
    #标准正态白噪声序列时序图
    white_noise<-rnorm(1000)
    white_noise<-ts(white_noise)
    plot(white_noise)
    
    #白噪声序列样本自相关图
    acf(white_noise)
    
    # Box.test函数
    # Box.test(x,type=,lag=)
    # X:检验统计量类型
    # (1)type="Box-Pierce",输出白噪声检验的Q统计量,该统计量为系统默认输出结果。
    # (2)type="Ljung-Box",输出白噪声检验的LB统计量。
    # -lag:延迟阶数。lag=n 表示输出滞后n阶的白噪声检验统计量,忽略该选项时,默认输出滞后1阶的检验统计量结果。
    
    Box.test(white_noise,lag=6)
    
    Box.test(white_noise,lag=12)
    
    # for函数
    # for(x,in,n1:n2) state
    # -x:循环变量名
    # -n1:n2:给出的循环取值区间
    # -state:需要循环执行的命令
    
    for(i in 1:2) print(Box.test(white_noise,lag=6*i))
    
    for(i in 1:2) print(Box.test(temp,lag=6*i))
    # 输出有误
    
    for(i in 1:2) print(Box.test(temp,lag=6*i))
    
    #续2.3
    for (i in 1:2) print(Box.test(temp,lag=6*1))
    
    #2.5
    c=read.table("E:/data/file7.csv",sep=",",header=T)
    prop=ts(c$prop,start=1950)
    plot(prop)  #时序图
    acf(prop)  #自相关图
    for (i in 1:2) print(Box.test(prop,lag=6*1))  #随机性检验(白噪声检验)
    
    
    展开全文
  • 待处理数据为间隔一秒的时间序列,但是其中有时间缺失,怎样把丢失的时间补齐并赋值为零并按天为单位进行reshape. 萌新一枚,首次提问还望大佬们赐教:)
  • 时间序列预处理流程

    2019-09-11 09:30:33
    时间序列分析之前,需要进行序列的预处理,包括纯随机性和平稳性检验,通过计算序列的四个特征统计量,根据检验结果可以将序列分为不同的类型,然后采取不同的分析方法。 四个特征统计量 1.均值 2.方差 3.自协方差...
  • 时间序列预处理

    万次阅读 2018-10-11 23:19:50
    本文转自时间序列ARIMA模型详解:python实现店铺一周销售量预测 顾名思义,时间序列是时间间隔不变的情况下收集的时间点集合。这些集合被分析用来了解长期发展趋势,为了预测未来或者表现分析的其他形式。但是是...
  • 简单的数据预处理时间序列分析 spss数据预处理时间序列分析 (二)时间变量生成及绘制散点图 时隔这么久终于又和大家见面了( ̄▽ ̄)~*,咱们继续我们的内容 在完成数据导入
  • 时间序列分析之预处理(一)

    万次阅读 2017-04-16 22:49:44
    该笔记基于《时间序列分析-基于R》 时间序列分析是非常有价值应用最广的统计分析方法也是最难的一种统计分析方法, 在对时间序列进行分析之前必须对数据进行预分析处理,如:平稳性检验与纯随机性检验 。一、时间...
  • 时间序列预处理

    2020-12-19 21:43:55
           ...时间序列预处理流程图(侵删) 下面来详细介绍每个阶段的处理 数据预处理流程图 数据预处理-平稳性检验        
  • 简单的数据预处理时间序列分析 spss数据预处理时间序列分析 (一)安装及数据导入 小白一枚,近期学习了spss时间序列分析,网上资源都是零散的,特此整理并自己完成了一份时间序列分析操作方法小教程,只是最...
  • 使用一维卷积神经网络处理序列数据,数据类型为一维
  • 2.1-时间序列概念及预处理

    千次阅读 2018-07-11 17:31:03
    第一节 时间序列概念及预处理 (重点)平稳性检验 (重点)纯随机性检验 1.1 时间序列概要 引言1: 7000年前的古埃及人把尼罗河涨落的情况逐天记录下来,就构成所谓的时间序列。对这个时间序列长期的观察使...
  • 在本次提交中,我们演示了如何在 MATLAB 中处理和清理存储在 Excel 工作表中、以多种格式和多种采样率存储的时间序列数据。 我们从使用“导入工具”从 Excel 表格导入数据开始。 接下来,我们关注如何准备数据以转换...
  • 简单的数据预处理时间序列分析 spss数据预处理时间序列分析 (六)季节分解 得到时间序列图后就可以进行季节分解了 通常情况下进行季节因素分解,将季节变动因素从原时间序列中去除,生成由剩余三种因素构成序列...
  • 时序数据数据预处理、特征提取代码。分段特征、统计特征、熵特征。
  • 时间序列分析1-预处理时间序列分析简介时间序列的定义描述性时间序列分析频域分析方法时域分析方法时间序列预处理平稳性检验统计特征量平稳时间序列的定义平稳时间序列的统计性质平稳性的检验纯随机序列的检验学习...
  • 数据挖掘——时间序列预处理前言一、平稳非白噪声序列1、平稳时间序列的定义2、平稳性检验二、非平稳序列三、纯随机序列 前言 拿到一个观察值后,首先要对他的纯随机性和平稳性进行检验,这两个重要的检验称为序列...
  • 数据集处理方法之多维时间序列

    千次阅读 2020-11-02 23:24:36
    为了在接下来的程序中对这些时间序列进行聚类以及评估聚类效果,需要读取这些数据,并且将状态(分类)作为标签附在每一段数据上。鉴于标签和时间序列的格式不一致,本人采用了字典格式。 具体代码如下: def ...
  • 截止到目前最新整理的的UCR数据集(UCRArchive)。这是以一个完整的压缩包,共有129个数据集。压缩包没有解压码。
  • 二、平稳时间序列的定义 严平稳:所有统计量都不随时间推移而变化(好多阶矩) 宽平稳(弱平稳):它认为序列的统计性质主要由它的低阶矩决定,所以只要保证序列低阶矩平稳(二阶,一阶),就能保证序列的主要性质...
  • 时序数据数据预处理、特征提取代码。分段特征、统计特征、熵特征。时间序列.rar
  • 第二章 时间序列预处理
  • Matlab实现时间序列预测

    千次阅读 2021-07-28 16:41:36
    在之前的版本做时间预测是比较麻烦操作的,MathWorks公司对时间序列预测做了详细的解决,跑模型非常简便。 当前网络是非常的非线性网络,增加神经元个数,同时增加delays到4。 利用以上模型和NAR模型进行训练,误差...
  • 时间序列分析之一:数据预处理

    千次阅读 2013-12-02 23:50:53
    时间序列分析拾运用概率与统计的理论与方法分析随机数据序列,并建立数学模型、定阶和参数估计的学科,它主要应用在预测、控制、滤波、金融(如股票价格)等方面。  我们常见的时间序列模型是状态平稳、正态分布、...
  • SPSS(十九)SPSS之时间序列模型(图文+数据集)

    万次阅读 多人点赞 2019-06-17 22:32:38
    SPSS(十九)SPSS之时间序列模型(图文+数据集) 时间序列是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。正如人们常说,人生的出场顺序很重要,时间序列中隐藏着一些过去与未来的关系。时间序列...
  • 时序图检验:平稳序列的时序图应显示序列值始终在1个常数附近波动,且波动范围有界、无明显趋势及周期特征 Ⅱ.自相关图检验:平稳序列通常具有短期相关性,即其协方差随延迟期数的增大而衰减的速度比非平稳序列要快 ②...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,094
精华内容 18,037
关键字:

时间序列数据的预处理