
p7]c        l   @  sG	  d  Z  d d l m Z d d l Z d d l m Z d d l m Z m	 Z	 d   Z
 d d d	 d
  Z d   Z d d	 d  Z d d	 d  Z d d	 d  Z d d d d g Z e d k rC	e d  d Z e j e  Z d Z e j d d d d d d d d d d d d  d d! g  Z e j d d g d" d# g d$ d% g d$ d% g d$ d% g d$ d% g d$ d% g d$ d% g d$ d% g d$ d% g d" d# g d d g g  Z e j e d& e f Z e e e d' e d( d	  e e e d' e d( d	  e g  e e e  D]  Z e j e e e e ! ^ q e e d d' d d( d	 Z e e d& d' d d( d	 Z  e e  e e   e e  e e  e	 e e d d  d) f e e d' d d( d*  e	 e e d& e d& d  d) f e e d' d d( d+  e	 e d e d  d) f e e d' e d( d	  e d,  e j e d& e f Z! e e e! d d' d d( d+  e e e! d' e d( d	  e e e! d' e d( d	  e	 e e d d  d d  f e e! d' d d( d*  e	 e e d& e d& d  d d  f e e! d' d d( d+  e	 e d e d  d d  f e e! d' e d( d	  e	 e e d e e! d d' d d( d*  e	 e e d& e d& d !e e! d d' d d( d+  e	 e e d  e e! d' e d( d	  d d- l m" Z" e e" j# j$ e! e j d d d g  d d. d)  e j d d/ d0 d1 d d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM dN dO dP dQ dR dS dT dU dV dW dX dY dZ d[ d\ d] d^ d_ d` da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz d{ d| d} d~ d d d d d d d d d d d d d d d d d d gd  Z% e	 e% e e j d  d d	   e j d0 d1 d d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM dN dO dP dQ dR dS dT dU dV dW dX dY dZ d[ d\ d] d^ d_ d` da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz d{ d| d} d~ d d d d d d d d d d d d d d d d d d d d d d d d d d d gk  Z& e	 e& e e j d  d d*   e j d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d gd  Z' e	 e' e e j d  d d+   n  d S(   s  using scipy signal and numpy correlate to calculate some time series
statistics

original developer notes

see also scikits.timeseries  (movstat is partially inspired by it)
added 2009-08-29
timeseries moving stats are in c, autocorrelation similar to here
I thought I saw moving stats somewhere in python, maybe not)


TODO

moving statistics
- filters don't handle boundary conditions nicely (correctly ?)
e.g. minimum order filter uses 0 for out of bounds value
-> append and prepend with last resp. first value
- enhance for nd arrays, with axis = 0



Note: Equivalence for 1D signals
>>> np.all(signal.correlate(x,[1,1,1],'valid')==np.correlate(x,[1,1,1]))
True
>>> np.all(ndimage.filters.correlate(x,[1,1,1], origin = -1)[:-3+1]==np.correlate(x,[1,1,1]))
True

# multidimensional, but, it looks like it uses common filter across time series, no VAR
ndimage.filters.correlate(np.vstack([x,x]),np.array([[1,1,1],[0,0,0]]), origin = 1)
ndimage.filters.correlate(x,[1,1,1],origin = 1))
ndimage.filters.correlate(np.vstack([x,x]),np.array([[0.5,0.5,0.5],[0.5,0.5,0.5]]), origin = 1)

>>> np.all(ndimage.filters.correlate(np.vstack([x,x]),np.array([[1,1,1],[0,0,0]]), origin = 1)[0]==ndimage.filters.correlate(x,[1,1,1],origin = 1))
True
>>> np.all(ndimage.filters.correlate(np.vstack([x,x]),np.array([[0.5,0.5,0.5],[0.5,0.5,0.5]]), origin = 1)[0]==ndimage.filters.correlate(x,[1,1,1],origin = 1))


update
2009-09-06: cosmetic changes, rearrangements
i(   t   print_functionN(   t   signal(   t   assert_array_equalt   assert_array_almost_equalc         C  sm   | } t  j |   d k r7 | t  j |   d f } n  t  j t  j |  |  d |  t  j |  |  d f S(   Ni   i   i    i(   t   npt   ndimt   shapet   r_t   ones(   t   xt   kt   kadd(    (    s>   lib/python2.7/site-packages/statsmodels/sandbox/tsa/movstat.pyt	   expandarr4   s    t   medi   t   laggedc         C  s   | d k r | d } n9 | d k r. d } n$ | d k rL | d d } n t   t j |  rj | } nQ | d k r | d d } n4 | d k r d } n | d	 k r | d } n t   t |  |  } t j | t j |  |  | | | | !S(
   sl  moving order statistics

    Parameters
    ----------
    x : array
       time series data
    order : float or 'med', 'min', 'max'
       which order statistic to calculate
    windsize : int
       window size
    lag : 'lagged', 'centered', or 'leading'
       location of window relative to current position

    Returns
    -------
    filtered array


    R   i   t   centeredi    t   leadingi   R   t   mint   max(   t
   ValueErrorR   t   isfiniteR   R   t   order_filterR   (   R	   t   ordert   windsizet   lagt   leadt   ordt   xext(    (    s>   lib/python2.7/site-packages/statsmodels/sandbox/tsa/movstat.pyt   movorder;   s$    			c          C  s  d d l  j }  t j d d  } t | d d } t | |  t j d d d  } t | d d } t | |  t t | d d d d	 d  | d  t j d
 d t j d  } t j |  d } t | d d } |  j	   |  j
 | | d | | d  |  j d  t | d d d d	 } |  j	   |  j
 | | d | | d  |  j d  t | d d d d } |  j	   |  j
 | | d | | d  |  j d  d S(   s   graphical test for movorderiNi   i
   R   R   R   R   R   i    i   i   s   .-s   moving max laggeds   moving max centeredR   s   moving max leading(   t   matplotlib.pylabt   pylabR   t   arangeR   R   t   linspacet   pit   sint   figuret   plott   title(   t   pltR	   t   xot   tt(    (    s>   lib/python2.7/site-packages/statsmodels/sandbox/tsa/movstat.pyt   check_movorderi   s,    '


c         C  s   t  |  d d | d | S(   s  moving window mean


    Parameters
    ----------
    x : array
       time series data
    windsize : int
       window size
    lag : 'lagged', 'centered', or 'leading'
       location of window relative to current position

    Returns
    -------
    mk : array
        moving mean, with same shape as x


    Notes
    -----
    for leading and lagging the data array x is extended by the closest value of the array


    i   t
   windowsizeR   (   t	   movmoment(   R	   R*   R   (    (    s>   lib/python2.7/site-packages/statsmodels/sandbox/tsa/movstat.pyt   movmean   s    c         C  sB   t  |  d d | d | } t  |  d d | d | } | | | S(   sC  moving window variance


    Parameters
    ----------
    x : array
       time series data
    windsize : int
       window size
    lag : 'lagged', 'centered', or 'leading'
       location of window relative to current position

    Returns
    -------
    mk : array
        moving variance, with same shape as x


    i   R*   R   i   (   R+   (   R	   R*   R   t   m1t   m2(    (    s>   lib/python2.7/site-packages/statsmodels/sandbox/tsa/movstat.pyt   movvar   s    c   	      C  s  | } | d k rB d } t  | d p( d	 d | d p9 d	  } n | d k r | d } t  | d | d pq d	 | d | d p d	  } n\ | d k r | d } t  d | d d | p d	 d | d | d p d	  } n t  t j |  t |  } t |  | d  } t |  | j d k rLt j	 | | | d  | St | j
  t | d	 d	  d	 f j
  t j	 | | | d	 d	  d	 f d  | d	 d	  f Sd	 S(
   s  non-central moment


    Parameters
    ----------
    x : array
       time series data
    windsize : int
       window size
    lag : 'lagged', 'centered', or 'leading'
       location of window relative to current position

    Returns
    -------
    mk : array
        k-th moving non-central moment, with same shape as x


    Notes
    -----
    If data x is 2d, then moving moment is calculated for each
    column.

    R   i    i   iR   i   R   t   fullN(   t   slicet   NoneR   R   R   t   floatR   t   printR   t	   correlateR   R   (	   R	   R
   R*   R   R   R   t   slt   avgkernR   (    (    s>   lib/python2.7/site-packages/statsmodels/sandbox/tsa/movstat.pyR+      s&    *7?
R   R,   R/   R+   t   __main__s!   
checkin moving mean and variancei
   g        i   g      @g      ?g       @g      @g      @g      @g      @g       @i   i	   g#q?g|
q?gvWUU?gUUU@i   R*   R   i    R   R   s-   
checking moving moment for 2d (columns only)(   t   ndimaget   axisg?g333333?g333333?g      ?g @gffffff@g@g      @g      @g      @g      @g      !@g      #@g      %@g      '@g      )@g      +@g      -@g      /@g     0@g     1@g     2@g     3@g     4@g     5@g     6@g     7@g     8@g     9@g     :@g     ;@g     <@g     =@g     >@g     ?@g     @@@g     @@g     @A@g     A@g     @B@g     B@g     @C@g     C@g     @D@g     D@g     @E@g     E@g     @F@g     F@g     @G@g     G@g     @H@g     H@g     @I@g     I@g     @J@g     J@g     @K@g     K@g     @L@g     L@g     @M@g     M@g     @N@g     N@g     @O@g     O@g      P@g     `P@g     P@g     P@g      Q@g     `Q@g     Q@g     Q@g      R@g     `R@g     R@g     R@g      S@g     `S@g     S@g     S@g      T@g     `T@g     T@g     T@g      U@g     `U@g     U@g     U@g      V@g     `V@g     V@g     V@g      W@g     `W@g     W@id   gW@gX@g9X@g     `X@g     X@gX@g̬X@gX@g     X@g<b\t?gq袋?gmF]@g.
@g$E]@g      "@g      $@g      &@g      (@g      *@g      ,@g      .@g      0@g      1@g      2@g      3@g      4@g      5@g      6@g      7@g      8@g      9@g      :@g      ;@g      <@g      =@g      >@g      ?@g      @@g     @@g      A@g     A@g      B@g     B@g      C@g     C@g      D@g     D@g      E@g     E@g      F@g     F@g      G@g     G@g      H@g     H@g      I@g     I@g      J@g     J@g      K@g     K@g      L@g     L@g      M@g     M@g      N@g     N@g      O@g     O@g      P@g     @P@g     P@g     P@g      Q@g     @Q@g     Q@g     Q@g      R@g     @R@g     R@g     R@g      S@g     @S@g     S@g     S@g      T@g     @T@g     T@g     T@g      U@g     @U@g     U@g     U@g      V@g     @V@g     V@g     V@g      W@g     @W@g     W@g⣋.W@g٧뢋W@gEX@gb\tEX@gw.hX@i   ((   t   __doc__t
   __future__R    t   numpyR   t   scipyR   t   numpy.testingR   R   R   R   R)   R,   R/   R+   t   __all__t   __name__R4   t   nobsR   R	   t   wst   arrayt   avet   vat   c_t   ave2dt   ranget   it   varR-   R.   t   x2dR9   t   filterst   correlate1dt   xgt   xdt   xc(    (    (    s>   lib/python2.7/site-packages/statsmodels/sandbox/tsa/movstat.pyt   <module>+   s   	.	5S
(										:

#
 )!5!"!!"