knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) options(rmarkdown.html_vignette.check_title = FALSE)
This document provides a brief introduction to the functions of implementing nested reduced-rank regression (NRRR), in a multivariate functional regression setting, from how to generate functional observations with user-provided model dimensions to how to predict response trajectories based on the fitting results. Both the nested reduced-rank regression and the nested reduced-rank ridge regression fitting procedures are displayed. For an introduction of the NRRR model and its application in an electricity data analysis, please see another vignette Adelaide Electricity Demand Data Analysis with NRRR.
#install.packages("devtools") #devtools::install_github("xliu-stat/NRRR") library(NRRR) set.seed(1)
# dimension n <- 100 p <- 10 d <- 10 # functional setting ns <- 60 nt <- 60 jx <- 8 jy <- 8 # true model size r <- 5 rx <- 3 ry <- 3 # signal and noise setting s2n <- 1 rho_X <- 0.1 rho_E <- 0 Sigma <- "CorrAR" # generate data mydata <- NRRR.sim(n, ns, nt, r, rx, ry, jx, jy, p, d, s2n, rho_X, rho_E, Sigma) Y <- mydata$Yest X <- mydata$Xest
# BIC tuning fit_nrrr1 <- NRRR.ic(Y, X, NULL, NULL, jx, jy, p, d, n, maxiter = 300, conv = 1e-2, method = 'RRR', ic = "BIC") fit_nrrr1$rank fit_nrrr1$rx fit_nrrr1$ry
# CV tuning fit_nrrr2 <- NRRR.cv(Y, X, nfold = 10, norder = NULL, NULL, NULL, jx, jy, p, d, n, maxiter = 300, conv = 1e-2, method = 'RRR') fit_nrrr2$rank fit_nrrr2$rx fit_nrrr2$ry
We first obtain a reference tuning level from a cross validation tuned reduced-rank ridge regression:
# Reduced-rank ridge regression xr <- sum(svd(X)$d > 1e-2) rankmax <- min(xr, d * jy, 20) fit_rrs <- RRS.cv(Y, X, rankmax = rankmax, nfold = 10, nlam = 20, lambda = seq(0, 1, length = 20), norder = NULL) lambda <- fit_rrs$lam
fit_nrrs1 <- NRRR.ic(Y, X, NULL, NULL, jx, jy, p, d, n, maxiter = 300, conv = 1e-2, method = 'RRS', lambda = lambda) fit_nrrs1$rank fit_nrrs1$rx fit_nrrs1$ry
fit_nrrs2 <- NRRR.cv(Y, X, nfold = 10, norder = NULL, NULL, NULL, jx, jy, p, d, n, maxiter = 300, conv = 1e-2, method = 'RRS', lambda = lambda) fit_nrrs2$rank fit_nrrs2$rx fit_nrrs2$ry
Ypred_nrrr <- NRRR.pred(mydata$tseq, mydata$X, mydata$sseq, fit_nrrr1$Ag, fit_nrrr1$Bg, fit_nrrr1$Al, fit_nrrr1$Bl, mydata$phi)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.