Merge remote-tracking branch 'refs/remotes/origin/master'
This commit is contained in:
commit
d71e27bc40
100
LaTeX/main.bib
100
LaTeX/main.bib
@ -1,12 +1,16 @@
|
||||
@book{AbadirMagnus2005,
|
||||
author = {Abadir, Karim M. and Magnus, Jan R.},
|
||||
year = {2005},
|
||||
title = {Matrix Algebra},
|
||||
publisher = {Cambridge University Press},
|
||||
doi = {10.1017/CBO9780511810800},
|
||||
collection = {Econometric Exercises},
|
||||
place = {Cambridge},
|
||||
series = {Econometric Exercises}
|
||||
author = {Abadir, Karim M. and Magnus, Jan R.},
|
||||
year = {2005},
|
||||
title = {Matrix algebra},
|
||||
volume = {1},
|
||||
pages = {xxx+434},
|
||||
publisher = {Cambridge University Press, Cambridge},
|
||||
doi = {10.1017/CBO9780511810800},
|
||||
url = {https://doi.org/10.1017/CBO9780511810800},
|
||||
isbn = {978-0-521-53746-9; 0-521-53746-0},
|
||||
mrclass = {15-01 (91B02)},
|
||||
mrnumber = {2408356},
|
||||
series = {Econometric Exercises}
|
||||
}
|
||||
|
||||
@book{AbsilEtAl2007,
|
||||
@ -47,15 +51,16 @@
|
||||
}
|
||||
|
||||
@book{Arnold1981,
|
||||
author = {Arnold, Steven F},
|
||||
year = {1981},
|
||||
title = {The theory of linear models and multivariate analysis},
|
||||
publisher = {Wiley},
|
||||
address = {New York, NY [u.a.]},
|
||||
isbn = {0471050652},
|
||||
keywords = {Multivariate Analyse},
|
||||
language = {eng},
|
||||
series = {Wiley series in probability and mathematical statistics : Probability and mathematical statistics}
|
||||
author = {Arnold, Steven F.},
|
||||
year = {1981},
|
||||
title = {The theory of linear models and multivariate analysis},
|
||||
pages = {xvi+475},
|
||||
publisher = {John Wiley \& Sons, Inc., New York},
|
||||
isbn = {0-471-05065-2},
|
||||
mrclass = {62-01 (62J05)},
|
||||
mrnumber = {606011},
|
||||
mrreviewer = {Pi-Erh\ Lin},
|
||||
series = {Wiley Series in Probability and Mathematical Statistics}
|
||||
}
|
||||
|
||||
@article{BanerjeeEtAl2008,
|
||||
@ -438,11 +443,19 @@
|
||||
}
|
||||
|
||||
@book{Cook1998,
|
||||
author = {Cook, Dennis R.},
|
||||
year = {1998},
|
||||
title = {Regression Graphics: Ideas for studying regressions through graphics},
|
||||
publisher = {Wiley},
|
||||
address = {New York}
|
||||
author = {Cook, R. Dennis},
|
||||
year = {1998},
|
||||
title = {Regression graphics},
|
||||
pages = {xviii+349},
|
||||
publisher = {John Wiley \& Sons, Inc., New York},
|
||||
doi = {10.1002/9780470316931},
|
||||
url = {https://doi.org/10.1002/9780470316931},
|
||||
isbn = {0-471-19365-8},
|
||||
mrclass = {62-01 (62J05)},
|
||||
mrnumber = {1645673},
|
||||
mrreviewer = {Jon\ Stene},
|
||||
note = {Ideas for studying regressions through graphics, A Wiley-Interscience Publication},
|
||||
series = {Wiley Series in Probability and Statistics: Probability and Statistics}
|
||||
}
|
||||
|
||||
@article{Cook2000,
|
||||
@ -590,17 +603,19 @@
|
||||
}
|
||||
|
||||
@article{CoxWermuth1994,
|
||||
author = {D. R. Cox and Nanny Wermuth},
|
||||
year = {1994},
|
||||
title = {A Note on the Quadratic Exponential Binary Distribution},
|
||||
journal = {Biometrika},
|
||||
volume = {81},
|
||||
number = {2},
|
||||
pages = {403--408},
|
||||
publisher = {[Oxford University Press, Biometrika Trust]},
|
||||
issn = {00063444},
|
||||
url = {http://www.jstor.org/stable/2336971},
|
||||
urldate = {2024-04-11}
|
||||
author = {Cox, D. R. and Wermuth, Nanny},
|
||||
year = {1994},
|
||||
title = {A note on the quadratic exponential binary distribution},
|
||||
journal = {Biometrika},
|
||||
volume = {81},
|
||||
number = {2},
|
||||
pages = {403--408},
|
||||
issn = {0006-3444,1464-3510},
|
||||
doi = {10.1093/biomet/81.2.403},
|
||||
url = {https://doi.org/10.1093/biomet/81.2.403},
|
||||
fjournal = {Biometrika},
|
||||
mrclass = {62E15},
|
||||
mrnumber = {1294901}
|
||||
}
|
||||
|
||||
@book{Dai2012,
|
||||
@ -721,11 +736,20 @@
|
||||
}
|
||||
|
||||
@article{DrtonEtAl2020,
|
||||
author = {Mathias Drton and Satoshi Kuriki and Peter D. Hoff},
|
||||
year = {2020},
|
||||
title = {Existence and uniqueness of the Kronecker covariance MLE},
|
||||
journal = {The Annals of Statistics},
|
||||
url = {https://api.semanticscholar.org/CorpusID:212718000}
|
||||
author = {Drton, Mathias and Kuriki, Satoshi and Hoff, Peter},
|
||||
year = {2021},
|
||||
title = {Existence and uniqueness of the {K}ronecker covariance {MLE}},
|
||||
journal = {Ann. Statist.},
|
||||
volume = {49},
|
||||
number = {5},
|
||||
pages = {2721--2754},
|
||||
issn = {0090-5364,2168-8966},
|
||||
doi = {10.1214/21-aos2052},
|
||||
url = {https://doi.org/10.1214/21-aos2052},
|
||||
fjournal = {The Annals of Statistics},
|
||||
mrclass = {62H12 (62R01)},
|
||||
mrnumber = {4338381},
|
||||
mrreviewer = {Burcu\ H.\ Ucer}
|
||||
}
|
||||
|
||||
@article{DrydenEtAl2009,
|
||||
|
||||
@ -5,13 +5,9 @@
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage[LSF, T1]{fontenc}
|
||||
\usepackage{chessfss}
|
||||
% \usepackage{fullpage}
|
||||
\usepackage{amsmath, amssymb, amstext, amsthm, scalerel, bm, pifont}
|
||||
\usepackage[dvipsnames]{xcolor} % dvipsnames loads more named colors
|
||||
\usepackage{graphicx} % colors, images and graphics
|
||||
\usepackage{tikz} % TikZ (TeX ist kein Zeichenprogramm)
|
||||
\usepackage{environ} % for dynamic TikZ picture scaling
|
||||
\usepackage{algorithm, algpseudocode} % Pseudo Codes / Algorithms
|
||||
\usepackage[
|
||||
style = authoryear, % citation style
|
||||
isbn = false, % show isbn?
|
||||
@ -32,13 +28,9 @@
|
||||
doi = true,
|
||||
bibencoding = utf8
|
||||
]{biblatex}
|
||||
|
||||
|
||||
\usepackage[pdftex, colorlinks, allcolors=blue]{hyperref} % Load as last package! Redefines commands
|
||||
\usepackage[noabbrev, capitalize, nameinlink]{cleveref} % but this after hyperref
|
||||
|
||||
\usetikzlibrary{calc, perspective, datavisualization}
|
||||
|
||||
\setcounter{MaxMatrixCols}{20} % Sets the max nr. of columns in AMSmath's matrix envs to 20
|
||||
|
||||
% Document meta into
|
||||
@ -119,21 +111,21 @@
|
||||
% \newcommand*{\ten}[1]{\mathcal{#1}}
|
||||
% \DeclareMathOperator{\sym}{sym}
|
||||
\renewcommand*{\vec}{\operatorname{vec}}
|
||||
\newcommand*{\unvec}{\operatorname{vec^{-1}}}
|
||||
\newcommand*{\reshape}[1]{\operatorname{reshape}_{#1}}
|
||||
% \newcommand*{\unvec}{\operatorname{vec^{-1}}}
|
||||
% \newcommand*{\reshape}[1]{\operatorname{reshape}_{#1}}
|
||||
\newcommand*{\vech}{\operatorname{vech}}
|
||||
\newcommand*{\rank}{\operatorname{rank}}
|
||||
\newcommand*{\diag}{\operatorname{diag}}
|
||||
\newcommand*{\perm}[1]{\mathfrak{S}_{#1}} % set of permutations of size #1
|
||||
\newcommand*{\len}[1]{\#{#1}} % length of #1
|
||||
\DeclareMathOperator*{\ttt}{\circledast}
|
||||
% \newcommand*{\perm}[1]{\mathfrak{S}_{#1}} % set of permutations of size #1
|
||||
% \newcommand*{\len}[1]{\#{#1}} % length of #1
|
||||
% \DeclareMathOperator*{\ttt}{\circledast}
|
||||
\DeclareMathOperator{\tr}{tr}
|
||||
\DeclareMathOperator{\var}{Var}
|
||||
\DeclareMathOperator{\cov}{Cov}
|
||||
\DeclareMathOperator{\Span}{span}
|
||||
\DeclareMathOperator{\E}{\operatorname{\mathbb{E}}}
|
||||
% \DeclareMathOperator{\independent}{{\bot\!\!\!\bot}}
|
||||
\DeclareMathOperator*{\argmin}{{arg\,min}}
|
||||
% \DeclareMathOperator*{\argmin}{{arg\,min}}
|
||||
\DeclareMathOperator*{\argmax}{{arg\,max}}
|
||||
\newcommand*{\D}{\textnormal{D}} % derivative
|
||||
\renewcommand*{\H}{\textnormal{H}} % hessian
|
||||
@ -146,21 +138,21 @@
|
||||
\renewcommand{\checkmark}{{\color{Green}\ding{51}}}
|
||||
\newcommand{\xmark}{{\color{Red!70}\ding{55}}}
|
||||
|
||||
% Pseudo Code Commands
|
||||
\newcommand{\algorithmicbreak}{\textbf{break}}
|
||||
\newcommand{\Break}{\State \algorithmicbreak}
|
||||
% % Pseudo Code Commands
|
||||
% \newcommand{\algorithmicbreak}{\textbf{break}}
|
||||
% \newcommand{\Break}{\State \algorithmicbreak}
|
||||
|
||||
% Special Matrix Sets (Manifolds)
|
||||
\newcommand{\MatMani}[2]{\mathbb{R}^{{#1}\times {#2}}}
|
||||
% \newcommand{\MatMani}[2]{\mathbb{R}^{{#1}\times {#2}}}
|
||||
\newcommand{\StiefelNonCompact}[2]{\mathbb{R}_{*}^{{#1}\times {#2}}}
|
||||
\newcommand{\Stiefel}[2]{\mathrm{St}^{{#1}\times {#2}}}
|
||||
\newcommand{\MatRankMani}[3]{\mathbb{R}_{\rank={#1}}^{{#2}\times {#3}}}
|
||||
\newcommand{\DiagZeroMat}[1]{\mathbb{R}_{\diag=0}^{{#1}\times {#1}}}
|
||||
% \newcommand{\MatRankMani}[3]{\mathbb{R}_{\rank={#1}}^{{#2}\times {#3}}}
|
||||
% \newcommand{\DiagZeroMat}[1]{\mathbb{R}_{\diag=0}^{{#1}\times {#1}}}
|
||||
\newcommand{\SymMat}[1]{\mathrm{Sym}^{{#1}\times {#1}}}
|
||||
\newcommand{\SkewSymMat}[1]{\mathrm{Skew}^{{#1}\times {#1}}}
|
||||
% \newcommand{\SkewSymMat}[1]{\mathrm{Skew}^{{#1}\times {#1}}}
|
||||
\newcommand{\SymPosDefMat}[1]{\mathrm{Sym}_{++}^{{#1}\times {#1}}}
|
||||
\newcommand{\SymDiagZeroMat}[1]{\mathrm{Sym}_{\diag=0}^{p\times p}}
|
||||
\newcommand{\SymBand}[2]{\mathrm{SymBand}^{{#1}\times {#1}}_{#2}}
|
||||
% \newcommand{\SymDiagZeroMat}[1]{\mathrm{Sym}_{\diag=0}^{p\times p}}
|
||||
% \newcommand{\SymBand}[2]{\mathrm{SymBand}^{{#1}\times {#1}}_{#2}}
|
||||
\newcommand{\OrthogonalGrp}[1]{\mathrm{O}(#1)}
|
||||
\newcommand{\SpecialOrthogonalGrp}[1]{\mathrm{SO}(#1)}
|
||||
|
||||
@ -233,23 +225,6 @@
|
||||
\makeatother
|
||||
|
||||
|
||||
%%% Scaling TikZ pictures using the `environ' package
|
||||
% see: https://tex.stackexchange.com/questions/6388/how-to-scale-a-tikzpicture-to-textwidth
|
||||
\makeatletter
|
||||
\newsavebox{\measure@tikzpicture}
|
||||
\NewEnviron{scaletikzpicturetowidth}[1]{%
|
||||
\def\tikz@width{#1}%
|
||||
\def\tikzscale{1}\begin{lrbox}{\measure@tikzpicture}%
|
||||
\BODY
|
||||
\end{lrbox}%
|
||||
\pgfmathparse{#1/\wd\measure@tikzpicture}%
|
||||
\edef\tikzscale{\pgfmathresult}%
|
||||
\BODY
|
||||
}
|
||||
\makeatother
|
||||
|
||||
|
||||
|
||||
\newcommand{\smoothFunc}[2][\infty]{{C^{#2}(#1)}}
|
||||
\newcommand{\localSmoothFunc}[3][\infty]{{C^{#3}_{#1}(#2)}}
|
||||
\newcommand{\tangentSpace}[2]{\ensuremath{T_{#1}{#2}}}
|
||||
@ -450,9 +425,7 @@ The reduction in vectorized form is $\vec\ten{R}(\ten{X})=\t{\mat{B}}\vec(\ten{X
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\begin{scaletikzpicturetowidth}{0.5\textwidth}
|
||||
\input{images/reduction.tex}
|
||||
\end{scaletikzpicturetowidth}
|
||||
\includegraphics{images/reduction.pdf}
|
||||
\caption{\label{fig:SDRvisual}Visual depiction of the sufficient reduction in \cref{thm:sdr}.}
|
||||
\end{figure}
|
||||
|
||||
|
||||
@ -44,7 +44,6 @@ auc.sd <- function(y.true, y.pred) {
|
||||
sqrt(pROC::var(pROC::roc(y.true, y.pred, quiet = TRUE, direction = "<")))
|
||||
}
|
||||
|
||||
|
||||
#' Leave-one-out prediction using TSIR
|
||||
#'
|
||||
#' @param method reduction method to be applied
|
||||
@ -91,14 +90,21 @@ c(X, y) %<-% readRDS("eeg_data_3d.rds")
|
||||
|
||||
##################################### GMLM #####################################
|
||||
|
||||
proj.fft <- function(beta1, nr.freq = 5L) {
|
||||
F <- fft(beta1)
|
||||
Re(fft(`[<-`(F, head(order(abs(F)), -nr.freq), 0+0i), inverse = TRUE)) / length(F)
|
||||
}
|
||||
|
||||
# perform preprocessed (reduced) and raw (not reduced) leave-one-out prediction
|
||||
y.hat.3.4 <- loo.predict(gmlm_tensor_normal, preprocess(X, 3, 4, 3), y)
|
||||
y.hat.15.15 <- loo.predict(gmlm_tensor_normal, preprocess(X, 15, 15, 3), y)
|
||||
y.hat.20.30 <- loo.predict(gmlm_tensor_normal, preprocess(X, 20, 30, 3), y)
|
||||
y.hat <- loo.predict(gmlm_tensor_normal, X, y)
|
||||
y.hat.fft <- loo.predict(gmlm_tensor_normal, X, y, proj.betas = list(proj.fft, NULL, NULL))
|
||||
y.hat.fft <- loo.predict(gmlm_tensor_normal, X, y, proj.betas = list(proj.fft, NULL, NULL))
|
||||
|
||||
# classification performance measures table by leave-one-out cross-validation
|
||||
(loo.cv <- apply(cbind(y.hat.3.4, y.hat.15.15, y.hat.20.30, y.hat, y.hat.fft), 2, function(y.pred) {
|
||||
(loo.cv <- apply(cbind(y.hat.3.4, y.hat.15.15, y.hat.20.30, y.hat, y.hat.fft), 2, function(y.pred) {
|
||||
sapply(c("acc", "err", "fpr", "tpr", "fnr", "tnr", "auc", "auc.sd"),
|
||||
function(FUN) { match.fun(FUN)(as.integer(y) - 1L, y.pred) })
|
||||
|
||||
@ -6,7 +6,8 @@ TSIR <- function(X, y,
|
||||
sample.axis = 1L,
|
||||
nr.slices = 10L, # default slices, ignored if y is a factor or integer
|
||||
max.iter = 50L,
|
||||
cond.threshold = Inf, eps = sqrt(.Machine$double.eps),
|
||||
reg.threshold = Inf, reg.factor = 0.2,
|
||||
eps = 1e-6,
|
||||
slice.method = c("cut", "ecdf"), # ignored if y is a factor or integer
|
||||
logger = NULL
|
||||
) {
|
||||
@ -122,13 +123,13 @@ TSIR <- function(X, y,
|
||||
Omegas <- Map(function(k) prod(dim(X)[-k])^-1 * mcrossprod(X, mode = k), modes)
|
||||
|
||||
# Check condition of sample covariances and perform regularization if needed
|
||||
if (is.finite(cond.threshold)) {
|
||||
if (is.finite(reg.threshold)) {
|
||||
for (j in seq_along(Omegas)) {
|
||||
# Compute min and max eigen values
|
||||
min_max <- range(eigen(Omegas[[j]], TRUE, TRUE)$values)
|
||||
# The condition is approximately `kappa(Omegas[[j]]) > cond.threshold`
|
||||
if (min_max[2] > cond.threshold * min_max[1]) {
|
||||
Omegas[[j]] <- Omegas[[j]] + diag(0.2 * min_max[2], nrow(Omegas[[j]]))
|
||||
# The condition is approximately `kappa(Omegas[[j]]) > reg.threshold`
|
||||
if (min_max[2] > reg.threshold * min_max[1]) {
|
||||
diag(Omegas[[j]]) <- diag(Omegas[[j]]) + reg.factor * min_max[2]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,7 +5,8 @@
|
||||
#' @export
|
||||
gmlm_tensor_normal <- function(X, F, sample.axis = length(dim(X)),
|
||||
max.iter = 100L, proj.betas = NULL, proj.Omegas = NULL, logger = NULL,
|
||||
cond.threshold = 25, eps = 1e-6
|
||||
reg.threshold = 25, reg.factor = 0.2,
|
||||
eps = 1e-6
|
||||
) {
|
||||
# Special case for `F` being vector valued, add dims of size 1
|
||||
if (is.null(dim(F))) {
|
||||
@ -25,13 +26,13 @@ gmlm_tensor_normal <- function(X, F, sample.axis = length(dim(X)),
|
||||
dimF <- head(dim(F), -1)
|
||||
modes <- seq_along(dimX)
|
||||
|
||||
# Ensure the Omega and beta projections lists are lists
|
||||
if (!is.list(proj.Omegas)) {
|
||||
proj.Omegas <- rep(NULL, length(modes))
|
||||
}
|
||||
if (!is.list(proj.betas)) {
|
||||
proj.betas <- rep(NULL, length(modes))
|
||||
}
|
||||
# # Ensure the Omega and beta projections lists are lists
|
||||
# if (!is.list(proj.Omegas)) {
|
||||
# proj.Omegas <- rep(NULL, length(modes)) # thats just NULL, which it already is
|
||||
# }
|
||||
# if (!is.list(proj.betas)) {
|
||||
# proj.betas <- rep(NULL, length(modes))
|
||||
# }
|
||||
|
||||
|
||||
### Phase 1: Computing initial values (`dim<-` ensures we have an "array")
|
||||
@ -106,12 +107,13 @@ gmlm_tensor_normal <- function(X, F, sample.axis = length(dim(X)),
|
||||
# with regularization of the j'th mode covariance estimate `Sigma_j`
|
||||
for (j in seq_along(Sigmas)) {
|
||||
# Regularize Covariances
|
||||
if (is.finite(cond.threshold)) {
|
||||
if (is.finite(reg.threshold)) {
|
||||
# Compute min and max eigen values
|
||||
min_max <- range(eigen(Sigmas[[j]], TRUE, TRUE)$values)
|
||||
# The condition is approximately `kappa(Sigmas[[j]]) > cond.threshold`
|
||||
if (min_max[2] > cond.threshold * min_max[1]) {
|
||||
Sigmas[[j]] <- Sigmas[[j]] + diag(0.2 * min_max[2], nrow(Sigmas[[j]]))
|
||||
# The condition is approximately `kappa(Sigmas[[j]]) > reg.threshold`
|
||||
if (min_max[2] > reg.threshold * min_max[1]) {
|
||||
cat(sprintf("\033[2mReg (%d): cond(Sigma_%d) = %f\033[0m\n", iter, j, min_max[2] / min_max[1]))
|
||||
diag(Sigmas[[j]]) <- diag(Sigmas[[j]]) + reg.factor * min_max[2]
|
||||
}
|
||||
}
|
||||
# Compute (unconstraint) Omega_j's as covariance inverse
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user