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 the package

#install.packages("devtools")
#devtools::install_github("xliu-stat/NRRR")
library(NRRR)
set.seed(1)

Generate data

# 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

Nested reduced-rank regression

BIC rank selection

# 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

Cross-Validation rank selection

# 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

Nested reduced-rank ridge regression

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

BIC rank selection

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

Cross-Validation rank selection

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

Prediction

Ypred_nrrr <- NRRR.pred(mydata$tseq, mydata$X, mydata$sseq,
                        fit_nrrr1$Ag, fit_nrrr1$Bg, fit_nrrr1$Al, 
                        fit_nrrr1$Bl, mydata$phi)


xliu-stat/NRRR documentation built on Jan. 9, 2021, 3:23 p.m.