What's the difference between pandas ACF and statsmodel ACF?

前端 未结 3 2022
栀梦
栀梦 2021-01-30 16:55

I\'m calculating the Autocorrelation Function for a stock\'s returns. To do so I tested two functions, the autocorr function built into Pandas, and the acf

3条回答
  •  遥遥无期
    2021-01-30 17:54

    In the following example, Pandas autocorr() function gives the expected results but statmodels acf() function does not.

    Consider the following series:

    import pandas as pd
    s = pd.Series(range(10))
    

    We expect that there is perfect correlation between this series and any of its lagged series, and this is actually what we get with autocorr() function

    [ s.autocorr(lag=i) for i in range(10) ]
    # [0.9999999999999999, 1.0, 1.0, 1.0, 1.0, 0.9999999999999999, 1.0, 1.0, 0.9999999999999999, nan]
    

    But using acf() we get a different result:

    from statsmodels.tsa.stattools import acf
    acf(s)
    # [ 1.          0.7         0.41212121  0.14848485 -0.07878788 
    #  -0.25757576 -0.37575758 -0.42121212 -0.38181818 -0.24545455]
    

    If we try acf with adjusted=True the result is even more unexpected because for some lags the result is less than -1 (note that correlation has to be in [-1, 1])

    acf(s, adjusted=True)  # 'unbiased' is deprecated and 'adjusted' should be used instead
    # [ 1.          0.77777778  0.51515152  0.21212121 -0.13131313 
    #  -0.51515152 -0.93939394 -1.4040404  -1.90909091 -2.45454545]
    

提交回复
热议问题