Nothing
## ----setup, include = FALSE---------------------------------------------------
# Data-dependent chunks run only when ade4 (source of the Doubs data) is
# installed, so the vignette still builds on machines without it.
has_ade4 <- requireNamespace("ade4", quietly = TRUE)
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.width = 7,
fig.height = 5,
eval = has_ade4
)
## ----lib----------------------------------------------------------------------
library(nmfkc)
## ----no-ade4, eval = !has_ade4, echo = FALSE, results = "asis"----------------
# cat("> **Note:** this vignette needs the `ade4` package for the Doubs data.",
# "Install it with `install.packages(\"ade4\")` to run the code below.\n")
## ----data---------------------------------------------------------------------
data(doubs, package = "ade4")
# per-variable min-max to [0,1], then transpose to (variables x sites)
nz <- function(M) t(nmfkc.normalize(as.matrix(M)))
Y1 <- nz(doubs$fish) # responses: 27 fish species x 30 sites
Y2 <- nz(doubs$env) # covariates: 11 environment x 30 sites
dim(Y1)
dim(Y2)
## ----fit----------------------------------------------------------------------
fit <- nmf.rrr(Y1, Y2, rank1 = 2, rank2 = 2,
epsilon = 1e-8, nstart = 20, seed = 1)
# in-sample, column-centered R^2
Y1hat <- fit$X1 %*% fit$C %*% fit$X2 %*% Y2
R2 <- 1 - sum((Y1 - Y1hat)^2) / sum((Y1 - rowMeans(Y1))^2)
round(R2, 3)
## ----resp-groups--------------------------------------------------------------
for (q in 1:ncol(fit$X1))
cat(sprintf("Resp%d: %s\n", q,
paste(rownames(Y1)[order(-fit$X1[, q])[1:6]], collapse = ", ")))
## ----cov-groups---------------------------------------------------------------
for (r in 1:nrow(fit$X2))
cat(sprintf("Cov%d: %s\n", r,
paste(rownames(Y2)[order(-fit$X2[r, ])[1:5]], collapse = ", ")))
## ----ecv----------------------------------------------------------------------
ecv <- nmf.rrr.ecv(Y1, Y2, rank1 = 1:2, rank2 = 1:2,
nfolds = 5, seed = 123)
round(ecv$sigma, 4)
## ----inference----------------------------------------------------------------
inf <- nmf.rrr.inference(fit, Y1, Y2)
co <- inf$coefficients
print(format(co[order(co$p_value), c("Basis","Covariate","Estimate","SE","z_value","p_value")],
digits = 3))
## ----theta--------------------------------------------------------------------
round(fit$C, 3)
## ----heatmap, fig.width = 7.5, fig.height = 4---------------------------------
nmf.rrr.heatmap(fit)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.