SAS_codes_time series_3

34410 ワード

ぶんかいほう


成分ごとにモデルを作って正確な分析をしたい.
つまり、モデルは細分化されていると思います.
表列の成分

  • 不規則成分ItI tIt
    予測不可能な成分

  • システムコンポーネント
  • トレンド成分TTT tTt
    全体の傾向を表す一般多項式
  • 季節成分StS tSt
    特定のサイクルで変更を繰り返す
  • 循環成分CtC tCt
    季節成分と似ているが、周期が長い場合は
  • である.
    分解法の基本モデル
  • 加算モデル
    Zt=Tt+St+Ct+ItZ_t=T_t+S_t+C_t+I_tZt​=Tt​+St​+Ct​+It​
  • 乗算モデル
    Zt=Tt×St×Ct×ItZ_t=T_t×S_t×C_t×I_tZt​=Tt​×St​×Ct​×It​
  • 4.1トレンドモデル分解

  • トレンドモデルに適しています.
  • 原子資料では,トレンドモデルの予測値から減算された残差が季節モデルとして適している.
  • 原料からトレンドモデルと季節モデルの予測値を差し引いて、不規則成分が本当に不規則であるかどうかを決定する.
  • しかし,これはトレンド成分と残差成分が完全に独立している場合であり,実際には不可能であるため,一次構造モデル構造が適切である.

    これは乗算モデルで、段階的に使用するのに適しています。

    data food;
    infile 'D:\UOS_2021_2\time_analysis\SAS_codes\data\food.txt';
    input food @@;
    date = intnx('month','1jan80'd,_n_-1);
    format date monyy;
    t+1;    /* 행 베이스 계산이므로  */
    mon = month(date);
         if mon=1 then i1=1; else i1=0;
         if mon=2 then i2=1; else i2=0;
         if mon=3 then i3=1; else i3=0;
         if mon=4 then i4=1; else i4=0;
         if mon=5 then i5=1; else i5=0;
         if mon=6 then i6=1; else i6=0;
         if mon=7 then i7=1; else i7=0;
         if mon=8 then i8=1; else i8=0;
         if mon=9 then i9=1; else i9=0;
         if mon=10 then i10=1; else i10=0;
         if mon=11 then i11=1; else i11=0;
         if mon=12 then i12=1; else i12=0; 
    run;
    reading data
    proc reg data=food ;
      model food= t/dw;
      output out=trendata p=trend ;
      id date; run;
    トレンドモデルに適合
    予測値が保存されます.
    data adtrdata; 
    set trendata; 
    adjtrend=food/trend; 
    run;
    乗方モデルであるため,原子材料からトレンドモデル推定の予測値を分けた.
    つまり,トレンド分離の資料であるため,季節モデルに適している.
    proc reg data = adtrdata;
    model adjtrend = i1 - i12 / dwprob;
    run;
    自分の相関性が見える.
    従って,自己回帰誤差モデルとして再適応した.
    proc autoreg data=adtrdata;
      model adjtrend=i1-i12/noint nlag=13 dwprob backstep; 
      output out=seasdata p=seasonal; run;
    整理して、次のようにします.
    0.乗算モデルが適用されます.
    1.原材料に対してトレンドモデルを採用する.
    2.原材料に対してトレンドモデルで適切な予測値を区分し、トレンド性を分離する.
    3.共有した資料は季節モデルとして適切である.しかし,このとき自己相関が見られるので,自己回帰誤差モデルとして好適である.
    data all; 
    set seasdata; 
    keep date food trend seasonal irregular fitted;
    irregular=adjtrend/seasonal;
    fitted=trend*seasonal; run;
    proc print data=all; 
    var date food trend seasonal irregular fitted; run;
    原料をトレンド性と季節性に分けて予測した資料です.
    このとき,予測値の不規則成分を2つのモデルで分離する->本当に不規則かどうかを調べるために
    これはモデルの残差とは違います!注意する.
    (モデルの残差は予測値と実績値の差です.)
    予測値は、トレンドモデルと季節モデルの予測値の積です.
    proc arima data=all; 
    identify var= irregular nlag=12; run; 
    上で分離した不規則成分IIIに自己相関があるかどうかを調べる.
    /** [그림 4-1] **/ 
    proc sgplot data=all;
    series x=date y=food/  lineattrs=(pattern=1 color=blue); 
    series x=date y=trend/ lineattrs=(pattern=2 color=black); run;
    /** [그림 4-2] **/ 
    proc sgplot data=all;
    series x=date y=seasonal; run;
    /** [그림 4-3]  **/ 
    proc sgplot data=all;
    series x=date y=irregular;
    refline 1.0/ axis=y; run;
    /** [그림 4-4] **/ 
    proc sgplot data=all;
    series x=date y=food/  lineattrs=(pattern=1 color=blue); 
    series x=date y=fitted/ lineattrs=(pattern=2  color=black); run;

    4.2移動平均法に基づく分解


    いどうへいきんほう
    これは予測モデルではなく,前処理と考えるべきである.
    中心でさえあれば予測できない.
    data index;
    infile 'D:\UOS_2021_2\time_analysis\SAS_codes\data\mindex.txt'; 
    input index @@;
    date=intnx('month','1jan86'd,_n_-1);
    format date monyy.; 
    t+1; 
    run; 
    データを読み込みます.
    /** expand 절차를 이용하여 이동평균값 구하기 **/
    proc expand data=index out=index1;
    convert index = m3_centered / transformout = ( cmovave 3 );
    convert index = m7_centered / transformout = ( cmovave 7 trim 3 ); 
    convert index = m3 / transformout = ( movave 3 );
    convert index = m7 / transformout = ( movave 7 ); 
    run;
    indexというデータセットのindex変数名をm 3 center/に変換するには、後述の条件に従います.cmovaveは、2つのデータに基づいて中心データを平均的に移動させる.movaveは、前のデータに基づいて以下のデータを平均的に移動する.trimは、対応するデータを両側から削除します.
    /** <표 4-4> **/
    proc print data=index1;
    var index m3 m7; run;
    移動平均のチェック
    /** [그림 4-5] **/ 
    proc sgplot data=index1;
    series x=date y=index/  lineattrs=(pattern=1 color=black); 
    series x=date y=m3_centered/ lineattrs=(pattern=2 color=blue); 
    xaxis values=('1jan86'd to '1jan94'd by year); run;
    /** [그림 4-6] **/ 
    proc sgplot data=index1;
    series x=date y=index/  lineattrs=(pattern=1 color=black); 
    series x=date y=m7_centered/ lineattrs=(pattern=2 color=blue); 
    xaxis values=('1jan86'd to '1jan94'd by year); run;
    実際のデータと単純移動平均データの比較(決定)
    そう思いましょう.
    まず移動平均法は決してモデルではない.単純な前処理です.△これが間違っているなら、そう理解したほうがいい.
    でもどうしてこんなことをするの?
    では、移動平均法を利用して季節性を分離することができます.
    4.1でランダムにトレンドと季節を別々にモデリングする.
    次に,移動平均法におけるいくつかのデータを平均化し,gaに対するhyperparameter mを季節的周期sに等しくした.
    では、季節周期に基づいて平均値を計算します.
    つまり、季節性がなくなったのです.
    極端な例は季節性の周期性が12であり,各データは毎月測定される観察値である.
    また,移動平均法のmが12であれば,適用データは12カ月の平均値である.いつも1月からではなく、元のサイクル12を平均し続けているので、サイクル性がなくなったと考えられます.
    これにより季節の周期性がなくなり、トレンド(+サイクル)成分が得られる.今後のトレンド分析ではなく、トレンド成分になるだけです.
    次の原材料(移動平均適用前、混同しないでください)から適切なトレンド成分を取り除くと、移動平均で除去された季節性が残ります.これが季節性成分(+不規則成分)です.
    つまり、これは季節成分です.△これによる季節成分分析ではない.
    あといくつかのステップがあります.
    問題が発生
    proc expand data=food out=foodtest;
    convert food = test/transformout = ( cmovave 12 );
    convert food = tc/transformout = (cd_tc 12);
    run;
    この二つの結果は違う
    やってみよう.
    例は加算モデルです.
    data food;
    infile 'D:\UOS_2021_2\time_analysis\SAS_codes\data\food.txt'; input food @@;
    date=intnx('month','1jan80'd,_n_-1);
    format date monyy.; t+1;
    mon=month(date); run;
    データを取得します.
    /** expand 절차를 이용하여 가법모형의 구성 성분들을 추정하기 **/
    proc expand data=food out=food2;
    convert food=tc/transformout=(cd_tc 12);  /*이거 이상한데? 그냥 오타인거 같은데...*/
    convert food=s/transformout=(cda_s 12);  
    convert food=i/transformout=(cda_i 12);
    convert food=sa/transformout=(cda_sa 12); run;
    移動平均法で季節成分を除去し,トレンド+サイクル成分を得た.
    原料からそれ以外の季節成分を抽出する.
    不規則成分を得る.
    季節調整の成分を得る.

    4.3季節調整


    季節調整は原材料から季節成分を推定して除去する手順である.
    つまり,先の移動平均法も季節調整と見なすことができる.

    X-11 ARIMA & X-12 ARIMA

      /** X12 절차에서 X11 방법에 의해 여러 가지 성분들을 산출하기 **/
    proc X12 data=food seasons=12 start=jan1980;
    var food;
    x11;
    output out=foodout a1 d10 d11 d12 d13;  
    run;
    D 10-D 13は、季節成分、季節調整シリーズ、トレンド+循環成分、不規則成分の順である
    /** <표 4-7> **/
    proc print data=foodout; 
    run;
    /** [그림 4-11]~[그림 4-14] 그리기 **/
    data foodout; set foodout(rename=(_date_=date food_a1=food food_d10=d10 
    food_d11=d11 food_d12=d12 food_d13=d13 ));
    label food=" "  d10=" "  d11=" "  d12=" "  d13=" " ; 
    run;
      /** [그림 4-11] **/ 
    title "Final seasonal factors";
    proc sgplot data=foodout;
    series x=date y=d10; 
    run;
    /** [그림 4-12] **/ 
    title "Original time series vs Seasonally adjusted series";
    proc sgplot data=foodout;
    series x=date y=food/  lineattrs=(pattern=1 color=blue); 
    series x=date y=d11/ lineattrs=(pattern=2 color=black); 
    run;
    /** [그림 4-13] **/ 
    title "Original time series vs Trend cycle";
    proc sgplot data=foodout;
    series x=date y=food/  lineattrs=(pattern=1 color=blue); 
    series x=date y=d12/ lineattrs=(pattern=2 color=black); 
    run;
    /** [그림 4-14] **/ 
    title "Irregular component";
    proc sgplot data=foodout;
    series x=date y=d13; 
    refline 1.0/ axis=y; 
    run;
    /* 불규칙 성분이 진짜 불규칙인지 자기상관계수 구해보기 */
    proc arima data=foodout; 
    identify var=d13 nlag=24; 
    run;