関連情報
ホーム > 製品 > NAG数値計算ライブラリ > C#向けNAGライブラリ > サンプルソースコード集 > VARMAモデルの多変量時系列の実現値の生成

C#による VARMAモデルの多変量時系列の実現値の生成

C#によるサンプルソースコード
使用関数名:g05pj

Keyword: VARMA, 多変量, 時系列, 実現値

概要

本サンプルはVARMAモデルの多変量時系列の実現値の生成を行うC#によるサンプルプログラムです。 本サンプルは以下の式で示されるVARMAモデルに対して1つの実現値が48個の観測値をもつ2変量時系列の2つの実現値を生成し出力します。

VARMAモデルのデータ 

※本サンプルはNAG Library for .NETに含まれる関数 g05pj() のExampleコードです。本サンプル及び関数の詳細情報は g05pj のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで

入力データ

(本関数の詳細はg05pj のマニュアルページを参照)

このデータをダウンロード
g05pj Example Program Data
 2 1 0 48                    : K, IP, IQ, N
 0.80 0.07                   
 0.00 0.58                   : End of PHI(,,1)
 5.00 9.00                   : XMEAN
 2.97                        
 0.64 5.38                   : End of matrix VAR

  • 1行目はタイトル行で読み飛ばされます。
  • 2行目に多変量時系列の次数(k)、自己回帰パラメータの数(ip)、移動平均パラメータ行列の数(iq)、生成される観測値の数(n)を指定しています。
  • 3〜4行目にモデルの自己回帰パラメータ行列(phi)を指定しています。
  • 5行目に多変量時系列の平均ベクトル(xmean)を指定しています。
  • 6〜7行目に共分散行列の要素(var)を指定しています。

出力結果

(本関数の詳細はg05pj のマニュアルページを参照)

この出力例をダウンロード
g05pj Example Program Results


  Realisation Number 1

    Series number   1
   -------------

    4.833    2.813    3.224    3.825    1.023    1.415    2.184    3.005
    5.547    4.832    4.705    5.484    9.407   10.335    8.495    7.478
    6.373    6.692    6.698    6.976    6.200    4.458    2.520    3.517
    3.054    5.439    5.699    7.136    5.750    8.497    9.563   11.604
    9.020   10.063    7.976    5.927    4.992    4.222    3.982    7.107
    3.554    7.045    7.025    4.106    5.106    5.954    8.026    7.212


    Series number   2
   -------------

    8.458    9.140   10.866   10.975    9.245    5.054    5.023   12.486
   10.534   10.590   11.376    8.793   14.445   13.237   11.030    8.405
    7.187    8.291    5.920    9.390   10.055    6.222    7.751   10.604
   12.441   10.664   10.960    8.022   10.073   12.870   12.665   14.064
   11.867   12.894   10.546   12.754    8.594    9.042   12.029   12.557
    9.746    5.487    5.500    8.629    9.723    8.632    6.383   12.484


  Realisation Number 2

    Series number   1
   -------------

    5.396    4.811    2.685    5.824    2.449    3.563    5.663    6.209
    3.130    4.308    4.333    4.903    1.770    1.278    1.340   -0.527
    1.745    3.211    4.478    5.170    5.365    4.852    6.080    6.464
    2.765    2.148    6.641    7.224   10.316    7.102    5.604    3.934
    4.839    3.698    5.210    5.384    7.652    7.315    7.332    7.561
    7.537    7.788    6.868    7.575    6.108    6.188    8.132   10.310


    Series number   2
   -------------

   11.345   10.070   13.654   12.409   11.329   13.054   12.465    9.867
   10.263   13.394   10.553   10.331    7.814    8.747   10.025   11.167
   10.626    9.366    9.607    9.662   10.492   10.766   11.512   10.813
   10.799    8.780    9.221   14.245   11.575   10.620    8.282    5.447
    9.935    9.386   11.627   10.066   11.394    7.951    7.907   12.616
   15.246    9.962   13.216   11.350   11.227    6.021    6.968   12.428


  • 9〜14行目に生成された1つ目の実現値の時系列1が出力されています。
  • 20〜25行目に生成された1つ目の実現値の時系列2が出力されています。
  • 33〜38行目に生成された2つ目の実現値の時系列1が出力されています。
  • 44〜49行目に生成された2つ目の実現値の時系列2が出力されています。

ソースコード

(本関数の詳細はg05pj のマニュアルページを参照)

※本サンプルソースコードは .NET環境用の科学技術・統計計算ライブラリである「NAG Library for .NET」の関数を呼び出します。
サンプルのコンパイル及び実行方法


このソースコードをダウンロード
// g05pj Example Program Text
// C# version, NAG Copyright 2008
using System;
using NagLibrary;
using System.IO;
namespace NagDotNetExamples
{
  public class G05PJE
  {
    static bool defaultdata = true;
    static string datafile = "";
    static void Main(String[] args)
    {
      if (args.Length == 1)
      {
        defaultdata = false;
        datafile = args[0];
      }
      StartExample();
    }
    public static void StartExample()
    {
      try
      {
        DataReader sr;
        if (defaultdata == true)
        {
          sr = new DataReader("exampledata/g05pje.d");
        }
        else
        {
          sr = new DataReader(datafile);
        }
        const int mseed=1;
       
        int genid,   i,   ii,   ip,   iq,   j,   k,   l,   n,   subid; int ifail;
        Console.WriteLine("g05pj Example Program Results");
        Console.WriteLine("");
        //      Read data from a file
        //      Skip heading
        sr.Reset();
        //      Read in initial parameters
        sr.Reset();
        k = int.Parse(sr.Next());
        ip = int.Parse(sr.Next());
        iq = int.Parse(sr.Next());
        n = int.Parse(sr.Next());
        int rn = Math.Max(ip, iq); l = k*(k+1)/2;
        int k2 = k*k;
        if (ip>0) 
        {
          l = l + (ip-1)*k2;
        }
        double[] phi = new double[ip*k*k];
        int lr;
        if (k>=6) 
        {
          lr = (5*rn*rn+1)*k2 + (4*rn+3) + 4;
        }
        else
        {
          lr = ((ip+iq)*(ip+iq)+1)*k2 + (4*(ip+iq)+3)*k + 
          Math.Max(k*rn*(k*rn+2),k2*(ip+iq)*(ip+iq)+l*(l+3)+k2*(iq+1)) + 4;
        }
        double[] theta = new double[iq*k*k];
        double[,] var = new double[k, k];
        double[,] x = new double[k, n];
        double[] xmean = new double[k];
        int[] seed = new int[mseed];
        double[] r = new double[lr];
        //      Check the specified array limits
        if (k <= 0 || ip < 0 || iq < 0 || n <= 0)
        {
          Console.WriteLine("   ** Problem size is too small.");
          goto L160;
        }
        //      Read in the AR parameters
        for (l = 1 ; l <= ip ; l++)
        {
          for (i = 1 ; i <= k ; i++)
          {
            ii = (l - 1) * k * k + i;
            sr.Reset();
            for (j = 1 ; j <= k ; j++)
            {
              phi[ii + k * (j - 1) - 1] = double.Parse(sr.Next());
            }
          }
        }
        //      Read in the MA parameters
        for (l = 1 ; l <= iq ; l++)
        {
          for (i = 1 ; i <= k ; i++)
          {
            ii = (l - 1) * k * k + i;
            sr.Reset();
            for (j = 1 ; j <= k ; j++)
            {
              theta[ii + k * (j - 1) - 1] = double.Parse(sr.Next());
            }
          }
        }
        //      Read in the means
        sr.Reset();
        for (i = 1 ; i <= k ; i++)
        {
          xmean[i - 1] = double.Parse(sr.Next());
        }
        //      Read in the variance / covariance matrix
        for (i = 1 ; i <= k ; i++)
        {
          sr.Reset();
          for (j = 1 ; j <= i ; j++)
          {
            var[i - 1 , j - 1] = double.Parse(sr.Next());
          }
        }
        //      Initialise the seed
        seed[0] = 1762543;
        //      genid and subid identify the base generator
        genid = 1;
        subid = 1;
        //      Initialise the generator to a repeatable sequence
        G05.G05State g05State = new G05.G05State(genid, subid, seed, out ifail);
        if (ifail != 0)
        {
          Console.WriteLine("** Generator initialisation failed with ifail = {0,5}", ifail);
          goto L160;
        }
        //      Generate the first realisation
        //      Use mode = 2 to set up R and generate values

       
        G05.g05pj(2, n, k, xmean, ip, phi, iq, theta, var, r,  g05State, x, out ifail);
        if (ifail != 0)
        {
          Console.WriteLine("** g05pj failed with ifail = {0,5}", ifail);
          goto L160;
        }
        //      Display the results
        Console.WriteLine("");
        Console.WriteLine(" {0:0.000}"," Realisation Number 1");
        for (i = 1 ; i <= k ; i++)
        {
          Console.WriteLine("\n  {0}{1,3}","  Series number ",i);
          Console.WriteLine(" {0}","  -------------");
          Console.WriteLine("");
          for (j = 1 ; j <= n ; j++)
          {
            Console.Write(" {0,8:f3}{1}", x[i - 1 , j - 1],j%8==0||j==n?"\n":"");
          }
          Console.WriteLine("");
        }
        //      Generate a second realisation
        //      Use mode = 3 to reset the series and generate values
        G05.g05pj(3, n, k, xmean, ip, phi, iq, theta, var,  r,  g05State, x,   out ifail);
        if (ifail != 0)
        {
          Console.WriteLine("** g05pj failed with ifail = {0,5}", ifail);
          goto L160;
        }
        //      Display the results
        Console.WriteLine("");
        Console.WriteLine(" {0}"," Realisation Number 2");
        for (i = 1 ; i <= k ; i++)
        {
          Console.WriteLine("\n  {0}{1,3}","  Series number ",i);
          Console.WriteLine(" {0}","  -------------");
          Console.WriteLine("");
          for (j = 1 ; j <= n ; j++)
          {
            Console.Write(" {0,8:f3}{1}", x[i - 1 , j - 1],j%8==0||j==n?"\n":"");
          }
          Console.WriteLine("");
        }
        // 
        L160: ;
        // 
      }
      catch (Exception e)
      {
        Console.WriteLine(e.Message);
        Console.WriteLine( "Exception Raised");
      }
    }
  }
}


Results matter. Trust NAG.

Privacy Policy | Trademarks