返回介绍

数学基础

统计学习

深度学习

工具

Scala

十一、 移动窗口函数

发布于 2023-07-17 23:38:23 字数 7480 浏览 0 评论 0 收藏 0

  1. 时间序列的移动窗口上的各种统计函数是一种常见的操作。这一类函数我们称作移动窗口函数

    • 与其他统计函数一样,移动窗口函数也排除了NA

    • 所谓移动窗口,就是两层含义:

      • 窗口:统计函数作用的对象为该窗口内的数值
      • 移动:该窗口是移动的,每个窗口对应一个统计量 。最终生成一个统计量序列
  2. 计算移动窗口的平均值:

    
    
    xxxxxxxxxx
    Series/DataFrame.rolling(window, min_periods=None, freq=None, center=False, win_type=None, on=None, axis=0)
    • window:一个整数或者一个offset。如果是个整数,则给出了窗口的大小(窗口大小是固定的)。如果是个offset,则每个窗口对应一个时间段,因此窗口大小不固定。
    • min_periods:一个整数。给出了窗口内有效值的数量。
    • freq:一个字符串或者DateOffset对象,该参数被废弃。它用于对数据重采样,因为我们一般使用resample()来完成,所以该参数被废弃。
    • center:一个布尔值。如果为True,则聚合结果的label为窗口的中心点的索引。默认情况下,聚合结果的label为窗口的最右点的索引。(因为一个聚合结果对应了 window个数据,因此该聚合结果可选的索引可以从这些数据的索引中选取)
    • win_type:一个字符串,给出了窗口类型
    • on:一个字符串。对于DataFrame,它指定在哪一column上进行移动平均。否则是index
    • axis:一个整数。指定沿着0轴还是1轴移动平均。如果为0/'index'则沿着0轴;如果为1/'columns'则沿着0轴

    窗口类型可以为:

    • 'boxcar'
    • 'triang'
    • 'blackman'
    • 'hamming'
    • 'bartlett'
    • 'parzen'
    • 'bohman'
    • 'blackmanharris'
    • 'nuttall'
    • 'barthann'
    • 'kaiser'(需要beta参数),该参数由后面的.mean()等方法给出
    • 'guassian'(需要std参数),该参数由后面的.mean()等方法给出
    • 'general_gaussian'(需要power,width参数),该参数由后面的.mean()等方法给出
    • 'slepian'(需要width参数),该参数由后面的.mean()等方法给出

    该方法返回一个Window对象,你可以在该对象上调用.mean()/.sum()/.agg()/.aggregate()等方法。

    rolling0 rolling1 rolling2

  3. 计算移动窗口的指数加权平均值:

    
    
    xxxxxxxxxx
    Series/DataFrame.ewm(com=None, span=None, halflife=None, alpha=None, min_periods=0, freq=None, adjust=True, ignore_na=False, axis=0)
    • com:一个浮点数,以center of mass的方式给出了衰减因子。 $ MathJax-Element-18 $
    • span:一个浮点数,以span的方式给出了衰减因子。 $ MathJax-Element-19 $
    • halflife:一个浮点数,以halflife的方式给出了衰减因子: $ MathJax-Element-20 $
    • alpha:一个浮点数,为光滑因子。这种方式直接给出了 $ MathJax-Element-25 $ ,要求 $ MathJax-Element-22 $
    • min_periods:一个整数。给出了窗口内有效值的数量。
    • adjust:一个布尔值。见下面的解释。
    • ignore_na:一个布尔值,如果为True,则计算权重时,忽略缺失值。

    加权移动平均的计算公式为:

    $ y_t = \frac{\sum_{i=0}^{t} w_i x_{t-i}}{\sum_{i=0}^t w_i} $

    其中 $ MathJax-Element-23 $ 为输入值。

    • adjust=True时, $ MathJax-Element-24 $ ,此时:
    $ y_t = \frac{x_t + (1 - \alpha)x_{t-1} + (1 - \alpha)^{2} x_{t-2} + \cdots + (1 - \alpha)^{t} x_{0}}{1 + (1 - \alpha) + (1 - \alpha)^{2} + ... + (1 - \alpha)^{t}}\\ =\frac{x_t + (1 - \alpha)x_{t-1} + (1 - \alpha)^{2} x_{t-2} + \cdots + (1 - \alpha)^{t} x_{0}}{1-(1-\alpha)^{t+1}}\alpha $
    • adjust=False
    $ y_0= x_0 \\ y_t = (1 - \alpha) y_{t-1} + \alpha x_t $

    它等价于

    $ w_i = \begin{cases} \alpha (1 - \alpha)^{i} & \text{if } i < t \\ (1 - \alpha)^{i} & \text{if } i = t \end{cases} $

    上式中的 $ MathJax-Element-25 $ 有四种方式,其中最简单的就是直接设置 alpha参数。剩下的三种就是间接给出:

    $ \alpha = \begin{cases} \frac{2}{s + 1}, & \text{for span}\ s \geq 1\\ \frac{1}{1 + c}, & \text{for center of mass}\ c \geq 0\\ 1 - \exp(\frac{\log 0.5}{h}), & \text{for half-life}\ h > 0 \end{cases} $

    该函数返回的是一个EWM对象。其统计方法有:

    • mean():指数加权移动平均的均值
    • var():指数加权移动平均的方差
    • std():指数加权移动平均的标准差
    • corr():指数加权移动平均的相关系数
    • cov():指数加权移动平均的协方差

    ewm0 ewm1 ewm2

  4. 拓展窗口是rolling窗口的特殊情况:当窗口大小等于序列长度。另外expanding窗口中,如果数据有空缺,则剔除空缺值再计算。

    
    
    xxxxxxxxxx
    DataFrame/Series.expanding(min_periods=1, freq=None, center=False, axis=0)
    • min_periods:一个整数。给出了窗口内有效值的数量。
    • freq:一个字符串或者DateOffset对象,该参数被废弃。它用于对数据重采样,因为我们一般使用resample()来完成,所以该参数被废弃。
    • center:一个布尔值。如果为True,则label为窗口的中心的值。默认情况下,label为窗口的右侧的值。
    • axis:一个整数。指定沿着0轴还是1轴移动平均。如果为0/'index'则沿着0轴;如果为1/'columns'则沿着0轴

    它返回一个Expanding对象。

    它的统计方法如下:

    • count() :有效值数量
    • sum() :和
    • mean() :均值
    • median() :中位数
    • min() :最小值
    • max() :最大值
    • std() :标准差
    • var() :方差
    • skew() :斜度
    • kurt() :峰度
    • quantile() :百分位数
    • apply() :通用处理函数。其参数为一个可调用对象,该可调用对象接受一个序列,返回一个标量。
    • cov() :协方差
    • corr() :相关系数

    expanding0 expanding1

    Center中,2016-11-01为中心的话,它右侧有4个数据,左侧理论上有5个数据(窗口总长为10),而左侧为空,因此第一个窗口就是前 5 个数据的统计量。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文