美文网首页
时间序列笔记-Box-Cox转换

时间序列笔记-Box-Cox转换

作者: 新云旧雨 | 来源:发表于2019-08-17 22:21 被阅读0次

    笔记说明

    在datacamp网站上学习“Time Series with R ”track
    “Forecasting Using R”课程 做的对应笔记。
    学识有限,错误难免,还请不吝赐教。
    学习的课程为“Forecasting Using R”,主要用forecast包。
    课程参考教材Forecasting: Principles and Practice
    课程中数据可在fpp2包得到

    本次笔记可以作为之前一个笔记的补充:时间序列笔记-趋势与去趋势

    常用转换方法

    有些时间序列数据有随着水平增加,方差变大的趋势。如果使用ETS模型,我们可以选择乘积模型来应对方差变大的趋势。另一种方法是对原始数据进行转换,让转换后的序列方差平稳。
    y_t为原始序列,w_t为转换后序列。
    常见的数据转换方法有:

    • 平方根转换:w_t=\sqrt[]{y_t}
    • 立方根转换:w_t=\sqrt[3]{y_t}
    • 对数转换:w_t=log(y_t)
    • 负倒数转换:w_t=-1/y_t

    以上四种方法都是y_t值越大改变幅度越大,且转换强度依次递增。

    以a10数据为例,它包含澳大利亚1991-2008年间每月的抗糖尿病药物销量数据

    autoplot(a10)
    
    autoplot(a10^0.5)
    
    autoplot(a10^(1/3))
    
    autoplot(log(a10))
    
    autoplot(-1/a10)
    

    原图:



    平方根转换:



    立方根转换:

    对数转换:



    负倒数转换:

    可以看出来这几个方法对时间序列数据中更大水平观测值的方差减少的强度越来越大。对于a10数据来说最好的矫正力度似乎介于立方根转换和log转换之间,负倒数变换后方差明显越来越小了。

    Box-Cox转换

    以上四种转换方法其实都可以对应到某种特殊的Box-Cox转换。
    Box-Cox转换形式为:
    w_t=\left\{ \begin{array}{rcl} log(y_t) & & {λ=0}\\ (y_t^λ-1)/λ & & {λ≠0}\end{array} \right.

    • λ=1:没有进行实质上的转换
    • λ=1/2:平方根转换+线性转换
    • λ=1/3:立方根转换+线性转换
    • λ=0:log转换
    • λ=-1:与负倒数转换类似

    用Box-Cox转换的好处在于可以λ的值而连续地改变转换的力度。推荐使用的λ取值范围为:-1≤λ≤1

    我这里学习的是时间序列课程,所以只是重点关注了Box-Cox转换能够改善时间序列数据方差逐渐增大的能力。对于非时间序列数据,Box-Cox转换常用于改善数据的正态性、对称性和方差齐性。

    R实现

    可以用forecast包中的BoxCox(x, lambda)进行BoxCox转换。另外可用InvBoxCox(x, lambda)进行BoxCox的逆转换。
    另外,forecast包中的BoxCox.lambda(x)可以自动帮你选择合适的λ

    BoxCox.lambda(a10)
    

    0.1313326是BoxCox.lambda()选择的最合适的λ值,确实是介于立方根转换和Log转换之间的λ值。

    a10 %>% BoxCox(lambda = 0.1313326) %>% autoplot()
    

    相关文章

      网友评论

          本文标题:时间序列笔记-Box-Cox转换

          本文链接:https://www.haomeiwen.com/subject/iqnksctx.html