turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

Find a Community

- Home
- /
- Analytics
- /
- Forecasting
- /
- proc ARIMA: How to restrict forcast values to non ...

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

07-29-2016 03:46 AM - edited 07-29-2016 03:50 AM

Hi,

is there any way to restrich forcast to non negative value while using proc ARIMA. The code I am using is somthing like:

proc arima data=ECC_PROG.input_&model_id._FC;

identify var=;

crosscorr=;

estimate input= maxiter=500

outstat=work.stat_output;

ods output ParameterEstimates=work.est_output;

forecast id=Monthfirstdate interval=current_month lead=20 out=work.fc_output;

run;

The forcast series is:

2501.3670464

2108.8958506

2891.8512364

3296.7321201

2152.0694575

2268.121497

1762.4315729

725.869754

1352.3058047

1116.6313661

1682.9098849

1352.5916422

1817.0154846

942.74009745

1809.1170823

1724.7927787

2132.5585948

1509.8093098

629.94039571

524.47316682

483.21510113

784.94561717

1678.526544

3958.0868899

2623.3232306

3431.4607677

2358.1385337

2552.8319758

2970.995978

1573.3429921**875.34663397** (This is the first future forcast)**231.9825378**

-656.1836936

-1190.827972

-939.7523543

-969.8491769

-794.5118323

-1534.474293

-1374.10823

-1097.835167

-961.7230223

-767.186427

-1417.2471

-2046.895848

-2983.043558

-3513.153141

-3275.711532

The red marked forcast values should be non negative. As you see in the series after only two non negative futur forcasts, the series futur forcast becomes negative. Since I know I am forcasting the "expected number of persons who may change their status in futur ", it can not be negative. The least value of forcast could be zero. So I am looking for some way of restricting the forcast to non negative.

Do anybody has an Idea ?

thanks in advance for your time

Ehsan

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

07-29-2016 09:00 AM - edited 07-29-2016 09:50 AM

Hello -

In my opinion you will need to deal with non-negativity requirements of your forecasts in a post processing step. The statistical model will provide you with an unconstrained forecast, based on the patterns at hand, which can be negative of course.

If, like in your case, you have additional requirements about the decisions at hand, like: forecasts cannot be negative (example: sales forecasting), forecasts need to be integer (example: number of call center agents), forecasts are impacted by supply options (example: inventory control, where products come in batches), etc. you will need to deal with them in a post process.

Some post-processing can be simple, like setting forecasts to 0, others can be more elaborate: overrides in a hierarchical setup with rules about what can be changed, which boil down to an optimization problem. Sometimes this is referred to as a constrained forecast.

Thanks,

Udo

PS: having said all of this you may want to make sure that your model is appropriate. I looked at your data briefly, maybe an ESM approach (using a damped trend model or a seasonal model for example) will do a better job - just a Friday morning thought.

Example:

**data** test;

input value;

datalines;

2501.3670464

2108.8958506

2891.8512364

3296.7321201

2152.0694575

2268.121497

1762.4315729

725.869754

1352.3058047

1116.6313661

1682.9098849

1352.5916422

1817.0154846

942.74009745

1809.1170823

1724.7927787

2132.5585948

1509.8093098

629.94039571

524.47316682

483.21510113

784.94561717

1678.526544

3958.0868899

2623.3232306

3431.4607677

2358.1385337

2552.8319758

2970.995978

1573.3429921

;

**run**;

**proc** **esm** data=test plot=(forecasts);

forecast value / model=damptrend;

**run**;

*assuming seasonality of 12;

**proc** **esm** data=test plot=(forecasts) seasonality=**12**;

forecast value / model=seasonal;

**run**;

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

07-29-2016 09:52 AM

Hi Udo_sas,

I apriciate your effort.

thanks for your input

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

08-01-2016 01:51 PM

One thing that might guarantee non-negativity on the original scale would be to log transform your data prior to fitting the ARIMA model. You could then post process the forecast values by exponentiating, thereby ensuring that the values are positive.

The question then becomes whether the log transformed values meet the distributional assumptions for ARIMA.

Steve Denham

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content

08-02-2016 08:57 AM

Hello -

As a point for consideration when going for a log transformation approach: given the nature of the exponential function the back-transformed forecasts could be behaving unexpectedly.

Thanks,

Udo