net.sourceforge.openforecast.models
Class WeightedMovingAverageModel

java.lang.Object
  extended by net.sourceforge.openforecast.models.AbstractForecastingModel
      extended by net.sourceforge.openforecast.models.AbstractTimeBasedModel
          extended by net.sourceforge.openforecast.models.WeightedMovingAverageModel
All Implemented Interfaces:
ForecastingModel
Direct Known Subclasses:
MovingAverageModel

public class WeightedMovingAverageModel
extends AbstractTimeBasedModel

A weighted moving average forecast model is based on an artificially constructed time series in which the value for a given time period is replaced by the weighted mean of that value and the values for some number of preceding time periods. As you may have guessed from the description, this model is best suited to time-series data; i.e. data that changes over time.

Since the forecast value for any given period is a weighted average of the previous periods, then the forecast will always appear to "lag" behind either increases or decreases in the observed (dependent) values. For example, if a data series has a noticable upward trend then a weighted moving average forecast will generally provide an underestimate of the values of the dependent variable.

The weighted moving average model, like the moving average model, has an advantage over other forecasting models in that it does smooth out peaks and troughs (or valleys) in a set of observations. However, like the moving average model, it also has several disadvantages. In particular this model does not produce an actual equation. Therefore, it is not all that useful as a medium-long range forecasting tool. It can only reliably be used to forecast a few periods into the future.

Since:
0.4
Author:
Steven R. Gould

Field Summary
 
Fields inherited from class net.sourceforge.openforecast.models.AbstractForecastingModel
accuracyIndicators, initialized
 
Constructor Summary
protected WeightedMovingAverageModel()
          Constructs a new weighted moving average forecasting model.
  WeightedMovingAverageModel(double[] weights)
          Constructs a new weighted moving average forecasting model, using the specified weights.
protected WeightedMovingAverageModel(String independentVariable)
          Deprecated. As of 0.4, replaced by WeightedMovingAverageModel(java.lang.String).
  WeightedMovingAverageModel(String independentVariable, double[] weights)
          Deprecated. As of 0.4, replaced by WeightedMovingAverageModel(double[]).
 
Method Summary
protected  double forecast(double timeValue)
          Returns the forecast value of the dependent variable for the given value of the independent time variable.
 String getForecastType()
          Returns a one or two word name of this type of forecasting model.
protected  int getNumberOfPeriods()
          Returns the current number of periods used in this model.
 int getNumberOfPredictors()
          Returns the number of predictors used by the underlying model.
protected  void setWeights(double[] weights)
          Sets the weights used by this weighted moving average forecasting model to the given weights.
 String toString()
          This should be overridden to provide a textual description of the current forecasting model including, where possible, any derived parameters used.
 
Methods inherited from class net.sourceforge.openforecast.models.AbstractTimeBasedModel
forecast, getForecastValue, getIndependentVariable, getMaximumTimeValue, getMinimumTimeValue, getObservedValue, getTimeInterval, getTimeVariable, init, initTimeVariable
 
Methods inherited from class net.sourceforge.openforecast.models.AbstractForecastingModel
calculateAccuracyIndicators, forecast, getAIC, getBias, getMAD, getMAPE, getMSE, getSAE
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

WeightedMovingAverageModel

public WeightedMovingAverageModel(double[] weights)
Constructs a new weighted moving average forecasting model, using the specified weights. For a valid model to be constructed, you should call init and pass in a data set containing a series of data points with the time variable initialized to identify the independent variable.

The size of the weights array is used to determine the number of observations to be used to calculate the weighted moving average. Additionally, the most recent period will be given the weight defined by the first element of the array; i.e. weights[0].

The size of the weights array is also used to determine the amount of future periods that can effectively be forecast. With a 50 day weighted moving average, then we cannot reasonably - with any degree of accuracy - forecast more than 50 days beyond the last period for which data is available. Even forecasting near the end of this range is likely be be unreliable.

Note on weights

In general, the weights passed to this constructor should add up to 1.0. However, as a convenience, if the sum of the weights does not add up to 1.0, this implementation scales all weights proportionally so that they do sum to 1.0.

Parameters:
weights - an array of weights to assign to the historical observations when calculating the weighted moving average.

WeightedMovingAverageModel

public WeightedMovingAverageModel(String independentVariable,
                                  double[] weights)
Deprecated. As of 0.4, replaced by WeightedMovingAverageModel(double[]).

Constructs a new weighted moving average forecasting model, using the named variable as the independent variable and the specified weights.

Parameters:
independentVariable - the name of the independent variable to use in this model.
weights - an array of weights to assign to the historical observations when calculating the weighted moving average.

WeightedMovingAverageModel

protected WeightedMovingAverageModel()
Constructs a new weighted moving average forecasting model. This constructor is intended to be used only by subclasses (hence it is protected). Any subclass using this constructor must subsequently invoke the (protected) setWeights method to initialize the weights to be used by this model.


WeightedMovingAverageModel

protected WeightedMovingAverageModel(String independentVariable)
Deprecated. As of 0.4, replaced by WeightedMovingAverageModel(java.lang.String).

Constructs a new weighted moving average forecasting model using the given independent variable.

Parameters:
independentVariable - the name of the independent variable to use in this model.
Method Detail

setWeights

protected void setWeights(double[] weights)
Sets the weights used by this weighted moving average forecasting model to the given weights. This method is intended to be used only by subclasses (hence it is protected), and only in conjunction with the (protected) one-argument constructor.

Any subclass using the one-argument constructor must subsequently call setWeights before invoking the AbstractTimeBasedModel.init(net.sourceforge.openforecast.DataSet) method to initialize the model.

Note on weights

In general, the weights passed to this method should add up to 1.0. However, as a convenience, if the sum of the weights does not add up to 1.0, this implementation scales all weights proportionally so that they do sum to 1.0.

Parameters:
weights - an array of weights to assign to the historical observations when calculating the weighted moving average.

forecast

protected double forecast(double timeValue)
                   throws IllegalArgumentException
Returns the forecast value of the dependent variable for the given value of the independent time variable. Subclasses must implement this method in such a manner consistent with the forecasting model they implement. Subclasses can make use of the getForecastValue and getObservedValue methods to obtain "earlier" forecasts and observations respectively.

Specified by:
forecast in class AbstractTimeBasedModel
Parameters:
timeValue - the value of the time variable for which a forecast value is required.
Returns:
the forecast value of the dependent variable for the given time.
Throws:
IllegalArgumentException - if there is insufficient historical data - observations passed to init - to generate a forecast for the given time value.

getNumberOfPredictors

public int getNumberOfPredictors()
Returns the number of predictors used by the underlying model.

Returns:
the number of predictors used by the underlying model.

getNumberOfPeriods

protected int getNumberOfPeriods()
Returns the current number of periods used in this model.

Specified by:
getNumberOfPeriods in class AbstractTimeBasedModel
Returns:
the current number of periods used in this model.

getForecastType

public String getForecastType()
Returns a one or two word name of this type of forecasting model. Keep this short. A longer description should be implemented in the toString method.

Specified by:
getForecastType in interface ForecastingModel
Overrides:
getForecastType in class AbstractTimeBasedModel
Returns:
a string representation of the type of forecasting model implemented.

toString

public String toString()
This should be overridden to provide a textual description of the current forecasting model including, where possible, any derived parameters used.

Specified by:
toString in interface ForecastingModel
Overrides:
toString in class AbstractTimeBasedModel
Returns:
a string representation of the current forecast model, and its parameters.


OpenForecast, Copyright (c) Steven Gould, 2002-2011