はじめMath! Javaでコンピュータ数学

第57回統計の数学 サイクルとトレンド

柔道やボクシングなど、試合が体重の階級制になっていると、試合前の減量は大変苦しいものです。階級というものは、体重オーバーをしていなければよいのではありません。軽すぎてもだめなのです。厳しい稽古に加えて食事のコントロールがあると、それはもう地獄です。体重計の値をみてはグラフを描き、目標体重までの差をみて涙を流します。

さて、データをグラフ化することで、データの持つ傾向を読み取ることが出来ます。増加傾向なのか、減少傾向なのか、それともほぼ同じ値を維持しながら推移しているのか。もし、ある期間一定の傾向を示しているようなら、その続きも同じような傾向になるだろう、と予想するのは自然なことです。安定した状況ならば、そのような見立てが大きく外れないでしょう。不安定な状況であっても、短期的に見れば同様の見立てが出来るはずです。今回はグラフの読み方の1つを紹介します。

図57.1 データの傾向から未来をはかる
図57.1 データの傾向から未来をはかる

サイクルとトレンド

グラフに現れる特定のパターンを持った周期的な変化のことをサイクル[1]といいます図57.2の(a)⁠。

グラフが一定の割合で「右肩上がり」⁠右肩下がり」あるいは「一定」などの傾向を持っていたとしましょう。サイクルよりも長い区間に渡る変化の傾向をトレンド[2]といいます図57.2の(b)⁠。

図57.2 サイクルとトレンド
図57.2 サイクルとトレンド

データから傾向を読み取ろう

早速ですが、次に掲載するサンプルプログラムを実行し、サンプルデータを作成しましょう。このコードの意味はなるべく考えず、機械的に打ち込んだ方がいいですよ。

ソースコード:Sample GenerateCycleAndTrendData.java
//サンプルコード
//サイクルとトレンドを持ったランダムなデータを作る
//プログラムを作りましょう
//filename : Sample_GenerateCycleAndTrendData.java

class Sample_GenerateCycleAndTrendData {

  static final int BARA = 5;
  static final double KATA = 0.5;
  static final double SEPP = 5;
  static final int KIKAN = 100;
  static final int IBENTO = 20;
  static final int TSUIKA = 20;

  private static double func(int x,double a,double b) {
    Dice d2 = new Dice(2);
    Dice dBARA = new Dice(BARA);
    int pm = 0;
    if (d2.roll(1) == 1) pm = -1; else pm = 1;
    double y = a*x + b + pm * dBARA.roll(1);
    if ((x % IBENTO) == 0) y += TSUIKA;
    return y;
  }

  public static void main(String[] args) {
    for (int i=0 ; i<KIKAN; ++i)
      System.out.println(i+","+func(i,KATA,SEPP));
    for (int i=KIKAN ; i<KIKAN*2; ++i)
      System.out.println(i+","+func(i,KATA,SEPP+40));
    for (int i=KIKAN*2 ; i<KIKAN*3; ++i)
      System.out.println(i+","+func(i,KATA,SEPP+80));
  }// end of main

}// end of class Sample_GenerateCycleAndTrendData

次のように実行してデータファイルを作成します。

C:\>java Sample_GenerateCycleAndTrendData > st_sample002.csv

前回同様、OpenOfficeのCalcで読み込んで、散布図を表示してみましょう。

私の作成したデータでは、図57.3の散布図が表示されました。

図57.3 作成直後の散布図
図57.3 作成直後の散布図

なんとなく、右肩上がりな傾向が読み取れますが、それ以上はこれでは読み取ることが難しそうです。試しに、横にぐいっとグラフを引き延ばしてみましょう。グラフ領域の右端中央をクリックすると、小さな四角の黒い点が表示されます図57.4⁠。

図57.4 グラフ領域右端中央のグリッド
図57.4 グラフ領域右端中央のグリッド

ここにマウスカーソルを移動すると、マウスカーソルが左右に矢印の付いたものに変わります。その状態でマウスの左ボタンを押下、右方向へマウスを引きずると(ドラッグすると)グラフが横に伸びていきます。

図57.5 横に引き延ばした散布図
図57.5 横に引き延ばした散布図

いかがですか?なにやら一定の傾向が見えてきましたね図57.5⁠。横軸の目盛りでおよそ20ごとにピンと突出したデータが繰り返し現れます。20を周期とするサイクルがあるようです。また、右上がりにグラフは一定の割合であがっていくトレンドがあるようです。ひとつ大きな視野で見ると、100ごとに大きなジャンプがあります。100を周期とするサイクルと見ることが出来るでしょう。

今回はここまで

今回はサイクルとトレンドという2つのグラフの読み方を紹介しました。

経済金融系のデータでよく耳にする言葉ですが、理工学系のデータに関しても、時系列で変化するものの場合には適用して良い考え方ですので、記憶のとどめておくと良いでしょう。

おすすめ記事

記事・ニュース一覧