From 287ac82dea0ea52bfbe560da2b4cdbf3a106a371 Mon Sep 17 00:00:00 2001 From: Eli Holmes Date: Fri, 19 May 2023 20:09:48 -0700 Subject: [PATCH 1/3] fix href --- NEWS.md | 6 +++++- man/MARSSkf.Rd | 2 +- man/accuracy_marssMLE.Rd | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/NEWS.md b/NEWS.md index 6e648b1..5356139 100644 --- a/NEWS.md +++ b/NEWS.md @@ -2,7 +2,11 @@ output: html_document --- -# MARSS 3.11.7 (GitHub) +# MARSS 3.11.7 (CRAN) + +This combines the changes in GitHub releases 3.11.7 and 3.11.6. + +# MARSS 3.11.7 (GitHub 2023-05-19) This release is focused on moving the MARSS User Guide and derivation files into a `inst/userguide` and `inst/derivations` along with Makefiles to build. This will facilitate updating MARSS and converting the User Guide to an eBook. diff --git a/man/MARSSkf.Rd b/man/MARSSkf.Rd index 019bffa..c5a03de 100644 --- a/man/MARSSkf.Rd +++ b/man/MARSSkf.Rd @@ -67,7 +67,7 @@ Ghahramani, Z. and Hinton, G.E. (1996) Parameter estimation for linear dynamical Holmes, E. E. (2012). Derivation of the EM algorithm for constrained and unconstrained multivariate autoregressive state-space (MARSS) models. Technical Report. arXiv:1302.3919 [stat.ME] \code{RShowDoc("EMDerivation",package="MARSS")} to open a copy. -Jouni Helske (2012). KFAS: Kalman filter and smoother for exponential family state space models. \href{https://CRAN.R-project.org/package=KFAS} +Jouni Helske (2012). KFAS: Kalman filter and smoother for exponential family state space models. \href{https://CRAN.R-project.org/package=KFAS}{https://CRAN.R-project.org/package=KFAS} Koopman, S.J. and Durbin J. (2000). Fast filtering and smoothing for non-stationary time series models, Journal of American Statistical Association, 92, 1630-38. diff --git a/man/accuracy_marssMLE.Rd b/man/accuracy_marssMLE.Rd index a29eaac..b6bd4d6 100644 --- a/man/accuracy_marssMLE.Rd +++ b/man/accuracy_marssMLE.Rd @@ -50,5 +50,5 @@ accuracy(fr, x=test.dat) \references{ Hyndman, R.J. and Koehler, A.B. (2006) "Another look at measures of forecast accuracy". International Journal of Forecasting, 22(4), 679-688. -Hyndman, R.J. and Athanasopoulos, G. (2018) "Forecasting: principles and practice", 2nd ed., OTexts, Melbourne, Australia. Section 3.4 "Evaluating forecast accuracy". \href{https://otexts.org/fpp2/accuracy.html}. +Hyndman, R.J. and Athanasopoulos, G. (2018) "Forecasting: principles and practice", 2nd ed., OTexts, Melbourne, Australia. Section 3.4 "Evaluating forecast accuracy". \href{https://otexts.org/fpp2/accuracy.html}{https://otexts.org/fpp2/accuracy.html}. } \ No newline at end of file From cbbf28c86b6324c12c0eaf04fa6f1b2e35496c2b Mon Sep 17 00:00:00 2001 From: Eli Holmes Date: Fri, 19 May 2023 20:42:04 -0700 Subject: [PATCH 2/3] more minor cleaning --- cran-comments.md | 27 +- inst/DEVELOPER_NOTES.md | 6 +- inst/Makefile | 4 +- inst/doc/Chapter_AnimalTracking.R | 349 +++ inst/doc/Chapter_CombiningTrendData.R | 159 ++ inst/doc/Chapter_Covariates.R | 368 +++ inst/doc/Chapter_DFA.R | 467 ++++ inst/doc/Chapter_KFAS.R | 897 +++++++ inst/doc/Chapter_MARp.R | 357 +++ inst/doc/Chapter_MLR.R | 354 +++ inst/doc/Chapter_PVA.R | 167 ++ inst/doc/Chapter_SealPopStructure.R | 300 +++ inst/doc/Chapter_SealTrend.R | 110 + inst/doc/Chapter_SpeciesInteractions.R | 407 +++ inst/doc/Chapter_StructuralBreaks.R | 166 ++ inst/doc/Chapter_Structural_TS.R | 629 +++++ inst/doc/Chapter_UnivariateDLM.R | 195 ++ inst/doc/Chapter_inits.R | 222 ++ inst/doc/EMDerivation.Rnw | 3149 ++++++++++++++++++++++++ inst/doc/EMDerivation.pdf | Bin 0 -> 472136 bytes inst/doc/Quick_Examples.R | 307 +++ inst/doc/Residuals.Rnw | 804 ++++++ inst/doc/Residuals.pdf | Bin 0 -> 184552 bytes man/accuracy_marssMLE.Rd | 2 +- vignettes/Learning_MARSS.Rmd | 2 +- 25 files changed, 9424 insertions(+), 24 deletions(-) create mode 100644 inst/doc/Chapter_AnimalTracking.R create mode 100644 inst/doc/Chapter_CombiningTrendData.R create mode 100644 inst/doc/Chapter_Covariates.R create mode 100644 inst/doc/Chapter_DFA.R create mode 100644 inst/doc/Chapter_KFAS.R create mode 100644 inst/doc/Chapter_MARp.R create mode 100644 inst/doc/Chapter_MLR.R create mode 100644 inst/doc/Chapter_PVA.R create mode 100644 inst/doc/Chapter_SealPopStructure.R create mode 100644 inst/doc/Chapter_SealTrend.R create mode 100644 inst/doc/Chapter_SpeciesInteractions.R create mode 100644 inst/doc/Chapter_StructuralBreaks.R create mode 100644 inst/doc/Chapter_Structural_TS.R create mode 100644 inst/doc/Chapter_UnivariateDLM.R create mode 100644 inst/doc/Chapter_inits.R create mode 100644 inst/doc/EMDerivation.Rnw create mode 100644 inst/doc/EMDerivation.pdf create mode 100644 inst/doc/Quick_Examples.R create mode 100644 inst/doc/Residuals.Rnw create mode 100644 inst/doc/Residuals.pdf diff --git a/cran-comments.md b/cran-comments.md index 976a08e..9a0ecc0 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -1,3 +1,9 @@ +## Tested on OS + +* `rhub::check_for_cran()` +* M1 MacBook +* R versions 4.3 and 4.2 + ## R CMD check results 0 errors | 0 warnings | 3 notes @@ -7,22 +13,13 @@ sub-directories of 1Mb or more: doc 4.6Mb -* checking DESCRIPTION meta-information ... NOTE - Maintainer field differs from that derived from Authors@R - Maintainer: ‘Elizabeth Holmes - NOAA Federal ’ - Authors@R: ‘Elizabeth Eli Holmes ’ - -For auto-check of the email that submission comes from, I use the form that my work email uses. - -* checking CRAN incoming feasibility ... NOTE - Maintainer: ‘Elizabeth Holmes - NOAA Federal ’ * Suggests or Enhances not in mainstream repositories: marssTMB Availability using Additional_repositories specification: marssTMB yes https://atsa-es.r-universe.dev - This is correct. +This is correct. ─ checking CRAN incoming feasibility ... [20s] NOTE Maintainer: 'Elizabeth Eli Holmes ' @@ -32,13 +29,9 @@ For auto-check of the email that submission comes from, I use the form that my w Old maintainer(s): Elizabeth Holmes - NOAA Federal - Correct. - - Possibly misspelled words in DESCRIPTION: - TMB (23:89) - marssTMB (24:16) - - +Correct. I changed to using Authors@R format + + ## revdepcheck results We checked 2 reverse dependencies, comparing R CMD check results across CRAN and dev versions of this package. diff --git a/inst/DEVELOPER_NOTES.md b/inst/DEVELOPER_NOTES.md index 90dfc66..7fa701a 100644 --- a/inst/DEVELOPER_NOTES.md +++ b/inst/DEVELOPER_NOTES.md @@ -154,6 +154,8 @@ These are the tests in `tests/testthat`. All should pass but some give warnings. cd inst make ``` +However I usually run it one target at a time. + Now using the final tar.gz file do the final tests. @@ -165,10 +167,6 @@ rm -r ~/Dropbox/MARSS.Rcheck R CMD check --timings --as-cran MARSS_3.11.7.tar.gz ``` - -However I usually run it one target at a time. - - ## Check on other OS * [ ] `devtools::check_win_devel()` diff --git a/inst/Makefile b/inst/Makefile index 8c63c36..4d60220 100644 --- a/inst/Makefile +++ b/inst/Makefile @@ -24,12 +24,14 @@ build: rm -r -f ${tmpdir}/MARSS rm -f ${tmpdir}/MARSS_${version}.tar.gz cp -p $(GitHubdir)/MARSS_${version}.tar.gz ${tmpdir}/MARSS_${version}.tar.gz + cd $(tmpdir) && tar -xvzf ${tmpdir}/MARSS_${version}.tar.gz movetodoc: - cd $(tmpdir) && tar -xvzf ${tmpdir}/MARSS_${version}.tar.gz rm -f ${tmpdir}/MARSS/inst/doc/*.pdf cp -a -p ${GitHubdir}/MARSS/inst/derivations/doc/*.pdf ${tmpdir}/MARSS/inst/doc cp -a -p ${GitHubdir}/MARSS/inst/userguide/doc/. $(tmpdir)/MARSS/inst/doc/ + cp -a -p ${GitHubdir}/MARSS/inst/derivations/doc/. ${GitHubdir}/MARSS/inst/doc/ + cp -a -p ${GitHubdir}/MARSS/inst/userguide/doc/. $(GitHubdir)/MARSS/inst/doc/ rebuild: cd $(tmpdir) && R CMD build --no-build-vignettes MARSS diff --git a/inst/doc/Chapter_AnimalTracking.R b/inst/doc/Chapter_AnimalTracking.R new file mode 100644 index 0000000..e87bd84 --- /dev/null +++ b/inst/doc/Chapter_AnimalTracking.R @@ -0,0 +1,349 @@ +################################################### +### code chunk number 2: Cs00_required_libraries +################################################### +library(MARSS) +library(maps) + + +################################################### +### code chunk number 3: Cs01_data2 +################################################### +loggerheadNoisy[1:6, ] + + +################################################### +### code chunk number 4: Cs02_turtles2 +################################################### +turtles <- levels(loggerheadNoisy$turtle) +turtles + + +################################################### +### code chunk number 5: Cs03_data3 +################################################### +turtlename <- "BigMama" +theTurtle <- which(loggerheadNoisy$turtle == turtlename) +dat <- loggerheadNoisy[theTurtle, 5:6] +dat <- t(dat) # transpose + + +################################################### +### code chunk number 6: Cs04_fig-code +################################################### +# load the map package; you have to install it first +library(maps) +# Read in our noisy data (no missing values) +pdat <- loggerheadNoisy # for plotting +turtlename <- "BigMama" +theTurtle <- which(loggerheadNoisy$turtle == turtlename) +par(mai = c(0, 0, 0, 0), mfrow = c(1, 1)) +map("state", + region = c( + "florida", "georgia", "south carolina", + "north carolina", "virginia", "delaware", "new jersey", "maryland" + ), + xlim = c(-85, -70) +) +points(pdat$lon[theTurtle], pdat$lat[theTurtle], + col = "blue", pch = 21, cex = 0.7 +) + + +################################################### +### code chunk number 7: Cs05_badtagfig +################################################### +# load the map package; you have to install it first +library(maps) +# Read in our noisy data (no missing values) +pdat <- loggerheadNoisy # for plotting +turtlename <- "BigMama" +par(mai = c(0, 0, 0, 0), mfrow = c(1, 1)) +map("state", region = c( + "florida", "georgia", "south carolina", "north carolina", + "virginia", "delaware", "new jersey", "maryland" +), xlim = c(-85, -70)) +points(pdat$lon[which(pdat$turtle == turtlename)], pdat$lat[which(pdat$turtle == turtlename)], + col = "blue", pch = 21, cex = 0.7 +) + + +################################################### +### code chunk number 8: Cs06_setup2 +################################################### +Z.model <- "identity" +U.model <- "unequal" +Q.model <- "diagonal and unequal" +R.model <- "diagonal and unequal" + + +################################################### +### code chunk number 9: Cs07_fitmodel +################################################### +kem <- MARSS(dat, model = list( + Z = Z.model, + Q = Q.model, R = R.model, U = U.model +)) + + +################################################### +### code chunk number 10: Cs08_code-to-plot +################################################### +# Code to plot estimated turtle track against observations +# The estimates +pred.lon <- kem$states[1, ] +pred.lat <- kem$states[2, ] + +par(mai = c(0, 0, 0, 0), mfrow = c(1, 1)) +library(maps) +pdat <- loggerheadNoisy +turtlename <- "BigMama" +map("state", + region = c( + "florida", "georgia", "south carolina", + "north carolina", "virginia", "delaware", "new jersey", "maryland" + ), + xlim = c(-85, -70) +) +points(pdat$lon[theTurtle], pdat$lat[theTurtle], + col = "blue", pch = 21, cex = 0.7 +) +lines(pred.lon, pred.lat, col = "red", lwd = 2) + +goodturtles <- loggerhead +gooddat <- goodturtles[which(goodturtles$turtle == turtlename), 5:6] +points(gooddat[, 1], gooddat[, 2], col = "black", lwd = 2, pch = 3, cex = 1.1) +legend("bottomright", c( + "bad locations", "estimated true location", + "good location data" +), +pch = c(1, -1, 3), lty = c(-1, 1, -1), +col = c("blue", "red", "black"), bty = FALSE +) + + +################################################### +### code chunk number 11: Cs09_figbigmama +################################################### +# Code to plot estimated turtle track against observations +# The estimates +pred.lon <- kem$states[1, ] +pred.lat <- kem$states[2, ] + +par(mai = c(0, 0, 0, 0), mfrow = c(1, 1)) +library(maps) +pdat <- loggerheadNoisy +turtlename <- "BigMama" +map("state", region = c( + "florida", "georgia", "south carolina", "north carolina", + "virginia", "delaware", "new jersey", "maryland" +), xlim = c(-85, -70)) +points(pdat$lon[which(pdat$turtle == turtlename)], + pdat$lat[which(pdat$turtle == turtlename)], + col = "blue", pch = 21, cex = 0.7 +) +lines(pred.lon, pred.lat, col = "red", lwd = 2) + +goodturtles <- loggerhead +gooddat <- goodturtles[which(goodturtles$turtle == turtlename), 5:6] +points(gooddat[, 1], gooddat[, 2], + col = "black", lwd = 2, pch = 3, cex = 1.1 +) +legend("bottomright", c( + "bad locations", "estimated true location", + "good location data" +), +pch = c(1, -1, 3), lty = c(-1, 1, -1), +col = c("blue", "red", "black"), bty = FALSE +) + + +################################################### +### code chunk number 12: Cs09b_GCDF +################################################### +GCDF <- function(lon1, lon2, lat1, lat2, degrees = TRUE, units = "miles") { + temp <- ifelse(degrees == FALSE, + acos(sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon2 - lon1)), + acos(sin(lat1 / 57.2958) * sin(lat2 / 57.2958) + + cos(lat1 / 57.2958) * cos(lat2 / 57.2958) * + cos(lon2 / 57.2958 - lon1 / 57.2958)) + ) + r <- 3963.0 # (statute miles) , default + if ("units" == "nm") r <- 3437.74677 # (nautical miles) + if ("units" == "km") r <- 6378.7 # (kilometers) + return(r * temp) +} + + +################################################### +### code chunk number 13: Cs10_distance (eval = FALSE) +################################################### +## distance[i - 1] <- GCDF( +## pred.lon[i - 1], pred.lon[i], +## pred.lat[i - 1], pred.lat[i] +## ) + + +################################################### +### code chunk number 14: Cs11_distance2 +################################################### +distance <- array(NA, dim = c(dim(dat)[2] - 1, 1)) +for (i in 2:dim(dat)[2]) { + distance[i - 1] <- GCDF( + pred.lon[i - 1], pred.lon[i], + pred.lat[i - 1], pred.lat[i] + ) +} + + +################################################### +### code chunk number 15: Cs13_disfig +################################################### +par(mfrow = c(1, 1)) +hist(distance) # make a histogram of distance traveled per day + + +################################################### +### code chunk number 16: Cs14_disfig2 +################################################### +# Compare to the distance traveled per day if you used the raw data +distance.noerr <- array(NA, dim = c(dim(dat)[2] - 1, 1)) +for (i in 2:dim(dat)[2]) { + distance.noerr[i - 1] <- GCDF(dat[1, i - 1], dat[1, i], dat[2, i - 1], dat[2, i]) +} +hist(distance.noerr) # make a histogram of distance traveled per day + + +################################################### +### code chunk number 17: Cs15_mean.miles +################################################### +# accounting for observation error +mean(distance) +# assuming the data have no observation error +mean(distance.noerr) + + +################################################### +### code chunk number 18: Cs16_turt-names +################################################### +levels(loggerheadNoisy$turtle) + + +################################################### +### code chunk number 20: Cs18_code +################################################### +############################################################### +# GCDF FUNCTION +# This function converts units of degrees lat/lon to miles, +# nautical miles, or kilometers +############################################################### +GCDF <- function(lon1, lon2, lat1, lat2, degrees = TRUE, units = "miles") { + # This is the function for the Great Circle Distance Formula + # using decimal degrees or radians + # Calculations at: http://www.nhc.noaa.gov/gccalc.shtml + # This first component is only dependent on degrees or radians + temp <- ifelse(degrees == FALSE, acos(sin(lat1) * + sin(lat2) + cos(lat1) * cos(lat2) * cos(lon2 - lon1)), + acos(sin(lat1 / 57.2958) * sin(lat2 / 57.2958) + cos(lat1 / 57.2958) + * cos(lat2 / 57.2958) * cos(lon2 / 57.2958 - lon1 / 57.2958)) + ) + r <- 3963.0 # (statute miles) , default + if ("units" == "nm") r <- 3437.74677 # (nautical miles) + if ("units" == "km") r <- 6378.7 # (kilometers) + return(r * temp) +} + +library(maps) # must be installed from CRAN + +# our noisy data (with no missing values) +turtles <- levels(loggerheadNoisy$turtle) +levels(loggerheadNoisy$turtle) + +############## SPECIFY THE TURTLE NAME HERE +turtlename <- "BigMama" + +dat <- loggerheadNoisy[which(loggerheadNoisy$turtle == turtlename), 5:6] +dat <- t(dat) + +# Set up the MSSM model +# We are going to make a big approximation: +# We are going to pretend that 1 deg longitude +# change is equal to about the same distance (miles) +# over the range of latitudes that the turtles are moving +# That's not true. There is about a 10% difference across +# their range of latitude movement. +Q.model <- "diagonal and unequal" +R.model <- "diagonal and unequal" +U.model <- "unequal" +Z.model <- "identity" + +# Fit a random walk model for lon/lat to the lon/lat data +kem <- MARSS(dat, model = list( + Z = Z.model, + Q = Q.model, R = R.model, U = U.model +)) +pred.lon <- kem$states[1, ] +pred.lat <- kem$states[2, ] + +########################################## +# Plot the results +########################################## +op <- par(mai = c(0, 0, 0, 0)) +map("state", region = c( + "florida", "georgia", + "south carolina", "north carolina", "virginia", + "delaware", "new jersey", "maryland" +), xlim = c(-85, -65)) +points(loggerheadNoisy$lon[which(loggerheadNoisy$turtle == turtlename)], + loggerheadNoisy$lat[which(loggerheadNoisy$turtle == turtlename)], + col = "blue", pch = 21, cex = 0.7 +) +lines(pred.lon, pred.lat, col = "red", lwd = 2) + +# add the good location data +goodturtles <- loggerhead +gooddat <- goodturtles[which(goodturtles$turtle == turtlename), 5:6] +points(gooddat[, 1], gooddat[, 2], col = "black", lwd = 2, pch = 3, cex = 1.1) +legend("bottomright", c("bad locations", "estimated true location", "good location data"), pch = c(1, -1, 3), lty = c(-1, 1, -1), col = c("blue", "red", "black"), bty = F) + +# add the proposed fishery areas +lines(c(-77, -78, -78, -77, -77), c(33.5, 33.5, 32.5, 32.5, 33.5), + col = "red", lwd = 2 +) +lines(c(-75, -76, -76, -75, -75), c(38, 38, 37, 37, 38), + col = "red", lwd = 2 +) + +########################################### +# Calculate the average miles traveled each day using +# the function GCDF defined above +# You must select and run the GCDF code first +########################################### +distance <- array(NA, dim = c(dim(dat)[2] - 1, 1)) +for (i in 2:dim(dat)[2]) { + distance[i - 1] <- GCDF( + pred.lon[i - 1], pred.lon[i], + pred.lat[i - 1], pred.lat[i] + ) +} + +par(op) # reset plotting pars back to normal +par(mfrow = c(1, 2)) # make a 2 panel graph +hist(distance) # make a histogram of distance traveled per day +print(paste( + "KalmanEM estimate of ave. mile per day for ", + turtlename, " = ", mean(distance) +)) + +# Compare to the distance traveled per day if you used the raw data +distance <- array(NA, dim = c(dim(dat)[2] - 1, 1)) +for (i in 2:dim(dat)[2]) { + distance[i - 1] <- GCDF(dat[1, i - 1], dat[1, i], dat[2, i - 1], dat[2, i]) +} +hist(distance) # make a histogram of distance traveled per day +mean(distance) +print(paste( + "Raw estimate of ave. mile per day for ", + turtlename, " = ", mean(distance) +)) + + diff --git a/inst/doc/Chapter_CombiningTrendData.R b/inst/doc/Chapter_CombiningTrendData.R new file mode 100644 index 0000000..f67c64c --- /dev/null +++ b/inst/doc/Chapter_CombiningTrendData.R @@ -0,0 +1,159 @@ +################################################### +### code chunk number 2: Cs000_required_libraries +################################################### +library(MARSS) + + +################################################### +### code chunk number 3: Cs001_readinredddata +################################################### +head(okanaganRedds) +logRedds <- log(t(okanaganRedds)[c("aerial", "ground"), ]) + + +################################################### +### code chunk number 4: Cs002_fig1 +################################################### +# Code for plotting raw Okanagan redd counts +plot(okanaganRedds[, 1], okanaganRedds[, 2], + xlab = "", ylab = "Redd counts", main = "", col = "red", pch = 1 +) +points(okanaganRedds[, 1], okanaganRedds[, 3], col = "blue", pch = 2) +legend("topleft", + inset = 0.1, legend = c("Aerial survey", "Ground survey"), + col = c("red", "blue"), pch = c(1, 2) +) + + +################################################### +### code chunk number 5: Cs003_reddmodel1 +################################################### +model1 <- list() +model1$R <- "diagonal and equal" +model1$Z <- matrix(1, 2, 1) +model1$A <- "scaling" +kem1 <- MARSS(logRedds, model = model1) + + +################################################### +### code chunk number 6: Cs004_reddmodel2 +################################################### +model2 <- model1 # model2 is based on model1 +model2$R <- "diagonal and unequal" +kem2 <- MARSS(logRedds, model = model2) + + +################################################### +### code chunk number 7: Cs005_reddmodel3 +################################################### +model3 <- list() +model3$Q <- "diagonal and equal" +model3$R <- "diagonal and equal" +model3$U <- "equal" +model3$Z <- "identity" +model3$A <- "zero" +kem3 <- MARSS(logRedds, model = model3) + + +################################################### +### code chunk number 8: Cs005b_aic +################################################### +c(mod1 = kem1$AICc, mod2 = kem2$AICc, mod3 = kem3$AICc) + + +################################################### +### code chunk number 9: Cs006_fig2 +################################################### +# Code for plotting the fit from the best model +plot(okanaganRedds[, 1], logRedds[1, ], xlab = "", ylab = "Redd counts", + main = "", col = "red", ylim = c(0, 8) +) +points(okanaganRedds[, 1], logRedds[2, ], col = "blue", pch = 2) +lines(okanaganRedds[, 1], c(kem1$states), lty = 1, lwd = 2) +lines(okanaganRedds[, 1], c(kem1$states + 2 * kem1$states.se), lty = 1, lwd = 1, col = "grey40") +lines(okanaganRedds[, 1], c(kem1$states - 2 * kem1$states.se), lty = 1, lwd = 1, col = "grey40") + + +################################################### +### code chunk number 26: Cs007_birddata +################################################### +birddat <- t(kestrel[, c("British.Columbia", "Alberta", "Saskatchewan")]) +head(kestrel) + + +################################################### +### code chunk number 27: Cs008_plot-bird-data +################################################### +# Make a plot of the three time series +plot(kestrel[, 1], kestrel[, 2], xlab = "", ylab = "Index of kestrel abundance", main = "", col = "red", ylim = c(0, 2), pch = 21) +points(kestrel[, 1], kestrel[, 3], col = "blue", pch = 22) +points(kestrel[, 1], kestrel[, 4], col = "purple", pch = 25) +legend("topright", inset = 0.1, legend = c("British Columbia", "Alberta", "Saskatchewan"), col = c("red", "blue", "purple"), pch = c(21, 22, 25)) + + +################################################### +### code chunk number 28: Cs009_fit-bird-model-1 +################################################### +model.b1=list() +model.b1$R="diagonal and equal" +model.b1$Z=matrix(1,3,1) +kem.b1 = MARSS(birddat, model=model.b1, control=list(minit=100) ) + + +################################################### +### code chunk number 29: Cs011_fit-bird-model-2 +################################################### +model.b2 <- list() +model.b2$Q <- "diagonal and equal" +model.b2$R <- "diagonal and equal" +model.b2$Z <- "identity" +model.b2$A <- "zero" +model.b2$U <- "equal" +kem.b2 <- MARSS(birddat, model = model.b2) + + +################################################### +### code chunk number 30: Cs013_fit-bird-model-3 +################################################### +model.b3 <- model.b2 # is is based on model.b2 +# all we change is the structure of Q +model.b3$Q <- "diagonal and unequal" +model.b3$U <- "unequal" +kem.b3 <- MARSS(birddat, model = model.b3) + + +################################################### +### code chunk number 31: Cs015_fit-bird-model-4 +################################################### +model.b4 <- list() +model.b4$Q <- "diagonal and unequal" +model.b4$R <- "diagonal and equal" +model.b4$Z <- factor(c("BC", "AB-SK", "AB-SK")) +model.b4$A <- "scaling" +model.b4$U <- "unequal" +kem.b4 <- MARSS(birddat, model = model.b4) + + +################################################### +### code chunk number 32: Cs016_aics +################################################### +c(mod1 = kem.b1$AICc, mod2 = kem.b2$AICc, + mod3 = kem.b3$AICc, mod4 = kem.b4$AICc) + + +################################################### +### code chunk number 33: Cs017_plot-bird-model-4-fits +################################################### +# Make a plot of the predicted trajectory, confidence intervals, and the raw data in log-space +plot(kestrel[, 1], kestrel[, 2], xlab = "", ylab = "Index of kestrel abundance", + main = "", col = "red", ylim = c(0, 2), pch = 21) +points(kestrel[, 1], kestrel[, 3], col = "blue", pch = 22) +points(kestrel[, 1], kestrel[, 4], col = "purple", pch = 25) +lines(kestrel[, 1], c(kem.b4$states[1, ]), lty = 3, lwd = 2, col = "red") +lines(kestrel[, 1], c(kem.b4$states[2, ]), lty = 3, lwd = 2, col = "blue") +lines(kestrel[, 1], c(kem.b4$states[2, ] + coef(kem.b4, type = "matrix")$A[3, 1]), + lty = 3, lwd = 2, col = "purple") +legend("topright", inset = 0.1, legend = c("British Columbia", "Alberta", "Saskatchewan"), + col = c("red", "blue", "purple"), pch = c(21, 22, 25)) + + diff --git a/inst/doc/Chapter_Covariates.R b/inst/doc/Chapter_Covariates.R new file mode 100644 index 0000000..606d9bd --- /dev/null +++ b/inst/doc/Chapter_Covariates.R @@ -0,0 +1,368 @@ +################################################### +### code chunk number 2: Covar_sec0_required_libraries +################################################### +library(MARSS) + + +################################################### +### code chunk number 3: Covar_sec2_1_load-plankton-data +################################################### +fulldat <- lakeWAplanktonTrans +years <- fulldat[, "Year"] >= 1965 & fulldat[, "Year"] < 1975 +dat <- t(fulldat[years, c("Greens", "Bluegreens")]) +the.mean <- apply(dat, 1, mean, na.rm = TRUE) +the.sigma <- sqrt(apply(dat, 1, var, na.rm = TRUE)) +dat <- (dat - the.mean) * (1 / the.sigma) + + +################################################### +### code chunk number 4: Covar_sec2_2_z-score-covar-data +################################################### +covariates <- rbind( + Temp = fulldat[years, "Temp"], + TP = fulldat[years, "TP"] +) +# z.score the covariates +covariates <- zscore(covariates) + + +################################################### +### code chunk number 5: Covar_sec2_3_plot-dat +################################################### +LWA <- ts(cbind(Year = fulldat[years, "Year"], t(dat), t(covariates)), start = c(1965, 1), end = c(1974, 12), freq = 12) +plot.ts(LWA[, c("Greens", "Bluegreens", "Temp", "TP")], main = "", yax.flip = TRUE) + + +################################################### +### code chunk number 6: Covar_sec3_1_covar-model-0 +################################################### +Q <- U <- x0 <- "zero" +B <- Z <- "identity" +d <- covariates +A <- "zero" +D <- "unconstrained" +y <- dat # to show relationship between dat & the equation +model.list <- list( + B = B, U = U, Q = Q, Z = Z, A = A, + D = D, d = d, x0 = x0 +) +kem <- MARSS(y, model = model.list) + + +################################################### +### code chunk number 7: Covar_sec3_2_covar-model-0b +################################################### +Q <- "unconstrained" +B <- "diagonal and unequal" +A <- U <- x0 <- "zero" +R <- "diagonal and equal" +d <- covariates +D <- "unconstrained" +y <- dat +model.list <- list( + B = B, U = U, Q = Q, Z = Z, A = A, + R = R, D = D, d = d, x0 = x0 +) +control.list <- list(maxit = 1500) +kem <- MARSS(y, model = model.list, control = control.list) + + +################################################### +### code chunk number 8: Covar_sec4_1_covar-model-1 +################################################### +R <- A <- U <- "zero" +B <- Z <- "identity" +Q <- "equalvarcov" +C <- "unconstrained" +x <- dat # to show the relation between dat & the equations +model.list <- list( + B = B, U = U, Q = Q, Z = Z, A = A, + R = R, C = C, c = covariates +) +kem <- MARSS(x, model = model.list) + + +################################################### +### code chunk number 9: Covar_sec4_2_covar-model-1c +################################################### +model.list$B <- "diagonal and unequal" +kem <- MARSS(dat, model = model.list) + + +################################################### +### code chunk number 10: Covar_sec5_1_covar-model-5 +################################################### +model.list$R <- diag(0.16, 2) +kem <- MARSS(dat, model = model.list) + + +################################################### +### code chunk number 11: Covar_sec6_01_set-up-seasonal-dat +################################################### +years <- fulldat[, "Year"] >= 1965 & fulldat[, "Year"] < 1975 +phytos <- c( + "Diatoms", "Greens", "Bluegreens", + "Unicells", "Other.algae" +) +dat <- t(fulldat[years, phytos]) + +# z.score data again because we changed the mean when we subsampled +dat <- zscore(dat) +# number of time periods/samples +TT <- ncol(dat) + + +################################################### +### code chunk number 12: Covar_sec6_02_set-up-month-factors +################################################### +# number of "seasons" (e.g., 12 months per year) +period <- 12 +# first "season" (e.g., Jan = 1, July = 7) +per.1st <- 1 +# create factors for seasons +c.in <- diag(period) +for (i in 2:(ceiling(TT / period))) { + c.in <- cbind(c.in, diag(period)) +} +# trim c.in to correct start & length +c.in <- c.in[, (1:TT) + (per.1st - 1)] +# better row names +rownames(c.in) <- month.abb + + +################################################### +### code chunk number 13: Covar_sec6_03_C-constrained +################################################### +C <- matrix(month.abb, 5, 12, byrow = TRUE) +C + + +################################################### +### code chunk number 14: Covar_sec6_04_C-constrained2 +################################################### +C <- "unconstrained" + + +################################################### +### code chunk number 15: Covar_sec6_05_month-factor-marss-params +################################################### +# Each taxon has unique density-dependence +B <- "diagonal and unequal" +# Independent process errors +Q <- "diagonal and unequal" +# We have demeaned the data & are fitting a mean-reverting model +# by estimating a diagonal B, thus +U <- "zero" +# Each obs time series is associated with only one process +Z <- "identity" +# The data are demeaned & fluctuate around a mean +A <- "zero" +# Observation errors are independent, but they +# have similar variance due to similar collection methods +R <- "diagonal and equal" +# No covariate effects in the obs equation +D <- "zero" +d <- "zero" + + +################################################### +### code chunk number 16: Covar_sec6_06_fit-month-factor-with-MARSS +################################################### +model.list <- list( + B = B, U = U, Q = Q, Z = Z, A = A, R = R, + C = C, c = c.in, D = D, d = d +) +seas.mod.1 <- MARSS(dat, model = model.list, control = list(maxit = 1500)) + +# Get the estimated seasonal effects +# rows are taxa, cols are seasonal effects +seas.1 <- coef(seas.mod.1, type = "matrix")$C +rownames(seas.1) <- phytos +colnames(seas.1) <- month.abb + + +################################################### +### code chunk number 17: Covar_sec6_07_poly-month-factor +################################################### +# number of "seasons" (e.g., 12 months per year) +period <- 12 +# first "season" (e.g., Jan = 1, July = 7) +per.1st <- 1 +# order of polynomial +poly.order <- 3 +# create polynomials of months +month.cov <- matrix(1, 1, period) +for (i in 1:poly.order) { + month.cov <- rbind(month.cov, (1:12)^i) +} +# our c matrix is month.cov replicated once for each year +c.m.poly <- matrix(month.cov, poly.order + 1, TT + period, byrow = FALSE) +# trim c.in to correct start & length +c.m.poly <- c.m.poly[, (1:TT) + (per.1st - 1)] + +# Everything else remains the same as in the previous example +model.list <- list( + B = B, U = U, Q = Q, Z = Z, A = A, R = R, + C = C, c = c.m.poly, D = D, d = d +) +seas.mod.2 <- MARSS(dat, model = model.list, control = list(maxit = 1500)) + + +################################################### +### code chunk number 18: Covar_sec6_08_seasonal-effect-poly +################################################### +C.2 <- coef(seas.mod.2, type = "matrix")$C +seas.2 <- C.2 %*% month.cov +rownames(seas.2) <- phytos +colnames(seas.2) <- month.abb + + +################################################### +### code chunk number 19: Covar_sec6_09_seasonal-fourier +################################################### +cos.t <- cos(2 * pi * seq(TT) / period) +sin.t <- sin(2 * pi * seq(TT) / period) +c.Four <- rbind(cos.t, sin.t) + + +################################################### +### code chunk number 20: Covar_sec6_10_seasonal-fourier-fit +################################################### +model.list <- list( + B = B, U = U, Q = Q, Z = Z, A = A, R = R, + C = C, c = c.Four, D = D, d = d +) +seas.mod.3 <- MARSS(dat, model = model.list, control = list(maxit = 1500)) + + +################################################### +### code chunk number 21: Covar_sec6_11_seasonal-effects-fourier +################################################### +C.3 <- coef(seas.mod.3, type = "matrix")$C +# The time series of net seasonal effects +seas.3 <- C.3 %*% c.Four[, 1:period] +rownames(seas.3) <- phytos +colnames(seas.3) <- month.abb + + +################################################### +### code chunk number 22: Covar_sec6_12_plot-seas-effects +################################################### +par(mfrow = c(3, 1), mar = c(2, 4, 2, 2)) +graphics::matplot(t(seas.1), type = "l", bty = "n", xaxt = "n", ylab = "Fixed monthly", col = 1:5) +axis(1, labels = month.abb, at = 1:12, las = 2, cex.axis = 0.75) +legend("topright", lty = 1:5, legend = phytos, cex = 0.6, col = 1:5) + +graphics::matplot(t(seas.2), type = "l", bty = "n", xaxt = "n", ylab = "Cubic", col = 1:5) +axis(1, labels = month.abb, at = 1:12, las = 2, cex.axis = 0.75) +legend("topright", lty = 1:5, legend = phytos, cex = 0.6, col = 1:5) + +graphics::matplot(t(seas.3), type = "l", bty = "n", xaxt = "n", ylab = "Fourier", col = 1:5) +axis(1, labels = month.abb, at = 1:12, las = 2, cex.axis = 0.75) +legend("topright", lty = 1:5, legend = phytos, cex = 0.6, col = 1:5) + + +################################################### +### code chunk number 23: Covar_sec6_13_show-aics +################################################### +data.frame( + Model = c("Fixed", "Cubic", "Fourier"), + AICc = round(c( + seas.mod.1$AICc, + seas.mod.2$AICc, + seas.mod.3$AICc + ), 1), + stringsAsFactors = FALSE +) + + +################################################### +### code chunk number 24: Covar_sec7_01_diag-code (eval = FALSE) +################################################### +## for (i in 1:3) { +## dev.new() +## modn <- paste("seas.mod", i, sep = ".") +## for (j in 1:5) { +## plot.ts(MARSSresiduals(modn, type = "tt1")$model.residuals[j, ], +## ylab = "Residual", main = phytos[j] +## ) +## abline(h = 0, lty = "dashed") +## acf(MARSSresiduals(modn, type = "tt1")$model.residuals[j, ], +## na.action = na.pass +## ) +## } +## } + + +################################################### +### code chunk number 25: Covar_sec7_02_plot-acf-1 +################################################### +par(mfrow = c(5, 2), mai = c(0.1, 0.5, 0.2, 0.1), omi = c(0.5, 0, 0, 0)) +for (i in 1:5) { + plot.ts(MARSSresiduals(seas.mod.1, type = "tt1")$model.residuals[i, ], + ylab = "Residual", main = phytos[i], xlab = "", xaxt = "n" + ) + abline(h = 0, lty = "dashed") + if (i == 5) { + axis(1, + at = 1 + seq(0, TT - period, by = 12), + labels = seq(fulldat[years, "Year"][1], fulldat[years, "Year"][TT]) + ) + mtext(side = 1, line = 2.7, "Time") + } + acf(MARSSresiduals(seas.mod.1, type = "tt1")$model.residuals[i, ], lag.max = period, na.action = na.pass) + if (i == 5) { + axis(1, at = c(0, seq(period))) + mtext(side = 1, line = 2.7, "Time lag") + } +} + + +################################################### +### code chunk number 26: Covar_sec7_03_plot-acf-2 +################################################### +par(mfrow = c(5, 2), mai = c(0.1, 0.5, 0.2, 0.1), omi = c(0.5, 0, 0, 0)) +for (i in 1:5) { + plot.ts(MARSSresiduals(seas.mod.2, type = "tt1")$model.residuals[i, ], + ylab = "Residual", main = phytos[i], xlab = "", xaxt = "n" + ) + abline(h = 0, lty = "dashed") + if (i == 5) { + axis(1, + at = 1 + seq(0, TT - period, by = 12), + labels = seq(fulldat[years, "Year"][1], fulldat[years, "Year"][TT]) + ) + mtext(side = 1, line = 2.7, "Time") + } + acf(MARSSresiduals(seas.mod.2, type = "tt1")$model.residuals[i, ], lag.max = period, na.action = na.pass) + if (i == 5) { + axis(1, at = c(0, seq(period))) + mtext(side = 1, line = 2.7, "Time lag") + } +} + + +################################################### +### code chunk number 27: Covar_sec7_04_plot-acf-2 +################################################### +par(mfrow = c(5, 2), mai = c(0.1, 0.5, 0.2, 0.1), omi = c(0.5, 0, 0, 0)) +for (i in 1:5) { + plot.ts(MARSSresiduals(seas.mod.3, type = "tt1")$model.residuals[i, ], + ylab = "Residual", main = phytos[i], xlab = "", xaxt = "n" + ) + abline(h = 0, lty = "dashed") + if (i == 5) { + axis(1, + at = 1 + seq(0, TT - period, by = 12), + labels = seq(fulldat[years, "Year"][1], fulldat[years, "Year"][TT]) + ) + mtext(side = 1, line = 2.7, "Time") + } + acf(MARSSresiduals(seas.mod.3, type = "tt1")$model.residuals[i, ], lag.max = period, na.action = na.pass) + if (i == 5) { + axis(1, at = c(0, seq(period))) + mtext(side = 1, line = 2.7, "Time lag") + } +} + + diff --git a/inst/doc/Chapter_DFA.R b/inst/doc/Chapter_DFA.R new file mode 100644 index 0000000..05733aa --- /dev/null +++ b/inst/doc/Chapter_DFA.R @@ -0,0 +1,467 @@ +################################################### +### code chunk number 2: Cs00_required_libraries +################################################### +library(MARSS) +library(xtable) + + +################################################### +### code chunk number 3: Cs01_read_in_data +################################################### +data(lakeWAplankton) +# we want lakeWAplanktonTrans, which has been log-transformed +# and the 0s replaced with NAs +plankdat <- lakeWAplanktonTrans +years <- plankdat[, "Year"] >= 1980 & plankdat[, "Year"] < 1990 +phytos <- c( + "Cryptomonas", "Diatoms", "Greens", + "Unicells", "Other.algae" +) +dat.spp.1980 <- plankdat[years, phytos] + + +################################################### +### code chunk number 4: Cs02_transpose_data +################################################### +# transpose data so time goes across columns +dat.spp.1980 <- t(dat.spp.1980) +N.ts <- nrow(dat.spp.1980) +TT <- ncol(dat.spp.1980) + + +################################################### +### code chunk number 5: Cs03_zscore +################################################### +Sigma <- sqrt(apply(dat.spp.1980, 1, var, na.rm = TRUE)) +y.bar <- apply(dat.spp.1980, 1, mean, na.rm = TRUE) +dat.z <- (dat.spp.1980 - y.bar) * (1 / Sigma) +rownames(dat.z) <- rownames(dat.spp.1980) + + +################################################### +### code chunk number 6: Cs03b_zscore +################################################### +dat.z <- zscore(dat.spp.1980) + + +################################################### +### code chunk number 7: Cs04_plotdata +################################################### +spp <- rownames(dat.spp.1980) +par(mfcol = c(3, 2), mar = c(3, 4, 1.5, 0.5), oma = c(0.4, 1, 1, 1)) +for (i in spp) { + plot(dat.z[i, ], xlab = "", ylab = "Abundance index", bty = "L", xaxt = "n", pch = 16, col = "blue", type = "b") + axis(1, 12 * (0:dim(dat.spp.1980)[2]) + 1, 1980 + 0:dim(dat.spp.1980)[2]) + title(i) +} + + +################################################### +### code chunk number 8: Cs05_setupZ +################################################### +Z.vals <- list( + "z11", 0, 0, + "z21", "z22", 0, + "z31", "z32", "z33", + "z41", "z42", "z43", + "z51", "z52", "z53" +) +Z <- matrix(Z.vals, nrow = N.ts, ncol = 3, byrow = TRUE) + + +################################################### +### code chunk number 9: Cs06_printZ +################################################### +print(Z) + + +################################################### +### code chunk number 10: Cs07_setupQR +################################################### +Q <- B <- diag(1, 3) + + +################################################### +### code chunk number 11: Cs08_setupR +################################################### +R.vals <- list( + "r11", 0, 0, 0, 0, + 0, "r22", 0, 0, 0, + 0, 0, "r33", 0, 0, + 0, 0, 0, "r44", 0, + 0, 0, 0, 0, "r55" +) + +R <- matrix(R.vals, nrow = N.ts, ncol = N.ts, byrow = TRUE) + + +################################################### +### code chunk number 12: Cs09_printR +################################################### +print(R) + + +################################################### +### code chunk number 13: Cs10_setupR_short +################################################### +R <- "diagonal and unequal" + + +################################################### +### code chunk number 14: Cs11_setupU +################################################### +x0 <- U <- matrix(0, nrow = 3, ncol = 1) +A <- matrix(0, nrow = 6, ncol = 1) +x0 <- U <- A <- "zero" + + +################################################### +### code chunk number 15: Cs12_setupx0 +################################################### +V0 <- diag(5, 3) + + +################################################### +### code chunk number 16: Cs13_define_model_list +################################################### +dfa.model <- list( + Z = Z, A = "zero", R = R, B = B, U = U, + Q = Q, x0 = x0, V0 = V0 +) +cntl.list <- list(maxit = 50) + + +################################################### +### code chunk number 17: Cs14_fit_data +################################################### +kemz.3 <- MARSS(dat.z, model = dfa.model, control = cntl.list) + + +################################################### +### code chunk number 20: Cs15_plotfits +################################################### +fit <- kemz.3 +spp <- rownames(dat.z) +par(mfcol = c(3, 2), mar = c(3, 4, 1.5, 0.5), oma = c(0.4, 1, 1, 1)) +for (i in 1:length(spp)) { + plot(dat.z[i, ], xlab = "", ylab = "Abundance index", bty = "L", xaxt = "n", ylim = c(-4, 3), pch = 16, col = "blue") + axis(1, 12 * (0:dim(dat.z)[2]) + 1, 1980 + 0:dim(dat.z)[2]) + par.mat <- coef(fit, type = "matrix") + lines(as.vector(par.mat$Z[i, , drop = FALSE] %*% fit$states + par.mat$A[i, ]), lwd = 2) + title(spp[i]) +} + + +################################################### +### code chunk number 21: Cs16_set_up_two_trends_echo +################################################### +model.list <- list(m = 2, R = "diagonal and unequal") +kemz.2 <- MARSS(dat.spp.1980, + model = model.list, + z.score = TRUE, form = "dfa", control = cntl.list +) + + +################################################### +### code chunk number 23: Cs17_compare_mods_2n3 +################################################### +print(cbind( + model = c("3 trends", "2 trends"), + AICc = round(c(kemz.3$AICc, kemz.2$AICc)) +), +quote = FALSE +) + + +################################################### +### code chunk number 25: Cs18_setupmanytrends_echo (eval = FALSE) +################################################### +## # set new control params +## cntl.list <- list(minit = 200, maxit = 5000, allow.degen = FALSE) +## # set up forms of R matrices +## levels.R <- c( +## "diagonal and equal", +## "diagonal and unequal", +## "equalvarcov", +## "unconstrained" +## ) +## model.data <- data.frame(stringsAsFactors = FALSE) +## # fit lots of models & store results +## # NOTE: this will take a long time to run! +## for (R in levels.R) { +## for (m in 1:(N.ts - 1)) { +## dfa.model <- list(A = "zero", R = R, m = m) +## kemz <- MARSS(dat.z, +## model = dfa.model, control = cntl.list, +## form = "dfa", z.score = TRUE +## ) +## model.data <- rbind( +## model.data, +## data.frame( +## R = R, +## m = m, +## logLik = kemz$logLik, +## K = kemz$num.params, +## AICc = kemz$AICc, +## stringsAsFactors = FALSE +## ) +## ) +## assign(paste("kemz", m, R, sep = "."), kemz) +## } # end m loop +## } # end R loop + + +################################################### +### code chunk number 26: Cs19_makemodeltable +################################################### +# you must run the code to do all the models for this section +if (exists("model.data")) { + # calculate delta-AICc + model.data$delta.AICc <- model.data$AICc - min(model.data$AICc) + # calculate Akaike weights + wt <- exp(-0.5 * model.data$delta.AICc) + model.data$Ak.wt <- wt / sum(wt) + # sort results + model.tbl <- model.data[order(model.data$AICc), -4] + # drop AICc from table + # calculate cumulative wts + model.tbl$Ak.wt.cum <- cumsum(model.tbl$Ak.wt) + model.tbl <- model.tbl[, -4] +} + + +################################################### +### code chunk number 28: Cs20_kem3_R_unconstrained +################################################### +big.maxit.cntl.list <- list(minit = 200, maxit = 5000, allow.degen = FALSE) +model.list <- list(m = 2, R = "unconstrained") +the.fit <- MARSS(dat.z, model = model.list, form = "dfa", + control = big.maxit.cntl.list) + + +################################################### +### code chunk number 29: Cs21_varimax +################################################### +# get the inverse of the rotation matrix +Z.est <- coef(the.fit, type = "matrix")$Z +H.inv <- 1 +if (ncol(Z.est) > 1) + H.inv <- varimax(coef(the.fit, type = "matrix")$Z)$rotmat + + +################################################### +### code chunk number 30: Cs22_rotations +################################################### +# rotate factor loadings +Z.rot <- Z.est %*% H.inv +# rotate trends +trends.rot <- solve(H.inv) %*% the.fit$states + + +################################################### +### code chunk number 31: Cs22_rotations_cis +################################################### +# Add CIs to marssMLE object +the.fit <- MARSSparamCIs(the.fit) +# Use coef() to get the upper and lower CIs +Z.low <- coef(the.fit, type = "Z", what = "par.lowCI") +Z.up <- coef(the.fit, type = "Z", what = "par.upCI") +Z.rot.up <- Z.up %*% H.inv +Z.rot.low <- Z.low %*% H.inv +df <- data.frame( + est = as.vector(Z.rot), + conf.up = as.vector(Z.rot.up), + conf.low = as.vector(Z.rot.low) + ) + + +################################################### +### code chunk number 32: Cs23_plotfacloadings +################################################### +# plot the factor loadings +spp <- rownames(dat.z) +minZ <- 0.05 +m <- dim(trends.rot)[1] +ylims <- c(-1.1 * max(abs(Z.rot)), 1.1 * max(abs(Z.rot))) +par(mfrow = c(ceiling(m / 2), 2), mar = c(3, 4, 1.5, 0.5), oma = c(0.4, 1, 1, 1)) +for (i in 1:m) { + plot(c(1:N.ts)[abs(Z.rot[, i]) > minZ], as.vector(Z.rot[abs(Z.rot[, i]) > minZ, i]), + type = "h", lwd = 2, xlab = "", ylab = "", xaxt = "n", ylim = ylims, xlim = c(0, N.ts + 1) + ) + for (j in 1:N.ts) { + if (Z.rot[j, i] > minZ) { + text(j, -0.05, spp[j], srt = 90, adj = 1, cex = 0.9) + } + if (Z.rot[j, i] < -minZ) { + text(j, 0.05, spp[j], srt = 90, adj = 0, cex = 0.9) + } + abline(h = 0, lwd = 1, col = "gray") + } # end j loop + mtext(paste("Factor loadings on trend", i, sep = " "), side = 3, line = .5) +} # end i loop + + +################################################### +### code chunk number 33: Cs24_plottrends +################################################### +# get ts of trends +ts.trends <- t(trends.rot) +par(mfrow = c(ceiling(dim(ts.trends)[2] / 2), 2), mar = c(3, 4, 1.5, 0.5), oma = c(0.4, 1, 1, 1)) +# loop over each trend +for (i in 1:dim(ts.trends)[2]) { + # set up plot area + plot(ts.trends[, i], + ylim = c(-1.1, 1.1) * max(abs(ts.trends)), + type = "n", lwd = 2, bty = "L", + xlab = "", ylab = "", xaxt = "n", yaxt = "n" + ) + # draw zero-line + abline(h = 0, col = "gray") + # plot trend line + par(new = TRUE) + plot(ts.trends[, i], + ylim = c(-1.1, 1.1) * max(abs(ts.trends)), + type = "l", lwd = 2, bty = "L", + xlab = "", ylab = "", xaxt = "n" + ) + # add panel labels + mtext(paste("Trend", i, sep = " "), side = 3, line = 0.5) + axis(1, 12 * (0:dim(dat.spp.1980)[2]) + 1, 1980 + 0:dim(dat.spp.1980)[2]) +} # end i loop (trends) + + +################################################### +### code chunk number 34: Cs25_func_get_DFA_fits +################################################### +# If there were no missing values, this function will return the fits and CIs +getDFAfits <- function(MLEobj, alpha = 0.05, covariates = NULL) { + fits <- list() + Ey <- MARSShatyt(MLEobj) # for var() calcs + ZZ <- coef(MLEobj, type = "matrix")$Z # estimated Z + nn <- nrow(ZZ) # number of obs ts + mm <- ncol(ZZ) # number of factors/states + TT <- ncol(Ey$ytT) # number of time steps + ## check for covars + if (!is.null(covariates)) { + DD <- coef(MLEobj, type = "matrix")$D + cov_eff <- DD %*% covariates + } else { + cov_eff <- matrix(0, nn, TT) + } + ## model expectation + fits$ex <- ZZ %*% MLEobj$states + cov_eff + ## Var in model fits + VtT <- MARSSkfss(MLEobj)$VtT + VV <- NULL + for (tt in 1:TT) { + RZVZ <- coef(MLEobj, type = "matrix")$R - ZZ %*% VtT[, , tt] %*% t(ZZ) + SS <- Ey$yxtT[, , tt] - Ey$ytT[, tt, drop = FALSE] %*% t(MLEobj$states[, tt, drop = FALSE]) + VV <- cbind(VV, diag(RZVZ + SS %*% t(ZZ) + ZZ %*% t(SS))) + } + SE <- sqrt(VV) + ## upper & lower (1-alpha)% CI + fits$up <- qnorm(1 - alpha / 2) * SE + fits$ex + fits$lo <- qnorm(alpha / 2) * SE + fits$ex + return(fits) +} + + +################################################### +### code chunk number 35: Cs25b_get_DFA_fits +################################################### +fit.b <- getDFAfits(the.fit) + + +################################################### +### code chunk number 36: Cs25c_plotbestfits +################################################### +# plot the fits +ylbl <- rownames(dat.z) +w_ts <- seq(dim(dat.z)[2]) +par(mfcol = c(3, 2), mar = c(3, 4, 1.5, 0.5), oma = c(0.4, 1, 1, 1)) +for (i in 1:N.ts) { + up <- fit.b$up[i, ] + mn <- fit.b$ex[i, ] + lo <- fit.b$lo[i, ] + plot(w_ts, mn, + xlab = "", ylab = ylbl[i], xaxt = "n", type = "n", cex.lab = 1.2, + ylim = c(min(lo), max(up)) + ) + axis(1, 12 * (0:dim(dat.z)[2]) + 1, 1980 + 0:dim(dat.z)[2]) + points(w_ts, dat.z[i, ], pch = 16, col = "blue") + lines(w_ts, up, col = "darkgray") + lines(w_ts, mn, col = "black", lwd = 2) + lines(w_ts, lo, col = "darkgray") +} + + +################################################### +### code chunk number 36: Cs25d_plotwithaugment +################################################### +require(ggplot2) +alpha <- 0.05 +theme_set(theme_bw()) +d <- residuals(the.fit, type = "tT") +d$up <- qnorm(1 - alpha / 2) * d$.sigma + d$.fitted +d$lo <- qnorm(alpha / 2) * d$.sigma + d$.fitted +ggplot(data = subset(d, name=="model")) + + geom_point(aes(t, value)) + + geom_ribbon(aes(x = t, ymin = lo, ymax = up), linetype = 2, alpha = 0.2) + + geom_line(aes(t, .fitted), col="blue") + + facet_wrap(~.rownames) + + xlab("Time Step") + + ylab("Count") + + +################################################### +### code chunk number 37: Cs26_set-up-covar +################################################### +temp <- t(plankdat[years, "Temp", drop = FALSE]) +TP <- t(plankdat[years, "TP", drop = FALSE]) + + +################################################### +### code chunk number 38: Cs27_fit_covar_echo +################################################### +model.list <- list(m = 2, R = "unconstrained") +kemz.temp <- MARSS(dat.spp.1980, + model = model.list, z.score = TRUE, + form = "dfa", control = cntl.list, covariates = temp +) +kemz.TP <- MARSS(dat.spp.1980, + model = model.list, z.score = TRUE, + form = "dfa", control = cntl.list, covariates = TP +) +kemz.both <- MARSS(dat.spp.1980, + model = model.list, z.score = TRUE, + form = "dfa", control = cntl.list, covariates = rbind(temp, TP) +) + + +################################################### +### code chunk number 41: Cs28_covar_AICs +################################################### +print(cbind( + model = c("no covars", "Temp", "TP", "Temp & TP"), + AICc = round(c( + the.fit$AICc, kemz.temp$AICc, kemz.TP$AICc, + kemz.both$AICc + )) +), quote = FALSE) + + +################################################### +### code chunk number 42: Cs29_plotbestcovarfits +################################################### +par.mat <- coef(kemz.temp, type = "matrix") +fit.b <- par.mat$Z %*% kemz.temp$states + matrix(par.mat$A, nrow = N.ts, ncol = TT) +spp <- rownames(dat.z) +par(mfcol = c(3, 2), mar = c(3, 4, 1.5, 0.5), oma = c(0.4, 1, 1, 1)) +for (i in 1:length(spp)) { + plot(dat.z[i, ], xlab = "", ylab = "Abundance index", bty = "L", xaxt = "n", ylim = c(-4, 3), pch = 16, col = "blue") + axis(1, 12 * (0:dim(dat.z)[2]) + 1, 1980 + 0:dim(dat.z)[2]) + lines(fit.b[i, ], lwd = 2) + title(spp[i]) +} + + diff --git a/inst/doc/Chapter_KFAS.R b/inst/doc/Chapter_KFAS.R new file mode 100644 index 0000000..6b8b084 --- /dev/null +++ b/inst/doc/Chapter_KFAS.R @@ -0,0 +1,897 @@ +################################################### +### code chunk number 2: Cs00_required-libraries +################################################### +library(MARSS) +library(KFAS) +library(ggplot2) # plotting +library(tidyr) # data frame manipulation + + +################################################### +### code chunk number 3: Cs101_fitting-models +################################################### +model_Nile <- SSModel(Nile ~ SSMtrend( + degree = 1, + Q = list(matrix(NA)) +), +H = matrix(NA) +) +kinits <- c(log(var(Nile)), log(var(Nile))) +fit_kfas_default <- fitSSM(model_Nile, kinits, method = "BFGS") + + +################################################### +### code chunk number 4: Cs102_fitting-models +################################################### +model_Nile_stoch <- model_Nile +model_Nile_stoch$a1[1, 1] <- 0 +model_Nile_stoch$P1[1, 1] <- 1000 +model_Nile_stoch$P1inf[1, 1] <- 0 +kinits <- c(log(var(Nile)), log(var(Nile))) +fit_kfas_stoch <- fitSSM(model_Nile_stoch, kinits, method = "BFGS") +kfs_kfas_stoch <- KFS(fit_kfas_stoch$model) + + +################################################### +### code chunk number 5: Cs103_fitting-models +################################################### +mod.nile <- list( + Z = matrix(1), A = matrix(0), R = matrix("r"), + B = matrix(1), U = matrix(0), Q = matrix("q"), + tinitx = 1 +) + + +################################################### +### code chunk number 6: Cs104_fitting-models +################################################### +dat <- t(as.matrix(Nile)) +rownames(dat) <- "Nile" +fit_em_default <- MARSS(dat, model = mod.nile, silent = TRUE) +inits <- list(Q = matrix(var(Nile)), R = matrix(var(Nile))) +fit_bfgs_default <- MARSS(dat, + model = mod.nile, inits = inits, + method = "BFGS", silent = TRUE +) + + +################################################### +### code chunk number 7: Cs105_fitting-models +################################################### +mod.nile.stoch <- mod.nile +mod.nile.stoch$x0 <- fit_kfas_stoch$model$a1 +mod.nile.stoch$V0 <- fit_kfas_stoch$model$P1 +fit_em_stoch <- MARSS(dat, model = mod.nile.stoch, silent = TRUE) +fit_bfgs_stoch <- MARSS(dat, + model = mod.nile.stoch, inits = inits, + method = "BFGS", silent = TRUE +) + + +################################################### +### code chunk number 8: Cs106_fitting-models +################################################### +marss_kfas_model <- MARSSkfas(fit_em_stoch, + return.kfas.model = TRUE, + return.lag.one = FALSE +)$kfas.model +marss_kfas_model$Q[1, 1, 1] <- NA +marss_kfas_model$H[1, 1, 1] <- NA +kinits <- c(log(var(Nile)), log(var(Nile))) +fit_marss_kfas <- fitSSM(marss_kfas_model, kinits, method = "BFGS") + + +################################################### +### code chunk number 9: Cs107_fitting-models +################################################### +vals <- rbind( + c(fit_kfas_default$model$Q, fit_kfas_default$model$H, -1 * fit_kfas_default$optim.out$value), + c(coef(fit_em_default)$Q, coef(fit_em_default)$R, logLik(fit_em_default)), + c(coef(fit_bfgs_default)$Q, coef(fit_bfgs_default)$R, logLik(fit_bfgs_default)), + c(fit_kfas_stoch$model$Q, fit_kfas_stoch$model$H, -1 * fit_kfas_stoch$optim.out$value), + c(coef(fit_em_stoch)$Q, coef(fit_em_stoch)$R, logLik(fit_em_stoch)), + c(coef(fit_bfgs_stoch)$Q, coef(fit_bfgs_stoch)$R, logLik(fit_bfgs_stoch)), + c(fit_marss_kfas$model$Q, fit_marss_kfas$model$H, -1 * fit_marss_kfas$optim.out$value) +) +rownames(vals) <- c( + "KFAS default", "MARSS em default", "MARSS bfgs default", + "KFAS stoch", "MARSS em stoch", "MARSS bfgs stoch", "KFAS w marss kfas model" +) +colnames(vals) <- c("Q", "R", "logLik") +vals + + +################################################### +### code chunk number 10: Cs201_state-filtering +################################################### +fit_kfas <- fit_kfas_stoch +fit_marss <- fit_em_stoch +fit_marss$par$Q[1, 1] <- fit_kfas$model$Q +fit_marss$par$R[1, 1] <- fit_kfas$model$H + + +################################################### +### code chunk number 11: Cs202_state-filtering +################################################### +kf_kfas <- KFS(fit_kfas$model, + filtering = "state", + smoothing = "state", simplify = FALSE +) + + +################################################### +### code chunk number 12: Cs203_state-filtering +################################################### +kf_marss <- MARSSkfss(fit_marss) + + +################################################### +### code chunk number 13: Cs204_state-filtering +################################################### +names(kf_kfas) +names(kf_marss) + + +################################################### +### code chunk number 14: Cs205_state-filtering +################################################### +n <- 5 + + +################################################### +### code chunk number 15: Cs206_state-filtering +################################################### +cbind( + a = kf_kfas$a[1:n], xtt1 = kf_marss$xtt1[1:n], + att = kf_kfas$att[1:n], xtt = kf_marss$xtt[1:n] +) + + +################################################### +### code chunk number 16: Cs207_state-filtering +################################################### +cbind(kf_kfas$alphahat[1:n], kf_marss$xtT[1:n]) + + +################################################### +### code chunk number 17: Cs208_state-filtering +################################################### +cbind( + v = kf_kfas$v[1:n], Innov = kf_marss$Innov[1:n], + F = kf_kfas$F[1:n], Sigma = kf_marss$Sigma[1:n] +) + + +################################################### +### code chunk number 18: Cs209_state-filtering +################################################### +cbind( + P = kf_kfas$P[1:n], Vtt1 = kf_marss$Vtt1[1:n], + Ptt = kf_kfas$Ptt[1:n], Vtt = kf_marss$Vtt[1:n] +) + + +################################################### +### code chunk number 19: Cs301_obs-filtering +################################################### +kf_kfas <- KFS(fit_kfas$model, + filtering = "signal", + smoothing = "signal", simplify = FALSE +) + + +################################################### +### code chunk number 20: Cs302_obs-filtering +################################################### +kf_marss <- MARSSkf(fit_marss) + + +################################################### +### code chunk number 21: Cs304_obs-filtering +################################################### +n <- 10 + + +################################################### +### code chunk number 22: Cs305_obs-filtering +################################################### +ytt1_fit <- fitted(fit_marss, type = "ytt1")$.fitted +ytt1_hatyt <- MARSShatyt(fit_marss, only.kem = FALSE)$ytt1 +cbind(m = kf_kfas$m[1:n], + fitted = ytt1_fit[1:n], + MARSShatyt = ytt1_hatyt[1:n]) + + +################################################### +### code chunk number 23: Cs306_obs-filtering +################################################### +var.Eytt1_fit <- + fitted(fit_marss, type = "ytt1", interval = "confidence")$.se^2 +var.Eytt1_hatyt <- + MARSShatyt(fit_marss, only.kem = FALSE)$var.Eytt1 +cbind( + P_mu = kf_kfas$P_mu[1:n], fitted = var.Eytt1_fit[1:n], + MARSShatyt = var.Eytt1_hatyt[1:n] +) + + +################################################### +### code chunk number 24: Cs307_obs-filtering +################################################### +ytT_fit <- fitted(fit_marss, type = "ytT")$.fitted +ytT_hatyt <- MARSShatyt(fit_marss)$ytT +cbind( + a = kf_kfas$muhat[1:n], fitted = ytT_fit[1:n], + MARSShatyt = ytT_hatyt[1:n], Nile = Nile[1:n] +) + + +################################################### +### code chunk number 25: Cs308_obs-filtering +################################################### +var.EytT_fit <- + fitted(fit_marss, type = "ytT", interval = "confidence")$.se^2 +var.EytT_hatyt <- + MARSShatyt(fit_marss, only.kem = FALSE)$var.EytT +cbind( + V_mu = kf_kfas$V_mu[1:n], fitted = var.EytT_fit[1:n], + MARSShatyt = var.EytT_hatyt[1:n] +) + + +################################################### +### code chunk number 26: Cs401_conf-int +################################################### +conf_kfas <- predict(fit_kfas$model, + interval = "confidence", + se.fit = TRUE +) +head(conf_kfas) + + +################################################### +### code chunk number 27: Cs402_conf-int +################################################### +conf_marss1 <- fitted(fit_marss, type = "ytT", interval = "confidence") +head(conf_marss1) + + +################################################### +### code chunk number 28: Cs403_conf-int +################################################### +conf_marss2 <- predict(fit_marss, + type = "ytT", + interval = "confidence", level = 0.95 +) +head(conf_marss2$pred) + + +################################################### +### code chunk number 29: Cs404_conf-int +################################################### +pred_kfas <- predict(fit_kfas$model, + interval = "prediction", se.fit = TRUE +) +head(pred_kfas) + + +################################################### +### code chunk number 30: Cs405_conf-int +################################################### +pred_marss1 <- fitted(fit_marss, type = "ytT", interval = "prediction") +head(pred_marss1) + + +################################################### +### code chunk number 31: Cs406_conf-int +################################################### +pred_marss2 <- predict(fit_marss, + type = "ytT", + interval = "prediction", level = 0.95 +) + + +################################################### +### code chunk number 32: Cs407_conf-int +################################################### +conf_kfas_t1 <- predict(fit_kfas$model, + interval = "confidence", + se.fit = TRUE, filtered = TRUE +) +head(conf_kfas_t1) + + +################################################### +### code chunk number 33: Cs408_conf-int +################################################### +conf_marss1_t1 <- fitted(fit_marss, type = "ytt1", interval = "confidence") +head(conf_marss1_t1) + + +################################################### +### code chunk number 34: Cs409_conf-int +################################################### +conf_marss2_t1 <- predict(fit_marss, + type = "ytt1", + interval = "confidence", level = 0.95 +) +head(conf_marss2_t1$pred) + + +################################################### +### code chunk number 35: Cs410_conf-int +################################################### +pred_kfas_t1 <- predict(fit_kfas$model, + interval = "prediction", + se.fit = TRUE, filtered = TRUE +) +head(pred_kfas_t1) + + +################################################### +### code chunk number 36: Cs411_conf-int +################################################### +pred_marss1_t1 <- fitted(fit_marss, type = "ytt1", interval = "prediction") +head(pred_marss1_t1) + + +################################################### +### code chunk number 37: Cs412_conf-int +################################################### +pred_marss2_t1 <- predict(fit_marss, + type = "ytt1", + interval = "prediction", level = 0.95 +) + + +################################################### +### code chunk number 49: Cs501_plotting +################################################### +ts.plot(cbind(Nile, pred_kfas[, c("fit", "lwr", "upr")], conf_kfas[, c("lwr", "upr")]), + col = c(1:2, 3, 3, 4, 4), + ylab = "Predicted annual flow", main = "River Nile" +) + + +################################################### +### code chunk number 38: Cs501_residuals +################################################### +kfs <- KFS(fit_kfas$model) +resid_kfas <- residuals(kfs, type = "recursive") +resid_marss <- residuals(fit_marss, + type = "tt1", + standardization = "marginal" +) +resid_marss <- subset(resid_marss, name == "model") +df <- cbind( + MARSS = resid_marss$.resids, + KFAS = as.vector(resid_kfas) +) +head(df) + + +################################################### +### code chunk number 50: Cs502_plotting +################################################### +plot.type <- ifelse(packageVersion("MARSS") < '3.11.4', "model.ytT", "fitted.ytT") +plot(fit_marss, plot.type = plot.type, pi.int = TRUE) + + +################################################### +### code chunk number 39: Cs502_residuals +################################################### +kfs <- KFS(fit_kfas$model) +resid_kfas <- rstandard(kfs, + type = "recursive", + standardization_type = "marginal" +) +resid_marss <- residuals(fit_marss, + type = "tt1", + standardization = "marginal" +) +resid_marss <- subset(resid_marss, name == "model") +df <- cbind( + MARSS = resid_marss$.std.resids, + KFAS = as.vector(resid_kfas) +) +head(df) + + +################################################### +### code chunk number 51: Cs503_plotting +################################################### +require(ggplot2) +df <- cbind(conf_marss1, pred_marss1[, c(".lwr", ".upr")]) +ggplot(df, aes(x = t, y = .fitted)) + + geom_ribbon(aes(ymin = .lwr, ymax = .upr), fill = "grey") + + geom_ribbon(aes(ymin = .conf.low, ymax = .conf.up), fill = "blue", alpha = 0.25) + + geom_line(linetype = 2) + + ylab("Predicted Annual Flow") + + xlab("") + + ggtitle("River Nile") + + +################################################### +### code chunk number 40: Cs503_residuals +################################################### +kfs <- KFS(fit_kfas$model) +resid_kfas <- rstandard(kfs, + type = "recursive", + standardization_type = "cholesky" +) +resid_marss <- residuals(fit_marss, + type = "tt1", + standardization = "Cholesky" +) +resid_marss <- subset(resid_marss, name == "model") +df <- cbind( + MARSS = resid_marss$.std.resids, + KFAS = as.vector(resid_kfas) +) +head(df) + + +################################################### +### code chunk number 41: Cs504_residuals +################################################### +kfs <- KFS(fit_kfas$model) +resid_kfas <- residuals(kfs, type = "pearson") +resid_marss <- residuals(fit_marss, type = "tT") +resid_marss <- subset(resid_marss, name == "model") +df <- cbind( + MARSS = resid_marss$.resids, + KFAS = as.vector(resid_kfas) +) +head(df) + + +################################################### +### code chunk number 42: Cs505_residuals +################################################### +kfs <- KFS(fit_kfas$model) +resid_kfas <- rstandard(kfs, + type = "pearson", + standardization_type = "marginal" +) +resid_marss <- residuals(fit_marss, + type = "tT", + standardization = "marginal" +) +resid_marss <- subset(resid_marss, name == "model") +df <- cbind( + MARSS = resid_marss$.std.resids, + KFAS = as.vector(resid_kfas) +) +head(df) + + +################################################### +### code chunk number 43: Cs506_residuals +################################################### +kfs <- KFS(fit_kfas$model) +resid_kfas <- rstandard(kfs, + type = "pearson", + standardization_type = "cholesky" +) +resid_marss <- residuals(fit_marss, + type = "tT", + standardization = "Cholesky" +) +resid_marss <- subset(resid_marss, name == "model") +df <- cbind( + MARSS = resid_marss$.std.resids, + KFAS = as.vector(resid_kfas) +) +head(df) + + +################################################### +### code chunk number 44: Cs507_residuals +################################################### +kfs <- KFS(fit_kfas$model) +resid_kfas <- residuals(kfs, type = "response") +resid_marss <- residuals(fit_marss, type = "tT") +resid_marss <- subset(resid_marss, name == "model") +df <- cbind( + MARSS = resid_marss$.resids, + KFAS = as.vector(resid_kfas) +) +head(df) + + +################################################### +### code chunk number 45: Cs508_residuals +################################################### +kfs <- KFS(fit_kfas$model, smoothing = "disturbance") +resid_kfas <- residuals(kfs, type = "state") +resid_marss <- residuals(fit_marss, type = "tT") +resid_marss <- subset(resid_marss, name == "state") +df <- cbind( + MARSS = resid_marss$.resids, + KFAS = as.vector(resid_kfas) +) +head(df) + + +################################################### +### code chunk number 46: Cs509_residuals +################################################### +kfs <- KFS(fit_kfas$model, smoothing = "disturbance") +resid_kfas <- rstandard(kfs, + type = "state", + standardization_type = "marginal" +) +resid_marss <- residuals(fit_marss, + type = "tT", + standardization = "marginal" +) +resid_marss <- subset(resid_marss, name == "state") +df <- cbind( + MARSS = resid_marss$.std.resids, + KFAS = as.vector(resid_kfas) +) +head(df) + + +################################################### +### code chunk number 47: Cs509_residuals +################################################### +kfs <- KFS(fit_kfas$model, smoothing = "disturbance") +resid_kfas <- rstandard(kfs, + type = "state", + standardization_type = "cholesky" +) +resid_marss <- residuals(fit_marss, + type = "tT", + standardization = "Block.Cholesky" +) +resid_marss <- subset(resid_marss, name == "state") +df <- cbind( + MARSS = resid_marss$.std.resids, + KFAS = as.vector(resid_kfas) +) +head(df) + + +################################################### +### code chunk number 48: Cs510_residuals +################################################### +kfs <- KFS(fit_kfas$model, smoothing = "disturbance") +test <- cbind( + b = fit_kfas$model$Q[1, 1, 1] - kfs$V_eta[1, 1, ], + a = MARSSresiduals(fit_marss, type = "tT")$var.residuals[2, 2, ] +) +test <- as.data.frame(test) +test$diff <- test$b - test$a +head(test) +tail(test) + + +################################################### +### code chunk number 52: Cs601_missing-values +################################################### +NileNA <- Nile +NileNA[c(21:40, 61:80)] <- NA +model_NileNA_stoch <- + SSModel(NileNA ~ SSMtrend( + degree = 1, + Q = list(matrix(NA)) + ), + H = matrix(NA) + ) +model_NileNA_stoch$a1[1, 1] <- 0 +model_NileNA_stoch$P1[1, 1] <- model_Nile_stoch$P1[1, 1] +model_NileNA_stoch$P1inf[1, 1] <- 0 +kinits <- c(log(var(Nile)), log(var(Nile))) +fit_kfas_NA <- fitSSM(model_NileNA_stoch, kinits, method = "BFGS") +fit_marss_NA <- MARSS(as.vector(NileNA), + model = mod.nile.stoch, + inits = inits, method = "BFGS", silent = TRUE +) + + +################################################### +### code chunk number 53: Cs602_missing-values +################################################### +rbind( + MARSS = c( + Q = coef(fit_marss_NA, type = "matrix")$Q, + R = coef(fit_marss_NA, type = "matrix")$R, + logLik = logLik(fit_marss_NA) + ), + KFAS = c( + Q = fit_kfas_NA$model$Q, + R = fit_kfas_NA$model$H, + logLik = -1 * fit_kfas_NA$optim.out$value + ) +) + + +################################################### +### code chunk number 55: Cs603_missing-values +################################################### +conf_kfas_NA <- + predict(fit_kfas_NA$model, interval = "confidence", filtered = FALSE) +conf_marss_NA <- + predict(fit_marss_NA, interval = "confidence", type = "ytT", level = 0.95)$pred + + +################################################### +### code chunk number 56: Cs604_marss-mult-fig-2 +################################################### +require(ggplot2) +df1 <- as.data.frame(conf_kfas_NA) +df1$name <- "KFAS" +df2 <- conf_marss_NA[, c("estimate", "Lo 95", "Hi 95")] +df2$name <- "MARSS" +colnames(df2) <- colnames(df1) +df <- rbind(df1, df2) +df$t <- as.vector(time(NileNA)) +df$y <- conf_marss_NA$y +ggplot(df, aes(x = t, y = fit)) + + geom_ribbon(aes(ymin = lwr, ymax = upr), fill = "grey") + + geom_line() + + ylab("Predicted Annual Flow") + + xlab("") + + ggtitle("River Nile with 95% CIs on estimate") + + facet_wrap(~name) + + +################################################### +### code chunk number 57: Cs605_missing-values +################################################### +fitted_kfas_NA <- data.frame( + smooth = as.vector(fitted(fit_kfas_NA$model)), + one.step.ahead = as.vector(fitted(fit_kfas_NA$model, filtered = TRUE)), + name = "KFAS" +) +fitted_marss_NA <- data.frame( + smooth = fitted(fit_marss_NA, type = "ytT")$.fitted, + one.step.ahead = fitted(fit_marss_NA, type = "ytt1")$.fitted, + name = "MARSS" +) + + +################################################### +### code chunk number 58: Cs606_missing-values +################################################### +require(ggplot2) +require(tidyr) +df <- rbind(fitted_kfas_NA, fitted_marss_NA) +df$t <- as.vector(time(NileNA)) +df$y <- conf_marss_NA$y +df <- tidyr::pivot_longer(df, c(smooth, one.step.ahead), names_to = "type", values_to = "value") +ggplot(df, aes(x = t, y = value, col = type)) + + geom_point(aes(x = t, y = y), col = "blue", size = 0.5, na.rm = TRUE) + + geom_line() + + ylab("Predicted Annual Flow") + + xlab("") + + ggtitle("River Nile - smoothed versus filtered") + + facet_wrap(~name, ncol = 1) + + +################################################### +### code chunk number 59: Cs701_globaltemp +################################################### +data("GlobalTemp") +ts.plot(GlobalTemp, col = 1:2, main = "Two ts for Global Temperature") + + +################################################### +### code chunk number 60: Cs702_globaltemp +################################################### +data("GlobalTemp") +model_temp <- SSModel(GlobalTemp ~ SSMtrend(1, Q = NA, type = "common"), + H = matrix(NA, 2, 2) +) +kinits <- chol(cov(GlobalTemp))[c(1, 4, 3)] +kinits <- c(0.5 * log(0.1), log(kinits[1:2]), kinits[3]) +kfas_temp_default <- fitSSM(model_temp, kinits, method = "BFGS") +model_temp_stoch <- model_temp +model_temp_stoch$a1[1, 1] <- 0 +model_temp_stoch$P1[1, 1] <- 1000 * max(diag(var(GlobalTemp))) +model_temp_stoch$P1inf[1, 1] <- 0 +kfas_temp_stoch <- fitSSM(model_temp_stoch, kinits, method = "BFGS") + + +################################################### +### code chunk number 61: Cs703_globaltemp +################################################### +mod.list <- list( + Z = matrix(1, 2, 1), + R = matrix(c("r1", "c", "c", "r2"), 2, 2), + U = matrix(0), + A = matrix(0, 2, 1), + tinitx = 1 +) +marss_temp_default <- MARSS(t(GlobalTemp), model = mod.list) +mod.list$x0 <- kfas_temp_stoch$model$a1 +mod.list$V0 <- kfas_temp_stoch$model$P1 +marss_temp_stoch_em <- MARSS(t(GlobalTemp), model = mod.list) +# use inits from a short run of EM algorithm +inits <- MARSS(t(GlobalTemp), + model = mod.list, control = list(maxit = 20), + silent = TRUE +) +marss_temp_stoch_bfgs <- MARSS(t(GlobalTemp), + model = mod.list, + inits = inits, method = "BFGS" +) + + +################################################### +### code chunk number 62: Cs704_globaltemp +################################################### +vals <- rbind( + c(kfas_temp_default$model$Q, kfas_temp_default$model$H[c(1, 2, 4)], -1 * kfas_temp_default$optim.out$value), + c(coef(marss_temp_default)$Q, coef(marss_temp_default)$R, logLik(marss_temp_default)), + c(kfas_temp_stoch$model$Q, kfas_temp_stoch$model$H[c(1, 2, 4)], -1 * kfas_temp_stoch$optim.out$value), + c(coef(marss_temp_stoch_em)$Q, coef(marss_temp_stoch_em)$R, logLik(marss_temp_stoch_em)), + c(coef(marss_temp_stoch_bfgs)$Q, coef(marss_temp_stoch_bfgs)$R, logLik(marss_temp_stoch_bfgs)) +) +rownames(vals) <- c( + "KFAS default", "MARSS em default", + "KFAS stoch", "MARSS em stoch", "MARSS bfgs stoch" +) +colnames(vals) <- c("Q", "R1", "Rcov", "R2", "logLik") +round(vals, digits = 5) + + +################################################### +### code chunk number 63: Cs705_globaltemp +################################################### +out_temp <- KFS(kfas_temp_stoch$model) +df <- data.frame( + t = as.vector(time(coef(out_temp))), + KFAS = coef(out_temp), + `MARSS BFGS` = tsSmooth(marss_temp_stoch_bfgs, type = "xtT")$.estimate, + `MARSS EM` = tsSmooth(marss_temp_stoch_bfgs, type = "xtT")$.estimate +) +df <- pivot_longer(df, c(KFAS, MARSS.BFGS, MARSS.EM), names_to = "model", values_to = "value") +ggplot(df, aes(x = t, y = value)) + + geom_line() + + facet_wrap(~model) + + +################################################### +### code chunk number 64: Cs706_globaltemp +################################################### +mod.list <- list( + Z = matrix(kfas_temp_stoch$model$Z, ncol = 1), + R = kfas_temp_stoch$model$H[, , 1], + U = matrix(0), + A = matrix(0, 2, 1), + Q = matrix(kfas_temp_stoch$model$Q[, , 1]), + x0 = kfas_temp_stoch$model$a1, + V0 = kfas_temp_stoch$model$P1, + tinitx = 1 +) +marss_test <- MARSS(t(GlobalTemp), model = mod.list) + + +################################################### +### code chunk number 65: Cs707_globaltemp +################################################### +kfs <- KFS(kfas_temp_stoch$model, smoothing = "disturbance") +resid_kfas <- rstandard(kfs, + type = "state", + standardization_type = "cholesky" +) +resid_marss <- residuals(marss_temp_stoch_bfgs, + type = "tT", + standardization = "Block.Cholesky" +) +resid_marss <- subset(resid_marss, name == "state") +resid_test <- residuals(marss_test, + type = "tT", + standardization = "Block.Cholesky" +) +resid_test <- subset(resid_test, name == "state") + +df <- data.frame( + MARSS = resid_marss$.std.resids, + KFAS = as.vector(resid_kfas), + MARSS.test = resid_test$.std.resids +) +df$diff.est <- df$MARSS - df$KFAS +df$diff.id <- df$MARSS.test - df$KFAS +df$t <- as.vector(time(kfas_temp_stoch$model$y)) +df$name <- "state" +df1 <- pivot_longer(df, c(MARSS, MARSS.test, KFAS, diff.est, diff.id), names_to = "model", values_to = "value") + +kfs <- KFS(kfas_temp_stoch$model) +resid_kfas <- residuals(kfs, type = "pearson") +resid_marss <- MARSSresiduals(marss_temp_stoch_bfgs, type = "tT") +resid_test <- MARSSresiduals(marss_test, type = "tT") +df <- rbind( + cbind(as.data.frame(t(resid_marss$model.residuals)), model = "MARSS") %>% pivot_longer(c("HL", "Folland")), + cbind(as.data.frame(t(resid_test$model.residuals)), model = "MARSS.test") %>% pivot_longer(c("HL", "Folland")), + cbind(as.data.frame(resid_kfas), model = "KFAS") %>% pivot_longer(c("HL", "Folland")), + cbind(as.data.frame(t(resid_marss$model.residuals) - resid_kfas), model = "diff.est") %>% pivot_longer(c("HL", "Folland")), + cbind(as.data.frame(t(resid_test$model.residuals) - resid_kfas), model = "diff.id") %>% pivot_longer(c("HL", "Folland")) +) +df$t <- rep(as.vector(time(kfas_temp_stoch$model$y)), 2 * 5) + +df <- rbind(df, df1[, colnames(df)]) + +ggplot(subset(df, model %in% c("diff.est", "diff.id")), aes(x = t, y = value, col = model)) + + geom_line(na.rm = TRUE) + + facet_wrap(~name) + + xlab("") + + ggtitle("Difference in residuals KFAS vs MARSS") + + +################################################### +### code chunk number 66: Cs708_globaltemp (eval = FALSE) +################################################### +## # test; these should be identical +## kfas_test <- kfas_temp_stoch +## mod.list <- list( +## Z = matrix(1, 2, 1), +## R = kfas_test$model$H[, , 1], +## U = matrix(0), +## A = matrix(0, 2, 1), +## Q = matrix(kfas_test$model$Q[, , 1]), +## tinitx = 1 +## ) +## mod.list$x0 <- matrix(0) +## mod.list$V0 <- kfas_test$model$P1 +## marss_test <- MARSS(t(GlobalTemp), model = mod.list) +## kfas_test_mod <- MARSSkfas(marss_test, +## return.kfas.model = TRUE, +## return.lag.one = FALSE +## )$kfas.model +## +## kfs <- KFS(kfas_test_mod, smoothing = "disturbance") +## test <- cbind(b = kfas_test_mod$Q[1, 1, 1] - kfs$V_eta[1, 1, ], a = MARSSresiduals(marss_test, type = "tT")$var.residuals[3, 3, ]) +## test <- as.data.frame(test) +## test$diff <- test$b - test$a +## head(test) +## tail(test) +## +## MARSSkfas(marss_test)$VtT[, , 1] +## MARSSkfss(marss_test)$VtT[, , 1] +## +## +## var.EytT_fit <- +## fitted(marss_test, type = "ytT", interval = "confidence")$.se^2 +## cbind(V_mu = KFS(kfas_test$model)$V_mu[1, 1, ], fitted = var.EytT_fit) +## +## kfs <- KFS(kfas_test_mod, smoothing = "disturbance") +## resid_kfas <- rstandard(kfs, +## type = "state", +## standardization_type = "marginal" +## ) +## resid_marss <- residuals(marss_test, +## type = "tT", +## standardization = "marginal" +## ) +## resid_marss <- subset(resid_marss, name == "state") +## df <- data.frame( +## MARSS = resid_marss$.std.resids, +## KFAS = as.vector(resid_kfas), +## diff = resid_marss$.std.resids - as.vector(resid_kfas) +## ) +## head(df) +## +## resid_kfas <- residuals(kfs, type = "state") +## resid_marss <- residuals(marss_test, type = "tT") +## resid_marss <- subset(resid_marss, name == "state") +## df <- cbind( +## MARSS = resid_marss$.resids, +## KFAS = as.vector(resid_kfas), +## diff = resid_marss$.resids - as.vector(resid_kfas) +## ) +## head(df) +## +## +## kfs <- KFS(kfas_temp_stoch$model) +## resid_kfas <- residuals(kfs, type = "pearson") +## resid_marss <- MARSSresiduals(marss_test, type = "tT") +## df <- cbind( +## as.data.frame(t(resid_marss$model.residuals)), +## as.data.frame(resid_kfas), +## as.data.frame(t(resid_marss$model.residuals) - resid_kfas) +## ) + + diff --git a/inst/doc/Chapter_MARp.R b/inst/doc/Chapter_MARp.R new file mode 100644 index 0000000..19eea54 --- /dev/null +++ b/inst/doc/Chapter_MARp.R @@ -0,0 +1,357 @@ +################################################### +### code chunk number 2: Cs_000_required_libraries +################################################### +library(MARSS) + + +################################################### +### code chunk number 4: Cs_101_ar2-sim +################################################### +TT <- 50 +true.2 <- c(r = 0, b1 = -1.5, b2 = -0.75, q = 1) +temp <- arima.sim(n = TT, list(ar = true.2[2:3]), sd = sqrt(true.2[4])) +sim.ar2 <- matrix(temp, nrow = 1) + + +################################################### +### code chunk number 5: Cs_102_ar2-model +################################################### +Z <- matrix(c(1, 0), 1, 2) +B <- matrix(list("b1", 1, "b2", 0), 2, 2) +U <- matrix(0, 2, 1) +Q <- matrix(list("q", 0, 0, 0), 2, 2) +A <- matrix(0, 1, 1) +R <- matrix(0, 1, 1) +mu <- matrix(sim.ar2[2:1], 2, 1) +V <- matrix(0, 2, 2) +model.list.2 <- list( + Z = Z, B = B, U = U, Q = Q, A = A, + R = R, x0 = mu, V0 = V, tinitx = 0 +) + + +################################################### +### code chunk number 6: Cs_103_ar2-fit +################################################### +ar2 <- MARSS(sim.ar2[3:TT], model = model.list.2) + + +################################################### +### code chunk number 7: Cs_104_ar2-fit +################################################### +print(cbind(true = true.2[2:4], estimates = coef(ar2, type = "vector"))) + + +################################################### +### code chunk number 8: Cs_105_ar2-gappy +################################################### +gappy.data <- sim.ar2[3:TT] +gappy.data[floor(runif(TT / 2, 2, TT))] <- NA +ar2.gappy <- MARSS(gappy.data, model = model.list.2, fun.kf="MARSSkfss") + + +################################################### +### code chunk number 9: Cs_106_ar2-gappy +################################################### +print(cbind( + true = true.2[2:4], + estimates.no.miss = coef(ar2, type = "vector"), + estimates.w.miss = coef(ar2.gappy, type = "vector") +)) + + +################################################### +### code chunk number 10: Cs_107_arima +################################################### +arima(gappy.data, order = c(2, 0, 0), include.mean = FALSE) + + +################################################### +### code chunk number 11: Cs_108_non-stationary +################################################### +TT <- 50 +true.2 <- c(r = 0, b1 = -1.5, b2 = -0.75, q = 1) +sim.ar2.ns <- rep(NA, TT) +sim.ar2.ns[1] <- -30 +sim.ar2.ns[2] <- -10 +for (i in 3:TT) { + sim.ar2.ns[i] <- true.2[2] * sim.ar2.ns[i - 1] + + true.2[3] * sim.ar2.ns[i - 2] + rnorm(1, 0, sqrt(true.2[4])) +} + +model.list.3 <- model.list.2 +model.list.3$x0 <- matrix(sim.ar2.ns[2:1], 2, 1) + +ar3.marss <- MARSS(sim.ar2.ns[3:TT], model = model.list.3, silent = TRUE) +ar3.arima <- arima(sim.ar2.ns[3:TT], order = c(2, 0, 0), include.mean = FALSE) + +print(cbind( + true = true.2[2:4], + estimates.marss = coef(ar3.marss, type = "vector"), + estimates.arima = c(coef(ar3.arima, type = "vector"), ar3.arima$sigma2) +)) + + +################################################### +### code chunk number 13: Cs_201_mar2-sim +################################################### +TT <- 50 +true.2 <- c(r = 0, b1 = -1.5, b2 = -0.75, q = 1) +temp1 <- arima.sim(n = TT, list(ar = true.2[c("b1", "b2")]), + sd = sqrt(true.2["q"])) + + +################################################### +### code chunk number 15: Cs_202_mar2-sim +################################################### +temp2 <- arima.sim(n = TT, list(ar = true.2[c("b1", "b2")]), + sd = sqrt(true.2["q"])) +sim.mar2 <- rbind(temp1, temp2) + + +################################################### +### code chunk number 16: Cs_203_mar2-model +################################################### +Z <- matrix(c(1, 0, 0, 1, 0, 0, 0, 0), 2, 4) +B1 <- matrix(list(0), 2, 2) +diag(B1) <- "b1" +B2 <- matrix(list(0), 2, 2) +diag(B2) <- "b2" +B <- matrix(list(0), 4, 4) +B[1:2, 1:2] <- B1 +B[1:2, 3:4] <- B2 +B[3:4, 1:2] <- diag(1, 2) +U <- matrix(0, 4, 1) +Q <- matrix(list(0), 4, 4) +Q[1, 1] <- "q" +Q[2, 2] <- "q" +A <- matrix(0, 2, 1) +R <- matrix(0, 2, 2) +pi <- matrix(c(sim.mar2[, 2], sim.mar2[, 1]), 4, 1) +V <- matrix(0, 4, 4) +model.list.2m <- list( + Z = Z, B = B, U = U, Q = Q, A = A, + R = R, x0 = pi, V0 = V, tinitx = 1 +) + + +################################################### +### code chunk number 19: Cs_204_mar2-fit +################################################### +mar2 <- MARSS(sim.mar2[, 2:TT], model = model.list.2m) + + +################################################### +### code chunk number 20: Cs_205_mar2-compare +################################################### +model.list.2$x0 <- matrix(sim.mar2[1, 2:1], 2, 1) +mar2a <- MARSS(sim.mar2[1, 2:TT], model = model.list.2) +model.list.2$x0 <- matrix(sim.mar2[2, 2:1], 2, 1) +mar2b <- MARSS(sim.mar2[2, 2:TT], model = model.list.2) + + +################################################### +### code chunk number 21: Cs_206_compare-mars +################################################### +print(cbind(true = true.2[2:4], est.mar2 = coef(mar2, type = "vector"), est.mar2a = coef(mar2a, type = "vector"), est.mar2b = coef(mar2b, type = "vector"))) + + +################################################### +### code chunk number 23: Cs_301_sim-ar3-data +################################################### +TT <- 100 +true.3 <- c(r = 0, b1 = -1.5, b2 = -0.75, b3 = .05, q = 1) +temp3 <- arima.sim( + n = TT, list(ar = true.3[c("b1", "b2", "b3")]), + sd = sqrt(true.3["q"]) +) +sim.ar3 <- matrix(temp3, nrow = 1) + + +################################################### +### code chunk number 24: Cs_302_set-up-ar3-model +################################################### +Z <- matrix(c(1, 0, 0), 1, 3) +B <- matrix(list("b1", 1, 0, "b2", 0, 1, "b3", 0, 0), 3, 3) +U <- matrix(0, 3, 1) +Q <- matrix(list(0), 3, 3) +Q[1, 1] <- "q" +A <- matrix(0, 1, 1) +R <- matrix(0, 1, 1) +pi <- matrix(sim.ar3[3:1], 3, 1) +V <- matrix(0, 3, 3) +model.list.3 <- list( + Z = Z, B = B, U = U, Q = Q, A = A, + R = R, x0 = pi, V0 = V, tinitx = 1 +) + + +################################################### +### code chunk number 25: Cs_303_fit-ar3 +################################################### +ar3 <- MARSS(sim.ar3[3:TT], model = model.list.3) + + +################################################### +### code chunk number 26: Cs_304_fit-ar3 +################################################### +print(cbind( + true = true.3[c("b1", "b2", "b3", "q")], + estimates.no.miss = coef(ar3, type = "vector") +)) + + +################################################### +### code chunk number 27: Cs_401_setseed5 +################################################### +set.seed(14) + + +################################################### +### code chunk number 28: Cs_402_fig-arss-model +################################################### +TT <- 1000 # set long +true.2ss <- c(r = .5, b1 = -1.5, b2 = -0.75, q = .1) +temp <- arima.sim( + n = TT, list(ar = true.2ss[c("b1", "b2")]), + sd = sqrt(true.2ss["q"]) +) +sim.ar <- matrix(temp, nrow = 1) +noise <- rnorm(TT - 1, 0, sqrt(true.2ss["r"])) +noisy.data <- sim.ar[2:TT] + noise + + +################################################### +### code chunk number 29: Cs_403_fig-arss-model +################################################### +Z <- matrix(c(1, 0), 1, 2) +B <- matrix(list("b1", 1, "b2", 0), 2, 2) +U <- matrix(0, 2, 1) +Q <- matrix(list("q", 0, 0, 0), 2, 2) +A <- matrix(0, 1, 1) +R <- matrix("r") +V <- matrix(0, 2, 2) +pi <- matrix(mean(noisy.data), 2, 1) +model.list.2ss <- list( + Z = Z, B = B, U = U, Q = Q, A = A, + R = R, x0 = pi, V0 = V, tinitx = 0 +) + + +################################################### +### code chunk number 30: Cs_404_fig-arss-model +################################################### +ar2ss <- MARSS(noisy.data, model = model.list.2ss) + + +################################################### +### code chunk number 31: Cs_405_fit-arss2-model +################################################### +model.list.2ss.bad <- model.list.2ss +# set R to zero in this model +model.list.2ss.bad$R <- matrix(0) + + +################################################### +### code chunk number 32: Cs_406_fit-arss2-model +################################################### +ar2ss2 <- MARSS(noisy.data, model = model.list.2ss.bad) + + +################################################### +### code chunk number 33: Cs_407_fit-arss2-model +################################################### +print(cbind( + true = true.2ss, + model.no.error = c(NA, coef(ar2ss2, type = "vector")), + model.w.error = coef(ar2ss, type = "vector") +)) + + +################################################### +### code chunk number 34: Cs_408_fit-arss2-with-arima +################################################### +arima(noisy.data, order = c(2, 0, 2), include.mean = FALSE) + + +################################################### +### code chunk number 36: Cs_409_code-to-compare-arss-estimation +################################################### +# This is the code used to make the figure comparing different ways to estimate +# AR parameters from AR with noise data +# sims.exist is just a flag. Set to FALSE to run the code +if (!exists("sims.exist")) { + sims.exist <- FALSE +} +if (!sims.exist) { + nsim <- 200 + TT <- 100 + file <- paste("AR2SS", TT, ".RData", sep = "") + params <- matrix(0, 8, nsim) + # sim 2 true.2ss=c(r=.5,b1=0.8,b2=-0.2,q=.1) + # sim 1 + true.2ss <- c(r = .5, b1 = -1.5, b2 = -0.75, q = .1) + + Z <- matrix(c(1, 0), 1, 2) + B <- matrix(list("b1", 1, "b2", 0), 2, 2) + U <- matrix(0, 2, 1) + Q <- matrix(list("q", 0, 0, 0), 2, 2) + A <- matrix(0, 1, 1) + V <- matrix(0, 2, 2) + R <- matrix("r") + pi <- matrix(0, 2, 1) # since demeaned + model.list.2ss <- list( + Z = Z, B = B, U = U, Q = Q, A = A, + R = R, x0 = pi, V0 = V, tinitx = 1 + ) + + for (i in 1:nsim) { + temp <- arima.sim(n = TT, list(ar = true.2ss[2:3]), sd = sqrt(true.2ss[4])) + sim.ar <- matrix(temp, nrow = 1) + noise <- rnorm(TT, 0, sqrt(true.2ss[1])) + noisy.data <- sim.ar + noise + noisy.data <- as.vector(noisy.data - mean(noisy.data)) # demean + test.it <- try(arima(noisy.data[2:TT], order = c(2, 0, 2), include.mean = FALSE), silent = TRUE) + test.it2 <- try(arima(noisy.data[2:TT], order = c(2, 0, 0), include.mean = FALSE), silent = TRUE) + while (inherits(test.it, "try-error") | inherits(test.it2, "try-error")) { + temp <- arima.sim(n = TT, list(ar = true.2ss[2:3]), sd = sqrt(true.2ss[4])) + sim.ar <- matrix(temp, nrow = 1) + noise <- rnorm(TT, 0, sqrt(true.2ss[1])) + noisy.data <- sim.ar + noise + noisy.data <- as.vector(noisy.data - mean(noisy.data)) # demean + test.it <- try(arima(noisy.data[2:TT], order = c(2, 0, 2), include.mean = FALSE), silent = TRUE) + test.it2 <- try(arima(noisy.data[2:TT], order = c(2, 0, 0), include.mean = FALSE), silent = TRUE) + } + init.list <- list(Q = matrix(.01, 1, 1), B = matrix(1, 2, 1)) + tmp.kem <- MARSS(noisy.data[2:TT], model = model.list.2ss, inits = init.list, silent = TRUE) + params[1:2, i] <- coef(tmp.kem)$B + tmp.bfgs <- MARSS(noisy.data[2:TT], model = model.list.2ss, inits = init.list, silent = TRUE, method = "BFGS") + # if(any(is.na(tmp.bfgs$states.se)) | any(is.na(tmp.kem$states.se))) print(i) + params[3:4, i] <- coef(tmp.bfgs)$B + params[5:6, i] <- test.it$coef[1:2] + params[7:8, i] <- test.it2$coef[1:2] + cat(i) + cat("\n") + if ((i %% 25) == 0) save(true.2ss, TT, params, file = file) + } + sims.exist <- TRUE + save(true.2ss, TT, params, file = file) +} + + +################################################### +### code chunk number 37: Cs_410_marssperffig +################################################### +if (sims.exist) { # flag to check that the code to creat the plot has been run + # This makes a plot of the comparisons + par(ylbias = -.2, tcl = -.2, cex = .75) + graphics::boxplot(t(params[c(7, 1, 3, 5, 8, 2, 4, 6), ]), names = c("AR(2)\n", "MARSS\nEM", "MARSS\nBFGS", "ARMA\n(2,2)", "AR(2)\n", "MARSS\nEM", "MARSS\nBFGS", "ARMA\n(2,2)"), ylab = "estimates of the ar coefficients", las = 2) + points(1:8, apply(params[c(7, 1, 3, 5, 8, 2, 4, 6), ], 1, mean), pch = "x", cex = 1.25) + par(cex = 1.5) + axis(side = 3, at = c(2, 6), labels = c(expression(b[1]), expression(b[2])), tick = FALSE, cex = 2) + lines(c(0, 4.5), c(true.2ss[2], true.2ss[2]), lty = 2) + lines(c(4.5, 9), c(true.2ss[3], true.2ss[3]), lty = 2) + abline(v = 4.5) +} + + diff --git a/inst/doc/Chapter_MLR.R b/inst/doc/Chapter_MLR.R new file mode 100644 index 0000000..d5fb902 --- /dev/null +++ b/inst/doc/Chapter_MLR.R @@ -0,0 +1,354 @@ +################################################### +### code chunk number 2: Cs_000_required_libraries +################################################### +library(MARSS) +library(xtable) +library(lattice) +library(nlme) +library(stringr) +library(lme4) + + +################################################### +### code chunk number 3: Cs_001_example1_plot +################################################### +data(longley) +plot(longley$Year, longley$Employed, type = "l", ylab = "Employed", xlab = "") + + +################################################### +### code chunk number 4: Cs_002_example1-data +################################################### +data(longley) +Employed <- matrix(longley$Employed, nrow = 1) + + +################################################### +### code chunk number 5: Cs_003_example1-params +################################################### +longley.model <- list() + + +################################################### +### code chunk number 6: Cs_004_example1-params1 +################################################### +longley.model$U <- longley.model$Q <- "zero" +longley.model$C <- "zero" +longley.model$B <- longley.model$Z <- "identity" +longley.model$x0 <- "zero" +longley.model$tinitx <- 0 + + +################################################### +### code chunk number 7: Cs_005_example1-paramsR +################################################### +longley.model$R <- matrix("r") + + +################################################### +### code chunk number 8: Cs_006_example1-paramsD +################################################### +longley.model$A <- matrix("intercept") +longley.model$D <- matrix(c("GNP", "Pop"), nrow = 1) + + +################################################### +### code chunk number 9: Cs_007_example1-eVar +################################################### +longley.model$d <- rbind(longley$GNP, longley$Population) + + +################################################### +### code chunk number 10: Cs_008_example1-marss +################################################### +mod1 <- MARSS(Employed, model = longley.model) + + +################################################### +### code chunk number 11: Cs_009_example1-marss +################################################### +coef(mod1, type = "vector") + + +################################################### +### code chunk number 12: Cs_010_example1-lm +################################################### +mod1.lm <- lm(Employed ~ GNP + Population, data = longley) +coef(mod1.lm) + + +################################################### +### code chunk number 13: Cs_011_example2-params +################################################### +longley.ar1 <- longley.model +longley.ar1$B <- matrix("b") +longley.ar1$Q <- matrix("q") + + +################################################### +### code chunk number 14: Cs_012_example2-marss +################################################### +mod2 <- MARSS(Employed, model = longley.ar1) + + +################################################### +### code chunk number 15: Cs_013_example2-marss-with-inits +################################################### +inits <- list(A = coef(mod1)$A, D = coef(mod1)$D) +mod2 <- MARSS(Employed, + model = longley.ar1, inits = inits, + control = list(maxit = 1000) +) +ests.marss <- c( + b = coef(mod2)$B, alpha = coef(mod2)$A, + GNP = coef(mod2)$D[1], Population = coef(mod2)$D[2], + logLik = logLik(mod2) +) + + +################################################### +### code chunk number 16: Cs_014_example2-gls +################################################### +library(nlme) +mod2.gls <- gls(Employed ~ GNP + Population, + correlation = corAR1(), data = longley, method = "ML" +) +mod2.gls.phi <- coef(mod2.gls$modelStruct[[1]], unconstrained = FALSE) +ests.gls <- c( + b = mod2.gls.phi, alpha = coef(mod2.gls)[1], + GNP = coef(mod2.gls)[2], Population = coef(mod2.gls)[3], + logLik = logLik(mod2.gls) +) + + +################################################### +### code chunk number 17: Cs_014b_compare_marss_gls +################################################### +rbind(MARSS = ests.marss, GLS = ests.gls) + + +################################################### +### code chunk number 18: Cs_015_example2-plot +################################################### +pairs(longley) + + +################################################### +### code chunk number 19: Cs_016_full-model-list +################################################### +eVar.names <- colnames(longley)[-7] +eVar <- t(longley[, eVar.names]) +longley.model <- list() +longley.model$U <- longley.model$Q <- "zero" +longley.model$C <- "zero" +longley.model$B <- longley.model$Z <- "identity" +longley.model$A <- matrix("intercept") +longley.model$R <- matrix("r") +longley.model$D <- matrix(eVar.names, nrow = 1) +longley.model$d <- eVar +longley.model$x0 <- "zero" +longley.model$tinitx <- 0 + + +################################################### +### code chunk number 20: Cs_017_full-model-fit +################################################### +mod3.em <- MARSS(Employed, model = longley.model) +mod3.bfgs <- MARSS(Employed, model = longley.model, method = "BFGS") + + +################################################### +### code chunk number 21: Cs_018_full-em-ests +################################################### +par.names <- c("A.intercept", paste("D", eVar.names, sep = ".")) +c(coef(mod3.em, type = "vector")[par.names], logLik = mod3.em$logLik) + + +################################################### +### code chunk number 22: Cs_019_full-bfgs-ests +################################################### +c(coef(mod3.bfgs, type = "vector")[par.names], logLik = mod3.bfgs$logLik) + + +################################################### +### code chunk number 23: Cs_020_full-lm-ests +################################################### +mod3.lm <- lm(Employed ~ 1 + GNP.deflator + GNP + Unemployed + + Armed.Forces + Population + Year, data = longley) +c(coef(mod3.lm), logLik = logLik(mod3.lm)) + + +################################################### +### code chunk number 24: Cs_021_full-model-correrr +################################################### +longley.correrr.model <- longley.model +longley.correrr.model$B <- matrix("b") +longley.correrr.model$Q <- matrix("q") + + +################################################### +### code chunk number 25: Cs_022_full-correrr-fit-hide +################################################### +inits <- list(A = coef(mod3.em)$A, D = coef(mod3.em)$D) +mod4.em <- MARSS(Employed, model = longley.correrr.model, inits = inits) +mod4.bfgs <- MARSS(Employed, + model = longley.correrr.model, + inits = inits, method = "BFGS" +) + + +################################################### +### code chunk number 26: Cs_023_full-correrr-em-ests +################################################### +c(coef(mod4.em, type = "vector")["B.b"], logLik = mod4.em$logLik) + + +################################################### +### code chunk number 27: Cs_024_full-correrr-bfgs-ests +################################################### +c(coef(mod4.bfgs, type = "vector")["B.b"], logLik = mod4.bfgs$logLik) + + +################################################### +### code chunk number 28: Cs_025_full-gls-ests +################################################### +mod4.gls <- gls(Employed ~ 1 + GNP.deflator + GNP + Unemployed + + Armed.Forces + Population + Year, +correlation = corAR1(), data = longley, method = "ML" +) +mod4.gls.phi <- coef(mod4.gls$modelStruct[[1]], unconstrained = FALSE) +c(mod4.gls.phi, logLik = logLik(mod4.gls)) + + +################################################### +### code chunk number 29: Cs_026_loadsleep +################################################### +data(sleepstudy, package = "lme4") + + +################################################### +### code chunk number 30: Cs_027_sleep-plot +################################################### +library(lattice) +xyplot(Reaction ~ Days | Subject, sleepstudy, + type = c("g", "p", "r"), + index = function(x, y) coef(lm(y ~ x))[1], + xlab = "Days of sleep deprivation", + ylab = "Average reaction time (ms)", aspect = "xy" +) + + +################################################### +### code chunk number 31: Cs_028_setupdata +################################################### +# number of subjects +nsub <- length(unique(sleepstudy$Subject)) +ndays <- length(sleepstudy$Days) / nsub +dat <- matrix(sleepstudy$Reaction, nsub, ndays, byrow = TRUE) +rownames(dat) <- paste("sub", unique(sleepstudy$Subject), sep = ".") +exp.var <- matrix(sleepstudy$Days, 1, ndays, byrow = TRUE) + + +################################################### +### code chunk number 32: Cs_029_sleepmod1 +################################################### +sleep.model <- list( + A = "unequal", B = "zero", x0 = "zero", U = "zero", + D = matrix("b1", nsub, 1), d = exp.var, tinitx = 0, Q = "zero" +) +sleep.mod1 <- MARSS(dat, model = sleep.model) + + +################################################### +### code chunk number 33: Cs_030_sleepmod1-lm +################################################### +sleep.lm1 <- lm(Reaction ~ -1 + Subject + Days, data = sleepstudy) + + +################################################### +### code chunk number 34: Cs_031_sleepmod2 +################################################### +sleep.model <- list( + A = "unequal", B = "zero", x0 = "zero", U = "zero", + D = "unequal", d = exp.var, tinitx = 0, Q = "zero" +) +sleep.mod2 <- MARSS(dat, model = sleep.model, silent = TRUE) + + +################################################### +### code chunk number 35: Cs_032_sleepmod2-lm +################################################### +sleep.lm2 <- lm(Reaction ~ 0 + Subject + Days:Subject, data = sleepstudy) + + +################################################### +### code chunk number 36: Cs_033_sleepmod3 +################################################### +sleep.model <- list( + A = "unequal", B = "zero", x0 = "zero", U = "zero", + D = "unequal", d = exp.var, tinitx = 0, Q = "zero", + R = "diagonal and unequal" +) +sleep.mod3 <- MARSS(dat, model = sleep.model, silent = TRUE) + + +################################################### +### code chunk number 37: Cs_034_sleepmod4 +################################################### +inits <- list(A = coef(sleep.mod3)$A, D = coef(sleep.mod3)$D) +# estimate a separate intercept for each but slope is the same +sleep.model <- list( + A = "unequal", B = "diagonal and unequal", x0 = "zero", U = "zero", + D = "unequal", d = exp.var, tinitx = 0, Q = "diagonal and unequal", + R = "diagonal and unequal" +) +sleep.mod4 <- MARSS(dat, model = sleep.model, inits = inits, silent = TRUE) + + +################################################### +### code chunk number 38: Cs_035_sleepmod5 +################################################### +inits <- list(A = coef(sleep.mod3)$A, D = coef(sleep.mod3)$D) +# estimate a separate intercept for each but slope is the same +sleep.model <- list( + A = "unequal", B = "diagonal and equal", x0 = "zero", U = "zero", + D = "unequal", d = exp.var, tinitx = 0, Q = "diagonal and equal", + R = "diagonal and equal" +) +sleep.mod5 <- MARSS(dat, model = sleep.model, inits = inits, silent = TRUE) + + +################################################### +### code chunk number 39: Cs_036_mod5-gls +################################################### +sleep.mod5.gls <- gls(Reaction ~ 0 + Subject + Days:Subject, + data = sleepstudy, + correlation = corAR1(form = ~ 1 | Subject), method = "ML" +) + + +################################################### +### code chunk number 40: Cs_037_makemodeltable +################################################### +if (!exists("tabledir")) tabledir <- "" +slope.names <- paste("D", rownames(dat), sep = ".") +phi.names <- names(coef(sleep.mod4, type = "vector"))[str_detect(names(coef(sleep.mod4, type = "vector")), "B.")] + +model.data <- cbind( + c(logLik(sleep.lm2), coef(sleep.lm2)[19:36], rep(NA, nsub)), + c(sleep.mod2$logLik, coef(sleep.mod2, type = "vector")[slope.names], rep(NA, nsub)), + c(sleep.mod3$logLik, coef(sleep.mod3, type = "vector")[slope.names], rep(NA, nsub)), + c(sleep.mod4$logLik, coef(sleep.mod4, type = "vector")[c(slope.names, phi.names)]), + c(sleep.mod5$logLik, coef(sleep.mod5, type = "vector")[c(slope.names, rep("B.diag", nsub))]), + c(logLik(sleep.mod5.gls), coef(sleep.mod5.gls)[19:36], rep(coef(sleep.mod5.gls$modelStruct[[1]], unconstrained = FALSE), nsub)) +) +rownames(model.data) <- c("logLik", paste("slope", unique(sleepstudy$Subject)), paste("phi", unique(sleepstudy$Subject))) +colnames(model.data) <- c("lm", "mod2 em", "mod3 em", "mod4 em", "mod5 em", "mod5 gls") +tmpaln <- "c" # figure out the number of cols automatically +for (i in 1:ncol(model.data)) tmpaln <- paste(tmpaln, "c", sep = "") +thetable <- xtable(model.data, caption = "Parameter estimates of different versions of the model where each subject has a separate intercept (response time on normal sleep) and different slope by day (increase in response time with each day of sleep deprivation). The model types are discussed in the text.", label = "ref:tablesleepstudy", align = tmpaln, digits = 2) +print(thetable, type = "latex", file = paste(tabledir, "tablesleepstudy.tex", sep = ""), include.rownames = TRUE, include.colnames = TRUE, caption.placement = "top", table.placement = "htp", sanitize.text.function = function(x) { + x +}, hline.after = c(-1, 0, nrow(model.data))) + + diff --git a/inst/doc/Chapter_PVA.R b/inst/doc/Chapter_PVA.R new file mode 100644 index 0000000..301c594 --- /dev/null +++ b/inst/doc/Chapter_PVA.R @@ -0,0 +1,167 @@ +################################################### +### code chunk number 7: Cs1_Exercise1 +################################################### +par(mfrow = c(3, 3)) +sim.u <- -0.05 +sim.Q <- 0.02 +sim.R <- 0.05 +nYr <- 50 +fracmiss <- 0.1 +init <- 7 +years <- seq(1:nYr) +for (i in 1:9) { + x <- rep(NA, nYr) # vector for ts w/o measurement error + y <- rep(NA, nYr) # vector for ts w/ measurement error + x[1] <- init + for (t in 2:nYr) { + x[t] <- x[t - 1] + sim.u + rnorm(1, mean = 0, sd = sqrt(sim.Q)) + } + for (t in 1:nYr) { + y[t] <- x[t] + rnorm(1, mean = 0, sd = sqrt(sim.R)) + } + missYears <- + sample(years[2:(nYr - 1)], floor(fracmiss * nYr), replace = FALSE) + y[missYears] <- NA + plot(years, y, + xlab = "", ylab = "Log abundance", lwd = 2, bty = "l" + ) + lines(years, x, type = "l", lwd = 2, lty = 2) + title(paste("simulation ", i)) +} +legend("topright", c("Observed", "True"), + lty = c(-1, 2), pch = c(1, -1) +) + + +################################################### +### code chunk number 17: Cs1_Exercise2 +################################################### +sim.u <- -0.05 # growth rate +sim.Q <- 0.02 # process error variance +sim.R <- 0.05 # non-process error variance +nYr <- 50 # number of years of data to generate +fracmiss <- 0.1 # fraction of years that are missing +init <- 7 # log of initial pop abundance (~1100 individuals) +nsim <- 9 +years <- seq(1:nYr) # col of years +params <- matrix(NA, + nrow = (nsim + 2), ncol = 5, + dimnames = list( + c(paste("sim", 1:nsim), "mean sim", "true"), + c("kem.U", "den91.U", "kem.Q", "kem.R", "den91.Q") + ) +) +x.ts <- matrix(NA, nrow = nsim, ncol = nYr) # ts w/o measurement error +y.ts <- matrix(NA, nrow = nsim, ncol = nYr) # ts w/ measurement error +for (i in 1:nsim) { + x.ts[i, 1] <- init + for (t in 2:nYr) { + x.ts[i, t] <- x.ts[i, t - 1] + sim.u + rnorm(1, mean = 0, sd = sqrt(sim.Q)) + } + for (t in 1:nYr) { + y.ts[i, t] <- x.ts[i, t] + rnorm(1, mean = 0, sd = sqrt(sim.R)) + } + missYears <- sample(years[2:(nYr - 1)], floor(fracmiss * nYr), + replace = FALSE + ) + y.ts[i, missYears] <- NA + + # MARSS estimates + kem <- MARSS(y.ts[i, ], silent = TRUE) + # type=vector outputs the estimates as a vector instead of a list + params[i, c(1, 3, 4)] <- coef(kem, type = "vector")[c(2, 3, 1)] + + # Dennis et al 1991 estimates + den.years <- years[!is.na(y.ts[i, ])] # the non missing years + den.yts <- y.ts[i, !is.na(y.ts[i, ])] # the non missing counts + den.n.yts <- length(den.years) + delta.pop <- rep(NA, den.n.yts - 1) # transitions + tau <- rep(NA, den.n.yts - 1) # time step lengths + for (t in 2:den.n.yts) { + delta.pop[t - 1] <- den.yts[t] - den.yts[t - 1] # transitions + tau[t - 1] <- den.years[t] - den.years[t - 1] # time step length + } # end i loop + den91 <- lm(delta.pop ~ -1 + tau) # -1 specifies no intercept + params[i, c(2, 5)] <- c(den91$coefficients, var(resid(den91))) +} +params[nsim + 1, ] <- apply(params[1:nsim, ], 2, mean) +params[nsim + 2, ] <- c(sim.u, sim.u, sim.Q, sim.R, sim.Q) + + +################################################### +### code chunk number 21: Cs1_Exercise3 +################################################### +# Needs Example 2 to be run first +par(mfrow = c(3, 3)) +pd <- 0.1; xd <- -log(pd) # decline threshold +te <- 100; tyrs <- 1:te # extinction time horizon +for (j in c(10, 1:8)) { + real.ex <- denn.ex <- kal.ex <- matrix(nrow = te) + + # MARSS parameter estimates + u <- params[j, 1]; Q <- params[j, 3] + if (Q == 0) Q <- 1e-4 # just so the extinction calc doesn't choke + p.ever <- ifelse(u <= 0, 1, exp(-2 * u * xd / Q)) + for (i in 1:100) { + if (is.finite(exp(2 * xd * abs(u) / Q))) { + sec.part <- exp(2 * xd * abs(u) / Q) * + pnorm((-xd - abs(u) * tyrs[i]) / sqrt(Q * tyrs[i])) + } else { sec.part <- 0 } + kal.ex[i] <- p.ever * pnorm((-xd + abs(u) * tyrs[i]) / sqrt(Q * tyrs[i])) + sec.part + } # end i loop + + # Dennis et al 1991 parameter estimates + u <- params[j, 2]; Q <- params[j, 5] + p.ever <- ifelse(u <= 0, 1, exp(-2 * u * xd / Q)) + for (i in 1:100) { + denn.ex[i] <- p.ever * pnorm((-xd + abs(u) * tyrs[i]) / sqrt(Q * tyrs[i])) + + exp(2 * xd * abs(u) / Q) * + pnorm((-xd - abs(u) * tyrs[i]) / sqrt(Q * tyrs[i])) + } # end i loop + + # True parameter values + u <- sim.u; Q <- sim.Q + p.ever <- ifelse(u <= 0, 1, exp(-2 * u * xd / Q)) + for (i in 1:100) { + real.ex[i] <- p.ever * pnorm((-xd + abs(u) * tyrs[i]) / sqrt(Q * tyrs[i])) + + exp(2 * xd * abs(u) / Q) * + pnorm((-xd - abs(u) * tyrs[i]) / sqrt(Q * tyrs[i])) + } # end i loop + + plot(tyrs, real.ex, xlab = "Time steps into future", + ylab = "Probability of extinction", ylim = c(0, 1), bty = "l") + if (j <= 8) title(paste("simulation ", j)) + if (j == 10) title("average over sims") + lines(tyrs, denn.ex, type = "l", col = "red", lwd = 2, lty = 1) + lines(tyrs, kal.ex, type = "l", col = "green", lwd = 2, lty = 2) +} +legend("bottomright", c("True", "Dennis", "KalmanEM"), pch = c(1, -1, -1), + col = c(1, 2, 3), lty = c(-1, 1, 2), lwd = c(-1, 2, 2), bty = "n") + + +################################################### +### code chunk number 23: Cs1_Exercise4 +################################################### +par(mfrow = c(1, 1)) +CSEGtmufigure(N = 50, u = -0.05, s2p = 0.02) + + +################################################### +### code chunk number 27: Cs1_Exercise5 +################################################### +# If you have your data in a tab delimited file with a header +# This is how you would read it in using file.choose() +# to call up a directory browser. +# However, the package has the datasets for the examples +# dat=read.table(file.choose(), skip=1) +# dat=as.matrix(dat) +dat <- wilddogs +CSEGriskfigure(dat, CI.method = "hessian", silent = TRUE) + + +################################################### +### code chunk number 2: Cs1_a_required_libraries +################################################### +library(MARSS) + + diff --git a/inst/doc/Chapter_SealPopStructure.R b/inst/doc/Chapter_SealPopStructure.R new file mode 100644 index 0000000..3f85753 --- /dev/null +++ b/inst/doc/Chapter_SealPopStructure.R @@ -0,0 +1,300 @@ +################################################### +### code chunk number 2: Cs00_required_libraries +################################################### +library(MARSS) + + +################################################### +### code chunk number 9: Cs01_set.up.data +################################################### +years <- harborSeal[, 1] # first col is years +# leave off Hood Canal data for now +sealData <- t(harborSeal[, c(2:7, 9:13)]) + + +################################################### +### code chunk number 10: Cs02_fig1 +################################################### +par(mfrow = c(4, 3), mar = c(2, 2, 2, 2)) +for (i in 2:dim(harborSeal)[2]) { + plot(years, harborSeal[, i], xlab = "", ylab = "", + main = colnames(harborSeal)[i]) +} + + +################################################### +### code chunk number 11: Cs03_set.up.Z.models +################################################### +# H1 stock +Z1 <- factor(c("wa.or", "wa.or", rep("ps", 4), + "ca", "ca", "wa.or", "wa.or", "bc")) +# H2 coastal+PS +Z2 <- factor(c(rep("coast", 2), rep("ps", 4), rep("coast", 4), "ps")) +# H3 N and S +Z3 <- factor(c(rep("N", 6), "S", "S", "N", "S", "N")) +# H4 North Coast, Inland Strait, Puget Sound, South Coast +Z4 <- factor(c("nc", "nc", "is", "is", "ps", "ps", + "sc", "sc", "nc", "sc", "is")) +# H5 panmictic +Z5 <- factor(rep("pan", 11)) +# H6 Site +Z6 <- factor(1:11) # site +Z.models <- list(Z1, Z2, Z3, Z4, Z5, Z6) +names(Z.models) <- + c("stock", "coast+PS", "N-S", "NC+Strait+PS+SC", "panmictic", "site") + + +################################################### +### code chunk number 12: Cs04_Q.models +################################################### +Q.models <- c("diagonal and equal", "diagonal and unequal") + + +################################################### +### code chunk number 13: Cs04a_other.models +################################################### +U.model <- "unequal" +R.model <- "diagonal and equal" +A.model <- "scaling" +B.model <- "identity" +x0.model <- "unequal" +V0.model <- "zero" +model.constant <- list( + U = U.model, R = R.model, A = A.model, + x0 = x0.model, V0 = V0.model, tinitx = 0 +) + + +################################################### +### code chunk number 14: Cs05_run.the.models +################################################### +out.tab <- NULL +fits <- list() +for (i in 1:length(Z.models)) { + for (Q.model in Q.models) { + fit.model <- c(list(Z = Z.models[[i]], Q = Q.model), model.constant) + fit <- MARSS(sealData, + model = fit.model, + silent = TRUE, control = list(maxit = 1000) + ) + out <- data.frame( + H = names(Z.models)[i], Q = Q.model, U = U.model, + logLik = fit$logLik, AICc = fit$AICc, num.param = fit$num.params, + m = length(unique(Z.models[[i]])), + num.iter = fit$numIter, converged = !fit$convergence, + stringsAsFactors = FALSE + ) + out.tab <- rbind(out.tab, out) + fits <- c(fits, list(fit)) + if (i == 5) next # one m for panmictic so only run 1 Q + } +} + + +################################################### +### code chunk number 15: Cs06_sort.results +################################################### +min.AICc <- order(out.tab$AICc) +out.tab.1 <- out.tab[min.AICc, ] + + +################################################### +### code chunk number 16: Cs07_add.delta.aicc +################################################### +out.tab.1 <- cbind(out.tab.1, + delta.AICc = out.tab.1$AICc - out.tab.1$AICc[1] +) + + +################################################### +### code chunk number 17: Cs08_add.delta.aicc +################################################### +out.tab.1 <- cbind(out.tab.1, + rel.like = exp(-1 * out.tab.1$delta.AICc / 2) +) + + +################################################### +### code chunk number 18: Cs09_aic.weight +################################################### +out.tab.1 <- cbind(out.tab.1, + AIC.weight = out.tab.1$rel.like / sum(out.tab.1$rel.like) +) + + +################################################### +### code chunk number 19: Cs10_print.table +################################################### +out.tab.1$delta.AICc <- round(out.tab.1$delta.AICc, digits = 2) +out.tab.1$AIC.weight <- round(out.tab.1$AIC.weight, digits = 3) +print(out.tab.1[, c("H", "Q", "delta.AICc", "AIC.weight")], row.names = FALSE) + + +################################################### +### code chunk number 20: Cs11_fignorthsouth +################################################### +best.fit <- fits[min.AICc][[1]] +graphics::matplot(years, t(best.fit$states - best.fit$states[, 1]), + ylab = "Abundance index", xlab = "", + type = "l", lwd = 2, col = "black" +) +legend("topleft", c("North Coastal", "Inland Straits", "Puget Sound", "South Coastal"), lwd = 2, lty = c(1:4), bty = "n") + + +################################################### +### code chunk number 22: Cs12_new.Q.model +################################################### +for (i in 1:length(Z.models)) { + if (i == 5) next # don't rerun panmictic + for (Q.model in c("equalvarcov", "unconstrained")) { + fit.model <- c(list(Z = Z.models[[i]], Q = Q.model), model.constant) + fit <- MARSS(sealData, + model = fit.model, + silent = TRUE, control = list(maxit = 1000) + ) + out <- data.frame( + H = names(Z.models)[i], Q = Q.model, U = U.model, + logLik = fit$logLik, AICc = fit$AICc, num.param = fit$num.params, + m = length(unique(Z.models[[i]])), + num.iter = fit$numIter, converged = !fit$convergence, + stringsAsFactors = FALSE + ) + out.tab <- rbind(out.tab, out) + fits <- c(fits, list(fit)) + } +} + + +################################################### +### code chunk number 23: Cs13_out.tab.2 +################################################### +min.AICc <- order(out.tab$AICc) +out.tab.2 <- out.tab[min.AICc, ] +fits <- fits[min.AICc] +out.tab.2$delta.AICc <- out.tab.2$AICc - out.tab.2$AICc[1] +out.tab.2$rel.like <- exp(-1 * out.tab.2$delta.AICc / 2) +out.tab.2$AIC.weight <- out.tab.2$rel.like / sum(out.tab.2$rel.like) + + +################################################### +### code chunk number 24: Cs14_out.tab.2 +################################################### +out.tab.2$AIC.weight <- round(out.tab.2$AIC.weight, digits = 3) +out.tab.2$delta.AICc <- round(out.tab.2$delta.AICc, digits = 2) +print(out.tab.2[1:10, c("H", "Q", "delta.AICc", "AIC.weight")], row.names = FALSE) + + +################################################### +### code chunk number 25: Cs15_equalvarcov.weight +################################################### +c( + sum(out.tab.2$AIC.weight[out.tab.2$Q == "equalvarcov"]), + sum(out.tab.2$AIC.weight[out.tab.2$Q == "unconstrained"]), + sum(out.tab.2$AIC.weight[out.tab.2$Q == "diagonal and equal"]) +) + + +################################################### +### code chunk number 26: Cs16_Q.mat +################################################### +Q.unc <- coef(fits[[3]], type = "matrix")$Q + + +################################################### +### code chunk number 27: Cs17_Q.diag +################################################### +diag(Q.unc) + + +################################################### +### code chunk number 28: Cs18_Q.corr +################################################### +h <- diag(1 / sqrt(diag(Q.unc))) +Q.corr <- h %*% Q.unc %*% h +rownames(Q.corr) <- unique(Z4) +colnames(Q.corr) <- unique(Z4) + +Q.corr + + +################################################### +### code chunk number 29: Cs19_add.hood.canal +################################################### +sealData.hc <- rbind(sealData, harborSeal[, 8]) +rownames(sealData.hc)[12] <- "Hood.Canal" + + +################################################### +### code chunk number 30: Cs20_hood.z.models +################################################### +ZH1 <- factor(c("nc", "nc", "is", "is", "ps", + "ps", "sc", "sc", "nc", "sc", "is", "ps")) +ZH2 <- factor(c("nc", "nc", "is", "is", "ps", + "ps", "sc", "sc", "nc", "sc", "is", "hc")) +Z.models.hc <- list(ZH1, ZH2) +names(Z.models.hc) <- c("hood.in.ps", "hood.separate") + + +################################################### +### code chunk number 31: Cs21_hood.uqr.models +################################################### +Q3 <- matrix(list("offdiag"), 5, 5) +diag(Q3) <- "q" +Q3[, 5] <- 0 +Q3[5, ] <- 0 +Q3[5, 5] <- "q.hc" +Q.models <- list("equalvarcov", "unconstrained", Q3) +names(Q.models) <- c("equalvarcov", "unconstrained", "hood.independent") + + +################################################### +### code chunk number 32: Cs22_hood-q3 +################################################### +Q.models$hood.independent + + +################################################### +### code chunk number 33: Cs23_out.tab.hc +################################################### +out.tab.hc <- NULL +fits.hc <- list() +for (i in 1:length(Z.models.hc)) { + for (j in 1:length(Q.models)) { + if (i == 1 & j == 3) next # Q3 is only for Hood Separate model + Q.model <- Q.models[[j]] + fit.model <- c(list(Z = Z.models.hc[[i]], Q = Q.model), model.constant) + fit <- MARSS(sealData.hc, + model = fit.model, + silent = TRUE, control = list(maxit = 1000) + ) + out <- data.frame( + H = names(Z.models.hc)[i], Q = names(Q.models)[j], U = U.model, + logLik = fit$logLik, AICc = fit$AICc, num.param = fit$num.params, + m = length(unique(Z.models.hc[[i]])), + num.iter = fit$numIter, converged = !fit$convergence, + stringsAsFactors = FALSE + ) + out.tab.hc <- rbind(out.tab.hc, out) + fits.hc <- c(fits.hc, list(fit)) + } +} + + +################################################### +### code chunk number 34: Cs24_sort.aicc.hc +################################################### +min.AICc <- order(out.tab.hc$AICc) +out.tab.hc <- out.tab.hc[min.AICc, ] +out.tab.hc$delta.AICc <- out.tab.hc$AICc - out.tab.hc$AICc[1] +out.tab.hc$rel.like <- exp(-1 * out.tab.hc$delta.AICc / 2) +out.tab.hc$AIC.weight <- out.tab.hc$rel.like / sum(out.tab.hc$rel.like) + + +################################################### +### code chunk number 35: Cs25_out.tab.2 +################################################### +out.tab.hc$AIC.weight <- round(out.tab.hc$AIC.weight, digits = 3) +out.tab.hc$delta.AICc <- round(out.tab.hc$delta.AICc, digits = 2) +print(out.tab.hc[, c("H", "Q", "delta.AICc", "AIC.weight")], row.names = FALSE) + + diff --git a/inst/doc/Chapter_SealTrend.R b/inst/doc/Chapter_SealTrend.R new file mode 100644 index 0000000..6781555 --- /dev/null +++ b/inst/doc/Chapter_SealTrend.R @@ -0,0 +1,110 @@ +################################################### +### code chunk number 10: Cs2_Code1 +################################################### +# Code to fit the single population model with i.i.d. errors +# Read in data +dat <- t(harborSealWA) # MARSS needs time ACROSS columns +years <- dat[1, ] +n <- nrow(dat) - 1 +dat <- dat[2:nrow(dat), ] +legendnames <- (unlist(dimnames(dat)[1])) + +# estimate parameters +Z.model <- factor(c(1, 1, 1, 1, 1)) +R.model <- "diagonal and equal" +kem1 <- MARSS(dat, model = list(Z = Z.model, R = R.model)) + +# make figure +graphics::matplot(years, t(dat), + xlab = "", ylab = "Index of log abundance", + pch = c("1", "2", "3", "4", "5"), ylim = c(5, 9), bty = "L" +) +lines(years, kem1$states - 1.96 * kem1$states.se, + type = "l", + lwd = 1, lty = 2, col = "red" +) +lines(years, kem1$states + 1.96 * kem1$states.se, + type = "l", + lwd = 1, lty = 2, col = "red" +) +lines(years, kem1$states, type = "l", lwd = 2) +title("Observations and total population estimate", cex.main = .9) + +coef(kem1, type = "vector") # parameter estimates as a vector + +# show estimated elements for each parameter matrix as a list +coef(kem1) + +kem1$logLik # show the log-likelihood +kem1$AIC # show the AIC + + +################################################### +### code chunk number 17: Cs2_Code2 +################################################### +# Fit the single population model with independent and unequal errors +Z.model <- factor(c(1, 1, 1, 1, 1)) +R.model <- "diagonal and unequal" +kem2 <- MARSS(dat, model = list(Z = Z.model, R = R.model)) + +coef(kem2) # the estimated parameter elements +kem2$logLik # log likelihood +c(kem1$AIC, kem2$AIC) # AICs + +plot(kem2, plot.type="model.resids.ytT") + + +################################################### +### code chunk number 20: Cs2_Code3 +################################################### +# fit the north and south population model +Z.model <- factor(c(1, 1, 2, 2, 2)) +U.model <- "equal" +Q.model <- "diagonal and equal" +R.model <- "diagonal and unequal" +kem3 <- MARSS(dat, model = list( + Z = Z.model, + R = R.model, U = U.model, Q = Q.model +)) +# plot smoothation residuals +plot(kem3, plot.type="model.resids.ytT") + + +################################################### +### code chunk number 22: Cs2_Code4 +################################################### +Z.model <- factor(c(1, 2, 3, 4, 5)) +U.model <- "equal" +Q.model <- "diagonal and equal" +R.model <- "diagonal and unequal" +kem <- MARSS(dat, model = list( + Z = Z.model, + U = U.model, Q = Q.model, R = R.model +)) + + +################################################### +### code chunk number 29: Cs2_Code5_7 +################################################### +# Two subpopulations with different population parameters +Z.model <- factor(c(1, 1, 2, 2, 2)) +U.model <- "unequal" +Q.model <- "diagonal and unequal" +R.model <- "diagonal and unequal" +kem <- MARSS(dat, model = list(Z = Z.model, U = U.model, Q = Q.model, R = R.model)) + +# Hood Canal covaries with the other regions +Z.model <- factor(c(1, 1, 1, 1, 2)) +U.model <- "unequal" +Q.model <- "equalvarcov" +R.model <- "diagonal and unequal" +kem <- MARSS(dat, model = list(Z = Z.model, U = U.model, Q = Q.model, R = R.model)) + +# Three subpopulations with shared parameter values +Z.model <- factor(c(1, 1, 2, 2, 3)) +U.model <- "unequal" +Q.model <- "diagonal and unequal" +R.model <- "diagonal and unequal" +kem <- MARSS(dat, model = list(Z = Z.model, U = U.model, Q = Q.model, R = R.model)) + + diff --git a/inst/doc/Chapter_SpeciesInteractions.R b/inst/doc/Chapter_SpeciesInteractions.R new file mode 100644 index 0000000..f0333da --- /dev/null +++ b/inst/doc/Chapter_SpeciesInteractions.R @@ -0,0 +1,407 @@ +################################################### +### code chunk number 2: Cs01_load.wolf.data +################################################### +yr1960to2011 <- isleRoyal[, "Year"] >= 1960 & isleRoyal[, "Year"] <= 2011 +royale.dat <- log(t(isleRoyal[yr1960to2011, c("Wolf", "Moose")])) + + +################################################### +### code chunk number 3: Cs02_plotwolfmoosedata +################################################### +x <- isleRoyal[, "Year"] +y <- log(isleRoyal[, c("Wolf", "Moose")]) +graphics::matplot(x, y, + ylab = "Log count", xlab = "Year", type = "l", + lwd = 3, bty = "L", col = "black" +) +legend("topright", c("Wolf", "Moose"), lty = c(1, 2), bty = "n") + + +################################################### +### code chunk number 5: Cs03_z.score.wolf.data +################################################### +# if missing values are in the data, they should be NAs +z.royale.dat <- zscore(royale.dat) + + +################################################### +### code chunk number 6: Cs04_fit.model +################################################### +royale.model.1 <- list( + Z = "identity", B = "unconstrained", + Q = "diagonal and unequal", R = "diagonal and unequal", + U = "zero", tinitx = 1 +) +cntl.list <- list(allow.degen = FALSE, maxit = 200) +kem.1 <- MARSS(z.royale.dat, model = royale.model.1, control = cntl.list) + + +################################################### +### code chunk number 7: Cs05_fit.model.R0 +################################################### +royale.model.2 <- list( + Z = "identity", B = "unconstrained", + Q = "diagonal and unequal", R = "zero", U = "zero" +) +kem.2 <- MARSS(z.royale.dat, model = royale.model.2) + + +################################################### +### code chunk number 14: Cs05_fit.model.tinitx1 +################################################### +royale.model.4 <- list( + B = "unconstrained", U = "zero", Q = "diagonal and unequal", + Z = "identity", R = "zero", tinitx = 1 +) +kem.4 <- MARSS(z.royale.dat, model = royale.model.4) + + +################################################### +### code chunk number 8: Cs06_print-wolf.B +################################################### +wolf.B <- coef(kem.2, type = "matrix")$B +rownames(wolf.B) <- colnames(wolf.B) <- rownames(royale.dat) +print(wolf.B, digits = 2) + + +################################################### +### code chunk number 9: Cs07_prep-cov-wolf-moose +################################################### +clim.variables <- c( + "jan.feb.ave.temp", "jan.feb.ave.precip", + "july.sept.ave.temp" +) +yr1959to2010 <- isleRoyal[, "Year"] >= 1959 & isleRoyal[, "Year"] <= 2010 +clim.dat <- t(isleRoyal[yr1959to2010, clim.variables]) +z.score.clim.dat <- zscore(clim.dat) + + +################################################### +### code chunk number 10: Cs08_cov.wolf.moose.model +################################################### +royale.model.3 <- list( + Z = "identity", B = "unconstrained", + Q = "diagonal and unequal", R = "zero", U = "zero", + C = matrix(list( + 0, "Moose win temp", 0, "Moose win precip", + 0, "Moose sum temp" + ), 2, 3), + c = z.score.clim.dat +) + + +################################################### +### code chunk number 11: Cs09_fit-cov-wolf-moose-model +################################################### +kem.3 <- MARSS(z.royale.dat, model = royale.model.3) + + +################################################### +### code chunk number 12: Cs10_figwolfcov +################################################### +cor.fun <- function(x, y) { + text(0.5, 0.5, format(cor(x, y), digits = 2), cex = 2) +} +pairs(t(z.score.clim.dat), lower.panel = cor.fun) + + +################################################### +### code chunk number 13: Cs11_bad-data-2 (eval = FALSE) +################################################### +## bad.data <- z.royale.dat + matrix(rnorm(100, 0, sqrt(.2)), 2, 50) +## kem.bad <- MARSS(bad.data, model = model) + + +################################################### +### code chunk number 15: Cs12_load-plankton-data +################################################### +# only use the plankton, daphnia, & non-daphnia +plank.spp <- c("Large Phyto", "Small Phyto", "Daphnia", "Non-daphnia") +plank.dat <- ivesDataByWeek[, plank.spp] +# The data are not logged +plank.dat <- log(plank.dat) +# Transpose to get time going across the columns +plank.dat <- t(plank.dat) +# make a demeaned version +d.plank.dat <- (plank.dat - apply(plank.dat, 1, mean, na.rm = TRUE)) + + +################################################### +### code chunk number 16: Cs13_plot-plankton-data +################################################### +graphics::matplot((1:(52 * 6))[27:295], t(d.plank.dat), type = "l", lty = c(1, 1, 1, 1), lwd = c(1, 1, 3, 3), xlab = "week of study", ylab = "log biomass", xaxt = "n", xlim = c(11, 52 * 6 - 11), bty = "L") +# axis(1,at=(1:(52*6))[seq(27,295,2)]) +axis(1, at = seq(1, 52 * 6, 2)) +abline(v = c(52 * (1:6))) +abline(h = 0) + + +################################################### +### code chunk number 17: Cs14_set-up-plankton-model +################################################### +Q <- matrix(list(0), 4, 4) +diag(Q) <- c("Phyto", "Phyto", "Zoo", "Zoo") +R <- matrix(list(0), 4, 4) +diag(R) <- c("Phyto", "Phyto", "Zoo", "Zoo") +plank.model.0 <- list( + B = "unconstrained", U = "zero", Q = Q, + Z = "identity", A = "zero", R = R, + x0 = "unequal", tinitx = 1 +) + + +################################################### +### code chunk number 18: Cs15_fit-plank-model-0 +################################################### +kem.plank.0 <- MARSS(d.plank.dat, model = plank.model.0) + + +################################################### +### code chunk number 19: Cs16_print-B-0 +################################################### +# Cleaning up the B matrix for printing +B.0 <- coef(kem.plank.0, type = "matrix")$B[1:4, 1:4] +rownames(B.0) <- colnames(B.0) <- c("LP", "SP", "D", "ND") +print(B.0, digits = 2) + + +################################################### +### code chunk number 20: Cs17_print-B-Ives +################################################### +# Cleaning up the B matrix for printing +B.Ives.ML <- matrix(c(.5, NA, NA, NA, -.39, .076, NA, .1, NA, -.02, .77, NA, NA, -.1, NA, .55), 4, 4) +B.Ives.Obs <- matrix(c(.48, NA, NA, NA, -.39, .25, NA, .1, NA, -.17, .74, 0, NA, -.11, 0, .6), 4, 4) +B.Ives <- B.Ives.Obs +rownames(B.Ives) <- colnames(B.Ives) <- c("LP", "SP", "D", "ND") +print(B.Ives, digits = 2, na.print = "--") + + +################################################### +### code chunk number 21: Cs18_test-rm-NAs (eval = FALSE) +################################################### +## # Example code to see what would happen if we removed the NAs +## test.dat <- d.plank.dat[, !is.na(d.plank.dat[1, ])] +## test <- MARSS(test.dat, model = plank.model.0) + + +################################################### +### code chunk number 22: Cs19_fit-plank-model-1 +################################################### +plank.model.1 <- plank.model.0 +plank.model.1$Q <- "unconstrained" +kem.plank.1 <- MARSS(d.plank.dat, model = plank.model.1) + + +################################################### +### code chunk number 23: Cs20_print-B-1 +################################################### +# Cleaning up the B matrix for printing +B <- coef(kem.plank.1, type = "matrix")$B[1:4, 1:4] +rownames(B) <- colnames(B) <- c("LP", "SP", "D", "ND") +B[B == 0] <- NA +B.1 <- B +print(B, digits = 2, na.print = "--") + + +################################################### +### code chunk number 24: Cs21_B-2 +################################################### +B.2 <- matrix(list(0), 4, 4) # set up the list matrix +diag(B.2) <- c("B11", "B22", "B33", "B44") # give names to diagonals +# and names to the estimated non-diagonals +B.2[1, 2] <- "B12" +B.2[2, 3] <- "B23" +B.2[2, 4] <- "B24" +B.2[4, 2] <- "B42" +print(B.2) + + +################################################### +### code chunk number 25: Cs22_fit-plank-model-2 +################################################### +# model 2 +plank.model.2 <- plank.model.1 +plank.model.2$B <- B.2 +kem.plank.2 <- MARSS(d.plank.dat, model = plank.model.2) + + +################################################### +### code chunk number 26: Cs23_print-B-2 +################################################### +# Cleaning up the B matrix for printing +B <- coef(kem.plank.2, type = "matrix")$B[1:4, 1:4] +rownames(B) <- colnames(B) <- c("LP", "SP", "D", "ND") +B[B == 0] <- NA +B.2 <- B +print(B, digits = 2, na.print = "--") + + +################################################### +### code chunk number 27: Cs24_fit-plank-model-3 +################################################### +# model 3 +plank.model.3 <- plank.model.2 +plank.model.3$R <- diag(c(.04, .04, .16, .16)) +kem.plank.3 <- MARSS(d.plank.dat, model = plank.model.3) + + +################################################### +### code chunk number 28: Cs25_prep-covariates +################################################### +# transpose to make time go across columns +# drop=FALSE so that R doesn't change our matrix to a vector +phos <- t(log(ivesDataByWeek[, "Phosph", drop = FALSE])) +d.phos <- (phos - apply(phos, 1, mean, na.rm = TRUE)) + + +################################################### +### code chunk number 29: Cs26_add-covar-model-3 +################################################### +plank.model.4 <- plank.model.3 +plank.model.4$C <- matrix(list("C11", "C21", 0, 0), 4, 1) +plank.model.4$c <- d.phos + + +################################################### +### code chunk number 30: Cs27_plank-model-4 +################################################### +kem.plank.4 <- MARSS(d.plank.dat, model = plank.model.4) + + +################################################### +### code chunk number 31: Cs28_print-C +################################################### +# Cleaning up the C matrix for printing +Cmat <- coef(kem.plank.4, type = "matrix")$C[1:4, 1, drop = FALSE] +rownames(Cmat) <- c("LP", "SP", "D", "ND") +Cmat[Cmat == 0] <- NA +print(Cmat, digits = 2, na.print = "--") + + +################################################### +### code chunk number 32: Cs29_add-fish-to-data +################################################### +# transpose to make time go across columns +# drop=FALSE so that R doesn't change our matrix to a vector +fish <- t(log(ivesDataByWeek[, "Fish biomass", drop = FALSE])) +d.fish <- (fish - apply(fish, 1, mean, na.rm = TRUE)) +# plank.dat.w.fish = rbind(plank.dat,fish) +d.plank.dat.w.fish <- rbind(d.plank.dat, d.fish) + + +################################################### +### code chunk number 33: Cs30_B-covar +################################################### +B <- matrix(list(0), 5, 5) +diag(B) <- list("B11", "B22", "B33", "B44", "Bfish") +B[1, 2] <- "B12" +B[2, 3] <- "B23" +B[2, 4] <- "B24" +B[4, 2] <- "B42" +B[1:4, 5] <- list(0, 0, "C32", "C42") +print(B) + + +################################################### +### code chunk number 34: Cs31_C-covar +################################################### +C <- matrix(list("C11", "C21", 0, 0, 0), 5, 1) + + +################################################### +### code chunk number 35: Cs32_R.covar +################################################### +R <- matrix(list(0), 5, 5) +diag(R) <- list(0.04, 0.04, 0.16, 0.16, 0.36) + + +################################################### +### code chunk number 36: Cs33_Q-covar +################################################### +Q <- matrix(list(0), 5, 5) +Q[1:4, 1:4] <- paste(rep(1:4, times = 4), rep(1:4, each = 4), sep = "") +Q[5, 5] <- "fish" +Q[lower.tri(Q)] <- t(Q)[lower.tri(Q)] +print(Q) + + +################################################### +### code chunk number 37: Cs34_fit-covar-model +################################################### +plank.model.5 <- plank.model.4 +plank.model.5$B <- B +plank.model.5$C <- C +plank.model.5$Q <- Q +plank.model.5$R <- R +kem.plank.5 <- MARSS(d.plank.dat.w.fish, model = plank.model.5) + + +################################################### +### code chunk number 38: Cs35_print-B +################################################### +# Cleaning up the B matrix for printing +B.5 <- coef(kem.plank.5, type = "matrix")$B[1:4, 1:4] +rownames(B.5) <- colnames(B.5) <- c("LP", "SP", "D", "ND") +B.5[B.5 == 0] <- NA +print(B.5, digits = 2, na.print = "--") + + +################################################### +### code chunk number 40: Cs36_logLik-variates +################################################### +tmp <- kem.plank.5 +tmp$marss$data[5, ] <- NA +LL.variates <- MARSSkf(tmp)$logLik + + +################################################### +### code chunk number 41: Cs37_BQ.5 +################################################### +B <- coef(kem.plank.5, type = "matrix")$B[1:4, 1:4] +Q <- coef(kem.plank.5, type = "matrix")$Q[1:4, 1:4] + + +################################################### +### code chunk number 42: Cs38_max.eigen +################################################### +max(eigen(B)$values) + + +################################################### +### code chunk number 43: Cs39_max.eig.kron.b +################################################### +max(eigen(kronecker(B, B))$values) + + +################################################### +### code chunk number 44: Cs40_Vinfty +################################################### +m <- nrow(B) +vecV <- solve(diag(m * m) - kronecker(B, B)) %*% as.vector(Q) +V_inf <- matrix(vecV, nrow = m, ncol = m) + + +################################################### +### code chunk number 45: Cs41_det.b.squared +################################################### +abs(det(B))^2 + + +################################################### +### code chunk number 46: Cs42_det.b.scaled +################################################### +abs(det(B))^(2 / nrow(B)) + + +################################################### +### code chunk number 47: Cs43_covar.sigma.Vinf +################################################### +-sum(diag(Q)) / sum(diag(V_inf)) + + +################################################### +### code chunk number 48: Cs44_worse.case.reactivity +################################################### +max(eigen(t(B) %*% B)$values) - 1 + + diff --git a/inst/doc/Chapter_StructuralBreaks.R b/inst/doc/Chapter_StructuralBreaks.R new file mode 100644 index 0000000..58e6c0e --- /dev/null +++ b/inst/doc/Chapter_StructuralBreaks.R @@ -0,0 +1,166 @@ +################################################### +### code chunk number 2: Cs00_required_packages +################################################### +library(MARSS) +library(xtable) +library(survival) +library(Formula) +library(ggplot2) +library(Hmisc) +library(datasets) + + +################################################### +### code chunk number 3: Cs01_plotdata +################################################### +# load the datasets package +library(datasets) +data(Nile) # load the data +plot(Nile, ylab = "Flow volume", xlab = "") + + +################################################### +### code chunk number 4: Cs02_mod-nile-0 +################################################### +mod.nile.0 <- list( + Z = matrix(1), A = matrix(0), R = matrix("r"), + B = matrix(1), U = matrix(0), Q = matrix(0), + x0 = matrix("a") +) + + +################################################### +### code chunk number 5: Cs03_fit-data-0 +################################################### +# The data is in a ts format, and we need a matrix +dat <- t(as.matrix(Nile)) +rownames(dat) <- "Nile" + +kem.0 <- MARSS(dat, model = mod.nile.0, silent = TRUE) +summary(kem.0) + + +################################################### +### code chunk number 6: Cs04_mod-nile-1 +################################################### +mod.nile.1 <- list( + Z = matrix(1), A = matrix(0), R = matrix("r"), + B = matrix(1), U = matrix("u"), Q = matrix(0), + x0 = matrix("a") +) + + +################################################### +### code chunk number 7: Cs05_fit-data-1 +################################################### +kem.1 <- MARSS(dat, model = mod.nile.1, silent = TRUE) +summary(kem.1) + + +################################################### +### code chunk number 8: Cs06_mod-nile-2 +################################################### +mod.nile.2 <- list( + Z = matrix(1), A = matrix(0), R = matrix("r"), + B = matrix(1), U = matrix(0), Q = matrix("q"), + x0 = matrix("pi") +) + + +################################################### +### code chunk number 9: Cs07_fit-data-2 +################################################### +kem.2em <- MARSS(dat, model = mod.nile.2, silent = TRUE) +kem.2 <- MARSS(dat, + model = mod.nile.2, + inits = kem.2em$par, method = "BFGS", silent = TRUE +) +summary(kem.2) + + +################################################### +### code chunk number 11: Cs08_plotfit +################################################### +library(Hmisc) +par(mfrow = c(3, 1), mar = c(4, 4, 0.5, 0.5), oma = c(1, 1, 1, 1)) +x <- seq(tsp(Nile)[1], tsp(Nile)[2], tsp(Nile)[3]) +# model 0 +plot(Nile, ylab = "Flow volume", xlab = "", xaxp = c(1870, 1970, 10), bty = "L") +minor.tick(nx = 10, ny = 0, tick.ratio = .3) +kem <- kem.0 # model 0 results +lines(x, kem$states[1, ], col = "red", lwd = 2) +legend("topright", paste("model 0, AICc=", format(kem.0$AICc, digits = 1)), bty = "n") + +# model 1 +plot(Nile, ylab = "Flow volume", xlab = "", xaxp = c(1870, 1970, 10), bty = "n") +minor.tick(nx = 10, ny = 0, tick.ratio = .3) +kem <- kem.1 # model 1 results +lines(x, kem$states[1, ], col = "red", lwd = 2) +legend("topright", paste("model 1, AICc=", format(kem.1$AICc, digits = 1)), bty = "n") + +# model 2 +plot(Nile, ylab = "Flow volume", xlab = "", xaxp = c(1870, 1970, 10), bty = "L") +minor.tick(nx = 10, ny = 0, tick.ratio = .3) +kem <- kem.2 # model 0 results +lines(x, kem$states[1, ], col = "red", lwd = 2) +lines(1871:1970, kem$states[1, ] - 2 * kem$states.se[1, ], col = "red", lty = 2) +lines(1871:1970, kem$states[1, ] + 2 * kem$states.se[1, ], col = "red", lty = 2) +legend("topright", paste("model 2, AICc=", format(kem$AICc, digits = 1)), bty = "n") + + +################################################### +### code chunk number 12: Cs09_compute-resids +################################################### +resids.0 <- MARSSresiduals(kem.0, type = "tT")$mar.residuals +resids.1 <- MARSSresiduals(kem.1, type = "tT")$mar.residuals +resids.2 <- MARSSresiduals(kem.2, type = "tT")$mar.residuals + + +################################################### +### code chunk number 13: Cs10_plotoutliertests +################################################### +library(Hmisc) +par(mfrow = c(3, 1), mar = c(3, 4, 1.5, 2)) +x <- seq(tsp(Nile)[1], tsp(Nile)[2], tsp(Nile)[3]) +plot(x, resids.0[1, ], + ylab = "Std. residuals", xlab = "", type = "l", + ylim = c(-4, 4), xaxp = c(1870, 1970, 10), bty = "L" +) +minor.tick(nx = 10, ny = 0, tick.ratio = .3) +abline(h = c(1.97, -1.97, 0), lty = 2) +title("model 0--flat level") + +plot(x, resids.1[1, ], + ylab = "Std. residuals", xlab = "", type = "l", + ylim = c(-4, 4), xaxp = c(1870, 1970, 10), bty = "L" +) +minor.tick(nx = 10, ny = 0, tick.ratio = .3) +abline(h = c(1.97, -1.97, 0), lty = 2) +title("model 1--linearly declining level") + +plot(x, resids.2[1, ], + ylab = "Std. residuals", xlab = "", type = "l", + ylim = c(-4, 4), xaxp = c(1870, 1970, 10), bty = "L" +) +minor.tick(nx = 10, ny = 0, tick.ratio = .3) +abline(h = c(1.97, -1.97, 0), lty = 2) +title("model 2--stochastic level") + + +################################################### +### code chunk number 14: Cs11_plotresids +################################################### +par(mfrow = c(2, 1), mar = c(4, 3, 2, 1)) +x <- seq(tsp(Nile)[1], tsp(Nile)[2], tsp(Nile)[3]) +plot(x, resids.2[1, ], ylab = "", xlab = "", type = "l", ylim = c(-4, 4), xaxp = c(1870, 1970, 10)) +minor.tick(nx = 10, ny = 0, tick.ratio = .3) +abline(h = c(1.97, -1.97), lty = 2) +title("test for outliers") + +plot(x, resids.2[2, ], ylab = "", xlab = "", type = "l", ylim = c(-4, 4), xaxp = c(1870, 1970, 10)) +minor.tick(nx = 10, ny = 0, tick.ratio = .3) +abline(h = c(1.97, -1.97), lty = 2) +title("test for level changes") +mtext("Standardized residuals", side = 2, outer = TRUE, line = -1) + + diff --git a/inst/doc/Chapter_Structural_TS.R b/inst/doc/Chapter_Structural_TS.R new file mode 100644 index 0000000..3dfefab --- /dev/null +++ b/inst/doc/Chapter_Structural_TS.R @@ -0,0 +1,629 @@ +################################################### +### code chunk number 2: Cs00_required-libraries +################################################### +library(MARSS) +library(tidyr) +library(ggplot2) +library(forecast) + + +################################################### +### code chunk number 3: Cs101_structTS-level +################################################### +y <- window(treering, start = 0, end = 20) + +fit1 <- StructTS(y, type = "level") + + +################################################### +### code chunk number 4: Cs102_structTS-level +################################################### +vy <- var(y, na.rm = TRUE) / 100 +mod.list <- list( + x0 = matrix(y[1]), U = "zero", tinitx = 0, + Q = matrix(fit1$coef[1]), R = matrix(fit1$coef[2]), + V0 = matrix(1e+06 * vy) +) +fit2 <- MARSS(as.vector(y), model = mod.list) +# Now estimate the parameters +mod.list <- list( + x0 = matrix(y[1]), U = "zero", tinitx = 0, V0 = matrix(1e+06 * vy), + Q = matrix("s2xi"), R = matrix("s2eps") +) +fit3 <- MARSS(as.vector(y), model = mod.list, method = "BFGS") +fit4 <- MARSS(as.vector(y), + model = mod.list, + control = list(allow.degen = FALSE) +) + + +################################################### +### code chunk number 5: Cs103_structTS-level +################################################### +fit2$kf <- MARSSkfss(fit2) +fit3$kf <- MARSSkfss(fit3) +fit4$kf <- MARSSkfss(fit4) +df <- data.frame( + StructTS = fit1$fitted, fit2 = fit2$kf$xtt[1, ], + fit.bfgs = fit3$kf$xtt[1, ], fit.em = fit4$kf$xtt[1, ] +) +head(df) + + +################################################### +### code chunk number 6: Cs104_structTS-level +################################################### +require(tidyr) +require(ggplot2) +df1 <- as.data.frame(fit1$fitted) +vars <- colnames(df1) +df2 <- as.data.frame(t(fit3$kf$xtt)) +colnames(df2) <- vars +df3 <- as.data.frame(t(fit4$kf$xtt)) +colnames(df3) <- vars +df1$model <- "StructTS" +df2$model <- "MARSS BFGS" +df3$model <- "MARSS EM" +df1$t <- as.vector(time(fit1$fitted)) +df2$t <- df1$t +df3$t <- df1$t +df <- rbind(df1, df2, df3) +df <- df %>% pivot_longer(all_of(vars)) +ggplot(df, aes(x = t, y = value)) + + geom_line() + + facet_wrap(~model) + + ggtitle("Level estimate from model fit with StructTS and MARSS") + + +################################################### +### code chunk number 7: Cs201_structTS-leveltrend +################################################### +y <- log10(forecast:::subset.ts(UKgas, quarter = 2)) +fit1 <- StructTS(y, type = "trend") + + +################################################### +### code chunk number 8: Cs202_structTS-leveltrend +################################################### +vy <- var(y, na.rm = TRUE) / 100 +B <- matrix(c(1, 0, 1, 1), 2, 2) +Z <- matrix(c(1, 0), 1, 2) +# fitx parameters at fit1 values +mod.list <- list( + x0 = matrix(c(y[1], 0), 2, 1), U = "zero", tinitx = 0, + Q = diag(fit1$coef[1:2]), R = matrix(fit1$coef[3]), + V0 = matrix(1e+06 * vy, 2, 2), Z = Z, B = B +) +fit2 <- MARSS(as.vector(y), + model = mod.list, fit = FALSE, + control = list(trace = -1) +) +fit2$par <- fit2$start # otherwise par is NULL since fit=FALSE + + +################################################### +### code chunk number 9: Cs203_structTS-leveltrend +################################################### +mod.list <- list( + x0 = matrix(c(y[1], 0), 2, 1), U = "zero", tinitx = 0, + Q = ldiag(c("s2xi", "s2zeta")), R = matrix("s2eps"), + V0 = matrix(1e+06 * vy, 2, 2) + diag(1e-10, 2), Z = Z, B = B +) +fit3 <- MARSS(as.vector(y), model = mod.list, method = "BFGS") +fit4 <- MARSS(as.vector(y), + model = mod.list, + control = list(allow.degen = FALSE) +) + + +################################################### +### code chunk number 10: Cs204_structTS-leveltrend +################################################### +fit2$kf <- MARSSkfss(fit2) +fit3$kf <- MARSSkfss(fit3) +fit4$kf <- MARSSkfss(fit4) +data.frame( + StructTS = fit1$fitted[, 2], fit2 = fit2$kf$xtt[2, ], + fit.bfgs = fit3$kf$xtt[2, ], fit.em = fit4$kf$xtt[2, ] +)[1:5, ] + + +################################################### +### code chunk number 11: Cs205_structTS-leveltrend +################################################### +require(tidyr) +require(ggplot2) +df1 <- as.data.frame(fit1$fitted) +vars <- colnames(df1) +df2 <- as.data.frame(t(fit3$kf$xtt)) +colnames(df2) <- vars +df3 <- as.data.frame(t(fit4$kf$xtt)) +colnames(df3) <- vars +df1$model <- "StructTS" +df2$model <- "MARSS BFGS" +df3$model <- "MARSS EM" +df1$t <- as.vector(time(fit1$fitted)) +df2$t <- df1$t +df3$t <- df1$t +df <- rbind(df1, df2, df3) +df <- df %>% pivot_longer(all_of(vars)) +ggplot(df, aes(x = t, y = value, color = model, linetype = model, shape = model)) + + geom_line() + + geom_point() + + facet_wrap(~name, scales = "free") + + scale_linetype_manual("model", values = c(1, 1, 0)) + + scale_shape_manual("model", values = c(NA, NA, 16)) + + +################################################### +### code chunk number 12: Cs301_structTS-bsm +################################################### +y <- log10(UKgas) +fit1 <- StructTS(y, type = "BSM") + + +################################################### +### code chunk number 13: Cs302_structTS-bsm +################################################### +makeB <- function(nf) { + B <- matrix(0, nf + 1L, nf + 1L) + B[1L:2L, 1L:2L] <- c(1, 0, 1, 1) + B[3L, ] <- c(0, 0, rep(-1, nf - 1L)) + if (nf >= 3L) { + ind <- 3:nf + B[cbind(ind + 1L, ind)] <- 1 + } + return(B) +} + + +################################################### +### code chunk number 14: Cs303_structTS-bsm +################################################### +nf <- frequency(y) +vy <- var(y) / 100 +B <- makeB(nf) +Z <- matrix(c(1, 0, 1, rep(0, nf - 2L)), 1, nf + 1) + +Q <- ldiag(list("s2xi", "s2zeta", "s2w", 0, 0)) +R <- matrix("s2eps") +V0 <- matrix(1e+06 * vy, nf + 1, nf + 1) + diag(1e-10, nf + 1) +mod.list <- list( + x0 = matrix(c(y[1], rep(0, nf)), ncol = 1), + U = "zero", A = "zero", tinitx = 0, + Q = Q, R = R, V0 = V0, Z = Z, B = B +) +fit3 <- MARSS(as.vector(y), model = mod.list, method = "BFGS") +fit4 <- MARSS(as.vector(y), + model = mod.list, + control = list(allow.degen = FALSE) +) +fit4$kf <- MARSSkfss(fit4) +fit3$kf <- MARSSkfss(fit3) + + +################################################### +### code chunk number 15: Cs304_structTS-bsm +################################################### +require(tidyr) +require(ggplot2) +df1 <- as.data.frame(fit1$fitted) +vars <- colnames(df1) +df2 <- as.data.frame(t(fit3$kf$xtt)[, 1:3]) +colnames(df2) <- vars +df3 <- as.data.frame(t(fit4$kf$xtt)[, 1:3]) +colnames(df3) <- vars +df1$model <- "StructTS" +df2$model <- "MARSS BFGS" +df3$model <- "MARSS EM" +df1$t <- as.vector(time(fit1$fitted)) +df1$Qtr <- as.vector(cycle(fit1$fitted)) +df2$t <- df1$t +df2$Qtr <- df1$Qtr +df3$t <- df1$t +df3$Qtr <- df1$Qtr +df <- rbind(df1, df2, df3) +df <- subset(df, Qtr == 1) %>% pivot_longer(all_of(vars)) +ggplot(df, aes(x = t, y = value, color = model, linetype = model, shape = model)) + + geom_line() + + geom_point() + + facet_wrap(~name, scales = "free") + + scale_linetype_manual("model", values = c(1, 1, 0)) + + scale_shape_manual("model", values = c(NA, NA, 15)) + + +################################################### +### code chunk number 16: Cs401_forecast +################################################### +y <- log10(UKgas) +fit1 <- StructTS(y, type = "BSM") + +nf <- frequency(y) +vy <- var(y) / 100 +B <- makeB(nf) # defined in the BSM section above +Z <- matrix(c(1, 0, 1, rep(0, nf - 2L)), 1, nf + 1) +V0 <- matrix(1e+06 * vy, nf + 1, nf + 1) + diag(1e-10, nf + 1) +mod.list <- list( + x0 = matrix(c(y[1], rep(0, nf)), ncol = 1), + U = "zero", A = "zero", tinitx = 0, + Q = diag(c(fit1$coef[1:3], 0, 0)), + R = matrix(fit1$coef[4]), + V0 = V0, Z = Z, B = B +) +fit2 <- MARSS(as.vector(y), model = mod.list) + + +################################################### +### code chunk number 17: Cs402_forecast +################################################### +fr1 <- predict(fit1, n.ahead = 5) +fr1 + + +################################################### +### code chunk number 18: Cs403_forecast +################################################### +fr2 <- predict(fit2, n.ahead = 5, interval = "prediction") +fr2 + + +################################################### +### code chunk number 19: Cs404_forecast +################################################### +rbind( + pred1 = fr1$pred, pred2 = fr2$pred$estimate[fr2$ft], + se1 = fr1$se, se2 = fr2$pred$se[fr2$ft] +) + + +################################################### +### code chunk number 20: Cs405_forecast +################################################### +fr1 <- forecast:::forecast.StructTS(fit1, h = 10) +fr2 <- forecast(fit2, h = 10) +p1 <- ggplot2::autoplot(fr1, include = 8) +p2 <- ggplot2::autoplot(fr2, include = 8) +gridExtra::grid.arrange(p1, p2, nrow = 1) + + +################################################### +### code chunk number 21: Cs501_fitted +################################################### +fitted1 <- fitted(fit1) +plot(fitted1) + + +################################################### +### code chunk number 22: Cs502_fitted +################################################### +fitted2 <- tsSmooth(fit2, type = "xtt") +fitted2 <- subset(fitted2, .rownames %in% c("X1", "X2", "X3")) + + +################################################### +### code chunk number 23: Cs503_fitted +################################################### +ggplot(fitted2, aes(x = t, y = .estimate)) + + geom_line() + + facet_wrap(~.rownames, ncol = 1, scale = "free_y") + + +################################################### +### code chunk number 24: Cs504_fitted +################################################### +fitted3 <- MARSSkfss(fit2)$xtt +fitted3 <- ts(t(fitted3[1:3, ])) +plot(fitted3) + + +################################################### +### code chunk number 25: Cs505_fitted +################################################### +fitted2 <- fitted(fit2, type = "ytt") +df2 <- data.frame(t = as.numeric(time(fitted1)), fitted = fitted2$.fitted, name = "MARSS") +df1 <- data.frame(t = df2$t, fitted = as.numeric(fitted1[, 1] + fitted1[, 3]), name = "StructTS") +df <- rbind(df1, df2) +df$y <- fitted2$y + +ggplot(df) + + geom_line(aes(x = t, y = fitted)) + + geom_point(aes(x = t, y = y), col = "blue") + + facet_wrap(~name, ncol = 1) + + +################################################### +### code chunk number 26: Cs601_residuals +################################################### +resids1 <- residuals(fit1) + + +################################################### +### code chunk number 27: Cs602_residuals +################################################### +resids2 <- residuals(fit2, type = "tt", standardization = "marginal") + + +################################################### +### code chunk number 28: Cs603_residuals +################################################### +df2 <- data.frame(t = as.numeric(time(resids1)), resids = resids2$.std.resids, name = "MARSS") +df1 <- data.frame(t = df2$t, resids = as.numeric(resids1), name = "StructTS") +df3 <- data.frame(t = df2$t, resids = df1$resids - df2$resids, name = "difference") +df <- rbind(df1, df2, df3) + +ggplot(df, aes(x = t, y = resids)) + + geom_line() + + facet_wrap(~name, ncol = 1, scale = "free_y") + + ggtitle("Marginal standardized model residuals") + + +################################################### +### code chunk number 29: Cs701_multivariate +################################################### +set.seed(100) +TT <- 60 +t <- 1:TT +q <- 0.01 +r <- 0.01 +trend <- 0.2 * sin((1:TT) / 4) +level <- cumsum(rnorm(TT, trend, sqrt(q))) + +# Simulated data +n <- 5 +miss.percent <- 0.5 +ym <- matrix(1, n, 1) %*% level + matrix(rnorm(TT * n, 0, sqrt(r * 100)), n, TT) +ym[sample(n * TT, miss.percent * n * TT)] <- NA + + +################################################### +### code chunk number 30: Cs702_multivariate +################################################### +par(mfrow = c(2, 1), mar = c(3, 3, 1, 1)) +ylims <- c(min(ym, na.rm = TRUE), max(ym, na.rm = TRUE)) +plot(t, trend, ylim = ylims, col = "red", type = "l") +lines(t, level, col = "black") +legend("topright", c("trend", "level"), lty = 1, col = c("red", "black")) +matplot(t, t(ym), pch = 1:n, ylab = "y", xlab = "", ylim = ylims, main = "bad data") +lines(t, level) + + +################################################### +### code chunk number 31: Cs703_multivariate +################################################### +vy <- var(y, na.rm = TRUE) / 100 +mod.list.x <- list( + x0 = matrix(list("x0", 0), nrow = 2), tinitx = 1, + V0 = matrix(1e+06 * vy, 2, 2) + diag(1e-10, 2), + Q = ldiag(list(q, "qt")), + B = matrix(c(1, 0, 1, 1), 2, 2), + U = "zero" +) + + +################################################### +### code chunk number 32: Cs704_multivariate +################################################### +mod.list.y <- list( + A = "zero", + R = "diagonal and equal" +) + + +################################################### +### code chunk number 33: Cs705_multivariate +################################################### +Z <- matrix(c(1, 0), 1, 2, byrow = TRUE) +mod.list <- c(mod.list.x, mod.list.y, list(Z = Z)) +fitu <- MARSS(ym[1, ], model = mod.list, method = "BFGS", inits = list(x0 = 0)) + + +################################################### +### code chunk number 34: Cs706_multivariate +################################################### +Z <- matrix(c(1, 0), n, 2, byrow = TRUE) +mod.list <- c(mod.list.x, mod.list.y, list(Z = Z)) +fitm <- MARSS(ym, model = mod.list, method = "BFGS", inits = list(x0 = 0)) + + +################################################### +### code chunk number 35: Cs707_multivariate +################################################### +true <- data.frame( + .rownames = rep(c("X1", "X2"), each = TT), t = t, + .estimate = c(level, trend), .se = NA, name = "true" +) +statesu <- tsSmooth(fitu) +statesu$name <- "one bad" +statesm <- tsSmooth(fitm) +statesm$name <- "multiple bad" +df <- rbind(true, statesu, statesm) + +ggplot(df, aes(x = t, y = .estimate, col = name)) + + geom_line() + + facet_wrap(~.rownames, scale = "free_y") + + +################################################### +### code chunk number 36: Cs708_multivariate +################################################### +par(mfrow = c(2, 1), mar = c(3, 3, 1, 1)) +covariate <- matrix(c(rep(0, TT - 10), rep(1, 10)), nrow = 1) +ymc <- ym +D <- matrix(c(-1, -1, 0, 1, 1), ncol = 1) +ymc <- ym + D %*% covariate +matplot(t, t(ymc), pch = 1:n, ylab = "y", xlab = "", main = "data") +lines(level) +plot(t, covariate[1, ], col = "blue", lty = 2, type = "l", main = "covariate") + + +################################################### +### code chunk number 37: Cs709_multivariate +################################################### +Z <- matrix(c(1, 0), n, 2, byrow = TRUE) +mod.list <- c(mod.list.x, mod.list.y, list(Z = Z, d = covariate)) +fitmc <- MARSS(ymc, model = mod.list, method = "BFGS", inits = list(x0 = 0)) + + +################################################### +### code chunk number 38: Cs710_multivariate +################################################### +dvals <- data.frame( + x = paste0("y", 1:n), + val = c(D, coef(fitmc, type = "matrix")$D), + name = rep(c("true", "estimate"), each = n) +) +ggplot(dvals, aes(x = x, y = val, col = name)) + + geom_point() + + xlab("observation series") + + ylab("D estimate") + + ggtitle("D true and estimated values") + + +################################################### +### code chunk number 39: Cs711_multivariate +################################################### +statesmc <- tsSmooth(fitmc) +statesmc$name <- "multiple w covariate" +df <- rbind(true, statesu, statesm, statesmc) + +ggplot(df, aes(x = t, y = .estimate, col = name)) + + geom_line() + + facet_wrap(~.rownames, scale = "free_y") + + +################################################### +### code chunk number 40: Cs712_multivariate +################################################### +r2 <- r * c(100, 10, 10, 200, 400) +a <- runif(n, -1, 1) +err <- rnorm(n * TT, mean = rep(a, each = TT), sd = rep(sqrt(r2), each = TT)) +ym2 <- matrix(1, nrow = n) %*% level + matrix(err, nrow = n, byrow = TRUE) +ym2[sample(n * TT, miss.percent * n * TT)] <- NA +matplot(t, t(ym2), pch = 1:n, ylab = "y", xlab = "", main = "data with different error and bias") +lines(level) + + +################################################### +### code chunk number 41: Cs713_multivariate +################################################### +Z <- matrix(c(1, 0), n, 2, byrow = TRUE) +mod.list <- c(mod.list.x, list(Z = Z, R = "diagonal and unequal", A = "scaling")) +fitm2 <- MARSS(ym2, model = mod.list, method = "BFGS", inits = list(x0 = 0)) + + +################################################### +### code chunk number 42: Cs714_multivariate +################################################### +rvals <- data.frame( + x = paste0("y", 1:n), + val = c(r2, coef(fitm2)$R), + name = rep(c("true", "estimate"), each = n) +) +ggplot(rvals, aes(x = x, y = val, col = name)) + + geom_point() + + xlab("observation series") + + ylab("R variance estimate") + + ggtitle("R true and estimated values") + + +################################################### +### code chunk number 43: Cs715_multivariate +################################################### +statesm2 <- tsSmooth(fitm2) +statesm2$name <- "multiple w different Rs" +df <- rbind(true, statesu, statesm, statesmc, statesm2) + +ggplot(df, aes(x = t, y = .estimate, col = name)) + + geom_line() + + facet_wrap(~.rownames, scale = "free_y") + + +################################################### +### code chunk number 44: Cs716_multivariate +################################################### +set.seed(100) +TT <- 60 +t <- 1:TT +q <- 0.5 +qt <- 0.01 +r <- 0.1 +b <- 0.5 +trend <- 0.2 * sin((1:TT) / 4) +level1 <- cumsum(rnorm(TT, trend, sqrt(q))) +level2 <- cumsum(rnorm(TT, trend, sqrt(q))) + +# Simulated data +ym <- rbind(level1, level2) + matrix(rnorm(TT * 2, 0, sqrt(r)), 2, TT) + + +################################################### +### code chunk number 45: Cs717_multivariate +################################################### +par(mfrow = c(2, 1), mar = c(3, 3, 1, 1)) +ylims <- c(min(ym, na.rm = TRUE), max(ym, na.rm = TRUE)) +plot(t, ym[1, ], ylim = ylims, type = "p") +lines(t, level1, col = "black") +plot(t, ym[2, ], ylim = ylims, type = "p") +lines(t, level2, col = "black") + + +################################################### +### code chunk number 46: Cs718_multivariate +################################################### +vy <- var(y, na.rm = TRUE) / 100 +Z <- matrix(c(1, 0), 1, 2) +mod.list.x <- list( + x0 = matrix(list("x0", 0), nrow = 2), tinitx = 1, + V0 = matrix(1e+06 * vy, 2, 2) + diag(1e-10, 2), + Q = ldiag(list(q, "qt")), + B = matrix(c(1, 0, 1, 1), 2, 2), + U = "zero" +) +mod.list <- c(mod.list.x, mod.list.y, list(Z = Z)) +fitm1 <- MARSS(ym[1, ], model = mod.list, method = "BFGS", inits = list(x0 = 0)) +fitm2 <- MARSS(ym[2, ], model = mod.list, method = "BFGS", inits = list(x0 = 0)) + + +################################################### +### code chunk number 47: Cs719_multivariate +################################################### +Z <- matrix(c(1, 0, 0, 0, 1, 0), 2, 3, byrow = TRUE) +m <- 3 +mod.list.x <- list( + x0 = matrix(list("x0.1", "x0.2", 0), nrow = m), tinitx = 1, + V0 = matrix(1e+06 * vy, m, m) + diag(1e-10, m), + Q = ldiag(list("q", "q", "qt")), + B = matrix(c(1, 0, 1, 0, 1, 1, 0, 0, 1), m, m, byrow = TRUE), + U = "zero" +) +mod.list <- c(mod.list.x, mod.list.y, list(Z = Z)) +fitm3 <- MARSS(ym, model = mod.list, method = "BFGS", inits = list(x0 = 0)) + + +################################################### +### code chunk number 48: Cs720_multivariate +################################################### +true <- data.frame( + .rownames = rep(c("level 1", "level 2", "trend"), each = TT), t = t, + .estimate = c(level1, level2, trend), .se = NA, name = "true" +) +statesm1 <- tsSmooth(fitm1) +statesm1$name <- "ts 1 alone" +statesm1$.rownames[statesm1$.rownames == "X2"] <- "trend" +statesm1$.rownames[statesm1$.rownames == "X1"] <- "level 1" +statesm2 <- tsSmooth(fitm2) +statesm2$name <- "ts 2 alone" +statesm2$.rownames[statesm2$.rownames == "X2"] <- "trend" +statesm2$.rownames[statesm2$.rownames == "X1"] <- "level 2" +statesm3 <- tsSmooth(fitm3) +statesm3$name <- "ts 1 & 2 together" +statesm3$.rownames[statesm3$.rownames == "X3"] <- "trend" +statesm3$.rownames[statesm3$.rownames == "X1"] <- "level 1" +statesm3$.rownames[statesm3$.rownames == "X2"] <- "level 2" +df <- rbind(true, statesm1, statesm2, statesm3) + +ggplot(df, aes(x = t, y = .estimate, col = name)) + + geom_line() + + facet_wrap(~.rownames, scale = "free_y", ncol = 1) + + diff --git a/inst/doc/Chapter_UnivariateDLM.R b/inst/doc/Chapter_UnivariateDLM.R new file mode 100644 index 0000000..2282eaa --- /dev/null +++ b/inst/doc/Chapter_UnivariateDLM.R @@ -0,0 +1,195 @@ +################################################### +### code chunk number 2: Cs_01_readindata +################################################### +data(SalmonSurvCUI) +years <- SalmonSurvCUI[, 1] +TT <- length(years) +# response data: logit(survival) +dat <- matrix(SalmonSurvCUI[, 2], nrow = 1) + + +################################################### +### code chunk number 3: Cs_02_zscore +################################################### +CUI <- SalmonSurvCUI[, "CUI.apr"] +CUI.z <- zscore(CUI) +# number of state = # of regression params (slope(s) + intercept) +m <- 1 + 1 + + +################################################### +### code chunk number 4: Cs_030_plotdata +################################################### +par(mfrow = c(m, 1), mar = c(4, 4, 0.1, 0), oma = c(0, 0, 2, 0.5)) +plot(years, dat, xlab = "", ylab = "Logit(s)", bty = "n", xaxt = "n", pch = 16, col = "darkgreen", type = "b") +plot(years, CUI.z, xlab = "", ylab = "CUI", bty = "n", xaxt = "n", pch = 16, col = "blue", type = "b") +axis(1, at = seq(1965, 2005, 5)) +mtext("Year of ocean entry", 1, line = 3) + + +################################################### +### code chunk number 5: Cs_031_univDLMproc +################################################### +# for process eqn +B <- diag(m) # 2x2; Identity +U <- matrix(0, nrow = m, ncol = 1) # 2x1; both elements = 0 +Q <- matrix(list(0), m, m) # 2x2; all 0 for now +diag(Q) <- c("q1", "q2") # 2x2; diag = (q1,q2) + + +################################################### +### code chunk number 6: Cs_04_univDLMobs +################################################### +# for observation eqn +Z <- array(NA, c(1, m, TT)) # NxMxT; empty for now +Z[1, 1, ] <- rep(1, TT) # Nx1; 1's for intercept +Z[1, 2, ] <- CUI.z # Nx1; regr variable +A <- matrix(0) # 1x1; scalar = 0 +R <- matrix("r") # 1x1; scalar = r + + +################################################### +### code chunk number 7: Cs_05_univDLM-list +################################################### +# only need starting values for regr parameters +inits.list <- list(x0 = matrix(c(0, 0), nrow = m)) +# list of model matrices & vectors +mod.list <- list(B = B, U = U, Q = Q, Z = Z, A = A, R = R) + + +################################################### +### code chunk number 8: Cs_06_univDLM-fit +################################################### +dlm1 <- MARSS(dat, inits = inits.list, model = mod.list) + + +################################################### +### code chunk number 9: Cs_07_plotdlm1 +################################################### +ylabs <- c(expression(alpha[t]), expression(beta[t])) +colr <- c("darkgreen", "blue") +par(mfrow = c(m, 1), mar = c(4, 4, 0.1, 0), oma = c(0, 0, 2, 0.5)) +for (i in 1:m) { + mn <- dlm1$states[i, ] + se <- dlm1$states.se[i, ] + plot(years, mn, + xlab = "", ylab = ylabs[i], bty = "n", xaxt = "n", type = "n", + ylim = c(min(mn - 2 * se), max(mn + 2 * se)) + ) + lines(years, rep(0, TT), lty = "dashed") + lines(years, mn, col = colr[i], lwd = 3) + lines(years, mn + 2 * se, col = colr[i]) + lines(years, mn - 2 * se, col = colr[i]) +} +axis(1, at = seq(1965, 2005, 5)) +mtext("Year of ocean entry", 1, line = 3) + + +################################################### +### code chunk number 10: Cs_08_univDLM-fore-mean +################################################### +# get list of Kalman filter output +kf.out <- MARSSkfss(dlm1) +# forecasts of regr parameters; 2xT matrix +eta <- kf.out$xtt1 +# ts of E(forecasts) +fore.mean <- vector() +for (t in 1:TT) { + fore.mean[t] <- Z[, , t] %*% eta[, t, drop = F] +} + + +################################################### +### code chunk number 11: Cs_09_univDLM-fore-Var +################################################### +# variance of regr parameters; 1x2xT array +Phi <- kf.out$Vtt1 +# obs variance; 1x1 matrix +R.est <- coef(dlm1, type = "matrix")$R +# ts of Var(forecasts) +fore.var <- vector() +for (t in 1:TT) { + tZ <- matrix(Z[, , t], m, 1) # transpose of Z + fore.var[t] <- Z[, , t] %*% Phi[, , t] %*% tZ + R.est +} + + +################################################### +### code chunk number 12: Cs_10_plot-dlm-Forecast-Logit +################################################### +par(mar = c(4, 4, 0.1, 0), oma = c(0, 0, 2, 0.5)) +ylims <- c(min(fore.mean - 2 * sqrt(fore.var)), max(fore.mean + 2 * sqrt(fore.var))) +plot(years, t(dat), + type = "p", pch = 16, ylim = ylims, + col = "blue", xlab = "", ylab = "Logit(s)", xaxt = "n" +) +lines(years, fore.mean, type = "l", xaxt = "n", ylab = "", lwd = 3) +lines(years, fore.mean + 2 * sqrt(fore.var)) +lines(years, fore.mean - 2 * sqrt(fore.var)) +axis(1, at = seq(1965, 2005, 5)) +mtext("Year of ocean entry", 1, line = 3) + + +################################################### +### code chunk number 13: Cs_11_plot-dlm-Forecast-Raw +################################################### +invLogit <- function(x) { + 1 / (1 + exp(-x)) +} +ff <- invLogit(fore.mean) +fup <- invLogit(fore.mean + 2 * sqrt(fore.var)) +flo <- invLogit(fore.mean - 2 * sqrt(fore.var)) +par(mar = c(4, 4, 0.1, 0), oma = c(0, 0, 2, 0.5)) +ylims <- c(min(flo), max(fup)) +plot(years, invLogit(t(dat)), + type = "p", pch = 16, ylim = ylims, + col = "blue", xlab = "", ylab = "Survival", xaxt = "n" +) +lines(years, ff, type = "l", xaxt = "n", ylab = "", lwd = 3) +lines(years, fup) +lines(years, flo) +axis(1, at = seq(1965, 2005, 5)) +mtext("Year of ocean entry", 1, line = 3) + + +################################################### +### code chunk number 14: Cs_12_dlm-forecast-errors +################################################### +# forecast errors +innov <- kf.out$Innov + + +################################################### +### code chunk number 16: Cs_13_plot-dlmQQ +################################################### +# use layout to get nicer plots +layout(matrix(c(0, 1, 1, 1, 0), 1, 5, byrow = TRUE)) +# set up L plotting space +par(mar = c(4, 4, 1, 0), oma = c(0, 0, 0, 0.5)) +# Q-Q plot of innovations +qqnorm(t(innov), main = "", pch = 16, col = "blue") +qqline(t(innov)) +# set up R plotting space +# par(mar=c(4,0,1,1)) #, oma=c(0,0,0,0.5)) +# boxplot of innovations +# boxplot(t(innov), axes=FALSE) + + +################################################### +### code chunk number 17: Cs_14_dlm-Innov-t-test +################################################### +# p-value for t-test of H0: E(innov) = 0 +t.test(t(innov), mu = 0)$p.value + + +################################################### +### code chunk number 19: Cs_15_plot-dlm-ACF +################################################### +# use layout to get nicer plots +layout(matrix(c(0, 1, 1, 1, 0), 1, 5, byrow = TRUE)) +# set up plotting space +par(mar = c(4, 4, 1, 0), oma = c(0, 0, 0, 0.5)) +# ACF of innovations +acf(t(innov), lwd = 2, lag.max = 10) + + diff --git a/inst/doc/Chapter_inits.R b/inst/doc/Chapter_inits.R new file mode 100644 index 0000000..de7a687 --- /dev/null +++ b/inst/doc/Chapter_inits.R @@ -0,0 +1,222 @@ +################################################### +### code chunk number 2: Cs_mci_001 +################################################### +fulldat <- lakeWAplanktonTrans +years <- fulldat[, "Year"] >= 1965 & fulldat[, "Year"] < 1975 +dat <- t(fulldat[years, c("Greens", "Bluegreens")]) +the.mean <- apply(dat, 1, mean, na.rm = TRUE) +the.sigma <- sqrt(apply(dat, 1, var, na.rm = TRUE)) +dat <- (dat - the.mean) * (1 / the.sigma) + + +################################################### +### code chunk number 3: Cs_mci_002 +################################################### +covariates <- rbind( + Temp = fulldat[years, "Temp"], + TP = fulldat[years, "TP"] +) +# demean the covariates +the.mean <- apply(covariates, 1, mean, na.rm = TRUE) +covariates <- covariates - the.mean + + +################################################### +### code chunk number 4: Cs_mci_003 +################################################### +U <- x0 <- "zero" +Q <- "unconstrained" +d <- covariates +A <- "zero" +D <- "unconstrained" +R <- "diagonal and equal" +model.list <- list( + U = U, Q = Q, A = A, R = R, + D = D, d = d, x0 = x0 +) +kem <- MARSS(dat, model = model.list) + + +################################################### +### code chunk number 5: Cs_mci_004 +################################################### +coef(kem, what = "par") + + +################################################### +### code chunk number 6: Cs_mci_005 +################################################### +out <- coef(kem, what = "par") +out$D +out$Q + + +################################################### +### code chunk number 7: Cs_mci_006 +################################################### +inits <- list(Q = 1) +kem <- MARSS(dat, model = model.list, inits = inits) +# or +inits <- list(Q = matrix(c(1, 0, 1), 3, 1)) +kem <- MARSS(dat, model = model.list, inits = inits) + + +################################################### +### code chunk number 8: Cs_mci_007 +################################################### +inits <- list(Q = matrix(c(1, 0.5, 0.7), 3, 1)) +kem <- MARSS(dat, model = model.list, inits = inits) + + +################################################### +### code chunk number 9: Cs_mci_008 +################################################### +inits <- list(Q = matrix(c(1, 0.5, 0.7), 3, 1), D = 1) +kem <- MARSS(dat, model = model.list, inits = inits) + + +################################################### +### code chunk number 10: Cs_mci_009 +################################################### +inits <- list(D = coef(kem, what = "par")$D) +kem <- MARSS(dat, model = model.list, inits = inits) + + +################################################### +### code chunk number 11: Cs_mci_010 +################################################### +# create the par list from the output +inits <- coef(kem, what = "par") +bfgs <- MARSS(dat, model = model.list, inits = inits, method = "BFGS") + + +################################################### +### code chunk number 12: Cs_mci_0101 +################################################### +# create the par list from the output +bfgs <- MARSS(dat, model = model.list, inits = kem, method = "BFGS") + + +################################################### +### code chunk number 13: Cs_mci_011 +################################################### +###################################################################################################### MARSSmcinit function +# Does a simple MonteCarlo initialization of the EM routine +# The function uses a number of MARSS utility functions accessed with MARSS::: +####################################################################################################### +MARSSmcinit <- function(MLEobj, + control = list( + numInits = 500, numInitSteps = 10, + MCbounds = list( + B = c(0, 1), U = c(-1, 1), Q = c(1, 1), + Z = c(0, 1), A = c(-1, 1), R = c(1, 1), x0 = c(-1, 1) + ) + ), + silent = FALSE) { + control.default <- list(numInits = 500, numInitSteps = 10, MCbounds = list(B = c(0, 1), U = c(-1, 1), Q = c(1, 1), Z = c(0, 1), A = c(-1, 1), R = c(1, 1), x0 = c(-1, 1))) + if (!is.null(control)) { + if (!is.list(control)) stop("MARSSmcinit: control must be a list") + if (any(!(names(control) %in% names(control.default)))) stop(paste("MARSSmcinit: allowed control list elements are", names(control.default))) + control.new <- control.default + for (i in names(control)) control.new[[i]] <- control[[i]] + control <- control.new + } + drawProgressBar <- FALSE + if (!silent) { # then we can draw a progress bar + cat("\n") + cat("> Starting Monte Carlo Initializations\n") + prev <- MARSS:::progressBar() # this is an internal function to MARSS + drawProgressBar <- TRUE + } + MODELobj <- MLEobj[["marss"]] + y <- MODELobj$data + par.dims <- attr(MODELobj, "model.dims") + m <- par.dims[["x"]][1] + n <- par.dims[["y"]][1] + TT <- par.dims[["data"]][2] + ## YM matrix for handling missing values + YM <- matrix(as.numeric(!is.na(y)), n, TT) + # Make sure the missing vals in y are zeroed out + y[YM == 0] <- 0 + + free.tmp <- MODELobj$free + dim.tmp <- list(Z = c(n, m), A = c(n, 1), R = c(n, n), B = c(m, m), U = c(m, 1), Q = c(m, m), x0 = c(m, 1)) + bounds.tmp <- control$MCbounds + init <- bestinits <- MLEobj$start + bestLL <- -1.0e10 + + # loop over numInits: # of random draws of initial values + for (loop in 1:control$numInits) { + init.loop <- init + + # Draw random values + en <- c("Z", "A", "R", "B", "U", "Q", "x0") + for (el in en) { + dim.param <- dim.tmp[[el]] + if (!MARSS:::is.fixed(free.tmp[[el]])) { # is.fixed is a utility func in MARSS + bounds.param <- bounds.tmp[[el]] + # use the first fixed and free in a temporally varying model; arbitrary + tmp <- list(f = MARSS:::sub3D(MODELobj$fixed[[el]], t = 1), D = MARSS:::sub3D(MODELobj$free[[el]], t = 1)) + if (el %in% c("Q", "R")) { # random starts drawn from a wishart dist + if (bounds.param[1] < dim.param[1]) { + df <- dim.param[1] + } else { + df <- bounds.param[1] + } + S <- diag(bounds.param[2], dim.param[1]) + # draw a random matrix from wishart + tmp.random <- MARSS:::rwishart(df, S) / df + # reapply the sharing and fixed constraints + par.random <- solve(t(tmp$D) %*% tmp$D) %*% t(tmp$D) %*% (MARSS:::vec(tmp.random) - tmp$f) + } else { + par.random <- matrix(runif(dim(tmp$D)[2], bounds.param[1], bounds.param[2]), dim(tmp$D)[2], 1) + if (el %in% c("B")) { + tmp.max <- max(abs(eigen(par.random, only.values = TRUE)$values)) + # rescale to bring the max abs eigenvalues to between 0 and 1 + par.random <- par.random / (tmp.max / runif(1, .01, .99)) + } + if (el %in% c("x0")) { + x0init <- init$x0 # where the original start is + x.lo <- ifelse(x0init > 0, exp(bounds.param[1]) * x0init, exp(bounds.param[2]) * x0init) + x.hi <- ifelse(x0init > 0, exp(bounds.param[2]) * x0init, exp(bounds.param[1]) * x0init) + par.random <- matrix(runif(dim(tmp$D)[2], x.lo, x.hi), dim(tmp$D)[2], 1) + } + } + } else { + par.random <- matrix(0, 0, 1) + } + init.loop[[el]] <- par.random + } + + ## Call MARSSkem() with these inits + MLEobj$start <- init.loop + MLEobj$control$maxit <- control$numInitSteps + MLEobj$control$minit <- 1 + MLEobj$control$silent <- TRUE # don't output + MLEobj <- MARSSkem(MLEobj) # get new fit using this init + + if (drawProgressBar == TRUE) prev <- MARSS:::progressBar(loop / control$numInits, prev) + + ## Check whether the likelihood is the best observed + ## Only use bootstrap param draws where loglike did not go down during numInitSteps + if (MLEobj$logLik > bestLL) { + # update the best initial parameter estimates + bestinits <- MLEobj$par + bestLL <- MLEobj$logLik + } + } # end numInits loop + + return(bestinits) +} + + +################################################### +### code chunk number 14: Cs_mci_012 +################################################### +dat <- t(harborSeal) +dat <- dat[c(2, nrow(dat)), ] +fit1 <- MARSS(dat) +MCinits <- MARSSmcinit(fit1, control = list(numInits = 10)) +fit2 <- MARSS(dat, inits = MCinits) + + diff --git a/inst/doc/EMDerivation.Rnw b/inst/doc/EMDerivation.Rnw new file mode 100644 index 0000000..1cd3114 --- /dev/null +++ b/inst/doc/EMDerivation.Rnw @@ -0,0 +1,3149 @@ +%\VignetteIndexEntry{EM_Derivation} +%\VignettePackage{MARSS} +\documentclass[]{article} +%set margins to 1in without fullsty + \addtolength{\oddsidemargin}{-.875in} + \addtolength{\evensidemargin}{-.875in} + \addtolength{\textwidth}{1.75in} + + \addtolength{\topmargin}{-.875in} + \addtolength{\textheight}{1.75in} + %\usepackage{fullpage} %more standardized margins + +% choose options for [] as required from the list +% in the Reference Guide, Sect. 2.2 + +\usepackage{Sweave} +\usepackage{multirow} +\usepackage[bottom]{footmisc}% places footnotes at page bottom +\usepackage[round]{natbib} +\usepackage[small]{caption} +%\setkeys{Gin}{width=\textwidth} +%\setkeys{Gin}{width=0.8\textwidth} %make the figs 50 perc textwidth +\setlength{\captionmargin}{0pt} +\setlength{\abovecaptionskip}{0pt} +\setlength{\belowcaptionskip}{15pt} + +% Math stuff +\usepackage{amsmath} % the standard math package +\usepackage{amsfonts} % the standard math package +%%%% bold maths symbol system: +\def\uupsilon{\pmb{\upsilon}} +\def\llambda{\pmb{\lambda}} +\def\bbeta{\pmb{\beta}} +\def\aalpha{\pmb{\alpha}} +\def\zzeta{\pmb{\zeta}} +\def\etaeta{\mbox{\boldmath $\eta$}} +\def\xixi{\mbox{\boldmath $\xi$}} +\def\ep{\mbox{\boldmath $\epsilon$}} +\def\DEL{\mbox{\boldmath $\Delta$}} +\def\PHI{\mbox{\boldmath $\Phi$}} +\def\PI{\mbox{\boldmath $\Pi$}} +\def\LAM{\mbox{\boldmath $\Lambda$}} +\def\LAMm{\mathbb{L}} +\def\GAM{\mbox{\boldmath $\Gamma$}} +\def\OMG{\mbox{\boldmath $\Omega$}} +\def\SI{\mbox{\boldmath $\Sigma$}} +\def\TH{\mbox{\boldmath $\Theta$}} +\def\UPS{\mbox{\boldmath $\Upsilon$}} +\def\XI{\mbox{\boldmath $\Xi$}} +%% Parameters are bold face +\def\ZZ{\mbox{$\mathbf Z$}} \def\zz{\mbox{$\mathbf z$}} +\def\AA{\mbox{$\mathbf A$}} \def\aa{\mbox{$\mathbf a$}} +\def\BB{\mbox{$\mathbf B$}} \def\bb{\mbox{$\mathbf b$}} +\def\CC{\mbox{$\mathbf C$}} \def\cc{\mbox{$\mathbf c$}} +\def\DD{\mbox{$\mathbf D$}} \def\dd{\mbox{$\mathbf d$}} +\def\EE{\mbox{$\mathbf E$}} \def\ee{\mbox{$\mathbf e$}} +\def\FF{\mbox{$\mathbf F$}} \def\ff{\mbox{$\mathbf f$}} +\def\GG{\mbox{$\mathbf G$}} \def\gg{\mbox{$\mathbf g$}} +\def\HH{\mbox{$\mathbf H$}} \def\hh{\mbox{$\mathbf h$}} +\def\II{\mbox{$\mathbf I$}} \def\ii{\mbox{$\mathbf i$}} +\def\IIm{\mbox{$\mathbf I$}} +\def\JJ{\mbox{$\mathbf J$}} +\def\KK{\mbox{$\mathbf K$}} +\def\MM{\mbox{$\mathbf M$}} \def\mm{\mbox{$\mathbf m$}} +\def\OO{\mbox{$\mathbf O$}} +\def\PP{\mbox{$\mathbf P$}} \def\pp{\mbox{$\mathbf p$}} +\def\QQ{\mbox{$\mathbf Q$}} \def\qq{\mbox{$\mathbf q$}} +\def\Qb{\mbox{$\mathbf G$}} \def\Qm{\mathbb{Q}} +\def\RR{\mbox{$\mathbf R$}} \def\rr{\mbox{$\mathbf r$}} +\def\Rb{\mbox{$\mathbf H$}} \def\Rm{\mathbb{R}} +\def\SS{\mbox{$\mathbf S$}} +\def\TT{\mbox{$\mathbf T$}} +\def\UU{\mbox{$\mathbf U$}} \def\uu{\mbox{$\mathbf u$}} +\def\Ub{\mbox{$\mathbf C$}} \def\Ua{\mbox{$\mathbf c$}} \def\Um{\UPS} +%% Random variables in slant +\def\VV{\mbox{$\pmb{V}$}} \def\vv{\mbox{$\pmb{v}$}} +\def\WW{\mbox{$\pmb{W}$}} \def\ww{\mbox{$\pmb{w}$}} +\def\XX{\mbox{$\pmb{X}$}} \def\xx{\mbox{$\pmb{x}$}} +\def\YY{\mbox{$\pmb{Y}$}} \def\yy{\mbox{$\pmb{y}$}} +\def\LL{\mbox{$\pmb{L}$}} \def\ll{\mbox{$\pmb{l}$}} +%% Other stuff +\def\Ab{\mbox{$\mathbf D$}} \def\Aa{\mbox{$\mathbf d$}} \def\Am{\PI} +\def\Ba{\mbox{$\mathbf L$}} \def\Bm{\UPS} \def\Bb{\mbox{$\mathbf J$}} +\def\Ca{\Delta} \def\Cb{\GAM} +\def\Za{\mbox{$\mathbf N$}} \def\Zm{\XI} +\def\Zb{\mbox{$\mathbf M$}} +\def\zer{\mbox{\boldmath $0$}} +\def\E{\,\textup{\textrm{E}}} +\def\vec{\,\textup{\textrm{vec}}} +\def\var{\,\textup{\textrm{var}}} +\def\cov{\,\textup{\textrm{cov}}} +\def\diag{\,\textup{\textrm{diag}}} +\def\trace{\,\textup{\textrm{trace}}} +\def\N{\,\textup{\textrm{N}}} +\def\MVN{\,\textup{\textrm{MVN}}} +\def\EXy{\,\textup{\textrm{E}}_{\text{{\bf XY}}}} +\def\hatxt{\widetilde{\mbox{$\mathbf x$}}_t} +\def\hatxone{\widetilde{\mbox{$\mathbf x$}}_1} +\def\hatxzero{\widetilde{\mbox{$\mathbf x$}}_0} +\def\hatxtm{\widetilde{\mbox{$\mathbf x$}}_{t-1}} +\def\hatxQtm{\widetilde{\mathbb{x}}_{t-1}} +\def\hatyt{\widetilde{\mbox{$\mathbf y$}}_t} +\def\hatyyt{\widetilde{\mbox{$\mathbf y$}\mbox{$\mathbf y$}^\top}_t} +\def\hatyone{\widetilde{\mbox{$\mathbf y$}}_1} +\def\hatwt{\widetilde{\mbox{$\mathbf w$}}_t} +\def\hatOt{\widetilde{\OO}_t} +\def\hatWt{\widetilde{\WW}_t} +\def\hatYXt{\widetilde{\mbox{$\mathbf{y}\mathbf{x}$}}_t} +\def\hatYXttm{\widetilde{\mbox{$\mathbf{y}\mathbf{x}$}}_{t,t-1}} +\def\hatPt{\widetilde{\PP}_t} +\def\hatPtm{\widetilde{\PP}_{t-1}} +\def\hatPQtm{\widetilde{\mathbb{P}}_{t-1}} +\def\hatPttm{\widetilde{\PP}_{t,t-1}} +\def\hatPQttm{\widetilde{\mathbb{P}}_{t,t-1}} +\def\hatPtmt{\widetilde{\PP}_{t-1,t}} +\def\hatVt{\widetilde{\VV}_t} +\def\hatVttm{\widetilde{\VV}_{t,t-1}} +\def\hatBmt{\widetilde{\Bm}_t} +\def\hatCat{\widetilde{\Ca}_t} +\def\hatCbt{\widetilde{\Cb}_t} +\def\hatZmt{\widetilde{\Zm}_t} +\def\YYr{\dot{\mbox{$\pmb{Y}$}}} +\def\yyr{\dot{\mbox{$\pmb{y}$}}} +\def\aar{\dot{\mbox{$\mathbf a$}}} +\def\ZZr{\dot{\mbox{$\mathbf Z$}}} +\def\RRr{\dot{\mbox{$\mathbf R$}}} +\def\IR{\nabla} +\usepackage[round]{natbib} % to get references that are like in ecology papers +% \citet{} for inline citation name (year); \citep for citation in parens (name year) + +%allow lines in matrix +\makeatletter +\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{% + \hskip -\arraycolsep + \let\@ifnextchar\new@ifnextchar + \array{#1}} +\makeatother +\setcounter{tocdepth}{1} %no subsections in toc + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{document} +\SweaveOpts{concordance=TRUE} +%\SweaveOpts{concordance=TRUE} +\author{Elizabeth Eli Holmes\footnote{Northwest Fisheries Science Center, NOAA Fisheries, Seattle, WA 98112, + eli.holmes@noaa.gov, http://faculty.washington.edu/eeholmes}} +\title{Derivation of an EM algorithm for constrained and unconstrained multivariate autoregressive state-space (MARSS) models} +\date{original 16 Feb 2013 \\ +{\small \emph{typo in Eqn 124}, 14 Apr 2018 \\ +\emph{added derivation of variance of Y conditioned on y and x}, 3 Feb 2020 \\ +\emph{typo in eqn 29-31}, 20 Oct 2020}} +\maketitle +\begin{abstract} +This report presents an Expectation-Maximization (EM) algorithm for estimation of the maximum-likelihood parameter values of constrained multivariate autoregressive Gaussian state-space (MARSS) models. The MARSS model can be written: x(t)=Bx(t-1)+u+w(t), y(t)=Zx(t)+a+v(t), where w(t) and v(t) are multivariate normal error-terms with variance-covariance matrices Q and R respectively. MARSS models are a class of dynamic linear model and vector autoregressive model state-space model. Shumway and Stoffer presented an unconstrained EM algorithm for this class of models in 1982, and a number of researchers have presented EM algorithms for specific types of constrained MARSS models since then. In this report, I present a general EM algorithm for constrained MARSS models, where the constraints are on the elements within the parameter matrices (B,u,Q,Z,a,R). The constraints take the form vec(M)=f+Dm, where M is the parameter matrix, f is a column vector of fixed values, D is a matrix of multipliers, and m is the column vector of estimated values. This allows a wide variety of constrained parameter matrix forms. The presentation is for a time-varying MARSS model, where time-variation enters through the fixed (meaning not estimated) f(t) and D(t) matrices for each parameter. The algorithm allows missing values in y and partially deterministic systems where 0s appear on the diagonals of Q or R. +\end{abstract} +Keywords: Time-series analysis, Kalman filter, EM algorithm, maximum-likelihood, vector autoregressive model, dynamic linear model, parameter estimation, state-space +\vfill +{\noindent \small citation: Holmes, E. E. 2013. Derivation of the EM algorithm for constrained and unconstrained multivariate autoregressive state-space (MARSS) models. Technical Report. arXiv:1302.3919 } + \newpage +\section{Overview} + +EM algorithms extend maximum-likelihood estimation to models with hidden states and are widely used in engineering and computer science applications. This report presents an EM algorithm for a general class of Gaussian constrained multivariate autoregressive state-space (MARSS) models, with a hidden multivariate autoregressive process (state) model and a multivariate observation model. This is an important class of time-series model used in many different scientific fields. The reader is referred to \citet{McLachlanKrishnan2008} for general background on EM algorithms and to \citet{Harvey1989} for a discussion of EM algorithms for time-series data. \citet{Borman2009} has a nice tutorial on the EM algorithm. + +Before showing the derivation for the constrained case, I first show a derivation of the EM algorithm for unconstrained\footnote{``unconstrained'' means that each element in the parameter matrix is estimated and no elements are fixed or shared.} MARSS model. This EM algorithm was published by \citet{ShumwayStoffer1982}, but my derivation is more similar to Ghahramani et al's \citep{GhahramaniHinton1996, RoweisGhahramani1999} slightly different presentation. One difference in my presentation and all these previous presentations, however, is that I treat the data as a random variable throughout; this means that there are no ``special" update equations for the missing values case. Another difference is that I present the update equations for both stochastic initial states and fixed initial states. I then extend the derivation to constrained MARSS models where there are fixed and shared elements in the parameter matrices and to the case of degenerate MARSS models where some processes in the model are deterministic rather than stochastic. See also \citet{Wuetal1996} and \citet{Zuuretal2003a} for other examples of the EM algorithm for different classes of constrained MARSS models. + +When working with MARSS models, one should be cognizant that misspecification of the prior on the initial hidden states can have catastrophic and difficult to detect effects on the parameter estimates. There is often no sign that something is amiss with the MLE estimates output by an EM algorithm. There has been much work on how to avoid these initial conditions effects; see especially literature on vector autoregressive state-space models in the economics literature. The trouble often occurs when the prior on the initial states is inconsistent with the distribution of the initial states that is implied by the maximum-likelihood model. This often happens when the model implies a specific covariance structure on the initial states, but since the maximum-likelihood parameters are unknown, this covariance structure is unknown. Using a diffuse prior does not help since your diffuse prior still has some covariance structure (often independence is being imposed). In some ways the EM algorithm is less sensitive to a misspecified prior because it uses the smoothed states conditioned on all the data. However, if the prior is inconsistent with the model, the EM algorithm will not (cannot) find the MLEs. It is very possible however that it will find parameter estimates that are closer to what you intend (estimates uninfluenced by the prior), but they will not be MLEs. The derivation presented here allows one to circumvent these problems by treating the initial states as fixed (and estimated) parameters. The problematic initial state variance-covariance matrix is removed from the model, albeit at the cost of additional estimated parameters. + +Finally, when working with MARSS models, one needs to ensure that the model is identifiable; i.e., a unique solution exists. For a given MARSS model, some of the parameter elements will need to be fixed (not estimated) in order to produce a model with one solution. How to do that depends on the MARSS model being fitted and is up to the user. + +\subsection{The MARSS model} + +The linear MARSS model with a stochastic initial state\footnote{`Stochastic' means the initial state has a distribution rather than a fixed value. Because the process must start somewhere, one needs to specify the initial state. In equation \ref{eq:MARSS}, I show the initial state specified as a distribution. However, the derivation will also discuss the case where the initial state is specified as an unknown fixed parameter.} is +\begin{subequations}\label{eq:MARSS} +\begin{gather} +\xx_t = \BB\xx_{t-1} + \uu + \ww_t, \text{ where } \WW_t \sim \MVN(0,\QQ) \label{eq:MARSSx}\\ +\yy_t = \ZZ\xx_t + \aa + \vv_t, \text{ where } \VV_t \sim \MVN(0,\RR) \label{eq:MARSSy}\\ +\XX_0 \sim \MVN(\xixi,\LAM) \label{eq:MARSSx1} +\end{gather} +\end{subequations} +The $\yy$ equation is called the observation process, and $\yy_t$ is a $n \times 1$ vector. The $\xx$ equation is called the state or process equation, and $\xx_t$ is a $m \times 1$ vector. The equation for $\xx$ describes a multivariate autoregressive process (also called a random walk or Markov process). $\ww$ are the process errors and are specific realizations of the random variable $\WW$; $\vv$ is defined similarly. The initial state can either defined at $t=0$, as is done in equation \ref{eq:MARSS}, or at $t=1$. When presenting the MARSS model, I use $t=0$ but the derivations will show the EM algorithm for both cases. $\QQ$ and $\RR$ are variance-covariance matrices that specify the stochasticity in the observation and state equations. + +In the MARSS model, $\xx$ and $\yy$ equations describe two stochastic processes. By tradition, one conditions on observations of $\yy$, and $\xx$ is treated as completely hidden, hence the name `hidden Markov process' of which a MARSS model is a special type. However, you could condition on (partial) observations of $\xx$ and treat $\yy$ as a (partially) hidden process---with as usual proper constraints to ensure identifiability. Nonetheless in this report, I follow tradition and treat $\xx$ as hidden and $\yy$ as (partially) observed. If $\xx$ is partially observed then the update equations stay the same but the expectations shown in section \ref{sec:compexpectations} would be computed conditioned on the partially observed $\xx$. + +The first part of this report will review the derivation of an EM algorithm for the time-constant MARSS model (equation \ref{eq:MARSS}). However the main objective of this report is to show the derivation of an EM algorithm to solve a much more general MARSS model (section \ref{sec:tvMARSS}), which is a MARSS model with linear constraints on time-varying parameters: +\begin{equation}\label{eq:MARSS.ex} +\begin{gathered} +\xx_t = \BB_t\xx_{t-1} + \uu_t + \GG_t\ww_t, \text{ where } \WW_t \sim \mathrm{MVN}(0,\QQ_t)\\ +\yy_t = \ZZ_t\xx_t + \aa_t + \HH_t\vv_t, \text{ where } \VV_t \sim \mathrm{MVN}(0,\RR_t)\\ +\xx_{0} = \xixi + \FF\ll, \text{ where } \ll \sim \mathrm{MVN}(0,\LAM) +\end{gathered} +\end{equation} +The initial state can either defined at $t=0$, as is done in equation \ref{eq:MARSS.ex}, or at $t=1$. + +The linear constraints appear as the vectorization of each parameter ($\BB$, $\uu$, $\QQ$, $\ZZ$, $\aa$, $\RR$, $\xixi$, $\LAM$) is described by the relation $\ff_t+\DD_t\mm$. This relation specifies linear constraints of the form $\beta_i + \beta_{a,i} a + \beta_{b,i} b + \dots$ on the elements in each MARSS parameter matrix. Equation \ref{eq:MARSS.ex} is a much broader class of MARSS models that includes MARSS models with exogenous variable (covariates), AR-p models, moving average models, constrained MARSS models and models that are combinations of these. The derivation also includes partially deterministic systems where $\GG_t$, $\HH_t$ and $\FF$ may have all zero rows. + +\subsection{The joint log-likelihood function} +Equation \ref{eq:MARSS.ex} describes a multivariate stochastic process and $\YY_t$ and $\XX_t$ are random variables whose distributions are given by Equation \ref{eq:MARSS.ex}. Denote a specific realization of these random variables as $\yy$ and $\xx$ which denotes a set of all $y$'s and $x$'s from $t=1$ to $T$. The joint log-likelihood\footnote{This is not the log likelihood output by the Kalman filter. The log likelihood output by the Kalman filter is the $\log\LL(\yy;\Theta)$ (notice $\xx$ does not appear), which is known as the marginal log likelihood.} of $\yy$ and $\xx$ can then be written then as follows\footnote{The log-likelihood function is shown here for the MARSS with non-time varying parameters (equation \ref{eq:MARSS}).}, where $\XX_t$ denotes the random variable and $\xx_t$ is a realization from that random variable (and similarly for $\YY_t$):\footnote{To alleviate clutter, I have left off subscripts on the $f$'s. To emphasize that the $f$'s represent different density functions, one would often use a subscript showing what parameters are in the functions; i.e., $f(\xx_t|\XX_{t-1}=\xx_{t-1})$ becomes $f_{B,u,Q}(\xx_t|\XX_{t-1}=\xx_{t-1})$.} +\begin{equation} +f(\yy,\xx) = f(\yy|\XX=\xx)f(\xx), +\end{equation} +where +\begin{equation} +\begin{split} +f(\xx)&=f(\xx_0)\prod_{t=1}^T f(\xx_t|\XX_1^{t-1}=\xx_1^{t-1})\\ +f(\yy|\XX=\xx) &= \prod_{t=1}^T f(\yy_t|\XX=\xx) +\end{split} +\end{equation} +Thus, +\begin{equation}\label{eq:jointL} +\begin{split}f(\yy,\xx) &= \prod_{t=1}^T f(\yy_t|\XX=\xx) \times f(\xx_0)\prod_{t=1}^T f(\xx_t|\XX_1^{t-1}=\xx_1^{t-1}) \\ +&=\prod_{t=1}^T f(\yy_t|\XX_t=\xx_t) \times f(\xx_0)\prod_{t=1}^T f(\xx_t|\XX_{t-1}=\xx_{t-1}). +\end{split} +\end{equation} +Here $\xx_{t1}^{t2}$ denotes the set of $\xx_t$ from $t=t1$ to $t=t2$ (and thus $\xx$ is shorthand for $\xx_1^T$). The third line follows because conditioned on $\xx$, the $\yy_t$'s are independent of each other (because the $\vv_t$ are independent of each other). In the last line, $\xx_1^{t-1}$ becomes $\xx_{t-1}$ from the Markov property of the equation for $\xx_t$ (equation \ref{eq:MARSSx}), and $\xx$ becomes $\xx_t$ because $\yy_t$ depends only on $\xx_t$ (equation \ref{eq:MARSSy}). + +Since $(\XX_t|\XX_{t-1}=\xx_{t-1})$ is multivariate normal and $(\YY_t|\XX_t=\xx_t)$ is multivariate normal (equation \ref{eq:MARSS}), we can write down the joint log-likelihood function using the likelihood function for a multivariate normal distribution \citep[section 4.3]{JohnsonWichern2007}. +\begin{equation}\label{eq:logL} +\begin{split} +&\log\LL(\yy,\xx ; \Theta) = -\sum_1^T \frac{1}{2}(\yy_t - \ZZ \xx_t - \aa)^\top \RR^{-1} (\yy_t - \ZZ \xx_t - \aa) -\sum_1^T\frac{1}{2} \log |\RR|\\ +&\quad -\sum_1^T \frac{1}{2} (\xx_t - \BB \xx_{t-1} - \uu)^\top \QQ^{-1} (\xx_t - \BB \xx_{t-1} - \uu) - \sum_1^T\frac{1}{2}\log |\QQ|\\ +&\quad -\frac{1}{2}(\xx_0 - \xixi)^\top \LAM^{-1}(\xx_0 - \xixi) - \frac{1}{2}\log |\LAM| - \frac{n}{2}\log 2\pi +\end{split} +\end{equation} +$n$ is the number of data points. This is the same as equation 6.64 in \citet{ShumwayStoffer2006}. The above equation is for the case where $\xx_0$ is stochastic (has a known distribution). However, if we instead treat $\xx_0$ as fixed but unknown (section 3.4.4 in Harvey, 1989), it is then a parameter and there is no $\LAM$. The likelihood then is slightly different. $\xx_0$ is defined as a parameter $\xixi$ and +\begin{equation}\label{eq:logL.V0.is.0} +\begin{split} +&\log\LL(\yy,\xx ; \Theta) = -\sum_1^T \frac{1}{2}(\yy_t - \ZZ \xx_t - \aa)^\top \RR^{-1} (\yy_t - \ZZ \xx_t - \aa) -\sum_1^T\frac{1}{2} \log |\RR|\\ +&\quad -\sum_1^T \frac{1}{2} (\xx_t - \BB \xx_{t-1} - \uu)^\top \QQ^{-1} (\xx_t - \BB \xx_{t-1} - \uu) - \sum_1^T\frac{1}{2}\log |\QQ| +\end{split} +\end{equation} +$\xixi$ appears in the likelihood for $\xx_{t-1}$ when $t=1$ in the summation. Note that in this case, $\xx_0$ is no longer a realization of a random variable $\XX_0$; it is a fixed (but unknown) parameter. Equation \ref{eq:logL.V0.is.0} is written as if all the $\xx_0$ are fixed, however when the general derivation is presented, it is allowed that some $\xx_0$ are fixed ($\LAM$=0) and others are stochastic. + +If $\RR$ is constant through time, then $\sum_1^T\frac{1}{2} \log |\RR|$ in the likelihood equation reduces to $\frac{T}{2}\log |\RR|$, however $\RR$ might be time-varying or one may need to include a time-dependent weighting on $\RR$\footnote{If for example, one wanted to include a temporally dependent weighting on $\RR$ replace $|\RR|$ with $|\alpha_t\RR|=\alpha_t^n|\RR|$, where $\alpha_t$ is the weighting at time $t$ and is fixed not estimated.}. The same applies to $\sum_1^T\frac{1}{2}\log |\QQ|$. + +All bolded elements are column vectors (lower case) and matrices (upper case). $\AA^\top$ is the transpose of matrix $\AA$, $\AA^{-1}$ is the inverse of $\AA$, and $|\AA|$ is the determinant of $\AA$. Parameters are non-italic while elements that are slanted are realizations of a random variable ($\xx$ and $\yy$ are slated)\footnote{In matrix algebra, a capitol bolded letter indicates a matrix. Unfortunately in statistics, the capitol letter convention is used for random variables. Fortunately, this derivation does not need to reference random variables except indirectly when using expectations. Thus, I use capitols to refer to matrices not random variables. The one exception is the reference to $\XX$ and $\YY$. In this case a bolded {\it slanted} capitol is used.} + +\subsection{Missing values}\label{sec:missing} +In Shumway and Stoffer and other presentations of the EM algorithm for MARSS models \citep{ShumwayStoffer2006,Zuuretal2003a}, the missing values case is treated separately from the non-missing values case. In these derivations, a series of modifications are given for the EM update equations when there are missing values. In my derivation, I present the missing values treatment differently, and there is only one set of update equations and these equations apply in both the missing values and non-missing values cases. My derivation does this by keeping $\E[\YY_t|\text{data}]$ and $\E[\YY_t\XX_t^\top|\text{data}]$ in the update equations (much like $\E[\XX_t|\text{data}]$ is kept in the equations) while Shumway and Stoffer replace these expectations involving $\YY_t$ by their values, which depend on whether or not the data are a complete observation of $\YY_t$ with no missing values. Section \ref{sec:compexpectations} shows how to compute the expectations involving $\YY_t$ when the data are an incomplete observation of $\YY_t$. + +\section{The EM algorithm}\label{sec:EMalgorithm} +The EM algorithm cycles iteratively between an expectation step (the integration in the equation) followed by a maximization step (the arg max in the equation): +\begin{equation}\label{eq:EMalg} +\Theta_{j+1} = \arg \underset{\Theta}{\max} \int_{\xx}{\int_{\yy}{\log\LL(\xx,\yy;\Theta) f(\xx,\yy|\YY(1)=\yy(1),\Theta_j)d\xx d\yy}} +\end{equation} +$\YY(1)$ indicates those $\YY$ that have an observation and $\yy(1)$ are the actual observations. Note that $\Theta$ and $\Theta_j$ are different. If $\Theta$ consists of multiple parameters, we can also break this down into smaller steps. Let $\Theta=\{\alpha,\beta\}$, then +\begin{equation}\label{eq:EMalg.j} +\alpha_{j+1} = \arg \underset{\alpha}{\max} \int_{\xx}{\int_{\yy}{\log\LL(\xx,\yy,\beta_j;\alpha) f(\xx,\yy|\YY(1)=\yy(1),\alpha_j,\beta_j)d\xx d\yy}} +\end{equation} +Now the maximization is only over $\alpha$, the part that appears after the ``;'' in the log-likelihood. + +\textbf{Expectation step} The integral that appears in equation \ref{eq:EMalg} is an expectation. The first step in the EM algorithm is to compute this expectation. This will involve computing expectations like $\E[\XX_t\XX_t^\top|\YY_t(1)=\yy_t(1),\Theta_j]$ and $\E[\YY_t\XX_t^\top|\YY_t(1)=\yy_t(1),\Theta_j]$. The $j$ subscript on $\Theta$ denotes that these are the parameters at iteration $j$ of the algorithm. + +\textbf{Maximization step}: A new parameter set $\Theta_{j+1}$ is computed by finding the parameters that maximize the \textit{expected} log-likelihood function (the part in the integral) with respect to $\Theta$. The equations that give the parameters for the next iteration ($j+1$) are called the update equations and this report is devoted to the derivation of these update equations. + +After one iteration of the expectation and maximization steps, the cycle is then repeated. New expectations are computed using $\Theta_{j+1}$, and then a new set of parameters $\Theta_{j+2}$ is generated. This cycle is continued until the likelihood no longer increases more than a specified tolerance level. This algorithm is guaranteed to increase in likelihood at each iteration (if it does not, it means there is an error in one's update equations). The algorithm must be started from an initial set of parameter values $\Theta_1$. The algorithm is not particularly sensitive to the initial conditions but the surface could definitely be multi-modal and have local maxima. See section \ref{sec:implementation} on using Monte Carlo initialization to ensure that the global maximum is found. + +\textbf{Dividing the parameters into parts}: Above the parameter set is written as $\Theta$. However $\Theta$ is composed of multiple components: $\BB$, $\uu$, $\RR$, etc. The EM iteration $j$ is broken into subparts for each parameter matrix and both the maximization and expectation steps are done for each part. For example, the expectation step is run with parameters $\{\BB_j, \uu_j, \RR_j, \dots\}$ and then $\BB$ is updated to $\BB_{j+1}$ with the maximization step. The expectation step is run with parameters $\{\BB_{j+1}, \uu_j, \RR_j, \dots \}$ and the $\uu$is updated to $\uu_{j+1}$ with the maximization step. The expectation step is run with parameters $\{\BB_{j+1}, \uu_{j+1}, \RR_j, \dots \}$ and the $\RR$ is updated. This is continued until all parameters in $\Theta$ are updated and that completes the $j+1$ update. + +\subsection{The expected log-likelihood function}\label{sec:expLL} +The function that is maximized in the ``M'' step is the expected value of the log-likelihood function. This expectation is conditioned on two things: 1) the observed $\YY$'s which are denoted $\YY(1)$ and which are equal to the fixed values $\yy(1)$ and 2) the parameter set $\Theta_j$. Note that since there may be missing values in the data, $\YY(1)$ can be a subset of $\YY$, that is, only some $\YY$ have a corresponding $\yy$ value at time $t$. Mathematically what we are doing is $\EXy[g(\XX,\YY)|\YY(1)=\yy(1),\Theta_j]$. This is a multivariate conditional expectation because $\XX,\YY$ is multivariate (a $m \times n \times T$ vector). The function $g(\Theta)$ that we are taking the expectation of is $\log\LL(\YY,\XX ; \Theta)$. Note that $g(\Theta)$ is a random variable involving the random variables, $\XX$ and $\YY$, while $\log\LL(\yy,\xx ; \Theta)$ is not a random variable but rather a specific value since $\yy$ and $\xx$ are a set of specific values. + +We denote this expected log-likelihood by $\Psi$. The goal is to find the $\Theta$ that maximize $\Psi$ and this becomes the new $\Theta$ for the $j+1$ iteration of the EM algorithm. The equations to compute the new $\Theta$ are termed the update equations. Using the log likelihood equation \ref{eq:logL} and expanding out all the terms, we can write out $\Psi$ in verbose form as: +\begin{equation}\label{eq:expLL} +\begin{split} +&\EXy[\log\LL(\YY,\XX ; \Theta);\YY(1)=\yy(1),\Theta_j] = \Psi = \\ +&\quad -\frac{1}{2}\sum_1^T\bigg( \E[\YY_t^\top \RR^{-1} \YY_t] - \E[\YY_t^\top \RR^{-1}\ZZ\XX_t] - \E[(\ZZ\XX_t)^\top\RR^{-1}\YY_t] - \E[\aa^\top\RR^{-1}\YY_t] - \E[\YY_t^\top\RR^{-1}\aa]\\ +&\quad + \E[(\ZZ\XX_t)^\top\RR^{-1}\ZZ\XX_t] + \E[\aa^\top\RR^{-1}\ZZ\XX_t] + \E[(\ZZ\XX_t)^\top\RR^{-1}\aa] + \E[\aa^\top\RR^{-1}\aa]\bigg) + - \frac{T}{2}\log|\RR|\\ +&\quad - \frac{1}{2}\sum_1^T\bigg(\E[\XX_t^\top\QQ^{-1}\XX_t] - \E[\XX_t^\top\QQ^{-1}\BB\XX_{t-1}] - \E[(\BB\XX_{t-1})^\top\QQ^{-1}\XX_t]\\ +&\quad - \E[\uu^\top\QQ^{-1}\XX_t] - \E[\XX_t^\top\QQ^{-1}\uu] + \E[(\BB\XX_{t-1})^\top\QQ^{-1}\BB\XX_{t-1}]\\ +&\quad + \E[\uu^\top\QQ^{-1}\BB\XX_{t-1}] + \E[(\BB\XX_{t-1})^\top\QQ^{-1}\uu] + \uu^\top\QQ^{-1}\uu\bigg) - \frac{T}{2}\log|\QQ| \\ +&\quad - \frac{1}{2}\bigg(\E[\XX_0^\top\VV_0^{-1}\XX_0] - \E[\xixi^\top\LAM^{-1}\XX_0] - \E[\XX_0^\top\LAM^{-1}\xixi] + \xixi^\top\LAM^{-1}\xixi\bigg) - \frac{1}{2}\log|\LAM| +-\frac{n}{2}\log\pi +\end{split} +\end{equation} +All the $\E[\quad]$ appearing here denote $\EXy[g()|\YY(1)=\yy(1),\Theta_j]$. In the rest of the derivation, I drop the conditional and the $XY$ subscript on $\E$ to remove clutter, but it is important to remember that whenever $\E$ appears, it refers to a specific conditional multivariate expectation. If $\xx_0$ is treated as fixed, then $\XX_0=\xixi$ and the last line involving $\LAM$ is dropped but it will appear in place of $\XX_{t-1}$ when $t=1$ in the summation. + +Keep in mind that $\Theta$ and $\Theta_j$ are different. $\Theta$ is a parameter appearing in function $g(\XX,\YY,\Theta)$, i.e., the parameters in equation \ref{eq:logL}. $\XX$ and $\YY$ are random variables which means that $g(\XX,\YY,\Theta)$ is a random variable. We take the expectation of $g(\XX,\YY,\Theta)$, meaning we take integral over the joint distribution of $\XX$ and $\YY$. We need to specify what that distribution is and the conditioning on $\Theta_j$ (meaning the $\Theta_j$ appearing to the right of the $|$ in $\E[g()|\Theta_j]$) is specifying this distribution. This conditioning affects the value of the expectation of $g(\XX,\YY,\Theta)$, but it does not affect the value of $\Theta$, which are the $\RR$, $\QQ$, $\uu$, etc. values on the right side of equation \ref{eq:expLL}. We will first take the expectation of $g(\XX,\YY,\Theta)$ conditioned on $\Theta_j$ (using integration) and then take the differential of that expectation with respect to $\Theta$. + +\subsection{The expectations used in the derivation}\label{sec:expectations} +The following expectations appear frequently in the update equations and are given special names\footnote{This notation is different than what you see in Shumway and Stoffer (2006), section 6.2. What I call $\hatVt$, they refer to as $P_t^n$, and my $\hatPt$ would be $P_t^n + \hatxt \hatxt^\prime$ in their notation.}: +\begin{subequations}\label{eq:expectations} +\begin{align} +&\hatxt = \EXy[\XX_t | \YY(1)=\yy(1), \Theta_j]\\ +&\hatyt = \EXy[\YY_t | \YY(1)=\yy(1), \Theta_j]\\ +&\hatPt=\EXy[\XX_t\XX_t^\top | \YY(1)=\yy(1), \Theta_j]\\ +&\hatPttm=\EXy[\XX_{t}\XX_{t-1}^\top | \YY(1)=\yy(1), \Theta_j]\\ +&\hatVt = \var_{XY}[\XX_t|\YY(1)=\yy(1), \Theta_j] = \hatPt-\hatxt\hatxt^\top\label{eq:hatVt}\\ +&\hatOt=\EXy[\YY_t\YY_t^\top | \YY(1)=\yy(1), \Theta_j]\\ +&\hatWt = \var_{XY}[\YY_t|\YY(1)=\yy(1), \Theta_j] = \hatOt-\hatyt\hatyt^\top\label{eq:hatWt}\\ +&\hatYXt = \EXy[\YY_t\XX_t^\top| \YY(1)=\yy(1), \Theta_j]\\ +&\hatYXttm = \EXy[\YY_t\XX_{t-1}^\top| \YY(1)=\yy(1), \Theta_j] +\end{align} +\end{subequations} +The subscript on the expectation, $\E$, denotes that this is a multivariate expectation taken over $\XX$ and $\YY$. The right sides of equations \ref{eq:hatVt} and \ref{eq:hatWt} arise from the computational formula for variance and covariance: +\begin{align}\label{eq:comp.formula.variance} +\var[X] &= \E[XX^\top] - \E[X]\E[X]^\top\\ +\cov[X,Y] &= \E[XY^\top] - \E[X]\E[Y]^\top. +\end{align} +Section \ref{sec:compexpectations} shows how to compute the expectations in equation \ref{eq:expectations}. + +\begin{table} + \caption{Notes on multivariate expectations. For the following examples, let $\XX$ be a vector of length three, $X_1,X_2,X_3$. $f()$ is the probability distribution function (pdf). $C$ is a constant (not a random variable).} + \label{tab:MultivariateExpectations} +\begin{center}\begin{tabular}{lr} +\hline\\ +$\E_X[g(\XX)]=\int{\int{\int{g(\xx)f(x_1,x_2,x_3) dx_1 dx_2 dx_3}}}$\\ +$\E_X[X_1]=\int{\int{\int{x_1 f(x_1,x_2,x_3) dx_1 dx_2 dx_3}}}=\int{x_1 f(x_1) dx_1}=\E[X_1]$ \\ +$\E_X[X_1+X_2]=\E_X[X_1]+\E_X[X_2]$\\ +$\E_X[X_1+C]=\E_X[X_1]+C$\\ +$\E_X[C X_1]=C\E_X[X_1]$\\ +$\E_X[\XX|\XX=\xx]=\xx$ \\ +\\ +\hline +\end{tabular} +\end{center} +\end{table} + +\section{The unconstrained update equations}\label{sec:generalupdate} +In this section, I show the derivation of the update equations when all elements of a parameter matrix are estimated and are all allowed to be different, i.e., the unconstrained case. These are similar to the update equations one will see in \citet{ShumwayStoffer2006}. Section \ref{sec:constrained} shows the update equations when there are unestimated (fixed) or estimated but shared values in the parameter matrices, i.e., the constrained update equations. + +To derive the update equations, one must find the $\Theta$, where $\Theta$ is comprised of the MARSS parameters $\BB$, $\uu$, $\QQ$, $\ZZ$, $\aa$, $\RR$, $\xixi$, and $\LAM$, that maximizes $\Psi$ (equation \ref{eq:expLL}) by partial differentiation of $\Psi$ with respect to $\Theta$. However, I will be using the EM equation where one maximizes each parameter matrix in $\Theta$ one-by-one (equation \ref{eq:EMalg.j}). In this case, the parameters that are not being maximized are fixed (and set at their current iteration value), and then one takes the derivative of $\Psi$ with respect to the parameter of interest. Then solve for the parameter value that sets the partial derivative to zero. The partial differentiation is with respect to each individual parameter element, for example each $u_{i,j}$ in matrix $\uu$. The idea is to single out those terms in equation \ref{eq:expLL} that involve $u_{i,j}$ (say), differentiate by $u_{i,j}$, set this to zero and solve for $u_{i,j}$. This gives the new $u_{i,j}$ that maximizes the partial derivative with respect to $u_{i,j}$ of the expected log-likelihood. Matrix calculus gives us a way to jointly maximize $\Psi$ with respect to all elements (not just element $i,j$) in a parameter matrix. + +Note, see the comments on the EM algorithm implementation (Section \ref{sec:EMalgorithm}) when the parameter set $\Theta$ is broken into parts (e.g., $\BB$, $\uu$, $\QQ$, etc.). In the implementation of the algorithm, one updates the $\Theta$ parts sequentially and the expectation step is re-run with the new $\Theta$ at each step (meaning the Kalman smoother is re-run with the updated parameters). Thus the algorithm is applied as follows (order that the parameters are updated is unimportant): E-step with $\{\BB_j, \uu_j, \QQ_j, etc.\}$, M-step updates $\BB_j$ to $\BB_{j+1}$, E-step with $\{\BB_{j+1}, \uu_j, \QQ_j, etc.\}$, M-step updates $\uu_j$ to $\uu_{j+1}$, E-step with $\{\BB_{j+1}, \uu_{j+1}, \QQ_j, etc.\}$, M-step updates $\QQ_j$ to $\QQ_{j+1}$, continuing until all parameters are updates which completes the $j+1$ update. + +\subsection{Matrix calculus need for the derivation}\label{sec:MatrixDerivatives} +A number of derivatives of a scalar with respect to vectors and matrices will be needed in the derivation and are shown in table \ref{tab:MatrixDerivatives}. The partial derivative of a scalar ($\Psi$ is a scalar) with respect to some column vector $\bb$ (which has elements $b_1$, $b_2$ . . .) is +\begin{equation*} +\frac{\partial\Psi}{\partial\bb}= +\begin{bmatrix} +\dfrac{\partial\Psi}{\partial b_1}& \dfrac{\partial\Psi}{\partial b_2}& \cdots& \dfrac{\partial\Psi}{\partial b_m} +\end{bmatrix} +\end{equation*} + Note that the derivative of scalar with respect to a column vector $\bb$ is a row vector. The partial derivatives of a scalar with respect to some $m \times m$ matrix $\BB$ is +\begin{equation*} +\frac{\partial\Psi}{\partial\BB}= +\begin{bmatrix} +\dfrac{\partial\Psi}{\partial b_{1,1}}& \dfrac{\partial\Psi}{\partial b_{2,1}}& \cdots& \dfrac{\partial\Psi}{\partial b_{m,1}}\\ +\\ +\dfrac{\partial\Psi}{\partial b_{1,2}}& \dfrac{\partial\Psi}{\partial b_{2,2}}& \cdots& \dfrac{\partial\Psi}{\partial b_{m,2}}\\ +\\ +\cdots& \cdots& \cdots& \cdots\\ +\\ +\dfrac{\partial\Psi}{\partial b_{1,m}}& \dfrac{\partial\Psi}{\partial b_{2,m}}& \cdots& \dfrac{\partial\Psi}{\partial b_{m,m}}\\ +\end{bmatrix} +\end{equation*} +Note that the indexing is interchanged; $\partial\Psi/\partial b_{i,j}=\big[\partial\Psi/\partial\BB\big]_{j,i}$. For $\QQ$ and $\RR$, this is unimportant because they are variance-covariance matrices and are symmetric. For $\BB$ and $\ZZ$, one must be careful because these may not be symmetric. The partial derivatives of a column vector $\aa$ with respect to a column vector $\bb$. +\begin{equation*} +\frac{\partial\Psi}{\partial\BB}= +\begin{bmatrix} +\dfrac{\partial a_1}{\partial b_1}& \dfrac{\partial a_1}{\partial b_2}& \cdots& \dfrac{\partial a_1}{\partial b_m}\\ +\\ +\dfrac{\partial a_2}{\partial b_1}& \dfrac{\partial\Psi}{\partial b_2}& \cdots& \dfrac{\partial a_2}{\partial b_m}\\ +\\ +\cdots& \cdots& \cdots& \cdots\\ +\\ +\dfrac{\partial a_n}{\partial b_1}& \dfrac{\partial a_n}{\partial b_2}& \cdots& \dfrac{\partial a_n}{\partial b_m}\\ +\end{bmatrix} +\end{equation*} + +In table \ref{tab:MatrixDerivatives}, both the vectorized and non-vectorized versions are shown. The vectorized version of a matrix $\DD$ with dimension $n \times m$ is +\begin{gather*} +\vec(\DD_{n,m})\equiv +\begin{bmatrix} +d_{1,1}\\ +\cdots\\ +d_{n,1}\\ +d_{1,2}\\ +\cdots\\ +d_{n,2}\\ +\cdots\\ +d_{1,m}\\ +\cdots\\ +d_{n,m} +\end{bmatrix}\\ +\end{gather*} + + +\begin{table} + \caption{Derivatives of a scalar with respect to vectors and matrices. In the following $a$ is a scalar (unrelated to $\aa$), $\aa$ and $\cc$ are $n \times 1$ column vectors, $\bb$ and $\dd$ are $m \times 1$ column vectors, $\DD$ is a $n \times m$ matrix, $\CC$ is a $n \times n$ matrix, and $\AA$ is a diagonal $n \times n$ matrix (0s on the off-diagonals). $\CC^{-1}$ is the inverse of $\CC$, $\CC^\top$ is the transpose of $\CC$, $\CC^{-\top} = \big(\CC^{-1}\big)^\top = \big(\CC^\top\big)^{-1}$, and $|\CC|$ is the determinant of $\CC$. Note, all the numerators in the differentials on the far left reduce to scalars. Although the matrix names may be the same as those of matrices referred to in the text, the matrices in this table are dummy matrices used to show the matrix derivative relations.} + \label{tab:MatrixDerivatives} +\begin{center}\begin{tabular}{lr} +\hline +\\ +\refstepcounter{equation}\label{eq:derivproductrule} +$\partial(\ff^\top\gg)/\partial\aa = \ff^\top\partial\gg/\partial\aa + \gg^\top\partial\ff/\partial\aa$ +& \multirow{2}{*}{(\theequation)} \\ +$\ff=f(\aa)$ and \gg=$g(\aa)$ are $m \times 1$ column vectors and functions of $\aa$. & \\ +$\partial a /\partial\aa = \frac{1}{m} \partial a /\partial \gg \, \partial\gg/\partial\aa$ +&\\ +$\partial \ff /\partial\aa = \frac{1}{m} \partial \ff /\partial \gg \, \partial\gg/\partial\aa$ +&\\ +\\ +\refstepcounter{equation}\label{eq:derivaTc} +$\partial(\aa^\top\cc)/\partial\aa = \partial(\cc^\top\aa)/\partial\aa = \cc^\top$ & \multirow{2}{*}{(\theequation)} \\ +$\partial \aa/\partial \aa = \partial(\aa^\top)/\partial \aa = \II_n$ +&\\ +\\ +\refstepcounter{equation}\label{eq:derivaTDb} +$\partial(\aa^\top\DD\bb)/\partial\DD = \partial(\bb^\top\DD^\top\aa)/\partial\DD = \bb\aa^\top$ +& \multirow{2}{*}{(\theequation)} \\ +$\partial(\aa^\top\DD\bb)/\partial\vec(\DD) = \partial(\bb^\top\DD^\top\aa)/\partial\vec(\DD) = \big(\vec(\bb\aa^\top)\big)^\top$ +&\\ +\\ +\refstepcounter{equation}\label{eq:derivlogDet} +$\CC$ is invertible.& \multirow{6}{*}{(\theequation)} \\ +$\partial(\log |\CC|)/\partial\CC = -\partial(\log |\CC^{-1}|)/\partial\CC=(\CC^\top)^{-1} = \CC^{-\top}$\\ +$\partial(\log |\CC|)/\partial\vec(\CC) = \big(\vec(\CC^{-\top})\big)^\top$& \\ +If $\CC$ is also symmetric and $\BB$ is not a function of $\CC$.& \\ +$\partial(\log |\CC^\top\BB\CC|)/\partial\CC = 2\CC^{-1}$\\ +$\partial(\log |\CC^\top\BB\CC|)/\partial\vec(\CC) = 2\big(\vec(\CC^{-1})\big)^\top$\\ +\\ +\refstepcounter{equation}\label{eq:derivbDTCDd} +$\partial(\bb^\top\DD^\top\CC\DD\dd)/\partial\DD = \dd\bb^\top\DD^\top\CC + \bb\dd^\top\DD^\top\CC^\top$ +& \multirow{3}{*}{(\theequation)} \\ +$\partial(\bb^\top\DD^\top\CC\DD\dd)/\partial\vec(\DD) = +\big(\vec(\dd\bb^\top\DD^\top\CC + \bb\dd^\top\DD^\top\CC^\top)\big)^\top $ &\\ +If $\bb=\dd$ and $\CC$ is symmetric then the sum reduces to $2\bb\bb^\top\DD^\top\CC$ & \\ +\\ +\refstepcounter{equation}\label{eq:derivaTCa} +$\partial(\aa^\top\CC\aa)/\partial\aa = \partial(\aa\CC^\top\aa^\top)/\partial\aa = 2\aa^\top\CC$ +& (\theequation) \\ +\\ +\refstepcounter{equation}\label{eq:derivInv} +$\partial(\aa^\top\CC^{-1}\cc)/\partial\CC = -\CC^{-1}\aa\cc^\top\CC^{-1} $ +& \multirow{2}{*}{(\theequation)} \\ +$\partial(\aa^\top\CC^{-1}\cc)/\partial\vec(\CC) = -\big(\vec(\CC^{-1}\aa\cc^\top\CC^{-1})\big)^\top$ & \\ +\\ +\hline +\end{tabular}\end{center} +\end{table} + +\subsection{The update equation for $\uu$ (unconstrained)} +Take the partial derivative of $\Psi$ with respect to $\uu$, which is a $m \times 1$ matrix. All parameters other than $\uu$ are fixed to constant values (because partial derivation is being done). Since the derivative of a constant is 0, terms not involving $\uu$ will equal 0 and drop out. Taking the derivative to equation \ref{eq:expLL} with respect to $\uu$: +\begin{equation}\label{eq:u.unconstrained1} +\begin{split} +&\partial\Psi/\partial\uu = - \frac{1}{2}\sum_{t=1}^T \bigg(- \partial(\E[\XX_t^\top\QQ^{-1}\uu])/\partial\uu +- \partial(\E[\uu^\top\QQ^{-1}\XX_t])/\partial\uu \\ +&\quad + \partial(\E[(\BB\XX_{t-1})^\top\QQ^{-1}\uu])/\partial\uu ++ \partial(\E[\uu^\top\QQ^{-1}\BB\XX_{t-1}])/\partial\uu + \partial(\uu^\top\QQ^{-1}\uu)/\partial\uu \bigg) +\end{split} +\end{equation} +The parameters can be moved out of the expectations and then the matrix derivative relations (table \ref{tab:MatrixDerivatives}) are used to take the derivative. +\begin{equation}\label{eq:u.unconstrained2} +\begin{split} +\partial\Psi/\partial\uu = - \frac{1}{2}\sum_{t=1}^T\bigg(- \E[\XX_t]^\top\QQ^{-1} +- \E[\XX_t]^\top\QQ^{-1} + (\BB\E[\XX_{t-1}])^\top\QQ^{-1} + (\BB\E[\XX_{t-1}])^\top\QQ^{-1} + 2\uu^\top\QQ^{-1} \bigg) +\end{split} +\end{equation} +This also uses $\QQ^{-1} = (\QQ^{-1})^\top$. This can then be reduced to +\begin{equation}\label{eq:u.unconstrained3} +\begin{split} +&\partial\Psi/\partial\uu = \sum_{t=1}^T\big(\E[\XX_t]^\top\QQ^{-1} + - \E[\XX_{t-1}]^\top\BB^\top\QQ^{-1} - \uu^\top\QQ^{-1} \big) +\end{split} +\end{equation} +Set the left side to zero (a $p \times m$ matrix of zeros) and transpose the whole equation. $\QQ^{-1}$ cancels out\footnote{$\QQ$ is a variance-covariance matrix and is invertible. $\QQ^{-1}\QQ=\II$, the identity matrix.} by multiplying on the left by $\QQ$ (left since the whole equation was just transposed), giving +\begin{equation}\label{eq:u.unconstrained4} +\mathbf{0} = \sum_{t=1}^T\big(\E[\XX_t] - \BB\E[\XX_{t-1}] - \uu \big) += \sum_{t=1}^T\big(\E[\XX_t] - \BB\E[\XX_{t-1}] \big) - \uu +\end{equation} +Solving for $\uu$ and replacing the expectations with their names from equation \ref{eq:expectations}, gives us the new $\uu$ that maximizes $\Psi$, +\begin{equation}\label{eq:uupdate.unconstrained} +\uu_{j+1} = \frac{1}{T} \sum_{t=1}^T\big(\hatxt - \BB\hatxtm \big) +\end{equation} + +\subsection{The update equation for $\BB$ (unconstrained)} +Take the derivative of $\Psi$ with respect to $\BB$. Terms not involving $\BB$, equal 0 and drop out. I have put the $\E$ outside the partials by noting that $\partial(\E[h(\XX_t,\BB)])/\partial\BB=\E[\partial(h(\XX_t,\BB))/\partial\BB]$ since the expectation is conditioned on $\BB_j$ not $\BB$. +\begin{equation}\label{eq:B.unconstrained1} +\begin{split} +&\partial\Psi/\partial\BB = -\frac{1}{2} \sum_{t=1}^T\bigg(-\E[\partial(\XX_t^\top\QQ^{-1}\BB\XX_{t-1})/\partial\BB] \\ +&\quad - \E[\partial((\BB\XX_{t-1})^\top\QQ^{-1}\XX_t)/\partial\BB] + \E[\partial((\BB\XX_{t-1})^\top\QQ^{-1}(\BB\XX_{t-1}))/\partial\BB] \\ +&\quad + \E[\partial((\BB\XX_{t-1})^\top\QQ^{-1}\uu)/\partial\BB] ++ \E[\partial(\uu^\top\QQ^{-1}\BB\XX_{t-1})/\partial\BB]\bigg)\\ +&= -\frac{1}{2} \sum_{t=1}^T\bigg(-\E[\partial(\XX_t^\top\QQ^{-1}\BB\XX_{t-1}])/\partial\BB] \\ +&\quad - \E[\partial(\XX_{t-1}^\top\BB^\top\QQ^{-1}\XX_t)/\partial\BB] ++ \E[\partial(\XX_{t-1}^\top\BB^\top\QQ^{-1}(\BB\XX_{t-1}))/\partial\BB] \\ +&\quad + \E[\partial(\XX_{t-1}^\top\BB^\top\QQ^{-1}\uu)/\partial\BB] ++ \E[\partial(\uu^\top\QQ^{-1}\BB\XX_{t-1})/\partial\BB\bigg)]\\ +\end{split} +\end{equation} +After pulling the constants out of the expectations, we use relations \ref{eq:derivaTDb} and \ref{eq:derivbDTCDd} to take the derivative and note that $\QQ^{-1} = (\QQ^{-1})^\top$: +\begin{equation}\label{eq:B.unconstrained2} +\begin{split} +&\partial\Psi/\partial\BB = -\frac{1}{2} \sum_{t=1}^T\bigg(-\E[\XX_{t-1}\XX_t^\top]\QQ^{-1} - \E[ \XX_{t-1}\XX_t^\top]\QQ^{-1} \\ +&\quad + 2 \E[\XX_{t-1}\XX_{t-1}^\top]\BB^\top\QQ^{-1} + \E[\XX_{t-1}]\uu^\top\QQ^{-1} + \E[\XX_{t-1}]\uu^\top\QQ^{-1} \bigg) \\ +\end{split} +\end{equation} +This can be reduced to +\begin{equation}\label{eq:B.unconstrained3} +\partial\Psi/\partial\BB = -\frac{1}{2} \sum_{t=1}^T\bigg(-2\E[\XX_{t-1}\XX_t^\top]\QQ^{-1} + 2 \E[\XX_{t-1}\XX_{t-1}^\top ]\BB^\top\QQ^{-1} ++ 2\E[\XX_{t-1}]\uu^\top\QQ^{-1} \bigg) +\end{equation} +Set the left side to zero (an $m \times m$ matrix of zeros), cancel out $\QQ^{-1}$ by multiplying by $\QQ$ on the right, get rid of the -1/2, and transpose the whole equation to give +\begin{equation}\label{eq:B.unconstrained4} +\begin{split} +&\mathbf{0} = \sum_{t=1}^T\big(\E[\XX_t\XX_{t-1}^\top] - \BB \E[\XX_{t-1}\XX_{t-1}^\top] - \uu \E[\XX_{t-1}^\top]\big)\\ +&\quad = \sum_{t=1}^T \big( \hatPttm - \BB \hatPtm - \uu \hatxtm^\top \big) +\end{split} +\end{equation} +The last line replaced the expectations with their names shown in equation \ref{eq:expectations}. +Solving for $\BB$ and noting that $\hatPtm$ is like a variance-covariance matrix and is invertible, gives us the new $\BB$ that maximizes $\Psi$, +\begin{equation}\label{eq:B.update.unconstrained} +\BB_{j+1}= \bigg( \sum_{t=1}^T \big( \hatPttm - \uu \hatxtm^\top \big)\bigg) \bigg(\sum_{t=1}^T \hatPtm\bigg)^{-1} +\end{equation} + +Because all the equations above also apply to block-diagonal matrices, the derivation immediately generalizes to the case where $\BB$ is an unconstrained block diagonal matrix: +\begin{equation*} +\BB = +\begin{bmatrix} +b_{1,1}&b_{1,2}&b_{1,3}&0&0&0&0&0\\ +b_{2,1}&b_{2,2}&b_{2,3}&0&0&0&0&0\\ +b_{3,1}&b_{3,2}&b_{3,3}&0&0&0&0&0\\ +0&0&0&b_{4,4}&b_{4,5}&0&0&0\\ +0&0&0&b_{5,4}&b_{5,5}&0&0&0\\ +0&0&0&0&0&b_{6,6}&b_{6,7}&b_{6,8}\\ +0&0&0&0&0&b_{7,6}&b_{7,7}&b_{7,8}\\ +0&0&0&0&0&b_{8,6}&b_{8,7}&b_{8,8} +\end{bmatrix} += +\begin{bmatrix} +\BB_1&0&0\\ +0&\BB_2&0\\ +0&0&\BB_3\\ +\end{bmatrix} +\end{equation*} + +For the block diagonal $\BB$, +\begin{equation}\label{eq:B.update.blockdiag} +\BB_{i,j+1}= \bigg( \sum_{t=1}^T \big( \hatPttm - \uu \hatxtm^\top \big) \bigg)_i \bigg(\sum_{t=1}^T \hatPtm \bigg)_i^{-1} +\end{equation} +where the subscript $i$ means to take the parts of the matrices that are analogous to $\BB_i$; take the whole part within the parentheses not the individual matrices inside the parentheses. If $\BB_i$ is comprised of rows $a$ to $b$ and columns $c$ to $d$ of matrix $\BB$, then take rows $a$ to $b$ and columns $c$ to $d$ of the matrices subscripted by $i$ in equation \ref{eq:B.update.blockdiag}. + +\subsection{The update equation for $\QQ$ (unconstrained)} +\label{subsec:Qunconstrained} +The usual way to do this derivation is to use what is known as the ``trace trick'' which will pull the $\QQ^{-1}$ out to the left of the $\cc^\top\QQ^{-1}\bb$ terms which appear in the likelihood (equation \ref{eq:expLL}). Here I'm showing a less elegant derivation that plods step by step through each of the likelihood terms. Take the derivative of $\Psi$ with respect to $\QQ$. Terms not involving $\QQ$ equal 0 and drop out. Again the expectations are placed outside the partials by noting that $\partial(\E[h(\XX_t,\QQ)])/\partial\QQ=\E[\partial(h(\XX_t,\QQ))/\partial\QQ]$. +\begin{equation}\label{eq:Q.unconstrained1} +\begin{split} +&\partial\Psi/\partial\QQ = -\frac{1}{2} \sum_{t=1}^T\bigg( +\E[\partial(\XX_t^\top\QQ^{-1}\XX_t)/\partial\QQ] +-\E[\partial(\XX_t^\top\QQ^{-1}\BB\XX_{t-1})/\partial\QQ] \\ +&\quad -\E[\partial((\BB\XX_{t-1})^\top\QQ^{-1}\XX_t)/\partial\QQ ] + - \E[\partial(\XX_t^\top\QQ^{-1}\uu)/\partial\QQ] \\ +&\quad - \E[\partial(\uu^\top\QQ^{-1}\XX_t)/\partial\QQ] ++ \E[\partial((\BB\XX_{t-1})^\top\QQ^{-1}\BB\XX_{t-1})/\partial\QQ] \\ +&\quad + \E[\partial((\BB\XX_{t-1})^\top\QQ^{-1}\uu)/\partial\QQ] ++ \E[\partial(\uu^\top\QQ^{-1}\BB\XX_{t-1})/\partial\QQ]\\ +&\quad +\partial(\uu^\top\QQ^{-1}\uu)/\partial\QQ +\bigg) - \partial\bigg(\frac{T}{2}\log |\QQ| \bigg)/\partial\QQ \\ +\end{split} +\end{equation} +The relations \eqref{eq:derivInv} and \eqref{eq:derivlogDet} are used to do the differentiation. Notice that all the terms in the summation are of the form $\cc^\top\QQ^{-1}\bb$, and thus after differentiation, all the $\cc^\top\bb$ terms can be grouped inside one set of parentheses. Also there is a minus that comes from equation \ref{eq:derivInv} and it cancels out the minus in front of the initial $-1/2$. +\begin{equation}\label{eq:Q.unconstrained2} +\begin{split} +&\partial\Psi/\partial\QQ = \frac{1}{2} \sum_{t=1}^T \QQ^{-1} \bigg( + \E[\XX_t\XX_t^\top] -\E[\XX_t(\BB\XX_{t-1})^\top ] - \E[\BB\XX_{t-1}\XX_t^\top ] - \E[ \XX_t\uu^\top ] - \E[ \uu\XX_t^\top ] \\ +&\quad + \E[ \BB\XX_{t-1}(\BB\XX_{t-1})^\top ] + \E[\BB\XX_{t-1}\uu^\top] + \E[ \uu(\BB\XX_{t-1})^\top ] + \uu\uu^\top \bigg)\QQ^{-1} - \frac{T}{2}\QQ^{-1} +\end{split} +\end{equation} +Pulling the parameters out of the expectations and using $(\BB\XX_t)^\top = \XX_t^\top\BB^\top$, we have +\begin{equation}\label{eq:Q.unconstrained3} +\begin{split} +&\partial\Psi/\partial\QQ = \frac{1}{2} \sum_{t=1}^T \QQ^{-1} \bigg( + \E[\XX_t\XX_t^\top] -\E[\XX_t\XX_{t-1}^\top ]\BB^\top - \BB\E[\XX_{t-1}\XX_t^\top ] - \E[ \XX_t ]\uu^\top - \uu \E[ \XX_t^\top ]\\ +&\quad + \BB\E[ \XX_{t-1}\XX_{t-1}^\top ]\BB^\top + \BB\E[\XX_{t-1}]\uu^\top + \uu\E[\XX_{t-1}^\top ]\BB^\top + \uu\uu^\top \bigg)\QQ^{-1} - \frac{T}{2}\QQ^{-1} +\end{split} +\end{equation} +The partial derivative is then rewritten in terms of the Kalman smoother output: +\begin{equation}\label{eq:Q.unconstrained4} +\begin{split} +&\partial\Psi/\partial\QQ = \frac{1}{2} \sum_{t=1}^T \QQ^{-1} \bigg( + \hatPt - \hatPttm \BB^\top - \BB\hatPtmt +- \hatxt\uu^\top - \uu \hatxt^\top \\ +&\quad + \BB\hatPtm\BB^\top + \BB\hatxtm\uu^\top + \uu\hatxtm^\top\BB^\top + \uu\uu^\top \bigg)\QQ^{-1} - \frac{T}{2}\QQ^{-1} +\end{split} +\end{equation} +Setting this to zero (a $m \times m$ matrix of zeros), $\QQ^{-1}$ is canceled out by multiplying by $\QQ$ twice, once on the left and once on the right and the $1/2$ is removed: +\begin{equation}\label{eq:Q.unconstrained5} +\begin{split} +T\QQ = \sum_{t=1}^T \bigg( + \hatPt - \hatPttm \BB^\top - \BB\hatPtmt + - \hatxt\uu^\top - \uu \hatxt^\top + + \BB\hatPtm\BB^\top + \BB\hatxtm\uu^\top + \uu\hatxtm^\top\BB^\top + + \uu\uu^\top \bigg) +\end{split} +\end{equation} +This gives us the new $\QQ$ that maximizes $\Psi$, +\begin{equation}\label{eq:Q.update.unconstrained} +\begin{split} +&\QQ_{j+1} = \frac{1}{T}\sum_{t=1}^T \bigg( +\hatPt - \hatPttm \BB^\top - \BB\hatPtmt + - \hatxt\uu^\top - \uu \hatxt^\top \\ +&\quad + \BB\hatPtm\BB^\top + \BB\hatxtm\uu^\top + \uu\hatxtm^\top\BB^\top + + \uu\uu^\top \bigg) +\end{split} +\end{equation} + +This derivation immediately generalizes to the case where $\QQ$ is a block diagonal matrix: +\begin{equation*} +\QQ = +\begin{bmatrix} +q_{1,1}&q_{1,2}&q_{1,3}&0&0&0&0&0\\ +q_{1,2}&q_{2,2}&q_{2,3}&0&0&0&0&0\\ +q_{1,3}&q_{2,3}&q_{3,3}&0&0&0&0&0\\ +0&0&0&q_{4,4}&q_{4,5}&0&0&0\\ +0&0&0&q_{4,5}&q_{5,5}&0&0&0\\ +0&0&0&0&0&q_{6,6}&q_{6,7}&q_{6,8}\\ +0&0&0&0&0&q_{6,7}&q_{7,7}&q_{7,8}\\ +0&0&0&0&0&q_{6,8}&q_{7,8}&q_{8,8} +\end{bmatrix} += +\begin{bmatrix} +\QQ_1&0&0\\ +0&\QQ_2&0\\ +0&0&\QQ_3\\ +\end{bmatrix} +\end{equation*} +In this case, +\begin{equation}\label{eq:Q.update.blockdiag} +\begin{split} +&\QQ_{i,j+1} = \frac{1}{T}\sum_{t=1}^T \bigg( + \hatPt - \hatPttm \BB^\top - \BB\hatPtmt + - \hatxt\uu^\top - \uu \hatxt^\top \\ +&\quad + \BB\hatPtm\BB^\top + \BB\hatxtm\uu^\top + \uu\hatxtm^\top\BB^\top + + \uu\uu^\top \bigg)_i +\end{split} +\end{equation} +where the subscript $i$ means take the elements of the matrix (in the big parentheses) that are analogous to $\QQ_i$; take the whole part within the parentheses not the individual matrices inside the parentheses). If $\QQ_i$ is comprised of rows $a$ to $b$ and columns $c$ to $d$ of matrix $\QQ$, then take rows $a$ to $b$ and columns $c$ to $d$ of matrices subscripted by $i$ in equation \ref{eq:Q.update.blockdiag}. + +By the way, $\QQ$ is never really unconstrained since it is a variance-covariance matrix and the upper and lower triangles are shared. However, because the shared values are only the symmetric values in the matrix, the derivation still works even though it's technically incorrect \citep{HendersonSearle1979}. The constrained update equation for $\QQ$ shown in section \ref{sec:constrained.Q} explicitly deals with the shared lower and upper triangles. + +\subsection{Update equation for $\aa$ (unconstrained)}\label{sec:unconstA} +Take the derivative of $\Psi$ with respect to $\aa$, where $\aa$ is a $n \times 1$ matrix. Terms not involving $\aa$, equal 0 and drop out. +\begin{equation}\label{eq:a.unconstrained1} +\begin{split} +&\partial\Psi/\partial\aa = - \frac{1}{2}\sum_{t=1}^T \bigg(- \partial(\E[\YY_t^\top\RR^{-1}\aa])/\partial\aa +- \partial(\E[\aa^\top\RR^{-1}\YY_t])/\partial\aa \\ +&\quad + \partial(\E[(\ZZ\XX_t)^\top\RR^{-1}\aa])/\partial\aa ++ \partial(\E[\aa^\top\RR^{-1}\ZZ\XX_t])/\partial\aa ++ \partial(\E[\aa^\top\RR^{-1}\aa])/\partial\aa \bigg) +\end{split} +\end{equation} +The expectations around constants can be dropped\footnote{ +because $\EXy(C)=C$, where $C$ is a constant.}. Using relations \eqref{eq:derivaTc} and \eqref{eq:derivaTCa} and using $\RR^{-1} = (\RR^{-1})^\top$, we have then +\begin{equation}\label{eq:a.unconstrained2} +\begin{split} +&\partial\Psi/\partial\aa = - \frac{1}{2}\sum_{t=1}^T\bigg(-\E[\YY_t^\top\RR^{-1}] +-\E[\YY_t^\top\RR^{-1}] + \E[(\ZZ\XX_t)^\top\RR^{-1}] + + \E[(\ZZ\XX_t)^\top\RR^{-1}] + 2\aa^\top\RR^{-1} \bigg) +\end{split} +\end{equation} +Pull the parameters out of the expectations, use $(\aa\bb)^\top = \bb^\top\aa^\top$ and $\RR^{-1} = (\RR^{-1})^\top$ where needed, and remove the $-1/2$ to get +\begin{equation}\label{eq:a.unconstrained3} +\begin{split} +&\partial\Psi/\partial\aa = \sum_{t=1}^T\bigg(\E[\YY_t]^\top\RR^{-1} + - \E[\XX_t]^\top\ZZ^\top\RR^{-1} - \aa^\top\RR^{-1} \bigg) +\end{split} +\end{equation} +Set the left side to zero (a $1 \times n$ matrix of zeros), take the transpose, and cancel out $\RR^{-1}$ by multiplying by $\RR$, giving +\begin{equation}\label{eq:a.unconstrained4} +\mathbf{0} = \sum_{t=1}^{T}\big(\E[\YY_t] - \ZZ\E[\XX_t] - \aa \big) +=\sum_{t=1}^{T}\big(\hatyt - \ZZ\hatxt - \aa\big) +\end{equation} + +Solving for $\aa$ gives us the update equation for $\aa$: +\begin{equation}\label{eq:a.update.unconstrained} +\aa_{j+1} = \frac{1}{T}\sum_{t=1}^{T}\big(\hatyt - \ZZ\hatxt \big) +\end{equation} + +\subsection{The update equation for $\ZZ$ (unconstrained)} +Take the derivative of $\Psi$ with respect to $\ZZ$. Terms not involving $\ZZ$, equal 0 and drop out. The expectations around terms involving only constants have been dropped. +\begin{equation}\label{eq:Z.unconstrained1} +\begin{split} +&\partial\Psi/\partial\ZZ = \text{(note $\partial\ZZ$ is $m \times n$ while $\ZZ$ is $n \times m$)}\\ +&\quad -\frac{1}{2} \sum_{t=1}^T\bigg(-\E[\partial(\YY_t^\top\RR^{-1}\ZZ\XX_t)/\partial\ZZ] + - \E[\partial((\ZZ\XX_t)^\top\RR^{-1}\YY_t)/\partial\ZZ] + \E[\partial((\ZZ\XX_t)^\top\RR^{-1}\ZZ\XX_t)/\partial\ZZ] \\ +&\quad + \E[\partial((\ZZ\XX_t)^\top\RR^{-1}\aa)/\partial\ZZ] ++ \E[\partial(\aa^\top\RR^{-1}\ZZ\XX_t)/\partial\ZZ]\bigg)\\ +&= -\frac{1}{2} \sum_{t=1}^T\bigg(-\E[\partial(\YY_t^\top\RR^{-1}\ZZ\XX_t)/\partial\ZZ] + -\E[\partial(\XX_t^\top\ZZ^\top\RR^{-1}\YY_t)/\partial\ZZ] ++ \E[\partial(\XX_t^\top\ZZ^\top\RR^{-1}\ZZ\XX_t)/\partial\ZZ] \\ +&\quad + \E[\partial(\XX_t^\top\ZZ^\top\RR^{-1}\aa)/\partial\ZZ] ++ \E[\partial(\aa^\top\RR^{-1}\ZZ\XX_t)/\partial\ZZ]\bigg)\\ +\end{split} +\end{equation} +Using the matrix derivative relations (table \ref{tab:MatrixDerivatives}) and using $\RR^{-1} = (\RR^{-1})^\top$, we get +\begin{equation}\label{eq:Z.unconstrained2} +\begin{split} +\partial\Psi/\partial\ZZ = -\frac{1}{2} \sum_{t=1}^T\bigg(-\E[ \XX_t\YY_t^\top\RR^{-1} ] - &\E[ \XX_t\YY_t^\top\RR^{-1} ] \\ +&+ 2 \E[\XX_t\XX_t^\top\ZZ^\top\RR^{-1}] + \E[ \XX_{t-1}\aa^\top\RR^{-1} ] + \E[ \XX_t\aa^\top\RR^{-1} ] \bigg) +\end{split} +\end{equation} +Pulling the parameters out of the expectations and getting rid of the $-1/2$, we have +\begin{equation}\label{eq:Z.unconstrained3} +\begin{split} +&\partial\Psi/\partial\ZZ = \sum_{t=1}^T\bigg(\E[ \XX_t \YY_t^\top]\RR^{-1} +- \E[ \XX_t\XX_t^\top ]\ZZ^\top\RR^{-1} -\E[ \XX_t ]\aa^\top\RR^{-1} \bigg) \\ +\end{split} +\end{equation} +Set the left side to zero (a $m \times n$ matrix of zeros), transpose it all, and cancel out $\RR^{-1}$ by multiplying by $\RR$ on the left, to give +\begin{equation}\label{eq:Z.unconstrained4} +\begin{split} +\mathbf{0} = \sum_{t=1}^T\big(\E[\YY_t\XX_t^\top] - \ZZ \E[\XX_t\XX_t^\top] - \aa\E[\XX_t^\top]\big) + = \sum_{t=1}^T \big( \hatYXt - \ZZ \hatPt - \aa\hatxt^\top \big) +\end{split} +\end{equation} +Solving for $\ZZ$ and noting that $\hatPt$ is invertible, gives us the new $\ZZ$: +\begin{equation}\label{eq:Z.update.unconstrained} +\ZZ_{j+1}= \bigg( \sum_{t=1}^T \big(\hatYXt - \aa\hatxt^\top\big)\bigg) \bigg(\sum_{t=1}^T \hatPt\bigg)^{-1} +\end{equation} + +\subsection{The update equation for $\RR$ (unconstrained)} +Take the derivative of $\Psi$ with respect to $\RR$. Terms not involving $\RR$, equal 0 and drop out. The expectations around terms involving constants have been removed. +\begin{equation}\label{eq:R.unconstrained1} +\begin{split} +&\partial\Psi/\partial\RR = -\frac{1}{2} \sum_{t=1}^T\bigg( +\E[\partial(\YY_t^\top\RR^{-1}\YY_t)/\partial\RR] +-\E[\partial(\YY_t^\top\RR^{-1}\ZZ\XX_t)/\partial\RR] -\E[\partial((\ZZ\XX_t)^\top\RR^{-1}\YY_t)/\partial\RR]\\ +&\quad - \E[\partial(\YY_t^\top\RR^{-1}\aa)/\partial\RR] + - \E[\partial(\aa^\top\RR^{-1}\YY_t)/\partial\RR] ++ \E[\partial((\ZZ\XX_t)^\top\RR^{-1}\ZZ\XX_t)/\partial\RR] \\ +&\quad + \E[\partial((\ZZ\XX_t)^\top\RR^{-1}\aa)/\partial\RR] ++ \E[\partial(\aa^\top\RR^{-1}\ZZ\XX_t)/\partial\RR] + + \partial(\aa^\top\RR^{-1}\aa)/\partial\RR +\bigg) - \partial\big(\frac{T}{2}\log |\RR| \big)/\partial\RR +\end{split} +\end{equation} +We use relations \eqref{eq:derivInv} and \eqref{eq:derivlogDet} to do the differentiation. Notice that all the terms in the summation are of the form $\cc^\top\RR^{-1}\bb$, and thus after differentiation, we group all the $\cc^\top\bb$ inside one set of parentheses. Also there is a minus that comes from equation \ref{eq:derivInv} and cancels out the minus in front of $-1/2$. +\begin{equation}\label{eq:R.unconstrained2} +\begin{split} +&\partial\Psi/\partial\RR = \frac{1}{2} \sum_{t=1}^T \RR^{-1} \bigg( + \E[\YY_t\YY_t^\top] -\E[\YY_t(\ZZ\XX_t)^\top] - \E[\ZZ\XX_t\YY_t^\top ] - \E[\YY_t\aa^\top] - \E[\aa\YY_t^\top]\\ +&\quad + \E[ \ZZ\XX_t(\ZZ\XX_t)^\top ] + \E[\ZZ\XX_t\aa^\top] + \E[ \aa(\ZZ\XX_t)^\top ] + + \aa\aa^\top \bigg)\RR^{-1} - \frac{T}{2}\RR^{-1} +\end{split} +\end{equation} +Pulling the parameters out of the expectations and using $(\ZZ\YY_t)^\top = \YY_t^\top\ZZ^\top$, we have +\begin{equation}\label{eq:R.unconstrained3} +\begin{split} +&\partial\Psi/\partial\RR = \frac{1}{2} \sum_{t=1}^T \RR^{-1} \bigg( + \E[\YY_t\YY_t^\top] -\E[\YY_t\XX_t^\top ]\ZZ^\top - \ZZ\E[\XX_t\YY_t^\top] + - \E[\YY_t]\aa^\top - \aa\E[\YY_t^\top] \\ +&\quad + \ZZ\E[ \XX_t\XX_t^\top ]\ZZ^\top + \ZZ\E[\XX_t]\aa^\top + \aa\E[\XX_t^\top ]\ZZ^\top + + \aa\aa^\top \bigg)\RR^{-1} - \frac{T}{2}\RR^{-1} +\end{split} +\end{equation} +We rewrite the partial derivative in terms of expectations: +\begin{equation}\label{eq:R.unconstrained4} +\begin{split} +&\partial\Psi/\partial\RR = \frac{1}{2} \sum_{t=1}^T \RR^{-1} \bigg( +\hatOt - \hatYXt\ZZ^\top - \ZZ\hatYXt^\top + - \hatyt\aa^\top - \aa\hatyt^\top \\ +&\quad + \ZZ\hatPt\ZZ^\top + \ZZ\hatxt\aa^\top + \aa\hatxt^\top\ZZ^\top + \aa\aa^\top \bigg)\RR^{-1} - \frac{T}{2}\RR^{-1} +\end{split} +\end{equation} +Setting this to zero (a $n \times n$ matrix of zeros), we cancel out $\RR^{-1}$ by multiplying by $\RR$ twice, once on the left and once on the right, and get rid of the $1/2$. +\begin{equation}\label{eq:R.unconstrained5} +\begin{split} +T\RR = \sum_{t=1}^T \bigg( +\hatOt - \hatYXt\ZZ^\top - \ZZ\hatYXt^\top + - \hatyt\aa^\top - \aa\hatyt^\top + + \ZZ\hatPt\ZZ^\top + \ZZ\hatxt\aa^\top + \aa\hatxt^\top\ZZ^\top ++ \aa\aa^\top \bigg) +\end{split} +\end{equation} + +We can then solve for $\RR$, giving us the new $\RR$ that maximizes $\Psi$, +\begin{equation}\label{eq:R.update.unconstrained} +\begin{split} +\RR_{j+1} = \frac{1}{T}\sum_{t=1}^T \bigg( + \hatOt - \hatYXt\ZZ^\top - \ZZ\hatYXt^\top + - \hatyt\aa^\top - \aa\hatyt^\top + + \ZZ\hatPt\ZZ^\top + \ZZ\hatxt\aa^\top + \aa\hatxt^\top\ZZ^\top + + \aa\aa^\top \bigg) +\end{split} +\end{equation} +As with $\QQ$, this derivation immediately generalizes to a block diagonal matrix: +\begin{equation*} +\RR = +\begin{bmatrix} +\RR_1&0&0\\ +0&\RR_2&0\\ +0&0&\RR_3\\ +\end{bmatrix} +\end{equation*} +In this case, +\begin{equation}\label{eq:R.update.blockdiag} +\begin{split} +\RR_{i,j+1} = \frac{1}{T}\sum_{t=1}^T \bigg( + \hatOt - \hatYXt\ZZ^\top - \ZZ\hatYXt^\top + - \hatyt\aa^\top - \aa\hatyt^\top + + \ZZ\hatPt\ZZ^\top + \ZZ\hatxt\aa^\top + \aa\hatxt^\top\ZZ^\top + + \aa\aa^\top \bigg)_i +\end{split} +\end{equation} +where the subscript $i$ means we take the elements in the matrix in the big parentheses that are analogous to $\RR_i$. If $\RR_i$ is comprised of rows $a$ to $b$ and columns $c$ to $d$ of matrix $\RR$, then we take rows $a$ to $b$ and columns $c$ to $d$ of matrix subscripted by $i$ in equation \ref{eq:R.update.blockdiag}. + +\subsection{Update equation for $\xixi$ and $\LAM$ (unconstrained), stochastic initial state} +\citet{ShumwayStoffer2006} and \citet{GhahramaniHinton1996} imply in their discussion of the EM algorithm that both $\xixi$ and $\LAM$ can be estimated (though not simultaneously). Harvey (1989), however, discusses that there are only two allowable cases: $\xx_0$ is treated as fixed ($\LAM=0$) and equal to the unknown parameter $\xixi$ or $\xx_0$ is treated as stochastic with a known mean $\xixi$ and variance $\LAM$. For completeness, we show here the update equation in the case of $\xx_0$ stochastic with unknown mean $\xixi$ and variance $\LAM$ (a case that Harvey (1989) says is not consistent). + +We proceed as before and solve for the new $\xixi$ by minimizing $\Psi$. +Take the derivative of $\Psi$ with respect to $\xixi$ . Terms not involving $\xixi$, equal 0 and drop out. +\begin{equation}\label{eq:pi.unconstrained1} +\begin{split} +\partial\Psi/\partial\xixi = - \frac{1}{2} \big(- \partial(\E[\xixi^\top\LAM^{-1}\XX_0])/\partial\xixi +- \partial(\E[\XX_0^\top\LAM^{-1}\xixi])/\partial\xixi + + \partial(\xixi^\top\LAM^{-1}\xixi)/\partial\xixi \big) +\end{split} +\end{equation} +Using relations \eqref{eq:derivaTc} and \eqref{eq:derivaTCa} and using $\LAM^{-1} = (\LAM^{-1})^\top$, we have +\begin{equation}\label{eq:pi.unconstrained2} +\partial\Psi/\partial\xixi = - \frac{1}{2} \big(- \E[ \XX_0^\top\LAM^{-1} ] +- \E[ \XX_0^\top\LAM^{-1} ] + 2\xixi^\top\LAM^{-1} \big) +\end{equation} +Pulling the parameters out of the expectations, we get +\begin{equation}\label{eq:pi.unconstrained3} +\partial\Psi/\partial\xixi = - \frac{1}{2} \big(- 2\E[ \XX_0^\top ]\LAM^{-1} + 2\xixi^\top\LAM^{-1} \big) +\end{equation} +We then set the left side to zero, take the transpose, and cancel out $-1/2$ and $\LAM^{-1}$ (by noting that it is a variance-covariance matrix and is invertible). +\begin{equation}\label{eq:pi.unconstrained4} +\mathbf{0} = \big(\LAM^{-1}\E[ \XX_0 ] + \LAM^{-1}\xixi \big)=(\widetilde{\mbox{$\mathbf x$}}_0 - \xixi) +\end{equation} + +Thus, +\begin{equation}\label{eq:pi.update.unconstrained} +\xixi_{j+1} = \widetilde{\mbox{$\mathbf x$}}_0 +\end{equation} +$\widetilde{\mbox{$\mathbf x$}}_0$ is the expected value of $\XX_0$ conditioned on the data from $t=1$ to $T$, which comes from the Kalman smoother recursions with initial conditions defined as $\E[\XX_0|\YY_0=\yy_0] \equiv \xixi_j$ and $\var(\XX_0 \XX_0^\top|\YY_0=\yy_0)\equiv \LAM_j$ (meaning the filter recursions start with $t=1$ with $\tilde{x}_{t-1}^{t-1} = \tilde{x}_0^0 = \xixi_j$). +A similar set of steps gets us to the update equation for $\LAM$, +\begin{equation}\label{eq:V0.update.unconstrained} +\LAM_{j+1} = \widetilde{\VV}_0 +\end{equation} +$\widetilde{\VV}_0$ is the variance of $\XX_0$ conditioned on the data from $t=1$ to $T$ and is an output from the Kalman smoother recursions. + +If the initial state is defined as at $t=1$ instead of $t=0$, the update equation is derived in an identical fashion and the update equation is similar: +\begin{equation}\label{eq:pix1.update.unconstrained} +\xixi_{j+1} = \widetilde{\mbox{$\mathbf x$}}_1 +\end{equation} +\begin{equation} +\LAM_{j+1} = \widetilde{\VV}_1 +\end{equation} +These are output from the Kalman smoother recursions with initial conditions defined as $\E[\XX_1|\YY_0=\yy_0] \equiv \xixi_j$ and $\var(\XX_1 \XX_1^\top|\YY_0=\yy_0)\equiv \LAM_j$ (meaning the filter recursions start with $t=1$ with $\tilde{x}_{t}^{t-1} = \tilde{x}_1^0 = \xixi_j$). Notice that the recursions are initialized slightly differently. In the literature, you will see the Kalman filter and smoother equations presented with both types of initializations depending on whether the author defines the initial state at $t=0$ or $t=1$. + +\subsection{Update equation for $\xixi$ (unconstrained), fixed $\xx_0$} +For the case where $\xx_0$ is treated as fixed, i.e., as another parameter, then there is no $\LAM$, and we need to maximize $\partial\Psi/\partial\xixi$ using the slightly different $\Psi$ shown in equation \ref{eq:logL.V0.is.0}. Now $\xixi$ appears in the state equation part of the likelihood. +\begin{equation}\label{eq:pi.unconstrained.V0.is.0} +\begin{split} +&\partial\Psi/\partial\xixi = -\frac{1}{2} \bigg(-\E[\partial(\XX_1^\top\QQ^{-1}\BB\xixi)/\partial\xixi] + - \E[\partial((\BB\xixi)^\top\QQ^{-1}\XX_1)/\partial\xixi] + \E[\partial((\BB\xixi)^\top\QQ^{-1}(\BB\xixi))/\partial\xixi] \\ +&\quad + \E[\partial((\BB\xixi)^\top\QQ^{-1}\uu)/\partial\xixi] ++ \E[\partial(\uu^\top\QQ^{-1}\BB\xixi)/\partial\xixi]\bigg)\\ +&= -\frac{1}{2} \bigg(-\E[\partial(\XX_1^\top\QQ^{-1}\BB\xixi)/\partial\xixi] + - \E[\partial(\xixi^\top\BB^\top\QQ^{-1}\XX_1)/\partial\xixi] ++ \E[\partial(\xixi^\top\BB^\top\QQ^{-1}(\BB\xixi))/\partial\xixi] \\ +&\quad + \E[\partial(\xixi^\top\BB^\top\QQ^{-1}\uu)/\partial\xixi] ++ \E[\partial(\uu^\top\QQ^{-1}\BB\xixi)/\partial\xixi]\bigg) +\end{split} +\end{equation} +After pulling the constants out of the expectations, we use relations \eqref{eq:derivaTDb} and \eqref{eq:derivbDTCDd} to take the derivative: +\begin{equation}\label{eq:pi.unconstrained.V0.is.0.2} +\begin{split} +\partial\Psi/\partial\xixi = -\frac{1}{2} \bigg(-\E[\XX_1]^\top\QQ^{-1}\BB - \E[ \XX_1]^\top\QQ^{-1}\BB + + 2 \xixi^\top\BB^\top\QQ^{-1}\BB + \uu^\top\QQ^{-1}\BB + \uu^\top\QQ^{-1}\BB \bigg) \\ +\end{split} +\end{equation} +This can be reduced to +\begin{equation}\label{eq:pi.unconstrained.V0.is.0.3} +\begin{split} +\partial\Psi/\partial\xixi = \E[\XX_1]^\top\QQ^{-1}\BB - \xixi^\top\BB^\top\QQ^{-1}\BB - \uu^\top\QQ^{-1}\BB +\end{split} +\end{equation} +To solve for $\xixi$, set the left side to zero (an $m \times 1$ matrix of zeros), transpose the whole equation, and then cancel out $\BB^\top\QQ^{-1}\BB$ by multiplying by its inverse on the left, and solve for $\xixi$. This step requires that this inverse exists. +\begin{equation}\label{eq:pi.unconstrained.V0.is.0.4} +\begin{split} +\xixi = (\BB^\top\QQ^{-1}\BB)^{-1}\BB^\top\QQ^{-1}(\E[\XX_1] - \uu) +\end{split} +\end{equation} +Thus, in terms of the Kalman filter/smoother output the new $\xixi$ for EM iteration $j+1$ is +\begin{equation}\label{eq:pi.unconstrained.V0.is.0.5} +\begin{split} +\xixi_{j+1} = (\BB^\top\QQ^{-1}\BB)^{-1}\BB^\top\QQ^{-1}(\widetilde{\mbox{$\mathbf x$}}_1 - \uu) +\end{split} +\end{equation} +Note that using, $\widetilde{\mbox{$\mathbf x$}}_0$ output from the Kalman smoother would not work since $\LAM=0$. As a result, $\xixi_{j+1} \equiv \xixi_j$ in the EM algorithm, and it is impossible to move away from your starting condition for $\xixi$. + +This is conceptually similar to using a generalized least squares estimate of $\xixi$ to concentrate it out of the likelihood as discussed in Harvey (1989), section 3.4.4. However, in the context of the EM algorithm, dealing with the fixed $\xx_0$ case requires nothing special; one simply takes care to use the likelihood for the case where $\xx_0$ is treated as an unknown parameter (equation \ref{eq:logL.V0.is.0}). For the other parameters, the update equations are the same whether one uses the log-likelihood equation with $\xx_0$ treated as stochastic (equation \ref{eq:logL}) or fixed (equation \ref{eq:logL.V0.is.0}). + +If your MARSS model is stationary\footnote{meaning the $\XX$'s have a stationary distribution} and your data appear stationary, however, equation \ref{eq:pi.unconstrained.V0.is.0.4} probably is not what you want to use. The estimate of $\xixi$ will be the maximum-likelihood value, but it will not be drawn from the stationary distribution; instead it could be some wildly different value that happens to give the maximum-likelihood. If you are modeling the data as stationary, then you should probably assume that $\xixi$ is drawn from the stationary distribution of the $\XX$'s, which is some function of your model parameters. This would mean that the model parameters would enter the part of the likelihood that involves $\xixi$ and $\LAM$. Since you probably don't want to do that (if might start to get circular), you might try an iterative process to get decent $\xixi$ and $\LAM$ or try fixing $\xixi$ and estimating $\LAM$ (above). You can fix $\xixi$ at, say, zero, by making sure the model you fit has a stationary distribution with mean zero. You might also need to demean your data (or estimate the $\aa$ term to account for non-zero mean data). A second approach is to estimate $\xx_1$ as the initial state instead of $\xx_0$. + +\subsection{Update equation for $\xixi$ (unconstrained), fixed $\xx_1$}\label{sec:xi.unconstrained.x1} +In some cases, the estimate of $\xx_0$ from $\xx_1$ using equation \ref{eq:pi.unconstrained.V0.is.0.5} will be highly sensitive to small changes in the parameters. This is particularly the case for certain $\BB$ matrices, even if they are stationary. The result is that your $\xixi$ estimate is wildly different from the data at $t=1$. The estimates are correct given how you defined the model, just not realistic given the data. In this case, you can specify $\xixi$ as being the value of $\xx$ at $t=1$ instead of $t=0$. That way, the data at $t=1$ will constrain the estimated $\xixi$. In this case, we treat $\xx_1$ as fixed but unknown parameter $\xixi$. The likelihood is then: +\begin{equation} +\begin{split} +&\log\LL(\yy,\xx ; \Theta) = -\sum_1^T \frac{1}{2}(\yy_t - \ZZ \xx_t - \aa)^\top \RR^{-1} (\yy_t - \ZZ \xx_t - \aa) -\sum_1^T\frac{1}{2} \log |\RR|\\ +&\quad -\sum_2^T \frac{1}{2} (\xx_t - \BB \xx_{t-1} - \uu)^\top \QQ^{-1} (\xx_t - \BB \xx_{t-1} - \uu) - \sum_1^T\frac{1}{2}\log |\QQ| +\end{split} +\end{equation} + +\begin{equation}\label{} +\begin{split} +&\partial\Psi/\partial\xixi = -\frac{1}{2} \bigg(-\E[\partial(\YY_1^\top\RR^{-1}\ZZ\xixi)/\partial\xixi] + - \E[\partial((\ZZ\xixi)^\top\RR^{-1}\YY_1)/\partial\xixi] + \E[\partial((\ZZ\xixi)^\top\RR^{-1}(\ZZ\xixi))/\partial\xixi] \\ +&\quad + \E[\partial((\ZZ\xixi)^\top\RR^{-1}\aa)/\partial\xixi] ++ \E[\partial(\aa^\top\RR^{-1}\ZZ\xixi)/\partial\xixi]\bigg)\\ +&\quad -\frac{1}{2} \bigg(-\E[\partial(\XX_2^\top\QQ^{-1}\BB\xixi)/\partial\xixi] + - \E[\partial((\BB\xixi)^\top\QQ^{-1}\XX_2)/\partial\xixi] + \E[\partial((\BB\xixi)^\top\QQ^{-1}(\BB\xixi))/\partial\xixi] \\ +&\quad + \E[\partial((\BB\xixi)^\top\QQ^{-1}\uu)/\partial\xixi] ++ \E[\partial(\uu^\top\QQ^{-1}\BB\xixi)/\partial\xixi]\bigg) +\end{split} +\end{equation} +Note that the second summation starts at $t=2$ and $\xixi$ is $\xx_1$ instead of $\xx_0$. + +After pulling the constants out of the expectations, we use relations \eqref{eq:derivaTDb} and \eqref{eq:derivbDTCDd} to take the derivative: +\begin{equation}\label{eq:pi.unconstrained.V0.is.0.t.1.1} +\begin{split} +&\partial\Psi/\partial\xixi = -\frac{1}{2} \bigg(-\E[\YY_1]^\top\RR^{-1}\ZZ - \E[ \YY_1]^\top\RR^{-1}\ZZ + + 2 \xixi^\top\ZZ^\top\RR^{-1}\ZZ + \aa^\top\RR^{-1}\ZZ + \aa^\top\RR^{-1}\ZZ \bigg) \\ +&\quad-\frac{1}{2} \bigg(-\E[\XX_2]^\top\QQ^{-1}\BB - \E[ \XX_2]^\top\QQ^{-1}\BB + + 2 \xixi^\top\BB^\top\QQ^{-1}\BB + \uu^\top\QQ^{-1}\BB + \uu^\top\QQ^{-1}\BB \bigg) +\end{split} +\end{equation} +This can be reduced to +\begin{equation}\label{} +\begin{split} +&\partial\Psi/\partial\xixi = \E[\YY_1]^\top\RR^{-1}\ZZ - \xixi^\top\ZZ^\top\RR^{-1}\ZZ - \aa^\top\RR^{-1}\ZZ + + \E[\XX_2]^\top\QQ^{-1}\BB - \xixi^\top\BB^\top\QQ^{-1}\BB - \uu^\top\QQ^{-1}\BB \\ +&\quad = - \xixi^\top(\ZZ^\top\RR^{-1}\ZZ + \BB^\top\QQ^{-1}\BB) + \E[\YY_1]^\top\RR^{-1}\ZZ - \aa^\top\RR^{-1}\ZZ ++ \E[\XX_2]^\top\QQ^{-1}\BB - \uu^\top\QQ^{-1}\BB +\end{split} +\end{equation} +To solve for $\xixi$, set the left side to zero (an $m \times 1$ matrix of zeros), transpose the whole equation, and solve for $\xixi$. +\begin{equation}\label{eq:pi.unconstrained.V0.is.0.t.1.2} +\begin{split} +\xixi = (\ZZ^\top\RR^{-1}\ZZ + \BB^\top\QQ^{-1}\BB)^{-1}(\ZZ^\top\RR^{-1}(\E[\YY_1]-\aa) +\BB^\top\QQ^{-1}(\E[\XX_2] - \uu)) \\ +\end{split} +\end{equation} +Thus, when $\xixi \equiv \xx_1$, the new $\xixi$ for EM iteration $j+1$ is +\begin{equation}\label{eq:pi.unconstrained.V0.is.0.t.1.3} +\begin{split} +\xixi_{j+1} = (\ZZ^\top\RR^{-1}\ZZ + \BB^\top\QQ^{-1}\BB)^{-1}(\ZZ^\top\RR^{-1}(\widetilde{\mbox{$\mathbf y$}}_1-\aa) +\BB^\top\QQ^{-1}(\widetilde{\mbox{$\mathbf x$}}_2 - \uu)) +\end{split} +\end{equation} + +\section{The time-varying MARSS model with linear constraints}\label{sec:tvMARSS} +The first part of this report dealt with the case of a MARSS model (equation \ref{eq:MARSS}) where the parameters are time-constant and where all the elements in a parameter matrix are estimated with no constraints. I will now describe the derivation of an EM algorithm to solve a much more general MARSS model (equation \ref{eq:MARSS.ex2}), which is a time-varying MARSS model where the MARSS parameter matrices are written as a linear equation $\ff+\DD\mm$. This is a very general form of a MARSS model, of which many (most) multivariate autoregressive Gaussian models are a special case. This general MARSS model includes as special cases, MARSS models with covariates (many VARSS models with exogeneous variables), multivariate AR lag-p models and multivariate moving average models, and MARSS models with linear constraints placed on the elements within the model parameters. The objective is to derive one EM algorithm for the whole class, thus a uniform approach to fitting these models. + +The time-varying MARSS model is written: +\begin{subequations}\label{eq:MARSS.ex2} +\begin{gather} +\xx_t = \BB_t\xx_{t-1} + \uu_t + \GG_t\ww_t, \text{ where } \WW_t \sim \MVN(0,\QQ_t)\\ +\yy_t = \ZZ_t\xx_t + \aa_t + \HH_t\vv_t, \text{ where } \VV_t \sim \MVN(0,\RR_t)\\ +\xx_{t_0} = \xixi+\FF\ll, \text{ where } t_0=0 \text{ or } t_0=1\\ +\LL \sim \MVN(0,\LAM)\\ +\begin{bmatrix}\ww_t\\ \vv_t\end{bmatrix} \sim \MVN(0,\Sigma), \quad \Sigma=\begin{bmatrix}\QQ_t&0\\ 0&\RR_t\end{bmatrix} +\end{gather} +\end{subequations} +This looks quite similar to the previous non-time varying MARSS model, but now the model parameters, $\BB$, $\uu$, $\QQ$, $\ZZ$, $\aa$ and $\RR$, have a $t$ subscript and we have a multiplier matrix on the error terms $\vv_t$, $\ww_t$, $\ll$. The $\GG_t$ multiplier is $m \times s$, so we now have $s$ state errors instead of $m$. The $\HH_t$ multiplier is $n \times k$, so we now have $k$ observation errors instead of $n$. The $\FF$ multiplier is $m \times j$, so now we can have some initial states ($j$ of them) be stochastic and others be fixed. I assume that appropriate constraints are put on $\GG$ and $\HH$ so that the resulting MARSS model is not under- or over-constrained\footnote{For example, if both $\GG$ and $\HH$ are column vectors, then the system is over-constrained and has no solution.}. +The notation/presentation here was influenced by SJ Koopman's work, esp. \citet{KoopmanOoms2011} and \citet{Koopman1993}, but in these works, $\QQ_t$ and $\RR_t$ equal $\II$ and the variance-covariance structures are instead specified only by $\HH_t$ and $\GG_t$. I keep $\QQ_t$ and $\RR_t$ in my formulation as it seems more intuitive (to me) in the context of the EM algorithm and the required joint-likelihood function. + +We can rewrite this MARSS model using vec relationships (table \ref{tab:VecRelations}): +\begin{equation}\label{eq:MARSS.ex.vec} +\begin{gathered} +\xx_t = (\xx_{t-1}^\top \otimes \II_m)\vec(\BB_t) + \vec(\uu_t) + \GG_t\ww_t, \WW_t \sim \MVN(0,\QQ_t)\\ +\yy_t = (\xx_t^\top \otimes \II_n)\vec(\ZZ_t) + \vec(\aa_t) + \HH_t\vv_t, \VV_t \sim \MVN(0,\RR_t)\\ +\xx_{t_0} = \xixi+\FF\ll, \LL \sim \MVN(0,\LAM) +\end{gathered} +\end{equation} +Each model parameter, $\BB_t$, $\uu_t$, $\QQ_t$, $\ZZ_t$, $\aa_t$, and $\RR_t$, is written as a time-varying linear model, $\ff_t+\DD_t\mm$, where $\ff$ and $\DD$ are fully-known (not estimated and no missing values) and $\mm$ is a column vector of the estimates elements of the parameter matrix: +\begin{equation}\label{eq:MARSS.ex.vec.2} +\begin{split} +\vec(\BB_t) &= \ff_{t,b} + \DD_{t,b}\bbeta\\ +\vec(\uu_t) &= \ff_{t,u} + \DD_{t,u}\uupsilon\\ +\vec(\QQ_t) &= \ff_{t,q} + \DD_{t,q}\qq\\ +\vec(\ZZ_t) &= \ff_{t,z} + \DD_{t,z}\zzeta\\ +\vec(\aa_t) &= \ff_{t,a} + \DD_{t,a}\aalpha\\ +\vec(\RR_t) &= \ff_{t,r} + \DD_{t,r}\rr\\ +\vec(\LAM)&= \ff_\lambda+\DD_\lambda\llambda \\ +\vec(\xixi)&= \ff_\xi+\DD_\xi\pp +\end{split} +\end{equation} + +The estimated parameters are now the column vectors, $\bbeta$, $\uupsilon$, $\qq$, $\zzeta$, $\aalpha$, $\rr$, $\pp$ and $\llambda$. The time-varying aspect comes from the time-varying $\ff$ and $\DD$. Note that variance-covariance matrices must be positive-definite and we cannot specify a form that cannot be estimated. Fixing the diagonal terms and estimating the off-diagonals would not be allowed. Thus the $\ff$ and $\DD$ terms for $\QQ$, $\RR$ and $\LAM$ are limited. For the other parameters, the forms are fairly unrestricted, except that the $\DD$s need to be full rank so that we are not specifying an under-constrained model. 'Full rank' will imply that we are not trying to estimate confounded matrix elements; for example, trying to estimate $a_1$ and $a_2$ but only $a_1+a_2$ appear in the model. + +The temporally variable MARSS model, equation \ref{eq:MARSS.ex.vec} together with equation \ref{eq:MARSS.ex.vec.2}, looks rather different than other temporally variable MARSS models, such as a VARSSX or MARSS with covariates model, in the literature. But those models are special cases of this equation. By deriving an EM algorithm for this more general (if unfamiliar) form, I then have an algorithm for many different types of time-varying MARSS models with linear constraints on the parameter elements. Below I show some examples. + +\subsection{MARSS model with linear constraints} +We can use equation \ref{eq:MARSS.ex.vec} to put linear constraints on the elements of the parameters, $\BB$, $\uu$, $\QQ$, $\ZZ$, $\aa$, $\RR$, $\xixi$ and $\LAM$. Here is an example of a simple MARSS model with linear constraints: +\begin{gather*} +\begin{bmatrix}x_1\\ x_2\end{bmatrix}_t += \begin{bmatrix}a&0\\0&2a\end{bmatrix} +\begin{bmatrix}x_1\\x_2\end{bmatrix}_{t-1} ++ \begin{bmatrix}w_1\\ w_2\end{bmatrix}_t,\quad +\begin{bmatrix}w_1\\ w_2\end{bmatrix}_t \sim \MVN\begin{pmatrix}\begin{bmatrix}0.1\\u+0.1\end{bmatrix},\begin{bmatrix}q_{11}&q_{12}\\q_{21}&q_{22}\end{bmatrix} \end{pmatrix} \\ +\\ +\begin{bmatrix}y_1\\ y_2\\ y_3\end{bmatrix}_t += \begin{bmatrix}c&3c+2d+1\\ c& d\\ c+e+2 &e\end{bmatrix} +\begin{bmatrix}x_1\\ x_2\end{bmatrix}_t ++ \begin{bmatrix}v_1\\ v_2\\ v_3\end{bmatrix}_t,\\ +\begin{bmatrix}v_1\\ v_2\\ v_3\end{bmatrix}_t \sim \MVN\begin{pmatrix}\begin{bmatrix}a_1\\ a_2\\ 0\end{bmatrix}, + \begin{bmatrix}r&0&0\\0&2r&0\\0&0&4r\end{bmatrix} \end{pmatrix} \\ +\\ +\begin{bmatrix}x_1\\ x_2\end{bmatrix}_0 \sim \MVN\begin{pmatrix}\begin{bmatrix}\pi\\ \pi\end{bmatrix},\begin{bmatrix}1&0\\ 0&1\end{bmatrix} \end{pmatrix} +\end{gather*} +Linear constraints mean that elements of a matrix may be fixed to a specific numerical value or specified as a linear combination of values (which can be shared within a matrix but not shared between matrices). + +Let's say we have some parameter matrix $\MM$ (here $\MM$ could be any of the parameters in the MARSS model) where each matrix element is written as a linear model of some potentially shared values: +\begin{equation*} +\MM= +\begin{bmatrix} +a+2c+2&0.9&c\\ +-1.2&a&0\\ +0&3c+1&b +\end{bmatrix} +\end{equation*} +Thus each $i$-th element in $\MM$ can be written as $\beta_i+\beta_{a,i} a + \beta_{b,i} b + \beta_{c,i} c$, which is a linear combination of three estimated values $a$, $b$ and $c$. The matrix $\MM$ can be rewritten in terms of a $\beta_i$ part and the part involving the $\beta_{-,j}$'s: +\begin{equation*} +\MM= +\begin{bmatrix} +2&0.9&0\\ +-1.2&0&0\\ +0&1&0 +\end{bmatrix} ++ +\begin{bmatrix} +a+2c&0&c\\ +0&a&0\\ +0&3c&b +\end{bmatrix} +=\MM_\text{fixed}+\MM_\text{free} +\end{equation*} +The vec function turns any matrix into a column vector by stacking the columns on top of each other. Thus, +\begin{equation*} +\vec(\MM)= +\begin{bmatrix} +a+2c+2\\ +-1.2\\ +0\\ +0.9\\ +a\\ +3c+1\\ +c\\ +0\\ +b +\end{bmatrix} +\end{equation*} +We can now write $\vec(\MM)$ as a linear combination of $\ff = \vec(\MM_\text{fixed})$ and $\DD\mm = \vec(\MM_\text{free})$. $\mm$ is a $p \times 1$ column vector of the $p$ free values, in this case $p=3$ and the free values are $a, b, c$. $\DD$ is a design matrix that translates $\mm$ into $\vec(\MM_\text{free})$. For example, +\begin{equation*} +\vec(\MM)= +\begin{bmatrix} +a+2c+2\\ +-1.2\\ +0\\ +0.9\\ +a\\ +3c+1\\ +c\\ +0\\ +b +\end{bmatrix} += +\begin{bmatrix} +0\\ +-1.2\\ +2\\ +0.9\\ +0\\ +1\\ +0\\ +0\\ +0 +\end{bmatrix} ++ +\begin{bmatrix} +1&2&0\\ +0&0&0\\ +0&0&0\\ +0&0&0\\ +1&0&0\\ +0&0&3\\ +0&0&1\\ +0&0&0\\ +0&1&0 +\end{bmatrix} +\begin{bmatrix} +a\\ +b\\ +c +\end{bmatrix} += \ff + \DD\mm +\end{equation*} +There are constraints on $\DD$. Your $\DD$ matrix needs to describe a solvable linear set of equations. Basically it needs to be full rank (rank $p$ where $p$ is the number of columns in $\DD$ or free values you are trying to estimate), so that you can estimate each of the $p$ free values. For example, if $a+b$ always appeared together, then $a+b$ can be estimated but not $a$ and $b$ separately. Note, if $\MM$ is fixed, then $\DD$ is undefined but that is fine because in this case, there will be no update equation needed; you just use the fixed value of $\MM$ in the algorithm. + + +\begin{table} + \caption{Kronecker and vec relations. Here $\AA$ is $n \times m$, $\BB$ is $m \times p$, $\CC$ is $p \times q$, and $\EE$ and $\DD$ are $p \times p$. $\aa$ is a $m \times 1$ column vector and $\bb$ is a $p \times 1$ column vector. The symbol $\otimes$ stands for the Kronecker product: $\AA \otimes \CC$ is a $np \times mq$ matrix. The identity matrix, $\II_n$, is a $n \times n$ diagonal matrix with ones on the diagonal.} + \label{tab:VecRelations} + \begin{center} + \begin{tabular}{lr} +\hline +\\ +\refstepcounter{equation}\label{eq:vec.a} +$\vec(\aa) = \vec(\aa^\top) = \aa$ +&\multirow{3}{*}{(\theequation)} \\ +The vec of a column vector (or its transpose) is itself. & \\ +$\aa=(\aa^\top \otimes \II_1)$ & \\ +\\ +\refstepcounter{equation}\label{eq:vec.Aa} +$\vec(\AA\aa) = (\aa^\top \otimes \II_n)\vec(\AA) = \AA\aa$ +&\multirow{2}{*}{(\theequation)} \\ +$\vec(\AA\aa) = \AA\aa$ since $\AA\aa$ is itself an $m \times 1$ column vector. & \\ +\\ +\refstepcounter{equation}\label{eq:vec.AB} +$\vec(\AA\BB) = (\II_p \otimes \AA)\vec(\BB) = (\BB^\top \otimes \II_n)\vec(\AA)$ +& (\theequation) \\ +\\ +\refstepcounter{equation}\label{eq:vec.ABC} +$\vec(\AA\BB\CC) = (\CC^\top \otimes \AA)\vec(\BB)$ +& (\theequation) \\ +\\ +\refstepcounter{equation}\label{eq:vec.aTBa} +$\vec(\aa^\top\BB\aa) = \aa^\top\BB\aa = (\aa^\top \otimes \aa)\vec(\BB)$ +& (\theequation) \\ +\\ +\refstepcounter{equation}\label{eq:kron.prod} +$(\AA \otimes \BB)(\CC \otimes \DD) = (\AA\CC \otimes \BB\DD)$ +&\multirow{2}{*}{(\theequation)} \\ +$(\AA \otimes \BB)+(\AA \otimes \CC) = (\AA \otimes (\BB+\CC))$ &\\ +\\ +\refstepcounter{equation}\label{eq:kron.column.vec} +$(\aa \otimes \II_p)\CC = (\aa \otimes \CC)$ &\multirow{3}{*}{(\theequation)} \\ +$\CC(\aa^\top \otimes \II_q) = (\aa^\top \otimes \CC)$ &\\ +$\EE(\aa^\top \otimes \DD)=\EE\DD(\aa^\top \otimes \II_p)=(\aa^\top \otimes \EE\DD)$ &\\ +\\ +\refstepcounter{equation}\label{eq:kron.column.quad.vec} +$(\aa \otimes \II_p)\CC(\bb^\top \otimes \II_q) = (\aa\bb^\top \otimes \CC)$ & +(\theequation) \\ +\\ +\refstepcounter{equation}\label{eq:kron.column.column.vec} +$(\aa \otimes \bb)=\vec(\bb\aa^\top)$ +&\multirow{2}{*}{(\theequation)} \\ +$(\aa^\top \otimes \bb^\top)=(\aa \otimes \bb)^\top=(\vec(\bb\aa^\top))^\top$ &\\ +\\ +\refstepcounter{equation}\label{eq:kron.trans} +$(\AA^\top \otimes \BB^\top)=(\AA \otimes \BB)^\top$ & +(\theequation) \\ +\\\hline +\end{tabular} +\end{center} +\end{table} + +\subsection{A MARSS model with exogenous variables} +The following is a commonly seen MARSS model with covariates $\cc_t$ and $\dd_t$ appearing as additive elements: +\begin{equation*} +\begin{split} +\xx_t &= \BB\xx_{t-1} + \CC\cc_t + \ww_t\\ +\yy_t &= \ZZ\xx_t + \DD\dd_t + \vv_t +\end{split} +\end{equation*} +Here, $\DD$ is the effect of $\dd_t$ on $\yy_t$ not a design matrix (which would have a subscript). We would typically want to estimate $\CC$ or $\DD$ which are the influence of our covariates on our responses, $\xx$ or $\yy$. Let's say there are $p$ covariates in $\cc_t$ and $q$ covariates in $\dd_t$. Then we can write the above in vec form: +\begin{equation}\label{eq:MARSS.simple.ex} +\begin{split} +\xx_t &= (\xx_{t-1}^\top \otimes \II_m)\vec(\BB) + (\cc_t^\top \otimes \II_p)\vec(\CC) + \ww_t\\ +\yy_t &= (\xx_t^\top \otimes \II_n)\vec(\ZZ) + (\dd_t^\top \otimes \II_q)\vec(\DD) + \vv_t +\end{split} +\end{equation} +Let's say we put no constraints $\BB$, $\ZZ$, $\QQ$, $\RR$, $\xixi$, or $\LAM$. Then in the form of equation \ref{eq:MARSS.ex.vec}, +\begin{equation*} +\begin{split} +\xx_t &= (\xx_{t-1}^\top \otimes \II_m)\vec(\BB_t) + \vec(\uu_t) + \ww_t\\ +\yy_t &= (\xx_t^\top \otimes \II_n)\vec(\ZZ_t) + \vec(\aa_t) + \vv_t, +\end{split} +\end{equation*} +with the parameters defined as follows: +\begin{equation*} +\begin{split} +\vec(\BB_t) &= \ff_{t,b} + \DD_{t,b}\bbeta; +\, \ff_{t,b} = 0;\, \DD_{t,b}=1;\, \bbeta=\vec(\BB)\\ +\vec(\uu_t) &= \ff_{t,u} + \DD_{t,u}\uupsilon; +\, \ff_{t,u} = 0;\, \DD_{t,u}=(\cc_t^\top \otimes \II_p);\, \uupsilon=\vec(\CC)\\ +\vec(\QQ_t) &= \ff_{t,q} + \DD_{t,q}\qq; +\, \ff_{t,q}= 0;\, \DD_{t,q}= \DD_q \\ +\vec(\ZZ_t) &= \ff_{t,z} + \DD_{t,z}\zzeta; +\, \ff_{t,z} = 0;\, \DD_{t,z}=1;\, \zzeta=\vec(\ZZ)\\ +\vec(\aa_t) &= \ff_{t,a} + \DD_{t,a}\aalpha; +\, \ff_{t,a} = 0;\, \DD_{t,a}=(\dd_t^\top \otimes \II_q);\, \aalpha=\vec(\DD)\\ +\vec(\RR_t) &= \ff_{t,r} + \DD_{t,r}\rr; +\, \ff_{t,r}= 0;\, \DD_{t,r}= \DD_r \\ +\vec(\LAM)&= \ff_\lambda+\DD_\lambda\llambda; +\, \ff_\lambda= 0 \\ +\vec(\xixi)&= \xixi=\ff_\xi+\DD_\xi\pp; +\, \ff_\xi = 0; \, \DD_\xi = 1 +\end{split} +\end{equation*} +Note that variance-covariance matrices are never unconstrained really so we use $\DD_q$, $\DD_r$ and $\DD_\lambda$ to specify the symmetry within the matrix. + +The transformation of the simple MARSS with covariates (equation \ref{eq:MARSS.simple.ex}) into the form of equation \ref{eq:MARSS.ex.vec} may seem a little painful, but the advantage is that a single EM algorithm can be used for a large class of models. Presumably, the transformation of the equation will be hidden from users by a wrapper function that does the reformulation before passing the model to the general EM algorithm. In the MARSS R package, this reformulation is done in the \verb@MARSS.marxss@ function. + +\subsection{A general MARSS model with exogenous variables} +Let's imagine now a very general MARSS model with various `inputs'. ` +input' here just means that it is some fully known matrix rather than something we are estimating. It could be a sequence of 0s and 1s if for example we were fitting a before/after sort of model. Below the letters with a $t$ subscript are the inputs (and $\Ab_t$ is an input not a design matrix), except $\xx$, $\yy$, $\ww$ and $\vv$. +\begin{equation}\label{eq:MARSS.general.ex} +\begin{split} +\xx_t &= \Bb_t\BB\Ba_t\xx_{t-1} + \Ub_t\UU\Ua_t + \Qb_t\ww_t\\ +\yy_t &= \Zb_t\ZZ\Za_t\xx_t + \Ab_t\AA\Aa_t + \Rb_t\vv_t +\end{split} +\end{equation} +In vec form, this is: +\begin{equation}\label{eq:MARSS.ex3} +\begin{split} +\xx_t &= (\xx_{t-1}^\top \otimes \II_m)(\Ba_t^\top \otimes \Bb_t)\vec(\BB) + (\Ua_t^\top \otimes \Ub_t)\vec(\UU) ++ \Qb_t\ww_t\\ +&= (\xx_{t-1}^\top \otimes \II_m)(\Ba_t^\top \otimes \Bb_t)(\ff_b+\DD_b\bbeta) + (\Ua_t^\top \otimes \Ub_t)(\ff_u + \DD_u\uupsilon) + \Qb_t\ww_t\\ +\WW_t & \sim \MVN(0,\Qb_t\QQ\Qb_t^\top)\\ +\\ +\yy_t &= (\xx_t^\top \otimes \II_n)(\Za_t^\top \otimes \Zb_t)\vec(\ZZ) + (\Aa_t^\top \otimes \Ab_t)\vec(\AA) + \Rb_t\vv_t \\ +&= (\xx_t^\top \otimes \II_n)\mathbb{Z}_t(\ff_z+\DD_z\zzeta) + \mathbb{A}_t(\ff_a+\DD_a\aalpha) + \Rb_t\vv_t \\ +\VV_t &\sim \MVN(0,\Rb_t\RR\Rb_t^\top)\\ +\\ +\XX_{t_0} &\sim \MVN(\ff_\xi+\DD_\xi\pp,\FF\LAM\FF^\top), \text{ where } \vec(\LAM)=\ff_\lambda+\DD_\lambda\llambda +\end{split} +\end{equation} +We could write down a likelihood function for this model but written this way, the model presumes that $\Rb_t\RR\Rb_t^\top$, $\Qb_t\QQ\Qb_t^\top$, and $\FF\LAM\FF^\top$ are valid variance-covariance matrices. I will actually write this model differently below because I don't want to make that assumption. + +We define the $\ff$ and $\DD$ parameters as follows. +\begin{equation*} +\begin{split} +\vec(\BB_t) &= \ff_{t,b} + \DD_{t,b}\bbeta = (\Ba_t^\top \otimes \Bb_t)\ff_b + (\Ba_t^\top \otimes \Bb_t)\DD_b\bbeta\\ +\vec(\uu_t) &= \ff_{t,u} + \DD_{t,u}\uupsilon = (\Ua_t^\top \otimes \Ub_t)\ff_u + (\Ua_t^\top \otimes \Ub_t)\DD_u\uupsilon\\ +\vec(\QQ_t) &= \ff_{t,q} + \DD_{t,q}\qq = (\Qb_t \otimes \Qb_t)\ff_q + (\Qb_t \otimes \Qb_t)\DD_q\qq \\ +\vec(\ZZ_t) &= \ff_{t,z} + \DD_{t,z}\zzeta = (\Za_t^\top \otimes \Zb_t)\ff_z + (\Za_t^\top \otimes \Zb_t)\DD_z\zzeta\\ +\vec(\aa_t) &= \ff_{t,a} + \DD_{t,a}\aalpha = (\Aa_t^\top \otimes \Ab_t)\ff_a + (\Aa_t^\top \otimes \Ab_t)\DD_a\aalpha\\ +\vec(\RR_t) &= \ff_{t,r} + \DD_{t,r}\rr = (\Rb_t \otimes \Rb_t)\ff_q + (\Rb_t \otimes \Rb_t)\DD_r\rr\\ +\vec(\LAM)&= \ff_\lambda+\DD_\lambda\llambda = 0 + \DD_\lambda\llambda\\ +\vec(\xixi)&= \xixi=\ff_\xi+\DD_\xi\pp = 0+1\pp +\end{split} +\end{equation*} +Here, for example $\ff_b$ and $\DD_b$ indicate the linear constraints on $\BB$ and $\ff_{t,b}$ is $(\Ba_t^\top \otimes \Bb_t)\ff_b$ and $\DD_{t,b}$ is $(\Ba_t^\top \otimes \Bb_t)\DD_b$. The elements of $\BB$ that are being estimated are $\bbeta$ arranged as a column vector. + +As usual, this reformulation looks cumbersome, but would be hidden from the user presumably. + +\subsection{The expected log-likelihood function} +As mentioned above, we do not necessarily want to assume that $\HH_t\RR_t\HH_t^\top$, $\GG_t\QQ_t\GG_t^\top$, and $\FF\LAM\FF^\top$ are valid variance-covariance matrices. This would rule out many MARSS models that we would like to fit. For example, if $\QQ=\sigma^2$ and $\GG=\begin{bmatrix}1\\ 1\\ 1\end{bmatrix}$, $\GG\QQ\GG^\top$ would be an invalid variance-variance matrix. However, this is a valid MARSS model. We do need to be careful that $\HH_t$ and $\GG_t$ are specified such that the model has a solution. For example, a model where both $\GG$ and $\HH$ are $\begin{bmatrix}1\\ 1\\ 1\end{bmatrix}$ would not be solvable for all $\yy$. + +Instead I will define $\Phi_t=(\GG_t^\top\GG_t)^{-1}\GG_t^\top$, $\Xi_t=(\HH_t^\top\HH_t)^{-1}\HH_t^\top$, and $\Pi = (\FF^\top\FF)^{-1}\FF^\top$. I then require that the inverses of $\GG_t^\top\GG_t$, $\HH_t^\top\HH_t$, and $\FF^\top\FF$ exist and that $\ff_{t,q}+\DD_{t,q}\qq$, $\ff_{t,r}+\DD_{t,r}\rr$, and $\ff_\lambda+\DD_\lambda\llambda$ specify valid variance-covariance matrices. These are much less stringent restrictions. + +For the purpose of writing down the expected log-likelihood, our MARSS model is now written +\begin{equation}\label{eq:MARSS.ex.reformed} +\begin{gathered} +\Phi_t\xx_t = \Phi_t( \xx_{t-1}^\top \otimes \II_m)\vec(\BB_t) + \Phi_t\vec(\uu_t) + \ww_t, \quad +\text{ where } \WW_t \sim \mathrm{MVN}(0,\QQ_t)\\ +\Xi_t\yy_t = \Xi_t( \xx_t^\top \otimes \II_n)\vec(\ZZ_t) + \Xi_t\vec(\aa_t) + \vv_t,\quad \text{ where } \VV_t \sim \mathrm{MVN}(0,\RR_t)\\ +\Pi\xx_{t_0}=\Pi\xixi+\ll, \quad \text{ where } \LL \sim \MVN(0,\LAM) +\end{gathered} +\end{equation} +As mentioned before, this relies on $\GG$ and $\HH$ having forms that do not lead to over- or under-constrained linear systems. + +To derive the EM update equations, we need the expected log-likelihood function for the time-varying MARSS model. Using equation \ref{eq:MARSS.ex.reformed}, we get +\begin{equation}\label{eq:logL.vec.general} +\begin{split} +&\EXy[\log\LL(\YY,\XX ; \Theta)] = -\frac{1}{2}\EXy\bigg( + \sum_1^T(\YY_t - ( \XX_t^\top \otimes \II_m)\vec(\ZZ_t) - \vec(\aa_t) )^\top\Xi_t^\top \RR_t^{-1}\Xi_t\\ +&\quad (\YY_t-(\XX_t^\top \otimes \II_m)\vec(\ZZ_t) - \vec(\aa_t))+\sum_1^T \log |\RR_t|\\ +&\quad +\sum_{t_0+1}^T(\XX_t-(\XX_{t-1}^\top \otimes \II_m)\vec(\BB_t) - \vec(\uu_t) )^\top \Phi_t^\top\QQ_t^{-1}\Phi_t \\ +&\quad ( \XX_t-(\XX_{t-1}^\top \otimes \II_m)\vec(\BB_t) - \vec(\uu_t) )+\sum_{t_0+1}^T\log |\QQ_t|\\ +&\quad +(\XX_{t_0}-\vec(\xixi))^\top \Pi^\top\LAM^{-1}\Pi (\XX_{t_0}-\vec(\xixi)) + \log |\LAM| + \log 2\pi \bigg) +\end{split} +\end{equation} +If any $\GG_t$, $\HH_t$ or $\FF$ is all zero, then the line in the likelihood with $\RR_t$, $\QQ_t$ or $\LAM$, respectively, does not appear. If any $\xx_{t_0}$ are fixed, meaning all zero row in $\FF$, that $\XX_{t_0}\equiv\xixi$ anywhere it appears in the likelihood. The way I have written the general equation, some $\xx_{t_0}$ might be fixed and others stochastic. + +The vec of the model parameters are defined as follows: +\begin{equation*} +\begin{split} +\vec(\BB_t)&=\ff_{t,b}+\DD_{t,b}\bbeta\\ +\vec(\uu_t) &= \ff_{t,u}+\DD_{t,u}\uupsilon\\ +\vec(\ZZ_t)&=\ff_{t,z}+\DD_{t,z}\zzeta\\ +\vec(\aa_t) &= \ff_{t,a}+\DD_{t,a}\aalpha\\ +\vec(\QQ_t)&=\ff_{t,q}+\DD_{t,q}\qq\\ +\vec(\RR_t)&=\ff_{t,r}+\DD_{t,r}\rr\\ +\vec(\xixi)&=\ff_\xi+\DD_\xi\pp\\ +\vec(\LAM)&=\ff_\lambda+\DD_\lambda\llambda\\ +\Phi_t&=(\GG_t^\top\GG_t)^{-1}\GG_t^\top\\ +\Xi_t&=(\HH_t^\top\HH_t)^{-1}\HH_t^\top\\ +\Pi&=(\FF^\top\FF)^{-1}\FF^\top +\end{split} +\end{equation*} + +\section{The constrained update equations}\label{sec:constrained} +The derivation proceeds by taking the partial derivative of equation \ref{eq:logL.vec.general} with respect to the estimated terms, the $\zzeta$, $\aalpha$, etc, setting the derivative to zero, and solving for those estimated terms. Conceptually, the algebraic steps in the derivation are similar to those in the unconstrained derivation. See the notes in Sections \ref{sec:generalupdate} and \ref{sec:EMalgorithm} regarding implementation of the EM algorithm when $\Theta$ is broken into parts (e.g., $\BB$, $\uu$, $\QQ$, etc.). + +\subsection{The general $\uu$ update equations} +We take the derivative of $\Psi$ (equation \ref{eq:logL.vec.general}) with respect to $\uupsilon$. +\begin{equation}\label{eq:u.general1} +\begin{split} +\partial\Psi/\partial\pmb{\upsilon} + &= - \frac{1}{2}\sum_{t=1}^T \bigg(-\partial(\E[\XX_t^\top\Qm_t\DD_{t,u}\uupsilon])/\partial\pmb{\upsilon} + - \partial(\E[\uupsilon^\top\DD_{t,u}^\top\Qm_t\XX_t])/\partial\pmb{\upsilon} \\ +&+ \partial(\E[(( \XX_{t-1}^\top \otimes \II_m)\vec(\BB_t))^\top\Qm_t\DD_{t,u}\uupsilon] )/\partial\pmb{\upsilon} + + \partial(\E[\uupsilon^\top\DD_{t,u}^\top\Qm_t( \XX_{t-1}^\top \otimes \II_m)\vec(\BB_t)])/\partial\pmb{\upsilon}\\ +&+ \partial(\uupsilon^\top\DD_{t,u}^\top\Qm_t\DD_{t,u}\uupsilon)/\partial\pmb{\upsilon} ++ \partial(\E[\ff_{t,u}^\top\Qm_t\DD_{t,u}\uupsilon])/\partial\pmb{\upsilon} + + \partial(\E[\uupsilon^\top\DD_{t,u}^\top\Qm_t\ff_{t,u}])/\partial\pmb{\upsilon} +\bigg) +\end{split} +\end{equation} +where $\Qm_t = \Phi_t^\top\QQ_t^{-1}\Phi_t$. + +Since $\uupsilon$ is to the far left or right in each term, the derivative is simple using the derivative terms in table \ref{sec:MatrixDerivatives}. +$\partial\Psi/\partial\pmb{\upsilon}$ becomes: +\begin{equation}\label{eq:u.general1b} +\begin{split} +\partial\Psi/\partial\pmb{\upsilon} +&= - \frac{1}{2}\sum_{t=1}^T \bigg( +-2\E[\XX_t^\top\Qm_t\DD_{t,u}] + 2\E[(( \XX_{t-1}^\top \otimes \II_m)\vec(\BB_t))^\top \Qm_t\DD_{t,u}] \\ +&\quad + 2(\uupsilon^\top\DD_{t,u}^\top\Qm_t\DD_{t,u}) + 2\E[ \ff_{t,u}^\top\Qm_t\DD_{t,u} ] \bigg) +\end{split}\end{equation} +Set the left side to zero and transpose the whole equation. +\begin{equation}\label{eq:u.general4} +\begin{split} +\mathbf{0}= \sum_{t=1}^T \bigg( \DD_{t,u}^\top\Qm_t\E[\XX_t] - \DD_{t,u}^\top\Qm_t(\E[\XX_{t-1}]^\top \otimes \II_m)\vec(\BB_t) +- \DD_{t,u}^\top\Qm_t\DD_{t,u}\uupsilon + - \DD_{t,u}^\top\Qm_t\ff_{t,u} \bigg) +\end{split} +\end{equation} +Thus, +\begin{equation}\label{eq:u.general5} +\big(\sum_{t=1}^T \DD_{t,u}^\top\Qm_t\DD_{t,u} \big)\uupsilon + = \sum_{t=1}^T \DD_{t,u}^\top\Qm_t\big(\E[ \XX_t ]- (\E[\XX_{t-1}]^\top \otimes \II_m)\vec(\BB_t) - \ff_{t,u} \big) +\end{equation} +We solve for $\uupsilon$, and the new $\uupsilon$ for the $j+1$ iteration of the EM algorithm is +\begin{equation}\label{eq:u.general.update1} +\begin{split} +\uupsilon_{j+1} &= \bigg(\sum_{t=1}^T \DD_{t,u}^\top\Qm_t\DD_{t,u} \bigg)^{-1} + \sum_{t=1}^T \DD_{t,u}^\top\Qm_t\big(\hatxt- (\hatxtm^\top \otimes \II_m)\vec(\BB_t) - \ff_{t,u} \big) +\end{split} +\end{equation} +where $\Qm_t = \Phi_t^\top\QQ_t^{-1}\Phi_t = \GG_t(\GG_t^\top\GG_t)^{-1}\QQ_t^{-1}(\GG_t^\top\GG_t)^{-1}\GG_t^\top$. + +The update equation requires that $\sum_{t=1}^T \DD_{t,u}^\top\Qm_t\DD_{t,u}$ is invertible. It generally will be if $\Phi_t\QQ_t\Phi_t^\top$ is a proper variance-covariance matrix (positive semi-definite) and $\DD_{t,u}$ is full rank. If $\GG_t$ has all-zero rows then $\Phi_t\QQ_t\Phi_t^\top$ has zeros on the diagonal and we have a partially deterministic model. In this case, $\Qm_t$ will have all-zero row/columns and $\DD_{t,u}^\top\Qm_t\DD_{t,u}$ will not be invertible unless the corresponding row of $\DD_{t,u}$ is zero. This means that if one of the $\xx$ rows is fully deterministic then the corresponding row of $\uu$ would need to be fixed. We can get around this, however. See section \ref{sec:degenerate} on the modifications to the update equation when some of the $\xx$'s are fully deterministic. + +\subsection{The general $\aa$ update equation}\label{sec:constA} +The derivation of the update equation for $\aalpha$ with fixed and shared values is completely analogous to the derivation for $\uupsilon$. We take the derivative of $\Psi$ with respect to $\aalpha$ and arrive at the analogous: +\begin{equation}\label{eq:general.a.update} +\begin{split} +\aalpha_{j+1} &= \big(\sum_{t=1}^T \DD_{t,a}^\top\Rm_t\DD_{t,a} \big)^{-1} + \sum_{t=1}^T \DD_{t,a}^\top\Rm_t\big(\hatyt- (\hatxt^\top \otimes \II_n)\vec(\ZZ_t) - \ff_{t,a} \big) \\ + &= \big(\sum_{t=1}^T \DD_{t,a}^\top\Rm_t\DD_{t,a} \big)^{-1} + \sum_{t=1}^T \DD_{t,a}^\top\Rm_t\big(\hatyt- \ZZ_t\hatxt - \ff_{t,a} \big) +\end{split} +\end{equation} +$\sum_{t=1}^T \DD_{t,a}^\top\Rm_t\DD_{t,a}$ must be invertible. + +\subsection{The general $\xixi$ update equation, stochastic initial state} +When $\xx_0$ is treated as stochastic with an unknown mean and known variance, the derivation of the update equation for $\xixi$ with fixed and shared values is as follows. Take the derivative of $\Psi$ (using equation \ref{eq:logL.vec.general}) with respect to $\pp$: +\begin{equation}\label{eq:pi.general1} +\partial\Psi/\partial\pp = +\big(\widetilde{\mbox{$\mathbf x$}}_0^\top \LAMm - \xixi^\top\LAMm \big) +\end{equation} +Replace $\xixi$ with $\ff_\xi + \DD_\xi\pp$, set the left side to zero and transpose: +\begin{equation}\label{eq:pi.general2} +\mathbf{0} = +\DD_\xi^\top\big(\LAMm\widetilde{\mbox{$\mathbf x$}}_0 - \LAMm\ff_\xi + \LAMm\DD_\xi\pp \big) +\end{equation} +Thus, +\begin{equation}\label{eq:pi.update.general1} +\pp_{j+1} = \big(\DD_\xi^\top\LAMm\DD_\xi \big)^{-1} +\DD_\xi^\top\LAMm(\widetilde{\mbox{$\mathbf x$}}_0 - \ff_\xi) +\end{equation} +and the new $\xixi$ is then, +\begin{equation}\label{eq:pi.update.general2} +\xixi_{j+1} = \ff_\xi + \DD_\xi\pp_{j+1}, +\end{equation} +When the initial state is defined as at $t=1$, replace $\widetilde{\mbox{$\mathbf x$}}_0$ with $\widetilde{\mbox{$\mathbf x$}}_1$ in equation \ref{eq:pi.update.general1}. + +\subsection{The general $\xixi$ update equation, fixed $\xx_0$}\label{sec:xi.constrained.x0} +For this case, $\xx_0$ is treated as fixed, i.e., as another parameter, and $\LAM$ does not appear in the equation. It will be easier to work with $\Psi$ written as follows: +\begin{equation}\label{eq:logL.vec.general.V0.is.0b} +\begin{split} +&\EXy[\log\LL(\YY,\XX ; \Theta)] = -\frac{1}{2}\EXy\bigg( + \sum_1^T(\YY_t - \ZZ_t\XX_t - \aa_t)^\top \Rm_t(\YY_t - \ZZ_t\XX_t - \aa_t) + +\sum_1^T \log |\RR_t|\\ +&\quad +\sum_1^T(\XX_t - \BB_t\XX_{t-1} - \uu_t)^\top \Qm_t (\XX_t - \BB_t\XX_{t-1} - \uu_t) + +\sum_1^T\log |\QQ_t| + \log 2\pi\bigg)\\ +&\quad \xx_0 \equiv \ff_\xi+\DD_\xi\pp +\end{split} +\end{equation} +This is the same as equation \ref{eq:logL.vec.general} except not written in vec form and $\LAM$ does not appear. Take the derivative of $\Psi$ using equation \ref{eq:logL.vec.general.V0.is.0b}. Terms not involving $\pp$ will drop out: +\begin{equation}\label{eq:pi.constrained.V0.is.0} +\begin{split} +&\partial\Psi/\partial\pp = -\frac{1}{2} \bigg( -\E[\partial(\mathbb{P}_1^\top\Qm_1\BB_1\DD_\xi\pp)/\partial\pp] -\E[\partial(\pp^\top(\BB_1\DD_\xi)^\top\Qm_1\mathbb{P}_1)/\partial\pp] \\ +&\quad +\E[\partial(\pp^\top(\BB_1\DD_\xi)^\top\Qm_1\BB_1\DD_\xi\pp)/\partial\pp] +\bigg) +\end{split} +\end{equation} +where +\begin{equation} +\mathbb{P}_1=\XX_1 - \BB_1\ff_\xi - \uu_1 +\end{equation} + +After pulling the constants out of the expectations and taking the derivative, we arrive at: +\begin{equation} +\begin{split} +\partial\Psi/\partial\pp = -\frac{1}{2} \bigg( - 2\E[\mathbb{P}_1]^\top\Qm_1\BB_1\DD_\xi ++ 2\pp^\top(\BB_1\DD_\xi)^\top\Qm_1\BB_1\DD_\xi +\bigg) +\end{split} +\end{equation} +Set the left side to zero, and solve for $\pp$. +\begin{equation}\label{eq:pi.constrained.V0.is.0.4} +\pp = (\DD_\xi^\top\BB_1^\top\Qm_1\BB_1\DD_\xi)^{-1}\DD_\xi^\top\BB_1^\top\Qm_1(\hatxone - \BB_1\ff_\xi - \uu_1) +\end{equation} + +This equation requires that the inverse right of the $=$ exists and it might not if $\BB_t$ or $\Qm_1$ has any all zero rows/columns. In that case, defining $\xixi \equiv \xx_1$ might work (section \ref{sec:general.x1.update}) or the problematic rows of $\xixi$ could be fixed. +The new $\xixi$ is then, +\begin{equation} +\xixi_{j+1} = \ff_\xi + \DD_\xi\pp_{j+1}, +\end{equation} + +\subsection{The general $\xixi$ update equation, fixed $\xx_1$}\label{sec:general.x1.update} +When $\xx_1$ is treated as fixed, i.e., as an estimated parameter, and $\LAM$ does not appear, the expected log likelihood, $\Psi$, is written as follows: +\begin{equation}\label{eq:logL.vec.general.V0.is.0.x1} +\begin{split} +&\EXy[\log\LL(\YY,\XX ; \Theta)] = -\frac{1}{2}\EXy\bigg( + \sum_1^T(\YY_t - \ZZ_t\XX_t - \aa_t)^\top \Rm_t (\YY_t - \ZZ_t\XX_t - \aa_t) +\sum_1^T \log |\RR_t|\\ +&\quad +\sum_2^T(\XX_t - \BB_t\XX_{t-1} - \uu_t)^\top \Qm_t (\XX_t - \BB_t\XX_{t-1} - \uu_t) + +\sum_2^T\log |\QQ_t| + \log 2\pi\bigg)\\ +&\quad \xx_1 \equiv \ff_\xi+\DD_\xi\pp +\end{split} +\end{equation} +Take the derivative of $\Psi$ using equation \ref{eq:logL.vec.general.V0.is.0.x1}: +\begin{equation} +\begin{split} +&\partial\Psi/\partial\pp = -\frac{1}{2} \bigg( +-\E[\partial(\mathbb{O}_1^\top\Rm_1\ZZ_1\DD_\xi\pp)/\partial\pp] -\E[\partial((\ZZ_1\DD_\xi\pp)^\top\Rm_1\mathbb{O}_1)/\partial\pp] \\ +&\quad +\E[\partial((\ZZ_1\DD_\xi\pp)^\top\Rm_1\ZZ_1\DD_\xi\pp)/\partial\pp] + -\E[\partial(\mathbb{P}_2^\top\Qm_2\BB_2\DD_\xi\pp)/\partial\pp] -\E[\partial((\BB_2\DD_\xi\pp)^\top\Qm_2\mathbb{P}_2)/\partial\pp] \\ +&\quad +\E[\partial((\BB_2\DD_\xi\pp)^\top\Qm_2\BB_2\DD_\xi\pp)/\partial\pp] +\bigg) +\end{split} +\end{equation} +where +\begin{equation} +\begin{split} +\mathbb{P}_2&=\XX_2 - \BB_2\ff_\xi - \uu_2\\ +\mathbb{O}_1&=\YY_1 - \ZZ_1\ff_\xi - \aa_1\\ +\end{split} +\end{equation} + +In terms of the Kalman smoother output the new $\xixi$ for EM iteration $j+1$ when $\xixi \equiv \xx_1$ is +\begin{equation}\label{eq:pix1.unconstrained.V0.is.0.t.1.3} +\begin{split} +\pp_{j+1} &= ((\ZZ_1\DD_\xi)^\top\Rm_1\ZZ_1\DD_\xi + +(\BB_2\DD_\xi)^\top\Qm_2\BB_2\DD_\xi)^{-1} +( (\ZZ_1\DD_\xi)^\top\Rm_1\widetilde{\mathbb{O}}_1 + (\BB_2\DD_\xi)^\top\Qm_2\widetilde{\mathbb{P}}_2) +\end{split} +\end{equation} +where +\begin{equation} +\begin{split} +\widetilde{\mathbb{P}}_2 &=\widetilde{\mbox{$\mathbf x$}}_2 - \BB_2\ff_\xi - \uu_2\\ +\widetilde{\mathbb{O}}_1 &=\widetilde{\mbox{$\mathbf y$}}_1 - \ZZ_1\ff_\xi - \aa_1 +\end{split} +\end{equation} +The new $\xixi$ is +\begin{equation} +\xixi_{j+1} = \ff_\xi + \DD_\xi\pp_{j+1}, +\end{equation} + +\subsection{The general $\BB$ update equation} +Take the derivative of $\Psi$ with respect to $\bbeta$; terms in $\Psi$ do not involve $\bbeta$ will equal 0 and drop out. +\begin{equation}\label{eq:B.general1} +\begin{split} +\partial\Psi/\partial\bbeta + &= - \frac{1}{2}\sum_{t=1}^T \bigg( -\partial(\E[\XX_t^\top\Qm_t\Bm_t\DD_{t,b}\bbeta])/\partial\bbeta + - \partial(\E[(\Bm_t\DD_{t,b}\bbeta)^\top\Qm_t\XX_t])/\partial\bbeta \\ +&+ \partial(\E[(\Bm_t\DD_{t,b}\bbeta)^\top\Qm_t\Bm_t\DD_{t,b}\bbeta])/\partial\bbeta + + \partial(\E[\uu_t^\top\Qm_t\Bm_t\DD_{t,b}\bbeta])/\partial\bbeta ++ \partial((\Bm_t\DD_{t,b}\bbeta)^\top\Qm_t\uu_t)/\partial\bbeta \\ +&+ \partial(\E[(\Bm_t\ff_{t,b})^\top\Qm_t\Bm_t\DD_{t,b}\bbeta])/\partial\bbeta + + \partial(\E[(\Bm_t\DD_{t,b}\bbeta)^\top\Qm_t\Bm_t\ff_{t,b}])/\partial\bbeta +\bigg)\end{split} +\end{equation} +where +\begin{equation} +\Bm_t = (\XX_{t-1}^\top \otimes \II_m) +\end{equation}Since $\bbeta$ is to the far left or right in each term, the derivative is simple using the derivative terms in table \ref{sec:MatrixDerivatives}. +$\partial\Psi/\partial\bbeta$ becomes: +\begin{equation}\label{eq:B.general1b} +\begin{split} +\partial\Psi/\partial\pmb{\upsilon} +&= - \frac{1}{2}\sum_{t=1}^T \bigg( +-2\E[\XX_t^\top\Qm_t\Bm_t\DD_{t,b}] + 2(\beta^\top\DD_{t,b}^\top\Bm_t^\top\Qm_t\Bm_t\DD_{t,b}) \\ +&+ 2\E[\uu_t^\top\Qm_t\Bm_t\DD_{t,b}] + 2\E[(\Bm_t\ff_{t,b})^\top\Qm_t\Bm_t\DD_{t,b}] \bigg) +\end{split}\end{equation} +Note that $\XX$ appears in $\Bm_t$ but not in other terms. We need to keep track of where $\XX$ appears so the we keep the expectation brackets around any terms involving $\XX$. +\begin{equation} +\begin{split} +\partial\Psi/\partial\bbeta += \sum_{t=1}^T \bigg( +\E[\XX_t^\top\Qm_t\Bm_t]\DD_{t,b} - \uu_t^\top\Qm_t\E[\Bm_t]\DD_{t,b} +- \bbeta^\top\DD_{t,b}^\top\E[\Bm_t^\top\Qm_t\Bm_t]\DD_{t,b} - \ff_{t,b}^\top\E[\Bm_t^\top\Qm_t\Bm_t]\DD_{t,b} \bigg) +\end{split} +\end{equation} +Set the left side to zero and transpose the whole equation. +\begin{equation} +\mathbf{0} + = \sum_{t=1}^T \bigg( +\DD_{t,b}^\top\E[\Bm_t^\top\Qm_t\XX_t]- \DD_{t,b}^\top\E[\Bm_t]^\top\Qm_t\uu_t + - \DD_{t,b}^\top\E[\Bm_t^\top\Qm_t\Bm_t]\ff_{t,b} + - \DD_{t,b}^\top\E[\Bm_t^\top\Qm_t\Bm_t]\DD_{t,b}\bbeta \bigg) +\end{equation} +Thus, +\begin{equation} +\big(\sum_{t=1}^T \DD_{t,b}^\top\E[\Bm_t^\top\Qm_t\Bm_t]\DD_{t,b} \big)\bbeta + = \sum_{t=1}^T \DD_{t,b}^\top\big( + \E[\Bm_t^\top\Qm_t\XX_t] + - \E[\Bm_t]^\top\Qm_t\uu_t + - \E[\Bm_t^\top\Qm_t\Bm_t]\ff_{t,b} \big) +\end{equation} +Now we need to deal with the expectations. +\begin{equation}\label{eq:B.expect1} +\begin{split} +\E[\Bm_t^\top\Qm_t\Bm_t] +&=\E[(\XX_{t-1}^\top \otimes \II_m)^\top\Qm_t(\XX_{t-1}^\top \otimes \II_m)]\\ +&=\E[(\XX_{t-1} \otimes \II_m)\Qm_t(\XX_{t-1}^\top \otimes \II_m)]\\ +&=\E[\XX_{t-1}\XX_{t-1}^\top \otimes \Qm_t]\\ +&=\E[\XX_{t-1}\XX_{t-1}^\top] \otimes \Qm_t\\ +&=\hatPtm \otimes \Qm_t +\end{split} +\end{equation} + +\begin{equation}\label{eq:B.expect2} +\begin{split} +\E[\Bm_t^\top\Qm_t\XX_t] +&=\E[(\XX_{t-1}^\top \otimes \II_m)^\top\Qm_t\XX_t]\\ +&=\E[(\XX_{t-1} \otimes \II_m)\Qm_t\XX_t]\\ +&=\E[(\XX_{t-1} \otimes \Qm_t)\XX_t]\\ +&=\E[\vec(\Qm_t\XX_t\XX_{t-1}^\top)]\\ +&=\vec(\Qm_t\hatPttm) +\end{split} +\end{equation} + +\begin{equation}\label{eq:B.expect3} +\begin{split} +\E[\Bm_t]^\top\Qm_t\uu_t&=(\E[\XX_{t-1}] \otimes \II_m)\Qm_t\uu_t \\ +&= (\hatxtm \otimes \Qm_t)\uu_t \\ +&= \vec(\Qm_t\uu_t\hatxtm^\top) +\end{split} +\end{equation} + +Thus, +\begin{equation} +\begin{split} +\big(\sum_{t=1}^T &\DD_{t,b}^\top(\hatPtm \otimes \Qm_t)\DD_{t,b} \big)\bbeta + = \sum_{t=1}^T \DD_{t,b}^\top \big(\vec(\Qm_t\hatPttm) - (\hatPtm \otimes \Qm_t)\ff_{t,b} - \vec(\Qm_t\uu_t\hatxtm^\top) \big) +\end{split} +\end{equation} +Then $\bbeta$ for the $j+1$ iteration of the EM algorithm is then: +\begin{equation}\label{eq:B.general4} +\begin{split} +\bbeta = \bigg(\sum_{t=1}^T \DD_{t,b}^\top(\hatPtm \otimes \Qm_t)\DD_{t,b} \bigg)^{-1} +\times \sum_{t=1}^T \DD_{t,b}^\top \big(\vec(\Qm_t\hatPttm) - (\hatPtm \otimes \Qm_t)\ff_{t,b} - \vec(\Qm_t\uu_t\hatxtm^\top) \big) +\end{split} +\end{equation} + +This requires that $\DD_{t,b}^\top(\hatPtm \otimes \Qm_t)\DD_{t,b}$ is invertible, and as usual we will run into trouble if $\Phi_t\QQ_t\Phi_t^\top$ has zeros on the diagonal. See section \ref{sec:degenerate}. + +\subsection{The general $\ZZ$ update equation}\label{sec:constZ} +The derivation of the update equation for $\zzeta$ with fixed and shared values is analogous to the derivation for $\bbeta$. The update equation for $\zzeta$ is +\begin{equation}\label{eq:general.Z.update} +\begin{split} +\zzeta_{j+1} = +\bigg(\sum_{t=1}^T \DD_{t,z}^\top(\hatPt \otimes \Rm_t)\DD_{t,z} \bigg)^{-1} +\times \sum_{t=1}^T \DD_{t,z}^\top \big(\vec(\Rm_t\hatYXt) - (\hatPt \otimes \Rm_t)\ff_{t,z} - \vec(\Rm_t\aa_t\hatxt^\top) \big) +\end{split} +\end{equation} + +This requires that $\DD_{t,z}^\top(\hatPt \otimes \Rm_t)\DD_{t,z}$ is invertible. If $\Xi_t\RR_t\Xi_t^\top$ has zeros on the diagonal, this will not be the case. See section \ref{sec:degenerate}. + +\subsection{The general $\QQ$ update equation}\label{sec:constrained.Q} +A general analytical solution for $\QQ$ is problematic because the inverse of $\QQ_t$ appears in the likelihood and $\QQ_t^{-1}$ cannot always be rewritten as a function of $\vec(\QQ_t)$. However, in a few important special---yet quite broad--- cases, an analytical solution can be derived. The most general of these special cases is a block-symmetric matrix with optional independent fixed blocks (subsection \ref{sec:Q.general}). Indeed, all other cases (diagonal, block-diagonal, unconstrained, equal variance-covariance) except one (a replicated block-diagonal) are special cases of the blocked matrix with optional independent fixed blocks. + +Unlike the other parameters, I need to put constraints on $\ff$ and $\DD$. I constrain $\DD$ to be a design matrix. It has only 1s and 0s, and the rows sums are either 1 or 0. Thus terms like $q_1+q_2$ are not allowed. A non-zero value in $\ff$ is only allowed if the corresponding row in $\DD$ is all zero. Thus elements like $f_1+q_1$ are not allowed in $\QQ$. These constraints, especially the constraint that $\DD$ only has 0s and 1s, might be loosened, but with the addition of $\GG_t$, we still have a very wide class of $\QQ$ matrices. + +The general update equation for $\QQ$ with these constraints is +\begin{equation}\label{eq:Q.general} +\begin{split} +\qq_{j+1} &= \big(\sum_{t=1}^T(\DD_{t,q}^\top\DD_{t,q})\big)^{-1} \sum_{t=1}^T\DD_{t,q}^\top\vec(\SS_t)\\ +\text{where }\SS_t&=\Phi_t\big(\hatPt - \hatPttm \BB_t^\top - \BB_t\hatPtmt +- \hatxt\uu_t^\top - \uu_t\hatxt^\top + \\ +&\quad \BB_t\hatPtm\BB_t^\top + \BB_t\hatxtm\uu_t^\top + \uu_t\hatxtm^\top\BB_t^\top + \uu_t\uu_t^\top \big)\Phi_t^\top\\ +\vec(\QQ_t)_{j+1}&=\ff_{t,q}+\DD_{t,q}\qq_{j+1} \\ +\text{where}\\ +\Phi_t = (\GG_t^\top\GG_t)^{-1}\GG_t^\top +\end{split} +\end{equation} + +The vec of $\QQ_t$ is written in the form of $\vec(\QQ_t) = \ff_{t,q} + \DD_{t,q} \pmb{q}$, where $\ff_{t,q}$ is a $p^2 \times 1$ column vector of the fixed values including zero, $\DD_{t,q}$ is the $p^2 \times s$ design matrix, and $\pmb{q}$ is a column vector of the $s$ free values in $\QQ_t$. This requires that $(\DD_{t,q}^\top\DD_{t,q})$ be invertible, which in a valid model must be true; if is not true you have specified an invalid variance-covariance structure since the implied variance-covariance matrix will not be full-rank and not invertible and thus an invalid variance-covariance matrix. + +Below I show how the $\QQ$ update equation arises by working through a few of the special cases. In these derivations the $q$ subscript is left off the $\DD$ and $\ff$ matrices. + +\subsubsection{Special case: diagonal $\QQ$ matrix (with shared or unique parameters)} +Let $\QQ$ be a non-time varying diagonal matrix with fixed and shared values such that it takes a form like so: +\begin{equation*} +\QQ= +\begin{bmatrix} +q_1&0&0&0&0\\ +0&f_1&0&0&0\\ +0&0&q_2&0&0\\ +0&0&0&f_2&0\\ +0&0&0&0&q_2 +\end{bmatrix} +\end{equation*} +Here, $f$'s are fixed values (constants) and $q$'s are free parameters elements. The $f$ and $q$ do not occur together; i.e., there are no terms like $f_1+q_1$. + + +The vec of $\QQ^{-1}$ can be written then as $\vec(\QQ^{-1}) = \ff^{*}_q + \DD_q \pmb{q^{*}}$, where $\ff^{*}$ is like $\ff_q$ but with the corresponding $i$-th non-zero fixed values replaced by $1/f_i$ and $\pmb{q^{*}}$ is a column vector of 1 over the $q_i$ values. For the example above, +\begin{equation*} +\pmb{q^{*}} = +\begin{bmatrix} +1/q_1 \\ 1/q_2 +\end{bmatrix} +\end{equation*} + +Take the partial derivative of $\Psi$ with respect to $\pmb{q^{*}}$. We can do this because $\QQ^{-1}$ is diagonal and thus each element of $\pmb{q^{*}}$ is independent of the other elements; otherwise we would not necessarily be able to vary one element of $\pmb{q^{*}}$ while holding the other elements constant. +\begin{equation} +\begin{split} +&\partial\Psi/\partial\pmb{q^{*}} = -\frac{1}{2} \sum_{t=1}^T\partial\bigg( +\E[\XX_t^\top\Phi_t^\top\QQ^{-1}\Phi_t\XX_t] +-\E[\XX_t^\top\Phi_t^\top\QQ^{-1}\Phi_t\BB_t\XX_{t-1}] \\ +&\quad -\E[(\BB_t\XX_{t-1})^\top\Phi_t^\top\QQ^{-1}\Phi_t\XX_t] + - \E[\XX_t^\top\Phi_t^\top\QQ^{-1}\Phi_t\uu_t] \\ +&\quad - \E[\uu_t^\top\Phi_t^\top\QQ^{-1}\Phi_t\XX_t] ++ \E[(\BB_t\XX_{t-1})^\top\Phi_t^\top\QQ^{-1}\Phi_t\BB_t\XX_{t-1}] \\ +&\quad + \E[(\BB_t\XX_{t-1})^\top\Phi_t^\top\QQ^{-1}\Phi_t\uu_t] ++ \E[\uu_t^\top\Phi_t^\top\QQ^{-1}\Phi_t\BB_t\XX_{t-1}] + \uu_t^\top\Phi_t^\top\QQ^{-1}\Phi_t\uu_t \bigg)/\partial\pmb{q^{*}}\\ +& - \partial\big(\frac{T}{2}\log |\QQ| \big)/\partial\pmb{q^{*}} \\ +\end{split} +\end{equation} +Use vec operation Equation \ref{eq:vec.aTBa} to pull $\QQ^{-1}$ out from the middle\footnote{Another, more common, way to do this is to use a ``trace trick'', $\trace(\aa^\top\AA\bb)=\trace(\AA\bb\aa^\top)$, to pull $\QQ^{-1}$ out.}, using +$$\aa^\top \Phi^\top \QQ^{-1} \Phi \bb = (\bb^\top\Phi^\top \otimes \aa^\top \Phi^\top)\vec(\QQ^{-1}) = (\bb^\top \otimes \aa^\top)(\Phi^\top \otimes \Phi^\top)\vec(\QQ^{-1})$$. +Then replace the expectations with the Kalman smoother output, +\begin{equation}\label{eq:Q.gendiag2} +\begin{split} +&\partial\Psi/\partial\pmb{q^{*}} = -\frac{1}{2} \sum_{t=1}^T\partial\bigg( +\E[\XX_t^\top \otimes \XX_t^\top ] +-\E[\XX_t^\top \otimes (\BB_t\XX_{t-1})^\top] -\E[(\BB_t\XX_{t-1})^\top \otimes \XX_t^\top] \\ +&\quad - \E[\XX_t^\top \otimes \uu_t^\top] - \E[\uu_t^\top \otimes \XX_t^\top] ++ \E[(\BB_t\XX_{t-1})^\top \otimes (\BB_t\XX_{t-1})^\top] \\ +&\quad + \E[(\BB_t\XX_{t-1})^\top \otimes \uu_t^\top] ++ \E[\uu_t^\top \otimes (\BB\XX_{t-1})^\top] + (\uu_t^\top \otimes \uu_t^\top) \bigg)(\Phi_t \otimes \Phi_t)^\top\vec(\QQ^{-1})/\partial\pmb{q^{*}}\\ +& - \partial\bigg(\frac{T}{2}\log |\QQ| \bigg)/\partial\pmb{q^{*}} \\ +\end{split} +\end{equation} +This can be further reduced using +$$(\bb^\top \otimes \aa^\top)(\Phi^\top \otimes \Phi^\top)=(\vec(\aa\bb^\top))^\top (\Phi \otimes \Phi)^\top = \vec(\Phi \aa\bb^\top \Phi^\top)^\top$$ +With this reduction and replacing $\log|\QQ|$ with $-\log|\QQ^{-1}|$, we get +\begin{equation} +\begin{split} +&\partial\Psi/\partial\pmb{q^{*}} = -\frac{1}{2} \sum_{t=1}^T\vec(\SS_t)^\top\partial\big(\vec(\QQ^{-1})\big)/\partial\pmb{q^{*}} ++ \partial\big(\frac{T}{2}\log|\QQ^{-1}| \big)/\partial\pmb{q^{*}} \\ +&\text{where }\\ +&\SS_t=\Phi_t\big(\hatPt - \hatPttm \BB_t^\top - \BB\hatPtmt +- \hatxt\uu_t^\top - \uu_t \hatxt^\top + \\ +&\quad \BB_t\hatPtm\BB_t^\top + \BB_t\hatxtm\uu_t^\top + \uu_t\hatxtm^\top\BB_t^\top + \uu_t\uu_t^\top \big)\Phi_t^\top +\end{split} +\end{equation} +The determinant of a diagonal matrix is the product of its diagonal elements. Thus, +\begin{equation}\label{eq:Q.gendiag3} +\begin{split} +&\partial\Psi/\partial\pmb{q^{*}}= + -\bigg(\frac{1}{2} \sum_{t=1}^T \vec(\SS_t)^\top (\ff^{*} + \DD_q\pmb{q^{*}}) \\ +&\quad - \frac{1}{2}\sum_{t=1}^T(\log(f^{*}_1) + \log(f^{*}_2) ... k\log(q^{*}_1) + l\log(q^{*}_2)...)\bigg)/\partial\pmb{q^{*}}\\ +\end{split} +\end{equation} +where $k$ is the number of times $q_1$ appears on the diagonal of $\QQ$ and $l$ is the number of times $q_2$ appears, etc. + +Taking the derivatives and transposing the whole equation we get, +\begin{equation}\label{eq:Q.gendiag4} +\begin{split} +&\partial\Psi/\partial\pmb{q^{*}} = += \frac{1}{2} \sum_{t=1}^T\DD_q^\top \vec(\SS_t) - \frac{1}{2}\sum_{t=1}^T(\log(f^{*}_1) + ... k\log(q^{*}_1) + l\log(q^{*}_2)...)/\partial\pmb{q^{*}}\\ +&\quad = \frac{1}{2} \sum_{t=1}^T\DD_q^\top \vec(\SS_t) - \frac{1}{2}\sum_{t=1}^T\DD_q^\top\DD_q\pmb{q} +\end{split} +\end{equation} +$\DD_q^\top\DD_q$ is a $s \times s$ matrix with $k$, $l$, etc. along the diagonal and thus is invertible; as usual, $s$ is the number of free elements in $\QQ$. Set the left side to zero (a $1 \times s$ matrix of zeros) and solve for $\pmb{q}$. This gives us the update equation for $\qq$ and $\QQ$: +\begin{equation}\label{eq:Q.diag.update} +\begin{split} +\qq_{j+1} &= \big(\sum_{t=1}^T\DD_q^\top\DD_q\big)^{-1}\sum_{t=1}^T\DD_q^\top\vec(\SS_t)\\ +\vec(\QQ)_{j+1} &= \ff + \DD_q\pmb{q}_{j+1} +\end{split} +\end{equation} +Since in this example, $\DD_q$ is time-constant, this reduces to +\begin{equation*} +\pmb{q}_{j+1} = \frac{1}{T}(\DD_q^\top\DD_q)^{-1}\DD_q^\top\sum_{t=1}^T\vec(\SS_t) +\end{equation*} +$\SS_t$ is defined in equation \ref{eq:Q.gendiag2}. + +\subsubsection{Special case: $\QQ$ with one variance and one covariance} +\begin{equation*} +\QQ= +\begin{bmatrix} +\alpha&\beta&\beta&\beta\\ +\beta&\alpha&\beta&\beta\\ +\beta&\beta&\alpha&\beta\\ +\beta&\beta&\beta&\alpha +\end{bmatrix}\quad\quad +\QQ^{-1}= +\begin{bmatrix} +f(\alpha,\beta)&g(\alpha,\beta)&g(\alpha,\beta)&g(\alpha,\beta)\\ +g(\alpha,\beta)&f(\alpha,\beta)&g(\alpha,\beta)&g(\alpha,\beta)\\ +g(\alpha,\beta)&g(\alpha,\beta)&f(\alpha,\beta)&g(\alpha,\beta)\\ +g(\alpha,\beta)&g(\alpha,\beta)&g(\alpha,\beta)&f(\alpha,\beta) +\end{bmatrix} +\end{equation*} +This is a matrix with a single shared variance parameter on the diagonal and a single shared covariance on the off-diagonals. The derivation is the same as for the diagonal case, until the step involving the differentiation of $\log|\QQ^{-1}|$: +\begin{equation}\label{eq:Q.eqvarcov1} +\begin{split} +&\partial\Psi/\partial\pmb{q^{*}} = + \partial\bigg(-\frac{1}{2} \sum_{t=1}^T\big(\vec(\SS_t)^\top\big)\vec(\QQ^{-1}) ++ \frac{T}{2}\log |\QQ^{-1}|\bigg)/\partial\pmb{q^{*}} \\ +\end{split} +\end{equation} +It does not make sense to take the partial derivative of $\log |\QQ^{-1}|$ with respect to $\vec(\QQ^{-1})$ because many elements of $\QQ^{-1}$ are shared so it is not possible to fix one element while varying another. Instead, we can take the partial derivative of $\log |\QQ^{-1}|$ with respect to $g(\alpha,\beta)$ which is $\sum_{\{i,j\}\in \text{set}_g}\partial\log|\QQ^{-1}|/\partial\pmb{q^{*}}_{i,j}$. Set $g$ is those $i,j$ values where $\pmb{q^{*}}=g(\alpha,\beta)$. Because $g()$ and $f()$ are different functions of both $\alpha$ and $\beta$, we can hold one constant while taking the partial derivative with respect to the other (well, presuming there exists some combination of $\alpha$ and $\beta$ that would allow that). But if we have fixed values on the off-diagonal, this would not be possible. In this case (see below), we cannot hold $g()$ constant while varying $f()$ because both are only functions of $\alpha$: +\begin{equation*} +\QQ= +\begin{bmatrix} +\alpha&f&f&f\\ +f&\alpha&f&f\\ +f&f&\alpha&f\\ +f&f&f&\alpha +\end{bmatrix}\quad\quad +\QQ^{-1}= +\begin{bmatrix} +f(\alpha)&g(\alpha)&g(\alpha)&g(\alpha)\\ +g(\alpha)&f(\alpha)&g(\alpha)&g(\alpha)\\ +g(\alpha)&g(\alpha)&f(\alpha)&g(\alpha)\\ +g(\alpha)&g(\alpha)&g(\alpha)&f(\alpha) +\end{bmatrix} +\end{equation*} + +Taking the partial derivative of $\log |\QQ^{-1}|$ with respect to $\pmb{q^{*}}=\big[\begin{smallmatrix}f(\alpha,\beta)\\g(\alpha,\beta)\end{smallmatrix}\big]$, we arrive at the same equation as for the diagonal matrix: +\begin{equation}\label{eq:Q.eqvarcov2} +\begin{split} +&\partial\Psi/\partial\pmb{q^{*}} = +\frac{1}{2} \sum_{t=1}^T\DD^\top \vec(\SS_t) - \frac{1}{2}\sum_{t=1}^T(\DD^\top\DD)\pmb{q} +\end{split} +\end{equation} +where here $\DD^\top\DD$ is a $2 \times 2$ diagonal matrix with the number of times $f(\alpha,\beta)$ appears in element $(1,1)$ and the number of times $g(\alpha,\beta)$ appears in element $(2,2)$ of $\DD$; $s=2$ here since there are only 2 free parameters in $\QQ$. + +Setting to zero and solving for $\pmb{q^{*}}$ leads to the exact same update equation as for the diagonal $\QQ$, namely equation \ref{eq:Q.diag.update} in which $\ff_q = 0$ since there are no fixed values. + +\subsubsection{Special case: a block-diagonal matrices with replicated blocks} +\label{sec:Q.block.diagonal} +Because these operations extend directly to block-diagonal matrices, all results for individual matrix types can be extended to a block-diagonal matrix with those types: +\begin{equation*} +\QQ= +\begin{bmatrix} +\mathbb{B}_1&0&0\\ +0&\mathbb{B}_2&0\\ +0&0&\mathbb{B}_3\\ +\end{bmatrix} +\end{equation*} +where $\mathbb{B}_i$ is a matrix from any of the allowed matrix types, such as unconstrained, diagonal (with fixed or shared elements), or equal variance-covariance. Blocks can also be shared: +\begin{equation*}\QQ= +\begin{bmatrix} +\mathbb{B}_1&0&0\\ +0&\mathbb{B}_2&0\\ +0&0&\mathbb{B}_2\\ +\end{bmatrix} +\end{equation*} +but the entire block must be identical $(\mathbb{B}_2 \equiv \mathbb{B}_3)$; one cannot simply share individual elements in different blocks. Either all the elements in two (or 3, or 4...) blocks are shared or none are shared. + +This is ok: +\begin{equation*} +\begin{bmatrix} +c&d&d&0&0&0\\ +d&c&d&0&0&0\\ +d&d&c&0&0&0\\ +0&0&0&c&d&d\\ +0&0&0&d&c&d\\ +0&0&0&d&d&c\\ +\end{bmatrix} +\end{equation*} +This is not ok: +\begin{equation*} +\begin{bmatrix} +c&d&d&0&0\\ +d&c&d&0&0\\ +d&d&c&0&0\\ +0&0&0&c&d\\ +0&0&0&d&c +\end{bmatrix} +\text{ nor } +\begin{bmatrix} +c&d&d&0&0&0\\ +d&c&d&0&0&0\\ +d&d&c&0&0&0\\ +0&0&0&c&e&e\\ +0&0&0&e&c&e\\ +0&0&0&e&e&c\\ +\end{bmatrix}\end{equation*} +The first is bad because the blocks are not identical; they need the same dimensions as well as the same values. The second is bad because again the blocks are not identical; all values must be the same. + +\subsubsection{Special case: a symmetric blocked matrix} +\label{sec:Q.symmetric blocked} +The same derivation translates immediately to blocked symmetric $\QQ$ matrices with the following form: +\begin{equation*} +\QQ= +\begin{bmatrix} +\mathbb{E}_1&\mathbb{C}_{1,2}&\mathbb{C}_{1,3}\\ +\mathbb{C}_{1,2}&\mathbb{E}_2&\mathbb{C}_{2,3}\\ +\mathbb{C}_{1,3}&\mathbb{C}_{2,3}&\mathbb{E}_3\\ +\end{bmatrix} +\end{equation*} +where the $\mathbb{E}$ are as above matrices with one value on the diagonal and another on the off-diagonals (no zeros!). The $\mathbb{C}$ matrices have only one free value or are all zero. Some $\mathbb{C}$ matrices can be zero while are others are non-zero, but a individual $\mathbb{C}$ matrix cannot have a combination of free values and zero values; they have to be one or the other. Also the whole matrix must stay block symmetric. Additionally, there can be shared $\mathbb{E}$ or $\mathbb{C}$ matrices but the whole matrix needs to stay block-symmetric. Here are the forms that $\mathbb{E}$ and $\mathbb{C}$ can take: +\begin{equation*} +\mathbb{E}_i= +\begin{bmatrix} +\alpha&\beta&\beta&\beta\\ +\beta&\alpha&\beta&\beta\\ +\beta&\beta&\alpha&\beta\\ +\beta&\beta&\beta&\alpha +\end{bmatrix} +\quad\quad +\mathbb{C}_i= +\begin{bmatrix} +\chi&\chi&\chi&\chi\\ +\chi&\chi&\chi&\chi\\ +\chi&\chi&\chi&\chi\\ +\chi&\chi&\chi&\chi +\end{bmatrix} +\text{ or } +\begin{bmatrix} +0&0&0&0\\ +0&0&0&0\\ +0&0&0&0\\ +0&0&0&0 +\end{bmatrix} +\end{equation*} +The following are block-symmetric: +\begin{equation*} +\begin{bmatrix} +\mathbb{E}_1&\mathbb{C}_{1,2}&\mathbb{C}_{1,3}\\ +\mathbb{C}_{1,2}&\mathbb{E}_2&\mathbb{C}_{2,3}\\ +\mathbb{C}_{1,3}&\mathbb{C}_{2,3}&\mathbb{E}_3\\ +\end{bmatrix} +\text{ and } +\begin{bmatrix} +\mathbb{E}&\mathbb{C}&\mathbb{C}\\ +\mathbb{C}&\mathbb{E}&\mathbb{C}\\ +\mathbb{C}&\mathbb{C}&\mathbb{E}\\ +\end{bmatrix} +\end{equation*} +\begin{equation*} +\text{ and } +\begin{bmatrix} +\mathbb{E}_1&\mathbb{C}_1&\mathbb{C}_{1,2}\\ +\mathbb{C}_1&\mathbb{E}_1&\mathbb{C}_{1,2}\\ +\mathbb{C}_{1,2}&\mathbb{C}_{1,2}&\mathbb{E}_2\\ +\end{bmatrix} +\end{equation*} +The following are NOT legal block-symmetric matrices: +\begin{equation*} +\begin{bmatrix} +\mathbb{E}_1&\mathbb{C}_{1,2}&0\\ +\mathbb{C}_{1,2}&\mathbb{E}_2&\mathbb{C}_{2,3}\\ +0&\mathbb{C}_{2,3}&\mathbb{E}_3 +\end{bmatrix} +\text{ and } +\begin{bmatrix} +\mathbb{E}_1&0&\mathbb{C}_1\\ +0&\mathbb{E}_1&\mathbb{C}_2\\ +\mathbb{C}_1&\mathbb{C}_2&\mathbb{E}_2 +\end{bmatrix} +\text{ and } +\begin{bmatrix} +\mathbb{E}_1&0&\mathbb{C}_{1,2}\\ +0&\mathbb{E}_1&\mathbb{C}_{1,2}\\ +\mathbb{C}_{1,2}&\mathbb{C}_{1,2}&\mathbb{E}_2\\ +\end{bmatrix} +\end{equation*} +\begin{equation*} +\text{ and } +\begin{bmatrix} +\mathbb{U}_1&\mathbb{C}_{1,2}&\mathbb{C}_{1,3}\\ +\mathbb{C}_{1,2}&\mathbb{E}_2&\mathbb{C}_{2,3}\\ +\mathbb{C}_{1,3}&\mathbb{C}_{2,3}&\mathbb{E}_3 +\end{bmatrix} +\text{ and } +\begin{bmatrix} +\mathbb{D}_1&\mathbb{C}_{1,2}&\mathbb{C}_{1,3}\\ +\mathbb{C}_{1,2}&\mathbb{E}_2&\mathbb{C}_{2,3}\\ +\mathbb{C}_{1,3}&\mathbb{C}_{2,3}&\mathbb{E}_3\end{bmatrix} +\end{equation*} +In the first row, the matrices have fixed values (zeros) and free values (covariances) on the same off-diagonal row and column. That is not allowed. If there is a zero on a row or column, all other terms on the off-diagonal row and column must be also zero. In the second row, the matrix is not block-symmetric since the upper corner is an unconstrained block ($\mathbb{U}_1$) in the left matrix and diagonal block ($\mathbb{D}_1$) in the right matrix instead of a equal variance-covariance matrix ($\mathbb{E}$). + +\subsubsection{The general case: a block-diagonal matrix with general blocks} +\label{sec:Q.general} +In it's most general form, $\QQ$ is allowed to have a block-diagonal form where the blocks, here called $\mathbb{G}$ are any of the previous allowed cases. No shared values across $\mathbb{G}$'s; shared values are allowed within $\mathbb{G}$'s. +\begin{equation*} +\QQ= +\begin{bmatrix} +\mathbb{G}_1&0&0\\ +0&\mathbb{G}_2&0\\ +0&0&\mathbb{G}_3\\ +\end{bmatrix} +\end{equation*} +The $\mathbb{G}$'s must be one of the special cases listed above: unconstrained, diagonal (with fixed or shared values), equal variance-covariance, block diagonal (with shared or unshared blocks), and block-symmetric (with shared or unshared blocks). Fixed blocks are allowed, but then the covariances with the free blocks must be zero: +\begin{equation*} +\QQ= +\begin{bmatrix} +\mathbb{F}&0&0&0\\ +0&\mathbb{G}_1&0&0\\ +0&0&\mathbb{G}_2&0\\ +0&0&0&\mathbb{G}_3 +\end{bmatrix} +\end{equation*} +Fixed blocks must have only fixed values (zero is a fixed value) but the fixed values can be different from each other. The free blocks must have only free values (zero is not a free value). + +\subsection{The general $\RR$ update equation} +The $\RR$ update equation for blocked symmetric matrices with optional independent fixed blocks is completely analogous to the $\QQ$ equation. Thus if $\RR$ has the form +\begin{equation*} +\RR= +\begin{bmatrix} +\mathbb{F}&0&0&0\\ +0&\mathbb{G}_1&0&0\\ +0&0&\mathbb{G}_2&0\\ +0&0&0&\mathbb{G}_3 +\end{bmatrix} +\end{equation*} +Again the $\mathbb{G}$'s must be one of the special cases listed above: unconstrained, diagonal (with fixed or shared values), equal variance-covariance, block diagonal (with shared or unshared blocks), and block-symmetric (with shared or unshared blocks). Fixed blocks are allowed, but then the covariances with the free blocks must be zero. Elements like $f_i+r_j$ and $r_i+r_j$ are not allowed in $\RR$. Only elements of the form $f_i$ and $r_i$ are allowed. If an element has a fixed component, it must be completely fixed. Each element in $\RR$ can have only one of the elements in $\rr$, but multiple elements in $\RR$ can have the same $\rr$ element. + +The update equation is +\begin{equation}\label{eq:R.general} +\begin{split} +&\rr_{j+1} = +\bigg(\sum_{t=1}^T\DD_{t,r}^\top \DD_{t,r}\bigg)^{-1} \sum_{t=1}^T \DD_{t,r}^\top\vec\bigg(\TT_{t,{j+1}} + \bigg)\\ +&\quad\quad\quad\quad\vec(\RR_t)_{j+1} = \ff_{t,r} + \DD_{t,r} \rr_{j+1} +\end{split} +\end{equation} +The $\TT_{t,j+1}$ used at time step $t$ in equation \ref{eq:R.general} is the term that appears in the summation in the unconstrained update equation with no missing values (equation \ref{eq:R.update.unconstrained}): +\begin{equation} +\begin{split} +\TT_{t,j+1}=\Xi_t\bigg( + \hatOt - \hatYXt\ZZ_t^\top - \ZZ_t\hatYXt^\top + - \hatyt\aa_t^\top - \aa_t\hatyt^\top + + \ZZ_t\hatPt\ZZ_t^\top + \ZZ_t\hatxt\aa_t^\top + \aa_t\hatxt^\top\ZZ_t^\top + + \aa_t\aa_t^\top \bigg)\Xi_t^\top +\end{split} +\end{equation} +where $\Xi_t = (\HH_t^\top\HH_t)^{-1}\HH_t^\top$. + + +\section{Computing the expectations in the update equations}\label{sec:compexpectations} +For the update equations, we need to compute the expectations of $\XX_t$ and $\YY_t$ and their products conditioned on 1) the observed data $\YY(1)=\yy(1)$ and 2) the parameters at time $t$, $\Theta_j$. This section shows how to compute these expectations. Throughout the section, I will normally leave off the conditional $\YY(1)=\yy(1),\Theta_j$ when specifying an expectation. Thus any $\E[ ]$ appearing without its conditional is conditioned on $\YY(1)=\yy(1),\Theta_j$. However if there are additional or different conditions those will be shown. Also all expectations are over the joint distribution of $XY$ unless explicitly specified otherwise. + +Before commencing, we need some notation for the observed and unobserved elements of the data. +The $n \times 1$ vector $\yy_t$ denotes the potential observations at time $t$. If some elements of $\yy_t$ are missing, that means some elements are equal to NA (or some other missing values marker): +\begin{equation} +\yy_t=\begin{bmatrix} +y_1\\ +NA\\ +y_3\\ +y_4\\ +NA\\ +y_6 +\end{bmatrix} +\end{equation} +We denote the non-missing observations as $\yy_t(1)$ and the missing observations as $\yy_t(2)$. Similar to $\yy_t$, $\YY_t$ denotes all the $\YY$ random variables at time $t$. The $\YY_t$'s with an observation are $\YY_t(1)$ and those without an observation are denoted $\YY_t(2)$. + +Let $\OMG_t^{(1)}$ be the matrix that extracts only $\YY_t(1)$ from $\YY_t$ and $\OMG_t(2)$ be the matrix that extracts only $\YY_t(2)$. For the example above, +\begin{equation} +\begin{split} +&\YY_t(1)=\OMG_t^{(1)} \YY_t,\quad \OMG_t^{(1)} = +\begin{bmatrix} +1&0&0&0&0&0\\ +0&0&1&0&0&0\\ +0&0&0&1&0&0\\ +0&0&0&0&0&1\\ +\end{bmatrix}\\ +&\YY_t(2)=\OMG_t^{(2)} \YY_t,\quad \OMG_t^{(2)} = +\begin{bmatrix} +0&1&0&0&0&0\\ +0&0&0&0&1&0 +\end{bmatrix} +\end{split} +\end{equation} + +We will define another set of matrices that zeros out the missing or non-missing values. Let $\IIm_t^{(1)}$ denote a diagonal matrix that zeros out the $\YY_t(2)$ in $\YY_t$ and $\IIm_t^{(2)}$ denote a matrix that zeros out the $\YY_t(1)$ in $\YY_t$. For the example above, +\begin{equation} +\begin{split} +\IIm_t^{(1)} &= (\OMG_t^{(1)})^\top\OMG_t^{(1)} = +\begin{bmatrix} +1&0&0&0&0&0\\ +0&0&0&0&0&0\\ +0&0&1&0&0&0\\ +0&0&0&1&0&0\\ +0&0&0&0&0&0\\ +0&0&0&0&0&1\\ +\end{bmatrix}\quad\text{and}\\ +\IIm_t^{(2)} &= (\OMG_t^{(2)})^\top\OMG_t^{(2)} = +\begin{bmatrix} +0&0&0&0&0&0\\ +0&1&0&0&0&0\\ +0&0&0&0&0&0\\ +0&0&0&0&0&0\\ +0&0&0&0&1&0\\ +0&0&0&0&0&0\\ +\end{bmatrix}. +\end{split} +\end{equation} + +\subsection{Expectations involving only $\XX_t$}\label{sec:kalman.smoother} +The Kalman smoother provides the expectations involving only $\XX_t$ conditioned on all the data from time 1 to $T$. The Kalman filter provides the expectations involving only $\XX_t$ conditioned on all the data from time 1 to $t-1$ and from time 1 to $t$. For the EM algorithm, we only need the smoother output and the expected values conditioned on the data from time 1 to $T$ and these are denoted with special symbol of a tilde over a variable. + +To present the algorithm for the Kalman smoother and filter, the expectations conditioned on time 1 to $t$ are needed. The notation for this general case will be $\xx_t^t$ to denote $\E[\XX_t|\YY(1)_1^t=\yy(1)_1^t,\Theta]$ where $\yy(1)_1^t$ means the observed data (the $(1)$ part) from time 1 to $t$ (the superscript). This is fairly common notation for the conditional expectations in a Kalman filter and smoother and it is important to note that the superscript is not a power notation but the upper time extent. The the expectations used in the previous sections on the EM algorithm are the following: + +\begin{subequations}\label{eq:kfsoutput} +\begin{align} +&\hatxt \equiv \xx_t^T = \E[\XX_t|\YY(1)_1^T=\yy(1)_1^T,\Theta]\label{eq:xt}\\ +&\widetilde{\VV}_t \equiv \VV_t^T = \var[\XX_t|\YY(1)_1^T=\yy(1)_1^T,\Theta]\\ +&\widetilde{\VV}_{t,t-1} \equiv \VV_{t,t-1}^T = \cov[\XX_t,\XX_{t-1}|\YY(1)_1^T=\yy(1)_1^T,\Theta]\\ +&\text{From $\hatxt$, $\widetilde{\VV}_t$, and $\widetilde{\VV}_{t,t-1}$, we compute}\nonumber\\ +&\hatPt \equiv \PP_t^T =\E[\XX_t\XX_t^\top|\YY(1)_1^T=\yy(1)_1^T,\Theta]= \widetilde{\VV}_t + \hatxt\hatxt^\top\label{eq:Pt}\\ +&\hatPttm \equiv \PP_{t,t-1}^T =\E[\XX_{t}\XX_{t-1}^\top|\YY(1)_1^T=\yy(1)_1^T,\Theta]=\widetilde{\VV}_{t,t-1} +\hatxt\hatxtm^\top\label{eq:Ptt1} +\end{align} +\end{subequations} +The $\hatPt$ and $\hatPttm$ equations arise from the computational formula for variance (equation \ref{eq:comp.formula.variance}). When comparing the Kalman filter and smoother algorithms here to Shumway and Stoffer, keep in mind the difference in notation: $P_t^n$ in Shumway and Stoffer is $\VV_t^T$ here not $\PP_t^T$. + +In the presentation of the EM algorithm, $\YY(1)_1^T=\yy(1)_1^T,\Theta$ was dropped from the expectations to remove clutter; thus $E[\dots]$ always denoted the conditional expectation $\E[\dots|\YY(1)_1^T=\yy(1)_1^T,\Theta]$. To present the smoother algorithm, I present the other conditional expectations. +\begin{subequations}\label{eq:kffilteroutput} +\begin{align} +&\xx_t^{t-1} = \E[\XX_t|\YY(1)_1^{t-1}=\yy(1)_1^{t-1},\Theta]\\ +&\xx_t^t = \E[\XX_t|\YY(1)_1^t=\yy(1)_1^t,\Theta]\\ +&\VV_t^{t-1} = \var[\XX_t|\YY(1)_1^{t-1}=\yy(1)_1^{t-1},\Theta]\\ +&\VV_t^t = \var[\XX_t|\YY(1)_1^t=\yy(1)_1^t,\Theta]\\ +\end{align} +\end{subequations} + +The first part of the Kalman smoother algorithm is the Kalman filter which gives the expectation at time $t$ conditioned on the data up to time $t$. The following the filter as shown in \citep[section 6.2, p. 331]{ShumwayStoffer2006}, although the notation is a little different. The recursion starts at time $t=1$ and repeats until $t=T$. +\begin{subequations}\label{eq:kffilter} +\begin{align} +&\xx_t^{t-1}=\BB_t\xx_{t-1}^{t-1}+\uu_t\label{eq:xtt1}\\ +&\VV_t^{t-1}=\BB_t\VV_{t-1}^{t-1}\BB_t^\top + \GG_t\QQ_t\GG_t^\top\label{eq:Vtt1}\\ +&\xx_t^t=\xx_t^{t-1}+\KK_t(\yy_t-\ZZ_t\xx_t^{t-1}-\aa_t)\label{eq:xtt}\\ +&\VV_t^t=(\II_m-\KK_t\ZZ_t)\VV_t^{t-1}\label{eq:Vtt}\\ +&\KK_t=\VV_t^{t-1}\ZZ_t^\top(\ZZ_t\VV_t^{t-1}\ZZ_t^\top+\HH_t\RR_t\HH_t^\top)^{-1}\label{eq:Kt} +\end{align} +\end{subequations} +If the initial value is defined at $t=0$, then the filter starts at $t=1$ with the first two equations with $\xx_{0}^{0} \equiv \xixi$ and $\VV_{0}^{}\equiv\LAM$. If the initial value is defined at $t=1$, then the filter starts at $t=1$ with the third and fourth equations with $\xx_{1}^{0}\equiv\xixi$ and $\VV_{1}^{0}\equiv\LAM$. + + +The Kalman smoother and lag-1 covariance smoother compute the expectations conditioned on all the data, 1 to $T$: +\begin{subequations}\label{eq:kfsmoother} +\begin{align} +&\xx_{t-1}^T=\xx_{t-1}^{t-1}+\JJ_{t-1}(\xx_t^T-\xx_t^{t-1})\label{eq:xt1T}\\ +&\VV_{t-1}^T=\VV_{t-1}^{t-1}+\JJ_{t-1}(\VV_t^T-\VV_t^{t-1})\JJ_{t-1}^\top\label{eq:Vt1T}\\ +&\JJ_{t-1}=\VV_{t-1}^{t-1}\BB_t^\top(\VV_t^{t-1})^{-1}\label{eq:Jt}\\ +\\ +&\VV_{T,T-1}^T=(\II-\KK_T\ZZ_T)\BB_T\VV_{T-1}^{T-1}\label{eq:VTT1T}\\ +&\VV_{t-1,t-2}^T=\VV_{t-1}^{t-1}\JJ_{t-2}^\top + \JJ_{t-1}((\VV_{t,t-1}^T-\BB_t\VV_{t-1}^{t-1}))\JJ_{t-2}^\top\label{eq:Vtt1T} +\end{align} +\end{subequations} + +The classic Kalman smoother is an algorithm to compute these expectations conditioned on no missing values in $\yy$. However, the algorithm can be easily modified to give the expected values of $\XX$ conditioned on the incomplete data, $\YY(1)=\yy(1)$ \citep[section 6.4, eqn 6.78, p. 348]{ShumwayStoffer2006}. +In this case, the usual filter and smoother equations are used with the following modifications to the parameters and data used in the equations. If the $i$-th element of $\yy_t$ is missing, zero out the $i$-th rows in $\yy_t$, $\aa$ and $\ZZ$. Thus if the 2nd and 5th elements of $\yy_t$ are missing, +\begin{equation}\label{eq:yaZ.miss} +\yy_t^*=\begin{bmatrix} +y_1\\ +0\\ +y_3\\ +y_4\\ +0\\ +y_6\\ +\end{bmatrix}, \quad +\aa_t^*=\begin{bmatrix} +a_1\\ +0\\ +a_3\\ +a_4\\ +0\\ +a_6\\ +\end{bmatrix}, \quad +\ZZ_t^*=\begin{bmatrix} +z_{1,1}&z_{1,2}&...\\ +0&0&...\\ +z_{3,1}&z_{3,2}&...\\ +z_{4,1}&z_{4,2}&...\\ +0&0&...\\ +z_{6,1}&z_{6,2}&...\\ +\end{bmatrix} +\end{equation} + +The $\RR_t$ parameter used in the filter equations is also modified. We need to zero out the covariances between the non-missing, $\yy_t(1)$, and missing, $\yy_t(2)$, data. For the example above, if +\begin{equation} +\RR_t = \Rb_t\RR\Rb_t^\top = \begin{bmatrix} +r_{1,1}&r_{1,2}&r_{1,3}&r_{1,4}&r_{1,5}&r_{1,6}\\ +r_{2,1}&r_{2,2}&r_{2,3}&r_{2,4}&r_{2,5}&r_{2,6}\\ +r_{3,1}&r_{3,2}&r_{3,3}&r_{3,4}&r_{3,5}&r_{3,6}\\ +r_{4,1}&r_{4,2}&r_{4,3}&r_{4,4}&r_{4,5}&r_{4,6}\\ +r_{5,1}&r_{5,2}&r_{5,3}&r_{5,4}&r_{5,5}&r_{5,6}\\ +r_{6,1}&r_{6,2}&r_{6,3}&r_{6,4}&r_{6,5}&r_{6,6}\\ +\end{bmatrix} +\end{equation} +then the $\RR_t$ we use at time $t$, will have zero covariances between the non-missing elements 1,3,4,6 and the missing elements 2,5: +\begin{equation} +\RR_t^* + = \begin{bmatrix} +r_{1,1}&0&r_{1,3}&r_{1,4}&0&r_{1,6}\\ +0&r_{2,2}&0&0&r_{2,5}&0\\ +r_{3,1}&0&r_{3,3}&r_{3,4}&0&r_{3,6}\\ +r_{4,1}&0&r_{4,3}&r_{4,4}&0&r_{4,6}\\ +0&r_{5,2}&0&0&r_{5,5}&0\\ +r_{6,1}&0&r_{6,3}&r_{6,4}&0&r_{6,6}\\ +\end{bmatrix} +\end{equation} + +Thus, the data and parameters used in the filter and smoother equations are +\begin{equation} +\begin{split} +\yy_t^*&=\IIm_t^{(1)}\yy_t\\ +\aa_t^*&=\IIm_t^{(1)}\aa_t\\ +\ZZ_t^*&=\IIm_t^{(1)}\ZZ_t\\ +\RR_t^* &= \IIm_t^{(1)}\RR_t\IIm_t^{(1)} + \IIm_t^{(2)}\RR_t\II_t^{(2)} +\end{split} +\end{equation} +$\aa_t^*$, $\ZZ_t^*$ and $\RR_t^*$ only are used in the Kalman filter and smoother. They are not used in the EM update equations. However when coding the algorithm, it is convenient to replace the NAs (or whatever the missing values placeholder is) in $\yy_t$ with zero so that there is not a problem with NAs appearing in the computations. + +\subsection{Expectations involving $\YY_t$}\label{sec:exp.Y} +First, replace the missing values in $\yy_t$ with zeros\footnote{The only reason is so that in your computer code, if you use NA or NaN as the missing value marker, NA-NA=0 and 0*NA=0 rather than NA.} and then the expectations are given by the following equations. The derivations for these equations are given in the subsections to follow. +\begin{subequations}\label{eq:Yt.exp} +\begin{align} +\hatyt &= \E[\YY_t]=\yy_t-\IR_t(\yy_t-\ZZ_t\hatxt-\aa_t)\label{eq:hatyt}\\ +\hatOt &= \E[\YY_t\YY_t^\top]=\IIm_t^{(2)}(\IR_t\HH_t\RR_t\HH_t^\top + \IR_t\ZZ_t\hatVt\ZZ_t^\top\IR_t^\top)\IIm_t^{(2)} + \hatyt\hatyt^\top \label{eq:hatOt}\\ +\hatYXt&= \E[\YY_t\XX_t^\top] = \IR_t\ZZ_t\hatVt + \hatyt\hatxt^\top \label{eq:hatyxttm}\\ +\hatYXttm&= \E[\YY_t\XX_{t-1}^\top] = \IR_t\ZZ_t\hatVttm + \hatyt\hatxtm^\top \label{eq:hatyxt}\\ +\text{where }\IR_t &= \II-\HH_t\RR_t\HH_t^\top(\OMG_t^{(1)})^\top(\OMG_t^{(1)}\HH_t\RR_t\HH_t^\top(\OMG_t^{(1)})^\top)^{-1}\OMG_t^{(1)}\label{eq.IRt}\\ +\text{and }\IIm_t^{(2)}&=(\OMG_t^{(2)})^\top\OMG_t^{(2)} +\label{eq:IRt} +\end{align} +\end{subequations} +If $\yy_t$ is all missing, $\OMG_t^{(1)}$ is a $0 \times n$ matrix, and we define $(\OMG_t^{(1)})^\top(\OMG_t^{(1)}\RR(\OMG_t^{(1)})^\top)^{-1}\OMG_t^{(1)}$ to be a $n \times n$ matrix of zeros. If $\RR_t$ is diagonal, then $\RR_t(\OMG_t^{(1)})^\top(\OMG_t^{(1)}\RR_t(\OMG_t^{(1)})^\top)^{-1}\OMG_t^{(1)}=\IIm_t^{(1)}$ and $\IR_t=\IIm_t^{(2)}$. This will mean that in $\hatyt$ the $\yy_t(2)$ are given by $\ZZ_t\hatxt+\aa_t$, as expected when $\yy_t(1)$ and $\yy_t(2)$ are independent. + +If there are zeros on the diagonal of $\RR_t$ (section \ref{sec:degenerate}), the definition of $\IR_t$ is changed slightly from that shown in equation \ref{eq:Yt.exp}. Let $\mho_t^{(r)}$ be the matrix that extracts the elements of $\yy_t$ where $\yy_t(i)$ is not missing AND $\HH_t\RR_t(i,i)\HH_t^\top$ is not zero. Then +\begin{equation} +\IR_t = \II-\HH_t\RR_t\HH_t^\top(\mho_t^{(r)})^\top +(\mho_t^{(r)}\HH_t\RR_t\HH_t^\top(\mho_t^{(r)})^\top)^{-1}\mho_t^{(r)} +\label{eq:IRt.degen} +\end{equation} + +\subsection{Derivation of the expected value of $\YY_t$} +In the MARSS equation, the observation errors are denoted $\HH_t\vv_t$. $\vv_t$ is a specific realization from a random variable $\VV_t$ that is distributed multivariate normal with mean 0 and variance $\RR_t$. $\VV_t$ is not to be confused with $\widetilde{\VV}_t$ in equation \ref{eq:kfsoutput}, which is unrelated\footnote{I apologize for the confusing notation, but $\widetilde{\VV}_t$ and $\vv_t$ are somewhat standard in the MARSS literature and it is standard to use a capital letter to refer to a random variable. Thus $\VV_t$ would be the standard way to refer to the random variable associated with $\vv_t$.} to $\VV_t$. If there are no missing values, then we condition on $\YY_t=\yy_t$ and +\begin{equation} +\begin{split} +\E[\YY_t|\YY(1)=\yy(1)] = \E[\YY_t|\YY_t=\yy_t] = \yy_t\\ +\end{split} +\end{equation} +If there are no observed values, then +\begin{equation} +\begin{split} +\E[\YY_t|\YY(1)=\yy(1)]=\E[\YY_t] = \E[\ZZ_t\XX_t+\aa_t+\VV_t] = \ZZ_t\hatxt+\aa_t +\end{split} +\end{equation} +If only some of the $\YY_t$ are observed, then we use the conditional probability for a multivariate normal distribution (here shown for a bivariate case): +\begin{equation}\label{eq:cond.multi.normal} +\text{If, }\begin{bmatrix} +Y_1\\ +Y_2\end{bmatrix} +\sim +\MVN\biggl( \begin{bmatrix} +\mu_1\\ +\mu_2 +\end{bmatrix}, \begin{bmatrix} +\Sigma_{11}&\Sigma_{12}\\ +\Sigma_{21}&\Sigma_{22}\end{bmatrix}\biggr) +\end{equation} +Then, +\begin{equation} +\begin{split} +(Y_1|Y_1=y_1) &=y_1,\quad\text{and}\\ +(Y_2|Y_1=y_1) &\sim \MVN(\bar{\mu},\bar{\Sigma}),\quad\text{where}\\ +\bar{\mu}&= \mu_2+\Sigma_{21}\Sigma_{11}^{-1}(y_1-\mu_1)\\ +\bar{\Sigma} &= \Sigma_{22}-\Sigma_{21}\Sigma_{11}^{-1}\Sigma_{12} +\end{split} +\end{equation} + +From this property, we can write down the distribution of $\YY_t$ conditioned on $\YY_t(1)=\yy_t(1)$ and $\XX_t=\xx_t$: +\begin{equation} +\begin{split} +\begin{bmatrix} +\YY_t(1)|\XX_t=\xx_t\\ +\YY_t(2)|\XX_t=\xx_t +\end{bmatrix} +&\sim \\ +&\MVN\biggl( \begin{bmatrix} +\OMG_t^{(1)}(\ZZ_t\xx_t+\aa_t)\\ +\OMG_t^{(2)}(\ZZ_t\xx_t+\aa_t) +\end{bmatrix}, \begin{bmatrix} +(\HH_t\RR_t\HH_t^\top)_{11}&(\HH_t\RR_t\HH_t^\top)_{12}\\ +(\HH_t\RR_t\HH_t^\top)_{21}&(\HH_t\RR_t\HH_t^\top)_{22} +\end{bmatrix}\biggr) +\end{split} +\end{equation} +Thus, +\begin{equation}\label{eq:varY} +\begin{split} +(\YY_t(1)&|\YY_t(1)=\yy_t(1),\XX_t=\xx_t) = \OMG_t^{(1)}\yy_t\quad\text{and}\\ +(\YY_t(2)&|\YY_t(1)=\yy_t(1),\XX_t=\xx_t) \sim \MVN(\ddot{\mu},\ddot{\Sigma})\quad\text{where}\\ +\ddot{\mu}&= \OMG_t^{(2)}(\ZZ_t\xx_t+\aa_t)+\ddot{\RR}_{t,21}(\ddot{\RR}_{t,11})^{-1}\OMG_t^{(1)}(\yy_t-\ZZ_t\xx_t-\aa_t)\\ +\ddot{\Sigma}&= \ddot{\RR}_{t,22} - \ddot{\RR}_{t,21}(\ddot{\RR}_{t,11})^{-1}\ddot{\RR}_{t,12} \\ +\ddot{\RR}_t&= \HH_t\RR_t\HH_t^\top +\end{split} +\end{equation} + +Note that since we are conditioning on $\XX_t=\xx_t$, we can replace $\YY$ (all data from time 1 to $T$) by $\YY_t$ (data at time $t$) in the conditional: +$$\E[\YY_t|\YY(1)=\yy(1),\XX_t=\xx_t]=\E[\YY_t|\YY_t(1)=\yy_t(1),\XX_t=\xx_t].$$ +From this and the distributions in equation \ref{eq:varY}, we can write down $\hatyt=\E[\YY_t|\YY(1)=\yy(1),\Theta_j]$: +\begin{equation} +\begin{split} +\hatyt&=\E_{XY}[\YY_t|\YY(1)=\yy(1)]\\ +&=\int_{\xx_t}\int_{\yy_t}\yy_t f(\yy_t|\yy_t(1),\xx_t)d\yy_t f(\xx_t)d\xx_t \\ +&=\E_X[\E_{Y|x}[\YY_t|\YY_t(1)=\yy_t(1),\XX_t=\xx_t]]\\ +&=\E_X[\yy_t-\IR_t(\yy_t-\ZZ_t\XX_t-\aa_t)]\\ +&=\yy_t-\IR_t(\yy_t-\ZZ_t\hatxt-\aa_t)\\ +\text{where }\IR_t &= \II-\ddot{\RR}_t(\OMG_t^{(1)})^\top(\ddot{\RR}_{t,11})^{-1}\OMG_t^{(1)} +\end{split} +\end{equation} +$(\OMG_t^{(1)})^\top(\ddot{\RR}_{t,11})^{-1}\OMG_t^{(1)}$ is a $n \times n$ matrix with 0s in the non-(11) positions. If the $k$-th element of $\yy_t$ is observed, then $k$-th row and column of $\IR_t$ will be zero. +Thus if there are no missing values at time $t$, $\IR_t=\II-\II=0$. If there are no observed values at time $t$, $\IR_t$ will reduce to $\II$. + +\subsection{Derivation of the expected value of $\YY_t\YY_t^\top$} +The following outlines a\footnote{The following derivations are painfully ugly. There are surely more elegant ways to do this; at least, there must be more elegant notations.} derivation. If there are no missing values, then we condition on $\YY_t=\yy_t$ and +\begin{equation} +\begin{split} +\E[\YY_t &\YY_t^\top|\YY(1)=\yy(1)] = \E[\YY_t \YY_t^\top|\YY_t=\yy_t] = \yy_t\yy_t^\top. +\end{split} +\end{equation} +If there are no observed values at time $t$, then +\begin{equation} +\begin{split} +\E[\YY_t &\YY_t^\top]\\ +&=\var[\ZZ_t\XX_t+\aa_t+\HH_t\VV_t]+\E[\ZZ_t\XX_t+\aa_t+\HH_t\VV_t]\E[\ZZ_t\XX_t+\aa_t+\HH_t\VV_t]^\top\\ +&=\var[\VV_t]+\var[\ZZ_t\XX_t]+(\E[\ZZ_t\XX_t+\aa_t]+\E[\HH_t\VV_t])(\E[\ZZ_t\XX_t+\aa_t]+\E[\HH_t\VV_t])^\top\\ +&=\ddot{\RR}_t+\ZZ_t\hatVt\ZZ_t^\top + (\ZZ_t\hatxt+\aa_t)(\ZZ_t\hatxt+\aa_t)^\top +\end{split} +\end{equation} + +When only some of the $\YY_t$ are observed, we use again the conditional probability of a multivariate normal (equation \ref{eq:cond.multi.normal}). From this property, we know that +\begin{equation}\label{eq:var.Y.cond.x} +\begin{split} +&\var_{Y|x}[\YY_t(2)|\YY_t(1)=\yy_t(1),\XX_t=\xx_t]=\ddot{\RR}_{t,22} - \ddot{\RR}_{t,21}(\ddot{\RR}_{t,11})^{-1}\ddot{\RR}_{t,12},\\ +&\var_{Y|x}[\YY_t(1)|\YY_t(1)=\yy_t(1),\XX_t=\xx_t]=0\\ +\text{and }&\cov_{Y|x}[\YY_t(1),\YY_t(2)|\YY_t(1)=\yy_t(1),\XX_t=\xx_t]=0\\ +\\ +\text{Thus }&\var_{Y|x}[\YY_t|\YY_t(1)=\yy_t(1),\XX_t=\xx_t]\\ +&=(\OMG_t^{(2)})^\top(\ddot{\RR}_{t,22} - \ddot{\RR}_{t,21}(\ddot{\RR}_{t,11})^{-1}\ddot{\RR}_{t,12})\OMG_t^{(2)}\\ +&=(\OMG_t^{(2)})^\top(\OMG_t^{(2)}\ddot{\RR}_t(\OMG_t^{(2)})^\top - \OMG_t^{(2)}\ddot{\RR}_t(\OMG_t^{(1)})^\top(\ddot{\RR}_{t,11})^{-1}\OMG_t^{(1)}\ddot{\RR}_t(\OMG_t^{(2)})^\top)\OMG_t^{(2)}\\ +&=\IIm_t^{(2)}(\ddot{\RR}_t-\ddot{\RR}_t(\OMG_t^{(1)})^\top(\ddot{\RR}_{t,11})^{-1}\OMG_t^{(1)}\ddot{\RR}_t)\IIm_t^{(2)}\\ +&=\IIm_t^{(2)}\IR_t\ddot{\RR}_t\IIm_t^{(2)} +\end{split} +\end{equation} +The $\IIm_t^{(2)}$ bracketing both sides is zero-ing out the rows and columns corresponding to the $\yy_t(1)$ values. + +Now we can compute the $\E_{XY}[\YY_t\YY_t^\top|\YY(1)=\yy(1)]$. The subscripts are added to the $\E$ to emphasize that we are breaking the multivariate expectation into an inner and outer expectation. +\begin{equation} +\begin{split} +\hatOt&=\E_{XY}[\YY_t\YY_t^\top|\YY(1)=\yy(1)]=\E_X[\E_{Y|x}[\YY_t\YY_t^\top|\YY_t(1)=\yy_t(1),\XX_t=\xx_t]]\\ +&=\E_X\bigl[\var_{Y|x}[\YY_t|\YY_t(1)=\yy_t(1),\XX_t=\xx_t] \\ +&\quad + \E_{Y|x}[\YY_t|\YY_t(1)=\yy_t(1),\XX_t=\xx_t] +\E_{Y|x}[\YY_t|\YY_t(1)=\yy_t(1),\XX_t=\xx_t]^\top\bigr]\\ +&=\E_X[\IIm_t^{(2)}\IR_t\ddot{\RR}_t\IIm_t^{(2)}] +\E_X[(\yy_t-\IR_t(\yy_t-\ZZ_t\XX_t-\aa_t))(\yy_t-\IR_t(\yy_t-\ZZ_t\XX_t-\aa_t))^\top]\\ +&=\IIm_t^{(2)}\IR_t\ddot{\RR}_t\IIm_t^{(2)} + \var_X\bigl[\yy_t-\IR_t(\yy_t-\ZZ_t\XX_t-\aa_t)\bigr]\\ &\quad +\E_X[\yy_t-\IR_t(\yy_t-\ZZ_t\XX_t-\aa_t)]\E_X[\yy_t-\IR_t(\yy_t-\ZZ_t\XX_t-\aa_t)]^\top\\ +&=\IIm_t^{(2)}\IR_t\ddot{\RR}_t\IIm_t^{(2)} + \IIm_t^{(2)}\IR_t\ZZ_t\hatVt\ZZ_t^\top\IR_t^\top\IIm_t^{(2)} + \hatyt\hatyt^\top \\ +\end{split} +\end{equation} +Thus, +\begin{equation} +\hatOt=\IIm_t^{(2)}(\IR_t\ddot{\RR}_t + \IR_t\ZZ_t\hatVt\ZZ_t^\top\IR_t^\top)\IIm_t^{(2)} + \hatyt\hatyt^\top \\ +\end{equation} +and +\begin{equation}\label{eq:cond.var.Y} +\var_{XY}[\YY_t|\YY_t(1)=\yy_t(1)] = \IIm_t^{(2)}(\IR_t\ddot{\RR}_t + \IR_t\ZZ_t\hatVt\ZZ_t^\top\IR_t^\top)\IIm_t^{(2)} +\end{equation} + +The variance can be decomposed into two parts via the law of total variance: +\begin{equation}\label{eq:law.total.var.Y} +\var_{XY}[\YY_t|\YY_t(1)=\yy_t(1)] = \E_X[\var_{Y|x}[\YY_t|\YY_t(1)=\yy_t(1),\XX_t]] + +\var_X[\E_{Y|x}[\YY_t|\YY_t(1)=\yy_t(1),\XX_t]] +\end{equation} +Using equations \ref{eq:law.total.var.Y}, \ref{eq:var.Y.cond.x}, and \ref{eq:cond.var.Y}, we can solve for the variance (over $\xx_t$) of the expected value of $\YY_t|\YY_t(1)=\yy_t(1)$ conditioned on $\XX_t=\xx_t$: +\begin{equation} +\begin{split} +\var_X[\E_{Y|x}[\YY_t|\YY_t(1)=\yy_t(1),\XX_t]] & \\ +&= \var_{XY}[\YY_t|\YY_t(1)=\yy_t(1)] - \E_X[\var_{Y|x}[\YY_t|\YY_t(1)=\yy_t(1),\XX_t]] \\ +&= \IIm_t^{(2)}(\IR_t\ddot{\RR}_t + \IR_t\ZZ_t\hatVt\ZZ_t^\top\IR_t^\top)\IIm_t^{(2)} - \IIm_t^{(2)}\IR_t\ddot{\RR}_t\IIm_t^{(2)} \\ +&= \IIm_t^{(2)}\IR_t\ZZ_t\hatVt\ZZ_t^\top\IR_t^\top\IIm_t^{(2)} +\end{split} +\end{equation} +Though this variance is not used in the EM algoritm, it gives us the confidence intervals for the expected value of missing data while the variance of $\YY_t|\YY_t(1)=\yy_t(1)$ gives us the prediction intervals for missing data. + +\subsection{Derivation of the expected value of $\YY_t\XX_t^\top$} +If there are no missing values, then we condition on $\YY_t=\yy_t$ and +\begin{equation} +\begin{split} +\E[\YY_t \XX_t^\top|\YY(1)=\yy(1)] = \yy_t\E[\XX_t^\top]=\yy_t\hatxt^\top +\end{split} +\end{equation} +If there are no observed values at time $t$, then +\begin{equation} +\begin{split} +\E[\YY_t &\XX_t^\top|\YY(1)=\yy(1)]\\ +&=\E[(\ZZ_t\XX_t+\aa_t+\VV_t)\XX_t^\top]\\ +&=\E[\ZZ_t\XX_t\XX_t^\top+\aa_t\XX_t^\top+\VV_t\XX_t^\top]\\ +&=\ZZ_t\hatPt+\aa_t\hatxt^\top+\cov[\VV_t,\XX_t]+\E[\VV_t]\E[\XX_t]^\top\\ +&=\ZZ_t\hatPt+\aa_t\hatxt^\top +\end{split} +\end{equation} +Note that $\VV_t$ and $\XX_t$ are independent (equation \ref{eq:MARSS}). $\E[\VV_t]=0$ and $\cov[\VV_t,\XX_t]=0$. + +Now we can compute the $\E_{XY}[\YY_t\XX_t^\top|\YY_(1)=\yy(1)]$. +\begin{equation} +\begin{split} +\hatYXt&=\E_{XY}[\YY_t\XX_t^\top|\YY(1)=\yy(1)]\\ +&=\cov[\YY_t,\XX_t|\YY_t(1)=\yy_t(1)]+\E_{XY}[\YY_t|\YY(1)=\yy(1)]\E_{XY}[\XX_t^\top|\YY(1)=\yy(1)]^\top\\ +&=\cov[\yy_t-\IR_t(\yy_t-\ZZ_t\XX_t-\aa_t)+\VV^*_t,\XX_t]+\hatyt\hatxt^\top \\ +&=\cov[\yy_t,\XX_t]-\cov[\IR_t\yy_t,\XX_t]+\cov[\IR_t\ZZ_t\XX_t,\XX_t] +\cov[\IR_t\aa_t,\XX_t]\\ +&\quad + \cov[\VV^*_t,\XX_t]+\hatyt\hatxt^\top \\ +&=0 - 0 + \IR_t\ZZ_t\hatVt + 0 + 0 + \hatyt\hatxt^\top \\ +&= \IR_t\ZZ_t\hatVt + \hatyt\hatxt^\top +\end{split} +\end{equation} +This uses the computational formula for covariance: $\E[\YY\XX^\top]=\cov[\YY,\XX]+\E[\YY]\E[\XX]^\top$. $\VV^*_t$ is a random variable with mean 0 and variance $\ddot{\RR}_{t,22} - \ddot{\RR}_{t,21}(\ddot{\RR}_{t,11})^{-1}\ddot{\RR}_{t,12}$ from equation \ref{eq:varY}. $\VV^*_t$ and $\XX_t$ are independent of each other, thus $\cov[\VV^*_t,\XX_t^\top]=0$. + +\subsection{Derivation of the expected value of $\YY_t\XX_{t-1}^\top$} +The derivation of $\E[\YY_t\XX_{t-1}^\top]$ is similar to the derivation of $\E[\YY_t\XX_{t-1}^\top]$: +\begin{equation} +\begin{split} +\hatYXt&=\E_{XY}[\YY_t\XX_{t-1}^\top|\YY(1)=\yy(1)]\\ +&=\cov[\YY_t,\XX_{t-1}|\YY_t(1)=\yy_t(1)] + \E_{XY}[\YY_t|\YY(1)=\yy(1)]\E_{XY}[\XX_{t-1}^\top|\YY(1)=\yy(1)]^\top\\ +&=\cov[\yy_t-\IR_t(\yy_t-\ZZ_t\XX_t-\aa_t)+\VV^*_t,\XX_{t-1}]+\hatyt\hatxtm^\top \\ +&=\cov[\yy_t,\XX_{t-1}]-\cov[\IR_t\yy_t,\XX_{t-1}]+\cov[\IR_t\ZZ_t\XX_t,\XX_{t-1}] \\ +&\quad +\cov[\IR_t\aa_t,\XX_{t-1}] + \cov[\VV^*_t,\XX_{t-1}]+\hatyt\hatxtm^\top \\ +&=0 - 0 + \IR_t\ZZ_t\hatVttm + 0 + 0 + \hatyt\hatxtm^\top \\ +&= \IR_t\ZZ_t\hatVttm + \hatyt\hatxtm^\top +\end{split} +\end{equation} + +\section{Degenerate variance models}\label{sec:degenerate} +It is possible that the model has deterministic and stochastic elements; mathematically this means that either $\GG_t$, $\HH_t$ or $\FF$ have all zero rows, and this means that some of the observation or state processes are deterministic\footnote{Deterministic means that given the parameters, the states or observation processes have known values and are not random variables.} Such models often arise when a MAR-p is put into MARSS-1 form. Assuming the model is solvable (one solution and not over-determined), we can modify the Kalman smoother and EM algorithm to handle models with deterministic elements. + +The motivation behind the degenerate variance modification is that we want to use one set of EM update equations for all models in the MARSS class---regardless of whether they are partially or fully degenerate\footnote{Degenerate means zeros on the diagonal of the variance-covariance matrix, which appears as a zero row in $\GG_t$, $\HH_t$ or $\FF$.}. The difficulties arise in getting the $\uu$ and $\xixi$ update equations. If we were to fix these or make $\xixi$ stochastic (a fixed mean and fixed variance), most of the trouble in this section could be avoided. However, fixing $\xixi$ or making it stochastic is putting a prior on it and placing a prior on the variance-covariance structure of $\xixi$ that conflicts logically with the model is often both unavoidable (since the correct variance-covariance structure depends on the parameters you are trying to estimate) and disastrous to one's estimation although the problem is often difficult to detect especially with long time series. Many papers have commented on this subtle problem. So, we want to be able to estimate $\xixi$ so we do not have to specify $\LAM$ (because we remove it from the model altogether). Note that in a univariate $\xx$ model (one state), $\LAM$ is just a variance so we do not run into this trouble. The problems arise when $\xx$ is multivariate (>1 state) and then we have to deal with the variance-covariance structure of the initial states. + +\subsection{Rewriting the state and observation models for degenerate variance systems} +Let's start with an example where $y_{2,t}$ (2nd $y$) has no added observation error. +\begin{equation} +\RR_t=\begin{bmatrix} +1&0.2\\ +0.2&1 +\end{bmatrix}\\ +\text{ and } +\HH_t=\begin{bmatrix} +1&0\\ +0&0\\ +0&1 +\end{bmatrix} +\end{equation} +Let $\OMG_{t,r}^+$ be a $p \times n$ matrix that extracts the $p$ non-zero rows from $\HH_t$. The diagonal matrix $(\OMG_{t,r}^+)^\top\OMG_{t,r}^+ \equiv \II_{t,r}^+$ is a diagonal matrix that can zero out the $\HH_t$ zero rows in any $n$ row matrix. + +\begin{equation} +\begin{split} +\OMG_{t,r}^+ &= +\begin{bmatrix} +1&0&0\\ +0&0&1 +\end{bmatrix}\quad\quad +\II_{t,r}^+ = (\OMG_{t,r}^+)^\top\OMG_{t,r}^+ = +\begin{bmatrix} +1&0&0\\ +0&0&0\\ +0&0&1 +\end{bmatrix} +\\ +\yy_t^+&=\OMG_{t,r}^+ \yy_t = +\begin{bmatrix} +y_1\\ +y_3 +\end{bmatrix}_t\quad\quad +\yy_t^+=\II_{t,r}^+ \yy_t = \begin{bmatrix} +y_1\\ +0\\ +y_3 +\end{bmatrix}_t +\end{split} +\end{equation} + +Let $\OMG_{t,r}^{(0)}$ be a $(n-p) \times n$ matrix that extracts the $n-p$ zero rows from $\HH_t$. For the example above, +\begin{equation} +\begin{split} +\OMG_{t,r}^{(0)} &= +\begin{bmatrix} +0&1&0\\ +\end{bmatrix}\quad\quad +\II_{t,r}^{(0)} = (\OMG_{t,r}^{(0)})^\top\OMG_{t,r}^{(0)} = +\begin{bmatrix} +0&0&0\\ +0&1&0\\ +0&0&0 +\end{bmatrix} +\\ +\yy_t^{(0)}&=\OMG_{t,r}^{(0)} \yy_t = \begin{bmatrix} +y_3 +\end{bmatrix}_t\quad\quad +\yy_t^{(0)}=\II_{t,r}^{(0)} \yy_t = \begin{bmatrix} +0\\ +y_2\\ +0 +\end{bmatrix}_t +\end{split} +\end{equation} +Similarly, $\OMG_{t,q}^+$ extracts the states associated with the non-zero rows in $\GG_t$ and $\OMG_{t,q}^{(0)}$ extracts the zero rows. $\II_{t,q}^+$ and $\II_{t,q}^{(0)}$ are defined similarly. + +Using these definitions, we can rewrite the state process part of the MARSS model by separating out the deterministic parts. $\xx_t^{(0)}$ is the rows of $\xx_t$ that are associated with all-zero rows of $\GG_t$, that means there is no $w_t$ in the $x_t$ equation for those rows\footnote{$x_{t,i}=\BB_{t,i}\xx_{t-1} + \uu_{t,i}$ where the $i$ subscript means $i$-th row.} +\begin{equation}\label{eq:degen.model.x1} +\begin{split} +\xx_t^{(0)}&=\OMG_{t,q}^{(0)}\xx_t=\OMG_{t,q}^{(0)}(\BB_t\xx_{t-1} + \uu_t)\\ +\xx_t^+&=\OMG_{t,q}^+\xx_t=\OMG_{t,q}^+(\BB_t\xx_{t-1} + \uu_t + \GG_t\ww_t)\\ +\ww_t^+ &\sim \MVN(0,\QQ_t) +\end{split} +\end{equation} +Similarly, we can rewrite the observation process part of the MARSS model by separating out the parts with no observation error: +\begin{equation}\label{eq:degen.model.y1} +\begin{split} +\yy_t^{(0)}&=\OMG_{t,r}^{(0)}\yy_t=\OMG_{t,r}^{(0)}(\ZZ_t\xx_t + \aa_t) \\ +&=\OMG_{t,r}^{(0)}(\ZZ_t\II_{t,q}^+\xx_t + \ZZ_t\II_{t,q}^{(0)}\xx_t + \aa_t)\\ +\yy_t^+&=\OMG_{t,r}^+\yy_t=\OMG_{t,r}^+(\ZZ_t\xx_t + \aa_t + \HH_t\vv_t)\\ +&=\OMG_{t,r}^+(\ZZ_t\II_{t,q}^+\xx_t + \ZZ_t\II_{t,q}^{(0)}\xx_t + \aa_t+\HH_t\vv_t)\\ +\vv_t^+ &\sim \MVN(0,\RR_t) +\end{split} +\end{equation} + +In order for this to be solvable using an EM algorithm with the Kalman filter, we require that no estimated $\BB$ or $\uu$ elements appear in the equation for $\yy_t^{(0)}$ (via $x_t$ in that equation). Since the $\yy_t^{(0)}$ do not appear in the likelihood function (since $\HH_t^{(0)}=0$), $\yy_t^{(0)}$ would not affect the estimate for the parameters appearing in the $\yy_t^{(0)}$ equation. This translates to the following constraints, $(1_{1 \times m} \otimes \OMG_{t,r}^{(0)}\ZZ_t\II_{t,q}^{(0)})\DD_{t,b}$ is all zeros and $\OMG_{t,r}^{(0)}\ZZ_t\II_{t,q}^{(0)}\DD_u$ is all zeros. +Also notice that $\OMG_{t,r}^{(0)}\ZZ_t$ and $\OMG_{t,r}^{(0)}\aa_t$ appear in the $\yy^{(0)}$ equation and not in the $\yy^+$ equation. This means that $\OMG_{t,r}^{(0)}\ZZ_t$ and $\OMG_{t,r}^{(0)}\aa_t$ must be only fixed terms. + +In summary, the degenerate model can be reduced to the following (with $\xx_0$ not specified yet). +\begin{equation}\label{eq:degen.model2} +\begin{split} +\xx_t^{(0)}&=\BB_t^{(0)}\xx_{t-1} + \uu_t^{(0)}\\ +\xx_t^+&=\BB_t^+\xx_{t-1} + \uu_t^+ + \GG_t^+\ww_t\\ +\ww_t &\sim \MVN(0,\QQ_t) +\\ +\yy_t^{(0)}&=\ZZ^{(0)}\II_q^+\xx_t + \ZZ^{(0)}\II_q^{(0)}\xx_t + \aa^{(0)}_t\\ +\yy_t^+&=\ZZ_t^+\xx_t + \aa_t^+ \HH_t^+\vv_t\\ +&=\ZZ_t^+\II_q^+\xx_t + \ZZ_t^+\II_q^{(0)}\xx_t + \aa_t^+ + \HH_t^+\vv_t\\ +\vv_t &\sim \MVN(0,\RR) +\end{split} +\end{equation} +where $\BB_t^{(0)}=\OMG_{t,q}^{(0)}\BB_t$ and $\BB_t^+=\OMG_{t,q}^+\BB_t$ so that $\BB_t^{(0)}$ are the rows of $\BB_t$ corresponding to the zero rows of $\GG_t$ and $\BB_t^+$ are the rows of $\BB_t$ corresponding to non-zero rows of $\GG_t$. The other parameters are similarly defined: $\uu_t^{(0)}=\OMG_{t,q}^{(0)}\uu_t$ and $\uu_t^+=\OMG_{t,q}^+\uu_t$, $\ZZ_t^{(0)}=\OMG_{t,r}^{(0)}\ZZ_t$ and $\ZZ_t^+=\OMG_{t,r}^+\ZZ_t$, and $\aa_t^{(0)}=\OMG_{t,r}^{(0)}\aa_t$ and $\aa_t^+=\OMG_{t,r}^+\aa_t$. + +\subsection{Identifying the fully deterministic $\xx$ rows}\label{sec:ident.xds} +To derive EM update equations, we need to take the derivative of the expected log-likelihood holding everything but the parameter of interest constant. If there are deterministic $\xx_t$ rows, then we cannot hold these constant and do this partial differentiation with respect to the state parameters. We need to identify these $\xx_t$ rows and remove them from the likelihood function by rewriting them in terms of only the state parameters\footnote{Then we can do the partial differentiation with respect to the parameters.}. For this derivation, I am going to make the simplifying assumption that the locations of the all-zero rows in $\GG_t$ and $\HH_t$ are time-invariant. This is not strictly necessary, but simplifies the algebra greatly. + +For the deterministic $\xx_t$ rows, denoted $\xx_t^d$, the process equation is $\xx_t = \BB_t\xx_{t-1}+\uu_t$, with no $\ww_t$ term. When we do the partial differentiation step in deriving the EM update equation for $\uu$, $\BB$ or $\xixi$, we will need to take a partial derivative while holding $\xx_t$ and $\xx_{t-1}$ constant. We cannot hold the deterministic rows of $\xx_t$ and $\xx_{t-1}$ constant while changing the corresponding rows of $\uu_t$ and $\BB_t$ (or $\xixi$ if $t=0$ or $t=1$). If a row of $\xx_t$ is fully deterministic, then that $x_{i,t}$ must change when row $i$ of $\uu_t$ or $\BB_t$ is changed. Thus we cannot do the partial differentiation step required in the EM update equation derivation. + +So we need to identify the fully deterministic $\xx_t$ and treat them differently in our likelihood so we can derive the update equation. First I will define some terminology regarding the $\xx_t$. +\begin{itemize} + \item $(0)$ rows of any $\xx$, $\BB$, $\uu$ or $\II$ matrix that are associated with all-zero rows of $\GG_t$, e.g. $\xx_t^{(0)}$. + \item $(+)$ rows of any $\xx$, $\BB$, $\uu$ or $\II$ matrix that are associated with non-zero rows of $\GG_t$, e.g. $\xx_t^{(+)}$. + \item 'directly stochastic' $\xx_t$ are denoted $\xx_t^{ds}$. These are the same as $\xx_t^{+}$. These $\xx_t$ have a $w_t$ from their row of $\GG_t$. + \item 'deterministic' $\xx_t$ are denoted $\xx_t^d$. These are those $\xx_t^{(0)}$ which have no $w_t$ terms either from their own row or picked up through $\BB$ from a non-zero row of $\GG_t$. + \item 'indirectly stochastic' $\xx_t$ are denoted $\xx_t^{is}$. Indirectly stochastic $\xx_t^{is}$ have a corresponding row of $\GG_t$ that is all zero, but pick up a $w_t$ from a non-zero row of $\GG_t$ through $\BB$ in one of the prior $\BB_t\xx_t$ steps. +\end{itemize} +The stochastic $\xx_t$ are denoted $\xx_t^s$ whether they are indirectly or directly stochastic. + +How do you determine the $d$, or deterministic, set of $\xx_t$ rows? These are the rows of $\xx_t$ with no $w$ terms, from time $t$ or from prior $t$. Note that the location of the $d$ rows is time-dependent, a row may be deterministic at time $t$ but pick up a $w$ at time $t+1$ and thus be indirectly stochastic thereafter. I am requiring that once a row becomes indirectly stochastic, it remains stochastic; rows are not allowed to flip back and forth between deterministic (no $w$ terms in them) and stochastic (containing a $w$ term). + +I will work through an example and then show a general algorithm to keep track of the deterministic rows at time $t$. + +\subsubsection*{Example} + +Let $\xx_0=\xixi$ (so $\FF$ is all zero and $\xx_0$ is not stochastic). Define $\II_t^{ds}$, $\II_t^{is}$, and $\II_t^d$ as diagonal indicator matrices with a 1 at $\II(i,i)$ if row $i$ is directly stochastic, indirectly stochastic, or deterministic respectively. $\II_t^{ds}+\II_t^{is}+\II_t^d=\II_m$. Let our state equation be $\xx_t=\BB\xx_{t-1}+\GG w_t$. +Let +\begin{equation} +\BB=\begin{bmatrix} +1&1&0&0\\ +1&0&0&0\\ +0&1&0&0\\ +0&0&0&1 +\end{bmatrix}\quad\quad +\GG=\begin{bmatrix} +1\\ +0\\ +0\\ +0 +\end{bmatrix} +\end{equation} +At $t=0$, $\xx_0$ is fixed, aka deterministic. +\begin{equation} +\xx_0=\begin{bmatrix} +\pi_1\\ +\pi_2\\ +\pi_3\\ +\pi_4 +\end{bmatrix} +\end{equation} +\begin{equation} +\II_0^d=\begin{bmatrix} +1&0&0&0\\ +0&1&0&0\\ +0&0&1&0\\ +0&0&0&1 +\end{bmatrix} +\quad +\II_0^s=\II_0^{is}=\begin{bmatrix} +0&0&0&0\\ +0&0&0&0\\ +0&0&0&0\\ +0&0&0&0 +\end{bmatrix} +\end{equation} +At $t=1$, the $\xx_t$ begin picking up $w_t$ starting with $x_{1,t}$. +\begin{equation} +\xx_1=\begin{bmatrix} +\pi_1+\pi_2+w_1\\ +\pi_1\\ +\pi_2\\ +\pi_4 +\end{bmatrix} +\end{equation} +\begin{equation} +\II_1^d=\begin{bmatrix} +0&0&0&0\\ +0&1&0&0\\ +0&0&1&0\\ +0&0&0&1 +\end{bmatrix} +\quad +\II_1^{ds}=\begin{bmatrix} +1&0&0&0\\ +0&0&0&0\\ +0&0&0&0\\ +0&0&0&0 +\end{bmatrix} +\quad +\II_1^{is}=\begin{bmatrix} +0&0&0&0\\ +0&0&0&0\\ +0&0&0&0\\ +0&0&0&0 +\end{bmatrix} +\end{equation} +At $t=2$, $x_{2,2}$ picks up $w_1$ through $\BB$. +\begin{equation} +\xx_2=\begin{bmatrix} +\dots+w_2\\ +\pi_1+\pi_2+w_1\\ +\pi_1\\ +\pi_4 +\end{bmatrix} +\end{equation} +\begin{equation} +\II_2^d=\begin{bmatrix} +0&0&0&0\\ +0&0&0&0\\ +0&0&1&0\\ +0&0&0&1 +\end{bmatrix} +\quad +\II_2^{ds}=\begin{bmatrix} +1&0&0&0\\ +0&0&0&0\\ +0&0&0&0\\ +0&0&0&0 +\end{bmatrix} +\quad +\II_0^{is}=\begin{bmatrix} +0&0&0&0\\ +0&1&0&0\\ +0&0&0&0\\ +0&0&0&0 +\end{bmatrix} +\end{equation} +By $t=3$, the $\II^{d}$ and $\II^{is}$ stabilize. +\begin{equation} +\xx_3=\begin{bmatrix} +\dots+w_1+w_2+w_3\\ +\dots+w_1+w_2\\ +\pi_1+\pi_2+w_1\\ +\pi_4 +\end{bmatrix} +\end{equation} +\begin{equation} +\II_3^d=\begin{bmatrix} +0&0&0&0\\ +0&0&0&0\\ +0&0&0&0\\ +0&0&0&1 +\end{bmatrix} +\quad +\II_3^{ds}=\begin{bmatrix} +1&0&0&0\\ +0&0&0&0\\ +0&0&0&0\\ +0&0&0&0 +\end{bmatrix} +\quad +\II_3^{is}=\begin{bmatrix} +0&0&0&0\\ +0&1&0&0\\ +0&0&1&0\\ +0&0&0&0 +\end{bmatrix} +\end{equation} +After time $t=3$ the location of the deterministic and indirectly stochastic rows is stabilized and no longer changes. + +\subsubsection*{Finding the indirectly stochastic rows} + +In general, it can take up to $m$ time steps for the location of the deterministic rows to stabilize. This is because $\BB_t$ is like an adjacency matrix, and I require that the location of the 0 elements in $\BB_1\BB_2\dots\BB_t$ is time invariant. If we replace all non-zero elements in $\BB_t$ with 1, then we have an adjacency matrix, let's call it $\MM$. If there is a path in $\MM$ from $x_{j,t}$, where $j$ is a $(0)$ row of $\xx$, to an $x_{i,t}$, where $i$ is a $(+)$ row, then row $j$ of $\xx$ will eventually be indirectly stochastic. Graph theory tells us that it takes at most $m$ steps for a $m \times m$ adjacency matrix to show full connectivity. This means that if element $(j,i)$ is 0 in $M^m$ then row $j$ is not connected to row $i$ by any path and thus will remain unconnected for $M^{t>m}$; note element $i,j$ can be 0 while $j,i$ is not. + +This means that to determine if $x_{j,t}$, in the $(0)$ rows, is indirectly stochastic, we raise $\MM$, to the $t$ power and look if there is a non-zero value in the $j$-th row and any $(+)$ columns of $\MM^t$. In words, we looking for a path from $x_{j,t}$ to any $x_{+}$ in the past. We do not need to do this past $t=m$ since the location of the indirectly stochastic and deterministic rows stabilize by then. + +Since my $\BB_t$ matrices are small, I use an inefficient strategy in the MARSS code to construct the indicator matrices $\II_d^t$. I define $\MM$ as $\BB_t$ with the non-zero $\BB$ replaced with 1; I require that the location of the non-zero elements in $\BB_t$ are time-invariant so there is only one $\MM$. Within the product $\MM^t$, those rows where only 0s appear in the 'stochastic' columns (non-zero $\GG_t$ rows) are the fully deterministic $\xx_{t+1}$ rows. Note, $t+1$ so one time step ahead. There are much faster algorithms for finding paths, but my $\MM$ tend to be small. Also, unfortunately, using $\BB^t$ in place of $\MM^t$ is not robust. Let's say $\BB=\bigl[ \begin{smallmatrix}-1&-2\\ 1&1\end{smallmatrix} \bigr]$, $\GG=\bigl[ \begin{smallmatrix}1\\ 0\end{smallmatrix} \bigr]$ and $\xx_0$ is fixed (not stochastic). +$\BB^2$ is a diagonal matrix suggesting that no connection between $x_2$ and $x_1$ at time $t=2$. That is incorrect. $x_{2,t}$ is indirectly stochastic. + +\subsubsection{Redefining the $\xx_t^d$ elements in the likelihood} +Because the deterministic rows of $\xx_t$ do not appear in the $\xx$ part of the likelihood (no error term = no likelihood), we have to move them into the $\yy$ part of the likelihood. To do that we need to re-write them in terms of only model parameters and remove all $\xx_{t-1}$ terms. This section walks through how to do that. + +By definition, all the $\BB_t$ elements in the $ds$ and $is$ columns of the $d$ rows of $\BB_t$ are 0. If they weren't, then $\xx_t^d$ wouldn't be a deterministic row because it would pick up a $w$ from a directly or indirectly stochastic $x$ from a prior $t-1$. This is due to the constraint that I have imposed that locations of 0s in $\BB_t$ are time-invariant and the location of the zero rows in $\GG_t$ also time-invariant: $\II_q^{+}$ and $\II_q^{(0)}$ are time-constant. + +\subsubsection*{Example} + +Consider this $\BB$ and $\GG$, which would arise in a MARSS version of an AR-3 model: +\begin{equation} +\BB=\begin{bmatrix} +b_1&b_2&b_3\\ +1&0&0\\ +0&1&0\end{bmatrix} +\quad +\GG=\begin{bmatrix} +1\\ +0\\ +0\end{bmatrix} +\end{equation} +Using $\xx_0=\xixi$ (so fixed and not stochastic): +\begin{equation} +\xx_0=\begin{bmatrix} +\pi_1\\ +\pi_2\\ +\pi_3 +\end{bmatrix} +\quad +\xx_1=\begin{bmatrix} +\dots+w_1\\ +\pi_1\\ +\pi_2 +\end{bmatrix} +\quad +\xx_2=\begin{bmatrix} +\dots+w_2\\ +\dots+w_1\\ +\pi_1\end{bmatrix} +\quad +\xx_3=\begin{bmatrix} +\dots+w_3\\ +\dots+w_2\\ +\dots+w_1 +\end{bmatrix} +\end{equation} +The $\dots$ just represent 'some values'. The key part is the $w$ appearing which is the stochasticity. At $t=1$, rows 2 and 3 are deterministic. At $t=2$, row 3 is deterministic, and at $t=3$, no rows are deterministic. + +The $\II^d$ are: +\begin{equation} +\II_{q,1}^d=\begin{bmatrix} +0&0&0\\ +0&1&0\\ +0&0&1 +\end{bmatrix} +\quad +\II_{q,2}^d=\begin{bmatrix} +0&0&0\\ +0&0&0\\ +0&0&1 +\end{bmatrix} +\quad +\II_{q,3}^d=\begin{bmatrix} +0&0&0\\ +0&0&0\\ +0&0&0 +\end{bmatrix} +\end{equation} +The $\MM$ are: +\begin{equation} +\MM=\begin{bmatrix} +1&1&1\\ +1&0&0\\ +0&1&0 +\end{bmatrix} +\quad +\MM^2=\begin{bmatrix} +0&0&0\\ +0&0&0\\ +0&0&1 +\end{bmatrix} +\quad +\II_{q,3}^d=\begin{bmatrix} +0&0&0\\ +0&0&0\\ +0&0&0 +\end{bmatrix} +\end{equation} + +We can rewrite the equation for the deterministic rows in $\xx_t$ as follows. $\xx_t^d$ is $\xx_t$ with the $d$ rows zeroed out, so $\xx_t^d = \II_{q,t}^d\xx_t$. +\begin{equation} \label{eq:xt.det.sum} +\begin{split} +\xx_1^{d}&=\II_{q,1}^d\xx_1\\ + &=\II_{q,1}^d(\BB_1 \xx_0 + \ff_{u,1} + \DD_{u,1}\uupsilon) \\ +\xx_2^{d}&=\II_{q,2}^d\xx_2\\ + &=\II_{q,2}^d(\BB_2 \xx_1 + \uu_2) \\ + &=\II_{q,2}\BB_2((\BB_1 \xx_0 + \ff_{u,1} + \DD_{u,1}\uupsilon) + \ff_{u,2} + \DD_{u,2}\uupsilon) \\ + &=\II_2^d(\BB_2\BB_1 \xx_0 + \BB_2\ff_{1,u} + \ff_{2,u} + (\BB_2\DD_{u,1} +\DD_{u,2})\uupsilon) \\ + \dots \\ +\end{split} +\end{equation} +The messy part is keeping track of which rows are deterministic because this will potentially change up to time $t=m$. + +We can rewrite the function for $\xx_t^d$, where $t_0$ is the $t$ at which the initial state is defined. It is either $t=0$ or $t=1$. +\begin{equation} \label{eq:xt.det.sum2} +\begin{split} +\xx_t^d &= \II_t^d(\BB^*_t\xx_{t_0} + \ff^*_t +\DD^*_t\uupsilon) \\ +\text{where}&\\ +\BB^*_{t_0} &= \II_m \\ +\BB^*_{t} &=\BB_t\BB^*_{t-1}\quad t > t_0 \\ +\\ +\ff^*_{t_0} &= 0 \\ +\ff^*_t &=\BB_t\ff^*_{t-1} + \ff_{t,u}\quad t > t_0\\ +\\ +\DD^*_{t_0} &= 0 \\ +\DD^*_t &= \BB_t\DD^*_{t-1} + \DD_{t,u}\quad t > t_0\\ +\\ +\II_{q,t_0}^d&=\II_\lambda^d\\ +\text{diag}(\II_{t_0+\tau}^d)&=\text{apply}(\OMG_q^{(0)}\MM^\tau\OMG_q^+ == 0, 1, \text{all}) +\end{split} +\end{equation} +The bottom line is written in R: $\II_{t_0+\tau}^d$ is a diagonal matrix with a 1 at $(i,i)$ where row $i$ of $\GG$ is all 0 and all $ds$ and $is$ columns in row $i$ of $\MM^t$ are equal to zero. + +In the expected log-likelihood, the term $\E[\XX_t^d]=\E[\XX_t^d|\YY=\yy]$, meaning the expected value of $\XX_t^d$ conditioned on the data, appears. Thus in the expected log-likelihood the function will be written: +\begin{equation} +\begin{split} +\XX_t^d &= \II_t^d(\BB^*_t\XX_{t_0} + \ff^*_t +\DD^*_t\uupsilon) \\ +\E[\XX_t^d] &= \II_t^d(\BB^*_t\E[\XX_{t_0}] + \ff^*_t +\DD^*_t\uupsilon) +\end{split} +\end{equation} + +When the $j$-th row of $\FF$ is all zero, meaning the $j$-th row of $\xx_0$ is fixed to be $\xi_j$, then $\E[X_{t_0,j}]\equiv\xi_j$. This is the case where we treat $x_{t_0,j}$ as fixed and we either estimate or specify its value. If $\xx_{t_0}$ is wholly treated as fixed, then $\E[\XX_{t_0}]\equiv\xixi$ and $\LAM$ does not appear in the model at all. In the general case, where some $x_{t_0,j}$ are treated as fixed and some as stochastic, we can write $\E[\XX_t^d]$ appearing in the expected log-likelihood as: +\begin{equation}\label{eq:EXtd} +\begin{split} +\E[\XX_{t_0}]=(\II_m-\II_\lambda^{(0)})\E[\XX_{t_0}]+\II_\lambda^{(0)}\xixi +\end{split} +\end{equation} +$\II_\lambda^{(0)}$ is a diagonal indicator matrix with 1 at $(j,j)$ if row $j$ of $\FF$ is all zero. + +If $\BB^{d,d}$ and $\uu^d$ are time-constant, we could use the matrix geometric series: +\begin{equation}\label{eq:xt.geo} +\begin{split} +\xx_t^{d}=&(\BB^{d,d})^t \xx_0^{d} + \sum_{i=0}^{t-1}(\BB^{d,d})^i \uu^{d} = +(\BB^{d,d})^t \xx_0^{d} + (\II - \BB^{d,d})^{-1}(\II-(\BB^{d,d})^t)\uu^{d}, \quad\text{if }\BB^{d,d} \neq \II\\ +&\xx_0^d + \uu^d,\quad\text{if }\BB^{d,d} = \II +\end{split} +\end{equation} +where $\BB^{d,d}$ is the block of $d$'s associated with the deterministic $\xx_t$. + +\subsubsection{Dealing with the $\xx_t^{is}$ elements in the likelihood and associated parameter rows} +Although $\ww_t^{is}=0$, these terms are connected to the stochastic $\xx$'s in earlier time steps though $\BB$, thus all $\xx_t^{is}$ are possible for a given $\uu_t$, $\BB_t$ or $\xixi$. However, all $\xx_t^{is}$ are not possible conditioned on $\xx_{t-1}$, so we are back in the position that we cannot both change $\xx_t$ and change $\uu_t$. + +Recall that for the partial differentiation step in the EM algorithm, we need to be able to hold the $E[\XX_t]$ appearing in the likelihood constant. We can deal with the deterministic $\xx_t$ because they are not stochastic and do not have 'expected values'. They can be removed from the likelihood by rewriting $\xx_t^d$ in terms of the model parameters. We cannot do that for $\xx_t^{is}$ because these $x$ are stochastic. There is no equation for them; all $\xx^{is}$ are possible but some are more likely than others. We also cannot replace $\xx_t^{is}$ with $\BB_t^{is}E[\XX_{t-1}]+\uu_t^{is}$ to force $\BB_t^{is}$ and $\uu^{is}$ to appear in the $\yy$ part of the likelihood. The reason is that $\E[\XX_t]$ and $\E[\XX_{t-1}]$ both appear in the likelihood and we cannot hold both constant (as we must for the partial differentiation) and at the same time change $\BB_t^{is}$ or $\uu_t^{is}$ as we are doing when we differentiate with respect to $\BB_t^{is}$ or $\uu)_t^{is}$. We cannot do that because $\xx_t^{is}$ is constrained to equal $\BB_t^{is}\xx_{t-1}+\uu_t^{is}$. + +This effectively means that we cannot estimate $\BB_t^{is}$ and $\uu_t^{is}$ because we cannot rewrite $\xx_t^{is}$ in terms of only the model parameters. This is specific to the EM algorithm because it is an iterative algorithm where the expected $\XX_t$ are computed with fixed parameters and then the $\E[\XX_t]$ are held fixed at their expected values while the parameters are updated. In my $\BB$ update equation, I assume that $\BB_t^{(0)}$ is fixed for all $t$. Thus I circumvent the problem altogether for $\BB$. For $\uu$, I assume that only the $\uu^{is}$ elements are fixed. + +\subsection{Expected log-likelihood for degenerate models} + +The basic idea is to replace $\II_q^d\E[\XX_t]$ with a deterministic function involving only the state parameters (and $\E[\XX_{t_0}]$ if $\XX_{t_0}$ is stochastic) . These appear in the $\yy$ part of the likelihood in $\ZZ_t\XX_t$ when the $d$ columns of $\ZZ_t$ have non-zero values. They appear in the $\xx$ part of the likelihood in $\BB_t\XX_{t-1}$ when the $d$ columns of $\BB_t$ have non-zero values. They do not appear in $\XX_t$ in the $\xx$ part of the likelihood because $\Qm_t$ has all the non-$s$ columns and rows zeroed out (non-$s$ includes both $d$ and $is$) and the element to the left of $\Qm_t$ is a row vector and to the right, it is a column vector. Thus any $\xx_t^d$ in $\XX_t$ are being zeroed out by $\Qm_t$. + +The first step is to pull out the $\II_t^{d}\XX_t$: +\begin{equation} +\begin{split} +\Psi^+ &= \E[\log\LL(\YY^+,\XX^+ ; \Theta)] = \E[-\frac{1}{2}\sum_1^T \\ +& (\YY_t - \ZZ_t(\II_m-\II_t^d)\XX_t - \ZZ_t\II_t^d\XX_t - \aa_t)^\top \Rm_t\\ +&(\YY_t - \ZZ_t(\II_m-\II_t^d)\XX_t - \ZZ_t\II_t^d\XX_t - \aa_t) -\frac{1}{2}\sum_1^T\log |\RR_t|\\ +& -\frac{1}{2}\sum_{t_0+1}^T (\XX_t - \BB_t ((\II_m - \II_{t-1}^d)\XX_{t-1} + \II_{t-1}^d\XX_{t-1}) - \uu_t)^\top \Qm_t \\ +&(\XX_t - \BB_t ((\II_m - \II_{t-1}^d)\XX_{t-1} + \II_{t-1}^d\XX_{t-1}) - \uu_t) - \frac{1}{2}\sum_{t_0+1}^T\log |\QQ_t| \\ +& - \frac{1}{2}(\XX_{t_0} - \xixi)^\top \LAMm(\XX_{t_0} - \xixi) - \frac{1}{2}\log |\LAM| -\frac{n}{2}\log 2\pi +\end{split} +\end{equation} +See section \ref{sec:ident.xds} for the definition of $\II_t^d$. + +Next we replace $\II_q^d\XX_t$ with equation \ref{eq:xt.det.sum2}. $\XX_{t_0}$ will appear in this function instead of $\xx_{t_0}$. I rewrite $\uu_t$ as $\ff_{u,t}+\DD_{u,t}\uupsilon$. This gives us the expected log-likelihood: +\begin{equation}\label{eq:degen.logL.x0} +\begin{split} +\Psi^+ &= \E[\log\LL(\YY^+,\XX^+ ; \Theta)] = \E[-\frac{1}{2}\sum_1^T \\ +& (\YY_t - \ZZ_t(\II_m-\II_t^d)\XX_t - \ZZ_t\II_t^d(\BB^*_t\XX_{t_0} + \ff^*_t +\DD^*_t\uupsilon) - \aa_t)^\top \Rm_t\\ +&(\YY_t - \ZZ_t(\II_m-\II_t^d)\XX_t - \ZZ_t\II_t^d(\BB^*_t\XX_{t_0} + \ff^*_t +\DD^*_t\uupsilon) - \aa_t) -\frac{1}{2}\sum_1^T\log |\RR_t|\\ +& -\frac{1}{2}\sum_{t_0+1}^T (\XX_t - \BB_t ((\II_m - \II_{t-1}^d)\XX_{t-1} + \II_{t-1}^d(\BB^*_{t-1}\XX_{t_0} + \ff^*_{t-1} +\DD^*_{t-1}\uupsilon)) - \ff_{u,t} - \DD_{u,t}\uupsilon)^\top \Qm_t \\ +&(\XX_t - \BB_t ((\II_m - \II_{t-1}^d)\XX_{t-1} + \II_{t-1}^d(\BB^*_{t-1}\XX_{t_0} + \ff^*_{t-1} +\DD^*_{t-1}+\uupsilon)) - \ff_{u,t} - \DD_{u,t}\uupsilon) \\ +&- \frac{1}{2}\sum_{t_0}^T\log |\QQ_t| - \frac{1}{2}(\XX_{t_0} - \xixi)^\top \LAMm(\XX_{t_0} - \xixi) - \frac{1}{2}\log |\LAM| -\frac{n}{2}\log 2\pi +\end{split} +\end{equation} +where $\BB^*$, $\ff^*$ and $\DD^*$ are defined in equation \ref{eq:xt.det.sum2}. $\Rm_t = \Xi_t^\top\RR_t^{-1}\Xi_t$ and $\Qm_t = \Phi_t^\top\QQ_t^{-1}\Phi_t$, $\LAMm = \Pi^\top\LAM^{-1}\Pi$. When $\xx_{t_0}$ is treated as fixed, $\LAMm=0$ and the last line will drop out altogether, however in general some rows of $\xx_{t_0}$ could be fixed and others stochastic. + +We can see directly in equation \ref{eq:degen.logL.x0} where $\uupsilon$ appears in the expected log-likelihood. Where $\pp$ appears is less obvious because it depends on $\FF$, which specifies which rows of $\xx_{t_0}$ are fixed. From equation \ref{eq:EXtd}, $$\E[\XX_{t_0}]=(\II_m-\II_l^{(0)})\E[\XX_{t_0}]+\II_l^{(0)}\xixi$$ +and $\xixi=\ff_\xi+\DD_\xi\pp$. Thus where $\pp$ appears in the expected log-likelihood depends on the location of zero rows in $\FF$ (and thus the zero rows in the indicator matrix $\II_l^{(0)}$). Recall that $\E[\XX_{t_0}]$ appearing in the expected log-likelihood function is conditioned on the data so $\E[\XX_{t_0}]$ in $\Psi$ is not equal to $\xixi$ if $\xx_{t_0}$ is stochastic. + +The case where $\xx_{t_0}$ is stochastic is a little odd because conditioned on $\XX_{t_0}=\xx_{t_0}$, $\xx_t^d$ is deterministic even though $\XX_0$ is a random variable in the model. Thus in the model, $\xx_t^d$ is a random variable through $\XX_{t_0}$. But when we do the partial differentiation step for the EM algorithm, we hold $\XX$ at its expected value thus we are holding $\XX_{t_0}$ at a specific value. We cannot do that and change $\uu$ at the same time because once we fix $\XX_{t_0}$ the $\xx_t^d$ are deterministic functions of $\uu$. + +\subsection{Logical constraints to ensure a consistent system of equations} +We need to ensure that the model remains internally consistent when $\RR$ or $\QQ$ goes to zero and that we do not have an over- or under-constrained system. + +As an example of a solvable versus unsolvable model, consider the following. +\begin{equation} +\HH_t\RR_t=\begin{bmatrix} +0&0\\ +1&0\\ +0&1\\ +0&0 +\end{bmatrix} +\begin{bmatrix} +a&0\\ +0&b\\ +\end{bmatrix} = \begin{bmatrix} +0&0&0&0\\ +0&a&0&0\\ +0&0&b&0\\ +0&0&0&0\\\end{bmatrix}, +\end{equation} +then following are bad versus ok $\ZZ$ matrices. +\begin{equation} +\ZZ_{\text{bad}}=\begin{bmatrix} +c&d&0\\ +z(2,1)&z(2,2)&z(2,3)\\ +z(3,1)&z(3,1)&z(3,1)\\ +c&d&0 +\end{bmatrix},\quad +\ZZ_{\text{ok}}=\begin{bmatrix} +c&0&0\\ +z(2,1)&z(2,2)&z(2,3)\\ +z(3,1)&z(3,1)&z(3,1)\\ +c&d\neq0&0 +\end{bmatrix} +\end{equation} +Because $y_t(1)$ and $y_t(4)$ have zero observation variance, the first $\ZZ$ reduces to this for $x_t(1)$ and $x_t(2)$: +\begin{equation} +\begin{bmatrix} +y_t(1)\\ +y_t(4) +\end{bmatrix}= +\begin{bmatrix} +c x_t(1) + d x_t(2)\\ +c x_t(1) + d x_t(2) +\end{bmatrix} +\end{equation} +and since $y_t(1)\neq y_t(4)$, potentially, that is not solvable. The second $\ZZ$ reduces to +\begin{equation} +\begin{bmatrix} +y_t(1)\\ +y_t(4) +\end{bmatrix}= +\begin{bmatrix} +c x_t(1)\\ +c x_t(1) + d x_t(4) +\end{bmatrix} +\end{equation}and that is solvable for any $y_t(1)$ and $y_t(4)$ combination. Notice that in the latter case, $x_t(1)$ and $x_t(2)$ are fully specified by $y_t(1)$ and $y_t(4)$. + +\subsubsection{Constraint 1: $\ZZ$ does not lead to an over-determined observation process} +We need to ensure that a $\xx_t$ exists for all $\yy^{(0)}_t$ such that: +$$\E[\YY^{(0)}_t]=\ZZ^{(0)}\E[\XX_t]+\aa^{(0)}.$$ If $\ZZ^{(0)}$ is invertible, such a $\xx_t$ certainly exists. But we do not require that only one $\xx_t$ exists, simply that at least one exists. Thus the system can be under-constrained but not over-constrained. One way to test for this is to use the singular value decomposition (SVD) of $\ZZ^{(0)}$ ($\ZZ^{(0)}$ square). If the number of singular values of $\ZZ^{(0)}$ is less than the number of columns in $\ZZ$, which is the number of $\xx$ rows, then $\ZZ^{(0)}$ specifies an over-constrained system ($y=Zx$\footnote{This is the classic problem of solving the system of linear equations, which is standardly written $Ax=b$.}) Using the R language, you would test if the length of \verb@svd(Z)$d@ is less than than \verb@dim(Z)[2]@. If $\ZZ^{(0)}$ specifies and under-determined system, some of the singular values would be equal to 0 (within machine tolerance). It is possible that $\ZZ^{(0)}$ could specify both an over- and under-determined system at the same time. That is, the number of singular values could be less than the number of columns in $\ZZ^{(0)}$ and some of the singular values could be 0. + +Doesn't a $\ZZ$ with more rows than columns automatically specify a over-determined system? No. Considered this $\ZZ$ +\begin{equation} +\begin{bmatrix} +1&0\\ +0&1\\ +0&0 +\end{bmatrix} +\end{equation} +This $\ZZ$ is fine, although obviously the last row of $\yy$ will not hold any information about the $\xx$. But it could have information about $\RR$ and $\aa$, which might be shared with the other $\yy$, so we don't want to prevent the user from specifying a $\ZZ$ like this. + + +\subsubsection{Constraint 2: the state processes are not over-constrained. } +We also need to be concerned with the state process being over-constrained when both $\QQ=0$ and $\RR=0$ because we can have a situation where the constraint imposed by the observation process is at odds with the constraint imposed by the state process. Here is an example: + +\begin{equation} +\begin{split} +\yy_t=\begin{bmatrix} +1&0\\ +0&1 +\end{bmatrix} +\begin{bmatrix} +x_1\\x_2 +\end{bmatrix}_t\\ +\begin{bmatrix} +x_1\\x_2 +\end{bmatrix}_t= +\begin{bmatrix} +1&0\\ +0&0 +\end{bmatrix} +\begin{bmatrix} +x_1\\x_2 +\end{bmatrix}_{t-1} ++ +\begin{bmatrix} +w_1\\0 +\end{bmatrix}_{t-1} +\end{split} +\end{equation} + +In this case, some of the $x$'s are deterministic, $\QQ=0$ and not linked through $\BB$ to a stochastic $x$, and the corresponding $y$ are also deterministic. These cases will show up as errors in the Kalman filter/smoother because in the Kalman gain equation (equation \ref{eq:Kt}), the term $\ZZ_t\VV_t^{t-1}\ZZ_t^\top$ will appear when $\RR=0$. We need to make sure that 0 rows in $\BB_t$, $\ZZ_t$ and $\QQ_t$ do not line up in such a way that 0 rows/cols do not appear in $\ZZ_t\VV_t^{t-1}\ZZ_t^\top$ at the same place as 0 rows/cols in $\RR$. In MARSS, this is checked by doing a pre-run of the Kalman smoother to see if it throws an error in the Kalman gain step. + +\section{EM algorithm modifications for degenerate models} + +The $\RR$, $\QQ$, $\ZZ$, and $\aa$ update equations are largely unchanged. The real difficulties arise for the $\uu$ and $\xixi$ update equations when $\uu^{(0)}$ or $\xixi^{(0)}$ are estimated. For $\BB$, I do not have a degenerate update equation, so I need to assume that $\BB^{(0)}$ elements are fixed (not estimated). + +\subsection{$\RR$ and $\QQ$ update equations} +The constrained update equations for $\QQ$ and $\RR$ work fine because their update equations do not involve any inverses of non-invertible matrices. However if $\HH_t\RR_t\HH_t^\top$ is non-diagonal and there are missing values, then the $\RR$ update equation involves $\hatyt$. That will involve the inverse of $\HH_t\RR_{11}\HH_t^\top$ (section \ref{sec:exp.Y}), which might have zeros on the diagonal. In that case, use the $\IR_t$ modification that deals with such zeros (equation \ref{eq:IRt.degen}). + + +\subsection{$\ZZ$ and $\aa$ update equations} +We need to deal with $\ZZ$ and $\aa$ elements that appear in rows where the diagonal of $\RR=0$. These values will not appear in the likelihood function unless they also happen to also appear on the rows where the diagonal of $\RR$ is not 0 (because they are constrained to be equal for example). However, in this case the $\ZZ^{(0)}$ and $\aa^{(0)}$ are logically constrained by the equation +$$\yy_t^{(0)}=\ZZ_t^{(0)}\E[\xx_t]+\aa_t^{(0)}.$$ +Notice there is no $\ww_t$ since $\RR=0$ for these rows. The $\E[\xx_t]$ is ML estimate of $\xx_t$ computed in the Kalman smoother from the parameter values at iteration $i$ of the EM algorithm, so there is no information in this equation for $\ZZ$ and $\aa$ at iteration $i+1$. The nature of the smoother is that it will find the $\xx_t$ that is most consistent with the data. For example if our $y=Zx+a$ equation looks like so +\begin{equation} +\begin{bmatrix} +0\\ +2\\ +\end{bmatrix} += +\begin{bmatrix} +1\\ +1\\ +\end{bmatrix} +x, +\end{equation} +there is no $x$ that will solve this. However $x=1$ is the closest (lowest squared error) and so this is the information in the data about $x$. The Kalman filter will use this and the relative value of $\QQ$ and $\RR$ to come up with the estimated $x$. In this case, $\RR=0$, so the information in the data will completely determine $x$ and the smoother would return $x=1$ regardless of the process equation. + +The $\aa$ and $\ZZ$ update equations require that $\sum_{t=1}^T \DD_{t,a}^\top\Rm_t\DD_{t,a}$ and $\sum_{t=1}^T \DD_{t,z}^\top\Rm_t\DD_{t,z}$ are invertible. If $\ZZ_t^{(0)}$ and $\aa_t^{(0)}$ are fixed, this will be satisfied, however the restriction is a little less restrictive than that since it is possible that $\Rm_t$ does not have zeros on the diagonal in the same places so that the sum over $t$ could be invertible while the individual values at $t$ are not. The section on the summary of constraints has the test for this constraint. + +The update equations also +involve $\hatyt$, and the modified algorithm for $\hatyt$ when $\HH_t$ has all zero rows will be needed. Other than that, the constrained update equations work (sections \ref{sec:constA} and \ref{sec:constZ}). + +\subsection{$\uu$ update equation} + +Here I discuss the update for $\uu$, or more specifically $\uupsilon$ which appears in $\uu$, when $\GG_t$ or $\HH_t$ have zero rows. I require that $\uu^{is}_t$ is not estimated. All the $\uu^{is}_t$ are fixed values. The $\uu_t^d$ may be estimated or more specifically there may be $\uupsilon$ in $\uu_t^d$ that are estimated; $\uu_t^d = \ff_{u,t}^d+\DD_{u,t}^d\uupsilon$. + + +For the constrained $\uu$ update equation with deterministic $\xx$'s takes the following form. It is similar to the unconstrained update equation except that that a part from the $\yy$ part of the likelihood now appears: +\begin{equation} +\begin{split}\label{eq:u.update.degen.2} +\pmb{\upsilon}_{j+1} = \bigg(\sum_{t=1}^T(\Delta_{t,2}^\top\Rm_t\Delta_{t,2} + \Delta_{t,4}^\top\Qm_t\Delta_{t,4})\bigg)^{-1} \times + \bigg( \sum_{t=1}^T \big( \Delta_{t,2}^\top\Rm_t\Delta_{t,1} + \Delta_{t,4}^\top\Qm_t\Delta_{t,3} \big) \bigg)\\ +\end{split} +\end{equation} + +Conceptually, I think the approach described here is the similar to the approach presented in section 4.2.5 of \citep{Harvey1989}, but it is more general because it deals with the case where some $\uu$ elements are shared (linear functions of some set of shared values), possibly across deterministic and stochastic elements. Also, I present it here within the context of the EM algorithm, so solving for the maximum-likelihood $\uu$ appears in the context of maximizing $\Psi^+$ with respect to $\uu$ for the update equation at iteration $j+1$. + +\subsubsection{$\uu^{(0)}$ is not estimated} +When $\uu^{(0)}$ is not estimated (since it is at some user defined value via $\DD_u$ and $\ff_u$), the part we are estimating, $\uu^+$, only appears in the $\xx$ part of the likelihood. The update equation for $\uu$ remains equation \ref{eq:u.general.update1}. + +\subsubsection{$\uu^d$ is estimated} +The derivation of the update equation proceeds as usual. We need to take the partial derivative of $\Psi^+$ (equation \ref{eq:degen.logL.x0}) holding everything constant except $\uupsilon$, elements of which might appear in both $\uu_t^d$ and $\uu_t^s$ (but not $\uu_t^{is}$ since I require that $\uu_t^{is}$ has no estimated elements). + +The expected log-likelihood takes the following form, where $t_0$ is the time where the initial state is defined ($t=0$ or $t=1$): +\begin{equation}\label{eq:degen.logL.u} +\begin{split} +\Psi^+ = +-\frac{1}{2}\sum_1^T (\Delta_{t,1} - \Delta_{t,2}\pmb{\upsilon})^\top\Rm_t(\Delta_{t,1} - \Delta_{t,2}\pmb{\upsilon}) - \frac{1}{2}\sum_1^T\log |\RR_t| \\ +-\frac{1}{2}\sum_{t_0+1}^T (\Delta_{t,3} - \Delta_{t,4}\pmb{\upsilon})^\top\Qm_t(\Delta_{t,3} - \Delta_{t,4}\pmb{\upsilon}) - \frac{1}{2}\sum_{t_0+1}^T\log |\QQ_t| \\ +- \frac{1}{2}(\XX_{t_0} - \xixi)^\top \LAMm(\XX_{t_0} - \xixi) - \frac{1}{2}\log |\LAM| - \frac{n}{2}\log 2\pi \\ +\end{split} +\end{equation} +$\LAMm=\FF^\top\LAM^{-1}\FF$. If $\xx_{t_0}$ is treated as fixed, $\FF$ is all zero and the line with $\LAMm$ drops out. If some but not all $\xx_{t_0}$ are treated as fixed, then only the stochastic rows appear in the last line. In any case, the last line does not contain $\uupsilon$, thus when we do the partial differentiation with respect to $\uupsilon$, this line drops out. + +The $\Delta$ terms are defined as: +\begin{equation}\label{eq:degen.u.update.Deltas} +\begin{split} +\Delta_{t,1}&=\hatyt - \ZZ_t(\II_m - \II_t^d)\hatxt - \ZZ_t\II_t^{d}(\BB^*_t\E[\XX_{t_0}] + \ff^*_t) - \aa_t \\ +\Delta_{t,2}&= \ZZ_t\II_t^{d}\DD^*_t \\ +\Delta_{t_0,3}&=0_{m\times 1} \\ +\Delta_{t,3}&=\hatxt - \BB_t(\II_m - \II_{t-1}^d)\hatxtm - \BB_t\II_{t-1}^{d}(\BB^*_{t-1} \E[\XX_{t_0}] + \ff^*_{t-1}) - \ff_{t,u} \\ +\Delta_{t_0,4}&=0_{m\times m} \DD_{1,u} \\ +\Delta_{t,4}&=\DD_{t,u}+\BB_t\II_{t-1}^{d}\DD^*_{t-1} \\ +\E[\XX_{t_0}]&=((\II_m-\II_\lambda^{(0)})\widetilde{\xx}_{t_0}+\II_\lambda^{(0)} \xixi) +\end{split} +\end{equation} +$\II^d_t$, $\BB_t^*$, $\ff_t*$, and $\DD_t^*$ are defined in equation \ref{eq:xt.det.sum2}. The values of these at $t_0$ is special so that the math works out. The expectation ($\E$) has been subsumed into the $\Delta$s since $\Delta_2$ and $\Delta_4$ do not involve $\XX$ or $\YY$, so terms like $\XX^\top\XX$ never appear. + +Take the derivative of this with respect to $\uupsilon$ and arrive at: +\begin{equation} +\begin{split} +\label{eq:p.degen.update.u} +\uupsilon_{j+1} = \big(\sum_{t=1}^T\Delta_{t,4}^\top\Qm_t\Delta_{t,4} + \sum_{t=1}^T\Delta_{t,2}^\top\Rm_t\Delta_{t,2}\big)^{-1} \times + \bigg(\sum_{t=1}^T\Delta_{1,4}^\top\Qm_t\Delta_{1,3} + \sum_{t=1}^T \Delta_{t,2}^\top\Rm_t\Delta_{t,1})\bigg) +\end{split} +\end{equation} + +\subsection{$\xixi$ update equation} + +\subsubsection{$\xixi$ is stochastic} +This means that none of the rows of $\FF$ (in $\FF\lambda$) are zero, so $\II_\lambda^{(0)}$ is all zero and the update equation reduces to a constrained version of the classic $\xixi$ update equation: +\begin{equation} +\label{eq:p.degen.update.x0.0.a} +\pp_{j+1} = \big(\DD_\xi^\top\LAM^{-1}\DD_\xi\big)^{-1}\DD_\xi^\top\LAM^{-1}(\E[\XX_{t_0}] - \ff_\xi) +\end{equation} +\subsubsection{$\xixi^{(0)}$ is not estimated} +When $\xixi^{(0)}$ is not estimated (because you fixed it as some value), we do not need to take the partial derivative with respect to $\xixi^{(0)}$ since we will not be estimating it. Thus the update equation is unchanged from the constrained update equation. + +\subsubsection{$\xixi^{(0)}$ is estimated} +Using the same approach as for $\uu$ update equation, we take the derivative of \ref{eq:degen.logL.x0} with respect to $\pp$ where $\xixi=\ff_\xi+\DD_\xi\pp$. $\Psi^+$ will take the following form: +\begin{equation}\label{eq:degen.logL.x0.0} +\begin{split} +\Psi^+ &= \\ +&-\frac{1}{2}\sum_{t=1}^T (\Delta_{t,5} - \Delta_{t,6}\pp)^\top\Rm_t(\Delta_{t,5} - \Delta_{t,6}\pp) - \frac{1}{2}\sum_1^T\log |\RR_t| \\ +& -\frac{1}{2}\sum_{t=1}^T (\Delta_{t,7} - \Delta_{t,8}\pp)^\top\Qm_t(\Delta_{t,7} - \Delta_{t,8}\pp) - \frac{1}{2}\sum_1^T\log |\QQ_t| \\ +& -\frac{1}{2} (\E[\XX_{t_0}] - \ff_\xi - \DD_\xi\pp)^\top\LAMm(\E[\XX_{t_0}] - \ff_\xi - \DD_\xi\pp) - \frac{1}{2}\log |\LAM| \\ +& - \frac{n}{2}\log 2\pi \\ +\end{split} +\end{equation} + +The $\Delta$'s are defined as follows using $ \E[\XX_{t_0}]=(\II_m-\II_l^{(0)})\widetilde{\xx}_{t_0}+\II_l^{(0)}\xixi$ where it appears in $\II_t^d\E[\XX_t]$. +\begin{equation}\label{eq:degen.x0.update.Deltas} +\begin{split} +\Delta_{t,5}&=\hatyt - \ZZ_t(\II_m - \II_t^d)\hatxt - \ZZ_t\II_t^{d}(\BB^*_t((\II_m-\II_\lambda^{(0)})\widetilde{\xx}_{t_0}+\II_\lambda^{(0)} \ff_\xi) + \uu^*_t) - \aa_t \\ +\Delta_{t,6}&= \ZZ_t\II_t^{d}\BB^*_t\II_\lambda^{(0)}\DD_\xi \\ +\Delta_{t_0,7}&=0_{m\times 1} \\ +\Delta_{t,7}&=\hatxt - \BB_t(\II_m - \II_{t-1}^d)\hatxtm - \BB_t\II_{t-1}^{d}(\BB^*_{t-1} ((\II_m-\II_l^{(0)})\widetilde{\xx}_{t_0}+\II_\lambda^{(0)} \ff_\xi) + \uu^*_{t-1}) - \uu_t \\ +\Delta_{t_0,8}&=0_{m\times m} \DD_\xi\\ +\Delta_{t,8}&=\BB_t\II_{t-1}^{d}\BB^*_{t-1}\II_\lambda^{(0)}\DD_\xi\\ +\uu^*_t=\ff^*_t+\DD^*_t\uupsilon +\end{split} +\end{equation} +The expectation can be pulled inside the $\Delta$s since the $\Delta$s in front of $\pp$ do not involve $\XX$ or $\YY$. + +Take the derivative of this with respect to $\pp$ and arrive at: +\begin{equation} +\begin{split} +\label{eq:p.degen.update.x0.0.a.fixed} +\pp_{j+1} &= \big(\sum_{t=1}^T\Delta_{t,8}^\top\Qm_t\Delta_{t,8} + \sum_{t=1}^T\Delta_{t,6}^\top\Rm_t\Delta_{t,6} + \DD_\xi^\top\LAMm\DD_\xi\big)^{-1} \times\\ +&\quad \bigg(\sum_{t=1}^T\Delta_{1,8}^\top\Qm_t\Delta_{1,7} + \sum_{t=1}^T \Delta_{t,6}^\top\Rm_t\Delta_{t,5} + \DD_\xi^\top\LAMm(\E[\XX_{t_0}] - \ff_\xi)\bigg) +\end{split} +\end{equation} + +\subsubsection{When $\HH_t$ has 0 rows in addition to $\GG_t$} +When $\HH_t$ has all zero rows, some of the $\pp$ or $\uupsilon$ may constrained by the model, but these constraints do not appear in $\Psi^+$ since $\Rm_t$ zeros out those constraints. For example, if $H_t$ is all zeros and $\xx_1 \equiv \xixi$, then $\xixi$ is constrained to equal $\ZZ^{-1}(\hatyone-\aa_1)$. + +The model needs to be internally consistent and we need to be able to estimate all the $\pp$ and the $\uupsilon$. Rather than try to estimate the correct $\pp$ and $\uupsilon$ to ensure internal consistency of the model with the data when some of the $\HH_t$ have 0 rows, I test by running the Kalman filter with the degenerate variance modification (in particular the modification for $\FF$ with zero rows is critical) before starting the EM algorithm. Then I test that $\hatyt-\ZZ_t\hatxt-\aa_t$ is all zeros. If it is not, within machine accuracy, then there is a problem. This is reported and the algorithm stopped\footnote{In some cases, it is easy to determine the correct $\xixi$. For example, when $\HH_t$ is all zero rows, $t_0=1$ and there is no missing data at time $t=1$, $\xixi=\ZZ^*(\yy_1-\aa_1)$, where $\ZZ^*$ is the pseudoinverse. One would want to use the SVD pseudoinverse calculation in case $\ZZ$ leads to an under-constrained system (some of the singular values of $\ZZ$ are 0). } + +I also test that $\big(\sum_{t=1}^T\Delta_{t,8}^\top\Qm_t\Delta_{t,8} + \sum_{t=1}^T\Delta_{t,6}^\top\Rm_t\Delta_{t,6} + \DD_\xi^\top\LAMm\DD_\xi\big)$ is invertible to ensure that all the $\pp$ can be solved for, and I test that $\big(\sum_{t=1}^T\Delta_{t,4}^\top\Qm_t\Delta_{t,4} + \sum_{t=1}^T\Delta_{t,2}^\top\Rm_t\Delta_{t,2}\big)$ is invertible so that all the $\uupsilon$ can be solved for. If errors are present, they should be apparent in iteration 1, are reported and the EM algorithm stopped. + +\subsection{$\BB^{(0)}$ update equation for degenerate models} +I do not have an update equation for $\BB^{(0)}$ and for now, I side-step this problem by requiring that any $\BB^{(0)}$ terms are fixed. + +\section{Kalman filter and smoother modifications for degenerate models} + +\subsection{Modifications due to degenerate $\RR$ and $\QQ$} +[1/1/2012 note. These modifications mainly have to do with inverses that appear in the Shumway and Stoffer's presentation of the Kalman filter. The MARSS package uses Koopman's smoother algorithm which avoids these inverses altogether however these appear in the MARSSkfss() function (the Shumway and Stoffer implementation).] + +In principle, when either $\GG_t\QQ_t$ or $\HH_t\RR_t$ has zero rows, the standard Kalman filter/smoother equations would still work and provide the correct state outputs and likelihood. In practice however errors will be generated because under certain situations, one of the matrix inverses in the Kalman filter/smoother equations will involve a matrix with a zero on the diagonal and this will lead to the computer code throwing an error. + +When $\HH_t\RR_t$ has zero rows, problems arise in the Kalman update part of the Kalman filter. +The Kalman gain is +\begin{equation}\label{eq:KKt.2} +\KK_t = \VV_t^{t-1}(\ZZ_t^*)^\top(\ZZ_t^*\VV_t^{t-1}(\ZZ_t^*)^\top + \HH_t\RR_t^*\HH_t^\top)^{-1} +\end{equation} +Here, $\ZZ_t^*$ is the missing values modified $\ZZ_t$ matrix with the $i$-th rows zero-ed out if the $i$-th element of $\yy_t$ is missing (section \ref{sec:kalman.smoother}, equation \ref{eq:yaZ.miss}). Thus if the $i$-th element of $\yy_t$ is missing and the $i$-th row of $\HH_t$ is zero, the $(i,i)$ element of $(\ZZ_t^*\VV_t^{t-1}(\ZZ_t^*)^\top + \HH_t\RR_t^*\HH_t^\top)$ will be zero also and one cannot take its inverse. In addition, if the initial value $\xx_1$ is treated as fixed but unknown then $\VV_1^0$ will be a $m \times m$ matrix of zeros. Again in this situation $(\ZZ_t^*\VV_t^{t-1}(\ZZ_t^*)^\top + \HH_t\RR_t^*\HH_t^\top)$ will have zeros at any $(i,i)$ elements where the $i$-th row of $\HH_t$ is also zero. + +The first case, where zeros on the diagonal arise due to missing values in the data, can be solved using the matrix which pulls out the rows and columns corresponding to the non-missing values ($\OMG_t^{(1)}$). Replace $\big(\ZZ_t^*\VV_t^{t-1}(\ZZ_t^*)^\top + \HH_t\RR_t^*\HH_t^\top\big)^{-1}$ in equation \ref{eq:KKt.2} with +\begin{equation} +(\OMG_t^{(1)})^\top\big(\OMG_t^{(1)}(\ZZ_t^*\VV_t^{t-1}(\ZZ_t^*)^\top + \HH_t\RR_t^*\HH_t^\top)(\OMG_t^{(1)})^\top\big)^{-1}\OMG_t^{(1)} +\end{equation} +Wrapping in $\OMG_t^{(1)}(\OMG_t^{(1)})^\top$ gets rid of all the zero rows/columns in $\ZZ_t^\prime\VV_t^{t-1}(\ZZ_t^\prime)^\top + \HH_t\RR_t^\prime\HH_t^\top$, and the matrix is reassembled with the zero rows/columns reinserted by wrapping in $(\OMG_t^{(1)})^\top\OMG_t^{(1)}$. This works because $\RR_t^\prime$ is the missing values modified $\RR$ (section \ref{sec:missing}) and is block diagonal across the $i$ and non-$i$ rows/columns, and $\ZZ_t^\prime$ has the $i$-columns zero-ed out. Thus removing the $i$ columns and rows before taking the inverse has no effect on the product $\ZZ_t(...)^{-1}$. When $\VV_1^0=\mathbf{0}$, set $\KK_1=\mathbf{0}$ without computing the inverse (see equation \ref{eq:KKt.2} where $\VV_1^0$ appears on the left). + +There is also a numerical issue to deal with. When the $i$-th row of $\HH_t$ is zero, some of the elements of $\xx_t$ may be completely specified (fully known) given $\yy_t$. Let's call these fully known elements of $\xx_t$, the $k$-th elements. In this case, the $k$-th row and column of $\VV_t^t$ must be zero because given $y_t(i)$, $x_t(k)$ is known (is fixed) and its variance, $\VV_t^t(k,k)$, is zero. Because $\KK_t$ is computed using a numerical estimate of the inverse, the standard $\VV_t^t$ update equation (which uses $\KK_t$) will cause these elements to be close to zero but not precisely zero, and they may even be slightly negative on the diagonal. This will cause serious problems when the Kalman filter output is passed on to the EM algorithm. Thus after $\VV_t^t$ is computed using the normal Kalman update equation, we will want to explicitly zero out the $k$ rows and columns in the filter. + +When $\GG_t$ has zero rows, then we might also have similar numerical errors in $\JJ$ in the Kalman smoother. The $\JJ$ equation is +\begin{equation}\label{eq:Jt.2} +\begin{split} +\JJ_t &= \VV_{t-1}^{t-1}\BB_t^\top(\VV_t^{t-1})^{-1}\\ +&\text{where }\VV_t^{t-1} = \BB_t \VV_{t-1}^{t-1} \BB_t^\top + \GG_t\QQ_t\GG_t^\top +\end{split} +\end{equation} +If there are zeros on the diagonals of ($\LAM$ and/or $\BB_t$) and zero rows in $\GG_t$ and these zeros line up, then if the $\BB_t^{(0)}$ and $\BB_T^{(1)}$ elements in $\BB_t$ are blocks\footnote{This means the following. Let the rows where the diagonal elements in $\QQ$ equal zero be denoted $i$ and the the rows where there are non-zero diagonals be denoted $j$. The $\BB_t^{(0)}$ elements are the $\BB_t$ elements where both row and column are in $i$. The $\BB_t^{(1)}$ elements are the $\BB$ elements where both row and column are in $j$. If the $\BB_t^{(0)}$ and $\BB_t^{(1)}$ elements in $\BB$ are blocks, this means all the $\BB_t(i,j)$ are 0; no deterministic components interact with the stochastic components.}, there will be zeros on the diagonal of $\VV_t^t$. Thus there will be zeros on the diagonal of $\VV_t^{t-1}$ and it cannot be inverted. In this case, the corresponding elements of $\VV_t^T$ need to be zero since what's happening is that those elements are deterministic and thus have 0 variance. + +We want to catch these zero variances in $\VV_t^{t-1}$ so that we can take the inverse. Note that this can only happen when there are zeros on the diagonal of $\GG_t\QQ_t\GG_t^\top$ since $\BB_t\VV_{t-1}^{t-1} \BB_t^\top$ can never be negative on the diagonal since $\BB_t\BB_t^\top$ must be positive-definite and so is $\VV_{t-1}^{t-1}$. The basic idea is the same as above. We replace $(\VV_t^{t-1})^{-1}$ with: +\begin{equation} +(\OMG_{Vt}^+)^\top\big(\OMG_{Vt}^+(\VV_t^{t-1})(\OMG_{Vt}^+)^\top\big)^{-1}\OMG_{Vt}^+ +\end{equation} +where $\OMG_{Vt}^+$ is a matrix that removes all the positive $\VV_t^{t-1}$ rows analogous to $\OMG_t^{(1)}$. + +\subsection{Modifications due to fixed initial states} +When the initial state of $\xx$ is fixed, then it is a bit like $\LAM=0$ although actually $\LAM$ does not appear in the model and $\xixi$ has a different interpretation. + +When the initial state of $\xx$ is treated as stochastic, then if $t_0=0$, $\xixi$ is the expected value of $\xx_0$ conditioned on no data. In the Kalman filter this means $\xx_0^0=\xixi$ and $\VV_0^0=\LAM$; in words, the expected value of $\xx_0$ conditioned on $\yy_0$ is $\xixi$ and the variance of $\xx_0^0$ conditioned on $\yy_0$ is $\LAM$. When $t_0=1$, then $\xixi$ is the expected value of $\xx_1$ conditioned on no data. In the Kalman filter this means $\xx_1^0=\xixi$ and $\VV_1^0=\LAM$. Thus where $\xixi$ and $\LAM$ appear in the Kalman filter equations is different depending on $t_0$; the $\xx_t^t$ and $\VV_t^{t}$ initial condition versus the $\xx_t^{t-1}$ and $\VV_t^{t-1}$ initial condition. + +When some or all of the $\xx_{t_0}$ are fixed, denoted the $\II_\lambda^{(0)}\xx_{t_0}$, the fixed values are not a random variables. While technically speaking, the expected value of a fixed value does not exist, we can think of it as a random variable with a probability density function with all the weight on the fixed value. Thus $\II_\lambda^{(0)}\E[\xx_{t_0}]=\xixi$ regardless of the data. The data have no information for $\II_\lambda^{(0)}\xx_{t_0}$ since we fix $\II_\lambda^{(0)}\xx_{t_0}$ at $\II_\lambda^{(0)}\xixi$. If $t_0=0$, we initialize the Kalman filter as usual with $\xx_0^0=\xixi$ and $\VV_0^0=\FF\LAM\FF^\top$, where the fixed $\xx_{t_0}$ rows correspond to the zero row/columns in $\FF\LAM\FF^\top$. The Kalman filter will return the correct expectations even when some of the diagonals of $\HH\RR\HH^\top$ or $\GG\QQ\GG^\top$ are 0---with the constraint that we have no purely deterministic elements in the model (meaning there are no errors terms from either $\RR$ or $\QQ$). + +When $t_0=1$, $\II_\lambda^{(0)}\xx_1^0$ and $\II_l^{(0)}\xx_1^1=\xixi$ regardless of the data and $\VV_1^0=\FF\LAM\FF^\top$ and $\VV_1^1=\FF\LAM\FF^\top$, where the fixed rows of $\xx_1$ correspond with the 0 row/columns in $\FF\LAM\FF^\top$. We also set $\II_\lambda^{(0)}\KK_1$, meaning the rows of $\xx_1$ that are fixed, to all zero because $\KK_1$ is the information in $\yy_1$ regarding $\xx_1$ and there is no information in the data regarding the values of $\xx_1$ that are fixed to equal $\II_\lambda^{(0)}\xixi$. + +With $\VV_1^1$, $\xx_1^1$ and $\KK_1$ set to their correct initial values, the normal Kalman filter equations will work fine. However it is possible for the data at $t=1$ to be inconsistent with the model if the rows of $\yy_1$ corresponding to any zero row/columns in $\ZZ_1\FF\LAM\FF^\top\ZZ_1^\top+\HH_1\RR_1\HH_1^\top$ are not equal to $\ZZ_1\xixi + \aa_1$. Here is a trivial example, let the model be $x_t=x_{t-1}+w_t$, $y_t=x_t$, $x_1=1$. Then if $y_1$ is anything except 1, the model is impossible. Technically, the likelihood of $x_1$ conditioned on $Y_1=y_1$ does not exist since neither $x_1$ nor $y_1$ are realizations of a random variable (since they are fixed), so when the likelihood is computed using the innovations form of the likelihood, the $t=1$ does not appear, at least for those $\yy_1$ corresponding to any zero row/columns in $\ZZ_1\FF\LAM\FF^\top\ZZ_1^\top+\HH_1\RR_1\HH_1^\top$. Thus these internal inconsistencies would neither provoke an error nor cause Inf to be returned for the likelihood. In the MARSS package, the Kalman filter has been modified to return LL=Inf and an error. + +\section{Summary of requirements for degenerate models} +Below are discussed the update equations for the different parameters. Here I summarize the constraints that are scattered throughout these subsections. These requirements are coded into the function MARSSkemcheck() in the MARSS package but some tests must be repeated in the function degen.test(), which tests if any of the $\RR$ or $\QQ$ diagonals can be set to zero if it appears they are going to zero. A model that is allowed when $\RR$ and $\QQ$ are non-zero, might be disallowed if $\RR$ or $\QQ$ diagonals were to be set to zero. degen.test() does this check. + +\begin{itemize} +\item $(\II_m \otimes \II_r^{(0)}\ZZ_t\II_q^{(0)})\DD_{t,b}$, is all zeros. If there is a all zero row in $\HH_t$ and it is linked (through $\ZZ$) to a all zero row in $\GG_t$, then the corresponding $\BB_t$ elements are fixed instead of estimated. Corresponding $\BB$ rows means those rows in $\BB$ where there is a non-zero column in $\ZZ$. We need $\II_r^{(0)}\ZZ_t\II_q^{(0)}\BB_t$ to only specify fixed $\BB_t$ elements, which means $\vec(\II_r^{(0)}\ZZ_t\II_q^{(0)}\BB_t\II_m)$ only specifies fixed values. This in turn leads to the condition above. MARSSkemcheck() +\item $(\II_1 \otimes \II_r^{(0)}\ZZ_t\II_q^{(0)})\DD_{t,u}$ is all zeros; if there is a all zero row in $\HH_t$ and it is linked (through $\ZZ_t$) to a all zero row in $\GG_t$, then the corresponding $\uu_t$ elements are fixed instead of estimated. MARSSkemcheck() +\item $(\II_m \otimes \II_r^{(0)})\DD_{t,z}$, where is all zeros; if $y$ has no observation error, then the corresponding $\ZZ_t$ rows are fixed values. $(\II_m \otimes \II_r^{(0)})$ is a diagonal matrix with 1s for the rows of $\DD_{t,z}$ that correspond to elements of $\ZZ_t$ on the $R=0$ rows. MARSSkemcheck() +\item $(\II_1 \otimes \II_r^{(0)})\DD_{t,a}$ is all zeros; if $y$ has no observation error, then the corresponding $\aa_t$ rows are fixed values. MARSSkemcheck() +\item $(\II_m \otimes \II_q^{(0)})\DD_{t,b}$ is all zeros. This means $\BB^{(0)}$ (the whole row) is fixed. While $\BB^d$ could potentially be estimated potentially, my derivation assumes it is not. MARSSkemcheck() +\item $(\II_1 \otimes \II_{q,t>m}^{is})\DD_{t,u}$ is all zeros. This means $\uu^{is}$ is fixed. Here $is$ is defined as those rows that are indirectly stochastic at time $m$, where $m$ is the dimension of $\BB$; it can take up to $m$ steps for the $is$ rows to be connected to the $s$ rows through $\BB$. MARSSkemcheck() +\item If $\uu^{(0)}$ or $\xixi^{(0)}$ are being estimated, then the adjacency matrices defined by $\BB_t \neq 0$ are not time-varying. This means that the locations of the 0s in $\BB_t$ are not changing over time. $\BB_t$ however may be time-varying. MARSSkemcheck() +\item $\II_q^{(0)}$ and $\II_r^{(0)}$ are time invariant (an imposed assumption). This means that the location of the 0 rows in $\GG_t$ and $\HH_t$ (and thus in $\ww_t$ and $\vv_t$) are not changing through time. It would be easy enough to allow $\II_r^{(0)}$ to be time varying, but to make my derivation easier, I assume it is time constant. +\item $\ZZ_t^{(0)}$ in $\E[\YY_t^{(0)}]=\ZZ_t^{(0)}\E[\XX_t]+\aa_t^{(0)}$ does not imply an over-determined system of equations. Because the $\vv_t$ rows are zero for the ${(0)}$ rows of $\yy$, it must be possible for this equality to hold. This means that $\ZZ_t^{(0)}$ cannot specify an over-determined system although an underdetermined system is ok. The check is in MARSSkfss() since the fully-specified $x$ need to be known for the MARSSkfss() filter. If $\ZZ_t^{(0)}$ is square, its inverse is attempted and if that throws and error an error is reported (re over-constrained model). The function to find the fully determined $\xx$ is fully.det.x() in the utility functions. +\item The state process cannot be over-determined via constraints imposed from the deterministic observation process ($\RR=0$) and the deterministic state process ($\QQ=0$). If this is the case the Kalman gain equation (in the Kalman filter) will throw an error. Checked in MARSS() via call to MARSSkf() before fitting call; degen.test(), in MARSSkem() will also test via MARSSkf call if some R or Q are attempted to be set to 0. If B or Z changes during kem or optim iterations such that this constraint does not hold, then algorithm will exit with an error message. +\item The location of the 0s in $\BB$ are time-invariant. The $\BB$ can be time-varying but not the location of 0s. Also, I want $\BB$ to be such that once a row becomes indirectly stochastic is stays that way. For example, if $\BB=\bigl[ \begin{smallmatrix} +0&1\\ 1&0 \end{smallmatrix} \bigr]$, then row 2 flips back and forth from being indirectly stochastic to deterministic. +\end{itemize} +The dimension of the identity matrices in the above constraints is given by the subscript on $\II$ except when it is implicit. + +\section{Implementation comments}\label{sec:implementation} +The EM algorithm is a hill-climbing algorithm and like all hill-climbing algorithms it can get stuck on local maxima. There are a number approaches to doing a pre-search of the initial conditions space, but a brute force random Monte Carol search appears to work well \citep{Biernackietal2003}. It is slow, but normally sufficient. However an initial conditions search should be done before reporting final estimates for an analysis. In our papers on the distributional properties of MARSS parameter estimates, we rarely found that an initial conditions search changed the estimates---except in cases where $\ZZ$ and $\BB$ are estimated as unconstrained and as the fraction of missing data in the data set became large. + +The EM algorithm will quickly home in on parameter estimates that are close to the maximum, but once the values are close, the EM algorithm can slow to a crawl. Some researchers start with an EM algorithm to get close to the maximum-likelihood parameters and then switch to a quasi-Newton method for the final search. In many ecological applications, parameter estimates that differ by less than 3 decimal places are for all practical purposes the same. Thus we have not used the quasi-Newton final search. + +Shumway and Stoffer (2006; chapter 6) imply in their discussion of the EM algorithm that both $\xixi$ and $\LAM$ can be estimated, though not simultaneously. Harvey (1989), in contrast, discusses that there are only two allowable cases for the initial conditions: 1) fixed but unknown and 2) a initial condition set as a prior. In case 1, $\xixi$ is $\xx_0$ (or $\xx_1$) and is then estimated as a parameter; $\LAM$ is held fixed at 0. In case 2, $\xixi$ and $\LAM$ specify the mean and variance of $\XX_0$ (or $\XX_1$) respectively. Neither are estimated; instead, they are specified as part of the model. + +As mentioned in the introduction, misspecification of the prior on $\xx_0$ can have catastrophic and undetectable effects on your parameter estimates. For many MARSS models, you will never see this problem. However, if you are fitting models that imply a correlation structure between the hidden states, i.e., the variance-covariance matrix of the $\XX$'s is not diagonal, then your prior can definitely create problems if it does not have the same correlation structure as that implied by your MLE model. A common default is to use a prior with a diagonal variance-covariance matrix. This can lead to serious problems if the implied variance-covariance of the $\XX$'s is not diagonal. A diffuse prior does not get around this since it has a correlation structure also even if it has infinite variance. + +One way you can detect that you have a problem is to start the EM algorithm at the outputs from a Newton-esque algorithm. If the EM estimates diverge and the likelihood drops, you have a problem. Here are a few suggestions for getting around the problem: +\begin{itemize} + \item Treat $\xx_0$ as an estimated parameter and set $\VV_0$=0. If the model is not stable going backwards in time, then treat $\xx_1$ as the estimated parameter; this will allow the data to constrain the $\xx_1$ estimate (since there is no data at $t=0$, $\xx_0$ has no data to constrain it). + \item Try a diffuse prior, but first read the info in the KFAS R package about diffuse priors since MARSS uses the KFAS implementation. In particular, note that you will still be imposing an information on the correlation structure using a diffuse prior; whatever $\VV_0$ you use is telling the algorithm what correlation structure to use. If there is a mismatch between the correlation structure in the prior and the correlation structure implied by the MLE model, you will not be escaping the prior problem. But sometimes you will know your implied correlation structure. For example, you may know that the $\xx$'s are independent or you may be able to solve for the stationary distribution a priori if your stationary distribution is not a function of the parameters you are trying to estimate. Other times you are estimating a parameter that determines the correlation structure (like $\BB$) and you will not know a priori what the correlation structure is. +\end{itemize} + +In some cases, the update equation for one parameter needs other parameters. Technically, the Kalman filter/smoother should be run between each parameter update, however following \citet{GhahramaniHinton1996} the default MARSS algorithm skips this step (unless the user sets \verb@control$safe=TRUE@) and each updated parameter is used for subsequent update equations. If you see warnings that the log-likelihood drops, then try setting \verb@control$safe=TRUE@. This will increase computation time greatly. + +\section{MARSS R package} +R code for the Kalman filter, Kalman smoother, and EM algorithm is provided as a separate R package, MARSS, available on CRAN (https://CRAN.R-project.org/package=MARSS). MARSS was developed by Elizabeth Holmes, Eric Ward and Kellie Wills and provides maximum-likelihood estimation and model-selection for both unconstrained and constrained MARSS models. The package contains a detailed user guide which shows various applications. In addition to model fitting via the EM algorithm, the package provides algorithms for bootstrapping, confidence intervals, auxiliary residuals, and model selection criteria. + +\bibliography{./EMDerivation} +\bibliographystyle{apalike} + +\end{document} diff --git a/inst/doc/EMDerivation.pdf b/inst/doc/EMDerivation.pdf new file mode 100644 index 0000000000000000000000000000000000000000..799d5444047980a79d638cdd8969d701f7f7f0cd GIT binary patch literal 472136 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

#mxEWqin?LK#$i>)z>9E;=*@;|9L{xYd);+@ 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%0DVB?$ld8IeJp*ytLxYd6wQX%c^n>P-= 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ƧZ_dY-_rrq}JNag+O8 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¨vkN{$0EU={Cu!5aAW?< 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%0A#(3yGKcw2)woY!RysU>-m-P^8X^oD0 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 D&+ii}axk?5jQ}pn4Pqg&ejP4TF#}tJola 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

Rekh8HJqeoe^dF9D|By%H;qmjrkSLkPWVbP1%< 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 hbxs-OKBn!G*!Iex8o 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

H3BiTUjNjqLeelZ~Ro>ACDvMqrw$)YbsSi zZ@!Xg&EXpS)TdeG)Y;O_dIc(uRMijdF+brz;JSQ7|Gtqj75;5t<)$!?LRMsf7WyLf zTY62<5*}9$NNZM+V)#iAr)#Y5jTQnx$Qa~< z@5L-Di#85#5N|4U?>^w1wu$O=dqS%^PT%(Met2)LHF=^5p+sw%Gj2$^hhstvW}7bf z?bb?ZAJ;kF)yDf_I0t&@18s1tLoJgE9qFzWHIFv(Go&SORSZncR%?RL`D)pG+;y$uL5r~9B zEAjZz()U{+xNQH8jf9ncO5%`5yq)<12_OTxy;c>=gCbizVqAeC$a3k6ST7Fhmq(WQ zcXfl%4*~!QE_@1MKTgZu&W-fMbe6#t03?fmMY<+r3<2vIfAGmHwIifgTWCN)d-W6! zE2K_TXh2K(;nt%!lvZsp4N>ipS-4Uy9V7qRPZ-dC1}N%wP%&)2f42SIzHZ}PZgpaS z%WME)*}agEwH7Lj3jtcoJs0rsmWjjALC3Me4eT#qI))-w3P5d|l;&50>>g5 z(qQiZ>7;bt9;He1wfKngI{AYBw>brbA1~N{qZXnpzy{KSM-T_R;-6V zK*s6Bo_`~y?=_PtF({1p(kT_k5|~8ypq`D*|2V~s0RKC2c$j7S04PW&(deYSElx&^ z#FRwg$`tZ%_iKBCS&kWk{bVz;_rwfD+r2n2L8FD0HML5+l-HbUwllh|YdHty6i!eF z@&*6#%ME1D!7J9sLCExU!>n~rn`y0WT4ZNPuieL~AVk(SX$nAe2dxmjDgo)hYRQ9? ztt_6k@c`famsm7n5iKJdqr%XjwQO;WRQ)#5a3FXf)?p+p!sj=nlyQ}}b)3y?h1!y- z9D3CXu*G7AxKWGOiUi;cl~~)oNf?_D`e5aPxT#{*zt91y`K&f+k{Mxm02@$U0~|u+@o%X$4>-p$$Pk$e4xWmF z1-8tUIpL}4^HbBcD!@K-i{jQZ$myAPE-qKefJdN5-(uvVixh>9z*QHt^vAGlxn$w4 zz3kO4mnWv`9sllK487pdnfIz@5YW?NQQol$AP)gvSjED}f?|2}bbm1XcO$lIXr!9)B4K{~hh)IQ&{7Rp}#;dlZ7WiG7u z8@aQDYq{vwZ{`|;QgUSCnEh96ylb2&bbr53uz6n!${z03yCDN1XR5AZi6 zyY|W(niQI*e*3>!nw=Pv^=W$yqmp_XinZ~nrr_c-hchZ)VG{ZKhJ#7-#u=>2@m zCcpm;HU%BfJ2iQ$O^btLiJn_D<1V-Z>euGE_a?AfbZ?>fUyXag)eU_roIF3OzxR@dRHt5rmQ=j&SrbUccE42m_=E;A{D^ZwZUl3MnfQ z?+OX5B10dL~o^lc;w0r#%h)^a8v~d z$otQT99U%8p!akaeh5;7u>t2Qc4{cdcrt%1aaIq_i752KXIU~tSkChemrLE?`xm2b zQ4ZO5BF$}o;Vw$OCIvM-19CrD2f<5QJ7qESeN(d>wmt z4;c4gf8a@(u34kHgCf0czOSAu$sO(V$Nx*mR+ZY7(y?Zwv3w6upAyrRDPG0%ru#mVj%oCuM@HXSXNRayNkC`&+=dY6GdK}uaIZDc#rQjx6f_l2iR*uU;v;an14xKCB*joI%ro=ntkQk z%2Ueao~o9}!bD_db&5>g0U03pP8`PCoeva}Dcrb|RC#K)Dw#UnQhZ^HKAeyRLCa9V;+Gl6LH5nMB zNu%^8hIRzpt3MdyWs?hn6*OAjmQgg*hO@FlPa#F2XJPPu;2Nv{imb>8*Gonf^;qC| zXvboo&miyC_xNbZqy@IEOgQtQh>?3Atf2_6i0&&P@eN~35 zk#-phzdaB=o&g!W&w4= z#`S`zYp9wqRFd7w9`KZmeJV(Jqb^G&>%FJKuP!VY3MKedb3&mPgjP|{p%Y1%IomoU zG`lvbex{*a58HeMU#vz4q_x`x*zSZfc#^RPa#eswTEa~^b2>Cm*($#7u@tH=VJ&OD z+#v7YNxhJ(8F6ywzj;FnFCcQVk-x4tR6mBQkz?k_SPUN}@hThBXmvzlK_(iY_|~rA zMMpa4Fo>N4H3LW?>og~08*J*iwV{GVE(Z*;&1fmUi%EpsU~`QqAimzU9&K_LnkG+3 zH_8Y+pl;SKRA z3r&y4TwH5KsB#BiT^NZxKZ?@=4Ru5u4$LTKPcpX<=%wiK$vItYV0XT6!O5-d$I#mQ zuQBp<&ZX4cgT-F#`WT`$HwDvN@`NZ0B#y=)t7GPv!2)LJI$_!WO*gxf#~EL{Dv3s=gZZ%Rfe= z83C)!v}!BP^3e1u08;$Q$Gvgy*%M$qddK#;DBQa0*r}0xWNf;IefTXh zE|ZR|f8trtDRS19xEM$IBd4KS9w#KEkjlqMA6z7-Oes1q&y1%aT8mrY$BXY!T7mGr zvfOfd^aH@WwJ+xGQfEJYb4$@Ax#q#D4Vx>pZW}G32bFuNE z?`zAIz62+rf})y3EIQlWO)8uSzEM*;9vsTExbZOtsS~>5VQOO2Utvmz6D{-sP7S&B zTjuIWZ1&HuNXbs`0+>ufo{O>}`wa36}9enRa)_xL7IVMvt3i_=Gl^O-v zl{aB)mZAxM&`kbV-Mcicf-2v0;#OCB+;afadJ;%W=1EHR=$1?5>T{GyV+(cW$%Ht# z8>%1sjPa3oEeNf|+ctzG(m4QptKokBJP5CGN(R)A##3}_zo*sPD+e}VrP3@7lO)Yx z1&D&Wm#Yk(M|gY{XejCdqJL_wCfM0(_{1^F(v*P(_85+01rkvDv2WCaGc0Jad>UjF)Y_m#h!OxJ@v0vN*PwAMR645Im4#xF=gNT3A@ZYr1gcHrn>~@K zZiqO&ZGtScl1dDeSOwsPa{^hx52zB`UAet_#qq-=f0i9{j2OQrzVZ~;o}9-y{9rYz zBHCh=C@OEDArhQ(sl@Z-^Rk6>lTFWV^s@Dnu9z3`K?sJqTeMCf!)jyXtT_cW&9$po>`Y@o)t7ijMFSc#7V%xV~d)$8LKX4w-I9zk@wT7OL zXR^!qU^iG9_q`b|OMU*hkzn}1K022Ir3ek}_6+spBEjfq=gfz3_H;k`trlwCuzskj z9yfR_wJ6fc!jP;bGo*n<@qOiMXV^Vn@mVXZ#q5Wz@G*{*Nka?SM~Vn zL-~gF7Ek=v*RGjCl>k$aTj54b7~t1ZyT;I;dg}Fs=oGxzmDeQqp#*VQD;f@0Qt{+$Kpfpkx!NuiOZ$cs+W! zDm^Vf$&YRqNW=b(&vPafWy#>NRL1+a25mmF3@YhOe6soD_+5SjdDw?6lfVR;4RoXO zh6R)kPzGmop-RjF`vd&7T~eby@-(pkb134+;8t>P&AgvvYl}4gQEWofgyI)O(p9K? zOv`~xT*az*3>R;Jk7(~W%RXW$Y~fWzUC_uYlP(bS?7us-+TT&qwPGy;`b}IdJ(=KY z?`z*HE=%>NkVJ*dTxnOpHHg(ky`)zgs(ue%8q)A50B878&L&j1!;7o7l=r<$$qpm>Gb|*+mxd+Clf8ORfE)-^q;eDhG{U2fJ{O0h zCper>yEBRgeDv&BXw;Uk)1<;>a>Zyk%8!v_KaA$jM|=7J1Bb{#Uxxu01M8t)e$XUf;?wo1DJF(ex3si@LiZQLcve=}_E3N(lq zErrqDo%I?iS(nR**eGpt*sjp8so&55YaduBCVuubWC!4>`Gq-47P$6(TNfHZ6yO%xvTfaL#>F!tI zvUiISj^zdnAa6;sOEOMfMO>bfGkja|^c`YJERdqVeHglZwb8|s$4rzaUMgkt9`J+*feRRnw zzfQ1PIs7(V{+G8FD?Z7-&_rRd9toJ~_rE8r!ZpO0XA`s8=+9;9XnY1hT`6*XQHDs3 z5n-8gZ2c>hMq?h)G?a&+^@G&N?=~(9A^suC_N=W%jLAzVK(zx0+VXR4rCz%PdJ_&k z#QAQPVBSg(0$G&}2k(qq2b2#k)+xpDIf$2w@f*3jiFk~cCE60C4b%bkY+X>27Hq#xK z^5Qh}NIq^ycg9jj~u9PcNv zJ^JW_I06#=_!D z%y7sXP4~M3t7C=?fyq(R(ZhY5+eB9a>&irtkP>{JU;6`X8|^*(7gEFhKav`DZf>^! zAT`5!(($B{?#~^w988e?d-Bq{a>G4vOdNE&VP^3V38hA$MY*8E6O{)MW~u4LGW@+e zj*(-r8Fa111VxDYQ!!7&x;<@T-}Oi(dQhKf-@BK)5yOXBgga8+ol-yc&(X8jJHGF+ zG0|EQWm^Z=`|vLbu#7S{0|T_mH1?PtADp`wW!@bNGil7{B1eMqcdef5xw);7z9=%p zY7K^tsS|^F5*W9I6OJHo4OMX$gQea8x-?qb+X}`Wz7mWDj7^B2IJTJwm(W3}+Lh^-#XuK*S$ud5-%M2YE*7e^^pJ{t%tl++BIo7;`XIAMm_9qgf*73Rrq@0r!`IyjZVETkDh2#{=kp zwKro>!6L2#el5H5PEtx=;8YU{!VTBjWV$Q%6^6I|-bgMT?#~qg;O}qrhh%Ihfc*== z20VPv%}KYMJbZ9E`A)`!-lUWCX8OWO5AhmquF(P z4;ol_T96F%bQRzwL8**il`5_D&!V2}%UFm0fbJ{jbaD4XrGNv}on6@( zQ(V6fg+jpKSYUu`Lw4Cv@H1QAm@=NYD?7B%U&jHUXTZ>U7*Yrj{;jKSNL>nIdUQH|zWK!5x zNV3PEIf&&pTu7ci#Pi!B+E3E4Dsw2H*R}6v>Ku!HfFH zR1Os0Pq^C5wK7klc8`a{?L9GlGTkiZX|C^H<&j>Iq1E3wm4vw4Qp5fX2=nDy@d06j zvma*!ft^)a@z%5>gqpAsOZeS~z(g}h${uS?A|29+y?9Ch@3DDfos8pbYfxkIuwOP&S*j=nUVEX#skcEVkH(r2mDn z1uNYnZ!*%CUdCOccr^<&8f*#vh(LjX+jj{@1sa^oZro%v_KbIK?vAN&M%}lVNf{4S zz}CS-K)eJ&gjiG4Ih#e0gs88&i}UlNztBidn-%bo|3>N#7qsjnz7W+wWE|Tuav%-^ITRxFw_~LlZSwjN`Dvhz(O;QhcqQ|b z%x9^j4H_l!srC_^l-TB_9@LQU8?d@_Bw3@EDL+G0#Q>ZnR4e$$ipQMDcl;{Q@b5>z}B|B4rz5&KsX zCxsAN<=o}-UznP0MH0}ee+fc(Ng3Ianr7tkj? zPD*oqljT7CZ#~s(qqpS;4F77Dp2i8_(_D8ziMW1XQ09l_-yrW~GjQLbudJZ+EM`1D zZbe$gl84!Y6##RI5fPcrRJ@tvuk$-U`+WNL(){}88$`3Dlkd_mx~NcY2xf{d(QeSt z%kvBZZ{;uClz(E}cVBwD78wNF$6+B8fe+`18H~^ixPI(6S_lRA>E1fLVH62)fr3SH zuL<}xh~jQ@SV+sdU%n&(*s;wC29*Blc_hNXoWu$uQPcEmj)A4(i`XJU(*VQEk9}^{ z_l{eUlWRKX=^s;=F}}v7P&tf*7-C}LDX$3)5?~og#UVwB!5S(Y>`<{XV})nHGGm&S z0m)=ZB~cKr$^a!y$oJT59>9eTP=G|vk0sv{vc3*U>G_fZMDE4oQpW~hQ`dz2b8fJ@ zL@8OmDwOIi>C#8@FC~Ma-{tLNAryLJ4{6k&zo3jDx!BHNVZ1mRUUK;Xw}+rVaf9K!ie0EWk==>2kFn7Tu#8jni78-wpM{V{7$`sJb`KI^G@ zO4CxNo_emy_V=1v#2%H-1%Mu5pr1^{G*%D>e~sP?j%Dd)KH>O)JwWDS^ddT z0IVKiyn3=Pw%p88xR0wBr3Pe|_2!;_ba4MyYx13*d5aytszvG168TLYUxk*_c`BB^ z(cjkC065h4A+HoK=A)c#e)XK9F_h%rgj}C#_I0eGNy)n_d?i}#%V@BQ@w2n9Z4|2( z+YgPEhYbR)z52r7Kx`#vrx6Tm{&gN7ZXYaYgjYgF0`|}2?1TBPn6!G}u1SGBgHCH9 zgmz#b!d!I)PbGLHz4cdJk0@%xhdi9(icRkYCoJZ>t9waBAYW_`IM8^o)~-+P(01S& zDXv0}25Wrf!Q&Gld$L@w>r$ISp(o9kbH#e6x4@VK969RV%%}H)YvRD1@WI!o?dvH! z8FnEFE^al;R{dB@&9HI_Gomkumd+5e+TzvP{kKd?%=zBg+A~6%XA7`wszx!Jk2~g1 z5%@WYA>ziZx?yaSy)iG$TA8%L96j*NdUV!!_T&I&EtE3<^i|&mKR*k8oN7jzsk9SL zM#W|0C|F@sNWG~VVY;eMq6iFnAWK2}Sh77<%Z&zMa&B8`rjLS|Vt;+>L9Hp(c2y^r zK)Znd9!Ws35ttkVuHPw$Rve4o{c3ytR7YSd+QLCT# z3L7ImvuP+*6se{;#%NsnthYd7FAUwSwWDHKXPDb# zQ(_`P-QLy$+e-inM8Z;xNjXpAd_9}c^gO(<%jq3e>RGU}hCsYh%XjW)SO%ae=6mSK zX9Uo6n-QyYBaC1M=|#ytHcX8o*cbWc%qW<+%<0WormFHE!AppWGeiqc2ANueHe51n z&JFmhepNiW$n=eMgj%CNL^S>=zSNAb0k1ui za@&?5R57c+$_ZZV_{LZ$TNhea@wap1m(M+CF8UrvM9(RFp!KVT;3wkbbfbgZCZsGr zY31c!IYS@taRsJJOyrj>VE9VCDz5E)be^M1ZrPmp15U;}l@Gb(kchNq>)>do*o5n@ zXJR$ZP%LJi+@>qMXCmc+8nte1m`H#{DyWQ;-&livZ)|ET7?Y;Ad86}(7(8D@pd11RN34-uQabi}a` zROkV{gdc(kziK=|C9omC=cuC*m`Li@c~M1mSh0w+*9b;r8ZbpiR)pyiCe7Qi-ls-MF9pe6#GqG34noILXG-K2`;VnQBs<~4$rHi zf*!3uu-&HS%gG5tox7r?d3&noM7Qnzzq6)ezcAgTO+Y|H%TmG-o@*#vUN`)+S%A-^ z(f{}lsdd-IM0DQ0Z+($zi^S55iO!bekMpmcoL2N{Y3pCj48U4-sLlV%3W zDE*@H)r;LRUR2Lt4vRIFGQz`7)%LB;iQpL-JkOPHMne1jw|RSznJ7MUjQj3KPo)I5 zbTeL+3{l8=H}u{B`ZE!9iLvqk=9)3hK5^|gC8~X-8iL{ii<@o`rCu*phi%ujyQ?9; zM)-NU7VS=-lbUZfSDZ$<%DASP(LCUrXv9rxoOD?)beD7LqLlllYDR5FUn;V^{%I~J z1r0362$AHkEA{tB(~UW`UrW`qdZj+-nXhJ%KasZ9Mdxc_~!w(Kd^0_>Fj?SNn zu6iNb2JD>+X`p_F^rR@%7NC@xcv!wFBra6dKKEn{$l0P*ouWn<7o(#9i@gfDSa@CV zl7&`?PZ1Z0SIlmccn+u+m#+2a+k4w$AdblMMJC@Qe8@7GN+(Xgzg7 zCq(d%mx|WVdNDNyxxqm7`Vv@(!zI@m>JBxJko8jyq24YTov0}VsSsCd@MN0w9h*jO zRUE8a`S`#(5ip`uN7HQ0Lg+gguyYfk#r~WbkGlBXvOl`9=to{3&W#o@o6dUPK9@SV zd4QlcYmp~)Nm=UgYk^qmWU;vjG_c;T0`(iMGT`-S*Q;O?52}a`ohATL0azzu(U2Gc zC!9=29Cg6~Q)|LC{ycmt4COiSY;-nB)4oRqbZ)fU{9TEmw%^{ zwVmeNy}%;Wb{>VJ@!l3>p_Q-U$xdLv_W2g=WDmdoJJI!N4u9^;m;09%A(HdGS7}%N za!2XU8i5-K;BAy3JjwMdO5v9;Zrl{5AqSUvU#kj6^TVwKqVNjz{AeZY@1lpG{u6~N zMXHulsvVAu%KkK~1`6QYrYUfW+y3JxT+#dLyzPTj|cU;M9nX)R+aJ=KF?TzHL2XoGZ`|S^OioVLe<5uT+oS*b%9W9 zWo53c{e}L_?za|>lU5A-U$kXu{FTY)TBsw%vYOz#TuDO=)aOHjjXi~(nsG|M$L)Wy z8T@)DP+f=PKC|ej+^)9!YfZBHk`~^84r){h?lXFECgvRcv6B53ZjyGF0 z*nEu)lKwWx{7=e|BrSVnHu|fEKF%Sg(4!km2}c`&yjUB-!7f^%X+j7RuKtab2zS?3 zK}T`%1I2jIif^YU!wVYGfnlnm-$WW%M{55ThT$Na5GH+A@PW}=o%j+^^!v{7AT^}Q zzety{=4o8!pD03bm5WTcXf8_+&?XD+U_tWw7t|8_inRG#=I^X;L{{5^LqHPI{)wgC zy7*(bs)n*i>GXhQe79~DfgZO31COj{`3jc(vArIA->rh~!NvEY8x_jrNtnf|0!v0N zrfGC!27Oj+y*atX*uGna?!caGP~^BE^)yV0(_lI+;jl;l?N!l5+P4{G%Uv&JYHUdc zQ>nk1P-p{oXuL2>%x(VlZ;Zo7DQ+Q;eo?V#4AiwJjUMnNBEK?Ia(aU=Iq;nsA$1F>}tda zy+vbV2Nv@!Q;xC$?RkfhJKnSA+6ugLXv)y(KY@ww?yVkd_rpN_whhx9z8@$ctQX&{xqo77&O8^Se|={wPe1)^fe972$3W2 zYRG;tQbRRVyvPDGiLXcUDf0y*()1m;$HHe#Znz<(zo`pbp63b@{mY0hIEK}VCAAV# zVBH3_Wju((7en+_u7iI@CiZ?-qtWN*&BergKCQd(X_b84An`C#HQS2aEs9VgPO?A; z<%qWHrk3y9nqe*;Kz`Z{lbD>^((T_+COz^%FF^pC*j{yH)ttO)xl&yw%Ys0YiTz94G&4 z%nJ>r zQZusQt8ART+3|({`9>Vij&Jz?nmsqu|ESq>GBGj#hh~5E&kv7m)H(H%a<&Mu4`M~A zw_;?2L479!#Y(8v+}R$7;|$m={UZFY+_XaSZ@P~?m$wUi%0s((fbVwzTLcDW42Rc%k@?W>0W?mu5&?0ZfvZ{T2VzGAEs z)&8wE=9y{d+A~3?(@>Mm-sY~t)y3b~4q9P|Ew@ti6CNn8!W0VQ+Dz-|b)8{GZJk&c zX;Gg^Uwch!`^7+R*J{#M(p{NJ9#Y|WA~SGMU3;CY(`$B8Iep-?6&ep;?frozJzFJe zw_0!0yEEX5@tsn;F~A78E;|;8u`te4#OF4uKPH|bt@M~&uKalfu|gyyb8Tc(4CK(e z-6(JWzWKEf@akl7can*Fm6GnT%*CCRX9s}_$f(UhURl)U9nVJ%=6HpC;x;1OcB1eK z+$gnJ&|#hg94$$mHt$>`HlK8ubz;Qzn^n8ZFz-J20oEB`!rgyO!XwGqW*a~O=U^w? z-yR79bAqIu23HVZgo8Wj1nF^&R{8g|tPRWX@f8TxZQLY3v}*P0&jV$fnZ8L~RbDx3 z9zg%oLJweL*Gkm;9>+j zudDH4Pt@R$lp#zKP`nTz7T^M8d{6s2xxWHY8Axj?9AyLnilR7CC44My0$#NJ+gmxmkk_K$7YMY0>|6_`hpHi*X}!t5I2;8))dCTD*;PgA5E z#$I#s`xr;!n9ftyV%QKgQkNCEfhJK!oujjt(<9s*WC|qHCXaCug_ZK8Osy2W6oWLp zL#udE--U(BU2II^Vg1Y6nk}AS7d#Ip1voP}dXN5ZNfIjbs*P8ED-0zHIQ7V+dagMF zh|>s{uQQCS;JeVoE&`TTn?bDnw#~*Uq{fv2c?Q8l*3Ul#tO+F4TJ{m3_P|O zN=eN`NiTja+if4BKa;k6d3r?~$7cfX9LwLEk8=c=fM?<)$vy^;O?;-d4-jWjNfWNY zahy(cZC)LGYo9n3<7J^uM$Y)nZ5|tRq8FCW3pZYm9EY+xXdAko`{(w+idK9H9&Zhs zwWWe7Jm7y}niRV82+vR=GE1I(L{N$o=Z2V7PbR1uE9vLM=R&7MpLlTouPJm+groHg z2{ZmlxdRQO#5uOBwE=RwUVb#9nJJ}zmOa{F?5ZRds^j!ABO^+IaJh-oN?G;Alf_27lO^@(uVf)6uOm=(d=5dM0iOQ@& zjx};t^*H$EVW6bxF9Fmf`a(*jyUVgx*LaE6iVG`PVU|OxV|OWf7EaG1usr@^dTDJ4 zmI>`dMOLbmW`xAlLu)X_w{x{S;iUuWi1c_-PcEtwojC0autV0ZQ{;UX2}^;ludJd> zN>AxXvoYb`Jiv)h4g`Uel;*gsK*!&8n{0C8WLIi8P&g570@M8*e-MIjYqLK z=l#K)F#eA_Rua7_Bp?ysmTVWyWKtZ`WMfBUCmb2jNOmJ7$uDKZY0XYJwJFVrbXFPh z-huhn?j`xeJ@~MhwqTYAZ$ZzZJr@P}`-V7jr&@D;p^j$K5O7~dGAs#U{1QPHILZml zU~>92)_$qK08?-KF|2Qw(fV_-5oG-ds0I+l*IyVlctr1m_f_iAo*e1@n&L55V)o4$ z2=o?7Aw~tv?xi*mT8TVewN{k*jlf|XJ4yp9@}WCmzC!zqtRNVBF3`DfeA6W&FF^ey z;m17g8=q?wJkj$J<^ZLZg$OrUfYZjXJ`l8BTl9#G`kHv7E7w#>N$>@IqCHVj6!)LT zS*$3b9w}1wtHH^L3D1xmi86t(yNIhQBkGQ-&IYp<$jNqpWQh4A9KM2J-m}fHdAB}n zwsvrzPQlC67hp!5kZxiy8#o#X!JKl9$-zJnTP`S|G$2zewEBs*qo82bYe-mB+xa@I z6Y{nRDjXs()Ip$+Vt!)6%bB;o;=r{5gaz{12nU)h^yDs6=4grz=Oy}d7HuUK1DYHSpZ$Q z=|K{3JHBh|@13E)`h8hpep(DWcAU}bpUa+Q`ExG4T5UU`z#;nG`t;X_E_bXDPzMX9 zd~2@8Hx7MY&as4a)6MiWH7GckD0cB@0Vv8D>|4&-#f^xS?93yV#DerQu4NFn<|kqI zI@sJW8n4Uiaeu?iGRmWQpF^Ix6OJ{%A&re7{PA#jVsCO&ze(RL?;@BdDD4RL_#RLE z-kcuooWzuFAIS00fqG6)Za#=Hk0ZhhZiOTYAjrZVRMs%1j*{wylqAsbMf(TIq87+> zJhr3eXYF`H`yz4-D)kN=Mp8$gyc>K7dw{Zfu3W_88vq5jKgMlP#SlDd;q}TfyMpuw z;S78zWj3Zdfq|+M`lA3KAOceypb*+hB^j8p{gk~%g0AGDgbkN+mCxrAQpbk9EGoV2 z6k8BMl0{5f9=z8`M7kCUbEqAg2rZboF#CCJ8sv*jhxe5sRN2%NfLAK0iv48UR(>t##Yet8nDGK9U35DwuSaJVdg+B%~FP z3RM^INR2(=24qyTio?^cX?s}mHEaaY5c^zqSB&62+iB6q;g-8Gu?9~W@eZrA(m&5q zh)DO{ka-~3o;VxEFdZQMfQ3lgdTS{df95*Ji}HfN6)`vkzTtGPzeWOp3OjnL-obRa zET}z#_|hsKh#t$LxxC*y`%oI?i9{_EB!2^e@y1y2>b`9ifs3H*T6PJV@|1E8E&E72 zk9?-c%eb(tHvWOWG>fm41->B8W!l$&pBJI?( zxF!2f>Me2mm_9oiQAAdefU!;h+RKh7aJm1vN1G=u#}by& zgGpO_b^)L4_|0OU_8?mBd0Ivw$6QYK_cvMkh`9>EBaJnXn1s-0qG!sS-g={^+}*I$X^$by6X zKA|Nu%wsbF$+UKMud{?|_z`$j0Y&h!17VaFi&sa(+Ce-9P*wOl$4dkvAjLeeN{wz$|rtkCA4dv{~ASx}mKl zb|YRQdt1E?UVk*}x7pVff|KVKMj=#uTBFM^Jy4b?=Uazq4=F_=EmE|L$RSo@sO|O@(Vqus2s*W1XY6USBbdK$Fpiv6F4AOm|I` zVQ+1hqMPiGa8UXew;Yfe7OHpy3R*Dp_g`U7*zr3^i!9+;Hj7_5rmb#yK_Qi=>!D>_$ey$9HpAcX_bZ&-jG92LpWk;-C#j?WpWysd9$iq zSk-BTG^0-wLXL=Iepo}r@_-Hd_wKST;;OrL{TdNu%+9jO=`10zHI7t%BY8+uG$lW` zh@oEu-bgiiErzveRl^KPlg1rUjOHx0E8rI>>Nyp0S&5iYxp(RYRyR5p>QygSo1&Ma zC~gL)VlP+v$W$Vc52`0;6{UMZ@m-X=vTlXP66g{2z4{-P z_iIq&fMnw^G9Ok}@bt!PJ$?8^8{qga#d0mF2tr~C@(_jh0}3Es-{8VH4s^mY3upjI z1<7J#7?L7a5TB3QpF<5}%?LySq=66>CLhrSCX=rYHcXO2@7xe+bCd-Fg19UKo52vc z3H2^|A*?Zs^I%YXcCIZyW@8g}xX8PPWqA#1h2@1GE-4LB6spgt<)@2J&K=GNd%gi= zOff%DX-;P6=LqdK0+A-n3xurql(Rl5hwZ!qNJp&7pOKgK}N~+k?7~?zB3-WxVDEbKVly=k8xPL|8h&<&a zovFkb$c2U!nMj5Ai&G-X0{L9TQFipr&kwV(ogB{QjN~$SC!lP}U6sRZ82vufZ(k%k z$f3A}#~FIh|3t!C%>QZM&c}2wo+~=$${hTJq#Q+lFw8zrKaJ}9i);7}pLF;eL&01b zVmo%*-Ps=(f1qp)e(V10%K_V=gQ=E^0xjN`-s-|yRQ0p zi6?)1Qy=hx$=t6TLcHK+B(L-dpaqFE9Lrp#Niju>rW#9zB{!?9Qp5x(T>* z2C>FXTH>S8nFAKoOUa*{JweGhmeRpC-9!)2o86cV7~!t}>I_P4r@(+Q>K5 z0dX&8fzIJt7!le&G~y%;iWle4imro`kmEJwZvpgm{mDDcXb(mcqcCw<42#pg+{AYX z{;gY%lRpbo3BjV58EyBAVeTgB%eQvN)9oVhE|5Zs+Vs~Ro4?zjn4$DTrM0EHn(B2K z9}GNi91q14%ET8S8Nm_9u^MITBX?_`H`ADT%S1_Pi_$%Y-bF?JAV~ptwT6ZAKYH*r zzGBMEvKU~Q(sl2Lw&ind+jom%Ja7*Y1ilIYC+#ABZ1)Zmx*B3VEck~T3)65N?7JXo zV3K1~65_+={4PnE-8oXN#@uCG#m|Ym@Zynx>xZhL0y_-;TIjbpAkUU4n@=AwPAH~h z;DbZha+v46C_0_C_ZVh4>O4~@WYkNC+sgSX47E~XOqDM!)eDk>j&8M0n2=fG1T0l@ z>e%~4IV z1jv_#L_XM6-JP$bN`X6(l;lTs{pA+5rF{9I zcbZ4GU)nsiLwX<*=-n!_7Ct~5`C!LJ_#pwQ5ZcV^=j7m8$5ICYqV5puR)9yfMfNc$ z2A@^)r_-~S8U82x3*qK??l@!Kz2j*#w{>!GC)tygu9^N=e zI|jcotCv^sT=c^P)e>uGHx_o>?Xl1^Bh7|vdiabN?HR9*61&rctEWKrSvsu(7o)ZH zeZu#YomP3TFOE+^1Yyg|#Y+vBYY!DN7u0pWU*k?QAR;9#PF}b26iQPw@gcu2n$zn< z1ZFN|u<@2^bS8zAk5rh!#w8Z|(t@hEVQk*Sn7yA^EmZ~Lmn77V_%BMa_SMakEy^Tb z1hk}u12KcT+3Rd?V+!dTxn3sLYBM8|EET^|xnmF4?+_{OUQmYx(e^UL?i-fFU%xlt zY3(SYki3Fti8@ZwNA&>)betc4$-%gl!Qfn|RT7XK5N1L=_;zqjIf?tLxEWQ^)DY4A zJ~KIM&rd3m)ZF&`LjKCd6fFb=BL*rN%=sbiZI3i4u!o?rpYbtb5=kgT%tMJ?Ux5ceac?K$B4=!=Y@^of+ z({K>d2Vb0SpR<3>%V1JZoe5L89-(L2I^1DwoCo?Mz6y1mUgGHBKnk^;$zu(Mc18`C zRx$HF4#p=RgMUGuv{@V^u`qOUxN>;$E}yH}LsNUiJ$W1DqY$FqNM4aj`_63MOvjx2 z9_Fr2e&c6xZZAhs61FqbkSjWJe&Ui;pXb?Z4r^z`Uu$u95ww8!7OKIT;|0_iUuoa8 zT!e`Cn4?O1GLW)(kG7Qk70`X2s{=N9#7jOHp{iN%#> zE|D_?-)(1x_$ z;(}YaUnVfyUHHrCyeGUY=$a`?=?22{4DABTzf*rI_V+$KndD2ECu7DGFkU#~n~7`Y z7X&y3%hpKua3dO+VKOCAT1+^C@1wGA^D^A&h!ODa3w0bxw=^wMV%p90I0dI+9$eNr z`r|k2r3McG;$vW{n&awza^jPXOGJ_?qm|5WH!|}{p1e{Qan(7-1OEj`e9S69B+)^H z;f4Rf-Ul%&Oqjj7b`S_3$)4W1bi93>+Sz7n+TGo=kHuNMhcKMYr~yuLV(Z@KtjhYy z_BG^)rww~CHy+X%hydw?4ZNAu=yGZRr;QhS0s%VU-xA2%>dpVQN!U76llgPuT48cDf9la`S_^FV(20IF4!eeJeMbYFd}iSdUCYFtZ8teu&Nj%TH2qc z0bgA_J8csz?e`;0yehc2>A3md>Lb5$UJ%i7a(Y4P4(?@KTOX9%QqFRL(yb6|WDStN z?2+?G7>1@Tvz$0gX0eusq}s7g_}@i3@Jx%TFi$8|4d;ir%dL|m@G9IiUdV43%0gtY zZ~L}VzsDROLk{<_s7CeYQOuV)i(XK|mN|pj=aWwmre^fUHU_9=j;IHjMD>DJ^68X- zo`op;n&t8zNnxznJWU!u{$f*s_2a^=L(z3)VNfOL8m2=Ugme&ux#lRWVu7HxzYunb z$y2#nJjUdzVC3TVj3oHt1SjV2oB?5ML=K3__W13bq*qu}-+1N67OxbtY@Y!BJ*l-4peJge4? z>#zElCW9T4DB<_lUmz*^-kLrlJCGBE848R8DeDyqR^Pn>HHb}f7ha;ZzI!A)>m7YD zMQ3@IIRdcUELD^HTJ*_{ArF@)v0VM%0|4<*jgs)_nI^+rmLJRI?NKxTpWQ|7Nx$vh zg`a;J99nOU3dk_AdGfANK%YviFTN!pqAO#Wi7L$ba`h6lsx(!8cbetjN&wo%Ke;-KcnR~!-YT^{;J-|gmGN0NGXMf#K%Lp*bJ>s5su!00&EGbs4cUO-o3${Xg4kj`d~ZX*u0CO6BcC4%W-p4ImmRapAxjKKp`g0|s z(O6+#rIEzJZf@fC+yANb-KIOxF)Iw_9&q6wT$?S%??$gvL;cv(6FQQYHKOyYM&A^p zx3ofcJ#6GBC^mFOMP^m2dP7IHw7#L*y2vP{%Oa_@=IUN?Ok^Hm#g zvU&lZ*1V#lZrG#0`7Ad=^2e|#KKT7#AbMGqksf_aNQ zHoT!5@QYAN_v_}`(+PCpc5$%gCsOmo18_aK{Z0J-XzcIT_RJ{HL1hkQ@}tvBsXjR& zY8L{tdHL+=>3=^^u)Kd~rxY5z5>d(YcX59wzNBE;BmTqz1TnnHQF2O5R>`ayqWrTf ze~lx>sS_lR76ml0F<8uF+@}=VGv>#DSql`6R>M^adQ#$DU=`#MRA!}?0PNbx+YcqGIC(`M5SXs3;LRmArkFolFVFoDQ z(V#N3^?f{2tp41>XXE#|0Ee+k<*Vz5h5k0dC6{yyEXXoMM!OQ20WFxezQ3E>*NbCi z)?hHQB&aBtqcH_|9}7bJzOm{Ty+TOPH`btSL88b}Y|8`_na#Lze8*}bR{C~k{hKgE zylo%zrKDC?@`rr#`5*vaCWRTa0@0XUS%?W43 zu{Ov7QzlLs;+ktaOOvXwU}ovoxuoxF*m;(r_1(NpwY7d+jQj<=eE3T_R)=C5ys^Uq; z>h-D=8`xmhACjTT3;+9(@pPrCSOx{*5hGkSryWZEo|+f~h=AmQgub1?m(ZO167G~s zFJ&y$^t$Ze#Jsq(9c<$5s8h2A6=W`|WCqrw;>Q8u0{dwk$j?nzxq42x*R29325~O< zDNtkcX{Ktd)eJ1uVwXM~g+`#|F~6xq8E~BhY^9&{Zc0#_!G5s}FmdQ|SWF;={Wl@| z;!Hf$ETD5%x`z^5-j08RXgoUl3{K%m54g!L82gzmGg+HiD@PY8Ai&HiX0wf#S24nr zA-;B_)aY<7adx}O&RCfCc9#CIPf9Vi&}i{%H`#S|I;0a_x%evwr?OL&Ccw*nidRBl zWCfZIDcKqA0WiN1;IL$vIh231bV5UQQH zcWqTh*;!_lxnDys^mxNI$eawY36al6u#R&GA@^E99%EsTJdp!w^PiC`m%EV;jrXtI zk-b}FS=)x2<=q;L^~0!ohQ2F55_e*v;%d{hPIGn*TCf+#Wn;?{qdc$MGAl(XnKpI} zRqj_fc+*>A6Llh|=9^?f@P7 zOZc>~h4V5sprx#ozRI%xnWU}QanEd0G?ka!pn(2Xh9vnSvF} zjz;@eB$sJDP2C~QqX_b1t;nkRhI(H>4=PzNRp<9ctq6feyz{z0i>w8aP6g{=%ZbZ` z*;6s}P4VGP#flv<+bgM`7;GQ;zEl6z{l98$R|`Fefc3-}y`^=vVr36h)eLf(p#Nj+ zn_@)?)-{)H+qP}nwr$(yUbb!9wr$(?+OyAOUQTk8J1><=y6fprI@KRLHA;YS)u%N% zK1Hu9w$VLei~n_ZAp1Tl;ywE1Xv{`;Fj1lhD*zE&&+MXvB#DA4ck}-K#gLg4hkG)% zoYx!t7OGF1t|+(x3~HvnwQ&qiH%MdO-#`Tr&)AssH`?_M;^(JWC|SHI_7o09i^DMi zxUebH*g3fz7rD(rdw;R029Y#P=N%kDnW3q}kz+Y-HszS^c?8+u2r@c6HL6Tq$UB0k zR%m&5;VKAsEE1l?z;}S^_m>Cc^IeZ2%hQLV5Os-=bn&sVjSvWtJcT0*AuMABmXLa; zDBsR(wHk4q$!OMk-il%a>eSTD3~}QCH~upSC8b6z$%uwNollvepN5wOHqp#*DpXkb z+03BjP!UU;nu)N$a0UWxBwh0#Yj0CpA2yEp60T2A@sZA*B?I5~T=&rSG)LnD(6K5< z4S$OW{c$N_XiM>PsO`(F<974DjoWRL84BOzwC|S>INrbq?K(87-Hk24;9G( zqqM!rphLeKKbDDx)~PYUkY*>wLM$O0(NP>WQ2G^lC4Y5jKmx(U)9u1MQbswPb&wBF zr2}rw_n*L4?wfCM3qQKYQwo4CSO?yCYQka=X)0zMk;*a(T2nTW#gd~@%3_?u^A3|0 z?;%>y73r#-*dur-VF(`FPPjAoE$27seOw~bA3tl&knQm=;6!ZrG5qRcTKq4Q3^y26 zgfqyc+gNidXCo2Y6FJ%*NAx9&8xBXBuB;|~ZY#-+@)XG}ETtp#a&SyhwwzWRO&iem z%3fz?(XjRcO(i>uva+!|x%ju#DQnFIZ|O`CJQ64Sf`SYuL2zZTSDpG5|BQ+&6UFYa z^Ud6E3c>lW@T|inOqzTGm-B~=Asr_PZ_Gy+@|pv=VJKi#fxUJzEIIg(BUN@_Yt*JYPrXv0+T!CDcXW+C-(?k{^W15;`4+7pBBm_@_fxpjHTd=zDpTu(<1 zu1is&a&lMfhxfl*m4b6J_!v4Bs)i1lO}%oUHN=O;0Zzgbe4YcyW7@1=X~8ju)Mj6A zc7KCW`Q8yl50K}@L}DTTezZ$W2p)Gx;6%3P>dkj)Cj*s~j=rsv`0AlE&;XpuzSK93 zgOMuS#O3l$6LI-ZCCuKnPnXl%;85!oT(vO$7FD*oRfsHUiFJ?{gWJ*_Q1IT~c#dfU zg0Jt|(#jpug|{Jc^3>NRtn&mb+u3uaaGr<|>au${8Qb_0T^JO>Q3Ka7H2|w@QurC# zKXT~(yn46@oOg;=!KMa*0KAA>_*7C_`CP=w@WoEwCBnRTN=bhD z&h5zEK*JD#{yarWGX(rqi4s8qdoOkhQch8(azFVQlw#Do)j$+lp-YC@QC z+<$#~5a|_Vz9`~k0}b!Tc}!sLhe^i)dU~gF+jSjyoEg}jO7=58UF=6xMq<$5_k!d1 zhnOyyB1tzVNu@&*9{p@k>WAJH+~D~6=PGcXJ|5VB9JkRrSh|-#rhCEQ#JIFu$hE-z z7j0?ZV1mW>3$0yq^_aFEib3AiOs#2afk9xl5a~JE$}%v&#$i$zvQTK-;i3< z9=EW-pTp8nhMdyW7TBfeesNK((u@bGXckt(D&U9N(87S+YJolMl3ifoAZM7tR&T-g z+hLA`$I~6-RQLti+N*L_z=O8DEqsB*IZe!1l6@G-gDFI<_}700x{3@B-`cu+Dcpr< zq66;Z&+3_Qx`rlwW+^1%^}5z(Ze@opwZwL+;R6J!&w6}t$K69R4`w#5Y-b^Syfp@^ zITjm67|(&`{&(~x+ozYe7`Y16QO>QOkBr}7JB1&Zf=9SWg~`)k;Ml`;t!9*w7>3&?a8HLr6BwLh~5D>d{SPO7Dr9pry^uMa7#nEuW>Xwru z?G_VaSd2pT;?6x={Aux%+rcadRyt(Dm7xK(ZH3b$NcD7oX#I5IOeGx81`sg1Wr(0PC(`xfMVUovATEMh$O!Dr>U1WD zr}Z)(NiklKK{Bi{UZ|%#LvyfnxxYV-SCu`14erxr8q09CwDj9V$y~K*h;(+)EThOo z?k%ds(_H3Z>+Eh?og*GANV4`JI!M50jy6T6BwW8dnw%GuD;=oM8akZIPXVlrg{9fU z!lDBu7k8D zhWPPcI6CuFIV%tI)!ffZMQ9DL+hrF`6DvYdBxH(_>=|S^=O$OF>%C8pw&SQ#7NrU~ z@lB~L%45)CrHOcqF=?Ak647Ol(7CBn-m1NlW_k3?AkLfYGf^pm+M|_q=nLg( z+m!>kDb66wP%5)|f+!n5*yp&7c3F-}jtJrH&U}DqAJln#(;UfA0H@T!{^ZZl_sryJ zPVOF;{Y$EVp39ni22$p9508-=fF{E@jm@{6DG16L9zZ)J?ZTG97X)a_I<{>1uuVFf zR3dUSaM{aRG$kFO8+TeEwz%z6d@V__{^m&mxiFD0R+96$E3RY?s-0G z?JAPf^nJ8^(1Cny1U=zd{ziMZHG}SHbDA1} z<4gICOWh?7I$%aNpQC4s&nF(^v1S(!{>`rk=+3f;Q9+LBt>nBaSqH?<#~*{@+!QR6 zfHI)%#_im%2U4Wh?qB?IhaS2L0cbpW-Hngw3$ym$ou-O2>3>}txkF1vFWnNv+yj5d zCiWvJ(L8IU(l3+BYAWt4s;ArT_VD4ivRd>L++WF60K#y}s;}N(9cV^*IG7I#5puA& zH5lb4CL+o#Tw*B>P=^q(a_qV`1VXV@P0zq9Cz;hDWP5K*c_(xR)P@<=v*kip+~MKr)c| z4D9~Z;Rwwvpf-@UX1MF;*seM){2EAB}63_14M`)PQvVHJ&zGW1p z?5xIdyyp9S;)O=`C)MBkFJu+S489~9&!?=^K&l@I^HVZ3vsy{Y1c|}!wG)%0{C)Ng zdTi&jP(psbIk=q-<46&Rz|J{HX1sp?GHQ?%x<(CzEdk({|IN$AFx!$T>`QqVZj?Hl zR+wW~99mQz6#-?lFweB$rSOW09G*4Xrp^Kt)H99FrnqWRCma14d0APTPfuKVBcC3r zSP8E(d#O`zk6|snWZmV^-Wfv2%ANZ`cUS+*r(wbC+hhy)W03eRF#iN4?%=PwAoM^h zWUbIdUAzwV(;I?c=qqESNW>-APfN@VJGNjj4g(j>0f^3debfz}43rv+@8XqKl0Hl_ zK|mt))AdBOX?1XZhi#7-dm+qedOm0cgb(@Y_-eyU z2vB5z41uWu;{NF56~GL#Bt4vn7h6=m1>A2JY`|1xT%vB`18m^FcAi-kZFt{IPs)!7T8^uMh6=MY|5iBNjUPJqQUc!+ z78mX0vhjGU)&^?m&LJ=wwLaFA^5OxGNrCo6X8A~N2qUjCw4)(5@Tyb{8;7Cj%eY_X4r zRb#5wpt5@)nUf6jK@81JvL;nbU<++nE(;8A+t)c^CFp|^R$)+zRPf$F6MP^XN6Adb zE@C+hOE|g&0DwrA!T7iH4`~q=4ypzeAYDXVSBMXt>4y%1FpWlFvb7k1N-N+RV3@xC z4?e1Ag6;o+lQaE);^gdX%$)yaWm(bHP9kn|Rl6>m)=rd4sU%W=nBh&>u-XnR&aQ0t zQMOU1v7|<~ei4{)aHnt_N1S+&`hDR<2iUQ2OPblx)U5E;aKf?x06+8N3)q{^)SAZn zM*qJsxmjIZZwJ!zn&$W2so!ffx;nlu)gaCCfE2g)!)26rL)~&u zmt$ME-vjFNeBqKXTZ`MIa2z23L@-xoZ*fu!a4vahQSrAj+2 zeOfo^@4~9B6Y#7PTEA3Rh!vtX$CauZub!UNTDaZx%b6FQ<=Fapi@eO}OUJ&=?%v$2 z(m?aZ&lOhrqV%SD2JyNj7QQjguKk|2ZHzQDpsDRu|O{ zPTeW)W^DW$Fr%={+Tg`xG1!-4n1<%{61XlAzHsYfAoeX0&#rEzfdoQ^@9T?~ z#x|QEdlHyntKdaeI%*xg-kZ?-_}Cxf?jPXk3sYhee{KugOme<|5c_yf*G2&|=30q%`F|SmRAFdTpnVzD z*#|gJt%8}e`d3<8NyYs=QstAM_xST*7{fWIaPFMp@wf9cTl9c?4z+f-X*D|v-R@T| z`}2eWYQF9P25l7!I;}d^MNOeaD%G;C0GT}1rT>)uW7L1$mAG!5wWHc=crQ9A$iv$! zgr)*hG#LocRA6kXQ~36w1xN6;NwvA>bqeS2dlhH95Mk@OxeAU-nqRx)$TK=L#rads1|mbnV9Qs_PI|4;?a$NveR}T2*FiIAmZ3##lA2i==QNedYcMH;-1&mhHWPUpQJ8R`brH z2<3WQ!08TD0KN9NvsL1i1L-F@d56U0w{(4^JG#h!j8GD<(f%H;H!+lKSxjR7rl-_f zY|n?uWz;{6Ya1i;5g*jL)$4c$G938nP#sKE`D6LZKCJd%_|VniMPQ;1@aGo$9CR3# zLGO6Izk{^#yH7VzcXEnij=S(kVlg?c4KdG zht?BZA;aZZLKE-lScP-yFZvHBjP@N*ApV=XWzdV-S@jzt;jSgpRdNS+)x4i4mEB;m z(W<#;mi$$dC&Kt?(IBJFW67@Uz=A^`*xvTFIr8 z4YITdVBj}{r34+}lKnlSeG%->BS?pA#2{dfvt;!Wd3etHLq z%f|MX$YVZRi1O?&vY)>QWNP~?4gwDQWj~j=)(e2yB-r!585r9iDRX-24G@GXbbZ~K z7BFw>gHX9;z-Q<__=RJ{M2jj?P}2SPARqMz2^SDSon0KX@D;Ztg#Fe|LM&id1V%sF zeS4)(t0aZ!!p}r*aLh_mkWg=rlOwO0bSE5nm8uy(*Df1xTmvRy!#s3}V4y9&xDJ~9 z8(fi3zm|>(W`+u*giZ1Q++lQwC-0K%W zG{ND_7UA&jRX$|G>h@~kUCm#Wo3w8fy^eE&e#q8BZ8r#OkoMM9D=xLrAM2w=&RbT0 zM(ohd>4K{d6%$7e^utC$tPDW_;ED%3eUQ0~Se$Gaa5 zV|07kgz=gLf@fcwaQAIiAWIO+cSeoxa$*4M!EGS42EB2QCw3Y2|sW$fQ^)GffK zcHTaU4j@H{&kcxLp^knf`Rz7`R~TsQW(1=YnYL}0$Tt?HD|QM7e3~$&TOty#CO-AXB&m^yQCueal?2_1_-KA#jMTN#Ah#+gcD{BGF z3&JO?tN_iG`@+-2%q}+7-&ct>J*CoZtz;h=3bL z@qYU@JMLBneiXf=62;8?6)B}&IJ1!J>0~NG7q+dITEu$N8QL&)z@t2Y0NQQV&22c( z;_$WW`uN3vK^`mFOaK8Cfdz`5f$Zwz&j=8T2goJtk&&*0{DhU4Nbqx(r0*uS#$7i3 zq}8(aE%2JUh$1$-yD1d3=VJU?2=Usm@sLi!d~1fwXKC&0PscZ{n#Fdmp6+E0JB=u| zlR-YEo0BcAP+(I@ZOlvP>EES(kUKe$eEp5wy?UA$g5TM01MeME>?a0abc%0U^#ii; zqC%C+le}(pz`H7Zf-t|~J^g$BT%FT=(&IG@;%z^x`L!F=GEUdDm)_G53bI&ejL zz?zK>Q&enW0Tg>))Dqu)Appfx(LQc;OsfQ(P{+ z&P>7`5|Q8>~g!-tRKTRjS*?@KM^ZwGBRgf zu*RF1`01B^Syeo3Q?4Y;r$v1}JSfXM^dHoza*ql;@W6N5W25zgI-wBDh*b#f1Q2cg z#0qR?|^ERz$YUVQ^ZQ`neYfmSPjNqS=2BR44FT%S^ zjq3oTa)z%(TYs!Y8ywZmC4w6>%N%x>CdaPHrRu6|LF`W9CjFMnqZYAp5j=V+~{39jmlMTLmGg~=aBrYiRie+_#;_~xVVYxQ7L!bBii7BYza zy*E*lU8>)es4OU@xvF0sXZzcVh0-BPKcOw6s1Pan_O{_>wgTVVRO1?m+bA+eQ5oJD z-%Oh~68No!`QmfbU1AEUr=r6GtVPrMuD;Mta9Q*7neq5xU$^St!dHEb7-sCAYK)YQ5&xzD&EbSJ-q&>sY~$$wwYR_I za#c0uyrF+;34RxCeiivCS!EOLx=39;sC|%yE|`f=E>z6#%4!r@LW;D=qcd#acClKJ z<~;MZojSAyPzbPx3DS1m-9sPt;wIqWv%r9k6J*Nx`itp^Y;R4}&ze$bMQx8`#J%VCaQL z#sP7_p^*A)*FFMZk@!CKj068ICk*r3wmDZ*!0I2PJy;NV=^FXOI|^U@>U(vK5?>q;SZ+yHzaOcoAcQVakEVz6J|v0VbwKjImVL!7%kM%*3?_#g5|5!q`I+NJ zHt;s=d^x_e?TFnow#?RxQ^33-KQQ!<3VM!%L#`DUdTy4u$0KLGV4l{+ynyGhqore6bF%B^1hz zs!D`O6B;{7UFi*&Bsbd?!P`IabI(C)C>^+V~r9}wEAI+7UTFsZGW}lAa zXLD8F>(+g?-6bWSj%Ip{e>zrulg{|UO_17}rt(pgJG+lRI*O{c?%}5BwCh6Pu8`r= zp9P{ExA0rx;c@C&z&@%t!i_EW*)I**-F3w{5?|Ax77!KluE25v93V4jFqtsf@Y>aH z+P`AGOqMuaXrnE0pyn{!#Q5-REis!!fXX-%q!89dychAlirj!$THu?;10WR^{mH`hQX$SqUJ&BSw*ieP(O}B0n zR-Q(DBhyrHnr7B zjFczn|C=fV26M|v1g%Bx4}#S&BT6l;%Ylyi6|?f$T(vT+q5>e^H}UW~V>Gm33DKB6 zwSQ%Dsygysx$ffJj2p6md9k59lhnA~Zzp0_zqEUM2p8vopcb*;9K zJ_`rag$krYum|xenu}=CMl_^CR&_R=U|*3-Kcv?a>J?YgNqL#EZziua zS7Ww_jKUHOOYca9B#nKmBO2>O}=~g6{A{LTt5d9LlDAAi$POAjpY;{M5W$Tt*#a>8y z2aC>)L3eMOrKUfM6j^$e>_xig+nBi-5v2?imvkmG4#j@tMHJduQ)ABdFu=rOo|{INLa`YgbA#DG9y5RM zu~jbH$SgY~0YuBOG`do15$bEMgQs0G=5EkQK5hlkC!uDmtjz)Er;K^ zbq|xT{ddOrA;NvkGM&kE*?8y~Y@QMgf4;?`94V@;fk&kCzVrfNu8}#R{xK}k3`6h3 zktm?<9xKo@9PA4i3QvhIH!)0}F&0yQ3!_@m(G#jq8)a2O47I-fp?%YlHuyYUg=G%% zE%d;>;|CzJB&CJbi0famtS`B4irQmgX=5rONcp6v=e+h?4)W1Q+ArVvVILQl2mzkP z0KTN4ftluHu_sWF+eOM-R+&yfBNjX$58sMOw4I|g88^&iXh3}r(a=D;qpGXC(-p~9m z+SHT$f+jtv&Mm;QMUvHG$SD;slOKTGf+(*Eh1t9@S2f`1$95IAE?ZX#c}42sG_x`K zWuOTf*%xpnvC!Y(k5>IhmnHny;>ResYQmDYO;yb~N0wZdUCkSejGAU#C8751Ac65< zkX;Pr_j!$T8kFc;f}DqNaUfi4C$3}UQ7)EI*wFWXSjw?~O!Oi9F)nfL_Md z0*?W^KAEGEZvngQLi2@iqIVk~%1-JFW?_uOw7J{b3-wcj+xWK{B~j7#aXM?Qf4~3J zE$XLJb8uV!TDRxw!UL`sU3wGW5Ol$apMd;l*!21GwJ*Xvp&59UFGYK0IF{e&6$kjg zKTC6b*7~mjqzpO%i7RU^+F_uLGG2 zSflD*ztViRNKr`zvH9%mJcgDy=m#uE&B1oEfNTejFb@aE1Ax25r`Ae?x7M5OJ7lMj z6QG~qsu9|K@^IWwh=_Z;Yx@lF#5f|*dN_`cVAr%0VBihz?A2iW)n*wd!>`IEHdMoW zUwA2fiaZ7bTY=9TDEuJ2Hn!>9+A7q+$3%2B z+kBHTVNLSWByF2M}|(4IzU9jG}TBk9e-p@*V9KHSV7!C?~6t1_*_vo)$N8 zfO??4dLy3?sRw#(j;P&S{ay|)k@pEH&FbDfK(^*~by%DBbUH@=wW#ypNkAI8!N*0m zwM_VH==-vLa_@=F)W@A@q?$dr_bR3ea&lG{fPCiMfoT8fMD`LUnL{6txJTLI#+X<@ z1M!Jo7k&rRhKVCgPtF@DLx4eg9ANCoY_&Ynn*AHZ~Dl>l;-3q+C6Hg}g0vo`CdDVa7@7FF?Ols_JFFu>MxG3kK=~FF zS9F#5M`|s}Pb6^_8>eBpkuPta+He6of7D~Wb0#-A>rm;p_ZIJvB?Huh0(0+D1Sol?{#=p6ORPD2}*!n3x8>>Km7IZPjO)84!z0E4A7%9)uQ2)2XLB>f2Jia2jPJJQa%Qnjt5w5B|5@*=q&0CbKr%@!&-W# z`B^ufH%WyD>kfucw|>EYoe-N^61*=FIBG+vQbZfEj>_)KNRKEw%?MIgF8-?!te_KK786!h$TsZfQyIyrR1 z7w`WZYWG;t3*_%11O8#ftM=3!_#OfG-t?v4@=n>3+w#WoZ&}C#EIE0T9IU(oe$#u) zLG5)Lh|Y_KsN0VoX_tt$aI=i|)y5CZk1mQ%jGm~U=&mWYu81yyT4KwV@;G{k1x zd|zo`xm6B+aGZC7P4XAtAclFGLT+?hbW*~^)*!?i%Ud66R$^RCMKnZwOLRy?P>`0l zUvz3PKHFCwYFSclbWSuxQd4wDs8^_=mq&D}Cq5h=6o{ui3?u-6CT>pQ|1d$8|80W* zZ(tm(OlCcD8oX9D(zaxL`@#!|F-q88=AUAG z&eV-o2g&!Y(X27T{6VX-Zm`n}Sz(rDyjEVIYxhd#YBzSyz^_gXd$(x(4)L{VGeLPt zIZjlYIty>O_P*JD8^PFmH{7=Tba#pAST)|>o=%2*P}gitpH`gKYPg=h z28n8HR~cNBPA5yh5ZM>7P(zw$j&SDMdp_r~_H-c_p+_U8viNnjzlYps#zvexU29D8 z&xZ7h#Vt0Q^~p0|kobm-VXBu8G%yyZ00?|x{^=FxnbZafyS|#sDZzi`+ccNpVS{uC z@9(-;7TMgRKfYe9dS#GZnDuvF`0sB21#qfYRpo4%ZOlw1TqUg7ufgNvxkHfZ5%set zWE*sJ@i6tXtdq(7ZP)0D_l9gw^Al;?sAgvdqnM9cJ$&R6e!VUHSn_S_?EIk5cdLQ2 z3Qy^_##P{f`$Wep7$g-y9|slhFRHdBt!7&igpLL7vv!M+Mebe!!spabosqdZF=ai9 z=MWA@2sy$GE=wo)ZU|RFUzx3bt*OX!;ujBr0G@Y&?08PIKnQ|6fIALwmx2UnhMx(a z`MhcL&i72EyY*@6_pV0x!vJsx?4OG0{~iwg!B-p@j}LVXm=)0nvgMO*?{-lqfR662 zN)O?`49(SR&{SnzgG1{)6ik~#4ktFQ!_CON7!GyPUmLMQ0otZoZZ@!H8$eZX3{#*! z_svTPZGiYp(HLOb0;w%1mk?53PpUhtnt313F#vkk6ASNnG8&-GF%t5j`-IP-2J|P= zW4{OmZ#5Wx7K)r4yah1M&0=|XLCZ3`Z<#qdsZ7o+igFy<_ujJ1KRB4zL4)wfKph5* zK>}L_i^k%lwPi5g=9DY{d;l3>#|w0h18`nwMhDshq*;puGV{?_mKK!lDd=wNL?5hv!wr>>RPJb?B zT=~}$9-ftx%aX3H3Ue&bL=Ie0TEvAZLhL|k2YkKK$tYk=-ivm&8wE(?##$E&WOyTO zu+o_xltQM?jZ&@?a@cIH8?ya^*$#-o8T4~=pYGe}uAS8892tgJ)jAywQCUkkv!RSt zWh_=}sHvb9PM9~x;ofFhRQTtfS0OLb$xM1q^!>?B+ZHyEEGR@*30wz<666{>z^R6H zzE|W2Pz6On22*dR)SJ1~b~6JEc>kNbL}2c!ff|^{QfVH*Itz(qWx+?MFNp2pNh{%X zq%uRzgqeq?Ra>q1LLKxpg0USf9eHXjt~9U&xKv!_pa=ZwfSLhSJcTabwS@dY0hemv zfM@BfH=0JYw0=$*dX9vMl=GAJkt7(A79Y^TbsX-)g+rn*(@* z-Ioettg=wIkV|$R2-@toT_S1F-W$#Tr-rptkPskViqAH^!~8gQzZNgVgdyyJ z#|mT!DULblQ20$h|GlP^!5-P=4vd0zp-zw?!vqXZR`f%}tlobO#IrV?5hOtLiP3Q9 z6{6gfd0afXBm4yphq2HdrxRYtTbCM-wEmA|kD)O3@S05X3n-yOLw%Kt9CuUinM}29 zkP4h!T)$hs9a_DuAL#aYXGZu`J^15iB+$BuUJxp{M}A{bxEoT56;8K1bTRw!(mA4H zMJZe}(B0c?>1gu^Gc7qG&VrGyC4>RG%-?baG$p!r%eZO3)1ylKrlI%gbYJ6<>CEY0{e=T{K~&HbQZXHf%2qI|R4f`#d0aygh=41epa4-6FnXy?_k`W0als+1!j4Rou1L_2?PhE)UyoB0AOeB z&-DoclKa!;Si_&` zmHwd$=N=BhU7p-fo!@W6_2Skg*mDEp zhn+&1h~zx}DAreM1c#?qil#Z^DrrVuV{?ypB+$Z4=0;IJ|8c7=IWfi%D#r=S$LENS zRY??gRJogvt~niKvkIWywko+d=nb56)Zo4QjP1Fh8F`S ztCo3hZwzP?t^Hb8HNRaZn|?ZUGSC9c|E+tnAkS5rKRT!8BoWVG^ zKx@%`bU-EzB~vjYyUT}=j}`%s*)xElYGRfDgC%@#^Sl1C5s07qv^AVzqfG-$Mk8Sh zKe#0_=2~YNxM}#Eeh>CBT8LS1DcpGY+f9C7W)x-qjvhWijV9?f9j$HE#)y##TjLTV zym|BQ1L3AUXhI}k8V-+j~@bljM{pC-T?R66>clo~q45S5b9j zdT+mmlYsL~>e32#hNVobO)w&HMP=!ip-(0w=X;bu670E+& zbob#ZEcH^-6ALb)H|6pX>nAoKuN?g3S)Ly;Q8jy-05p;x*eayop4A*YX8wTH!HOPe z+dA@aI!c+|@<2;=5T?C9gk}iaS0R;=;E?qQztkinJq~tdx-8jrFb9i_A=w-F&?Tr@ z3_`ph=)zVIMD*HSeiV~C*%5{xS%(8Y04oIeT>T8lAs;3itY3lmBQ%LhzByseO(w9# zm8P%J-56fP3q1 z%-gdrIWrCfAJLe=qy;~!A=t)ane2N&;BQ zn`^+1joy$o&xoqXgrY&nv)L(K9NH>nj7Mm5Hm{b)YdOS%?Fk-#Jujc*wOb>$0~Y2_ z)a{Vo7;8-+r5$15u!@(t)g7(dnvM1SZ@lNiG7azV=r+Z{X9VB zO%|wEXL7+kX`$#}ba9V#DGJTD zQh8R+U=mox%<(O)rwuF^Al_{nwq3H*Y*xmtnunAAk@{E$^F2@jdj?_aR@1`3SnJag zyqF8wz0>}>P&bfpYAxc1E#5EEi+JJ&0+M1;i7|G!%rBqwKE+zt|E}n&hnkFswlLNM z`RlDlF?ou(Dzl7SfoCwdHRKSVJ@b69c0n?MZp<1-ws-4WixZclC-YpIUM zC@Kx7;T-FcOr_P@QHrzn>{qs2x#={8K$Z2k&C>t^SQ`8+h-7Dbt&%5q^>C*?s6!KTG~lo^#>w3tuVo`&R7yo zYKWw_Hii|LlPGwC=Nqq@FPt?htE@eL3KclbH&lo@pacAM_-`5Zt2ncDRh$>@kVv+H z&AVHZhm{$MF$m%zX_1>RZe%u);X%_OXUz&JW&@iOn1IipBpw0mT4jWM+fJL|#xz-< z@Wozdn~dJ~N?_)=v@M%t`+{nf_7@DP7$`}UlpE#)f?fT=vxzR4qL?N3oh!p)_&Kf( zklbOVcX_VYb7vv3rPja-M`7^g~L9ys^4kXggdYbAHQQqoJl?$gawoUdp6Kh}154E%J6Y z7h>H^q*n!eeETPncttJD^6&C!rt9BOuqZ%x`Q?)j3VGgeoWx@V zKMZY7EGt3|>hiZdrr8|7-z!~~661}d-$>)+CiOD)H;|lI^}Uh{-#J6Cm?wq2#NKn+J)wro|0>5+7LApT-_Z~ zoeNv+^3tVQYHr1#DjHgc#Zx!tTBKU-(rf%nxE?c9nUs3|9Iqz1O*=O?cZ8pfH2Qlb zTm-lJ5T5kufx_432X%>zg2pt1-?_7Af3y)uV!v^RPbdf?wfe85fs8XBc11FloskEzgQPLZ=_i*8bJc=uk}jf|D0uG;wp>3#Q4f5kE*}+m#;gA-v$tCci&D zuqLJHLQ={ixOdu+xYux&e}7l;FF)Pe^19S=)_R1J^lbss(o&0=AfKs*Vwb$?O)o?( z?gmd*;P_^XimH2BGxgN}VeA~5gyF#~+O}=mwr$(CZQHhO+wQk*+qOO5cB*DEe;}Ku zlB(pM+;fU%D|O0aGyPnv@mp|_FNWw71hkDjObF^>wY+gN1J)WhE)tXM4RtTPI*ZpB zBY^xIE*cM#%O-k(kx#{a)v$?@>pD#vy!wOU540Ej;XrKN#}10f`{c4q>~66MFx_b- zPg8-Z+rLN+w>FCscXK)ukq2cZ5dDzr`05hZ;lpZi{g7nGEUCDdQ!DKn#-?yQD2&4z7SL%fN(+%^6^n zaI21(9IWLv@1J}hBgt2b@x&f6*N9c6^_k}0JDEAGxNNYMCD{=qgESN|`OV`GS@Uk* z$}0@69R^v&NCs zd+NjLF+SkiR*0{rZoQy>mu*h4);<@ld047X&-9IxE{zskyrp2+OjLV(_wgqpb77bi zr7OK+67K>&8_ES@?M(LwsU5mD+pEGfMQ*Lt#B9~N7%zA8l7#g{Nl8PW&0;$k+~Aui z@D#B>s2cuzVWH$_l1+r8<=*?oR%Vc2!R6W# z+PhX5IR%=txFcLAi5c=)QqG{$?%%`sF_cyb98Dvrnc_GNl}E1!(joH7+UFbw+bUkhG)rQkb%SL>m9jv->d zbkj~!NsiAT5Ep_-oaG-_JW&JqenvC|ZyW`a*y1o;ihX&1A_HXp! zpzeEJQ$2Qgp>H&Ow*)zi5s|zqSl|W|q|&R)unL%;0QK;$ao%P z`kH|jB;hiM3mBL~LBk~CP>#ouaNd0nJD&;ZYl6kO>w2^3FeYYC=-GY&Rt{~6S?-hRv|2>q>>2j_~FHL(wq!5 zzYVHy8Pm6O($LWs5*X@D`E#NAYVQaqRh|0{?Dd+_2BTdNbWS`-;R~eJX>>YpPV^h| z-L0m_c$lmCii1{y@M3Ou#{%*#pEJgQI1X!}crhlB5@5gA1s~)q($ZnYQynU!WCp82$)=EPWB8zGIm&te9uJ36wq6{TNlkMrV;4}RR z@l7A;R;-E^Vv~O=8OiuG+fUh{^~#WlFsUId<|g7BKfj4`k#D*&wFS3d?{3WbO@$eH zs}B9Z51H{|>YsuG6!%sOQG#afu4{Y#dXz#AQz8!-%5wB>_yPB41+642=^eKjlYMuH zb+V#-ib3{?5$eOwdtgsE(?(^`(8mW7cFGHj zBYRa$PIab&EroPER;Ab@ukW^yu2YE0?&NXe1v`nd@Z_iTDmOQ#)=~=JsZRGCeLePSyldtn=P^ks+M*}8N8CZYi z06$E<2m#ac#+NbBw#oPn!V_f&ddYcn^EgpIUP+(Ki))QQkR2Dra$4$GWr4&C^@0!dMbaq_jMPyOhal;x=DZ^GXj~cEzaVtvxUa4I@)P3y`fxRgL1Ibw*jtE6t^os4|3D~!9Prh@K zDGb8)8{`3$n&xQC_jl3`2cl~BN8O*P`&{E1h708*rS=(y`Ll9FS3?oTjc)rD8+`PN zQMdN?t2Fun%p`#fs=8xnqu&H$+`?EqT?(!wC$RbF%YrF+Qcm*zTaXB?Z8?MyI^yZp z$88!aKrIJf{vJagZCVZRg7<%GK+}ySZyRJUPMUXp=bh5LGi^=gzfUp*7WwV#?vQ;a z{t7JHFgUP7z+=|^_uFMi?9_@grAkW0I4T9r^S+d)lv84X7>;gPn4*cW8Plz=`i0&2vDAil=lyZ zEDE0_?v5HWKHKc~+s$D0l35q^7?OWYb)jm_RW;{jRX)LI_p0j;gZVqL1E=(QYVFzX z^lcXR-Y!q&>5Y`B=IJ{dEx6SDlU?72TR+U-IbUgJA60GSlBMqn1!IbeOmrc-m@QI1 zG|+JZ7|1g&R_9SGV%nzg0^C zkBT69sRoibX{1ezmF}DmykIpcCKvOC5-OJ8)!?~C;|p11cFNXVgEP(_XV{@{^1D!aSNKTXy8OO71B9Q}d=ZhG%`D3JG$C zUaTr+M@B)_W0^kCra?E{@fPA6*mK}P&f9Qqwuqw}zB;vRV68Cj@S+xTx%%*A|Ji51 zM}cXs@Vg-ovB$`7Jw0psNzx0?nfL&m40T{N^X>e)?|Yk|sY87H3-jw~3o}34NBkz{ zDNXKr{!Qn8O^PnAsSAKV^y5YE$cTfB{3q2@vsLiM{CE3wgx(ts6s@U`-7Ur!&}1ZDU-^!_W9@Cq-fRrEgRC^EV^!c6+)@_+`Fchwj0Ovr%5!gnK6) z5*)+jHNOTXgMRIlQ&>eB7(H@3ssNtEWR$4-T*mMGl=`>Xh2ZOS z$E&lX8zV@yK)i0(SYyr6$9`E=Wj2|PmR;KDe)F!QOqA)u^ z5oJq#KXn7f!TgI@$~pj{`RQV7HyPzY2M|PGN{hwn%FpN6+<1QM^c_MSwQxp^6oHU? zqtT>EyVkwaxs(?D?LDux2bt=-v0w{|u_;mIMbFjC1OWwL(zL3l81`tm6CseAQ%MBC ztRG1$zEPVT!DX*DnPI=Pd8OxX*g%y_v){m&t=c*OAPtw>73s`R?R+aq8OeHn%{t&t*2jQe5d(yLUtux;h({`coF?nzJxi5O>AEF_8rHfW^|+*5tnk~jV6k0M+U~=He^d_Lmw4R zDXp8#$$Hjl!Y_$!XQ4ml>+Q;VENETSZ{M_PIsOl$=m%0N0DGehDa%Oc$Z#uh99b~FAR0EA>*iF`1m}a9UiiuFVyG3JfTj4RJ@ckPl%Fo z2>hCs`DL|Nmpb@zg#ZM*=YX%$-Ik3C$hc;#qG6Zm3M9uAyar^IBz2Ue6iF2;1IpPB zDaAooyHhh88tVD-=>C8z=myn{09=Z?D+PGN3VArc6Yd6Ht%l|f(5PLM6`Zju5j1wE zSwLnLC7km~0Ig-iVAL?3YoI;8KkuWC7kCNAGYJ(QM}le)60h`#1D1@%rhe%NnB=G2 zCyxw3Q9UYZhBzoV@-Z>>(?#!oSndz>luP&$AO5ssVJYI3K&C|C(WS&f6s zxy`b)+Bl|}SmpBz^ly6tQ~?x4!SCg5e!Vr!BB_FsFd<{=_gQ9F*QKuG`sV-j{<<&f z_WC=_Mi1)ijr!Z>)A4=%9G&Y|IhBfF!yvBL>-Qc^kDy*_o&BUH?^YX%Sc9kUvl61N zw+~4u``9`C6pK8)?Xu>s6*Bi}_Q~|^(7jI2c6}X%8{<~ixtH*lzH7Di`qpeGd^hWt z^uG$TuMBSK`>5-W=C@d(S=*qW`f+NMLTBy%&pLQl_xJeOZ(vKL6UwGxX=&M~x*J)& z*6;i9so!Vy>#|q>P*n%J%kt%&6CAoAIB>JX`vCo(Y8MqO`k%7cW_R?9I(<+7pBe?p z{uOt@s{0zdZZ+`s+<`#>@wYjxO|;9HCnI;2b8c4`CznlA69DwmWH~v#yX9$b^WwdQY77C5{4P?H&rdM$D8ScU3*K#V7`@up*UZt^7Yq9ujon*(^vdOz z%|$At7XpGo;RHzOTG6Y_0+(Uf$~IuS6ugS%XN=m_j33GQ;V?LcaiV{~Ao`Ywc;q&B z0^$c8zPP>yF!tOK#ycncJ5E8u}p%@<4kJ3T>bo zQ%R`^nwe+vD(UGkyhI+uB(^_ca!;TO@}Svqtuq6qr^v2El0t$Fz~pQ!67Kx|>3IY2 z5ap36ogL4ES^tgUp}S=!0WbG2wi^H%DmydBe1eQXdE)ig2`z7_WDE0KU7rNPq9>&TPfyAm0v(>enyxEA0Twc5Zvm}?jsIp`U5SC7QNAJjggY&dv; z0tLqjdI!=zSG~E2iogX$!oeuLKiA2MGFCM?3{@cd=@f|q!1-UX;7OG+SrVtZFXi z7pwVme;PaSlIH;((paisDyWC}<+-(qOLgp;jmuFy8a6JLziEFnjA_s+g~zWss~I-JwDU zSKyek1mDZEgAnh5dGNexx6z(zRm{CK@#de7PfRUFBbNWsbx923GgFz0 zwz1$bMZ7XbZ?KWi38$ zZXNeM*~f{6f?&FhUxyGJIVOoQU7P^p_XEqc9dd(bEx@=;TY_Z?xkJOB+&MU0q@Yw0 zS)iMNwn$<57(}8bwnHG$w>4VseKRs=N4yx%*#hfhUI{nn#n%_x4Ow!DsX>q8J>i^- zFFT~L)Qn}$qzz2@arm4~z#eG-T>~f7on|lp%b{)(X3_@D30h?EU;C-%>7$n zRthoewt(B(l@A|KBcgF}UG9taF{p}lDU_{zu!sm2YV@BSuH-7X|f11Trr|jM&fN7k8;_npKSIUPWeCvr$!y?qE10FwuRq$z)G?I9CkEu|G8`Sk+q{8y-(r}6X&6;$S(8gf#N@l8&X-Ceo)Xp_= zVwaD$q$yJ4%dAk|S-LKhgXHn=svg-_D5tgvW8JBv`@qB0=i2Do%bOM>38&4H`FbDt z2HnC66wMZCxI@4aqO1fLEIxYs&p!Rj`}=reN`D03z!bkNyFI#n3UxZ%q5ucTnnfWI zX|q&62hX2zrhEK_c1zKRT%Tv?-V=cT!R)D>FZhl4EifXe_~ADX7y3eh#?nDN;P3z! zu01W?f_w`au7H_?Q4o$`Qb=6SKs5Gpwq;YlNbKR8L!r2a))|JsN^vI;sL|P~^ zw>39}#2~-LLfqWz>FV4GjnC$4zkks3H%cZ^j`NPH3e%1=OCw){G~T=+gV_{bg=wRS zHPt2vdW8gC_Cg#57e@E7`WHyYm?S}z2_SK)T*PTWMik?NMqpn|`xusk8KfiMfo6$y z>-WdVyZzGrTC>?UyPR&`euB|`<|k<6pF5ko-dGCZ(5F$= zl+%x0v#*9oI(Zq^pgJpOf`d{A;^~je=}0J>$l07jFJIY$2E+9eb}UR%>~)v6(?3eC zni7!%_@(EgG&HZqruK%`MQQ)YIAG}uOcx#1M%-IkhQ-R>AC}jHk4XzRduLM@AN%al zzA!AQ5Gnd~Dv&t7RW;c}Tj=7cTCO@&*=iawB4z_LSS1F;{)%v8AL)15IM^Us+>*S& z|H^9Yb_7v;gM@>zajg&==D8Y(FDq5kf`UasVnFFP{b6RY7Q7_!T5uS0&)w<$BNn4H zErSomojJfQCq^&@wZ1cvKxng>;&U3!7*Adu5qa%o`bdtdrDRz;<8dGGxd#COWw%xY zwPQrWXY;c24k6h(Nf3ygVh$__z$|LJQLH(DQn>upNKQ41sTnN9q)c^qmpEkbaR%GLMl7LK;{yGrxkI~ zlIsvCWd?5VtPTOvql)Km#(9jx6zZj-K4F5<6-8fD6oBTqjn6r#7$R=MaOr_fh+PjS zKDu{o+JES{cHWP|m<=ch;za>VR#MsvhKb1vh{2gUT?y_U!~LWWPU2XMyfQ$~-p|^z zSB`*1Q(>^{r(9>AMK~Iqo#IAe5>~R9JzzL+KTHE`<)1PP;jrrlaAcfLk|FDc5n#yk zQD6BCDUnqExM+P;wjZMG(?cT1>XG@r~9%9cw+u}K(Vp8|Cc7scr^;C3?-Lxn#rMLpHieT z{5SqTCzQa`r>jjgO^5QBev{|{Kw@LcJra;SYPDpGT()3`KXObs3ihTCU!Rbs3+wu1 zP?p?+(D0vsAEF8A7Z=&L_?TFUyJb0<&&0RiUhR8yMt1%p0tweS!ENi~S3NX0e!ol& z^cr1(7vz(4W#jArkydTw6|>Af&TGKcd;yk2miNyB4ZfeMe*ubm-^+tC?unN3M$Ri0 z%%ez2uc}coi5mQZan$MZ7ECs~3TY7I;gyGhB?epNTOAP&Rp&$hC0n=cTQh8`k_0{w z%zLrz9_^$Z%8p(x{Uh3Hz1kph<6gP+<)2!tfk`)&M_SZM&!Q|fa$_p!eEP6$jumy1Ima`2Q8eLKhd*Cs*aGVI0gstd6F>9 zwU|y4$`gWuq+3x#iJ7@insnxX&~dfjZ(iD$7eiKH<_>EI&J*nL1f3JFHpvT zgOMRj+^f_w^WrLr4rmBKmCqS!b6#6yDTyqVlTkZlf!ff}97;C|f%|aaD+nEDu0eA4 zL4DKUL%bM(E#+K-3j(-kf~%r=iHeu%A>I4&i=@jL&c7;W&y=bZl$u5w%OuVw z>v6;xF!+4oUx~s`;a`PP@qxKTJTr8Ezn*O%zF;&A9h7yRsG^hcew2`@_|~$mA>Esj zF8ii<8YKh`t0p~Xaw=e-BY=Fy0L-g8>|_DxtGei^mkc zN*a7$C7TJxb7?I8NE48(CTi{%-uwu2A49;TlQUig8a{V3%oA^*1mgoT!>s2)UUGUr zOReLJ#v0cAbnrUOvfm(m`*FgR1z!U>b+yw&a317*ywCdW!%Z@+kvv-ly(T@EUe({(SNef&oemTsN`PIkPuSQTM`VP1CWL;wh{n{>KgsAO|*mBy}CTN zm$5J~V`bq@fqM+akoZ=H0YQlK8T`U;@6&sjbcHGAS$lE)(u1`IanB3%K5&RSCZ0g8Wc{zoFny*&q4S^;%35j6@QJk!AB2GO7k< z!KlTe$BC34wkKWaSK{^kck^Ez$EE@z!*Q zfog?r47F?rs(Ryx{z7!CnTicloBu2+WHp)3V^2Ly(v2UYL1EP@bW=-OMyKdJN#ips zM6iNQa9X{<;+1?H1_P8L*u+(I?ZdaQ=csP34uj}U2$AZ?!R{YPfc+r=*B#slH5N@V zc)=m&@=&Mbc2 zman);KDV%SVS>ChMw!xc^vm9{`*0JrE-abPs~3nl!#z12pCY#Ga#@dv!)CjwHV+$Z z#ksOoHp52Sz|{=T;?lboT!_7?%mC#w3T!{>`h2bh1RDUDaB7cNgq-%=5;t<8tWA|X z8gq?<%`pN93X{G*MZSnm3{Qjv8|nn6)^{k=`|$zwE_XFXPrbWhP#=xr2AQ^M+r>Fm zy2*Fg9s;*)*)P{cO&uM=0^ONv#A1Z{4X zG9h0W3e=n7JXxQWfvHsR=My-0YBCssMD~^=Krp?upTYgM==&pKQhNGb^Q~b1#sYAeVNOCfn z=PuF7FnC*LcF}StlDF;-rrt@2TRo(@J_SR5Up$CEEphx9KlhdRUiq!55aY?{*Skme zmxc{FH!8lK}l9eilr=H1_F9 z$ce7NyLu(mu@4tf%*7EWnju@}KzC=5cv5I;sr!i2u77UgJQy0 zc_N%9I=-vqG%o-epdr_crLXV3NUGt_!C@g>NE~K_GL5#i2s(R%<J6&as*Ru`O78YUD8&5YwfWiG)VG3I5=8ts_hieYU>7c-&vE=E%t@ z?l2QMp}NJ1mY%arEr#LEc9+js3hY(rtD?hHi8YEVi-wJ?fUgq!$nY#>EDEnrn&q0< z$|l(kQJZa>?;@j`8qIx(nKm7;FWEa@DuU5;d8uZ>gF}uka}+Qpj78dX)HY5O1u-Fl zuG&r{nw|T z8H7z`e<&~wg%SMTSR6!Ti?_7;0ZfTdP%NhGq(HEISffHVL~HPbnE`G2#NO@Y4r9#d$Ad3|6Icpp#fOsuD9v0P2Pl0|QxI$a zqRQw4r-Ef6fuOV>=To{OuoqMngP?R=iIa%kX)STJzl0NMZ3Ea&RH8DsIrFLb>uEJP zM=bTESfhDt)InlK2-`N}dJ$cTv!NI#1z& zrXa*}x@e1u6;vus2arPNDMO+C?8hV!+1^jU>VcTn6*1KVuZQs&b@%z~=+h6-`o3NV zxdy>h)C>&c-+djfeSDLJukL>IZZbcQ4pHD^KzVDTR@Lyq)ix`ET!0{pu>A*|{5zh% znr+*~-FHqx8oM1p5$wq_s@kV>7j#s!OCag&j z9KZ0fdrPZdG7mjqQIjr@!N($8sH_tnw{W`$>zI2#hWH&GKHk8 zzqE4{s0Jz^!J$RWXV6Jgx9+te*K%~&;T%Pkwh!m*sbhXvXNfJVc)xqRy*uwPUQTCZ zilFTcC($n#cC6uqq={GOO|#Vq-_myX^MC00;-HZ8z%ktq0d#A>q`o)@m+!x>pZjM? zZ&7p5jynI2iL!7IVXD!!S`B!*Ioh}VK+O~1!d(Twm_<5VfrmSksZw~Xys=M}q1~p{ zUPG8$mYx1R^h|Z9L?0BQ-)<*@4rZyER%l$V%b&^axw)^mgF%-E!!A zQ-SW7_%PS?5EP{0v_`E^ZUSRciS(F2D|?dg*T;Rw+?uQ>KG%la+N@w>$AUnf3Jo0AQMzgx?!GApZr0Cd#+i(zpS5gP z6&i;IE%EFyq=OGzLilA)8X}UEs%eRb5LBZ#UXD?s#z#IAcT0h=nsn<%Advx{KsIL} z17`4Nq{U+(gl-WtXv412w(o35ReSL?EU|S8^f+mV#{+%_XRN8q+GR0fw>p;$5_ZxN zkZ2GkD=K55scTeoA2^V8X)a`k9){7(glSPoJC(dis4m=m%0?!3GKOFI(m%}KmDoG= zqY)Vb2M1Pj7w`V zO4H`^b#r>?%{ceUxuiv<=;Kh}8bhR;=|z~+F9*5T@%d`PC}}=I*#v|=oY-JB$U*m+ zk<13jAhfC2p3=H4hQgKy z5J_=*Bvhbma;=y``#jS9o+zXJ7|5TzV@}O`aQVaM^w`p56>C%ba%&eK*Gn|g_UA+N zI5}AMZdzgZG&W?FR42-D(OU7z^XVNze|RC$5E?N}ah}OK0bb0=v6Ai0lby+&jVmw2 zW)I8JS3ilwL_)xKlaOboOF6Q3o-E!hbWvCxGYS2%%`D>iUNj7{Ue+ocXh+%0A$C3n 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 literal 0 HcmV?d00001 diff --git a/inst/doc/Quick_Examples.R b/inst/doc/Quick_Examples.R new file mode 100644 index 0000000..befdf2d --- /dev/null +++ b/inst/doc/Quick_Examples.R @@ -0,0 +1,307 @@ +################################################### +### code chunk number 2: Cs00_load_library +################################################### +library(MARSS) + + +################################################### +### code chunk number 3: Cs01_model-gen-spec +################################################### +Z <- matrix(list("z1", "z2", 0, 0, "z2", 3), 3, 2) +A <- matrix(0, 3, 1) +R <- matrix(list(0), 3, 3) +diag(R) <- c("r", "r", 1) +B <- matrix(list("b1", 0.1, "b2", 2), 2, 2) +U <- matrix(c("u", "u"), 2, 1) +Q <- matrix(c("q1", "q3", "q3", "q2"), 2, 2) +x0 <- matrix(c("pi1", "pi2"), 2, 1) +V0 <- diag(1, 2) +model.gen <- list(Z = Z, A = A, R = R, B = B, U = U, + Q = Q, x0 = x0, V0 = V0, tinitx = 0) + + +################################################### +### code chunk number 4: Cs02_model-general (eval = FALSE) +################################################### +## kem <- MARSS(dat, model = model.gen) + + +################################################### +### code chunk number 5: Cs03_enterdata +################################################### +dat <- t(harborSealWA) +dat <- dat[2:nrow(dat), ] # remove the year row + + +################################################### +### code chunk number 6: Cs04_model-default +################################################### +kem <- MARSS(dat) + + +################################################### +### code chunk number 7: Cs05_B-setup (eval = FALSE) +################################################### +## B <- Z <- diag(1, 5) +## U <- matrix(c("u1", "u2", "u3", "u4", "u5"), 5, 1) +## x0 <- A <- matrix(0, 5, 1) +## R <- Q <- matrix(list(0), 5, 5) +## diag(R) <- "r" +## diag(Q) <- c("q1", "q2", "q3", "q4", "q5") + + +################################################### +### code chunk number 8: Cs06_model-default-time +################################################### +kem.time <- system.time(MARSS(dat, silent = TRUE)) + + +################################################### +### code chunk number 9: Cs07_model-bfgs +################################################### +bfgs <- MARSS(dat, method = "BFGS") + + +################################################### +### code chunk number 10: Cs08_model-bfgs-time +################################################### +bfgs.time <- system.time(MARSS(dat, silent = TRUE, method = "BFGS")) + + +################################################### +### code chunk number 11: Cs09_model-bfgs2 +################################################### +bfgs2 <- MARSS(dat, method = "BFGS", inits = kem$par) + + +################################################### +### code chunk number 12: Cs10_model-default (eval = FALSE) +################################################### +## kem.strange <- MARSS(dat, model = list(tinitx = 1)) + + +################################################### +### code chunk number 13: Cs11_model-corr1 +################################################### +kem <- MARSS(dat, model = list(Q = "unconstrained")) + + +################################################### +### code chunk number 14: Cs12_model-corr2 +################################################### +kem <- MARSS(dat, model = list(Q = "equalvarcov")) + + +################################################### +### code chunk number 15: Cs13_model-u-NS +################################################### +regions <- list("N", "N", "N", "S", "S") +U <- matrix(regions, 5, 1) +Q <- matrix(list(0), 5, 5) +diag(Q) <- regions +kem <- MARSS(dat, model = list(U = U, Q = Q)) + + +################################################### +### code chunk number 16: Cs14_model-u-NS-fixR +################################################### +regions <- list("N", "N", "N", "S", "S") +U <- matrix(regions, 5, 1) +Q <- matrix(list(0), 5, 5) +diag(Q) <- regions +R <- diag(0.01, 5) +kem <- MARSS(dat, model = list(U = U, Q = Q, R = R)) + + +################################################### +### code chunk number 17: Cs15_model-pan1 +################################################### +Z <- factor(c(1, 1, 1, 1, 1)) +kem <- MARSS(dat, model = list(Z = Z)) + + +################################################### +### code chunk number 18: Cs16_model-pan2 +################################################### +Z <- factor(c(1, 1, 1, 1, 1)) +R <- "diagonal and unequal" +kem <- MARSS(dat, model = list(Z = Z, R = R)) + + +################################################### +### code chunk number 19: Cs17_model-two1 +################################################### +Z <- factor(c("N", "N", "N", "S", "S")) +Q <- "diagonal and equal" +U <- "equal" +kem <- MARSS(dat, model = list(Z = Z, Q = Q, U = U)) + + +################################################### +### code chunk number 21: Cs17_model-two2 +################################################### +kem <- MARSS(dat, model = list(Z = Z, Q = Q, U = U, A="zero")) + + +################################################### +### code chunk number 22: Cs18_model-time-varying +################################################### +U1 <- matrix("t1", 5, 1) +U2 <- matrix("t2", 5, 1) +Ut <- array(U2, dim = c(dim(U1), dim(dat)[2])) +TT <- dim(dat)[2] +Ut[, , 1:floor(TT / 2)] <- U1 +Qde <- "diagonal and equal" +kem.tv <- MARSS(dat, model = list(U = Ut, Q = Qde)) + + +################################################### +### code chunk number 24: Cs19_model-print +################################################### +print(kem) +print(kem$model) + + +################################################### +### code chunk number 23: Cs19b_model-time-varying2 +################################################### +U1 <- matrix(c(rep("t1", 4), "hc"), 5, 1) +U2 <- matrix(c(rep("t2", 4), "hc"), 5, 1) +Ut <- array(U2, dim = c(dim(U1), dim(dat)[2])) +Ut[, , 1:floor(TT / 2)] <- U1 +kem.tv <- MARSS(dat, model = list(U = Ut, Q = Qde)) + + +################################################### +### code chunk number 25: Cs20_model-summary +################################################### +summary(kem$model) + + +################################################### +### code chunk number 26: Cs23_model-print-R +################################################### +x <- print(kem, what = "states", silent = TRUE) + + +################################################### +### code chunk number 27: Cs24_model-tidy-R +################################################### +tidy(kem) +glance(kem) + + +################################################### +### code chunk number 28: Cs25_CIs-hessian +################################################### +kem.with.hess.CIs <- MARSSparamCIs(kem) + + +################################################### +### code chunk number 29: Cs26_print-CIs +################################################### +print(kem.with.hess.CIs) + + +################################################### +### code chunk number 30: Cs27_CIs-pboot +################################################### +kem.w.boot.CIs <- MARSSparamCIs(kem, method = "parametric", nboot = 10) +print(kem.w.boot.CIs) + + +################################################### +### code chunk number 31: Cs28_parvec +################################################### +parvec <- coef(kem, type = "vector") +parvec + + +################################################### +### code chunk number 32: Cs29_tsSmooth +################################################### +df <- tsSmooth(kem) +head(df) + + +################################################### +### code chunk number 33: Cs30_marsskf +################################################### +kf <- MARSSkf(kem) +names(kf) +# if you only need the logLik, +MARSSkf(kem, only.logLik = TRUE) +# or +logLik(kem) + + +################################################### +### code chunk number 34: Cs31_like.kem.degen +################################################### +dat.short <- dat[1:4, 1:10] +kem.degen <- MARSS(dat.short, control = list(allow.degen = FALSE)) + + +################################################### +### code chunk number 35: Cs32_like.kem200 (eval = FALSE) +################################################### +## kem.degen2 <- MARSS(dat.short, control = list( +## maxit = 1000, +## allow.degen = FALSE +## ), silent = 2) + + +################################################### +### code chunk number 36: Cs33_like.kem.allow.degen +################################################### +kem.short <- MARSS(dat.short) + + +################################################### +### code chunk number 37: Cs34_like.kem200 +################################################### +kem.small <- MARSS(dat.short, model = list( + Q = "diagonal and equal", + U = "equal" +)) + + +################################################### +### code chunk number 38: Cs35_boot +################################################### +boot.params <- MARSSboot(kem, + nboot = 20, output = "parameters", sim = "parametric" +)$boot.params + + +################################################### +### code chunk number 39: Cs36_sim +################################################### +sim.data <- MARSSsimulate(kem, nsim = 2, tSteps = 100)$sim.data + + +################################################### +### code chunk number 40: Cs37_sim-fit +################################################### +kem.sim.1 <- MARSS(sim.data[, , 1]) + + +################################################### +### code chunk number 41: Cs38_sim-like +################################################### +kem.sim.2 <- kem.sim.1 +kem.sim.2$model$data <- sim.data[, , 2] +MARSSkf(kem.sim.2)$logLik + + +################################################### +### code chunk number 42: Cs39_AICb +################################################### +kem.with.AICb <- MARSSaic(kem, + output = "AICbp", + Options = list(nboot = 10, silent = TRUE) +) + +print(kem.with.AICb) + + diff --git a/inst/doc/Residuals.Rnw b/inst/doc/Residuals.Rnw new file mode 100644 index 0000000..6676564 --- /dev/null +++ b/inst/doc/Residuals.Rnw @@ -0,0 +1,804 @@ +%\VignetteIndexEntry{Residuals} +%\VignettePackage{MARSS} +\documentclass[]{article} +%set margins to 1in without fullsty + \addtolength{\oddsidemargin}{-.875in} + \addtolength{\evensidemargin}{-.875in} + \addtolength{\textwidth}{1.75in} + + \addtolength{\topmargin}{-.875in} + \addtolength{\textheight}{1.75in} +%\usepackage{fullpage} %more standardized margins + +% choose options for [] as required from the list +% in the Reference Guide, Sect. 2.2 + +\usepackage{multirow} +\usepackage[bottom]{footmisc}% places footnotes at page bottom +\usepackage[round]{natbib} + +% Math stuff +\usepackage{amsmath} % the standard math package +\usepackage{amsfonts} % the standard math package +%%%% bold maths symbol system: +\def\uupsilon{\pmb{\upsilon}} +\def\llambda{\pmb{\lambda}} +\def\bbeta{\pmb{\beta}} +\def\aalpha{\pmb{\alpha}} +\def\zzeta{\pmb{\zeta}} +\def\etaeta{\mbox{\boldmath $\eta$}} +\def\xixi{\mbox{\boldmath $\xi$}} +\def\pipi{\pmb{\pi}} +\def\ep{\mbox{\boldmath $\epsilon$}} +\def\DEL{\mbox{\boldmath $\Delta$}} +\def\PHI{\mbox{\boldmath $\Phi$}} +\def\PI{\mbox{\boldmath $\Pi$}} +\def\LAM{\mbox{\boldmath $\Lambda$}} +\def\LAMm{\mathbb{L}} +\def\GAM{\mbox{\boldmath $\Gamma$}} +\def\OMG{\mbox{\boldmath $\Omega$}} +\def\SI{\mbox{\boldmath $\Sigma$}} +\def\TH{\mbox{\boldmath $\Theta$}} +\def\UPS{\mbox{\boldmath $\Upsilon$}} +\def\XI{\mbox{\boldmath $\Xi$}} +\def\AA{\mbox{$\mathbf A$}} \def\aa{\mbox{$\mathbf a$}} +\def\Ab{\mbox{$\mathbf D$}} \def\Aa{\mbox{$\mathbf d$}} \def\Am{\PI} +\def\BB{\mbox{$\mathbf B$}} \def\bb{\mbox{$\mathbf b$}} \def\Bb{\mbox{$\mathbf J$}} \def\Ba{\mbox{$\mathbf L$}} \def\Bm{\UPS} +\def\CC{\mbox{$\mathbf C$}} \def\cc{\mbox{$\mathbf c$}} +\def\Ca{\Delta} \def\Cb{\GAM} +\def\DD{\mbox{$\mathbf D$}} \def\dd{\mbox{$\mathbf d$}} +\def\EE{\mbox{$\mathbf E$}} \def\ee{\mbox{$\mathbf e$}} +\def\E{\,\textup{\textrm{E}}} +\def\EXy{\,\textup{\textrm{E}}_{\text{{\bf XY}}}} +\def\FF{\mbox{$\mathbf F$}} \def\ff{\mbox{$\mathbf f$}} +\def\GG{\mbox{$\mathbf G$}} \def\gg{\mbox{$\mathbf g$}} +\def\HH{\mbox{$\mathbf H$}} \def\hh{\mbox{$\mathbf h$}} +\def\II{\mbox{$\mathbf I$}} \def\ii{\mbox{$\mathbf i$}} +\def\IIm{\mbox{$\mathbf I$}} +\def\JJ{\mbox{$\mathbf J$}} +\def\KK{\mbox{$\mathbf K$}} +\def\LL{\mbox{$\mathbf L$}} \def\ll{\mbox{$\mathbf l$}} +\def\MM{\mbox{$\mathbf M$}} \def\mm{\mbox{$\mathbf m$}} +\def\N{\,\textup{\textrm{N}}} +\def\MVN{\,\textup{\textrm{MVN}}} +\def\OO{\mbox{$\mathbf O$}} +\def\PP{\mbox{$\mathbf P$}} \def\pp{\mbox{$\mathbf p$}} +\def\QQ{\mbox{$\mathbf Q$}} \def\qq{\mbox{$\mathbf q$}} \def\Qb{\mbox{$\mathbf G$}} \def\Qm{\mathbb{Q}} +\def\RR{\mbox{$\mathbf R$}} \def\rr{\mbox{$\mathbf r$}} \def\Rb{\mbox{$\mathbf H$}} \def\Rm{\mathbb{R}} +\def\Ss{\mbox{$\mathbf S$}} +\def\UU{\mbox{$\mathbf U$}} \def\uu{\mbox{$\mathbf u$}} +\def\Ub{\mbox{$\mathbf C$}} \def\Ua{\mbox{$\mathbf c$}} \def\Um{\UPS} +%\def\VV{\mbox{$\mathbf V$}} \def\vv{\mbox{$\mathbf v$}} +\def\VV{\mbox{$\pmb{V}$}} \def\vv{\mbox{$\pmb{v}$}} +%\def\WW{\mbox{$\mathbf W$}} \def\ww{\mbox{$\mathbf w$}} +\def\WW{\mbox{$\pmb{W}$}} \def\ww{\mbox{$\pmb{w}$}} +%\def\XX{\mbox{$\mathbf X$}} +\def\XX{\mbox{$\pmb{X}$}} \def\xx{\mbox{$\pmb{x}$}} +%\def\xx{\mbox{$\mathbf x$}} +%\def\YY{\mbox{$\mathbf Y$}} +\def\YY{\mbox{$\pmb{Y}$}} \def\yy{\mbox{$\pmb{y}$}} +%\def\yy{\mbox{$\mathbf y$}} +\def\ZZ{\mbox{$\mathbf Z$}} \def\zz{\mbox{$\mathbf z$}} \def\Zb{\mbox{$\mathbf M$}} \def\Za{\mbox{$\mathbf N$}} \def\Zm{\XI} +\def\zer{\mbox{\boldmath $0$}} +\def\chol{\,\textup{\textrm{chol}}} +\def\vec{\,\textup{\textrm{vec}}} +\def\var{\,\textup{\textrm{var}}} +\def\cov{\,\textup{\textrm{cov}}} +\def\diag{\,\textup{\textrm{diag}}} +\def\trace{\,\textup{\textrm{trace}}} +\def\dg{\,\textup{\textrm{dg}}} +\def\hatxtT{\widetilde{\xx}_t^T} +\def\hatxtpT{\widetilde{\xx}_{t+1}^T} +\def\hatxtt{\widetilde{\xx}_t^{t}} +\def\hatxttm{\widetilde{\xx}_t^{t-1}} +\def\hatxone{\widetilde{\xx}_1} +\def\hatxzero{\widetilde{\xx}_0} +\def\hatxtmT{\widetilde{\xx}_{t-1}^T} +\def\hatxtmt1{\widetilde{\xx}_{t-1}^{t-1}} +\def\hatxtpt1{\widetilde{\xx}_{t+1}^{t-1}} +\def\hatxQtm{\widetilde{\mathbb{x}}_{t-1}} +\def\hatyt{\widetilde{\yy}_t} +\def\hatyyt{\widetilde{\mbox{$\mathbf y$}\mbox{$\mathbf y$}^\top}_t} +\def\hatyone{\widetilde{\yy}_1} +\def\hatOt{\widetilde{\OO}_t} +\def\hatWt{\widehat{\WW}_t} +\def\hatWtp{\widehat{\WW}_{t+1}} +\def\hatwt{\widehat{\ww}_t} +\def\hatwtp{\widehat{\ww}_{t+1}} +\def\checkWt{\overline{\WW}_{t}} +\def\checkWtp{\overline{\WW}_{t+1}} +\def\checkwt{\overline{\ww}_t} +\def\checkwtp{\overline{\ww}_{t+1}} +\def\hatYXt{\widetilde{\mbox{$\yy\xx$}}_t} +\def\hatXYt{\widetilde{\mbox{$\xx\yy$}}_t} +\def\hatYXttm{\widetilde{\mbox{$\yy\xx$}}_{t,t-1}} +\def\hatPt{\widetilde{\PP}_t} +\def\hatPtm{\widetilde{\PP}_{t-1}} +\def\hatPQtm{\widetilde{\mathbb{P}}_{t-1}} +\def\hatPttm{\widetilde{\PP}_{t,t-1}} +\def\hatPQttm{\widetilde{\mathbb{P}}_{t,t-1}} +\def\hatPtmt{\widetilde{\PP}_{t-1,t}} +\def\hatVt{\widehat{\VV}_t} +\def\hatvt{\widehat{\vv}_t} +\def\checkvt{\overline{\vv}_t} +\def\checkvtp{\overline{\vv}_{t+1}} +\def\checkVtp{\overline{\VV}_{t+1}} +\def\checkVt{\overline{\VV}_t} +\def\dotvt{\dot{\vv}_t} +\def\dotvtp{\dot{\vv}_{t+1}} +\def\dotVtp{\dot{\VV}_{t+1}} +\def\dotVt{\dot{\VV}_t} +\def\hatVtT{\widetilde{\VV}_t^T} +\def\hatVttm{\widetilde{\VV}_t^{t-1}} +\def\hatVtt{\widetilde{\VV}_t^{t}} +\def\hatVtmT{\widetilde{\VV}_{t-1}^T} +\def\hatVtmt1{\widetilde{\VV}_{t-1}^{t-1}} +\def\hatVttmT{\widetilde{\VV}_{t,t-1}^T} +\def\hatVtmtT{\widetilde{\VV}_{t-1,t}^T} +\def\hatVttmt1{\widetilde{\VV}_{t,t-1}^{t-1}} +\def\hatVtpT{\widetilde{\VV}_{t+1}^T} +\def\hatVttpT{\widetilde{\VV}_{t,t+1}^T} +\def\hatVttpt1{\widetilde{\VV}_{t,t+1}^{t-1}} +\def\hatVtptT{\widetilde{\VV}_{t+1,t}^T} +\def\hatVtptt1{\widetilde{\VV}_{t+1,t}^{t-1}} +\def\hatUtT{\widetilde{\UU}_t^T} +\def\hatUtt1{\widetilde{\UU}_t^{t-1}} +\def\hatStT{\widetilde{\Ss}_t^T} +\def\hatSttm{\widetilde{\Ss}_t^{t-1}} +\def\hatStt{\widetilde{\Ss}_t^{t}} +\def\hatSttmT{\widetilde{\Ss}_{t,t-1}^T} +\def\hatSttmt1{\widetilde{\Ss}_{t,t-1}^{t-1}} +\def\hatSttpT{\widetilde{\Ss}_{t,t+1}^T} +\def\hatSttpt1{\widetilde{\Ss}_{t,t+1}^{t-1}} +\def\hatBmt{\widetilde{\Bm}_t} +\def\hatCat{\widetilde{\Ca}_t} +\def\hatCbt{\widetilde{\Cb}_t} +\def\hatZmt{\widetilde{\Zm}_t} +\def\YYr{\dot{\mbox{$\pmb{Y}$}}} +\def\yyr{\dot{\mbox{$\pmb{y}$}}} +\def\aar{\dot{\mbox{$\mathbf a$}}} +\def\ZZr{\dot{\mbox{$\mathbf Z$}}} +\def\RRr{\dot{\mbox{$\mathbf R$}}} +\def\IR{\nabla} +\usepackage[round]{natbib} % to get references that are like in ecology papers +% \citet{} for inline citation name (year); \citep for citation in parens (name year) + +%allow lines in matrix +\makeatletter +\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{% + \hskip -\arraycolsep + \let\@ifnextchar\new@ifnextchar + \array{#1}} +\makeatother +\setcounter{tocdepth}{1} %no subsections in toc + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{document} +\SweaveOpts{concordance=TRUE} +\author{E. E. Holmes\footnote{Northwest Fisheries Science Center, NOAA Fisheries, Seattle, WA 98112, + eli.holmes@noaa.gov, http://faculty.washington.edu/eeholmes}} +\title{Computation of Standardized Residuals for MARSS Models} +\date{original 31 Oct 2014 \\ +\small{\emph{added normalization calculations, 20 Oct 2020}}} +\maketitle +\begin{abstract} +This report walks through a derivation of the variance-covariance matrix for the joint conditional model and state residuals for multivariate autoregressive Gaussian state-space (MARSS) models. The bulk of the report focuses on `smoothations' residuals \citep{Harveyetal1998}, which are the residuals conditioned on all the data $t=1$ to $T$. The final part of the report covers `innovations' residuals, which are residuals conditioned on the data $t=1$ to $t-1$. + +The MARSS model can be written: $\xx_t=\BB\xx_{t-1}+\uu+\ww_t$, $\yy_t=\ZZ\xx_t+\zz+\vv_t$, where $\ww_t$ and $\vv_t$ are independent multivariate Gaussian error-terms with variance-covariance matrices $\QQ_t$ and $\RR_t$ respectively. The joint conditional residuals are the $\ww_t$ and $\vv_t$ conditioned on the observed data, which may be incomplete (missing values). Harvey, Koopman and Penzer (1998) show a recursive algorithm for the smoothation residuals (residuals conditioned on all the data). I show an alternate algorithm to compute these residuals using the conditional variances of the states and the conditional covariance between unobserved data and states. This allows one to compute the variance of un-observed smoothation residuals (residuals associated with missing or left-out data), which is needed for leave-one-out cross-validation tests using smoothation residuals. I show how to modify the Harvey et al. algorithm in the case of missing values and how to modify it to return the non-normalized conditional residuals. +\end{abstract} +Keywords: Time-series analysis, Kalman filter, residuals, maximum-likelihood, vector autoregressive model, dynamic linear model, parameter estimation, state-space +\vfill +{\noindent \small citation: Holmes, E. E. 2014. Computation of standardized residuals for (MARSS) models. Technical Report. arXiv:1411.0045 } + \newpage + +\section{Overview of MARSS residuals} + +This report discusses the computation of the variance of the conditional model and state residuals for MARSS models of the form: +\begin{equation}\label{eq:residsMARSS} +\begin{gathered} +\xx_t = \BB_t\xx_{t-1} + \uu_t + \ww_t, \text{ where } \WW_t \sim \MVN(0,\QQ_t)\\ +\yy_t = \ZZ_t\xx_t + \aa_t + \vv_t, \text{ where } \VV_t \sim \MVN(0,\RR_t)\\ +\XX_0 \sim \MVN(\xixi,\LAM) \text{ or } \xx_0 = \pipi . +\end{gathered} +\end{equation} +The state and model residuals are respectively +\begin{equation}\label{eq:resids} +\begin{gathered} +\ww_t = \xx_t - \BB_t\xx_{t-1} - \uu_t\\ +\vv_t = \yy_t - \ZZ_t\xx_t - \aa_t . +\end{gathered} +\end{equation} +The model (and state) residuals are a random variables since $\yy_t$ and $\xx_t$ are drawn from the joint multivariate distribution of $\YY_t$ and $\XX_t$ defined by the MARSS equations (Equation \ref{eq:residsMARSS}). +The unconditional\footnote{meaning not conditioning on any particular set of observed data but rather taking the expectation across all possible values of $\yy_t$ and $\xx_t$.} variance of the model residuals is +\begin{equation}\label{eq:unconditiondistofVt} +\var_{XY}[\VV_t] = \var_{XY}[\YY_t - (\ZZ_t \XX_t + \aa_t)] = \RR_t\\ +\end{equation} +based on the distribution of $\VV_t$ in Equation \ref{eq:residsMARSS}. $\var_{XY}$ indicates that the integration is over the joint unconditional distribution of $\XX$ and $\YY$. + +Once we have data, $\RR_t$ is not the variance-covariance matrix of our model residuals because our residuals are now conditioned\footnote{`conditioned' means that the probability distribution of the residual has changed. The distribution is now the distribution given that $\YY=\yy$, say. Expectations and variances $\var[ ]$ are integrals over the value that a random variable might take multiplied by the probability of that value. When presenting an `expectation', the probability distribution is normally implicit but for derivations involving conditional expectations, it is important to be explicit about the distribution that is being integrated over.} on a set of observed data. There are two types of conditional model residuals used in MARSS analyses: innovations and smoothations. Innovations are the model residuals at time $t$ using the expected value of $\XX_t$ conditioned on the data from 1 to $t-1$. Smoothations are the model residuals using the expected value of $\XX_t$ conditioned on all the data, $t=1$ to $T$. Smoothations are used in computing standardized residuals for outlier and structural break detection \citep{HarveyKoopman1992, Harveyetal1998, deJongPenzer1998, CommandeurKoopman2007}. + +It should be noted that all the calculations discussed here are conditioned on the MARSS parameters: $\BB$, $\QQ$, $\UU$, $\RR$, $\ZZ$ and $\AA$. These are treated as known. This is different than standard discussions of residual distributions for linear models where the uncertainty in the model parameters enters into the calculations (as it enters into the calculation of the influence of $\yy$ on the expected (or fitted) value of $\yy$). In the calculations in this report, $\yy$ does not affect the estimates of the parameters (which are fixed, perhaps at estimated values) but does affect the expected value of $\YY_t$ by affecting the estimate of the expected value and variance of $\XX_t$. + +\section{Distribution of MARSS smoothation residuals}\label{sec:smoothations} + +This section discusses computation of the variance of the model and state residuals conditioned on all the data from $t=1$ to $T$. These MARSS residuals are often used for outlier detection and shock detection, and in this case you only need the distribution of the model residuals for the observed values. However if you wanted to do a leave-one-out cross-validation, you would need to know the distribution of the residuals for data points you left out (treated as unobserved). The equations in this report give you the former and the latter, while the algorithm by \citet{Harveyetal1998} gives only the former. These equations for residuals for `left-out` data are different that other (typical) discussions of state-space cross-validation \citep{deJong1988} in that they are conditioned on all the data (smoothations residuals) rather than conditioned on data up to $t-1$ (innovations residuals). + +\subsection{Notation and relations} + +Throughout, I follow the convention that capital letters are random variables and small letters are a realization from the random variable. This only applies to random variables; parameters are not random variables\footnote{in a frequentist framework}. Parameters are shown in Roman font while while random variables are bold slanted font. Parameters written as capital letters are matrices, while parameters written in small letters are strictly column matrices. + +In this report, the distribution over which the integration is done in an expectation or variance is given by the subscript; e.g., $\E_A[f(A)]$ indicates an unconditional expectation over the distribution of $A$ without conditioning on another random variable while $\E_{A|b}[f(A)|b]$ would indicate an expectation over the distribution of $A$ conditioned on $B=b$; presumably $A$ and $B$ are not independent otherwise $B=b$ would have no effect on $A$. $\E_{A|b}[f(A)|b]$ is a fixed value, not random. It is the expected value when $B=b$. In contrast, $\E_{A|B}[f(A)|B]$ denotes the random variable over all the possible $\E_{A|b}[f(A)|b]$ given all the possible $b$ values that $B$ might take. The variance of $\E_{A|B}[f(A)|B]$ is the variance of this random variable. The variance of $\E_{A|b}[f(A)|b]$ in contrast is 0 since it is a fixed value. We will often be working with the random variables, $\E_{A|B}[f(A)|B]$ or $\var_{A|B}[f(A)|B]$, inside an expectation or variance: such as $\var_B[\E_{A|B}[f(A)|B]]$. + +\subsubsection{Law of total variance} + +The ``law of total variance'' can be written +\begin{equation}\label{eq:lawoftotvar} +\var_A[A] = \var_B[\E_{A|B}[A|B]] + \E_B[\var_{A|B}[A|B]] . +\end{equation} +The subscripts on the inner expectations make it explicit that the expectations are being taken over the conditional distributions. $\var_{A|B}[A|B]$ and $\E_{A|B}[A|B]$ are random variables because the $B$ in the conditional is a random variable. We take the expectation or variance with $B$ fixed at one value, $b$, but $B$ can take other values of $b$ also. + +Going forward, I will write the law or total variance more succinctly as +\begin{equation} +\var[A] = \var_B[\E[A|B]] + \E_B[\var[A|B]] . +\end{equation} +I leave off the subscript on the inner conditional expectation or variance. Just remember that when you see a conditional in an expectation or variance, the integration is over over the conditional distribution of $A$ conditioned on $B=b$. Even when you see $A|B$, the conditioning is on $B=b$ and the $B$ indicates that this is a random variable because $B$ can take different $b$ values. When computing $\var_B[\E_{A|B}[A|B]]$, we will typically compute $\E_{A|b}[A|b]$ and then compute (or infer) the variance or expectation of that over all possible values of $b$. + +The law of total variance will appear in this report in the following form: +\begin{equation} +\var_{XY}[f(\YY,\XX)] = \var_{Y^{(1)}}[\E_{XY|Y^{(1)}}[f(\YY,\XX)|\YY^{(1)}]] + \E_{Y^{(1)}}[\var_{XY|Y^{(1)}}[f(\YY,\XX)|\YY^{(1)}]] , +\end{equation} +where $f(\YY_t,\XX_t)$ is some function of $\XX_t$ and $\YY_t$ and $\YY^{(1)}$ is the observed data from $t=1$ to $T$ ($\YY^{(2)}$ is the unobserved data). + + +\subsection{Model residuals conditioned on all the data} + +Define the smoothations $\hatvt$ as: +\begin{equation}\label{eq:vtT} +\hatvt = \yy_t - \ZZ_t\hatxtT - \aa_t, +\end{equation} +where $\hatxtT$ is $\E[\XX_t|\yy^{(1)}]$. The smoothation is different from $\vv_t$ because it uses $\hatxtT$ not $\xx_t$; $\xx_t$ is not known, and $\hatxtT$ is its estimate. $\hatxtT$ is output by the Kalman smoother. $\yy^{(1)}$ means all the observed data from $t=1$ to $T$. $\yy^{(1)}$ is a sample from the random variable $\YY^{(1)}$. The unobserved $\yy$ will be termed $\yy^{(2)}$ and is a sample from the random variable $\YY^{(2)}$. When $\YY$ appears without a superscript, it means both $\YY^{(1)}$ and $\YY^{(2)}$ together. Similarly $\yy$ means both $\yy^{(1)}$ and $\yy^{(2)}$ together---the observed data that we use to estimate $\hatxtT$ and the unobserved data that we do not use and may or may not know. $\hatvt$ exists for both $\yy^{(1)}$ and $\yy^{(2)}$, though we might not know $\yy^{(2)}$ and thus might not know its corresponding $\hatvt$. In some cases, however, we do know $\yy^{(2)}$; they are data that we left out of our model fitting, in say a k-fold or leave-one-out cross-validation. + +$\hatvt$ is a sample from the random variable $\hatVt$. We want to compute the mean and variance of this random variable over all possibles values that $\XX_t$ and $\YY_t$ might take. The mean of $\hatVt$ is 0 and we are concerned only with computing the variance: +\begin{equation}\label{eq:var.vtT} +\var[\hatVt] = \var_{XY}[\YY_t - \ZZ_t\E[\XX_t|\YY^{(1)}] - \aa_t] . +\end{equation} +Notice we have an unconditional variance over ${\XX,\YY}$ on the outside and a conditional expectation over a specific value of $\YY^{(1)}$ on the inside (in the $\E[\;]$). + +From the law of total variance (Equation \ref{eq:lawoftotvar}), we can write the variance of the model residuals as +\begin{equation}\label{eq:varvvtgeneral} +\var[\hatVt] = \var_{Y^{(1)}}[\E[\hatVt|\YY^{(1)}]] + \E_{Y^{(1)}}[\var[\hatVt|\YY^{(1)}]] . +\end{equation} + +\subsubsection{First term on right hand side of Equation \ref{eq:varvvtgeneral}} + +The random variable inside the $\var[\;]$ in the first term is +\begin{equation}\label{eq:first.term.rhs.varvvtgeneral} +\E[\hatVt|\YY^{(1)}]= \E[(\YY_t + \ZZ_t \E[\XX_t|\YY^{(1)}] + \aa_t)|\YY^{(1)}] . +\end{equation} +Let's consider this for a specific value $\YY^{(1)}=\yy^{(1)}$. +\begin{equation} +\E[\hatVt|\yy^{(1)}] = \E[(\YY_t + \ZZ_t \E[\XX_t|\yy^{(1)}] + \aa_t)|\yy^{(1)}] = +\E[\YY_t|\yy^{(1)}] + \ZZ_t \E[\E[\XX_t|\yy^{(1)}]|\yy^{(1)}] + \E[\aa_t|\yy^{(1)}] . +\end{equation} +$\E[\XX_t|\yy^{(1)}]$ is a fixed value, and the expected value of a fixed value is itself. So $\E[\E[\XX_t|\yy^{(1)}]|\yy^{(1)}]=\E[\XX_t|\yy^{(1)}]$. +Thus, +\begin{equation} +\E[\hatVt|\yy^{(1)}] = \E[\YY_t|\yy^{(1)}] + \ZZ_t \E[\XX_t|\yy^{(1)}] + \E[\aa_t|\yy^{(1)}] . +\end{equation} +We can move the conditional out and write +\begin{equation} +\E[\hatVt|\yy^{(1)}]= \E[(\YY_t + \ZZ_t \XX_t + \aa_t)|\yy^{(1)}]=\E[\VV_t|\yy^{(1)}]. +\end{equation} +The right side is $\E[\VV_t|\yy^{(1)}]$, no `hat' on the $\VV_t$, and this applies for all $\yy^{(1)}$. This means that the first term in Equation \ref{eq:varvvtgeneral} can be written with no hat on $\VV$: +\begin{equation}\label{eq:no.hat.on.V} +\var_{Y^{(1)}}[\E[\hatVt|\YY^{(1)}]] = \var_{Y^{(1)}}[\E[\VV_t|\YY^{(1)}]] . +\end{equation} +If $\YY_t$ were completely observed (no missing values), this would be zero since $\E[\VV_t|\yy]$ would be a fixed value in that case. But $\YY_t$ is not assumed to be fully observed; it may have $\YY^{(2)}_t$ which is unobserved, or more precisely, not included in the estimation of $VV_t$ for whatever reason (`unknown" because it was unobserved being one reason). The derivation of $\E[\YY_t|\yy^{(1)}]$ is given in \citet{Holmes2010}\footnote{$\E[\YY^{(2)}_t|\yy^{(1)}]$ is not $\ZZ_t \hatxtT + \aa_t$ in general since $\YY^{(2)}_t$ and $\YY^{(1)}_t$ may be correlated through $\RR$ in addition to being correlated through $\hatxtT$}. + +Using the law of total variance, we can re-write $\var[\VV_t]$ as: +\begin{equation}\label{eq:varianceVt} +\var[\VV_t] = \var_{Y^{(1)}}[\E[\VV_t|\YY^{(1)}]] + \E_{Y^{(1)}}[\var[\VV_t|\YY^{(1)}]]. +\end{equation} +From Equation \ref{eq:varianceVt}, we can solve for $\var_{Y^{(1)}}[\E[\VV_t|\YY^{(1)}]]$: +\begin{equation}\label{eq:var.E.vtT} +\var_{Y^{(1)}}[\E[\VV_t|\YY^{(1)}]] = \var[\VV_t] - \E_{Y^{(1)}}[\var[\VV_t|\YY^{(1)}]]. +\end{equation} +From Equation \ref{eq:unconditiondistofVt}, we know that $\var[\VV_t]=\RR_t$ (this is the unconditional variance). Thus, +\begin{equation}\label{eq:var.E.vtT.R} +\var_{Y^{(1)}}[\E[\VV_t|\YY^{(1)}]] = \RR_t - \E_{Y^{(1)}}[\var[\VV_t|\YY^{(1)}]]. +\end{equation} + +The second term in Equation \ref{eq:var.E.vtT.R} to the right of the equal sign and inside the expectation is $\var[\VV_t|\YY^{(1)}]$. This is the variance of $\VV_t$ with $\YY^{(1)}$ held at a specific fixed $\yy^{(1)}$. The variability in $\var[\VV_t|\yy^{(1)}]$ (notice $\yy^{(1)}$ not $\YY^{(1)}$ now) comes from $\XX_t$ and $\YY^{(2)}$ which are random variables. Let's compute this variance for a specific $\yy^{(1)}$ value. +\begin{equation}\label{eq:varvtcondy} +\var[\VV_t|\yy^{(1)}] = \var[ \YY_t - \ZZ_t\XX_t-\aa_t | \yy^{(1)} ]. +\end{equation} +Notice that there is no $\E$ (expectation) on the $\XX_t$; this is $\VV_t$ not $\hatVt$. $\aa_t$ is a fixed value and can be dropped. + +Equation \ref{eq:varvtcondy} can be written as\footnote{$\var(A+B)=\var(A)+\var(B)+\cov(A,B)+\cov(B,A)$}: +\begin{equation}\label{eq:var.Vt.yy} +\begin{split} +\var[\VV_t|\yy^{(1)}] &= \var[ \YY_t - \ZZ_t\XX_t | \yy^{(1)} ]\\ +&=\var[ - \ZZ_t\XX_t | \yy^{(1)} ] + \var[ \YY_t|\yy^{(1)}] + \cov[ \YY_t, - \ZZ_t\XX_t | \yy^{(1)} ] + \cov[ - \ZZ_t\XX_t, \YY_t | \yy^{(1)} ]\\ +&=\ZZ_t \hatVtT \ZZ_t^\top + \hatUtT - \hatStT\ZZ_t^\top - \ZZ_t(\hatStT)^\top . +\end{split} +\end{equation} +$\hatVtT = \var[ \XX_t | \yy^{(1)} ]$ and is output by the Kalman smoother. $\hatUtT=\var[\YY_t|\yy^{(1)}]$ and $\hatStT=\cov[\YY_t,\XX_t|\yy^{(1)}]$. The equations for these are given in \citet{Holmes2010} and are output by the \verb@MARSShatyt()@ function in the \{MARSS\} package\footnote{$\hatUtT$ is \texttt{OtT - tcrossprod(ytT)} in the \texttt{MARSShatyt()} output.}. If there were no missing data, i.e., if $\yy^{(1)}=\yy$, then $\hatUtT$ and $\hatStT$ would be zero because $\YY_t$ would be fixed at $\yy_t$. This would reduce Equation \ref{eq:var.Vt.yy} to $\ZZ_t \hatVtT \ZZ_t^\top$. But we are concerned with the case where there are missing values. Those missing values need not be for all $t$. That is, there may be some observed $y$ at time t and some missing $y$. $\yy_t$ is multivariate. + +From Equation \ref{eq:var.Vt.yy}, we know $\var[\VV_t|\yy^{(1)}]$ for a specific $\yy^{(1)}$. We want $\E_{Y^{(1)}}[\var[\VV_t|\YY^{(1)}]]$ which is its expected value over all possible values of $\yy^{(1)}$. $\VV_t$ is a multivariate normal random variable with two random variables $\YY^{(1)}$ and $\YY^{(2)}$. The conditional variance of a multivariate Normal does not depend on the value that you are conditioning on. Let the $\AA$ be a N-dimensional multivariate Normal random variable partitioned into $\AA_1$ and $\AA_2$ with variance-covariance matrix $\Sigma = \begin{bmatrix} +\Sigma_1 & \Sigma_{12} \\ +\Sigma_21 & \Sigma_{2} +\end{bmatrix}$. The variance-covariance matrix of $\AA$ conditioned on $\AA_1=\aa$ is $\Sigma = \begin{bmatrix} +0 & 0 \\ +0 & \Sigma_2 - \Sigma_{12}\Sigma_{1}\Sigma_{21} +\end{bmatrix}$. Notice that $\aa$ does not appear in the conditional variance matrix. This means that $\var[\VV_t|\yy^{(1)}]$ does not depend on $\yy^{(1)}$. Its variance only depends on the MARSS model parameters\footnote{This also implies that $\hatVtT$, $\hatUtT$ and $\hatStT$ do not depend on $\yy^{(1)}$, which is rather counter-intuitive since $\yy^{(1)}$ is part of the algorithm (Kalman filter and smoother) used to compute these values. The value of $\yy^{(1)}$ affects the expected values of $\XX_t$ but only its presence\ (versus absence) affects $\XX_t$'s conditional variance.}. + +Because $\var[\VV_t|\yy^{(1)}]$ only depends on the MARSS parameters values, $\QQ$, $\BB$, $\RR$, etc., the second term in Equation \ref{eq:var.E.vtT}, $\E_{Y^{(1)}}[\var[\VV_t|\YY^{(1)}]]$, is equal to $\var[\VV_t|\yy^{(1)}]$ (Equation \ref{eq:var.Vt.yy}). Putting this into Equation \ref{eq:var.E.vtT.R}, we have +\begin{equation}\label{eq:conditionalvtfinala} +\var_{Y^{(1)}}[\E[\VV_t|\YY^{(1)})]] = \RR_t - \var[\VV_t|\yy^{(1)}] = \RR_t - \ZZ_t \hatVtT \ZZ_t^\top - \hatUtT + \hatStT\ZZ_t^\top + \ZZ_t(\hatStT)^\top. +\end{equation} +Since $\var_{Y^{(1)}}[\E[\VV_t|\YY^{(1)})]] = \var_{Y^{(1)}}[\E[\hatVt|\YY^{(1)})]]$ (Equation \ref{eq:no.hat.on.V}), this means that the first term in Equation \ref{eq:varvvtgeneral} is +\begin{equation}\label{eq:conditionalvtfinal} +\var_{Y^{(1)}}[\E[\hatVt|\YY^{(1)})]] = \RR_t - \ZZ_t \hatVtT \ZZ_t^\top - \hatUtT + \hatStT\ZZ_t^\top + \ZZ_t(\hatStT)^\top. +\end{equation} + +\subsubsection{Second term on right hand side of Equation \ref{eq:varvvtgeneral}} + +Consider the second term in Equation \ref{eq:varvvtgeneral}. This term is +\begin{equation}\label{eq:second.term.rhs.9} +\E_{Y^{(1)}}[\var[\hatVt|\YY^{(1)}]] = \E_{Y^{(1)}}[\var[(\YY_t-\ZZ_t\E[\XX_t|\YY^{(1)}]-\aa_t)|\YY^{(1)}]] . +\end{equation} +The middle term is: +\begin{equation} +\E_{Y^{(1)}}[\var[\E[\XX_t|\YY^{(1)}]|\YY^{(1)}]]. +\end{equation} +Let's solve the inner part for a specific $\YY^{(1)}=\yy^{(1)}$. $\E[\XX_t|\yy^{(1)}]$ is a fixed value. Thus $\var[\E[\XX_t|\yy^{(1)}]|\yy^{(1)}]=0$ since the variance of a fixed value is 0. This is true for all $\yy^{(1)}$ so the middle term reduces to 0. $\aa_t$ is also fixed and its variance is also 0. The covariance between a random variable and a fixed value is 0\footnote{$\var[A+B] = \var[A]+\var[B]+\cov[A,B]$}. Thus for a specific $\YY^{(1)}=\yy^{(1)}$, the inside of the right hand side expectation reduces to $\var[\YY_t|\yy^{(1)}]$ which is $\hatUtT$. As noted in the previous section, $\hatUtT$ is only a function of the MARSS parameters; it is not a function of $\yy^{(1)}$ and $\var[\YY_t|\yy^{(1)}]=\hatUtT$ for all $\yy^{(1)}$. Thus the second term in Equation \ref{eq:varvvtgeneral} is simply $\hatUtT$: +\begin{equation}\label{eq:second.term.rhs.9final} +\E_{Y^{(1)}}[\var[\hatVt|\YY^{(1)}]] = \var[\hatVt|\yy^{(1)}] = \hatUtT . +\end{equation} + +\subsubsection{Putting together the first and second terms} + +We can now put the first and second terms in Equation \ref{eq:varvvtgeneral} together (Equations \ref{eq:conditionalvtfinal} and \ref{eq:second.term.rhs.9final}) and write out the variance of the model residuals: +\begin{equation}\label{eq:first.and.secons.vvtgeneral} +\begin{split} +\var[\hatVt] &= \RR_t - \ZZ_t \hatVtT \ZZ_t^\top - \hatUtT + \hatStT\ZZ_t^\top + \ZZ_t(\hatStT)^\top + \hatUtT\\ +&= \RR_t - \ZZ_t \hatVtT \ZZ_t^\top + \hatStT\ZZ_t^\top + \ZZ_t(\hatStT)^\top . +\end{split} +\end{equation} +Equation \ref{eq:first.and.secons.vvtgeneral} will reduce to $\RR_t - \ZZ_t \hatVtT \ZZ_t^\top$ if $\yy_t$ has no missing values since $\hatStT = 0$ in this case. If $\yy_t$ is all missing values, $\hatStT = \ZZ_t \hatVtT$ because +\begin{equation}\label{eq:cov.Yt.Xt.no.missing.vals} +\cov[\YY_t, \XX_t|\yy^{(1)}] = \cov[\ZZ_t \XX_t + \aa_t + \VV_t, \XX_t|\yy^{(1)}] = \cov[\ZZ_t \XX_t, \XX_t|\yy^{(1)}] = \ZZ_t \cov[\XX_t, \XX_t|\yy^{(1)}] = \ZZ_t \hatVtT . +\end{equation} +The reduction in Equation \ref{eq:cov.Yt.Xt.no.missing.vals} occurs because $\VV_t$ and $\WW_t$ and by extension $\VV_t$ and $\XX_t$ are independent in the form of MARSS model used in this report (Equation \ref{eq:residsMARSS})\footnote{This is not the case for the \citet{Harveyetal1998} form of the MARSS model where $\VV_t$ and $\WW_t$ are allowed to be correlated.}. Thus when $\yy_t$ is all missing values, Equation \ref{eq:first.and.secons.vvtgeneral} will reduce to $\RR_t + \ZZ_t \hatVtT \ZZ_t^\top$ . The behavior if $\yy_t$ has some missing and some not missing values depends on whether $\RR_t$ is a diagonal matrix or not, i.e., if the $\yy_t^{(1)}$ and $\yy_t^{(2)}$ are correlated. + +\subsection{State residuals conditioned on the data} + +The state residuals are $\xx_t - (\BB_t \xx_{t-1} + \uu_t)=\ww_t$. The unconditional expected value of the state residuals is $\E[\XX_t - (\BB_t \XX_{t-1} + \uu_t)] = \E[\WW_t] = 0$ and the unconditional variance of the state residuals is +\begin{equation} +\var[\XX_t - (\BB_t \XX_{t-1} + \uu_t)] = \var[\WW_t] = \QQ_t +\end{equation} +based on the definition of $\WW_t$ in Equation \ref{eq:residsMARSS}. +The conditional state residuals (conditioned on the data from $t=1$ to $t=T$) are defined as +\begin{equation} +\hatwt = \hatxtT - \BB_t\hatxtmT - \uu_t. +\end{equation} +where $\hatxtT = E[\XX_t|\yy^{(1)}]$ and $\hatxtmT = E[\XX_{t-1}|\yy^{(1)}]$. $\hatwt$ is a sample from the random variable $\hatWt$; random over different possible data sets. The expected value of $\hatWt$ is 0, and we are concerned with computing its variance. + +We can write the variance of $\WW_t$ (no hat) using the law of total variance. +\begin{equation}\label{eq:Wlawoftotvar} +\var[\WW_t] = \var_{Y^{(1)}}[\E[\WW_t|\YY^{(1)}]] + \E_{Y^{(1)}}[\var[\WW_t|\YY^{(1)}]] . +\end{equation} +Notice that +\begin{equation} +\E[\WW_t|\yy^{(1)}] = \E[(\XX_t - \BB_t \XX_{t-1} - \uu_t)|\yy^{(1)}] = \hatxtT - \BB_t \hatxtmT - \uu_t = \E[\hatWt|\yy^{(1)}] = \hatwt . +\end{equation} +This is true for all $\yy^{(1)}$, thus $\E[\WW_t|\YY^{(1)}]$ is $\hatWt$, and $\var_{Y^{(1)}}[\E[\WW_t|\YY^{(1)}]] = \var[\hatWt]$. Equation \ref{eq:Wlawoftotvar} can thus be written +\begin{equation} +\var[\WW_t] = \var[\hatWt] + \E_{Y^{(1)}}[\var[\WW_t|\YY^{(1)}]] . +\end{equation} +Solve for $\var[\hatWt]$: +\begin{equation}\label{eq:varwwt} +\var[\hatWt] = \var[\WW_t] - \E_{Y^{(1)}}[\var[\WW_t|\YY^{(1)}]]. +\end{equation} + +The variance in the expectation on the far right for a specific $\YY^{(1)}=\yy^{(1)}$ is +\begin{equation} +\var[\WW_t|\yy^{(1)}] = \var[ (\XX_t - \BB_t\XX_{t-1}-\uu_t) | \yy^{(1)} ] . +\end{equation} +$\uu_t$ is not a random variable and can be dropped. Thus\footnote{$\var[A-B]=\var[A]+\var[B]+\cov[A,-B]+\cov[-B,A]$. Be careful about the signs in this case as they are a little non-intuitive.}, +\begin{equation}\label{eq:var.W.cond.y1} +\begin{split} +\var[\WW_t&|\yy^{(1)}] = \var[ (\XX_t - \BB_t\XX_{t-1}) | \yy^{(1)} ] \\ +& = \var[ \XX_t | \yy^{(1)} ] + \var[\BB_t\XX_{t-1} | \yy^{(1)} ] + \cov[\XX_t, -\BB_t\XX_{t-1} | \yy^{(1)} ] + \cov[ -\BB_t\XX_{t-1}, \XX_t | \yy^{(1)} ]\\ +& = \hatVtT + \BB_t \hatVtmT \BB_t^\top - \hatVttmT\BB_t^\top - \BB_t\hatVtmtT . +\end{split} +\end{equation} +Again this is conditional multivariate normal variance, and its value does not depend on the value, $\yy^{(1)}$ that we are conditioning on. It depends only on the parameters values, $\QQ$, $\BB$, $\RR$, etc., and is the same for all values of $\yy^{(1)}$. So $\E_{Y^{(1)}}[\var[\WW_t|\YY^{(1)}]] = \var[\WW_t|\yy^{(1)}]$, using any value of $\yy^{(1)}$. Thus +\begin{equation}\label{eq:E.var.Wt.yt} +\E_{Y^{(1)}}[\var[\WW_t|\YY^{(1)}]] = \hatVtT + \BB_t\hatVtmT\BB_t^\top - \hatVttmT\BB_t^\top - \BB_t\hatVtmtT . +\end{equation} + +Putting $\E_{Y^{(1)}}[\var[\WW_t|\YY^{(1)}]]$ from Equation \ref{eq:E.var.Wt.yt} and $\var[\WW_t]=\QQ_t$ into Equation \ref{eq:varwwt}, the variance of the conditional state residuals is +\begin{equation} +\var[\hatWt] = \QQ_t - \hatVtT - \BB_t\hatVtmT\BB_t^\top + \hatVttmT\BB_t^\top + \BB_t\hatVtmtT . +\end{equation} + +\subsection{Covariance of the conditional model and state residuals} + +The unconditional model and state residuals, $\VV_t$ and $\WW_t$, are independent by definition\footnote{This independence is specific to the way the MARSS model for this report (Equation \ref{eq:residsMARSS}). It is possible for the model and state residuals to covary. In the MARSS model written in \citet{Harveyetal1998} form, they do covary.} (in Equation \ref{eq:residsMARSS}), i.e., $\cov[\VV_t,\WW_t]=0$. However the conditional model and state residuals, $\cov[\hatVt,\hatWt]$, are not independent since both depend on $\yy^{(1)}$. +Using the law of total covariance, we can write +\begin{equation}\label{eq:covhatVtWt1} +\cov[\hatVt,\hatWt] = +\cov_{Y^{(1)}}[\E[\hatVt|\YY^{(1)}],\E[\hatWt|\YY^{(1)}]] + \E_{Y^{(1)}}[\cov[\hatVt, \hatWt|\YY^{(1)}]] . +\end{equation} + +For a specific value of $\YY^{(1)}=\yy^{(1)}$, the covariance in the second term on the right is $\cov[\hatVt, \hatWt|\yy^{(1)}]$. Conditioned on a specific value of $\YY^{(1)}$, $\hatWt$ is a fixed value, $\hatwt = \hatxtT - \BB_t\hatxtmT - \uu_t$, and conditioned on $\yy^{(1)}$, $\hatxtT$ and $\hatxtmT$ are fixed values. $\uu_t$ is also fixed; it is a parameter. $\hatVt$ is not a fixed value because it has $\YY_t^{(2)}$ and that is a random variable. Thus $\cov[\hatVt, \hatWt|\yy^{(1)}]$ is the covariance between a random variable and a fixed variable and thus the covariance is 0. This is true for all $\yy^{(1)}$. +Thus the second right-side term in Equation \ref{eq:covhatVtWt1} is zero, and the equation reduces to +\begin{equation}\label{eq:covhatVtWt3} +\cov[\hatVt,\hatWt] = \cov_{Y^{(1)}}[\E[\hatVt|\YY^{(1)}],\E[\hatWt|\YY^{(1)}]]. +\end{equation} +Notice that $\E[\hatWt|\yy^{(1)}]=\E[\WW_t|\yy^{(1)}]$ and $\E[\hatVt|\yy^{(1)}]=\E[\VV_t|\yy^{(1)}]$ since +\begin{equation} +\E[\WW_t|\yy^{(1)}]= \E[\XX_t|\yy^{(1)}]-\BB_t\E[\XX_{t-1}|\yy^{(1)}] - \uu_t = \hatxtT-\BB_t\hatxtmT - \uu_t = \hatwt = \E[\hatWt|\yy^{(1)}] +\end{equation} +and +\begin{equation} +\E[\VV_t|\yy^{(1)}]= \E[\YY_t|\yy^{(1)}]-\ZZ_t\E[\XX_{t}|\yy^{(1)}] - \aa_t = \E[\YY_t|\yy^{(1)}]-\ZZ_t \hatxtT - \aa_t = \E[\hatVt|\yy^{(1)}] . +\end{equation} +Thus the right side of Equation \ref{eq:covhatVtWt3} can be written in terms of $\VV_t$ and $\WW_t$ instead of $\hatVt$ and $\hatWt$: +\begin{equation}\label{eq:covhatVtWt2} +\cov[\hatVt,\hatWt] = \cov_{Y^{(1)}}[\E[\VV_t|\YY^{(1)}],\E[\WW_t|\YY^{(1)}]]. +\end{equation} + +Using the law of total covariance, we can write: +\begin{equation}\label{eq:covVtWt} +\cov[\VV_t, \WW_t] = \E_{Y^{(1)}}[\cov[\VV_t, \WW_t|\YY^{(1)}]] + \cov_{Y^{(1)}}[\E[\VV_t|\YY^{(1)}],\E[\WW_t|\YY^{(1)}]] . +\end{equation} +The unconditional covariance of $\VV_t$ and $\WW_t$ is 0. Thus the left side of Equation \ref{eq:covVtWt} is 0 and we can rearrange the equation as +\begin{equation}\label{eq:covVtWt2} +\cov_{Y^{(1)}}[\E[\VV_t|\YY^{(1)}],\E[\WW_t|\YY^{(1)}]] = - \E_{Y^{(1)}}[\cov[\VV_t, \WW_t|\YY^{(1)}]] . +\end{equation} +Combining Equation \ref{eq:covhatVtWt2} and \ref{eq:covVtWt2}, we get +\begin{equation}\label{eq:conditionalcovvtwt} +\cov[\hatVt,\hatWt] = - \E_{Y^{(1)}}[ \cov[\VV_t, \WW_t|\YY^{(1)}] ] , +\end{equation} +and our problem reduces to solving for the conditional covariance of the model and state residuals (right side of Equation \ref{eq:conditionalcovvtwt}). + +For a specific $\YY^{(1)}=\yy^{(1)}$, the conditional covariance $\cov[\VV_t, \WW_t|\yy^{(1)}]$ can be written out as +\begin{equation} +\cov[\VV_t, \WW_t|\yy^{(1)}] = \cov[\YY_t-\ZZ_t\XX_t-\aa_t,\, \XX_t-\BB_t\XX_{t-1}-\uu_t|\yy^{(1)}] . +\end{equation} +$\aa_t$ and $\uu_t$ are fixed values and can be dropped. Thus\footnote{$\cov[\BB \mathbf{A},\CC \mathbf{D}]=\BB\cov[\mathbf{A},\mathbf{D}]\CC^\top$.} +\begin{equation} +\begin{split} +\cov&[\VV_t, \WW_t|\yy^{(1)}] =\cov[\YY_t-\ZZ_t\XX_t, \XX_t-\BB_t\XX_{t-1}|\yy^{(1)}] \\ +& =\cov[\YY_t,\XX_t|\yy^{(1)}] + \cov[\YY_t,-\BB_t\XX_{t-1}|\yy^{(1)}] + \cov[-\ZZ_t\XX_t,\XX_t|\yy^{(1)}] + \cov[-\ZZ_t\XX_t,-\BB_t\XX_{t-1}|\yy^{(1)}]\\ +& = \hatStT - \hatSttmT\BB_t^\top - \ZZ_t \hatVtT + \ZZ_t\hatVttmT\BB_t^\top , +\end{split} +\end{equation} +where $\hatStT=\cov[\YY_t,\XX_t|\yy^{(1)}]$ and $\hatSttmT=\cov[\YY_t,\XX_{t-1}|\yy^{(1)}]$; the equations for $\hatStT$ and $\hatSttmT$ are given in \citet{Holmes2010} and are output by the \verb@MARSShatyt()@ function in the \{MARSS\} package. + +Both $\VV_t$ and $\WW_t$ are multivariate normal random variables that depend on $\YY^{(1)}$ and $\YY^{(2)}$ and the conditional covariance is not a function of the variable that we condition on (in this case $\yy^{(1)}$). The conditional covariance is only a function of the MARSS parameters\footnote{By extension, this is also the case for $\hatVtT$, $\hatVttmT$, $\hatStT$ and $\hatSttmT$ which may seem counter-intuitive, but you can show it is true by working through the Kalman filter and smoother equations starting at t=1. Or run a Kalman filter/smoother algorithm with different data and the same parameters and you will see that the variances do not change with different data.}. Thus +\begin{equation} +\E_{Y^{(1)}}[ \cov[\VV_t, \WW_t|\YY^{(1)}] ]= \cov[\VV_t, \WW_t|\yy^{(1)}] = \hatStT - \hatSttmT\BB_t^\top - \ZZ_t \hatVtT + \ZZ_t\hatVttmT\BB_t^\top . +\end{equation} +$\cov[\hatVt,\hatWt]$ is the negative of this (Equation \ref{eq:conditionalcovvtwt}), thus +\begin{equation} +\cov[\hatVt,\hatWt] = - \hatStT + \hatSttmT\BB_t^\top + \ZZ_t \hatVtT - \ZZ_t\hatVttmT\BB_t^\top . +\end{equation} + +The Harvey et al. algorithm (next section) gives the joint distribution of the model residuals at time $t$ and state residuals at time $t+1$. Using the law of total covariance as above, the covariance in this case is +\begin{equation} +\cov_{Y^{(1)}}[\E[\VV_t|\YY^{(1)}],\E[\WW_{t+1}|\YY^{(1)}]] = - \E_{Y^{(1)}}[ \cov[\VV_t, \WW_{t+1}|\YY^{(1)}] ] +\end{equation} +and +\begin{equation} +\begin{split} +\cov[\VV_t, \WW_{t+1}|\yy^{(1)}] & =\cov[\YY_t-\ZZ_t\XX_t-\aa_t,\, \XX_{t+1}-\BB_{t+1}\XX_t-\uu_{t+1}|\yy^{(1)}] \\ +& =\cov[\YY_t-\ZZ_t\XX_t,\, \XX_{t+1}-\BB_{t+1}\XX_t|\yy^{(1)}] \\ +& = \hatSttpT - \hatStT\BB_{t+1}^\top - \ZZ_t\hatVttpT + \ZZ_t \hatVtT \BB_{t+1}^\top . +\end{split} +\end{equation} +Thus, +\begin{equation} +\begin{split} +\cov_{Y^{(1)}}[\E[\VV_t|\YY^{(1)}],\E[\WW_{t+1}|\YY^{(1)}]] & = - \E_{Y^{(1)}}[ \cov[\VV_t, \WW_{t+1}|\YY^{(1)}] ] \\ +& = - \hatSttpT + \hatStT\BB_{t+1}^\top + \ZZ_t\hatVttpT - \ZZ_t\hatVtT\BB_{t+1}^\top. +\end{split} +\end{equation} + + +\subsection{Joint distribution of the conditional residuals} + +We now can write the variance of the joint distribution of the conditional residuals. Define +\begin{equation} +\widehat{\varepsilon}_t = \begin{bmatrix}\hatvt\\ \hatwt\end{bmatrix} = +\begin{bmatrix}\yy_t - \ZZ_t\hatxtT - \aa_t\\ \hatxtT - \BB_t\hatxtmT - \uu_t \end{bmatrix}. +\end{equation} +$\widehat{\varepsilon}_t$ is a sample drawn from the distribution of the random variable $\widehat{\mathcal{E}}_t$. The expected value of $\widehat{\mathcal{E}}_t$ over all possible $\yy$ is 0 and the variance of $\widehat{\mathcal{E}}_t$ is +\begin{equation} +\widehat{\Sigma}_t = \var[\widehat{\mathcal{E}}_t] = \begin{bmatrix}[c|c] + \var[\hatVt]& + \cov[\hatVt, \hatWt] \\ + \rule[.5ex]{20ex}{0.25pt} & \rule[.5ex]{20ex}{0.25pt} \\ + (\cov[\hatVt, \hatWt])^\top& + \var[\hatWt] \end{bmatrix} +\end{equation} +which is +\begin{equation}\label{eq:jointcondresid1general} + \begin{bmatrix}[c|c] + \RR_t - \ZZ_t\hatVtT\ZZ_t^\top + \hatStT\ZZ_t^\top+\ZZ_t(\hatStT)^\top& + - \hatStT + \hatSttmT\BB_t^\top + \ZZ_t\hatVtT - \ZZ_t\hatVttmT\BB_t^\top\\ + \rule[.5ex]{40ex}{0.25pt} & \rule[.5ex]{50ex}{0.25pt} \\ + (- \hatStT + \hatSttmT\BB_t^\top + \ZZ_t\hatVtT - \ZZ_t\hatVttmT\BB_t^\top)^\top& + \QQ_t - \hatVtT - \BB_t\hatVtmT\BB_t^\top + \hatVttmT\BB_t^\top + \BB_t\hatVtmtT \end{bmatrix}, +\end{equation} +where $\hatStT=\cov[\YY_t,\XX_t|\yy^{(1)}]$, $\hatSttmT=\cov[\YY_t,\XX_{t-1}|\yy^{(1)}]$, $\hatVtT=\var[\XX_t|\yy^{(1)}]$, $\hatVttmT=\cov[\XX_t,\XX_{t-1}|\yy^{(1)}]$, and $\hatVtmtT=\cov[\XX_{t-1},\XX_t|\yy^{(1)}]$. This gives the variance of both `observed' model residuals (the ones associated with $\yy^{(1)}$) and the unobserved model residuals (the ones associated with $\yy^{(2)}$). +When there are no missing values in $\yy_t$, the $\hatStT$ and $\hatSttmT$ terms equal 0 and drop out. + +If the residuals are defined as in \citet{Harveyetal1998} with $\hatvt$ on top and $\hatwtp$ on the bottom instead of $\hatwt$, then +\begin{equation} +\widehat{\varepsilon}_t = \begin{bmatrix}\hatvt\\ \hatwtp \end{bmatrix} = +\begin{bmatrix}\yy_t - \ZZ_t\hatxtT - \aa_t\\ \hatxtpT - \BB_{t+1}\hatxtT - \uu_{t+1} \end{bmatrix} +\end{equation} +and the variance of $\widehat{\mathcal{E}}_t$ is +\begin{equation} + \begin{bmatrix}[c|c] + \var[\hatVt]& + \cov[\hatVt, \hatWtp] \\ + \rule[.5ex]{20ex}{0.25pt} & \rule[.5ex]{20ex}{0.25pt} \\ + (\cov[\hatVt, \hatWtp])^\top& + \var[\hatWtp] \end{bmatrix} +\end{equation} +which is +\begin{equation}\label{eq:jointcondresid2} +\begin{bmatrix}[c|c] +\RR_t - \ZZ_t\hatVtT\ZZ_t^\top + \hatStT\ZZ_t^\top + \ZZ_t(\hatStT)^\top& +- \hatSttpT + \hatStT\BB_{t+1}^\top + \ZZ_t\hatVttpT - \ZZ_t\hatVtT\BB_{t+1}^\top \\ +\rule[.5ex]{40ex}{0.25pt} & \rule[.5ex]{50ex}{0.25pt} \\ +(- \hatSttpT + \hatStT\BB_{t+1}^\top + \ZZ_t\hatVttpT - \ZZ_t\hatVtT\BB_{t+1}^\top)^\top& +\QQ_{t+1} - \hatVtpT - \BB_{t+1}\hatVtT\BB_{t+1}^\top + \hatVtptT \BB_{t+1}^\top + \BB_{t+1}\hatVttpT \end{bmatrix} . +\end{equation} + + + +\section{Harvey et al. 1998 algorithm for the conditional residuals} +\citet[pgs 112-113]{Harveyetal1998} give a recursive algorithm for computing the variance of the conditional residuals when the time-varying MARSS equation is written as: +\begin{equation}\label{eq:residsMARSSHarvey} +\begin{gathered} +\xx_{t+1} = \BB_{t+1}\xx_t + \uu_{t+1} + \HH_{t+1}\epsilon_{t},\\ +\yy_t = \ZZ_t\xx_t + \aa_t + \GG_t\epsilon_t,\\ +\mbox{ where } \epsilon_t \sim \MVN(0,\II_{m+n \times m+n}) \\ +\HH_t\HH_t^\top=\QQ_t, \GG_t\GG_t^\top=\RR_t, \text{ and } \HH_t\GG_t^\top = \cov[\WW_t, \VV_t] +\end{gathered} +\end{equation} +The $\HH_t$ and $\GG_t$ matrices specify the variance and covariance of $\WW_t$ and $\VV_t$. $\HH_t$ has $m$ rows and $m+n$ columns and $\GG_t$ has $n$ rows and $m+n$ columns. In the MARSS equation for this report (Equation \ref{eq:residsMARSS}), $\WW_t$ and $\VV_t$ are independent. To achieve this in the Harvey et al. form (Equation \ref{eq:residsMARSSHarvey}), the first $n$ columns of $\HH_t$ are all 0 and the last $m$ columns of $\GG_t$ are all zero. + +The algorithm in \citet{Harveyetal1998} gives the variance of the `normalized' residuals, the $\epsilon_t$. I have modified their algorithm so it returns the `non-normalized' residuals: +$$\varepsilon_t=\begin{bmatrix}\GG_t\epsilon_t\\ \HH_{t+1}\epsilon_t\end{bmatrix}=\begin{bmatrix}\vv_t\\ \ww_{t+1} \end{bmatrix}.$$ + +The Harvey et al. algorithm is a backwards recursion using the following output from the Kalman filter: the one-step ahead prediction covariance $\FF_t$, the Kalman gain $\KK_t$, $\hatxttm=\E[\XX_t|\yy^{(1),1:{t-1}}]$ and $\hatVttm=\var[\XX_t|\yy^{(1),1:{t-1}}]$. In the \{MARSS\} package, these are output from \texttt{MARSSkfss()} in \texttt{Sigma}, \texttt{Kt}, \texttt{xtt1} and \texttt{Vtt1}. + +\subsection{Algorithm for the non-normalized residuals} + +Start from $t=T$ and work backwards to $t=1$. At time $T$, $r_T=0_{1 \times m}$ and $N_T=0_{m \times m}$. $\BB_{t+1}$ and $\QQ_{t+1}$ can be set to NA or 0. They will not appear in the algorithm at time $T$ since $r_T=0$ and $N_T=0$. Note that the $\ww$ residual and its associated variance and covariance with $\vv$ at time $T$ is NA since this residual would be for $\xx_T$ to $\xx_{T+1}$. + +% algorithm with \GG_t and \HH_t +% \begin{equation}\label{eq:Harveyalgo} +% \begin{gathered} +% \FF_t = \ZZ_t\hatVt\ZZ_t^\top+\RR_t\\ +% G_t= \GG_t\QQ_t\GG_t^\top, \mbox{ }H_t = \HH_t\RR_t\HH_t^\top, \mbox{ } K_t = \BB_t\KK^{*}_t\\ +% L_t = \BB_t - K_t\ZZ_t, \mbox{ } J_t= H_t - K_t G_t, \mbox{ } u_t = \FF_t^{-1} - K_t^\top r_t\\ +% r_{t-1} = \ZZ_t^\top u_t + \BB_t^\top r_t, \mbox{ } N_{t-1} = K_t^\top N_t K_t + L_t^\top N_t L_t +% \end{gathered} +% \end{equation} + +\begin{equation}\label{eq:Harveyalgo} +\begin{gathered} +\QQ^\prime_{t+1}=\begin{bmatrix}0_{m \times n}&\QQ_{t+1}\end{bmatrix}, \mbox{ } \RR^\prime_t=\begin{bmatrix}\RR_t^* & 0_{n \times m}\end{bmatrix}\\ +\FF_t = \ZZ_t^*\hatVttm{\ZZ_t^*}^\top+\RR_t^* , \,\, n \times n \\ +K_t = \BB_{t+1}\KK_t = \BB_{t+1} \hatVttm{\ZZ_t^*}^\top \FF_t^{-1} , \,\, m \times n \\ +L_t = \BB_{t+1} - K_t\ZZ_t^* , \,\, m \times m \\ +J_t= \QQ^\prime_{t+1} - K_t \RR^\prime_t , \,\, m \times (n+m) \\ +v_t = \yy_t^* - \ZZ_t\hatxttm - \aa_t , \,\, n \times 1 \\ +u_t = \FF_t^{-1} v_t - K_t^\top r_t , \,\, n \times 1 \\ +r_{t-1} = {\ZZ_t^*}^\top u_t + \BB_{t+1}^\top r_t , \,\, m \times 1 \\ +N_{t-1} = {\ZZ_t^*}^\top \FF_t^{-1} \ZZ_t^* + L_t^\top N_t L_t , \,\, m \times m . +\end{gathered} +\end{equation} +$\yy_t^*$ is the observed data at time $t$ with the $i$-th rows set to 0 if the $i$-th $y$ is missing. +Bolded terms are the same as in Equation \ref{eq:residsMARSSHarvey} (and are output by \texttt{MARSSkfss()}). Unbolded terms are terms used in \citet{Harveyetal1998}. The * on $\ZZ_t$ and $\RR_t$, indicates that they are the missing value modified versions discussed in \citet[section 6.4]{ShumwayStoffer2006} and \citet{Holmes2010}: to construct $\ZZ_t^*$ and $\RR_t^*$, the rows of $\ZZ_t$ corresponding to missing rows of $\yy_t$ are set to zero and the $(i,j)$ and $(j,i)$ terms of $\RR_t$ corresponding the missing rows of $\yy_t$ are set to zero. For the latter, this means if the $i$-th row of $\yy_t$ is missing, then then the $i$-th row and column (including the value on the diagonal) in $\RR_t$ are set to 0. Notice that $\FF_t$ will have 0's on the diagonal if there are missing values. A modified inverse of $\FF_t$ is used: any 0's on the diagonal of $\FF_t$ are replaced with 1, the inverse is taken, and 1s on diagonals is replaced back with 0s. + +The residuals \citep[eqn 24]{Harveyetal1998} are +\begin{equation}\label{eq:Harveyresiduals} +\widehat{\varepsilon}_t = \begin{bmatrix}\hatvt\\ \hatwtp \end{bmatrix} =({\RR^\prime_t})^\top u_t + ({\QQ^\prime_{t+1}})^\top r_t +\end{equation} +The expected value of $\widehat{\mathcal{E}}_t$ is 0 and its variance is +\begin{equation}\label{eq:Harveyvariance} +\widehat{\Sigma]}_t = \var[\widehat{\mathcal{E}}_t] ={\RR^\prime_t}^\top \FF_t^{-1} \RR^\prime_t + J_t^\top N_t J_t . +\end{equation} +These $\widehat{\varepsilon}_t$ and $\widehat{\Sigma]}_t$ are for both the non-missing and missing $\yy_t$. This is a modification to the \citet{Harveyetal1998} algorithm which does not give the variance for missing $\yy$. + +\subsection{Difference in notation} + +In Equation 20 in \citet{Harveyetal1998}, their $T_t$ is my $\BB_{t+1}$ and their $H_t H_t^\top$ is my $\QQ_{t+1}$. Notice the difference in the time indexing. My time indexing on $\BB$ and $\QQ$ matches the left $\xx$ while in theirs, $T$ and $H$ indexing matches the right $\xx$. Thus in my implementation of their algorithm \citep[eqns. 21-24]{Harveyetal1998}, $\BB_{t+1}$ appears in place of $T_t$ and $\QQ_{t+1}$ appears in place of $H_t$. See comments below on normalization and the difference between $\QQ$ and $H$. + +\citet[eqns. 19, 20]{Harveyetal1998} use $G_t$ to refer to the $\chol(\RR_t)^\top$ (non-zero part of the $n \times n+m$ matrix) and $H_t$ to refer to $\chol(\QQ_t)^\top$. I have replaced these with $\RR_t^\prime$ and $\QQ_t^\prime$ (Equation \ref{eq:Harveyalgo}) which causes my variant of their algorithm (Equation \ref{eq:Harveyalgo}) to give the `non-normalized' variance of the residuals. The residuals function in the \{MARSS\} package has an option to give either normalized or non-normalized residuals. + +$\KK_t$ is the Kalman gain output by the \{MARSS\} package \verb@MARSSkf()@ function. The Kalman gain as used in the \citet{Harveyetal1998} algorithm is $K_t=\BB_{t+1}\KK_t$. Notice that Equation 21 in \citet{Harveyetal1998} has $H_t G_t^\top$ in the equation for $K_t$. This is the covariance of the state and observation errors, which is allowed to be non-zero given the way Harvey et al. write the errors in their Equations 19 and 20. The way the \{MARSS\} package model is written, the state and observation errors are independent of each other. Thus $H_t G_t^\top = 0$ and this term drops out of the $K_t$ equation in Equation \ref{eq:Harveyalgo}. + +\subsection{Computing the normalized residuals} + +To compute the normalized residuals and residuals variance, a block diagonal matrix with the inverse of the $\RR$ and $\QQ$ matrices is used. The normalized residuals are: +\begin{equation} +\begin{bmatrix}\RR^{-1}_t&0\\0&\QQ^{-1}_t\end{bmatrix} \widehat{\varepsilon}_t +\end{equation} +The variance of the normalized residuals is +\begin{equation} +\begin{bmatrix}\RR^{-1}_t&0\\0&\QQ^{-1}_t\end{bmatrix} \widehat{\Sigma]}_t \begin{bmatrix}\RR^{-1}_t&0\\0&\QQ^{-1}_t\end{bmatrix} +\end{equation} + +\subsection{Computing the Cholesky standardized residuals} + +The Cholesky standardized residuals are computed by multiplying $\widehat{\varepsilon}_t$ by $(\widehat{\Sigma}_t)^{-1/2}$ (the inverse of the Cholesky decomposition of the variance-covariance matrix for $\widehat{\varepsilon}_t$): +\begin{equation}\label{eq:std.resid} +\widehat{\varepsilon}_{t, std} = (\widehat{\Sigma}_t)^{-1/2}\widehat{\varepsilon}_t . +\end{equation} +These residuals are uncorrelated (across the residuals at time $t$ in $\widehat{\varepsilon}_t$). See \citet{HarveyKoopman1992} and \citet[section V]{Harveyetal1998} for a discussion on how to use these residuals for outlier detection and structural break detection. + +It is also common to use the marginal standardized residuals, which would be $\widehat{\varepsilon}_t$ multiplied by the inverse of the square-root of $\dg(\widehat{\Sigma}_t)$, where $\dg(\AA)$ is a diagonal matrix formed from the diagonal of the square matrix $\AA$. +\begin{equation} +\widehat{\varepsilon}_{t, mar} = \dg(\widehat{\Sigma}_t)^{-1/2}\widehat{\varepsilon}_t +\end{equation} +Marginal standardized residuals may be correlated at time $t$ (unlike the Cholesky standardized residuals) but are a bit easier to interpret when there is correlation across the model residuals. + +\section{Distribution of the MARSS innovation residuals} + +One-step-ahead predictions (innovations) are often shown for MARSS models and these are used for likelihood calculations. Innovations are the difference between the data at time $t$ minus the prediction of $\yy_t$ given data up to $t-1$. This section gives the residual variance for the innovations and the analogous values for the states. Innovations residuals are the more common residuals discussed for state-space models; these are also known as the `one-step-ahead` prediction residuals. + +\subsection{One-step-ahead model residuals} + +Define the innovations $\checkvt$ as: +\begin{equation}\label{eq:vtt1} +\checkvt = E[\YY_t|\yy^{(1)}_t] - \ZZ_t\hatxttm - \aa_t, +\end{equation} +where $\hatxttm$ is $\E[\XX_t|\yy^{(1),t-1}]$ (expected value of $\XX_t$ conditioned on the data up to time $t-1$). The random variable, innovations over all possible $\yy_t$, is $\checkVt$. Its mean is 0 and we want to find its variance. + +This is conceptually different than the observed `innovations'. First, this is the random variable `innovation'. $\yy^{(1)}_t$ here is not the actual data that you observe (the one data set that you have). It's the data that you could observe. $\yy_t$ is a sample from the random variable $\YY_t$ and $\checkvt$ is a sample from the innovations you could observe. Second, $\checkvt$ includes both $\yy_t^{(1)}$ and $\yy_t^{(2)}$ (observed and unobserved $\yy$). Normally, the innovations for missing data would appear as 0s, e.g., from a call to \verb@MARSSfss()@. For missing data, $\checkvt$ is not necessarily 0. For example if $\yy$ is multivariate and correlated with each other through $\RR$ or a shared $\xx$ dependency. + +The derivation of the variance of $\checkVt$ follows the exact same steps as the smoothations $\hatVt$, except that we condition on the data up to $t-1$ not up to $T$. Thus using Equation \ref{eq:first.and.secons.vvtgeneral}, we can write the variance directly as: +\begin{equation}\label{eq:innov.model} +\var[\checkVt] = \RR_t - \ZZ_t \hatVttm \ZZ_t^\top + \hatSttm\ZZ_t^\top + \ZZ_t(\hatSttm)^\top +\end{equation} +where the $\hatVttm$ and $\hatSttm$ are now conditioned on only the data from 1 to $t-1$. +$\hatSttm = \cov[\YY_t,\XX_t|\yy^{(1), t-1}] = \cov[\ZZ_t \XX_t + \aa_t+\VV_t,\XX_t|\yy^{(1), t-1}]$. +$\yy_t$ is not in the conditional since it only includes data up to $t-1$. Without $\yy_t$ in the conditional, $\VV_t$ and $\WW_t$ and by extension $\VV_t$ and $\XX_t$ are independent\footnote{This is only true given the way the MARSS equation is written in this report where $V_t$ and $W_t$ are independent. This is not the case for the more general Harvey et al. MARSS model which allows covariance between $V_t$ and $W_t$.} and $\cov[\ZZ_t \XX_t + \aa_t + \VV_t,\XX_t|\yy^{(1), t-1}] = \cov[\ZZ_t \XX_t,\XX_t|\yy^{(1), t-1}] = \ZZ_t \hatVttm$. Therefore, $\ZZ_t(\hatSttm)^\top = \ZZ_t \hatVttm \ZZ_t^\top = \hatSttm(\ZZ_t)^\top$. Thus Equation \ref{eq:innov.model} reduces to +\begin{equation}\label{eq:innov.model2} +\var[\checkVt] = \RR_t + \ZZ_t \hatVttm \ZZ_t^\top. +\end{equation} + +Note $\var[\checkVt]$ is a standard output from Kalman filter functions and is used to compute the likelihood of the data (conditioned on a set of parameters). In the Kalman filter in the \{MARSS\} package, it is output as \texttt{Sigma} from \texttt{MARSSkfss()}. + + +\subsection{One-step ahead state residuals} + +Define the state residuals conditioned on the data from 1 to $t-1$ as $\checkwt$. +\begin{equation}\label{eq:wtt1} +\checkwt = \hatxtt - \BB_t\hatxtmt1 - \uu_t, +\end{equation} +where $\hatxtmt1$ is $\E[\XX_{t-1}|\yy^{(1),t-1}]$ (expected value of $\XX_{t-1}$ conditioned on the data up to time $t-1$) and $\hatxtt$ is $\E[\XX_{t}|\yy^{(1),t}]$ (expected value of $\XX_{t}$ conditioned on the data up to time $t$). +From the Kalman filter equations: +\begin{equation}\label{eq:wtt1.2} +\hatxtt = \BB_t\hatxtmt1 + \uu_t + \KK_t \checkvt +\end{equation} +Thus, $\checkwt$ is a transformed $\checkvt$: +\begin{equation}\label{eq:wtt1.3} +\checkwt = \KK_t \checkvt, +\end{equation} +where $\KK_t$ is the Kalman gain. $\KK_t = \hatVttm \ZZ_t^\top[\ZZ_t \hatVttm \ZZ_t^\top + \RR_t]^{-1}$ and $\ZZ_t$ is the missing values modified $\ZZ_t$ where if the $i$-th $\yy_t$ is missing, the $i$-th row of $\ZZ_t$ is set to all 0s (Shumway and Stoffer 2006, equation 6.78). +Thus the variance of $\checkWt$ is +\begin{equation}\label{eq:var.Wt} +\var[\checkWt] = \KK_t \var[\checkVt] \KK_t^\top +\end{equation} + +\subsection{Joint distribution of the conditional one-step-ahead residuals} + +\subsubsection{with the state residuals defined from $t-1$ to $t$} + +Define the one-step ahead residuals as +\begin{equation} +\overline{\varepsilon}_t = \begin{bmatrix}\checkvt\\ \checkwt \end{bmatrix} +\end{equation} + +The covariance of $\checkVt$ and $\checkWt$ is +\begin{equation}\label{eq:covhatVtWtp.onestep} +\cov[\checkVt,\checkWtp] = \cov[\checkVt,\KK_{t}\checkVt] = \var[\checkVt]\KK_{t}^\top +\end{equation} + + +The joint variance-covariance matrix is +\begin{equation}\label{eq:jointcondresid.onestep} +\overline{\Sigma}_t = \var[\overline{\varepsilon}_t] = \begin{bmatrix}[c|c] + \var[\checkVt]& \var[\checkVt]\KK_{t}^\top\\ + \rule[.5ex]{20ex}{0.25pt} & \rule[.5ex]{20ex}{0.25pt} \\ +\KK_{t}\var[\checkVt]& \KK_{t}\var[\checkVt]\KK_{t}^\top \end{bmatrix}, +\end{equation} + +Since $\checkwt=\KK_t \checkvt$, the state one-step-ahead residuals are perfectly correlated with the model one-step-ahead residuals so the joint distribution is not useful (all the information is in the variance of $\checkVt$). + + +The Cholesky standardized residuals for $\overline{\varepsilon}_t$ are +\begin{equation} +\overline{\Sigma}_t^{-1/2} \overline{\varepsilon}_t +\end{equation} +However the Cholesky standardized joint residuals cannot be computed since $\overline{\Sigma}_t$ is not positive definite. Because $\checkwt$ equals $\KK_t \checkvt$, the state residuals are completely explained by the model residuals. However we can compute the Cholesky standardized model residuals using +\begin{equation} +\var[\checkVt]^{-1/2} \checkvt +\end{equation} +$\var[\checkVt]^{-1/2}$ is the inverse of the lower triangle of the Cholesky decomposition of $\var[\checkVt]$. + +The marginal standardized joint residuals for $\overline{\varepsilon}_t$ (both model and state one-step ahead residuals) can be computed with the inverse of the square root of the diagonal of $\overline{\Sigma}_t$: +\begin{equation} +\dg(\overline{\Sigma}_t)^{-1/2} \overline{\varepsilon}_t +\end{equation} +where $dg(\AA)$ is a diagonal matrix formed from the diagonal of the square matrix $\AA$. + +\subsubsection{with the state residuals defined from $t$ to $t+1$} + +\emph{Note that the model residual is conditioned on data 1 to $t-1$ and the state residual on data 1 to $t$ in this case.} + +Define the one-step ahead residuals as +\begin{equation} +\overline{\varepsilon}_t^* = \begin{bmatrix}\checkvt\\ \checkwtp \end{bmatrix} +\end{equation} + +The covariance of $\checkVt$ and $\checkWtp$ is +\begin{equation}\label{eq:covhatVtWtp.onestep.2} +\cov[\checkVt,\checkWtp] = \cov[\checkVt,\KK_{t+1}\checkVtp] = \cov[\checkVt, \checkVtp]\KK_{t+1}^\top +\end{equation} +Innovations residuals are temporally uncorrelated, thus $\cov[\checkVt,\checkVtp]=0$ and thus $\cov[\checkVt,\checkWtp]=0$. + +The joint variance-covariance matrix is +\begin{equation}\label{eq:jointcondresid.onestep2} +\overline{\Sigma}_t^* = \var[\overline{\varepsilon}_t^*] = \begin{bmatrix}[c|c] + \var[\checkVt]& 0\\ + \rule[.5ex]{20ex}{0.25pt} & \rule[.5ex]{20ex}{0.25pt} \\ +0 & \KK_{t+1}\var[\checkVtp]\KK_{t+1}^\top \end{bmatrix}, +\end{equation} + +The Cholesky standardized residuals for $\overline{\varepsilon}_t^*$ are +\begin{equation} +(\overline{\Sigma}_t^*)^{-1/2} \overline{\varepsilon}_t^* +\end{equation} + $\overline{\Sigma}_t^*$ is positive definite so its Cholesky decomposition can be computed. + +The marginal standardized joint residuals for $\overline{\varepsilon}_t^*$ are: +\begin{equation} +\dg(\overline{\Sigma}_t^*)^{-1/2} \overline{\varepsilon}_t^* +\end{equation} +where $dg(\AA)$ is a diagonal matrix formed from the diagonal of the square matrix $\AA$. + +\section{Distribution of the MARSS contemporaneous model residuals} + +Contemporaneous model residuals are the difference between the data at time $t$ minus the prediction of $\yy_t$ given data up to $t$. This section gives the residual variance for these residuals. There are no state residuals for this case as that would require the expected value of $\XX_t$ conditioned on the data up to $t+1$. + +Define the contemporaneous model residuals $\dotvt$ as: +\begin{equation}\label{eq:vtt} +\dotvt = E[\YY_t|\yy^{(1)}_t] - \ZZ_t\hatxtt - \aa_t, +\end{equation} +where $\hatxtt$ is $\E[\XX_t|\yy^{(1),t}]$ (expected value of $\XX_t$ conditioned on the data up to time $t$). The random variable, contemporaneous model residuals over all possible $\yy_t$, is $\dotVt$. Its mean is 0 and we want to find its variance. + +The derivation of the variance of $\dotVt$ follows the exact same steps as the smoothations $\hatVt$, except that we condition on the data up to $t$ not up to $T$. Thus using Equation \ref{eq:first.and.secons.vvtgeneral}, we can write the variance directly as: +\begin{equation}\label{eq:contemp.model} +\var[\dotVt] = \RR_t - \ZZ_t \hatVtt \ZZ_t^\top + \hatStt\ZZ_t^\top + \ZZ_t(\hatStt)^\top +\end{equation} +where the $\hatVtt$ and $\hatStt$ are now conditioned on only the data from 1 to $t$. +$\hatStt = \cov[\YY_t,\XX_t|\yy^{(1), t}] = \cov[\ZZ_t \XX_t + \aa_t+\VV_t,\XX_t|\yy^{(1), t}]$. +If $\yy_t$ has no missing values, this reduces to $\RR_t - \ZZ_t \hatVtt \ZZ_t^\top$ while if $\yy_t$ is all missing values, this reduces to $\RR_t + \ZZ_t \hatVtt \ZZ_t^\top$. See discussion of this after Equation \ref{eq:first.and.secons.vvtgeneral}. + +Equation \ref{eq:contemp.model} gives the equation for the case where $\yy_t$ is partially observed. $\hatStt$ is output by the \verb@MARSShatyt()@ function in the \{MARSS\} package and $\hatVtt$ is output by the \verb@MARSSkfss()@ function. + +\bibliography{./EMDerivation} +\bibliographystyle{apalike} + +\end{document} \ No newline at end of file diff --git a/inst/doc/Residuals.pdf b/inst/doc/Residuals.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a5fa880503146881298fb13d6938f92b91a52705 GIT binary patch literal 184552 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ʹTc$rLkT)rHBFbVlw5Xp4L^PH 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