【时间序列分析】为什么要做季节调整?对数处理?差分?(理论篇)

【时间序列分析】为什么要做季节调整?对数处理?差分?(理论篇),第1张

通常我们在对时间序列数据构建模型之前,需要对变量进行一些季节调整,对数化处理和差分处理,为甚么要这么做,不做有什么样的影响呢?

第一个问题:为什么要做季节调整?

        一般来说,一个经济指标中往往包含有四个变动要素,长期要素、循环要素、季节要素和其他一些不规则的要素。在经济分析中,往往趋势和循环要素才能真实的反映经济指标的运行的客观规律,季节变动要素比如吃冰棍的夏季往往比冬季多得多,这就会掩盖掉经济变量发展的客观规律,因此在分析之前,需要对变量做季节调整,剔除它。

          记住只有季度和月度的数据才需要调整

        采用什么方法来剔除呢?目前比较常用的有4种方法,CensusX12、X11、移动平均方法和Tramo/Seats方法。比较常用的是CensusX12方法,如何来做, *** 作上再说,很简单。

      那季节调整有什么样的缺点呢?说白了,季节调整后的数据,不论总量和增长速度均与实际数值存在很大的差距,数据反映出的很可能不是指标在核算期的实际经济含义。

    第二个问题:为什么要做对数化处理?

        因为大部分经济指标数据都是呈现偏态分布的,比如收入或者国民生产总值,而且这些指标大都呈现右偏,取对数可以将大于中位数的值按照比例进行缩小,从而让数据服从正态分布,而正态分布也符合计量模型中的很多假设,对于解决异方差问题有很大的帮助。

  第三个问题:为什么要差分?

        从研究的目标上来讲,对数化处理后再差分,体现的是该经济指标的对数收益率。对研究增长率相关的问题很重要。

      从统计学角度来讲,差分是非平稳序列变成平稳序列常用的方法,只有平稳性的时间序列才能避免“伪回归”的存在,才有经济意义。

这个讲得麻烦,其实只是求循环顺序为9 的倍数的位置 。剩余的就是地球人的位置。

代码待会儿试着写个看看。

被扔出的位置已经算出来了。

第1轮抛出:位置:09

第2轮抛出:位置:18

第3轮抛出:位置:27

第4轮抛出:位置:06

第5轮抛出:位置:16

第6轮抛出:位置:26

第7轮抛出:位置:07

第8轮抛出:位置:19

第9轮抛出:位置:30

第10轮抛出:位置:12

第11轮抛出:位置:24

第12轮抛出:位置:08

第13轮抛出:位置:22

第14轮抛出:位置:05

第15轮抛出:位置:23

整下整个的代码。

import java.util.ArrayList

import java.util.List

public class CirclePlus {

    private List<String>seats = new ArrayList<String>()

    //初始化

    public CirclePlus(){

        if(seats.size()>=0){

            for(int i=0i<30i++){

                seats.add("位置:"+((i+1)>=10?(i+1):"0"+(i+1)))

            }

        }

    }

       

    //踢人方法

    public void Kick(int num){

        //记录当前被踢人的座位

        int tempseat = 0

        //当前要踢的座位

        int nowseat = 0

        //记录当前是第几轮

        int loop = 1

        //当是15轮时退出

        while(loop<=15){

            //要踢的人的座位号是上次被踢的座位号+num,-1是因为LIST的编号比真实座位号小1

            nowseat = tempseat+num-1

//          System.out.println("nowseat=="+nowseat+"\ntempseat=="+tempseat+"\nloop=="+loop)

            //如果要踢的超出当前人数范围,则从第一个人开始重新算起(减掉当前人数)

            if(nowseat>=seats.size()){

                //为符合上面踢人座位号(nowseat)计算,除去减掉当前人数(seats.size())外,要加回修正值(上面减掉的1),

                //以保证 要踢人的座位号(nowseat) 是正确的

                tempseat=nowseat-seats.size()-num+1

                   

            }else{

                //踢人

                System.out.println("第"+loop+"轮抛出:"+seats.remove(nowseat))

                //保存当前被踢的座位号

                tempseat = nowseat

                //轮次增加

                loop++

            }

        }

        System.out.println("踢人后剩余的安全座位号:")

        for(String string: seats){

            System.out.println(string)

        }

    }

    public static void main(String[] args) {

        CirclePlus cp = new CirclePlus()

        cp.Kick(9)

    }

}

OK了,换成while循环才弄好。。用for循环直接算座位号误差太大了,还是一个个算。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12125630.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存