@@ -464,6 +464,8 @@ gum <- function(data, orders=c(1,1), lags=c(1,frequency(data)), type=c("additive
464
464
# The reversed lags to fill in values in the state vector
465
465
# lagsModelRev <- lagsModelMax - lagsModel + 1;
466
466
componentsNumberARIMA <- componentsNumber <- sum(orders );
467
+ # Record how many values in the initial state vector need to be estimated
468
+ initialsNumber <- orders %*% lags ;
467
469
468
470
# componentsNumberAll is used to fill in all matrices
469
471
componentsNumberAll <- componentsNumber
@@ -509,33 +511,36 @@ gum <- function(data, orders=c(1,1), lags=c(1,frequency(data)), type=c("additive
509
511
initialType <- " provided" ;
510
512
}
511
513
else {
512
- if (initialType != " complete" ){
513
- slope <- (cov(yInSample [1 : min(max(12 ,lagsModelMax ),obsInSample ),],c(1 : min(max(12 ,lagsModelMax ),obsInSample )))/
514
- var(c(1 : min(max(12 ,lagsModelMax ),obsInSample ))));
515
- intercept <- (sum(yInSample [1 : min(max(12 ,lagsModelMax ),obsInSample ),])/ min(max(12 ,lagsModelMax ),obsInSample ) -
516
- slope * (sum(c(1 : min(max(12 ,lagsModelMax ),obsInSample )))/
517
- min(max(12 ,lagsModelMax ),obsInSample ) - 1 ));
518
-
519
- vtvalues <- vector(" numeric" , orders %*% lags );
520
- nCoefficients <- 0 ;
521
- if (any(lags == 1 ) && length(orders [lags == 1 ])> = 1 ){
522
- vtvalues [nCoefficients + 1 ] <- intercept ;
523
- nCoefficients [] <- nCoefficients + 1 ;
524
- }
525
- if (any(lags == 1 ) && length(orders [lags == 1 ])> 1 ){
526
- vtvalues [nCoefficients + 1 ] <- slope ;
527
- nCoefficients [] <- nCoefficients + 1 ;
528
- }
529
- if ((orders %*% lags )> 2 ){
530
- vtvalues [nCoefficients + 1 : (orders %*% lags - nCoefficients )] <- yInSample [1 : (orders %*% lags - nCoefficients ),];
531
- }
514
+ # if(initialType!="complete"){
515
+ slope <- (cov(yInSample [1 : min(max(12 ,lagsModelMax ),obsInSample ),],c(1 : min(max(12 ,lagsModelMax ),obsInSample )))/
516
+ var(c(1 : min(max(12 ,lagsModelMax ),obsInSample ))));
517
+ intercept <- (sum(yInSample [1 : min(max(12 ,lagsModelMax ),obsInSample ),])/ min(max(12 ,lagsModelMax ),obsInSample ) -
518
+ slope * (sum(c(1 : min(max(12 ,lagsModelMax ),obsInSample )))/
519
+ min(max(12 ,lagsModelMax ),obsInSample ) - 1 ));
520
+
521
+ vtvalues <- vector(" numeric" , initialsNumber );
522
+ nCoefficients <- 0 ;
523
+ if (any(lags == 1 ) && length(orders [lags == 1 ])> = 1 ){
524
+ vtvalues [nCoefficients + 1 ] <- intercept ;
525
+ nCoefficients [] <- nCoefficients + 1 ;
526
+ }
527
+ if (any(lags == 1 ) && length(orders [lags == 1 ])> 1 ){
528
+ vtvalues [nCoefficients + 1 ] <- slope ;
529
+ nCoefficients [] <- nCoefficients + 1 ;
530
+ }
531
+ if ((initialsNumber )> 2 ){
532
+ # rep is needed to make things work for the small samples
533
+ vtvalues [nCoefficients + 1 : (initialsNumber - nCoefficients )] <-
534
+ rep(yInSample [1 : min(initialsNumber - nCoefficients ,obsInSample ),],
535
+ ceiling(obsInSample / initialsNumber )+ 1 )[1 : (initialsNumber - nCoefficients )];
536
+ }
532
537
533
- nCoefficients [] <- 0 ;
534
- for (i in 1 : componentsNumber ){
535
- matVt [i ,1 : lagsModel [i ]] <- vtvalues [nCoefficients + (1 : lagsModel [i ])];
536
- nCoefficients [] <- nCoefficients + lagsModel [i ];
537
- }
538
+ nCoefficients [] <- 0 ;
539
+ for (i in 1 : componentsNumber ){
540
+ matVt [i ,1 : lagsModel [i ]] <- vtvalues [nCoefficients + (1 : lagsModel [i ])];
541
+ nCoefficients [] <- nCoefficients + lagsModel [i ];
538
542
}
543
+ # }
539
544
}
540
545
541
546
# Add parameters for the X
@@ -582,14 +587,14 @@ gum <- function(data, orders=c(1,1), lags=c(1,frequency(data)), type=c("additive
582
587
B <- vector(" numeric" , persistenceEstimate * componentsNumberAll +
583
588
transitionEstimate * componentsNumberAll ^ 2 +
584
589
measurementEstimate * componentsNumber +
585
- initialEstimate * (initialType == " optimal" )* sum(orders %*% lags ) +
590
+ initialEstimate * (initialType == " optimal" )* sum(initialsNumber ) +
586
591
xregNumber * initialXregEstimate * (initialType != " complete" ));
587
592
names(B ) <- c(paste0(" g" ,1 : componentsNumberAll )[persistenceEstimate * (1 : componentsNumberAll )],
588
593
paste0(" F" ,paste0(rep(1 : componentsNumberAll ,each = componentsNumberAll ),
589
594
rep(1 : componentsNumberAll ,times = componentsNumberAll ))
590
595
)[transitionEstimate * (1 : (componentsNumberAll ^ 2 ))],
591
596
paste0(" w" ,1 : componentsNumber )[measurementEstimate * (1 : componentsNumber )],
592
- paste0(" vt" ,1 : sum(orders %*% lags ))[initialEstimate * (initialType == " optimal" )* (1 : sum(orders %*% lags ))],
597
+ paste0(" vt" ,1 : sum(initialsNumber ))[initialEstimate * (initialType == " optimal" )* (1 : sum(initialsNumber ))],
593
598
xregNames [(1 : xregNumber )* initialXregEstimate * (initialType != " complete" )]);
594
599
595
600
nCoefficients <- 0 ;
@@ -824,7 +829,7 @@ gum <- function(data, orders=c(1,1), lags=c(1,frequency(data)), type=c("additive
824
829
# }
825
830
826
831
# if(initialType=="optimal"){
827
- # parametersNumber[1,1] <- (parametersNumber[1,1] + orders %*% lags );
832
+ # parametersNumber[1,1] <- (parametersNumber[1,1] + initialsNumber );
828
833
# }
829
834
}
830
835
if (xregModel ){
@@ -864,12 +869,6 @@ gum <- function(data, orders=c(1,1), lags=c(1,frequency(data)), type=c("additive
864
869
matVt <- zoo(t(matVt ), order.by = yStatesIndex );
865
870
}
866
871
867
- # #### Make a plot #####
868
- if (! silent ){
869
- graphmaker(actuals = y ,forecast = yForecast ,fitted = yFitted ,
870
- legend = FALSE ,main = modelname );
871
- }
872
-
873
872
# Transform everything into appropriate classes
874
873
if (any(yClasses == " ts" )){
875
874
yInSample <- ts(yInSample ,start = yStart , frequency = yFrequency );
@@ -899,6 +898,11 @@ gum <- function(data, orders=c(1,1), lags=c(1,frequency(data)), type=c("additive
899
898
errormeasures <- NULL ;
900
899
}
901
900
901
+ if (! silent ){
902
+ graphmaker(actuals = y ,forecast = yForecast ,fitted = yFitted ,
903
+ legend = FALSE ,main = modelname );
904
+ }
905
+
902
906
# #### Return values #####
903
907
modelReturned <- list (model = modelname , timeElapsed = Sys.time()- startTime ,
904
908
call = cl , orders = orders , lags = lags , type = type ,
0 commit comments