2017-01-12 2 views
1

Ich habe ein Problem, wenn ich Zeitreihenmodell bin, sind die Prognoseergebnisse (C.I. 95%) negative Werte. Es macht keinen Sinn. Ich bin mir nicht sicher, an welchem ​​Teil ich einen Fehler gemacht habe.Zeitreihen Schätzung ist ein negativer Wert in R

week total_amount_by_week 
52  10000 
52  12000 
52  12300 
52  9800 
52  23400 
51 
51... 
. 
. 
. 
00  10000 
00  12930 

Der Datensatz sieht wie folgt aus: weil die plot.ts nach hinten schaut, so habe ich eine Umkehrung der Datensätze.

order_ts1 <- ts(order_sum$Total_Amount_by_week,start = c(00),end =c(52)) 
order_ts1[] <-rev(order_ts1) 
plot.ts(order_ts1,col ='blue') 

Und dann berechnete ich Differenz, ACF und PACF.

order_tsdiff3 <-diff(order_ts1,differences=3) 
plot.ts(order_tsdiff3) # d=3 

# calcualate ACF 
acf(order_tsdiff3,lag.max=53) 
acf(order_tsdiff3,lag.max=53,plot=FALSE) 

# calculate PACF 
pacf(order_tsdiff3,lag.max=53) 
pacf(order_tsdiff3,lag.max=53,plot=FALSE) 

fit_ma <- arima(order_ts1, order = c(1, 3, 1)) 
fit_ma 

order_arimaforecast1 <- forecast.Arima(fit_ma,h=3,level=c(99.5)) 
order_arimaforecast1           

So sieht die Handlung wie folgt aus: difference

ACF

PACF

Also ich einige Schätzwert, aber ich denke, es ist wrong.Why es negative Werte geschieht?

Call: 
arima(x = order_sumts1, order = c(1, 3, 1)) 

Coefficients: 
      ar1  ma1 
     -0.6673 -1.0000 
s.e. 0.1135 0.0539 

sigma^2 estimated as 84368661: log likelihood = -529.98, aic = 1065.96 

    Point Forecast Lo 99.5 Hi 99.5 
53  -1420.589 -27459.41 24618.23 
54  -7983.391 -51772.69 35805.91 
55  -21921.514 -93114.57 49271.54 

Alle geschätzte Menge sollte ein positiver Wert sein.

Antwort

0

mit Transformationen Versuchen mit dafür, dass Sie immer positive Werte

## some sample data 
a<-ts(c, frequency = 5) 
## use ar() model with BoxCox() transform on the data & setting lambda = 0 (equivalent to taking the log) 
fit <- ar(BoxCox(a,lambda=0)) 
## compute forecast and set lambda to 0 so that a back-transform is done (since we transformed the original data set we now want to back transform it to the original scale) 
forecast(fit,h=3, lambda=0) 

    Point Forecast  Lo 80 Hi 80  Lo 95 Hi 95 
3.0  2.015135 1.1019547 3.685060 0.8005621 5.072398 
3.2  1.385040 0.6984705 2.746480 0.4861378 3.946073 
3.4  1.692792 0.8355244 3.429637 0.5749517 4.983975 

Wenn Sie nur prognostiziert „a“ ohne die Transformation dh durch diese Schritte zu helfen, werden Sie auch negative Werte erhalten, aber die Transformation im obigen Fall hilft das.

a<-ts(c, frequency = 5) 
## lambda = 1 means no transformation 
fit <- ar(BoxCox(a,lambda=1)) 
forecast(fit,h=3, lambda=1) 

    Point Forecast  Lo 80 Hi 80  Lo 95 Hi 95 
3.0   1.8 0.4764192 3.123581 -0.2242421 3.824242 
3.2   1.8 0.4764192 3.123581 -0.2242421 3.824242 
3.4   1.8 0.4764192 3.123581 -0.2242421 3.824242 

Sie können diesen Code für Ihren speziellen Fall anzupassen:

arima(x = BoxCox(order_sumts1, lambda=0), order = c(1, 3, 1)) 

Hoffnung, dass es hilft!

+0

Wenn ich ar() -Funktion ausführen, gibt es einen Fehler: Fehler in ar.yw (x, aic = aic, order.max = order.max, na.action = na.action,: konnte nicht gefunden werden Funktion "BoxCox" – Rya

+1

Kannst du install.packages ("hdrcde") und dann library (hdrcde) dann versuche es erneut und hoffentlich wird es funktionieren! – user3466328

+0

Yep.Es funktioniert sehr gut. – Rya

Verwandte Themen