Example 1: TimeSeriesOperations

This example illustrates the action of the Merge function under different settings of the Merge rule.


import com.imsl.stat.*;
import java.text.*;

public class TimeSeriesOperationsEx1 {

    public static void main(String args[]) throws ParseException {
        SimpleDateFormat dateFormat = new SimpleDateFormat("M/d/y");
        TimeSeries ts1 = new TimeSeries();
        TimeSeries ts2 = new TimeSeries();

        /* Create dates in different increments */
        ts1.setStartDate(dateFormat.parse("12/12/2010"));
        ts1.setDateIncrement(3);

        ts2.setStartDate(dateFormat.parse("12/12/2010"));
        ts2.setDateIncrement(5);

        int n = 10;

        double y1[] = new double[n];
        double y2[] = new double[n];

        /* Create series values */
        for (int i = 0; i < n; i++) {
            y1[i] = (i + 1.0);
            y2[i] = -(i + 1.0);
        }
        ts1.setSeriesValues(y1);
        ts2.setSeriesValues(y2);

        double[][] values1 = ts1.getSeriesValues();
        double[][] values2 = ts2.getSeriesValues();

        System.out.println("Time series 1 \t \tTime series 2");
        for (int i = 0; i < n; i++) {
            System.out.println(dateFormat.format(ts1.getDates()[i])
                    + "\t" + values1[i][0]
                    + "\t" + dateFormat.format(ts2.getDates()[i])
                    + "\t" + values2[i][0]);
        }
        TimeSeriesOperations tsOps = new TimeSeriesOperations();
        TimeSeries ts3 = tsOps.merge(ts1, ts2);
        double[][] values3 = ts3.getSeriesValues();
        System.out.println("Merge result using the union (default) merge rule: ");
        System.out.println("Series length: " + ts3.getLength());
        for (int i = 0; i < ts3.getLength(); i++) {
            System.out.println(dateFormat.format(ts3.getDates()[i])
                    + "\t" + values3[i][0]);
        }
        tsOps.setMergeRule(TimeSeriesOperations.MergeRule.INTERSECTION);
        ts3 = tsOps.merge(ts1, ts2);
        values3 = ts3.getSeriesValues();
        System.out.println("Merge results using the intersection merge rule: ");
        System.out.println("Series length: " + ts3.getLength());
        for (int i = 0; i < ts3.getLength(); i++) {
            System.out.println(dateFormat.format(ts3.getDates()[i])
                    + "\t" + values3[i][0]);
        }
        tsOps.setMergeRule(TimeSeriesOperations.MergeRule.UNION_MISSING);
        ts3 = tsOps.merge(ts1, ts2);
        values3 = ts3.getSeriesValues();
        System.out.println("Merge results using the union with missing rule: ");
        System.out.println("Series length: " + ts3.getLength());
        System.out.println("Number of missing values: " + ts3.getNumMissing());
        for (int i = 0; i < ts3.getLength(); i++) {
            System.out.println(dateFormat.format(ts3.getDates()[i])
                    + "\t" + values3[i][0]);
        }
    }
}

Output

Time series 1 	 	Time series 2
12/12/2010	1.0	12/12/2010	-1.0
12/15/2010	2.0	12/17/2010	-2.0
12/18/2010	3.0	12/22/2010	-3.0
12/21/2010	4.0	12/27/2010	-4.0
12/24/2010	5.0	1/1/2011	-5.0
12/27/2010	6.0	1/6/2011	-6.0
12/30/2010	7.0	1/11/2011	-7.0
1/2/2011	8.0	1/16/2011	-8.0
1/5/2011	9.0	1/21/2011	-9.0
1/8/2011	10.0	1/26/2011	-10.0
Merge result using the union (default) merge rule: 
Series length: 18
12/12/2010	0.0
12/15/2010	2.0
12/17/2010	-2.0
12/18/2010	3.0
12/21/2010	4.0
12/22/2010	-3.0
12/24/2010	5.0
12/27/2010	1.0
12/30/2010	7.0
1/1/2011	-5.0
1/2/2011	8.0
1/5/2011	9.0
1/6/2011	-6.0
1/8/2011	10.0
1/11/2011	-7.0
1/16/2011	-8.0
1/21/2011	-9.0
1/26/2011	-10.0
Merge results using the intersection merge rule: 
Series length: 2
12/12/2010	0.0
12/27/2010	1.0
Merge results using the union with missing rule: 
Series length: 18
Number of missing values: 16
12/12/2010	0.0
12/15/2010	NaN
12/17/2010	NaN
12/18/2010	NaN
12/21/2010	NaN
12/22/2010	NaN
12/24/2010	NaN
12/27/2010	1.0
12/30/2010	NaN
1/1/2011	NaN
1/2/2011	NaN
1/5/2011	NaN
1/6/2011	NaN
1/8/2011	NaN
1/11/2011	NaN
1/16/2011	NaN
1/21/2011	NaN
1/26/2011	NaN
Link to Java source.