From 0e59757765c0e3e09e35843ece7755206fa1dd07 Mon Sep 17 00:00:00 2001 From: mhjensen Date: Mon, 3 Sep 2018 16:27:52 +0200 Subject: [PATCH 01/12] Added exercise set 2 --- doc/Projects/2018/hw2/html/hw2-bs.html | 218 ++++++++++++++++ doc/Projects/2018/hw2/html/hw2.html | 167 +++++++++++++ .../2018/hw2/ipynb/ipynb-hw2-src.tar.gz | Bin 0 -> 206 bytes doc/Projects/2018/hw2/pdf/hw2.p.tex | 235 ++++++++++++++++++ doc/Projects/2018/hw2/pdf/hw2.pdf | Bin 0 -> 198044 bytes doc/Projects/2018/hw2/pdf/hw2.tex | 203 +++++++++++++++ doc/src/Projects/2018/Exercises/hw2.do.txt | 63 ++++- doc/web/course.do.txt | 8 + doc/web/course.html | 68 +++-- 9 files changed, 933 insertions(+), 29 deletions(-) create mode 100644 doc/Projects/2018/hw2/html/hw2-bs.html create mode 100644 doc/Projects/2018/hw2/html/hw2.html create mode 100644 doc/Projects/2018/hw2/ipynb/ipynb-hw2-src.tar.gz create mode 100644 doc/Projects/2018/hw2/pdf/hw2.p.tex create mode 100644 doc/Projects/2018/hw2/pdf/hw2.pdf create mode 100644 doc/Projects/2018/hw2/pdf/hw2.tex diff --git a/doc/Projects/2018/hw2/html/hw2-bs.html b/doc/Projects/2018/hw2/html/hw2-bs.html new file mode 100644 index 000000000..f97cff804 --- /dev/null +++ b/doc/Projects/2018/hw2/html/hw2-bs.html @@ -0,0 +1,218 @@ + + + + + + + +Homework 2 + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +

 

 

 

+ + + + + + +
+

Homework 2

+ +

+ + +

+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +

+ + +

Department of Physics, University of Oslo, Norway
+
+

+

Sep 3, 2018

+
+

+

+ +

Exercise 4

+ +

+This exercise is a continuation of exercise 2 from homework 1. We will +use the same function to generate our data set, still staying with a +simple function \( y(x) \) which we want to fit using linear regression, +but now extending the analysis to include the Ridge and the Lasso +regression methods. You can use the code under the Regression as an example on how to use the Ridge and the Lasso methods, see the regression slides). + +

+We will thus again generate our own dataset for a function \( y(x) \) where +\( x \in [0,1] \) and defined by random numbers computed with the uniform +distribution. The function \( y \) is a quadratic polynomial in \( x \) with +added stochastic noise according to the normal distribution \( \cal{N}(0,1) \). + +

+The following simple Python instructions define our \( x \) and \( y \) values (with 100 data points). +

+ + +

x = np.random.rand(100,1)
+y = 5*x*x+0.1*np.random.randn(100,1)
+
+
    +
  1. Write your own code for the Ridge method (see chapter 3.4 of Hastie et al., equations (3.43) and (3.44)) and compute the parametrization for different values of \( \lambda \).
  2. +
+ +Compare and analyze your results with those from exercise 2. Study the dependence on \( \lambda \) while also varying the strength of the noise in your expression for \( y(x) \). + +
    +
  1. Repeat the above but using the functionality of scikit-learn. Compare your code with the results from scikit-learn. Remember to run with the same random numbers for generating \( x \) and \( y \).
  2. +
  3. Our next step is to study the variance of the parameters \( \beta_1 \) and \( \beta_2 \) (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression.
  4. +
+ +You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix \( (\hat{X}^T\hat{X})^{-1}+\lambda\hat{I} \)) or use the functionality of scikit-learn and computetheir variances. Discuss the results of these variances as functions of \( \lambda \). In particular, try to link your discussion with the discussion in Hastie et al. and their figure 3.11. + +
    +
  1. Repeat the previous step but add now the Lasso method, see equation (3.53) of Hastie et al.. Discuss your results and compare with standard regression and the Ridge regression results. You can write your own code or use the functionality of scikit-learn.
  2. +
  3. Finally, using scikit-learn or your own code, compute also the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error defined as
  4. +
+ +$$ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +$$ + +and the \( R^2 \) score function. +If \( \tilde{\hat{y}}_i \) is the predicted value of the \( i-th \) sample and \( y_i \) is the corresponding true value, then the score \( R^2 \) is defined as +$$ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +$$ + +where we have defined the mean value of \( \hat{y} \) as +$$ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +$$ + +Discuss these quantities as functions of the variable \( \lambda \) in the Ridge and Lasso regression methods. + +

Exercise 5

+ +

+Using the singular value decomposition, show that the variance of the direction vector +\( \hat{z}_i=\hat{X}\hat{v}_i \) is equal to (equation (3.49) of Hastie et al.) +$$ +\mathrm{Var}(\hat{z}_i)=\frac{d_i^2}{N}, +$$ + +where \( d_i \) are the singular values of the matrix \( \hat{X} \). Give an interprepation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. + +

+ +

+ + +
+ + + + + + + +
+ © 1999-2018, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license +
+ + + + + + diff --git a/doc/Projects/2018/hw2/html/hw2.html b/doc/Projects/2018/hw2/html/hw2.html new file mode 100644 index 000000000..3e2d44270 --- /dev/null +++ b/doc/Projects/2018/hw2/html/hw2.html @@ -0,0 +1,167 @@ + + + + + + + +Homework 2 + + + + + + + + + + + + + + + + + + + + + + + +

Homework 2

+ +

+ + +

+Data Analysis and Machine Learning FYS-STK3155/FYS4155 +
+ +

+ + +

Department of Physics, University of Oslo, Norway
+
+

+

Sep 3, 2018

+
+ +

Exercise 4

+ +

+This exercise is a continuation of exercise 2 from homework 1. We will +use the same function to generate our data set, still staying with a +simple function \( y(x) \) which we want to fit using linear regression, +but now extending the analysis to include the Ridge and the Lasso +regression methods. You can use the code under the Regression as an example on how to use the Ridge and the Lasso methods, see the regression slides). + +

+We will thus again generate our own dataset for a function \( y(x) \) where +\( x \in [0,1] \) and defined by random numbers computed with the uniform +distribution. The function \( y \) is a quadratic polynomial in \( x \) with +added stochastic noise according to the normal distribution \( \cal{N}(0,1) \). + +

+The following simple Python instructions define our \( x \) and \( y \) values (with 100 data points). +

+ + +

x = np.random.rand(100,1)
+y = 5*x*x+0.1*np.random.randn(100,1)
+
+
    +
  1. Write your own code for the Ridge method (see chapter 3.4 of Hastie et al., equations (3.43) and (3.44)) and compute the parametrization for different values of \( \lambda \).
  2. +
+ +Compare and analyze your results with those from exercise 2. Study the dependence on \( \lambda \) while also varying the strength of the noise in your expression for \( y(x) \). + +
    +
  1. Repeat the above but using the functionality of scikit-learn. Compare your code with the results from scikit-learn. Remember to run with the same random numbers for generating \( x \) and \( y \).
  2. +
  3. Our next step is to study the variance of the parameters \( \beta_1 \) and \( \beta_2 \) (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression.
  4. +
+ +You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix \( (\hat{X}^T\hat{X})^{-1}+\lambda\hat{I} \)) or use the functionality of scikit-learn and computetheir variances. Discuss the results of these variances as functions of \( \lambda \). In particular, try to link your discussion with the discussion in Hastie et al. and their figure 3.11. + +
    +
  1. Repeat the previous step but add now the Lasso method, see equation (3.53) of Hastie et al.. Discuss your results and compare with standard regression and the Ridge regression results. You can write your own code or use the functionality of scikit-learn.
  2. +
  3. Finally, using scikit-learn or your own code, compute also the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error defined as
  4. +
+ +$$ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +$$ + +and the \( R^2 \) score function. +If \( \tilde{\hat{y}}_i \) is the predicted value of the \( i-th \) sample and \( y_i \) is the corresponding true value, then the score \( R^2 \) is defined as +$$ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +$$ + +where we have defined the mean value of \( \hat{y} \) as +$$ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +$$ + +Discuss these quantities as functions of the variable \( \lambda \) in the Ridge and Lasso regression methods. + +

Exercise 5

+ +

+Using the singular value decomposition, show that the variance of the direction vector +\( \hat{z}_i=\hat{X}\hat{v}_i \) is equal to (equation (3.49) of Hastie et al.) +$$ +\mathrm{Var}(\hat{z}_i)=\frac{d_i^2}{N}, +$$ + +where \( d_i \) are the singular values of the matrix \( \hat{X} \). Give an interprepation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. + + + + +

+ © 1999-2018, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license +
+ + + + + + diff --git a/doc/Projects/2018/hw2/ipynb/ipynb-hw2-src.tar.gz b/doc/Projects/2018/hw2/ipynb/ipynb-hw2-src.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..4b1da116e789a1063214110a9cbf73f4e1523659 GIT binary patch literal 206 zcmV;<05Sg`iwFRKM2%Yj1MSbjY63A3#&OR+#XP~1&8B)T=%I&#h%XS?*p01;CK27Y z@2b$A>`hAP|9APAVHjqX^XJ*?yej81dKjhD#2C5cbnaFt*wJu;=!QeB~dp>U@@$MPIrYB*fy@F}_Q8(v{!$ zVJ&TR`O=r<4o9Dy*wBk@TVH$(_G7$H@h#b1uExLp2><{90000000000008_ipKT2s ITmUEl08uJxEdT%j literal 0 HcmV?d00001 diff --git a/doc/Projects/2018/hw2/pdf/hw2.p.tex b/doc/Projects/2018/hw2/pdf/hw2.p.tex new file mode 100644 index 000000000..7824027f3 --- /dev/null +++ b/doc/Projects/2018/hw2/pdf/hw2.p.tex @@ -0,0 +1,235 @@ +%% +%% Automatically generated file from DocOnce source +%% (https://github.com/hplgit/doconce/) +%% +%% +% #ifdef PTEX2TEX_EXPLANATION +%% +%% The file follows the ptex2tex extended LaTeX format, see +%% ptex2tex: http://code.google.com/p/ptex2tex/ +%% +%% Run +%% ptex2tex myfile +%% or +%% doconce ptex2tex myfile +%% +%% to turn myfile.p.tex into an ordinary LaTeX file myfile.tex. +%% (The ptex2tex program: http://code.google.com/p/ptex2tex) +%% Many preprocess options can be added to ptex2tex or doconce ptex2tex +%% +%% ptex2tex -DMINTED myfile +%% doconce ptex2tex myfile envir=minted +%% +%% ptex2tex will typeset code environments according to a global or local +%% .ptex2tex.cfg configure file. doconce ptex2tex will typeset code +%% according to options on the command line (just type doconce ptex2tex to +%% see examples). If doconce ptex2tex has envir=minted, it enables the +%% minted style without needing -DMINTED. +% #endif + +% #define PREAMBLE + +% #ifdef PREAMBLE +%-------------------- begin preamble ---------------------- + +\documentclass[% +oneside, % oneside: electronic viewing, twoside: printing +final, % draft: marks overfull hboxes, figures with paths +10pt]{article} + +\listfiles % print all files needed to compile this document + +\usepackage{relsize,makeidx,color,setspace,amsmath,amsfonts,amssymb} +\usepackage[table]{xcolor} +\usepackage{bm,ltablex,microtype} + +\usepackage[pdftex]{graphicx} + +\usepackage{ptex2tex} +% #ifdef MINTED +\usepackage{minted} +\usemintedstyle{default} +% #endif + +\usepackage[T1]{fontenc} +%\usepackage[latin1]{inputenc} +\usepackage{ucs} +\usepackage[utf8x]{inputenc} + +\usepackage{lmodern} % Latin Modern fonts derived from Computer Modern + +% Hyperlinks in PDF: +\definecolor{linkcolor}{rgb}{0,0,0.4} +\usepackage{hyperref} +\hypersetup{ + breaklinks=true, + colorlinks=true, + linkcolor=linkcolor, + urlcolor=linkcolor, + citecolor=black, + filecolor=black, + %filecolor=blue, + pdfmenubar=true, + pdftoolbar=true, + bookmarksdepth=3 % Uncomment (and tweak) for PDF bookmarks with more levels than the TOC + } +%\hyperbaseurl{} % hyperlinks are relative to this root + +\setcounter{tocdepth}{2} % levels in table of contents + +% --- fancyhdr package for fancy headers --- +\usepackage{fancyhdr} +\fancyhf{} % sets both header and footer to nothing +\renewcommand{\headrulewidth}{0pt} +\fancyfoot[LE,RO]{\thepage} +% Ensure copyright on titlepage (article style) and chapter pages (book style) +\fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[C]{{\footnotesize \copyright\ 1999-2018, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license}} +% \renewcommand{\footrulewidth}{0mm} + \renewcommand{\headrulewidth}{0mm} +} +% Ensure copyright on titlepages with \thispagestyle{empty} +\fancypagestyle{empty}{ + \fancyhf{} + \fancyfoot[C]{{\footnotesize \copyright\ 1999-2018, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license}} + \renewcommand{\footrulewidth}{0mm} + \renewcommand{\headrulewidth}{0mm} +} + +\pagestyle{fancy} + + +% prevent orhpans and widows +\clubpenalty = 10000 +\widowpenalty = 10000 + +% --- end of standard preamble for documents --- + + +% insert custom LaTeX commands... + +\raggedbottom +\makeindex +\usepackage[totoc]{idxlayout} % for index in the toc +\usepackage[nottoc]{tocbibind} % for references/bibliography in the toc + +%-------------------- end preamble ---------------------- + +\begin{document} + +% matching end for #ifdef PREAMBLE +% #endif + +\newcommand{\exercisesection}[1]{\subsection*{#1}} + + +% ------------------- main content ---------------------- + + + +% ----------------- title ------------------------- + +\thispagestyle{empty} + +\begin{center} +{\LARGE\bf +\begin{spacing}{1.25} +Homework 2 +\end{spacing} +} +\end{center} + +% ----------------- author(s) ------------------------- + +\begin{center} +{\bf \href{{http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html}}{Data Analysis and Machine Learning FYS-STK3155/FYS4155}} +\end{center} + + \begin{center} +% List of all institutions: +\centerline{{\small Department of Physics, University of Oslo, Norway}} +\end{center} + +% ----------------- end author(s) ------------------------- + +% --- begin date --- +\begin{center} +Sep 3, 2018 +\end{center} +% --- end date --- + +\vspace{1cm} + + +\subsection{Exercise 4} + +This exercise is a continuation of exercise 2 from homework 1. We will +use the same function to generate our data set, still staying with a +simple function $y(x)$ which we want to fit using linear regression, +but now extending the analysis to include the Ridge and the Lasso +regression methods. You can use the code under the Regression as an example on how to use the Ridge and the Lasso methods, see the \href{{https://compphysics.github.io/MachineLearning/doc/pub/Regression/html/Regression-bs.html}}{regression slides}). + +We will thus again generate our own dataset for a function $y(x)$ where +$x \in [0,1]$ and defined by random numbers computed with the uniform +distribution. The function $y$ is a quadratic polynomial in $x$ with +added stochastic noise according to the normal distribution $\cal{N}(0,1)$. + +The following simple Python instructions define our $x$ and $y$ values (with 100 data points). +\bpycod +x = np.random.rand(100,1) +y = 5*x*x+0.1*np.random.randn(100,1) +\epycod + +\begin{enumerate} +\item Write your own code for the Ridge method (see chapter 3.4 of Hastie \emph{et al.}, equations (3.43) and (3.44)) and compute the parametrization for different values of $\lambda$. +\end{enumerate} + +\noindent +Compare and analyze your results with those from exercise 2. Study the dependence on $\lambda$ while also varying the strength of the noise in your expression for $y(x)$. + +\begin{enumerate} +\item Repeat the above but using the functionality of \textbf{scikit-learn}. Compare your code with the results from \textbf{scikit-learn}. Remember to run with the same random numbers for generating $x$ and $y$. + +\item Our next step is to study the variance of the parameters $\beta_1$ and $\beta_2$ (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. +\end{enumerate} + +\noindent +You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix $(\hat{X}^T\hat{X})^{-1}+\lambda\hat{I}$) or use the functionality of \textbf{scikit-learn} and computetheir variances. Discuss the results of these variances as functions of $\lambda$. In particular, try to link your discussion with the discussion in Hastie \emph{et al.} and their figure 3.11. + +\begin{enumerate} +\item Repeat the previous step but add now the Lasso method, see equation (3.53) of Hastie \emph{et al.}. Discuss your results and compare with standard regression and the Ridge regression results. You can write your own code or use the functionality of \textbf{scikit-learn}. + +\item Finally, using \textbf{scikit-learn} or your own code, compute also the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error defined as +\end{enumerate} + +\noindent +\[ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +\] +and the $R^2$ score function. +If $\tilde{\hat{y}}_i$ is the predicted value of the $i-th$ sample and $y_i$ is the corresponding true value, then the score $R^2$ is defined as +\[ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +\] +where we have defined the mean value of $\hat{y}$ as +\[ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +\] +Discuss these quantities as functions of the variable $\lambda$ in the Ridge and Lasso regression methods. + +\subsection{Exercise 5} + +Using the singular value decomposition, show that the variance of the direction vector +$\hat{z}_i=\hat{X}\hat{v}_i$ is equal to (equation (3.49) of Hastie \emph{et al.}) +\[ +\mathrm{Var}(\hat{z}_i)=\frac{d_i^2}{N}, +\] +where $d_i$ are the singular values of the matrix $\hat{X}$. Give an interprepation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. + +% ------------------- end of main content --------------- + +% #ifdef PREAMBLE +\end{document} +% #endif + diff --git a/doc/Projects/2018/hw2/pdf/hw2.pdf b/doc/Projects/2018/hw2/pdf/hw2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d5d7c1f38df71f3ee7d4e5342a627c79b3246525 GIT binary patch literal 198044 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≤Lf1`7x& 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
QK%ySLXma8 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 P+jr3s8JUQzDD3|Ow{YQ) literal 0 HcmV?d00001 diff --git a/doc/Projects/2018/hw2/pdf/hw2.tex b/doc/Projects/2018/hw2/pdf/hw2.tex new file mode 100644 index 000000000..84344cbca --- /dev/null +++ b/doc/Projects/2018/hw2/pdf/hw2.tex @@ -0,0 +1,203 @@ +%% +%% Automatically generated file from DocOnce source +%% (https://github.com/hplgit/doconce/) +%% +%% + + +%-------------------- begin preamble ---------------------- + +\documentclass[% +oneside, % oneside: electronic viewing, twoside: printing +final, % draft: marks overfull hboxes, figures with paths +10pt]{article} + +\listfiles % print all files needed to compile this document + +\usepackage{relsize,makeidx,color,setspace,amsmath,amsfonts,amssymb} +\usepackage[table]{xcolor} +\usepackage{bm,ltablex,microtype} + +\usepackage[pdftex]{graphicx} + +\usepackage{fancyvrb} % packages needed for verbatim environments + +\usepackage[T1]{fontenc} +%\usepackage[latin1]{inputenc} +\usepackage{ucs} +\usepackage[utf8x]{inputenc} + +\usepackage{lmodern} % Latin Modern fonts derived from Computer Modern + +% Hyperlinks in PDF: +\definecolor{linkcolor}{rgb}{0,0,0.4} +\usepackage{hyperref} +\hypersetup{ + breaklinks=true, + colorlinks=true, + linkcolor=linkcolor, + urlcolor=linkcolor, + citecolor=black, + filecolor=black, + %filecolor=blue, + pdfmenubar=true, + pdftoolbar=true, + bookmarksdepth=3 % Uncomment (and tweak) for PDF bookmarks with more levels than the TOC + } +%\hyperbaseurl{} % hyperlinks are relative to this root + +\setcounter{tocdepth}{2} % levels in table of contents + +% --- fancyhdr package for fancy headers --- +\usepackage{fancyhdr} +\fancyhf{} % sets both header and footer to nothing +\renewcommand{\headrulewidth}{0pt} +\fancyfoot[LE,RO]{\thepage} +% Ensure copyright on titlepage (article style) and chapter pages (book style) +\fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[C]{{\footnotesize \copyright\ 1999-2018, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license}} +% \renewcommand{\footrulewidth}{0mm} + \renewcommand{\headrulewidth}{0mm} +} +% Ensure copyright on titlepages with \thispagestyle{empty} +\fancypagestyle{empty}{ + \fancyhf{} + \fancyfoot[C]{{\footnotesize \copyright\ 1999-2018, "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html". Released under CC Attribution-NonCommercial 4.0 license}} + \renewcommand{\footrulewidth}{0mm} + \renewcommand{\headrulewidth}{0mm} +} + +\pagestyle{fancy} + + +% prevent orhpans and widows +\clubpenalty = 10000 +\widowpenalty = 10000 + +% --- end of standard preamble for documents --- + + +% insert custom LaTeX commands... + +\raggedbottom +\makeindex +\usepackage[totoc]{idxlayout} % for index in the toc +\usepackage[nottoc]{tocbibind} % for references/bibliography in the toc + +%-------------------- end preamble ---------------------- + +\begin{document} + +% matching end for #ifdef PREAMBLE + +\newcommand{\exercisesection}[1]{\subsection*{#1}} + + +% ------------------- main content ---------------------- + + + +% ----------------- title ------------------------- + +\thispagestyle{empty} + +\begin{center} +{\LARGE\bf +\begin{spacing}{1.25} +Homework 2 +\end{spacing} +} +\end{center} + +% ----------------- author(s) ------------------------- + +\begin{center} +{\bf \href{{http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html}}{Data Analysis and Machine Learning FYS-STK3155/FYS4155}} +\end{center} + + \begin{center} +% List of all institutions: +\centerline{{\small Department of Physics, University of Oslo, Norway}} +\end{center} + +% ----------------- end author(s) ------------------------- + +% --- begin date --- +\begin{center} +Sep 3, 2018 +\end{center} +% --- end date --- + +\vspace{1cm} + + +\subsection*{Exercise 4} + +This exercise is a continuation of exercise 2 from homework 1. We will +use the same function to generate our data set, still staying with a +simple function $y(x)$ which we want to fit using linear regression, +but now extending the analysis to include the Ridge and the Lasso +regression methods. You can use the code under the Regression as an example on how to use the Ridge and the Lasso methods, see the \href{{https://compphysics.github.io/MachineLearning/doc/pub/Regression/html/Regression-bs.html}}{regression slides}). + +We will thus again generate our own dataset for a function $y(x)$ where +$x \in [0,1]$ and defined by random numbers computed with the uniform +distribution. The function $y$ is a quadratic polynomial in $x$ with +added stochastic noise according to the normal distribution $\cal{N}(0,1)$. + +The following simple Python instructions define our $x$ and $y$ values (with 100 data points). +\begin{print} +x = np.random.rand(100,1) +y = 5*x*x+0.1*np.random.randn(100,1) +\end{print} + +\begin{enumerate} +\item Write your own code for the Ridge method (see chapter 3.4 of Hastie \emph{et al.}, equations (3.43) and (3.44)) and compute the parametrization for different values of $\lambda$. +\end{enumerate} + +\noindent +Compare and analyze your results with those from exercise 2. Study the dependence on $\lambda$ while also varying the strength of the noise in your expression for $y(x)$. + +\begin{enumerate} +\item Repeat the above but using the functionality of \textbf{scikit-learn}. Compare your code with the results from \textbf{scikit-learn}. Remember to run with the same random numbers for generating $x$ and $y$. + +\item Our next step is to study the variance of the parameters $\beta_1$ and $\beta_2$ (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. +\end{enumerate} + +\noindent +You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix $(\hat{X}^T\hat{X})^{-1}+\lambda\hat{I}$) or use the functionality of \textbf{scikit-learn} and computetheir variances. Discuss the results of these variances as functions of $\lambda$. In particular, try to link your discussion with the discussion in Hastie \emph{et al.} and their figure 3.11. + +\begin{enumerate} +\item Repeat the previous step but add now the Lasso method, see equation (3.53) of Hastie \emph{et al.}. Discuss your results and compare with standard regression and the Ridge regression results. You can write your own code or use the functionality of \textbf{scikit-learn}. + +\item Finally, using \textbf{scikit-learn} or your own code, compute also the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error defined as +\end{enumerate} + +\noindent +\[ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +\] +and the $R^2$ score function. +If $\tilde{\hat{y}}_i$ is the predicted value of the $i-th$ sample and $y_i$ is the corresponding true value, then the score $R^2$ is defined as +\[ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +\] +where we have defined the mean value of $\hat{y}$ as +\[ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +\] +Discuss these quantities as functions of the variable $\lambda$ in the Ridge and Lasso regression methods. + +\subsection*{Exercise 5} + +Using the singular value decomposition, show that the variance of the direction vector +$\hat{z}_i=\hat{X}\hat{v}_i$ is equal to (equation (3.49) of Hastie \emph{et al.}) +\[ +\mathrm{Var}(\hat{z}_i)=\frac{d_i^2}{N}, +\] +where $d_i$ are the singular values of the matrix $\hat{X}$. Give an interprepation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. + +% ------------------- end of main content --------------- + +\end{document} + diff --git a/doc/src/Projects/2018/Exercises/hw2.do.txt b/doc/src/Projects/2018/Exercises/hw2.do.txt index bd2355fab..48412eeb1 100644 --- a/doc/src/Projects/2018/Exercises/hw2.do.txt +++ b/doc/src/Projects/2018/Exercises/hw2.do.txt @@ -1,12 +1,65 @@ -TITLE: Homework 1 +TITLE: Homework 2 AUTHOR: "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio.no/studier/emner/matnat/fys/FYS3155/index-eng.html" {copyright, 1999-present|CC BY-NC} at Department of Physics, University of Oslo, Norway DATE:Today -===== Exercise 1 ===== +===== Exercise 4 ===== -Make sure you have installed all necessary t +This exercise is a continuation of exercise 2 from homework 1. We will +use the same function to generate our data set, still staying with a +simple function $y(x)$ which we want to fit using linear regression, +but now extending the analysis to include the Ridge and the Lasso +regression methods. You can use the code under the Regression as an example on how to use the Ridge and the Lasso methods, see the "regression slides":"https://compphysics.github.io/MachineLearning/doc/pub/Regression/html/Regression-bs.html"). -===== Exercise 2 ===== +We will thus again generate our own dataset for a function $y(x)$ where +$x \in [0,1]$ and defined by random numbers computed with the uniform +distribution. The function $y$ is a quadratic polynomial in $x$ with +added stochastic noise according to the normal distribution $\cal{N}(0,1)$. -===== Exercise 3 ===== +The following simple Python instructions define our $x$ and $y$ values (with 100 data points). +!bc pycod +x = np.random.rand(100,1) +y = 5*x*x+0.1*np.random.randn(100,1) +!ec + +o Write your own code for the Ridge method (see chapter 3.4 of Hastie *et al.*, equations (3.43) and (3.44)) and compute the parametrization for different values of $\lambda$. +Compare and analyze your results with those from exercise 2. Study the dependence on $\lambda$ while also varying the strength of the noise in your expression for $y(x)$. + +o Repeat the above but using the functionality of _scikit-learn_. Compare your code with the results from _scikit-learn_. Remember to run with the same random numbers for generating $x$ and $y$. + +o Our next step is to study the variance of the parameters $\beta_1$ and $\beta_2$ (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. +You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix $(\hat{X}^T\hat{X})^{-1}+\lambda\hat{I}$) or use the functionality of _scikit-learn_ and computetheir variances. Discuss the results of these variances as functions of $\lambda$. In particular, try to link your discussion with the discussion in Hastie *et al.* and their figure 3.11. + +o Repeat the previous step but add now the Lasso method, see equation (3.53) of Hastie *et al.*. Discuss your results and compare with standard regression and the Ridge regression results. You can write your own code or use the functionality of _scikit-learn_. + +o Finally, using _scikit-learn_ or your own code, compute also the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error defined as +!bt +\[ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +\] +!et +and the $R^2$ score function. +If $\tilde{\hat{y}}_i$ is the predicted value of the $i-th$ sample and $y_i$ is the corresponding true value, then the score $R^2$ is defined as +!bt +\[ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +\] +!et +where we have defined the mean value of $\hat{y}$ as +!bt +\[ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +\] +!et +Discuss these quantities as functions of the variable $\lambda$ in the Ridge and Lasso regression methods. + +===== Exercise 5 ===== + +Using the singular value decomposition, show that the variance of the direction vector +$\hat{z}_i=\hat{X}\hat{v}_i$ is equal to (equation (3.49) of Hastie *et al.*) +!bt +\[ +\mathrm{Var}(\hat{z}_i)=\frac{d_i^2}{N}, +\] +!et +where $d_i$ are the singular values of the matrix $\hat{X}$. Give an interprepation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. diff --git a/doc/web/course.do.txt b/doc/web/course.do.txt index d98c3a3ac..68763e1ff 100644 --- a/doc/web/course.do.txt +++ b/doc/web/course.do.txt @@ -96,6 +96,14 @@ ${text_types(ch)} * "Plain html":"http://compphysics.github.io/MachineLearning/doc/Projects/2018/hw1/html/hw1.html" * "Bootstrap slide style, easy for reading on mobile devices": "http://compphysics.github.io/MachineLearning/doc/Projects/2018/hw1/html/hw1-bs.html" +=== Second homework set, week 36 === + * LaTeX and PDF: + * "LaTex file":"http://compphysics.github.io/MachineLearning/doc/Projects/2018/hw2/pdf/hw2.tex" + * "PDF file":"http://compphysics.github.io/MachineLearning/doc/Projects/2018/hw2/pdf/hw2.pdf" + * HTML: + * "Plain html":"http://compphysics.github.io/MachineLearning/doc/Projects/2018/hw2/html/hw2.html" + * "Bootstrap slide style, easy for reading on mobile devices": "http://compphysics.github.io/MachineLearning/doc/Projects/2018/hw2/html/hw2-bs.html" + === Project 1, Deadline October 1 === diff --git a/doc/web/course.html b/doc/web/course.html index f17cafa09..b207da6d6 100644 --- a/doc/web/course.html +++ b/doc/web/course.html @@ -99,25 +99,26 @@ div { text-align: justify; text-justify: inter-word; } ('Teach yourself C++', 2, None, '___sec13'), ('Projects and Exercises Fall 2018', 2, None, '___sec14'), ('First homework set, week 35', 3, None, '___sec15'), - ('Project 1, Deadline October 1', 3, None, '___sec16'), - ('Project 2, Deadline November 5', 3, None, '___sec17'), - ('Project 3, Deadline November 30', 3, None, '___sec18'), - ('Course content', 3, None, '___sec19'), - ('Learning outcomes', 2, None, '___sec20'), - ('Prerequisites', 2, None, '___sec21'), - ('The course has two central parts', 2, None, '___sec22'), + ('Second homework set, week 36', 3, None, '___sec16'), + ('Project 1, Deadline October 1', 3, None, '___sec17'), + ('Project 2, Deadline November 5', 3, None, '___sec18'), + ('Project 3, Deadline November 30', 3, None, '___sec19'), + ('Course content', 3, None, '___sec20'), + ('Learning outcomes', 2, None, '___sec21'), + ('Prerequisites', 2, None, '___sec22'), + ('The course has two central parts', 2, None, '___sec23'), ('Statistical analysis and optimization of data', 3, None, - '___sec23'), - ('Machine learning', 3, None, '___sec24'), - ('Recommended textbooks', 2, None, '___sec25'), + '___sec24'), + ('Machine learning', 3, None, '___sec25'), + ('Recommended textbooks', 2, None, '___sec26'), ('"Other ' 'textbooks":"https://github.com/CompPhysics/MachineLearning/tree/master/doc/Textbooks"', 2, None, - '___sec26'), - ('Teaching schedule Fall 2018', 2, None, '___sec27')]} + '___sec27'), + ('Teaching schedule Fall 2018', 2, None, '___sec28')]} end of tocinfo --> @@ -577,7 +578,26 @@ formulas in HTML or ipython notebook files. -

Project 1, Deadline October 1

+

Second homework set, week 36

+ +
+ +

Project 1, Deadline October 1

  • LaTeX and PDF:
  • @@ -596,7 +616,7 @@ formulas in HTML or ipython notebook files.
-

Project 2, Deadline November 5

+

Project 2, Deadline November 5

  • LaTeX and PDF:
  • @@ -615,7 +635,7 @@ formulas in HTML or ipython notebook files.
-

Project 3, Deadline November 30

+

Project 3, Deadline November 30

  • LaTeX and PDF:
  • @@ -634,7 +654,7 @@ formulas in HTML or ipython notebook files.
-

Course content

+

Course content

Probability theory and statistical methods play a central role in science. Nowadays we are @@ -653,7 +673,7 @@ tools of probability theory, the aim of this course is to expose you to central This course covers thus topics like Monte Carlo methods and Markov chains, Bayesian statistics, error estimates, various linear methods, optimization of data and error analysis and central algorithms in machine learning. The course has several numerical projects and numerical exercises that are meant to illustrate the theory. -

Learning outcomes

+

Learning outcomes

The course introduces a variety of central algorithms and methods @@ -670,19 +690,19 @@ essential for studies of data analysis and machine learning. The course is proje

  • Work on numerical projects to illustrate the theory. The projects play a central role and students are expected to know modern programming languages like Python or C++.
  • -

    Prerequisites

    +

    Prerequisites

    Basic knowledge in programming and numerics. Required courses are the equivalents to the University of Oslo mathematics courses MAT1100, MAT1110, MAT1120 and at least one of the corresponding computing and programming courses INF1000/INF1110 or MAT-INF1100/MAT-INF1100L/BIOS1100/KJM-INF1xxx. -

    The course has two central parts

    +

    The course has two central parts

    1. Statistical analysis and optimization of data
    2. Machine learning
    -

    Statistical analysis and optimization of data

    +

    Statistical analysis and optimization of data

    The following topics will be covered @@ -699,7 +719,7 @@ The following topics will be covered

  • Practical optimization using Singular-value decomposition and least squares for parameterizing data.
  • -

    Machine learning

    +

    Machine learning

    The following topics will be covered @@ -715,14 +735,14 @@ The following topics will be covered All the above topics will be supported by examples, hands-on exercises and project work. -

    Recommended textbooks

    +

    Recommended textbooks

    -

    Other textbooks

    +

    Other textbooks

    General learning book on statistical analysis: @@ -744,7 +764,7 @@ All the above topics will be supported by examples, hands-on exercises and proje -

    Teaching schedule Fall 2018

    +

    Teaching schedule Fall 2018

    Acronyms for textbooks and references to chapter From 6470c2d5f4e85713d530934c9a032e7f16bb5e75 Mon Sep 17 00:00:00 2001 From: mhjensen Date: Mon, 3 Sep 2018 16:35:05 +0200 Subject: [PATCH 02/12] fixing typos as usual --- doc/Projects/2018/hw2/html/hw2-bs.html | 9 ++------- doc/Projects/2018/hw2/html/hw2.html | 9 ++------- .../2018/hw2/ipynb/ipynb-hw2-src.tar.gz | Bin 206 -> 207 bytes doc/Projects/2018/hw2/pdf/hw2.p.tex | 9 ++------- doc/Projects/2018/hw2/pdf/hw2.pdf | Bin 198044 -> 198064 bytes doc/Projects/2018/hw2/pdf/hw2.tex | 9 ++------- doc/src/Projects/2018/Exercises/hw2.do.txt | 5 ++--- 7 files changed, 10 insertions(+), 31 deletions(-) diff --git a/doc/Projects/2018/hw2/html/hw2-bs.html b/doc/Projects/2018/hw2/html/hw2-bs.html index f97cff804..367aaa066 100644 --- a/doc/Projects/2018/hw2/html/hw2-bs.html +++ b/doc/Projects/2018/hw2/html/hw2-bs.html @@ -150,12 +150,7 @@ Compare and analyze your results with those from exercise 2. Study the dependenc

    1. Repeat the above but using the functionality of scikit-learn. Compare your code with the results from scikit-learn. Remember to run with the same random numbers for generating \( x \) and \( y \).
    2. -
    3. Our next step is to study the variance of the parameters \( \beta_1 \) and \( \beta_2 \) (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression.
    4. -
    - -You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix \( (\hat{X}^T\hat{X})^{-1}+\lambda\hat{I} \)) or use the functionality of scikit-learn and computetheir variances. Discuss the results of these variances as functions of \( \lambda \). In particular, try to link your discussion with the discussion in Hastie et al. and their figure 3.11. - -
      +
    1. Our next step is to study the variance of the parameters \( \beta_1 \) and \( \beta_2 \) (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix \( (\hat{X}^T\hat{X})^{-1}+\lambda\hat{I} \)) or use the functionality of scikit-learn and computetheir variances. Discuss the results of these variances as functions of \( \lambda \). In particular, try to link your discussion with the discussion in Hastie et al. and their figure 3.11.
    2. Repeat the previous step but add now the Lasso method, see equation (3.53) of Hastie et al.. Discuss your results and compare with standard regression and the Ridge regression results. You can write your own code or use the functionality of scikit-learn.
    3. Finally, using scikit-learn or your own code, compute also the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error defined as
    @@ -186,7 +181,7 @@ $$ \mathrm{Var}(\hat{z}_i)=\frac{d_i^2}{N}, $$ -where \( d_i \) are the singular values of the matrix \( \hat{X} \). Give an interprepation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. +where \( d_i \) are the singular values of the matrix \( \hat{X} \). Give an interpretation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise.

    diff --git a/doc/Projects/2018/hw2/html/hw2.html b/doc/Projects/2018/hw2/html/hw2.html index 3e2d44270..81b326f5d 100644 --- a/doc/Projects/2018/hw2/html/hw2.html +++ b/doc/Projects/2018/hw2/html/hw2.html @@ -115,12 +115,7 @@ Compare and analyze your results with those from exercise 2. Study the dependenc

    1. Repeat the above but using the functionality of scikit-learn. Compare your code with the results from scikit-learn. Remember to run with the same random numbers for generating \( x \) and \( y \).
    2. -
    3. Our next step is to study the variance of the parameters \( \beta_1 \) and \( \beta_2 \) (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression.
    4. -
    - -You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix \( (\hat{X}^T\hat{X})^{-1}+\lambda\hat{I} \)) or use the functionality of scikit-learn and computetheir variances. Discuss the results of these variances as functions of \( \lambda \). In particular, try to link your discussion with the discussion in Hastie et al. and their figure 3.11. - -
      +
    1. Our next step is to study the variance of the parameters \( \beta_1 \) and \( \beta_2 \) (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix \( (\hat{X}^T\hat{X})^{-1}+\lambda\hat{I} \)) or use the functionality of scikit-learn and computetheir variances. Discuss the results of these variances as functions of \( \lambda \). In particular, try to link your discussion with the discussion in Hastie et al. and their figure 3.11.
    2. Repeat the previous step but add now the Lasso method, see equation (3.53) of Hastie et al.. Discuss your results and compare with standard regression and the Ridge regression results. You can write your own code or use the functionality of scikit-learn.
    3. Finally, using scikit-learn or your own code, compute also the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error defined as
    @@ -151,7 +146,7 @@ $$ \mathrm{Var}(\hat{z}_i)=\frac{d_i^2}{N}, $$ -where \( d_i \) are the singular values of the matrix \( \hat{X} \). Give an interprepation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. +where \( d_i \) are the singular values of the matrix \( \hat{X} \). Give an interpretation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. diff --git a/doc/Projects/2018/hw2/ipynb/ipynb-hw2-src.tar.gz b/doc/Projects/2018/hw2/ipynb/ipynb-hw2-src.tar.gz index 4b1da116e789a1063214110a9cbf73f4e1523659..b45bada7796cbc362a3cd933ea09c659efdf149f 100644 GIT binary patch literal 207 zcmb2|=3r=d>y2h$etX_G>#%`9+ru@rU6zd#>tC(mKB?60q`9}DXKK{Xi9wzVzrM}3 zzOd#}tj5y!%@2~>9M9}oBOmVn+NO5d(YqQ;XYHD%IsNS6Iji55gmw2m*I zwrJU+xQ<=-y~3Z*D3J(%S$@p*ao)M!Q}Bm;NBQJ=f4`|RAcGJ4YZ$p!PG8NS H!N33jOh#n7 literal 206 zcmV;<05Sg`iwFRKM2%Yj1MSbjY63A3#&OR+#XP~1&8B)T=%I&#h%XS?*p01;CK27Y z@2b$A>`hAP|9APAVHjqX^XJ*?yej81dKjhD#2C5cbnaFt*wJu;=!QeB~dp>U@@$MPIrYB*fy@F}_Q8(v{!$ zVJ&TR`O=r<4o9Dy*wBk@TVH$(_G7$H@h#b1uExLp2><{90000000000008_ipKT2s ITmUEl08uJxEdT%j diff --git a/doc/Projects/2018/hw2/pdf/hw2.p.tex b/doc/Projects/2018/hw2/pdf/hw2.p.tex index 7824027f3..dd6529e49 100644 --- a/doc/Projects/2018/hw2/pdf/hw2.p.tex +++ b/doc/Projects/2018/hw2/pdf/hw2.p.tex @@ -191,13 +191,8 @@ Compare and analyze your results with those from exercise 2. Study the dependenc \begin{enumerate} \item Repeat the above but using the functionality of \textbf{scikit-learn}. Compare your code with the results from \textbf{scikit-learn}. Remember to run with the same random numbers for generating $x$ and $y$. -\item Our next step is to study the variance of the parameters $\beta_1$ and $\beta_2$ (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. -\end{enumerate} +\item Our next step is to study the variance of the parameters $\beta_1$ and $\beta_2$ (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix $(\hat{X}^T\hat{X})^{-1}+\lambda\hat{I}$) or use the functionality of \textbf{scikit-learn} and computetheir variances. Discuss the results of these variances as functions of $\lambda$. In particular, try to link your discussion with the discussion in Hastie \emph{et al.} and their figure 3.11. -\noindent -You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix $(\hat{X}^T\hat{X})^{-1}+\lambda\hat{I}$) or use the functionality of \textbf{scikit-learn} and computetheir variances. Discuss the results of these variances as functions of $\lambda$. In particular, try to link your discussion with the discussion in Hastie \emph{et al.} and their figure 3.11. - -\begin{enumerate} \item Repeat the previous step but add now the Lasso method, see equation (3.53) of Hastie \emph{et al.}. Discuss your results and compare with standard regression and the Ridge regression results. You can write your own code or use the functionality of \textbf{scikit-learn}. \item Finally, using \textbf{scikit-learn} or your own code, compute also the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error defined as @@ -225,7 +220,7 @@ $\hat{z}_i=\hat{X}\hat{v}_i$ is equal to (equation (3.49) of Hastie \emph{et a \[ \mathrm{Var}(\hat{z}_i)=\frac{d_i^2}{N}, \] -where $d_i$ are the singular values of the matrix $\hat{X}$. Give an interprepation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. +where $d_i$ are the singular values of the matrix $\hat{X}$. Give an interpretation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. % ------------------- end of main content --------------- diff --git a/doc/Projects/2018/hw2/pdf/hw2.pdf b/doc/Projects/2018/hw2/pdf/hw2.pdf index d5d7c1f38df71f3ee7d4e5342a627c79b3246525..1fbd9008a8809cc4a45df345fdfaacc176a0408a 100644 GIT binary patch delta 9954 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 delta 9907 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 lID>PzfJ;c_zqh6&d9i;W^&f Date: Mon, 3 Sep 2018 16:38:00 +0200 Subject: [PATCH 03/12] more typos grrr --- doc/Projects/2018/hw2/html/hw2-bs.html | 9 ++------- doc/Projects/2018/hw2/html/hw2.html | 9 ++------- .../2018/hw2/ipynb/ipynb-hw2-src.tar.gz | Bin 207 -> 207 bytes doc/Projects/2018/hw2/pdf/hw2.p.tex | 9 ++------- doc/Projects/2018/hw2/pdf/hw2.pdf | Bin 198064 -> 198096 bytes doc/Projects/2018/hw2/pdf/hw2.tex | 9 ++------- doc/src/Projects/2018/Exercises/hw2.do.txt | 5 ++--- 7 files changed, 10 insertions(+), 31 deletions(-) diff --git a/doc/Projects/2018/hw2/html/hw2-bs.html b/doc/Projects/2018/hw2/html/hw2-bs.html index 367aaa066..7e1d9a41e 100644 --- a/doc/Projects/2018/hw2/html/hw2-bs.html +++ b/doc/Projects/2018/hw2/html/hw2-bs.html @@ -143,14 +143,9 @@ The following simple Python instructions define our \( x \) and \( y \) values ( y = 5*x*x+0.1*np.random.randn(100,1)
      -
    1. Write your own code for the Ridge method (see chapter 3.4 of Hastie et al., equations (3.43) and (3.44)) and compute the parametrization for different values of \( \lambda \).
    2. -
    - -Compare and analyze your results with those from exercise 2. Study the dependence on \( \lambda \) while also varying the strength of the noise in your expression for \( y(x) \). - -
      +
    1. Write your own code for the Ridge method (see chapter 3.4 of Hastie et al., equations (3.43) and (3.44)) and compute the parametrization for different values of \( \lambda \). Compare and analyze your results with those from exercise 2. Study the dependence on \( \lambda \) while also varying the strength of the noise in your expression for \( y(x) \).
    2. Repeat the above but using the functionality of scikit-learn. Compare your code with the results from scikit-learn. Remember to run with the same random numbers for generating \( x \) and \( y \).
    3. -
    4. Our next step is to study the variance of the parameters \( \beta_1 \) and \( \beta_2 \) (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix \( (\hat{X}^T\hat{X})^{-1}+\lambda\hat{I} \)) or use the functionality of scikit-learn and computetheir variances. Discuss the results of these variances as functions of \( \lambda \). In particular, try to link your discussion with the discussion in Hastie et al. and their figure 3.11.
    5. +
    6. Our next step is to study the variance of the parameters \( \beta_1 \) and \( \beta_2 \) (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix \( (\hat{X}^T\hat{X})^{-1}+\lambda\hat{I} \)) or use the functionality of scikit-learn and compute their variances. Discuss the results of these variances as functions of \( \lambda \). In particular, try to link your discussion with the discussion in Hastie et al. and their figure 3.11.
    7. Repeat the previous step but add now the Lasso method, see equation (3.53) of Hastie et al.. Discuss your results and compare with standard regression and the Ridge regression results. You can write your own code or use the functionality of scikit-learn.
    8. Finally, using scikit-learn or your own code, compute also the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error defined as
    diff --git a/doc/Projects/2018/hw2/html/hw2.html b/doc/Projects/2018/hw2/html/hw2.html index 81b326f5d..e68f82db2 100644 --- a/doc/Projects/2018/hw2/html/hw2.html +++ b/doc/Projects/2018/hw2/html/hw2.html @@ -108,14 +108,9 @@ The following simple Python instructions define our \( x \) and \( y \) values ( y = 5*x*x+0.1*np.random.randn(100,1)
      -
    1. Write your own code for the Ridge method (see chapter 3.4 of Hastie et al., equations (3.43) and (3.44)) and compute the parametrization for different values of \( \lambda \).
    2. -
    - -Compare and analyze your results with those from exercise 2. Study the dependence on \( \lambda \) while also varying the strength of the noise in your expression for \( y(x) \). - -
      +
    1. Write your own code for the Ridge method (see chapter 3.4 of Hastie et al., equations (3.43) and (3.44)) and compute the parametrization for different values of \( \lambda \). Compare and analyze your results with those from exercise 2. Study the dependence on \( \lambda \) while also varying the strength of the noise in your expression for \( y(x) \).
    2. Repeat the above but using the functionality of scikit-learn. Compare your code with the results from scikit-learn. Remember to run with the same random numbers for generating \( x \) and \( y \).
    3. -
    4. Our next step is to study the variance of the parameters \( \beta_1 \) and \( \beta_2 \) (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix \( (\hat{X}^T\hat{X})^{-1}+\lambda\hat{I} \)) or use the functionality of scikit-learn and computetheir variances. Discuss the results of these variances as functions of \( \lambda \). In particular, try to link your discussion with the discussion in Hastie et al. and their figure 3.11.
    5. +
    6. Our next step is to study the variance of the parameters \( \beta_1 \) and \( \beta_2 \) (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix \( (\hat{X}^T\hat{X})^{-1}+\lambda\hat{I} \)) or use the functionality of scikit-learn and compute their variances. Discuss the results of these variances as functions of \( \lambda \). In particular, try to link your discussion with the discussion in Hastie et al. and their figure 3.11.
    7. Repeat the previous step but add now the Lasso method, see equation (3.53) of Hastie et al.. Discuss your results and compare with standard regression and the Ridge regression results. You can write your own code or use the functionality of scikit-learn.
    8. Finally, using scikit-learn or your own code, compute also the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error defined as
    diff --git a/doc/Projects/2018/hw2/ipynb/ipynb-hw2-src.tar.gz b/doc/Projects/2018/hw2/ipynb/ipynb-hw2-src.tar.gz index b45bada7796cbc362a3cd933ea09c659efdf149f..6bb2b7ebf214a27972f81ff43417b60f0a74f477 100644 GIT binary patch literal 207 zcmb2|=3p>)?~P_)etZ647L%dCvBL9qM{N#Hy4(ADX8^w(i(tIMri;GO!oEto^6!T( zw7oie%BBDBKN%i2II|{Ae|>l4ME%MyCSEJuvUfh)GV@MQ==WdCbhI^JM_r$~uGCo6 zR7BWT=JFMsZ(JgCF>s5Ry2h$etX_G>#%`9+ru@rU6zd#>tC(mKB?60q`9}DXKK{Xi9wzVzrM}3 zzOd#}tj5y!%@2~>9M9}oBOmVn+NO5d(YqQ;XYHD%IsNS6Iji55gmw2m*I zwrJU+xQ<=-y~3Z*D3J(%S$@p*ao)M!Q}Bm;NBQJ=f4`|RAcGJ4YZ$p!PG8NS H!N33jOh#n7 diff --git a/doc/Projects/2018/hw2/pdf/hw2.p.tex b/doc/Projects/2018/hw2/pdf/hw2.p.tex index dd6529e49..03165d7b8 100644 --- a/doc/Projects/2018/hw2/pdf/hw2.p.tex +++ b/doc/Projects/2018/hw2/pdf/hw2.p.tex @@ -182,16 +182,11 @@ y = 5*x*x+0.1*np.random.randn(100,1) \epycod \begin{enumerate} -\item Write your own code for the Ridge method (see chapter 3.4 of Hastie \emph{et al.}, equations (3.43) and (3.44)) and compute the parametrization for different values of $\lambda$. -\end{enumerate} +\item Write your own code for the Ridge method (see chapter 3.4 of Hastie \emph{et al.}, equations (3.43) and (3.44)) and compute the parametrization for different values of $\lambda$. Compare and analyze your results with those from exercise 2. Study the dependence on $\lambda$ while also varying the strength of the noise in your expression for $y(x)$. -\noindent -Compare and analyze your results with those from exercise 2. Study the dependence on $\lambda$ while also varying the strength of the noise in your expression for $y(x)$. - -\begin{enumerate} \item Repeat the above but using the functionality of \textbf{scikit-learn}. Compare your code with the results from \textbf{scikit-learn}. Remember to run with the same random numbers for generating $x$ and $y$. -\item Our next step is to study the variance of the parameters $\beta_1$ and $\beta_2$ (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix $(\hat{X}^T\hat{X})^{-1}+\lambda\hat{I}$) or use the functionality of \textbf{scikit-learn} and computetheir variances. Discuss the results of these variances as functions of $\lambda$. In particular, try to link your discussion with the discussion in Hastie \emph{et al.} and their figure 3.11. +\item Our next step is to study the variance of the parameters $\beta_1$ and $\beta_2$ (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix $(\hat{X}^T\hat{X})^{-1}+\lambda\hat{I}$) or use the functionality of \textbf{scikit-learn} and compute their variances. Discuss the results of these variances as functions of $\lambda$. In particular, try to link your discussion with the discussion in Hastie \emph{et al.} and their figure 3.11. \item Repeat the previous step but add now the Lasso method, see equation (3.53) of Hastie \emph{et al.}. Discuss your results and compare with standard regression and the Ridge regression results. You can write your own code or use the functionality of \textbf{scikit-learn}. diff --git a/doc/Projects/2018/hw2/pdf/hw2.pdf b/doc/Projects/2018/hw2/pdf/hw2.pdf index 1fbd9008a8809cc4a45df345fdfaacc176a0408a..c4daaa3b4d26c7d804f368618a6fa4fcc3091d9c 100644 GIT binary patch delta 9811 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 delta 9797 zcmai(Q*b2=ux?}Q*qGRu*qJyJPHa1wBoo^^wryJz+qS*q?AZ3?{`Z`!`+BQi)aq3D1)+P{)O+?YMbn&m!)U6jbT`;--eX5Ee|>(xmO zzZnmmobsuskQp)g$m!!~di{DOgD?x`rFC`r5&psv#$5d+mHX}9=<@Wbc^dKs-1Kq% z)F|P|K%%b6*xH;)Ru?n3PSs|NX0YI?S}y~KxgC%k>(JOfkNOliXO+KR^9TcT*YJdm zEr?y)U;laYi_OR?TQC%1;j%CDD$L@RVpp*H3<*~i46KAG^w?HDsv15oamXxJd%Wx{ zJJqT?8S=!!`#GtvE=?0ZZ~J}JrL&mb?Hw8F=y=EU^aF=z@Rb{(qRswQ;@W^;Z3>FV zl2L5h!YaRU*Jf0)6Vx@&%XkAPzj`+p$+UEzGzISRO8<$O)}EjDD~@0bKcBC#sE>EH zcxP8pRCuggoeqDk+M9DH=o%nI1%#{&;6|>0?vm7XuSE3h15+jfxsQLR6gFwp&&e|{ zY);{3;Dn&Ge%c*(m~Z{?QymPRFHkAAIwDn_p;F*>vS>gCovly9{n!LfpM4b_|7Yb)=x;dY0hW>aqKop&k4Ods0!h>u0bVY?l zNRE5-ny$HQTX(oVu}~UqprdggZ#1!}#xU2uF@Li@kckAlfxb(TM44H>e$52rjJPhN zr#6FPzcH>DGZANn0{phZ3T+W|QJ`_()P)wTj0NR%p6da3lJd=+hE4NY1FEg8 zKvGw2Tf3R+9s;M2<8hks#ruO&Og}W(V{~!(49o3O&o3k0q!;UO2(QnVbL=PlJr>9F zDtqkP`HVN7dFKigm2JFS;&c1^TkQUl=P1bBsX>NEw{e;^Fow*pj1 zXr&7B`2dhS{aX+-{{W*GW$p2v9>Lr4GbZ1K4%;pAJ_@BzPM*)b4&M+4g94+Jy{rYc zuqo24OMk890tTQB=)Is!8~rs$jviQpV+7+g-Epv2d9Hz*;e1Q?>Eh?w;)8@xWFlzp zcA&aqfG-39#u-snEkJYDR725t0_+7hpk5kn#Vi^r*#vnRY3YVH!zPREUwhzeAd)Od zU@(L&wE*mL&-pR9Q_dRBfR1>G0p!m^#~v_qNpvqcgOwxVfu+r0K9Col#^dIrWw82H z5dKBK%mc(znCRZ=|>(G@L3Re9s74}w*%oi<{?*&zm<8z?n(BU4jV-?Ga5u>5{ z?Hx=syqxmy90}wd5lVOWa76 z^?EH^C+JczJJ7BD3R|T*_qz``iuegr$#Yh0ne&}k6Z(-;7ne3r%!{^7bWT5N`OH;h z$$&2?_dD5ZePp2VQP?{wJo8doz3jl;aHQMsMEJgtVvf)d0w>j}g!$bD9L0@#Y)xo@ z5*fe#Ndc7Pz4))ET!bQ5=smmc!e==SLdNGY?dixQ37)*E3VeEW)?jyZc?20entFVPi5u z7r3UIU0=v~<640&VF4W&<>3g{0VEtsodZkA>Z*JTDO4S#@Tk=;Jd8*MlztP!6#~x( z;jQZgC&gVD7U@>*pj{|Y%PeV0D>c!AkaQu62LoC^zMvr$9C|Z+_HGk+%tnTIoS@4T zmUZ-$as;q2we5fUKFV;(x7U-8D+DEjfc3;*e$5 zWRlY7o{eWZ)%-77r&DhZ9yN8(bTj4>&F0AjmOz%1jf_gD!qX&@^)4`yJ1x(+?7c9r z8dk+2BorP2STFcaAD8HP9+-LB84bsxnvg~=;&si-@4VcH+k|FZIZM=%@U!$4RxOg6Je?VCj1i`$<3IH{QMU8b9qXWwaC-^2Sj2ZE%sY5X6Xh|aWHf2d1H-ipO22BkkWTx$IUtzFK!l_kfCoqd%qlkPD%h%BCZ;pt1(Xd0>=@Hwtp|~l9R2gI=ITH z0OXbJ=>iu;#;B>w+F$Pf{a)v;f_3Uw;t{|wk|_$A8u%0+5kBXSsgsrP_Z5uR z=^-ii834#=662uyTdNI}yi^=qHE~NtwOa?krQysW^fR)QsyJx%vd|Nq%^GQ^KuDG+ z$_A+kFO0$(0u@RK;nKLw^+@eV#g=*Td+)*_Jlp4de^QZjg+#_{$U`|6(n<^Zcq;8d zzJebUiQYR1^?-CCB=7>1O@qbDFEKPQ1Y9yPF~~2+G10!7q@i8>YTHvE*r%$;4mX*{ zzK3g!$=6H91Yf$Of`11~FWbg$`zmX%#+XQaW5ufjfR@~4A9ni;yAuHLKEhNZCrrmL zZg~GK<4-X}l(+`z;TIH)6`a6E57RD-_AnXk)WblbB;|3^Ku??=fkM95JIhg)ILo;- zDfL)G61KXpJLv^OGV)Rp&wfMD3;G)&-zO$wf5Ge7x#mBteO3V}To zhkCayU^A%ix84CtrgdA7?^y({xBrI0>h#1V??5w{AWq?D9o^OOLvxfhOx7b~LycZP z-$3^hvt9_}N6+gK$|ne{tJuUc|9!g|1u6_hVy7oKs6^7if=TtjFcb}ye6_=%qttzV z($D>V83-AiyVod;G=Otq$`;Pzu0ss~{bGzRzmSpVQyuAOb z$K5(xNuU-CU~g|=+!CkQjeLGamkVLp6=x22yW2*@B7sh!ZLDjeyh=|S+AHY&zsQs( zq0Tw@llwCe$;iE)w0Ai2_g{`&U+=-iYf?M=9v>Q;qm0%Ci`KvFGhLc5BOD2c2kA_5 z7V`bY?CY2MPo@T!m7UhTiOkm<%R2N)KvIMGztf#O>O^gfou&Ug9~Uq4dVOdj|>7ygWAJ3g2O&)T(;y=zhgK}_LIU}XH( zTbE-)DuAB9gv!cAtnS8*ey33J-H1IlcY}2{5RBI@KHLgl6oodZ6Z^g5WJCK#56mv3 zcj6por$>?lbcHi^(bZ-wb9{c;iO%F=P;+vO%w(il7#9UPUNt0G;NsAw`v;B!d`QM; zbcz#02~Kgb@xR~9{e%{1S)QUYB!14S6}p(z-%7ajlfyEgJ{k_}(;3wHklS@r?XBr_ zWnE}~$hMl&N9yllQx4Tv=YBWm1L|FC%}8$j86=a}YTLBe)KWUi8r}0y*j5s z_0!6rV9Dy(w69F9S<%6HB|Ud@wgE|_Q-#!k<(Em^^$Dq0i$#5Gt3p!tR~u0FqX{kq z4e8->q)@$yL$ztQm!mfRt)Yj9DxW zv72E1dp5rd)LVDW>z$FZIL6ca!TJb$P&tP*#?JNmm3$@vjx?2)S3V(pktm}ItNPEQ zGePadi7&MleSL}3i?z%qvk5cDgdHAaL)lg;K}M%TsRX(CwSlQy30zdmPI=&h0CUIf!I`jacpj-ECt*bO0N~psao! zXU;>^m%bB7aK&*TusD;q5NaY>B5mX|B{O%wZc4yJkMleA{4{Y7m`^0^taPw0Ne(w< zF=!T(*e^bwGA&yF)Gd(Vk+q|&d z{*1ZiCIRYCGO9g1(5q8%yS_lx?X^Ycfz}jbIjXoryx{?Ra5-XK=%4=}{zw%5$Z`fN zGk~V;teYP8%6Wbrzcl+Q;#h&22&$Q`)S%?AcZ#TgtDudi2Ic34P;K^<@#Ti>nAWwS z;h2buHBEOOv$I5ey%j$S6-SoB+wxd=**wLx#8j1sZsmz6i4R@#1qnn@9nR=vn7lPe(Z+05fo_cL)Fxr4$C25)<8(bKpE zkCc>SU)pMbbOP5^U~{&b8BD5yMtCTF#$xooOe5)?nw7x!4|o`qG+-k{nZH*u@pnFd zaPwnSzAT$2vW480@%>+14eV@sEtvFx`8;$&np!E--tPt6Fu!;<_VzX$aG0c~0Q@*< zK;p+s2-5(6#Kl~PvuU1Io@;x!;&J-=Q#o%D8>R-}^wxBo@U2Z$9QF(L?tm{@_n-mf zkBbIUyMH8A85P`bDMSn6Xs^#mu8?g56@8tM^JQwLaqerJ=-3F2@WuH z(((O)$~Wa$^D^qrlua8??>SuDk5#;x7ciU=CxUyHbR8oT(c48q(=hz)eaRMt8Ad-J zmNP2NMHa&YLR<+<=our~w#ycR_g6j1m;f`y35)GJEOiDVX%uQL76WgdwegG9dCZ#> zYp6I_CT4PNkPvMjuT>=+L;zR1pO|@s2@)f~L%&l~fNYnTVL42i$wZJT_pebO4FT;w zU0b%4zjliJXl#T=Zn~pBq6cGm+=o&A#s-2%;mOZPKbYP^xRB<>6>CYlhyf7A6_f1N zr$$7Ll;5wnFBb@Crri5Gye5BEoSRK}^%{JYTZ;8rj?bB0(WF#}f zn|!5DYPA0dvGHq+QFv07H0^URPRjvF218uXC0b?$`5Cc}Y3?k!;H$-`EPg87p{%&Z z>+Pq|`X6Es%=HcgW=}Tp&Pf77Dv=o&Ai_rywdH*}jIG}!j4er0{xl`#!zPe)KnfOZ zMTIT-5pS+&ctBS1_F(AjByox0JFJaNiAV+Eaws ze1j-~iu&FRWltbtO@#O9EM-r#TC8Jo2l-u8)8=PZrHs{iF2hyu_wD3|J7auLV7x9| zFlOYr5XVg4c;HbsvO@yU1R+m)Kb=oK%QrF0rg6nZe?Ojz4?z2saSYQO(XU{dfx&+%EIs~ByF!jLPHevs zxrk->e#fw<@+_b{@R~Qv|730#sI>6NgzV)54E{AnaeY=>yKv0@8JmgyK#1OTVV@T? zNsyC<;^3&?v#B5ah^qmuLGwMw$~c-zIRsKGYX%@6$cFdX&B#V_CL%E8eLJ3`_7^)q zdUk7}yO!{3PQS-?QN0I?sKt8l`5zpc!)cRumjd*8geE6m?`GhoVw`|h7Uf9#G z&AnXeJy#2Py~Kc!b41b1Z8Emy5@vxIqJ+z%8CZ53MEdDIFI=sn$wKx0;HD5mInp~= zZ)tgi-qYH#`TioKhas8}=zkh!Zm1c@@D^E87^lPAx#Yl`eWesOGs9ZQ`s`9bh^A#| zxurGyL0@lZRUtz&C63HGZ6OB1ptLW^w?$bAtR-UTqDj&9Q4WxXc}wo7)f%KN+F7hQ z_0h!xlq$PzGXL}mCg*vr3euY(Stra0kHZ>8mZPlK(lx`J0pEB7$;SsKquX5wqDs1+ z3aX4<#KwU!ZfLCy$znMj4rSbvc!cN>FM4+_AnbybkV(|F7@BKB#SLb<5Ki~c2Gc2d zNMLRw)(_$?d!^kyY|2w6i$Y@kMrF*Rg1Nliea?dmVXM%CdFDRoabpw}y;tCr$rNwa z81jP%tuSt6KOQr8U3Ob5%|M?v`rh;|rF)1_3RF_GaKY zM`{97W%MCpe(5z%Tk_7>$9e5q^#kp?!hGX7)Y39l>gO4HoQ%q9lu_H(Qc*82;ttOw zZeybZkuv4!@l6BcIpomlJ3+c)xAWQiNI>Q6h{?9IS~(4tQS~3R=5Z6fizlj^#V^Qz zXxq9$B)DNDxR9+RxKLunx;9Dycr~{y3+pI{8l!=FK?=y#!`k3+Ev<7Hdh@?^4fG%xZCd$9(Vp@(_u>qV09_s$6nD}$=VjgJ9^(k@V zBK#QPiq{gXh)K%9;jc>JS}@4g7&VUFMiLM72*|@Q#$wnq^AhBV)Iu@RBt8TzDuFjG z5F`>9!4W5PCRozg8<@-|T8Cbdmf54ca8V*gDzt&{60Ep=x{$ObeIbynIuj7u@$@3_ z;Yfk${?MfiRAO*BV4t|LrotEmw-{Kiv8IqCPWqt)t@LFQ%7jv=weU54sip)wMI}+H zeX#HKC~1fQ#$DOzdquqWeq+EM5mLM1^6&k;uOXMT`9~-YNxQr~A(O;$H<~1RjaTIN z;!h8?>_-hZv&>u{t{nYj4ue|WBzv%Kdlb@`ha?E?&n-dzBhp$Ji;Hl7VGWNj(q4DN zCq8nT%oCIZ^bp-~TEY_)F7PFuNp5HGTX+7TEv(}h7Zo-b3Z};;QGEA#(PFz&{3WzxO zBRgi$Bfa8nCytrnRwgWc5PDFLR3vYvf5h<56|qt~fgehyjkmUa2Lf_$U{r9_dzJoF zUk$>;yiNf4Tcjq9X4+jek zl+VOMr-D1zT|869tjy; zbg7Eh6r<3x@RTb^<8!&L94h;^n6(K-3!PAzrR0BQcsyP6heo z>EYLd)nv3!lr8jE2b;OD3?vf<1{ETLmmmR1S#--nz;rD_W}6Gn1e@gp+L9&#

    SR&m8`=NPJzzvQ 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 Sg(d}X@p1#GsU;L80sjXo-vU|y diff --git a/doc/Projects/2018/hw2/pdf/hw2.tex b/doc/Projects/2018/hw2/pdf/hw2.tex index 05027f064..99574c061 100644 --- a/doc/Projects/2018/hw2/pdf/hw2.tex +++ b/doc/Projects/2018/hw2/pdf/hw2.tex @@ -152,16 +152,11 @@ y = 5*x*x+0.1*np.random.randn(100,1) \end{print} \begin{enumerate} -\item Write your own code for the Ridge method (see chapter 3.4 of Hastie \emph{et al.}, equations (3.43) and (3.44)) and compute the parametrization for different values of $\lambda$. -\end{enumerate} +\item Write your own code for the Ridge method (see chapter 3.4 of Hastie \emph{et al.}, equations (3.43) and (3.44)) and compute the parametrization for different values of $\lambda$. Compare and analyze your results with those from exercise 2. Study the dependence on $\lambda$ while also varying the strength of the noise in your expression for $y(x)$. -\noindent -Compare and analyze your results with those from exercise 2. Study the dependence on $\lambda$ while also varying the strength of the noise in your expression for $y(x)$. - -\begin{enumerate} \item Repeat the above but using the functionality of \textbf{scikit-learn}. Compare your code with the results from \textbf{scikit-learn}. Remember to run with the same random numbers for generating $x$ and $y$. -\item Our next step is to study the variance of the parameters $\beta_1$ and $\beta_2$ (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix $(\hat{X}^T\hat{X})^{-1}+\lambda\hat{I}$) or use the functionality of \textbf{scikit-learn} and computetheir variances. Discuss the results of these variances as functions of $\lambda$. In particular, try to link your discussion with the discussion in Hastie \emph{et al.} and their figure 3.11. +\item Our next step is to study the variance of the parameters $\beta_1$ and $\beta_2$ (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix $(\hat{X}^T\hat{X})^{-1}+\lambda\hat{I}$) or use the functionality of \textbf{scikit-learn} and compute their variances. Discuss the results of these variances as functions of $\lambda$. In particular, try to link your discussion with the discussion in Hastie \emph{et al.} and their figure 3.11. \item Repeat the previous step but add now the Lasso method, see equation (3.53) of Hastie \emph{et al.}. Discuss your results and compare with standard regression and the Ridge regression results. You can write your own code or use the functionality of \textbf{scikit-learn}. diff --git a/doc/src/Projects/2018/Exercises/hw2.do.txt b/doc/src/Projects/2018/Exercises/hw2.do.txt index add3555f6..593182104 100644 --- a/doc/src/Projects/2018/Exercises/hw2.do.txt +++ b/doc/src/Projects/2018/Exercises/hw2.do.txt @@ -22,12 +22,11 @@ x = np.random.rand(100,1) y = 5*x*x+0.1*np.random.randn(100,1) !ec -o Write your own code for the Ridge method (see chapter 3.4 of Hastie *et al.*, equations (3.43) and (3.44)) and compute the parametrization for different values of $\lambda$. -Compare and analyze your results with those from exercise 2. Study the dependence on $\lambda$ while also varying the strength of the noise in your expression for $y(x)$. +o Write your own code for the Ridge method (see chapter 3.4 of Hastie *et al.*, equations (3.43) and (3.44)) and compute the parametrization for different values of $\lambda$. Compare and analyze your results with those from exercise 2. Study the dependence on $\lambda$ while also varying the strength of the noise in your expression for $y(x)$. o Repeat the above but using the functionality of _scikit-learn_. Compare your code with the results from _scikit-learn_. Remember to run with the same random numbers for generating $x$ and $y$. -o Our next step is to study the variance of the parameters $\beta_1$ and $\beta_2$ (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix $(\hat{X}^T\hat{X})^{-1}+\lambda\hat{I}$) or use the functionality of _scikit-learn_ and computetheir variances. Discuss the results of these variances as functions of $\lambda$. In particular, try to link your discussion with the discussion in Hastie *et al.* and their figure 3.11. +o Our next step is to study the variance of the parameters $\beta_1$ and $\beta_2$ (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix $(\hat{X}^T\hat{X})^{-1}+\lambda\hat{I}$) or use the functionality of _scikit-learn_ and compute their variances. Discuss the results of these variances as functions of $\lambda$. In particular, try to link your discussion with the discussion in Hastie *et al.* and their figure 3.11. o Repeat the previous step but add now the Lasso method, see equation (3.53) of Hastie *et al.*. Discuss your results and compare with standard regression and the Ridge regression results. You can write your own code or use the functionality of _scikit-learn_. From acb8aa711d3917e9b3b0ba4d5ceceadc91b9a813 Mon Sep 17 00:00:00 2001 From: mhjensen Date: Tue, 4 Sep 2018 22:04:50 +0200 Subject: [PATCH 04/12] preparing ridge material for slides --- doc/src/Regression/out.txt | 2144 ++++++++++++++++++++++++++++++++++++ 1 file changed, 2144 insertions(+) create mode 100644 doc/src/Regression/out.txt diff --git a/doc/src/Regression/out.txt b/doc/src/Regression/out.txt new file mode 100644 index 000000000..e7253cd8d --- /dev/null +++ b/doc/src/Regression/out.txt @@ -0,0 +1,2144 @@ +# #ifdef LATEX2DOCONCE +This is the result of the doconce latex2doconce program. +The translation from LaTeX is just a helper. The text must +be carefully examined! (Be prepared that some text might also +be lost in the translation - in seldom cases.) + + +## search for CHECK to see if auto editing was correct + +# #endif + +========= Ridge regression ========= label{chap:ridgeRegression} +\pagenumbering{arabic} +# \setcounter{page} +High-throughput techniques measure many characteristics of a single sample simultaneously. The number of characteristics $p$ measured may easily exceed ten thousand. In most medical studies the number of samples $n$ involved often falls behind the number of characteristics measured, i.e: $p > n$. The resulting $(n \times p)$-dimensional data matrix $\mathbf{X}$: +\begin{align*} +\mathbf{X} & = +\left( +X_{\ast,1} \, | \, \ldots \, | \, X_{\ast,p} +\right) +\, \, \, = \, \, \, +\left( +\begin{array}{c} +X_{1,\ast} \\ \vdots \\ X_{n,\ast} +\end{array} \right) +\, \, \, = \, \, \, +\left( +\begin{array}{ccc} +X_{1,1} & \ldots & X_{1,p} +\\ +\vdots & \ddots & \vdots +\\ +X_{n,1} & \ldots & X_{n,p} +\end{array} \right) +\end{align*} +from such a study contains a larger number of covariates than samples. When $p > n$ the data matrix $\mathbf{X}$ is said to be *high-dimensional*. + +In this chapter we adopt the traditional statistical notation of the data matrix. An alternative notation would be $\mathbf{X}^{\top}$ (rather than $\mathbf{X}$), which is employed in the field of (statistical) bioinformatics. In $\mathbf{X}^{\top}$ the rows comprise the samples rather than the covariates. The case for the bioinformatics notation stems from practical arguments. A spreadsheet is designed to have more rows than columns. In case $p > n$ the traditional notation yields a spreadsheet with more columns than rows. When $p > 10000$ the conventional display is impractical. In this chapter we stick to the conventional statistical notation of the data matrix as all mathematical expressions involving $\mathbf{X}$ are then in line with those of standard textbooks on regression. + +The information contained in $\mathbf{X}$ is often used to explain a particular property of the samples involved. In applications in molecular biology $\mathbf{X}$ may contain microRNA expression data from which the expression levels of a gene are to be described. When the gene's expression levels are denoted by $\mathbf{Y} = (Y_{1}, \ldots, Y_n)^{\top}$, the aim is to find the linear relation $Y_i = \mathbf{X}_{i, \ast} \bbeta$ from the data at hand by means of regression analysis. Regression is however frustrated by the high-dimensionality of $\mathbf{X}$ (illustrated in Section ref{sect.ridgeRegression} and at the end of Section ref{sect.constrainedEstimation}). These notes discuss how regression may be modified to accommodate the high-dimensionality of $\mathbf{X}$. First, however, `standard' linear regression is recaputilated. + + +======= Linear regression ======= + +Consider an experiment in which $p$ characteristics of $n$ samples are measured. The data from this experiment are denoted $\mathbf{X}$, with $\mathbf{X}$ as above. The matrix $\mathbf{X}$ is called the *design matrix*. Additional information of the samples is available in the form of $\mathbf{Y}$ (also as above). The variable $\mathbf{Y}$ is generally referred to as the *response variable*. The aim of regression analysis is to explain $\mathbf{Y}$ in terms of $\mathbf{X}$ through a functional relationship like $Y_i = f(\mathbf{X}_{i,\ast})$. When no prior knowledge on the form of $f(\cdot)$ is available, it is common to assume a linear relationship between $\mathbf{X}$ and $\mathbf{Y}$. This assumption gives rise to the *linear regression model*: + +!bt + +!bt +\begin{align} +Y_{i} & = \mathbf{X}_{i,\ast} \, \bbeta + \varepsilon_i label{form.linRegressionModel} +\\ +\nonumber +& = \beta_1 \, X_{i,1} + \ldots + \beta_{p} \, X_{i, p} + \varepsilon_i. +\end{align} +!et +!et +In model (ref{form.linRegressionModel}) $\bbeta = (\beta_1, \ldots, \beta_p)^{\top}$ is the *regression parameter*. The parameter $\beta_j$, $j=1, \ldots, p$, represents the +effect size of covariate $j$ on the response. That is, for each unit change in covariate $j$ (while keeping the other covariates fixed) the observed change in the response is equal to $\beta_j$. +The second summand on the right-hand side of the model, $\varepsilon_i$, is referred to as the error. It represents the part of the response not explained by the functional part $\mathbf{X}_{i,\ast} \, \bbeta$ of the model (ref{form.linRegressionModel}). In contrast to the functional part, which is considered to be systematic (i.e. non-random), the error is assumed to be random. Consequently, $Y_{i_1,\ast}$ need not equal $Y_{i_2,\ast}$ for $i_1 \not= i_2$, even if $\mathbf{X}_{i_1,\ast}= \mathbf{X}_{i_2,\ast}$. To complete the formulation of model (ref{form.linRegressionModel}) we need to specify the probability distribution of $\varepsilon_i$. It is assumed that $\varepsilon_i \sim \mathcal{N}(0, \sigma^2)$ and the $\varepsilon_{i}$ are independent, i.e.: +\begin{align*} +\mbox{Cov}(\varepsilon_{i_1}, \varepsilon_{i_2}) & = +\left\{ +\begin{array}{lcc} +\sigma^2 & \mbox{if} & i_1 = i_2, +\\ +0 & \mbox{if} & i_1 \not= i_2. +\end{array} +\right. +\end{align*} +The randomness of $\varepsilon_i$ implies that $\mathbf{Y}_i$ is also a random variable. In particular, $\mathbf{Y}_i$ is normally distributed, because $\varepsilon_i \sim \mathcal{N}(0, \sigma^2)$ and $\mathbf{X}_{i,\ast} \, \bbeta$ is a non-random scalar. To specify the parameters of the distribution of $\mathbf{Y}_i$ we need to calculate its first two moments. Its expectation equals: +\begin{align*} +\mathbb{E}(Y_i) & = \mathbb{E}(\mathbf{X}_{i, \ast} \, \bbeta) + \mathbb{E}(\varepsilon_i) \, \, \, = \, \, \, \mathbf{X}_{i, \ast} \, \bbeta, +\end{align*} +while its variance is: +\begin{align*} +\mbox{Var}(Y_i) & = \mathbb{E} \{ [Y_i - \mathbb{E}(Y_i)]^2 \} \, \, \, = \, \, \, \mathbb{E} ( Y_i^2 ) - [\mathbb{E}(Y_i)]^2 +# \\ +# & = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, \bbeta + \varepsilon_i )^2] - ( \mathbf{X}_{i, \ast} \, \bbeta)^2 +\\ +& = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, \bbeta)^2 + 2 \varepsilon_i \mathbf{X}_{i, \ast} \, \bbeta + \varepsilon_i^2 ] - ( \mathbf{X}_{i, \ast} \, \bbeta)^2 +\\ +# & = ( \mathbf{X}_{i, \ast} \, \bbeta)^2 + 2 \mathbb{E}(\varepsilon_i) \mathbf{X}_{i, \ast} \, \bbeta + \mathbb{E}(\varepsilon_i^2 ) - ( \mathbf{X}_{i, \ast} \, \bbeta)^2 +# \\ +& = \mathbb{E}(\varepsilon_i^2 ) \, \, \, = \, \, \, \mbox{Var}(\varepsilon_i) \, \, \, = \, \, \, \sigma^2. +\end{align*} +Hence, $Y_i \sim \mathcal{N}( \mathbf{X}_{i, \ast} \, \bbeta, \sigma^2)$. This formulation (in terms of the normal distribution) is equivalent to the formulation of model +(ref{form.linRegressionModel}), as both capture the assumptions involved: the linearity of the functional part and the normality of the error. + +Model (ref{form.linRegressionModel}) is often written in a more condensed matrix form: + +!bt + +!bt +\begin{align} +\mathbf{Y} & = \mathbf{X} \, \bbeta + \vvarepsilon, label{form.linRegressionModelinMatrix} +\end{align} +!et +!et +where $\vvarepsilon = (\varepsilon_1, \varepsilon_2, \ldots, \varepsilon_n)^{\top}$ and distributed as $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_{p}, \sigma^2 \mathbf{I}_{nn})$. As above model (ref{form.linRegressionModelinMatrix}) can be expressed as a multivariate normal distribution: $\mathbf{Y} \sim \mathcal{N}(\mathbf{X} \, \bbeta, \sigma^2 \mathbf{I}_{nn})$. + +Model (ref{form.linRegressionModelinMatrix}) is a so-called hierarchical model. This terminology emphasizes that $\mathbf{X}$ and $\mathbf{Y}$ are not on a par, they play different roles in the model. The former is used to explain the latter. In model (ref{form.linRegressionModel}) $\mathbf{X}$ is referred as the *explanatory* or *independent* variable, while the variable $\mathbf{Y}$ is generally referred to as the *response* or *dependent* variable. + +The covariates, the columns of $\mathbf{X}$, may themselves be random. To apply the linear model they are temporarily assumed fixed. The linear regression model is then to be interpreted as $\mathbf{Y} \, | \, \mathbf{X} \sim \mathcal{N}(\mathbf{X} \, \bbeta, \sigma^2 \mathbf{I}_{nn})$ + +\begin{example} *Methylation of a tumor-suppressor gene* +\\ +Consider a study which measures the gene expression levels of a tumor-suppressor genes (TSG) and two methylation markers (MM1 and MM2) on 67 samples. A methylation marker is a gene that promotes methylation. Methylation refers to attachment of a methyl group to a nucleotide of the DNA. In case this attachment takes place in or close by the promotor region of a gene, this complicates the transcription of the gene. Methylation may down-regulate a gene. This mechanism also works in the reverse direction: removal of methyl groups may up-regulate a gene. A tumor-suppressor gene is a gene that halts the progression of the cell towards a cancerous state. + +The medical question associated with these data: do the expression levels methylation markers affect the expression levels of the tumor-suppressor gene? To answer this question we may formulate the following linear regression model: +\begin{align*} +Y_{i, `{\footnotesize tsg`}} & = \beta_0 + \beta_{`{\footnotesize mm1`}} X_{i, `{\footnotesize mm1`}} ++ \beta_{`{\footnotesize mm2`}} X_{i, `{\footnotesize mm2`}} + \varepsilon_i, +\end{align*} +with $i = 1, \ldots, 67$ and $\varepsilon_i \sim \mathcal{N}(0, \sigma^2)$. The interest focusses on $\beta_{`{\footnotesize mm1`}}$ and $\beta_{`{\footnotesize mm2`}}$. A non-zero value of at least one of these two regression parameters indicates that there is a linear association between the expression levels of the tumor-suppressor gene and that of the methylation markers. + +Prior knowledge from biology suggests that the $\beta_{`{\footnotesize mm1`}}$ and $\beta_{`{\footnotesize mm2`}}$ are both non-positive. High expression levels of the methylation markers lead to hyper-methylation, in turn inhibiting the transcription of the tumor-suppressor gene. Vice versa, low expression levels of MM1 and MM2 are (via hypo-methylation) associated with high expression levels of TSG. Hence, a negative concordant effect between MM1 and MM2 (on one side) and TSG (on the other) is expected. Of course, the methylation markers may affect expression levels of other genes that in turn regulate the tumor-suppressor gene. The regression parameters $\beta_{`{\footnotesize mm1`}}$ and $\beta_{`{\footnotesize mm2`}}$ then reflect the indirect effect of the methylation markers on the expression levels of the tumor suppressor gene. +\end{example} + + +# #if FORMAT in ("latex", "pdflatex") +\noindent +# #endif +The linear regression model (ref{form.linRegressionModel}) involves the unknown parameters: $\bbeta$ and $\sigma^2$, which need to be learned from the data. The parameters of the regression model, $\bbeta$ and $\sigma^2$ are estimated by means of likelihood maximization. Recall that $Y_i \sim \mathcal{N}( \mathbf{X}_{i,\ast} \, \bbeta, \sigma^2)$ with corresponding density: $ f_{Y_i}(y_i) = (2 \, \pi \, \sigma^2)^{-1/2} \, \exp[ - (y_i - \mathbf{X}_{i\ast} \, \bbeta)^2 / 2 \sigma^2 ]$. The likelihood thus is: +\begin{align*} +L(\mathbf{Y}, \mathbf{X}; \bbeta, \sigma^2) & = +# f_{\mathbf{Y}}(\mathbf{y}) \, \, \, = \, \, \, \prod_{i=1}^n f_{Y_i}(y_i) \, \, \, = \, \, \, +\prod_{i=1}^n \frac{1}{\sqrt{2 \, \pi} \, \sigma} \, \exp[ - (Y_i - \mathbf{X}_{i, \ast} \, \bbeta)^2 / 2 \sigma^2 ], +\end{align*} +in which the independence of the observations has been used. Because of the concavity of the logarithm, the maximization of the likelihood coincides with the maximum of the logarithm of the likelihood (called the log-likelihood). Hence, to obtain maximum likelihood (ML) estimates of the parameter it is equivalent to find the maximum of the log-likelihood. The log-likelihood is: +\begin{align*} +\mathcal{L}(\mathbf{Y}, \mathbf{X}; \bbeta, \sigma^2) & = +\log[ L(\mathbf{Y}, \mathbf{X}; \bbeta, \sigma^2) ] +\, \, \, = \, \, \, % \log \Big[ \prod_{i=1}^n f_{Y_i}(y_i) \Big] +# \, \, \, = \, \, \, \sum_{i=1}^n \log[ f_{Y_i}(y_i) ] +# \\ +# & = \sum_{i=1}^n [ -\log(\sqrt{2 \, \pi} \, \sigma) - (y_i - \mathbf{X}_{i\ast} \, \bbeta)^2 / 2 \sigma^2 ] +# \\ +# & = +-n \, \log(\sqrt{2 \, \pi} \, \sigma) - \frac{1}{ 2 \sigma^2} \sum_{i=1}^n (y_i - \mathbf{X}_{i, \ast} \, \bbeta)^2. +\end{align*} +After noting that $\sum_{i=1}^n (Y_i - \mathbf{X}_{i, \ast} \, \bbeta)^2 = \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2 \, \, \, = \, \, \, (\mathbf{Y} - \mathbf{X} \, \bbeta)^{\top} \, (\mathbf{Y} - \mathbf{X} \, \bbeta)$, the log-likelihood can be written as: +\begin{align*} +\mathcal{L}(\mathbf{Y}, \mathbf{X}; \bbeta, \sigma^2) & = -n \, \log(\sqrt{2 \, \pi} \, \sigma) - \frac{1}{ 2 \sigma^2} \, \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2. +\end{align*} +In order to find the maximum of the log-likelihood, take its derivate with respect to $\bbeta$: +\begin{align*} +\frac{\partial }{\partial \, \beta} \mathcal{L}(\mathbf{Y}, \mathbf{X}; \bbeta, \sigma^2) & = - \frac{1}{ 2 \sigma^2} \, \frac{\partial }{\partial \, \beta} \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2 \, \, \, = \, \, \, \frac{1}{\sigma^2} \, \mathbf{X}^{\top} (\mathbf{Y} - \mathbf{X} \, \bbeta). +\end{align*} +Equate this derivative to zero gives the estimating equation for $\bbeta$: + +!bt + +!bt +\begin{align} label{form.normalEquation} +\mathbf{X}^{\top} \mathbf{X} \, \bbeta & = \mathbf{X}^{\top} \mathbf{Y}. +\end{align} +!et +!et +Equation (ref{form.normalEquation}) is called to the *normal equation*. Pre-multiplication of both sides of the normal equation by $(\mathbf{X}^{\top} \mathbf{X})^{-1}$ now yields the ML estimator of the regression parameter: $\hat{\bbeta} = (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y}$, in which it is assumed that $(\mathbf{X}^{\top} \mathbf{X})^{-1}$ is well-defined. + +Along the same lines one obtains the ML estimator of the residual variance. Take the partial derivative of the log-likelihood with respect to $\sigma^2$: +\begin{align*} +\frac{\partial }{\partial \, \sigma} \mathcal{L}(\mathbf{Y}, \mathbf{X}; \bbeta, \sigma^2) & = - \frac{n}{\sigma} + \frac{1}{\sigma^3} \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2. +\end{align*} +Equate the right-hand side to zero and solve for $\sigma^2$ to find $\hat{\sigma}^2 = \tfrac{1}{n} \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2$. In this expression $\bbeta$ is unknown and the ML estimate of $\bbeta$ is plugged-in. +\\ +\\ +With explicit expressions of the ML estimators at hand, we can study their properties. The expectation of the ML estimator of the regression parameter $\bbeta$ is: +\begin{align*} +\mathbb{E}(\hat{\bbeta}) & = \mathbb{E}[ (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y}] +\, \, \, = \, \, \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbb{E}[ \mathbf{Y}] +# \\ +\, \, \, = \, \, \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{X} \, \bbeta +\, \, \, \, \, = \, \, \, \bbeta. +\end{align*} +Hence, the ML estimator of the regression coefficients is unbiased. + +The variance of the ML estimator of $\bbeta$ is: +\begin{align*} +\mbox{Var}(\hat{\bbeta}) & = \mathbb{E} \{ [\hat{\bbeta} - \mathbb{E}(\hat{\bbeta})] [\hat{\bbeta} - \mathbb{E}(\hat{\bbeta})]^{\top} \} +\\ +& = \mathbb{E} \{ [(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y} - \bbeta] \, [(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y} - \bbeta]^{\top} \} +\\ +# & = \mathbb{E} \{ [(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y}] \, [(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y}]^{\top} \} - \bbeta \, \bbeta^{\top} +# \\ +# & = \mathbb{E} \{ (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y} \, \mathbf{Y}^{\top} \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \} - \bbeta \, \bbeta^{\top} +# \\ +& = (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \, \mathbb{E} \{ \mathbf{Y} \, \mathbf{Y}^{\top} \} \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} - \bbeta \, \bbeta^{\top} +\\ +& = (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \, \{ \mathbf{X} \, \bbeta \, \bbeta^{\top} \, \mathbf{X}^{\top} + \SSigma \} \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} - \bbeta \, \bbeta^{\top} +# \\ +# & = (\mathbf{X}^T \mathbf{X})^{-1} \, \mathbf{X}^T \, \mathbf{X} \, \bbeta \, \bbeta^T \, \mathbf{X}^T \, \mathbf{X} \, (\mathbf{X}^T % \mathbf{X})^{-1} +# \\ +# & & + \, \, \sigma^2 \, (\mathbf{X}^T \mathbf{X})^{-1} \, \mathbf{X}^T \, \mathbf{X} \, (\mathbf{X}^T \mathbf{X})^{-1} - \bbeta \bbeta^T +\\ +& = \bbeta \, \bbeta^{\top} + \sigma^2 \, (\mathbf{X}^{\top} \mathbf{X})^{-1} - \bbeta \, \bbeta^{\top} +\, \, \, = \, \, \, \sigma^2 \, (\mathbf{X}^{\top} \mathbf{X})^{-1}, +\end{align*} +in which we have used that $\mathbb{E} (\mathbf{Y} \mathbf{Y}^{\top}) = \mathbf{X} \, \bbeta \, \bbeta^{\top} \, \mathbf{X}^{\top} + \sigma^2 \, \mathbf{I}_{nn}$. From $\mbox{Var}(\hat{\bbeta}) = \sigma^2 \, (\mathbf{X}^{\top} \mathbf{X})^{-1}$, one obtains an estimate of the variance of the estimate of the $j$-th regression coefficient: $\hat{\sigma}^2 (\hat{\beta}_j ) = \hat{\sigma}^2 \sqrt{ [(\mathbf{X}^{\top} \mathbf{X})^{-1}]_{jj} }$. This may be used to construct a confidence interval for the estimates or test the hypothesis $H_0: \beta_j = 0$. In the latter $\hat{\sigma}^2$ should not be the maximum likelihood estimator, as it is biased. It is then to be replaced by the residual sum-of-squares divided by $n-p$ rather than $n$. +\\ +\\ +The prediction of $Y_i$, denoted $\widehat{Y}_i$, is the expected value of $Y_i$ according the linear regression model (with its parameters replaced by their estimates). The prediction of $Y_i$ thus equals $\mathbb{E}(Y_i; \hat{\bbeta}, \hat{\sigma}^2) = \mathbf{X}_{i, \ast} \hat{\bbeta}$. In matrix notation the prediction is: +\begin{align*} +\widehat{\mathbf{Y}} & = \mathbf{X} \, \hat{\bbeta} \, \, \, = \, \, \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} \, \, \, := \, \, \, \mathbf{H} \mathbf{Y}, +\end{align*} +where $\mathbf{H}$ is the *hat matrix*, as it `puts the hat' on $\mathbf{Y}$. Note that the hat matrix is a projection matrix, i.e. $\mathbf{H}^2 = \mathbf{H}$ for +\begin{align*} +\mathbf{H}^2 & = \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \, \, \, = \, \, \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top}. +\end{align*} +Thus, the prediction $\widehat{\mathbf{Y}}$ is an orthogonal projection of $\mathbf{Y}$ onto the space spanned by the columns of $\mathbf{X}$. + +With $\widehat{\bbeta}$ available, an estimate of the errors $\hat{\varepsilon}_i$, dubbed the *residuals* are obtained via: +\begin{align*} +\hat{\vvarepsilon} & = \mathbf{Y} - \widehat{\mathbf{Y}} \, \, \, = \, \, \, \mathbf{Y} - \mathbf{X} \, \hat{\bbeta} \, \, \, = \, \, \, \mathbf{Y} - \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} \, \, \, = \, \, \, [ \mathbf{I} - \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} ] \, \mathbf{Y}. +\end{align*} +Thus, the residuals are a projection of $\mathbf{Y}$ onto the orthogonal complement of the space spanned by the columns of $\mathbf{X}$. The residuals are to be used in diagnostics, e.g. checking of the normality assumption by means of a normal probability plot. +\\ +\\ +For more on the linear regression model confer the monograph of cite{Drap1998}. + + + +======= Ridge regression} label{sect.ridgeRegression ======= +When the design matrix is high-dimensional, the covariates (the columns of $\mathbf{X}$) are super-collinear. Recall *collinearity* in regression analysis refers to the event of two (or multiple) covariates being highly linearly related. Consequently, the subspace spanned by collinear covariates may not be (or close to not being) of full rank. When the subspace (onto which $\mathbf{Y}$ is projected) is (close to) rank deficient, it is (almost) impossible to separate the contribution of the individual covariates. The uncertainty with respect to the covariate responsible for the variation explained in $\mathbf{Y}$ is often reflected in the fit of the linear regression model to data by a large error of the estimates of the regression parameters corresponding to the collinear covariates. + +\begin{example} \mbox{ } \\ +The flotillins (the FLOT-1 and FLOT-2 genes) have been observed to regulate the proto-oncogene ERBB2 *in vitro* \citep{Pust2013}. One may wish to corroborate this *in vivo*. To this end we use gene expression data of a breast cancer study, available as a Bioconductor package: {\tt breastCancerVDX}. From this study the expression levels of probes interrogating the FLOT-1 and ERBB2 genes are retrieved. For clarity of the illustration the FLOT-2 gene is ignored. After centering, the expression levels of the first ERBB2 probe are regressed on those of the four FLOT-1 probes. The R-code below carries out the data retrieval and analysis. +\lstinputlisting{introExampleForNotes.r} +Prior to the regression analysis, we first assess whether there is collinearity among the FLOT-1 probes through evaluation of the correlation matrix. This reveals a strong correlation ($\hat{\rho} = 0.91$) between the second and third probe. All other cross-correlations do not exceed the 0.20 (in an absolute sense). Hence, there is collinearity among the columns of the design matrix in the to-be-performed regression analysis. +\verbatiminput{introExampleRegressionOutput.txt} +The output of the regression analysis above shows the first probe to be significantly associated to the expression levels of ERBB2. The collinearity of the second and third probe reveals itself in the standard errors of the effect size: for these probes the standard error is much larger than those of the other two probes. This reflects the uncertainty in the estimates. Regression analysis has difficulty to decide to which covariate the explained proportion of variation in the response should be attributed. The large standard error of these effect sizes propagates to the testing as the Wald test statistic is the ratio of the estimated effect size and its standard error. Collinear covariates are thus less likely to pass the significance threshold. +\end{example} + +# #if FORMAT in ("latex", "pdflatex") +\noindent +# #endif +The case of two (or multiple) covariates being perfectly linearly dependent is referred as *super-collinearity*. The rank of a high-dimensional design matrix is maximally equal to $n$: $\mbox{rank}(\mathbf{X}) \leq n$. Consequently, the dimension of subspace spanned by the columns of $\mathbf{X}$ is smaller than or equal to $n$. As $p > n$, this implies that columns of $\mathbf{X}$ are linearly dependent. Put differently, a high-dimensional $\mathbf{X}$ suffers from super-collinearity. + + + +\begin{example} *Super-collinearity* label{example.supercollinearity} +\\ +Consider the design matrix: +\begin{align*} +\mathbf{X} & = \left( +\begin{array}{rrr} +1 & -1 & 2 +\\ +1 & 0 & 1 +\\ +1 & 2 & -1 +\\ +1 & 1 & 0 +\end{array} \right) +\end{align*} +The columns of $\mathbf{X}$ are linearly dependent: the first column is the row-wise sum of the other two columns. The rank (more correct, the column rank) of a matrix is the dimension of space spanned by the column vectors. Hence, the rank of $\mathbf{X}$ is equal to the number of linearly independent columns: $\mbox{rank}(\mathbf{X}) = 2$. +\end{example} + + +# #if FORMAT in ("latex", "pdflatex") +\noindent +# #endif +Super-collinearity of an $(n \times p)$-dimensional design matrix $\mathbf{X}$ implies[^footnote1][^footnote1]: If the (column) rank of $\mathbf{X$ is smaller than $p$, there exists a non-trivial $\mathbf{v} \in \mathbb{R}^p$ such that $\mathbf{X} \mathbf{v} = \mathbf{0}_{p}$. Multiplication of this inequality by $\mathbf{X}^{\top}$ yields $\mathbf{X}^{\top} \mathbf{X} \mathbf{v} = \mathbf{0}_{p}$. As $\mathbf{v} \not= \mathbf{0}_{p}$, this implies that $\mathbf{X}^{\top} \mathbf{X}$ is not invertible.} that the rank of the $(p \times p)$-dimensional matrix $\mathbf{X}^{\top} \mathbf{X}$ is smaller than $p$, and, consequently, it is singular. A square matrix that does not have an inverse is called *singular*. A matrix $\mathbf{A}$ is singular if and only if its determinant is zero: $\mbox{det}(\mathbf{A}) = 0$. + +\begin{example} *Singularity* label{example.singular} +\\ +Consider the matrix $\mathbf{A}$ given by: +\begin{align*} +\mathbf{A} & = \left( +\begin{array}{rr} +1 & 2 +\\ +2 & 4 +\end{array} \right) +\end{align*} +Clearly, $\mbox{det}(\mathbf{A}) = a_{11} a_{22} - a_{12} a_{21} = 1 \times 4 - 2 \times 2 = 0$. Hence, $\mathbf{A}$ is singular and its inverse is undefined. +\end{example} + +# #if FORMAT in ("latex", "pdflatex") +\noindent +# #endif +As $\mbox{det}(\mathbf{A})$ is equal to the product of the eigenvalues $\nu_j$ of $\mathbf{A}$, the matrix $\mathbf{A}$ is singular if one (or more) of the eigenvalues of $\mathbf{A}$ is zero. To see this, consider the spectral decomposition of $\mathbf{A}$: +\begin{align*} +\mathbf{A} & = \sum_{j=1}^p \nu_j \, \mathbf{v}_j \, \mathbf{v}_j^{\top}, +\end{align*} +where $\mathbf{v}_j$ is the eigenvector corresponding to $\nu_j$. The inverse of $\mathbf{A}$ is then: +\begin{align*} +\mathbf{A}^{-1} & = \sum_{j=1}^p \nu_j^{-1} \, \mathbf{v}_j \, \mathbf{v}_j^{\top}. +\end{align*} +The right-hand side is undefined if $\nu_j =0$ for any $j$. + + +\begin{contexample}_ref{example.singular_} \hspace{3pt}*Singularity (continued)* +\\ +Revisit Example ref{example.singular}. Matrix $\mathbf{A}$ has eigenvalues $\nu_1 =5$ and $\nu_2=0$. According to the spectral decomposition, the inverse of $\mathbf{A}$ is: +\begin{align*} +\mathbf{A}^{-1} & = \frac{1}{5} \, \mathbf{v}_1 \, \mathbf{v}_1^{\top} + \frac{1}{0} \, \mathbf{v}_2 \, \mathbf{v}_2^{\top}. +\end{align*} +This expression is undefined as we divide by zero in the second summand on the right-hand side. +\end{contexample} + +# #if FORMAT in ("latex", "pdflatex") +\noindent +# #endif +In summary, the columns of a high-dimensional design matrix $\mathbf{X}$ are linearly dependent and this super-collinearity causes $\mathbf{X}^{\top} \mathbf{X}$ to be singular. Now recall the ML estimator of the parameter of the linear regression model: + +!bt + +!bt +\begin{align} +\hat{\bbeta} & = (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}. +\end{align} +!et +!et +This estimator is only well-defined if $(\mathbf{X}^{\top} \mathbf{X})^{-1}$ exits. Hence, when $\mathbf{X}$ is high-dimensional the regression parameter $\bbeta$ cannot be estimated. +\\ +\\ +Above only the practical consequence of high-dimensionality is presented: the expression $( \mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}$ cannot be evaluated numerically. But the problem arising from the high-dimensionality of the data is more fundamental. To appreciate this, consider the normal equations: +\begin{align*} +\mathbf{X}^{\top} \mathbf{X} \bbeta & = \mathbf{X}^{\top} \mathbf{Y}. +\end{align*} +The matrix $\mathbf{X}^{\top} \mathbf{X}$ is of rank $n$, while $\bbeta$ is a vector of length $p$. Hence, while there are $p$ unknowns, the system of linear equations from which these are to be solved effectively comprises $n$ degrees of freedom. If $p > n$, the vector $\bbeta$ cannot uniquely be determined from this system of equations. To make this more specific let $U$ be the $n$-dimensional space spanned by the columns of $\mathbf{X}$ and the $p-n$-dimensional space $V$ be orthogonal complement of $U$, i.e. $V = U^{\perp}$. Then, $\mathbf{X} \mathbf{v} = \mathbf{0}_{p}$ for all $\mathbf{v} \in V$. So, $V$ is the non-trivial null space of $\mathbf{X}$. Consequently, as $\mathbf{X}^{\top} \mathbf{X} \mathbf{v} = +\mathbf{X}^{\top} \mathbf{0}_{p} = \mathbf{0}_{n}$, the solution of the normal equations is: +\begin{align*} +\hat{\bbeta} & = ( \mathbf{X}^{\top} \mathbf{X})^{-} \mathbf{X}^{\top} \mathbf{Y} + \mathbf{v} \qquad \mbox{for all } \mathbf{v} \in V, +\end{align*} +where $\mathbf{A}^{-}$ denotes the Moore-Penrose inverse of the matrix $\mathbf{A}$, which is defined as: +\begin{align*} +\mathbf{A}^{-} & = \sum_{j=1}^p \nu_j^{-1} \, I_{\{ \nu_j \not= 0 \} } \, \mathbf{v}_j \, \mathbf{v}_j^{\top}. +\end{align*} +The solution of the normal equations is thus only determined up to an element from a non-trivial space $V$, and there is no unique estimator of the regression parameter. +\\ +\\ +To obtain an estimate of the regression parameter $\bbeta$ when $\mathbf{X}$ is (close to) super-collinearity, cite{Hoer1970} proposed an ad-hoc fix to resolve the (almost) singularity of $\mathbf{X}^{\top} \mathbf{X}$. Simply replace $\mathbf{X}^{\top} \mathbf{X}$ by $\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}$ with $\lambda \in [0, \infty)$. The scalar $\lambda$ is a tuning parameter, henceforth called the *penalty parameter*. + + +\begin{contexample}_ref{example.supercollinearity_} \hspace{3pt}*Super-collinearity (continued)* +\\ +Recall the super-collinear design matrix $\mathbf{X}$ of Example ref{example.supercollinearity}. Then, for (say) $\lambda = 1$: +\begin{align*} +\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} & = \left( +\begin{array}{rrr} +5 & 2 & 2 +\\ +2 & 7 & -4 +\\ +2 & -4 & 7 +\end{array} \right). +\end{align*} +The eigenvalues of this matrix are 11, 7, and 1. Hence, $\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}$ has no zero eigenvalue and its inverse is well-defined. +\end{contexample} + +# #if FORMAT in ("latex", "pdflatex") +\noindent +# #endif +With the ad-hoc fix for the singularity of $\mathbf{X}^{\top} \mathbf{X}$, cite{Hoer1970} proceed to define the *ridge regression estimator*: + +!bt + +!bt +\begin{align} label{form.ridgeRegressionEstimator} +\hat{\bbeta}(\lambda) & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}, +\end{align} +!et +!et +for $\lambda \in [0, \infty)$. Clearly, this is - for $\lambda$ strictly positive - a well-defined estimator, even if $\mathbf{X}$ is high-dimensional. However, each choice of $\lambda$ leads to a different ridge regression estimate. The set of all ridge regression estimates $\{ \hat{\bbeta}(\lambda) \, : \, \lambda \in [0, \infty) \}$ is called the *solution* or *regularization path* of the ridge estimator. + + + +\begin{contexample}_ref{example.supercollinearity_} \hspace{3pt}*Super-collinearity (continued)* +\\ +Recall the super-collinear design matrix $\mathbf{X}$ of Example ref{example.supercollinearity}. Suppose that the corresponding response vector is $\mathbf{Y} = (1.3, -0.5, 2.6, 0.9)^{\top}$. +The ridge regression estimates for, e.g. $\lambda = 1, 2$, and $10$ are then: +\begin{align*} +\hat{\bbeta}(1) & = (0.614, 0.548, 0.066)^{\top}, +\\ +\hat{\bbeta}(2) & = (0.537, 0.490, 0.048)^{\top}, +\\ +\hat{\bbeta}(10) & = (0.269, 0.267, 0.002)^{\top}. +\end{align*} +The full solution path of the ridge estimator is plotted in Figure ref{fig.ridgeSolPathPlusVar}. + +# original latex figure with scale=0.45, angle=0 + +FIGURE: [ridgeSolutionPath_logLambda.eps, width=400 frac=1.0] Solution path of the ridge estimator and its variance. The left panel shows the solution path of the ridge estimator for the data of Example ref{example.supercollinearity}. In the right panel the corresponding variance of the ridge estimator is plotted against the (logarithm of the) penalty parameter.} label{fig.ridgeSolPathPlusVar +# \afterpage{} +\end{contexample} + +# #if FORMAT in ("latex", "pdflatex") +\noindent +# #endif +Having obtained an estimate of the regression parameter $\bbeta$, one can define the fit $\widehat{\mathbf{Y}}$. It is defined analogous to the standard case: +\begin{align*} +\widehat{\mathbf{Y}}(\lambda) & = \mathbf{X} \hat{\bbeta}(\lambda) +\, \, \, = \, \, \, \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\, \, \, := \, \, \, \mathbf{H}(\lambda) \mathbf{Y}. +\end{align*} +Previously, when using the ML estimator, the fit could be understood as a projection of $\mathbf{Y}$ onto the subspace spanned by the columns of $\mathbf{X}$. The fit $\widehat{\mathbf{Y}}(\lambda)$ corresponding to the ridge estimator is not a projection of $\mathbf{Y}$ onto $\mathbf{X}$ (confer Exercise ref{question.ridgeResidualsProjection} $\!$a). Consequently, the `ridge residuals' $\mathbf{Y} - \widehat{\mathbf{Y}}(\lambda)$ are not orthogonal to the fit $\widehat{\mathbf{Y}}(\lambda)$ (confer Exercise ref{question.ridgeResidualsProjection} $\!$b). + + +======= Eigenvalue shrinkage ======= + +The effect of the ridge penalty may also studied from the perspective of singular values. Let the singular value decomposition of the $(n \times p)$-dimensional design matrix $\mathbf{X}$ be: +\begin{align*} +\mathbf{X} & = \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top}, +\end{align*} +where $\mathbf{D}_x$ an $(n \times n)$-dimensional diagonal matrix with the singular values, +$\mathbf{U}_x$ an $(n \times n)$-dimensional matrix with columns containing the left singular vectors (denoted $\mathbf{u}_i$), and $\mathbf{V}_x$ a $(p \times n)$-dimensional matrix with columns containing the right singular vectors (denoted $\mathbf{v}_i$). The columns of $\mathbf{U}_x$ and $\mathbf{V}_x$ are orthogonal: $\mathbf{U}_x^{\top} \mathbf{U}_x = \mathbf{I}_{nn} = \mathbf{V}_x^{\top} \mathbf{V}_x$. + +The OLS estimator can then be rewritten in terms of the SVD-matrices as: +\begin{align*} +\hat{\bbeta} & = (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = (\mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} +\\ +& = (\mathbf{V}_x \mathbf{D}_x^2 \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} +\\ +& = \mathbf{V}_x \mathbf{D}_x^{-2} \mathbf{V}_x^{\top} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} +\\ +& = \mathbf{V}_x \mathbf{D}_x^{-2} \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y}, +\end{align*} +where $\mathbf{D}_x^{-2} \mathbf{D}_x$ is not simplified further to emphasize the effect of the ridge penalty. Similarly, the ridge estimator can be rewritten in terms of the SVD-matrices as: +\begin{align*} +\hat{\bbeta} & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = (\mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} +\\ +& = (\mathbf{V}_x \mathbf{D}_x^2 \mathbf{V}_x^{\top} + \lambda \mathbf{V}_x \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} +\\ +& = \mathbf{V}_x (\mathbf{D}_x^{2} + \lambda \mathbf{I}_{nn})^{-1} \mathbf{V}_x^{\top} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} +\\ +& = \mathbf{V}_x (\mathbf{D}_x^{2} + \lambda \mathbf{I}_{nn})^{-1} \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y}. +\end{align*} +Combining the two results and writing $(\mathbf{D}_x)_{jj} = d_{x,jj}$ we have: +\begin{align*} +d_{x,jj}^{-1} & \geq & \frac{d_{x,jj}}{d_{x,jj}^2 + \lambda} \qquad \mbox{ for all } \lambda > 0. +\end{align*} +Thus, the ridge penalty shrinks the singular values. +\\ +\\ +Return to the problem of the super-collinearity of $\mathbf{X}$ in the high-dimensional setting ($p > n$). The super-collinearity implies the singularity of $\mathbf{X}^{\top} \mathbf{X}$ and prevents the calculation of the OLS estimator of the regression coefficients. However, $\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}$ is non-singular, with inverse: +\begin{align*} +(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} & = \sum_{j=1}^p (d_{x,jj}^2 + \lambda)^{-1} \mathbf{v}_j \mathbf{v}_j^{\top}. +\end{align*} +The right-hand side is well-defined for $\lambda > 0$. + + +===== Principal components regression ===== + +Principal component regression is a close relative to ridge regression that can also be applied in a high-dimensional context. Principal components regression explains the response not by the covariates themselves but by linear combinations of the covariates as defined by the principal components of $\mathbf{X}$. Let $\mathbf{U} \mathbf{D} \mathbf{V}^{\top}$ be the singular value decomposition of $\mathbf{X}$. The $i$-th principal component of $\mathbf{X}$ is then $\mathbf{X} \mathbf{v}_i$, henceforth denoted $\mathbf{z}_i$. Let $\mathbf{Z}_k$ be the matrix of the first $k$ principal components, i.e. $\mathbf{Z}_k = \mathbf{X} \mathbf{V}_k$ where $\mathbf{V}_k$ contains the first $k$ right singular vectors as columns. Principal components regression then amounts to regressing the response $\mathbf{Y}$ onto $\mathbf{Z}_{k}$, that is, it fits the model $\mathbf{Y} = \mathbf{Z}_k \ggamma + \vvarepsilon$. The least squares estimator of $\ggamma$ then is (with some abuse of notation): +\begin{align*} +\hat{\ggamma} & = (\mathbf{Z}_k^{\top} \mathbf{Z}_k)^{-1} \mathbf{Z}_k^{\top} \mathbf{Y} \, \, \, = \, \, \, (\mathbf{V}_k^{\top} \mathbf{X}^{\top} \mathbf{X} \mathbf{V}_k)^{-1} \mathbf{V}_k^{\top} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = (\mathbf{V}_k^{\top} \mathbf{V} \mathbf{D} \mathbf{U}^{\top} \mathbf{U} \mathbf{D} \mathbf{V}^{\top} \mathbf{V}_k)^{-1} \mathbf{V}_k^{\top} \mathbf{V} \mathbf{D} \mathbf{U}^{\top} \mathbf{Y} +\\ +& = (\mathbf{I}_{kn} \mathbf{D}^2 \mathbf{I}_{nk})^{-1} \mathbf{I}_{kn} \mathbf{D} \mathbf{U}^{\top} \mathbf{Y} +\\ +& = \mathbf{D}_k^{-2} \widetilde{\mathbf{D}}_k \mathbf{U}^{\top} \mathbf{Y} \, \, \, = \, \, \ \widetilde{\mathbf{D}}_k^{-1} \mathbf{U}^{\top} \mathbf{Y}, +\end{align*} +where $\mathbf{D}_k$ and $\widetilde{\mathbf{D}}_k$ are submatrices of $\mathbf{D}$. The matrix $\mathbf{D}_k$ is obtained from $\mathbf{D}$ by removal of the last $n-p$ rows and columsn, while for $\widetilde{\mathbf{D}}_k$ only the last $n-k$ rows are dropped. Similarly, $\mathbf{I}_{kn}$ and $\mathbf{I}_{nk}$ are obtained from $\mathbf{I}_{nn}$ by removal of the last $n-k$ rows and columns, respectively. The principal component regression estimator of $\bbeta$ then is $\hat{\bbeta}_{\mbox{{\tiny pcr}}} = \mathbf{V}_k \widetilde{\mathbf{D}}_k^{-1} \mathbf{U}^{\top} \mathbf{Y}$. When $k$ is set equal to the column rank of $\mathbf{X}$, and thus to the rank of $\mathbf{X}^{\top} \mathbf{X}$, the +principal component regression estimator $\hat{\bbeta}_{\mbox{{\tiny pcr}}} = (\mathbf{X}^{\top} \mathbf{X})^- \mathbf{X}^{\top} \mathbf{Y}$, where $\mathbf{A}^-$ denotes the Moore-Penrose inverse of matrix $\mathbf{A}$. + +The relation between ridge and principal component regression becomes clear when their corresponding estimators are written in terms of the singular value decomposition of $\mathbf{X}$: +\begin{align*} +\hat{\bbeta}_{\mbox{{\tiny pcr}}} & = \mathbf{V}_x (\mathbf{I}_{nk} \mathbf{D}_x \mathbf{I}_{kn})^{-1} \mathbf{U}_x^{\top} \mathbf{Y}, +\\ +\hat{\bbeta} (\lambda) & = \mathbf{V}_x (\mathbf{D}_x^2 + \lambda \mathbf{I}_{nn})^{-1} \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y}. +\end{align*} +Both operate on the singular values of the design matrix. But where principal component regression thresholds the singular values of $\mathbf{X}$, ridge regression shrinks them (depending on their size). Hence, one applies a discrete map on the singular values while the other a continuous one. + + + + + +======= Moments ======= + +The first two moments of the ridge regression estimator are derived. Next the performance of the ridge regression estimator is studied in terms of the mean squared error, which combines the first two moments. + + +===== Expectation ===== + +The left panel of Figure ref{fig.ridgeSolPathPlusVar} shows ridge estimates of the regression parameters converging to zero as the penalty parameter tends to infinity. This behaviour of the ridge estimator does not depend on the specifics of the data set. To see this study the expectation of the ridge estimator: +\begin{align*} +\mathbb{E} \big[ \hat{\bbeta}(\lambda) \big] & = \mathbb{E} \big[ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} \big] +\\ +& = \mathbb{E} \big[ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y} \big] +\\ +& = \mathbb{E} \big[ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \hat{\bbeta} \big] +\\ +& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \mathbb{E} ( \hat{\bbeta} ) +\\ +& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \bbeta. +\end{align*} +Clearly, $\mathbb{E} \big[ \hat{\bbeta}(\lambda) \big] \not= \bbeta$ for any $\lambda > 0$. Hence, the ridge estimator is biased. + +From the expression above it is clear that the expectation of the ridge estimator vanishes as $\lambda$ tends to infinity: +\begin{align*} +\lim_{\lambda \rightarrow \infty} \mathbb{E} \big[ \hat{\bbeta}(\lambda) \big] & = \lim_{\lambda \rightarrow \infty} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \bbeta \, \, \, = \, \, \, \mathbf{0}_{p}. +\end{align*} +Hence, all regression coefficients are shrunken towards zero as the penalty parameter increases. This also holds for $\mathbf{X}$ with $p > n$. Furthermore, this behaviour is not strictly monotone in $\lambda$: $\lambda_{a} > \lambda_b$ does not necessarily imply $|\hat{\beta}_j (\lambda_a) | < |\hat{\beta}_j (\lambda_b) |$. Upon close inspection this can be witnessed from the ridge solution path of $\beta_3$ in Figure ref{fig.ridgeSolPathPlusVar}. + + +\begin{example} *Orthonormal design matrix* label{example.orthoronormalDesign} +\\ +Consider an orthonormal design matrix $\mathbf{X}$, i.e.: +\begin{align*} +\mathbf{X}^{\top} \mathbf{X} & = \mathbf{I}_{pp} \, \, \, = \, \, \, (\mathbf{X}^{\top} \mathbf{X})^{-1}. +\end{align*} +An example of an orthonormal design matrix would be: +\begin{align*} +\mathbf{X} & = \frac{1}{2} \left( +\begin{array}{rr} +-1 & -1 +\\ +-1 & 1 +\\ +1 & -1 +\\ +1 & 1 +\end{array} \right). +\end{align*} +This design matrix is orthonormal as $\mathbf{X}^{\top} \mathbf{X} = \mathbf{I}_{22}$, which is easily verified: +\begin{align*} +\mathbf{X}^{\top} \mathbf{X} & = \frac{1}{4} +\left( +\begin{array}{rrrr} +-1 & -1 & 1 & 1 +\\ +-1 & 1 & -1 & 1 +\end{array} \right) +\left( +\begin{array}{rr} +-1 & -1 +\\ +-1 & 1 +\\ +1 & -1 +\\ +1 & 1 +\end{array} \right) \, \, \, = \, \, \, +\frac{1}{4} +\left( +\begin{array}{rr} +4 & 0 +\\ +0 & 4 +\end{array} \right) \, \, \, = \, \, \, \mathbf{I}_{22}. +\end{align*} +In case of an orthonormal design matrix the relation between the OLS and ridge estimator is: +\begin{align*} +\hat{\bbeta}(\lambda) & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\, \, \, = \, \, \, (\mathbf{I}_{pp} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = (1 + \lambda)^{-1} \mathbf{I}_{pp} \mathbf{X}^{\top} \mathbf{Y} +\qquad \, \, = \, \, \, (1 + \lambda)^{-1} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = (1 + \lambda)^{-1} \hat{\bbeta}. +\end{align*} +Hence, the ridge estimator scales the OLS estimator by a factor. When taking the expectation on both sides, it is evident that the ridge estimator converges to zero as $\lambda \rightarrow \infty$. +\end{example} + + + +===== Variance ===== + +As for the ML estimate of the regression parameter $\bbeta$ of model (ref{form.linRegressionModelinMatrix}), we derive the second moment of the ridge estimator. Hereto define: +\begin{align*} +\mathbf{W}_{\lambda} & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{X}. +\end{align*} +Using $\mathbf{W}_{\lambda}$ the ridge estimator $\hat{\bbeta}(\lambda)$ can be expressed as $\mathbf{W}_{\lambda} \hat{\bbeta}$ for: +\begin{align*} +\mathbf{W}_{\lambda} \hat{\bbeta} & = \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = \{ (\mathbf{X}^{\top} \mathbf{X})^{-1} [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ] \}^{-1} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = \hat{\bbeta}(\lambda). +\end{align*} +The linear operator $\mathbf{W}_{\lambda}$ thus transforms the ML estimator of the regression parameter into the ridge estimator. + +It is now easily seen that: +\begin{align*} +\mbox{Var}[ \hat{\bbeta}(\lambda) ] & = \mbox{Var}[ \mathbf{W}_{\lambda} \hat{\bbeta} ] \qquad \qquad \, \, \, \, \, \, = \, \, \, \mathbf{W}_{\lambda} \mbox{Var}[\hat{\bbeta} ] \mathbf{W}_{\lambda}^{\top} +\\ +& = \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} \, \, \, = \, \, \, \sigma^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{X} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}\}^{\top}, +\end{align*} +in which we have used $\mbox{Var}(\mathbf{A} \mathbf{Y}) = \mathbf{A} \mbox{Var}( \mathbf{Y}) \mathbf{A}^{\top}$ for a non-random matrix $\mathbf{A}$, the fact that $\mathbf{W}_{\lambda}$ is non-random, and $ \mbox{Var}[\hat{\bbeta} ] = \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1}$. + + +Like the expectation the variance of the ridge estimator vanishes as $\lambda$ tends to infinity: +\begin{align*} +\lim_{\lambda \rightarrow \infty} \mbox{Var} \big[ \hat{\bbeta}(\lambda) \big] & = \lim_{\lambda \rightarrow \infty} \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} \, \, \, = \, \, \, \mathbf{0}_{pp}. +\end{align*} +Hence, the variance of the ridge regression coefficient estimates decreases towards zero as the penalty parameter becomes large. This is illustrated in the right panel of Figure ref{fig.ridgeSolPathPlusVar} for the data of Example ref{example.supercollinearity}. + + +With an explicit expression of the variance of the ridge estimator at hand, we can compare it to that of the OLS estimator: +\begin{align*} +\mbox{Var}[ \hat{\bbeta} ] - \mbox{Var}[ \hat{\bbeta}(\lambda) ] & = \sigma^2 [(\mathbf{X}^{\top} \mathbf{X})^{-1} - \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} ] +\\ +& = \sigma^2 \mathbf{W}_{\lambda} \{ [\mathbf{I} + \lambda (\mathbf{X}^{\top} \mathbf{X})^{-1} ] (\mathbf{X}^{\top} \mathbf{X})^{-1} [\mathbf{I} + \lambda (\mathbf{X}^{\top} \mathbf{X})^{-1} ]^{\top} - (\mathbf{X}^{\top} \mathbf{X})^{-1} \} \mathbf{W}_{\lambda}^{\top} +\\ +& = \sigma^2 \mathbf{W}_{\lambda} [ 2 \, \lambda \, (\mathbf{X}^{\top} \mathbf{X})^{-2} + \lambda^2 (\mathbf{X}^{\top} \mathbf{X})^{-3} ] \mathbf{W}_{\lambda}^{\top} +\\ +& = \sigma^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} [ 2 \, \lambda \, \mathbf{I}_{pp} + \lambda^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} ] \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}\}^{\top}. +\end{align*} +The difference is non-negative definite as each component in the matrix product is non-negative definite. Hence, the variance of the ML estimator exceeds (in the positive definite ordering) that of the ridge estimator: + +!bt + +!bt +\begin{align} label{form.VarInequalityMLandRidge} +\mbox{Var}[ \hat{\bbeta} ] & \succeq & \mbox{Var}[ \hat{\bbeta}(\lambda) ], +\end{align} +!et +!et +with the inequality being strict if $\lambda > 0$. In other words, the variance of the ML estimator is larger than that of the ridge estimator (in the sense that their difference is non-negative definite). The variance inequality (ref{form.VarInequalityMLandRidge}) can be interpreted in terms of the stochastic behaviour of the estimator. This is illustrated by the next example. + +# original latex figure with scale=0.45, angle=0 + +FIGURE: [varMLellipses.eps, width=400 frac=1.0] Level sets of the distribution of the ML (left panel) and ridge (right panel) regression estimators.} label{fig.varOLSandRidge +# \afterpage{} + + +\begin{example} *Variance comparison* +\\ +Consider the design matrix: +\begin{align*} +\mathbf{X} & = \left( +\begin{array}{rr} +-1 & 2 +\\ +0 & 1 +\\ +2 & -1 +\\ +1 & 0 +\end{array} \right). +\end{align*} +The variances of the ML and ridge (with $\lambda=1$) estimates of the regression coefficients then are: +\begin{align*} +\mbox{Var}(\hat{\bbeta}) & = \sigma^2 \left( +\begin{array}{rr} +0.3 & 0.2 +\\ +0.2 & 0.3 +\end{array} \right) +\qquad \mbox{and} \qquad +\mbox{Var}[\hat{\bbeta}(\lambda)] \, \, \, = \, \, \, \sigma^2 \left( +\begin{array}{rr} +0.1524 & 0.0698 +\\ +0.0698 & 0.1524 +\end{array} \right). +\end{align*} +These variances can be used to construct levels sets of the distribution of the estimates. The level sets that contain 50\%, 75\% and 95\% of the distribution of the ML and ridge estimates are plotted in Figure ref{fig.varOLSandRidge}. In line with inequality (ref{form.VarInequalityMLandRidge}) the level sets of the ridge estimate are smaller than that of the ML estimate: it thus varies less. +\end{example} + + + + +\begin{contexample}_ref{example.orthoronormalDesign_} *Orthonormal design matrix (continued)* +\\ +Assume the design matrix $\mathbf{X}$ is orthonormal. Then, $\mbox{Var}[ \hat{\bbeta} ] = \sigma^2 \mathbf{I}_{pp}$ and +\begin{align*} +\mbox{Var}[ \hat{\bbeta}(\lambda) ] & = \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} +\, \, \, = \, \, \, \sigma^2 [\mathbf{I}_{pp} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{I}_{pp} \{ [\mathbf{I}_{pp} + \lambda \mathbf{I}_{pp} ]^{-1} \}^{\top} +\, \, \, = \, \, \, \sigma^2 (1 + \lambda )^{-2} \mathbf{I}_{pp} . +\end{align*} +As the penalty parameter $\lambda$ is non-negative the former exceeds the latter. In particular, this expression vanishes as $\lambda \rightarrow \infty$. +\end{contexample} + +# #if FORMAT in ("latex", "pdflatex") +\noindent +# #endif +The full distribution of the ridge regression estimator is now known. The estimator, $\hat{\bbeta}(\lambda) = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}$ is a linear estimator, linear in $\mathbf{Y}$. As $\mathbf{Y}$ is normally distributed, so is $\hat{\bbeta}(\lambda)$. Moreover, the normal distribution is fully characterized by its first two moments, which are available. Hence: +\begin{align*} +\hat{\bbeta}(\lambda) & \sim & \mathcal{N} \big( (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{X} \, \bbeta, \sigma^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{X} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}\}^{\top} \big). +\end{align*} +Given $\lambda$ and $\bbeta$, the random behavior of the estimator is thus known. + + + +===== Mean squared error} label{sect:ridgeMSE ===== +Previously, we motivated the ridge estimator as an ad hoc solution to collinearity. An alternative motivation comes from studying the Mean Squared Error (MSE) of the ridge regression estimator: for a suitable choice of $\lambda$ the ridge regression estimator may outperform the ML regression estimator in terms of the MSE. Before we prove this, we first derive the MSE of the ridge estimator and quote some auxiliary results. + +Recall that (in general) for any estimator of a parameter $\theta$: +\begin{align*} +\mbox{MSE}( \hat{\theta} ) & = \mathbb{E} [ ( \hat{\theta} - \theta)^2 ] +\, \, \, = \, \, \, \mbox{Var}( \hat{ \theta} ) + [\mbox{Bias} ( \hat{\theta} )]^2. +\end{align*} +Hence, the MSE is a measure of the quality of the estimator. + +The MSE of the ridge estimator is: + +!bt + +!bt +\begin{align} +\mbox{MSE}[\hat{\bbeta}(\lambda)] & = \mathbb{E} [ (\mathbf{W}_{\lambda} \, \hat{\bbeta} - \bbeta)^{\top} \, (\mathbf{W}_{\lambda} \, \hat{\bbeta} - \bbeta) ] \nonumber +\\ +& = \mathbb{E} ( \hat{\bbeta}^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \hat{\bbeta} ) - \mathbb{E} ( \bbeta^{\top} \, \mathbf{W}_{\lambda} \, \hat{\bbeta}) - \mathbb{E} ( \hat{\bbeta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \bbeta) + \mathbb{E} ( \bbeta^{\top} \bbeta) \nonumber +\\ +& = \mathbb{E} ( \hat{\bbeta}^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \hat{\bbeta} ) - \mathbb{E} ( \bbeta^{\top} \, \mathbf{W}_{\lambda}^{\top} \mathbf{W}_{\lambda} \, \hat{\bbeta}) - \mathbb{E} ( \hat{\bbeta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \bbeta) + \mathbb{E} ( \bbeta^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \bbeta ) \nonumber +\\ +& & - \mathbb{E} ( \bbeta^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \bbeta ) + \mathbb{E} ( \bbeta^{\top} \, \mathbf{W}_{\lambda}^{\top} \mathbf{W}_{\lambda} \, \hat{\bbeta}) + \mathbb{E} ( \hat{\bbeta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \bbeta) \nonumber +\\ +& & - \mathbb{E} ( \bbeta^{\top} \, \mathbf{W}_{\lambda} \, \hat{\bbeta}) - \mathbb{E} ( \hat{\bbeta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \bbeta) + \mathbb{E} ( \bbeta^{\top} \bbeta) \nonumber +\\ +& = \mathbb{E} [ ( \hat{\bbeta} - \bbeta )^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \, (\hat{\bbeta} - \bbeta) ] \nonumber +\\ +& & - \bbeta^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \bbeta + \bbeta^{\top} \, \mathbf{W}_{\lambda}^{\top} \mathbf{W}_{\lambda} \, \bbeta + \bbeta^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \bbeta \nonumber +\\ +& & - \bbeta^{\top} \, \mathbf{W}_{\lambda} \, \bbeta - \bbeta^{\top} \mathbf{W}_{\lambda}^{\top} \, \bbeta + \bbeta^{\top} \bbeta \nonumber +\\ +& = \mathbb{E} \big\{ ( \hat{\bbeta} - \bbeta )^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \, (\hat{\bbeta} - \bbeta) \big\} + \bbeta^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \, \bbeta \nonumber +\\ +& = \sigma^2 \, \mbox{tr}\big\{ \mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{W}_{\lambda}^{\top} \big\} + \bbeta^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \, \bbeta. label{form.ridgeMSE} +\end{align} +!et +!et +In the last step we have used $\hat{\bbeta} \sim \mathcal{N}( \bbeta, \sigma^2 \, [\mathbf{X}^{\top} \mathbf{X}]^{-1} )$ and the expectation of the quadratic form of a multivariate random variable $\vvarepsilon \sim \mathcal{N}(\mmu_{\varepsilon}, \SSigma_{\varepsilon})$ for some nonrandom symmetric positive definite matrix $\LLambda$ is (cf. \citealt{Math1992}): +\begin{align*} +\mathbb{E} ( \vvarepsilon^{\top} \, \LLambda \, \vvarepsilon) & = \mbox{tr} ( \LLambda \, \SSigma_{\varepsilon}) + \mmu_{\varepsilon}^{\top} \, \LLambda \, \mmu_{\varepsilon}, +\end{align*} +of course replacing $\vvarepsilon$ by $\hat{\bbeta}$ in this expectation. The first summand in the final derived expression for $\mbox{MSE}[\hat{\bbeta}(\lambda)]$ is the sum of the variances of the ridge estimator, while the second summand can be thought of the ``squared bias'' of the ridge estimator. In particular, $\lim_{\lambda \rightarrow \infty} \mbox{MSE}[\hat{\bbeta}(\lambda)] = \bbeta^{\top} \bbeta$, which is the squared biased for an estimator that equals zero (as does the ridge estimator in the limit). + + + +\begin{example} *Orthonormal design matrix* +\\ +Assume the design matrix $\mathbf{X}$ is orthonormal. Then, $\mbox{MSE}[ \hat{\bbeta} ] = p \, \sigma^2$ and +\begin{align*} +\mbox{MSE}[ \hat{\bbeta}(\lambda) ] & = \frac{p \, \sigma^2}{ (1+ \lambda)^{2}} + \frac{\lambda^2}{ (1+ \lambda)^{2}} \bbeta^{\top} \bbeta. +\end{align*} +The latter achieves its minimum at: $\lambda = p \sigma^2 / \bbeta^{\top} \bbeta$. +\end{example} + + + +The following theorem and proposition are required for the proof of the main result. + +\begin{theorem} *(Theorem 1 of \citealp{Theo1974*}) label{theo.Theobald1} +\\ +Let $\hat{\ttheta}_1$ and $\hat{\ttheta}_2$ be (different) estimators of $\ttheta$ with second order moments: +\begin{align*} +\mathbf{M}_k & = \mathbb{E} [ (\hat{\ttheta}_k - \ttheta) (\hat{\ttheta}_k - \ttheta)^{\top} ] \qquad \mbox{for } k=1,2, +\end{align*} +and +\begin{align*} +\mbox{MSE}(\hat{\ttheta}_k) & = \mathbb{E} [ (\hat{\ttheta}_k - \ttheta)^{\top} \mathbf{A} (\hat{\ttheta}_k - \ttheta) ] \qquad \mbox{for } k=1,2, +\end{align*} +where $\mathbf{A} \succeq 0$. Then, $\mathbf{M}_1 - \mathbf{M}_2 \succeq 0$ if and only if $\mbox{MSE}(\hat{\ttheta}_1) - \mbox{MSE}(\hat{\ttheta}_2) \geq 0$ for all $\mathbf{A} \succeq 0$. +\end{theorem} + + +\begin{proposition} *(\citealp{Fare1976*}) label{prop.Farebrother} +\\ +Let $\mathbf{A}$ be a $(p \times p)$-dimensional, positive definite matrix, $\mathbf{b}$ be a nonzero $p$ dimensional vector, and $c \in \mathbb{R}_+$. Then, $c \mathbf{A} - \mathbf{b} \mathbf{b}^{\top} \succ 0$ if and only if $\mathbf{b}^{\top} \mathbf{A}^{-1} \mathbf{b} > c$. +\end{proposition} + +We are now ready to proof the main result, formalized as Theorem ref{theo.Theobald2}, that for some $\lambda$ the ridge regression estimator yields a lower MSE than the ML regression estimator. + +\begin{theorem} *(Theorem 2 of \citealp{Theo1974*}) label{theo.Theobald2} +\\ +There exists $\lambda > 0$ such that $\mbox{MSE}[\hat{\bbeta}(\lambda)] < \mbox{MSE}[\hat{\bbeta}(0)] = \mbox{MSE}[\hat{\bbeta}]$. +\end{theorem} + +\begin{proof} +The second order moment matrix of the ridge estimator is: +\begin{align*} +\mathbf{M} (\lambda) & := & \mathbb{E} [ (\hat{\bbeta}(\lambda) - \bbeta) (\hat{\bbeta} (\lambda) - \bbeta)^{\top} ] +\\ +& = \mathbb{E} \{ \hat{\bbeta}(\lambda) [\hat{\bbeta}(\lambda)]^{\top} \} - \mathbb{E} [ \hat{\bbeta}(\lambda) ] \{ \mathbb{E} [ \hat{\bbeta}(\lambda) ] \}^{\top} + \mathbb{E} [\hat{\bbeta} (\lambda) - \bbeta)] \{ \mathbb{E} [\hat{\bbeta} (\lambda) - \bbeta)] \}^{\top} +\\ +& = \mbox{Var}[ \hat{\bbeta}(\lambda) ] + \mathbb{E} [\hat{\bbeta} (\lambda) - \bbeta)] \{ \mathbb{E} [\hat{\bbeta} (\lambda) - \bbeta)] \}^{\top}. +\end{align*} +Then: +\begin{align*} +\mathbf{M} ( 0 ) - \mathbf{M}(\lambda) & = \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} - \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} ] +\\ +& & - (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \bbeta \bbeta^{\top} (\mathbf{W}_{\lambda} -\mathbf{I}_{pp})^{\top} +\\ +& = \sigma^2 \mathbf{W}_{\lambda} [ 2 \, \lambda \, (\mathbf{X}^{\top} \mathbf{X})^{-2} + \lambda^2 (\mathbf{X}^{\top} \mathbf{X})^{-3} ] \mathbf{W}_{\lambda}^{\top} +\\ +& & - \lambda^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \bbeta \bbeta^{\top} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top} +\\ +& = \sigma^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} [ 2 \, \lambda \, \mathbf{I}_{pp} + \lambda^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} ] \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top} +\\ +& & - \lambda^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \bbeta \bbeta^{\top} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top} +\\ +& = \lambda [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} [ 2 \, \sigma^2 \, \mathbf{I}_{pp} + \lambda \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} - \lambda \bbeta \bbeta^{\top} ] \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top}. +\end{align*} +This is positive definite if and only if $ 2 \, \sigma^2 \, \mathbf{I}_{pp} + \lambda \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} - \lambda \bbeta \bbeta^{\top} \succ 0$. Hereto it suffices to show that $2 \, \sigma^2 \, \mathbf{I}_{pp} - \lambda \bbeta \bbeta^{\top} \succ 0$. By Proposition ref{prop.Farebrother} this holds for $\lambda$ such that $2 \sigma^2 (\bbeta^{\top} \bbeta)^{-1} > \lambda$. For these $\lambda$, we thus have $\mathbf{M} ( 0 ) - \mathbf{M}(\lambda)$. Application of Theorem ref{theo.Theobald1} now concludes the proof. +\end{proof} +This result of cite{Theo1974} is generalized by cite{Fare1976} to the class of design matrices $\mathbf{X}$ with $\mbox{rank}(\mathbf{X}) < p$. +\\ +\\ +Theorem ref{theo.Theobald2} can be used to illustrate that the ridge regression estimator strikes a balance between the bias and variance. This is illustrated in the left panel of Figure ref{fig.MSEridge}. For small $\lambda$, the variance of the ridge estimator dominates the MSE. This may be understood when realizing that in this domain of $\lambda$ the ridge estimator is close to the unbiased ML regression estimator. For large $\lambda$, the variance vanishes and the bias dominates the MSE. For small enough values of $\lambda$, the decrease in variance of the ridge regression estimator exceeds the increase in its bias. As the MSE is the sum of these two, the MSE first decreases as $\lambda$ moves away from zero. In particular, as $\lambda = 0$ corresponds to the ML regression estimator, the ridge regression estimator yields a lower MSE for these values of $\lambda$. In the right panel of Figure ref{fig.MSEridge} $\mbox{MSE}[ \hat{\bbeta}(\lambda)] < \mbox{MSE}[ \hat{\bbeta}(0)]$ for $\lambda < 7$ (roughly) and the ridge estimator outperforms the ML estimator. +# original latex figure with scale=0.45, angle=0 + +FIGURE: [MSE_ridge.eps, width=400 frac=1.0] Left panel: mean squared error, and its `bias' and `variance' parts, of the ridge regression estimator (for artificial data). Right panel: mean squared error of the ridge and ML estimator of the regression coefficient vector (for the same artificial data).} label{fig.MSEridge +# \afterpage{} +\\ +\\ +# #if FORMAT in ("latex", "pdflatex") +\noindent +# #endif +Besides another motivation behind the ridge regression estimator, the use of Theorem ref{theo.Theobald2} is limited. The optimal choice of $\lambda$ depends on the quantities $\bbeta$ and $\sigma^2$. These are unknown in practice. Then, the penalty parameter is chosen in a data-driven fashion by means of cross-validation (see Section ref{subsect.crossvalidation}). +\\ +\\ +\begin{remark} \mbox{ } +\\ +Theorem ref{theo.Theobald2} can also be used to conclude on the biasedness of the ridge regression estimator. The Gauss-Markov theorem \citep{Rao1973} states (under some assumptions) that the ML regression estimator is the best linear unbiased estimator (BLUE) with the smallest MSE. As the ridge regression estimator is a linear estimator and outperforms (in terms of MSE) this ML estimator, it must be biased (for it would otherwise refute the Gauss-Markov theorem). +\end{remark} + + + + +======= Constrained estimation} label{sect.constrainedEstimation ======= +The ad-hoc fix of cite{Hoer1970} to super-collinearity of the design matrix (and, consequently the singularity of the matrix $\mathbf{X}^{\top} \mathbf{X}$) has been motivated post-hoc. +The ridge estimator minimizes the *ridge loss function*, which is defined as: + +!bt + +!bt +\begin{align} +\mathcal{L}_{\mbox{{\footnotesize ridge}}}(\bbeta; \lambda) & = \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2 + \lambda \| \bbeta \|^2_2 +\, \, \, = \, \, \, \sum_{i=1}^n (Y_i - \mathbf{X}_{i\ast} \, \bbeta)^2 + \lambda \sum_{j=1}^p \beta_j^2. label{form.ridgeLossFunction} +\end{align} +!et +!et +This loss function is the traditional sum-of-squares augmented with a *penalty*. The particular form of the penalty, $\lambda \| \bbeta \|^2_2$ is referred to as the *ridge penalty* and $\lambda$ as the *penalty parameter*. For $\lambda=0$, minimization of the ridge loss function yields the ML estimator. For any $\lambda > 0$, the ridge penalty contributes to the loss function, affecting its minimum and its location. The minimum of the sum-of-squares is well-known. The minimum of the ridge penalty is attained at $\bbeta = \mathbf{0}_{p}$ whenever $\lambda > 0$. The $\bbeta$ that minimizes $\mathcal{L}_{\mbox{{\footnotesize ridge}}}(\bbeta; \lambda)$ then balances the sum-of-squares and the penalty. The effect of the penalty in this balancing act is to shrink the regression coefficients towards zero, its minimum. In particular, the larger $\lambda$, the larger the contribution of the penalty to the loss function, the stronger the tendency to shrink non-zero regression coefficients to zero (and decrease the contribution of the penalty to the loss function). This motivates the name `penalty' as non-zero elements of $\bbeta$ increase (or penalize) the loss function. + + +To verify that the ridge estimator indeed minimizes the ridge loss function, proceed as usual. Take the derivative with respect to $\bbeta$: +\begin{align*} +\frac{\partial}{\partial \bbeta} \mathcal{L}_{\mbox{{\footnotesize ridge}}}(\bbeta; \lambda) & = -2 \, \mathbf{X}^{\top} (\mathbf{Y} - \mathbf{X} \bbeta) + 2 \, \lambda \, \mathbf{I}_{pp} \, \bbeta \, \, \, = \, \, \, -2 \, \mathbf{X}^{\top} \mathbf{Y} + 2 \, ( \mathbf{X}^{\top} \mathbf{X} + \lambda \, \mathbf{I}_{pp}) \bbeta. +\end{align*} +Equate the derivative to zero and solve for $\bbeta$. This yields the ridge regression estimator. + +The ridge estimator is thus a stationary point of the ridge loss function. A stationary point corresponds to a minimum if the Hessian matrix with second order partial derivatives is positive definite. The Hessian of the ridge loss function is +\begin{align*} +\frac{\partial^2}{\partial \bbeta \, \partial \bbeta^{\top}} \mathcal{L}_{\mbox{{\footnotesize ridge}}}(\bbeta; \lambda) & = 2 \, ( \mathbf{X}^{\top} \mathbf{X} + \lambda \, \mathbf{I}_{pp}). +\end{align*} +This Hessian is the sum of the semi-positive definite matrix $\mathbf{X}^{\top} \mathbf{X}$ and the positive definite matrix $\lambda \, \mathbf{I}_{pp}$. Lemma 14.2.4 of cite{Harv2008} then states that the sum of these matrices is itself a positive definite matrix. Hence, the Hessian is positive definite and the ridge loss function has a stationary point at the ridge estimator, which is a minimum. + +The ridge regression estimator minimizes the ridge loss function. It rests to verify that it is a global minimum. To this end we introduce the concept of a convex function. As a prerequisite, a set $\mathcal{S} \subset \mathbb{R}^p$ is called *convex* if for all $\bbeta_1, \bbeta_2 \in \mathcal{S}$ their weighted average $\bbeta_{\theta} = (1 - \theta) \bbeta_1 + \theta \bbeta_2$ for all $\theta \in [0, 1]$ is itself an element of $\mathcal{S}$, thus $\bbeta_{\theta} \in \mathcal{S}$. If for all $\theta \in (0, 1)$, the weighted average $\bbeta_{\theta}$ is inside $\mathcal{S}$ and not on its boundary, the set is called *strict convex*. Examples of (strict) convex and nonconvex sets are depicted in Figure ref{fig.ridgeAsConstrainedEst}. A function $f(\cdot)$ is *(strict) convex* if the set $\{ y \, : \, y \geq f(\bbeta) \mbox{ for all } \bbeta \in \mathcal{S} \mbox{ for any convex } \mathcal{S} \}$, called the epigraph of $f(\cdot)$, is (strict) convex. Examples of (strict) convex and nonconvex functions are depicted in Figure ref{fig.ridgeAsConstrainedEst}. The ridge loss function is the sum of two parabola's: one at least convex and the other a strict convex function in $\bbeta$. The sum of convex and strict convex function is itself strict convex (confer Lemma 9.4.2 of \citealt{Flet2008}). The ridge loss function is thus strict convex. Theorem 9.4.1 of \citealt{Flet2008} then warrants, by the strict convexity of the ridge loss function, that the ridge estimator is a global minimum. +\\ +\\ +From the ridge loss function the limiting behavior of the variance of the ridge regression estimator can be understood. The ridge penalty with its minimum $\bbeta = \mathbf{0}_{p}$ does not involve data and, consequently, the variance of its minimum equals zero. With the ridge regression being a compromise between the ML estimator and the minimum of the penalty, so is its variance a compromise of their variances. As $\lambda$ tends to infinity, the ridge estimator and its variance converge to the minimum and the variance of the minimum, respectively. Hence, in the limit (large $\lambda$) the variance of the ridge regression estimator vanishes. Understandably, as the penalty now fully dominates the loss function and, consequently, it does no longer involve data (i.e. randomness). +# original latex figure with scale=0.38, angle=0 + +FIGURE: [convexSets.eps, width=400 frac=1.0] Top panels show examples of convex (left) and nonconvex (right) sets. Middle panels show examples of convex (left) and nonconvex (right) functions. The left bottom panel illustrates the ridge estimation as a constrained estimation problem. The ellipses represent the contours of the ML loss function, with the blue dot at the center the ML estimate. The circle is the ridge parameter constraint. The red dot is the ridge estimate. It is at the intersection of the ridge constraint and the smallest contour with a non-empty intersection with the constraint. The right bottom panel shows the data corresponding to Example ref{exam.overfitting}. The grey line represents the `true' relationship, while the black line the fitted one. } label{fig.ridgeAsConstrainedEst +\afterpage{} +\\ +\\ +Above it has been shown that the ridge estimator can be defined as: + +!bt + +!bt +\begin{align} label{form.ridgeEstViaPenEst} +\hat{\bbeta}(\lambda) & = \arg \min_{\bbeta} \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2 + \lambda \| \bbeta \|^2_2. +\end{align} +!et +!et +This minimization problem can be reformulated into the following constrained optimization problem (illustrated in Figure ref{fig.ridgeAsConstrainedEst}): + +!bt + +!bt +\begin{align} label{form.constrEstProblemRidge} +\hat{\bbeta}(\lambda) & = \arg \min_{\| \bbeta \|_2^2 \leq c} \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2, +\end{align} +!et +!et +for some suitable $c > 0$. The constrained optimization problem (ref{form.constrEstProblemRidge}) can be solved by means of the Karush-Kuhn-Tucker (KKT) multiplier method, which minimizes a function subject to inequality constraints. The KKT multiplier method states that, under some regularity conditions (all met here), there exists a constant $\nu \geq 0$, called the *multiplier*, such that the solution $\hat{\bbeta}(\nu)$ of the constrained minimization problem (ref{form.constrEstProblemRidge}) satisfies the so-called KKT conditions. The first KKT condition (referred to as the stationarity condition) demands that the gradient (with respect to $\bbeta$) of the Lagrangian associated with the minimization problem equals zero at the solution $\hat{\bbeta}(\nu)$. The Lagrangian for problem (ref{form.constrEstProblemRidge}) is: +\begin{align*} +\| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2 + \nu ( \| \bbeta \|^2_2 - c). +\end{align*} +The second KKT condition (the complementarity condition) requires that $\nu (\| \hat{\bbeta}(\nu) \|_2^2 - c) = 0$. If $\nu = \lambda$ and $c = \| \hat{\bbeta}(\lambda) \|_2^2$, the ridge estimator $\bbeta (\lambda)$ satisfies both KKT conditions. Hence, both problems have the same solution when $c = \| \hat{\bbeta}(\lambda) \|_2^2$. +\\ +\\ +The relevance of viewing the ridge regression estimator as the solution to a constrained estimation problem becomes obvious when considering a typical threat to high-dimensional data analysis: overfitting. *Overfitting* refers to the phenomenon of modelling the noise rather than the signal. In case the true model is parsimonious (few covariates driving the response) and data on many covariates are available, it is likely that a linear combination of all covariates yields a higher likelihood than a combination of the few that are actually related to the response. As only the few covariates related to the response contain the signal, the model involving all covariates then cannot but explain more than the signal alone: it also models the error. Hence, it overfits the data. In high-dimensional settings overfitting is a real threat. The number of explanatory variables exceeds the number of observations. It is thus possible to form a linear combination of the covariates that perfectly explains the response, including the noise. + +Large estimates of regression coefficients are often an indication of overfitting. Augmentation of the estimation procedure with a constraint on the regression coefficients is a simple remedy to large parameter estimates. As a consequence it decreases the probability of overfitting. Overfitting is illustrated in the next example. + + +\begin{example} *(Overfitting)* label{exam.overfitting} +\\ +Consider an artificial data set comprising of ten observations on a response $Y_i$ and nine covariates $X_{i,j}$. All covariate data are sampled from the standard normal distribution: $X_{i,j} \sim \mathcal{N}(0, 1)$. The response is generated by $Y_i = X_{i,1} + \varepsilon_i$ with $\varepsilon_{i} \sim \mathcal{N}(0, 1/4)$. Hence, only the first covariate contributes to the response. + +The regression model $Y_i = \sum_{j=1}^9 X_{i,j} \beta_j+ \varepsilon_i$ is fitted to the artificial data using `R`. This yields the regression parameter estimates: +\begin{align*} +\hat{\bbeta}^{\top} & = (0.048, -2.386, -5.528, 6.243, -4.819, 0.760, -3.345, -4.748, 2.136). +\end{align*} +As $\bbeta^{\top} = (1, 0, \ldots, 0)$, many regression coefficient are clearly over-estimated. + +The fitted values $\widehat{Y}_i = \mathbf{X}_i \hat{\bbeta}$ are plotted against the values of the first covariates in the right bottom panel of Figure ref{fig.ridgeAsConstrainedEst}. As a reference the line $x=y$ is added, which represents the `true' model. The fitted model follows the `true' relationship. But it also captures the deviations from this line that represent the errors. +\end{example} + + + +======= Bayesian regression} label{sect:Bayes ======= +Ridge regression has a close connection to Bayesian linear regression. Bayesian linear regression assumes the parameters $\bbeta$ and $\sigma^2$ to be the random variables, while at the same time considering $\mathbf{X}$ and $\mathbf{Y}$ as fixed. Within the regression context, the conjugate priors of $\bbeta$ and $\sigma^2$ are: +\begin{align*} +\bbeta \, | \, \sigma^2 \sim \mathcal{N}(\mathbf{0}_p, \sigma^2 \lambda^{-1} \mathbf{I}_{pp}) \qquad \mbox{and} \qquad \sigma^2 \sim \mathcal{IG}(\alpha_0, \beta_0), +\end{align*} +where $\mathcal{IG}$ denotes the inverse Gamma distribution with shape parameter $\alpha_0$ and scale parameter $\beta_0$. The penalty parameter can be interpreted as the precision of the prior, determining how informative the prior should be. A smaller penalty (i.e. precision) corresponds to a wider prior, and a larger penalty to a more informative, concentrated prior (Figure ref{fig.ridgePriorOfBeta}). +# original latex figure with scale=0.45, angle=0 + +FIGURE: [ridgePriorOfBeta.eps, width=400 frac=1.0] Conjugate prior of the regression parameter $\bbeta$ for various choices of $\lambda$, the penalty parameters c.q. precision.} label{fig.ridgePriorOfBeta + +Under the assumption of the conjugate priors above, the joint posterior distribution of $\bbeta$ and $\sigma^2$ is then: +\begin{align*} +f_{\bbeta, \sigma^2} (\bbeta, \sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) & = f_Y (\mathbf{Y} \, | \, \mathbf{X}, \bbeta, \sigma^2) \, f_{\beta}(\bbeta | \sigma^2) \, f_{\sigma}(\sigma^2) +\\ +& \propto & \sigma^{-n} \exp \Big[ - \frac{1}{2\sigma^2} ( \mathbf{Y} - \mathbf{X} \bbeta)^{\top} ( \mathbf{Y} - \mathbf{X} \bbeta) \Big] +\\ +& & \times \, \, \sigma^{-p} \exp \Big[ - \frac{1}{2\sigma^2} \lambda \bbeta^{\top} \bbeta \Big] \, \times \, \, [\sigma^2]^{-\alpha_0-1} \exp \Big[ - \frac{\beta_0}{2\sigma^2} \Big]. +\end{align*} +As +\begin{align*} +& & \hspace{-1.5cm} ( \mathbf{Y} - \mathbf{X} \bbeta)^{\top} ( \mathbf{Y} - \mathbf{X} \bbeta) + \lambda \bbeta^{\top} \bbeta +\\ +& = \mathbf{Y}^{\top} \mathbf{Y} - +\bbeta^{\top} \mathbf{X}^{\top} \mathbf{Y} - \mathbf{Y}^{\top} \mathbf{X} \bbeta + \bbeta^{\top} \mathbf{X}^{\top} \mathbf{X} \bbeta + \lambda \bbeta^{\top} \bbeta +\\ +& = \mathbf{Y}^{\top} \mathbf{Y} - \bbeta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& & - \, \mathbf{Y}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \bbeta + \bbeta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \bbeta +\\ +& = \mathbf{Y}^{\top} \mathbf{Y} - \bbeta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) +\hat{\bbeta} (\lambda) +\\ +& & - \, [ \hat{\bbeta} (\lambda) ]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \bbeta + \bbeta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \bbeta +\\ +& = \mathbf{Y}^{\top} \mathbf{Y} - \mathbf{Y}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& & + \, \big[ \bbeta - \hat{\bbeta}(\lambda) \big]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \big[ \bbeta - \hat{\bbeta}(\lambda) \big], +\end{align*} +the posterior distribution can be rewritten to: +\begin{align*} +f_{\bbeta, \sigma^2} (\bbeta, \sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) +& \propto & g_{\bbeta} (\bbeta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) \, +g_{\sigma^2} (\sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) +\end{align*} +with +\begin{align*} +g_{\bbeta} (\bbeta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) +& \propto & \exp \Big\{ - \frac{1}{2\sigma^2} \big[ \bbeta - \hat{\bbeta}(\lambda) \big]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \big[ \bbeta - \hat{\bbeta}(\lambda) \big] \Big\}. +\end{align*} +Then, clearly the conditional posterior mean of $\bbeta$ is $\mathbb{E}(\bbeta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) = \hat{\bbeta}(\lambda)$. Hence, the ridge regression estimator can be viewed as the Bayesian posterior mean estimator of $\bbeta$ when imposing a Gaussian prior on the regression parameter. + +With little extra work we may also obtain the conditional posterior of $\sigma^2$ from the joint posterior distribution: +\begin{align*} +f_{\sigma^2} (\sigma^2 \, | \, \bbeta, \mathbf{Y}, \mathbf{X}) & \propto & (\sigma^2)^{-[(n+p)/2 + \alpha_0 + 1]} +\exp [ - \frac{1}{2\sigma^2} ( \| \mathbf{Y} - \mathbf{X} \bbeta \|_2^2 + +\lambda \| \bbeta \|_2^2 + \beta_0) ], +\end{align*} +in which one can recognize the shape of an inverse gamma distribution. +\\ +\\ +A Bayesian estimator of a parameter $\ttheta$ is the estimator that minimizes the Bayes risk over a prior distribution of the parameter $\ttheta$. The Bayes risk is defined as $\int_{\ttheta} \mathbb{E} [(\hat{\ttheta} - \ttheta)^{\top} (\hat{\ttheta} - \ttheta)] \pi_{\ttheta}(\ttheta; \aalpha) d\ttheta$, where $\pi_{\ttheta}(\ttheta; \aalpha)$ is the prior distribution of $\ttheta$ with hyperparameter $\aalpha$. It is thus a weighted average of the Mean Squared Error, with weights specified through the prior. The Bayes risk is minimized by the mean posterior $\mathbb{E}_{\ttheta}(\ttheta \, | \, \mbox{data})$ (cf., e.g., \citealp{Bijm2017}). The Bayesian estimator of $\ttheta$ thus yields the smallest possible expected MSE, under the assumption of the employed prior. + +The Bayes risk of the ridge estimator over the normal prior $\bbeta \sim \mathcal{N}(\mathbf{0}_p, \sigma^2 \lambda^{-1} \mathbf{I}_{pp})$ is: +\begin{align*} +\mathbb{E}_{\bbeta} \{\mbox{MSE}[\hat{\bbeta}(\lambda)] +\, | \, \sigma^2, \mathbf{Y}, \mathbf{X} \} & = \sigma^2 \, \mbox{tr}\big\{ \mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{W}_{\lambda}^{\top} \big\} + \mathbb{E}_{\bbeta} [ \bbeta^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \, \bbeta] +\\ +& = \sigma^2 \, \big\{ \mbox{tr} \big[ \mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{W}_{\lambda}^{\top} \big] + +\lambda^{-1} \mbox{tr} [(\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})] \big\} +\\ +& = \sigma^2 \sum_{j=1}^p (d_{jj}^2 + \lambda)^{-1}, +\end{align*} +in which we have used *i)* the previously derived explicit expression (ref{form.ridgeMSE}) of the ridge estimator's MSE, *ii)* the expectation of the quadratic form of a multivariate random variable \citep{Math1992}, *iii)* the singular value decomposition of $\mathbf{X}$ with singular values $d_{jj}$, and *iv)* the fact that the trace of a square matrix equals the sum of its eigenvalues. As the ridge estimator coincides with the posterior mean, this is the minimal achievable MSE under a zero-centered normal prior with an uncorrelated and equivariant covariance matrix. + +Above the Bayes risk of the ridge estimator factorizes with respect to $\sigma^2$ and $\lambda$. Hence, the larger the hyperparameter $\lambda$ the lower the Bayes risk of the ridge estimator. In particular, its Bayes risk converges to zero as $\lambda \rightarrow \infty$. This can be understood as follows. The limit corresponds to an infinite precision of the prior, thus reducing the variance contribution to the MSE. Moreover, as the ridge estimator shrinks towards zero and the prior distribution of $\bbeta$ has a zero mean, the bias too vanishes as $\lambda \rightarrow \infty$. + +The calculation of the Bayes risk above relates the Bayesian and frequentist statements on the MSE of the ridge estimator. For the latter revisit Theorem ref{theo.Theobald2} of Section ref{sect:ridgeMSE}, which states the existence of a $\lambda$ such that the resulting ridge estimator has a superior MSE over that of the ML estimator. This result made no assumption on (the distribution of) $\bbeta$. In fact, it can be viewed as a statement of the MSE conditional on $\bbeta$. The Bayesian result integrates out the uncertainty - specified by the prior - in $\bbeta$ from the (frequentist's) conditional MSE to arrive at the unconditional MSE. + + + +# The Bayesian result states that the ridge regression estimator minimizes the weighted MSE (over a normal prior on the parameter $\bbeta$). It thus integrates out the uncertainty in $\bbeta$ from the (frequentist's) conditional MSE to arrive at the unconditional MSE. + +======= Degrees of freedom ======= + +The degrees of freedom consumed by ridge regression is calculated. The degrees of freedom may be used in combination with an information criterion to decide on the value of the penalty parameter. Recall from ordinary regression that: +\begin{align*} +\widehat{\mathbf{Y}} & = \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} \, \, \, = \, \, \, \mathbf{H} \mathbf{Y}, +\end{align*} +where $\mathbf{H}$ is the hat matrix. The degrees of freedom used in the regression is then equal to $\mbox{tr}(\mathbf{H})$, the trace of $\mathbf{H}$. In particular, if $ \mathbf{X}$ is of full rank, i.e. $\mbox{rank}(\mathbf{X}) = p$, then $\mbox{tr}(\mathbf{H}) = p$. + +By analogy, the ridge-version of the hat matrix is: +\begin{align*} +\mathbf{H}(\lambda) & = \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top}. +\end{align*} +Continuing this analogy, the degrees of freedom of ridge regression is given by the trace of the ridge hat matrix $\mathbf{H}(\lambda)$: +\begin{align*} +\mbox{tr}[ \mathbf{H}(\lambda)] & = \mbox{tr}[ \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} ] \, \, \, = \, \, \, \sum_{j=1}^p \frac{d_{jj}^2}{d_{jj}^2 + \lambda}. +\end{align*} +The degrees of freedom consumed by ridge regression is monotone decreasing in $\lambda$. In particular: +\begin{align*} +\lim_{\lambda \rightarrow \infty} \mbox{tr}[ \mathbf{H}(\lambda)] & = 0. +\end{align*} +That is, in the limit no information from $\mathbf{X}$ is used. Indeed, $\bbeta$ is forced to equal $\mathbf{0}_{p}$ which is not derived from data. + + + +======= Efficient calculation ======= + +In the high-dimensional setting the number of covariates $p$ is large compared to the number of samples $n$. In a microarray experiment $p = 40000$ and $n= 100$ is not uncommon. To perform ridge regression in this context, the following expression needs to be evaluated numerically: +\begin{align*} +(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}. +\end{align*} +For $p=40000$ this requires the inversion of a $40000 \times 40000$ dimensional matrix. This is not feasible on most desktop computers. However, there is a workaround. + +Revisit the singular value decomposition of $\mathbf{X} = \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top}$ and write $\mathbf{R}_x = \mathbf{U}_x \mathbf{D}_x$. As both $\mathbf{U}_x$ and $\mathbf{D}_x$ are $(n \times n)$-dimensional matrices, so is $\mathbf{R}_x$. Consequently, $\mathbf{X}$ is now decomposed as $\mathbf{X} = \mathbf{R}_x \mathbf{V}_x^{\top}$. The ridge estimator can be rewritten in terms of $\mathbf{R}_x$ and $\mathbf{V}_x$: +\begin{align*} +\hat{\bbeta}(\lambda) & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = (\mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{R}_x \mathbf{V}_x^{\top} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{Y} +\\ +& = (\mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{R}_x \mathbf{V}_x^{\top} + \lambda \mathbf{V}_x \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{Y} +\\ +& = \mathbf{V}_x (\mathbf{R}_x^{\top} \mathbf{R}_x + \lambda \mathbf{I}_{nn})^{-1} \mathbf{V}_x^{\top} \mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{Y} +\\ +& = \mathbf{V}_x (\mathbf{R}_x^{\top} \mathbf{R}_x + \lambda \mathbf{I}_{nn})^{-1} \mathbf{R}_x^{\top} \mathbf{Y}. +\end{align*} +Hence, the reformulated ridge estimator involves the inversion of an $(n \times n)$-dimensional matrix. With $n= 100$ this is feasible on most standard computers. + +cite{Hast2004} point out that the number of computation operations reduces from $\mathcal{O}(p^3)$ to $\mathcal{O}(p n^2)$. In addition, they point out that this computational short-cut can be used in combination with other loss functions, for instance that of standard generalized linear models. +\\ +\\ +Avoidance of the inversion of the $(p \times p)$-dimensional matrix may be achieved in an other way. Hereto one needs the Woodbury identity. Let $\mathbf{A}$, $\mathbf{U}$ and $\mathbf{V}$ be $(p \times p)$-, $(p \times n)$- and $(n \times p)$-dimensional matrices, respectively. +The (simplified form of the) Woodbury identity then is: +\begin{align*} +(\mathbf{A} + \mathbf{U} \mathbf{V})^{-1} & = \mathbf{A}^{-1} - \mathbf{A}^{-1} \mathbf{U} (\mathbf{I}_{nn} + \mathbf{V} \mathbf{A}^{-1} \mathbf{U})^{-1} \mathbf{V} \mathbf{A}^{-1}. +\end{align*} +Application of the Woodbury identity to the matrix inverse in the ridge estimator of the regression parameter gives: +\begin{align*} +(\lambda \mathbf{I}_{pp} + \mathbf{X}^{\top} \mathbf{X})^{-1} & = \lambda^{-1} \mathbf{I}_{pp} - \lambda^{-2} \mathbf{X}^{\top} (\mathbf{I}_{nn} + \lambda^{-1} \mathbf{X} \mathbf{X}^{\top})^{-1} \mathbf{X}. +\end{align*} +This gives: +\begin{align*} +(\lambda \mathbf{I}_{pp} + \mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} & = \lambda^{-1} \mathbf{X}^{\top} \mathbf{Y} - \lambda^{-2} \mathbf{X}^{\top} (\mathbf{I}_{nn} + \lambda^{-1} \mathbf{X} \mathbf{X}^{\top})^{-1} \mathbf{X} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = \lambda^{-1} \mathbf{X}^{\top} \left[ \mathbf{Y} - \lambda^{-1} \mathbf{X}^{\top} (\mathbf{I}_{nn} + \lambda^{-1} \mathbf{X} \mathbf{X}^{\top})^{-1} \mathbf{X} \mathbf{Y} \right]. +\end{align*} +The inversion of the $(p \times p)$-dimensional matrix $\lambda \mathbf{I}_{pp} + \mathbf{X}^{\top} \mathbf{X}$ is thus replaced by that of the $(n \times n)$-dimensional matrix $\mathbf{I}_{nn} + \lambda^{-1} \mathbf{X} \mathbf{X}^{\top}$. In addition, this expression of the ridge regression estimator avoids the singular value decomposition of $\mathbf{X}$, which may in some cases introduce additional numerical errors (e.g. at the level of machine precision). + + + +======= Choice of the penalty parameter ======= + +Throughout the introduction of ridge regression and the subsequent discussion of its properties the penalty parameter is considered known or `given'. In practice, it is unknown and the user needs to make an informed decision on its value. Several strategies to facilitate such a decision are presented. + +===== Information criterion ===== + +A popular strategy is to choose a penalty parameter that yields a good but parsimonious model. Information criteria measure the balance between model fit and model complexity. Here we present the Aikaike's information criterion (AIC), but many other criteria have been presented in the literature (e.g. \citealp{Akai1974}, \citealp{Schw1978}). The AIC measures model fit by the log-likelihood and model complexity is measured by the number of parameters used by the model. The number of model parameters in regular regression simply corresponds to the number of covariates in the model. Or, by the degrees of freedom consumed by the model, which is equivalent to the trace of the hat matrix. For ridge regression it thus seems natural to define model complexity +analogously by the trace of the ridge hat matrix. This yields the AIC for the linear regression model with ridge estimates: +\begin{align*} +\mbox{AIC}(\lambda) & = 2 \, p - 2 \log(\hat{L}) +\\ +& = 2 \, \mbox{tr} [\mathbf{H}(\lambda)] - 2 \log\{L[\hat{\bbeta}(\lambda), \hat{\sigma}^2(\lambda)]\} +\\ +& = 2 \, \sum_{j=1}^p \frac{d_{jj}^2}{d_{jj}^2 + \lambda} ++ 2 n \, \log[\sqrt{2 \, \pi} \, \hat{\sigma}(\lambda)] + \frac{1}{\hat{\sigma}^2(\lambda)} \sum_{i=1}^n [y_i - \mathbf{X}_{i, \ast} \, \hat{\bbeta}(\lambda)]^2. +\end{align*} +The value of $\lambda$ which minimizes $\mbox{AIC}(\lambda)$ corresponds to the `optimal' balance of model complexity and overfitting. + +Information criteria guide the decision process when having to decide among various different models. Different models use different sets of explanatory variables to explain the behaviour of the response variable. In that sense, the use of information criteria for the deciding on the ridge penalty parameter may be considered inappropriate: ridge regression uses the same set of explanatory variables irrespective of the value of the penalty parameter. Moreover, often ridge regression is employed to predict a response and not to provide an insightful explanatory model. The latter need not yield the best predictions. Finally, empirically we observe that the AIC often does not show an optimum *inside* the domain of the ridge penalty parameter. Henceforth, we refrain from the use of the AIC (or any of its relatives) in determining the optimal ridge penalty parameter. + + +===== Cross-validation} label{subsect.crossvalidation ===== +Instead of choosing the penalty parameter to balance model fit with model complexity, cross-validation requires it (i.e. the penalty parameter) to yield a model with good prediction performance. Commonly, this performance is evaluated on novel data. Novel data need not be easy to come by and one has to make do with the data at hand. The setting of `original' and novel data is then mimicked by sample splitting: the data set is divided into two (groups of samples). One of these two data sets, called the *training set*, plays the role of `original' data on which the model is built. The second of these data sets, called the *test set*, plays the role of the `novel' data and is used to evaluate the prediction performance (often operationalized as the log-likelihood or the prediction error) of the model built on the training data set. This procedure (model building and prediction evaluation on training and test set, respectively) is done for a collection of possible penalty parameter choices. The penalty parameter that yields the model with the best prediction performance is to be preferred. The thus obtained performance evaluation depends on the actual split of the data set. To remove this dependence the data set is split many times into a training and test set. For each split the model parameters are estimated for all choices of $\lambda$ using the training data and estimated parameters are evaluated on the corresponding test set. The penalty parameter that on average over the test sets performs best (in some sense) is then selected. + +When the repetitive splitting of the data set is done randomly, samples may accidently end up in a fast majority of the splits in either training or test set. Such samples may have an unbalanced influence on either model building or prediction evaluation. To avoid this $k$-fold cross-validation structures the data splitting. The samples are divided into $k$ more or less equally sized exhaustive and mutually exclusive subsets. In turn (at each split) one of these subsets plays the role of the test set while the union of the remaining subsets constitutes the training set. Such a splitting warrants a balanced representation of each sample in both training and test set over the splits. Still the division into the $k$ subsets involves a degree of randomness. This may be fully excluded when choosing $k=n$. This particular case is referred to as leave-one-out cross-validation (LOOCV). For illustration purposes the LOOCV procedure is detailed fully below: +\begin{compactitem} +\item[0)] Define a range of interest for the penalty parameter. + +\item[1)] Divide the data set into training and test set comprising samples $\{1, \ldots, n\} \setminus i$ and $\{ i \}$, respectively. + +\item[2)] Fit the linear regression model by means of ridge estimation for each $\lambda$ in the grid using the training set. This yields: +\begin{align*} +\hat{\bbeta}_{-i}(\lambda) & = ( \mathbf{X}_{-i, \ast}^{\top} +\mathbf{X}_{-i, \ast} + \lambda \mathbf{I}_{pp})^{-1} +\mathbf{X}_{-i, \ast}^{\top} \mathbf{Y}_{-i} +\end{align*} +and the corresponding estimate of the error variance $\hat{\sigma}_{-i}^2(\lambda)$. + +\item[3)] Evaluate the prediction performance of these models on the test set by $\log\{L[Y_i, \mathbf{X}_{i, \ast}; \hat{\bbeta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}$. Or, by the prediction error $|Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}_{-i}(\lambda)|$, possibly squared. + +\item[4)] Repeat steps 1) to 3) such that each sample plays the role of the test set once. + +\item[5)] Average the prediction performances of the test sets at each grid point of the penalty parameter: +\begin{align*} +\frac{1}{n} \sum_{i = 1}^n \log\{L[Y_i, \mathbf{X}_{i, \ast}; \hat{\bbeta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}. +\end{align*} +The quantity above is called the *cross-validated log-likelihood*. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. + +\item[6)] The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. +\end{compactitem} +The procedure is straightforwardly adopted to $k$-fold cross-validation, a different criterion, and different estimators. + +In the LOOCV procedure above resampling can be avoided when the prediction performance is measured by Allen's PRESS (Predicted Residual Error Sum of Squares) statistic \citep{Alle1974}. For then, the LOOCV prediction performance can be expressed analytically in terms of the known quantities derived from the design matrix and response (as pointed out but not detailed in \citealt{Golu1979}). Define the optimal penalty parameter to minimize Allen's PRESS statistic: +\begin{align*} +\lambda_{\mbox{{\tiny opt}}} = \arg \min_{\lambda} \frac{1}{n} \sum_{i=1}^n [Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}_{-i}(\lambda)]^2. +\end{align*} +To derive an analytic expression for the right-hand side first +rewrite $(\mathbf{X}_{- i, \ast}^{\top} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1}$ by means of the Woodbury identity as: +\begin{align*} +(\mathbf{X}_{- i, \ast}^{\top} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1} & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} - \mathbf{X}_{i, \ast}^{\top} \mathbf{X}_{i, \ast})^{-1} +\\ +& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} ++ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top}]^{-1} +\\ +& & \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\\ +& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} ++ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\end{align*} +with $\mathbf{H}_{ii}(\lambda) = \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top}$. +Furthermore, $\mathbf{X}_{-i}^{\top} \mathbf{Y}_{-i} = \mathbf{X}^{\top} \mathbf{Y} - \mathbf{X}_{i, \ast}^{\top} Y_i$. Substitute both in the leave-one-out ridge regression estimator and manipulate: +\begin{align*} +\hat{\bbeta}_{- i}(\lambda) & = (\mathbf{X}_{- i, \ast}^{\top} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{- i, \ast}^{\top} \mathbf{Y}_{- i} +\\ +& = \{(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} ++ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1}\} +\\ +& & \times (\mathbf{X}^{\top} \mathbf{Y} - \mathbf{X}_{i, \ast}^{\top} Y_i ) +\\ +& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} Y_i +\\ +& & + (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii} (\lambda)]^{-1} \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\mathbf{X}^{\top} \mathbf{Y} +\\ +& & - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\mathbf{X}_{i, \ast}^{\top} Y_i +\\ +& = \hat{\bbeta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ 1 - \mathbf{H}_{ii}(\lambda)] Y_i +\\ +& & + (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} \hat{\bbeta}(\lambda) +\\ +& & - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{H}_{ii} (\lambda) Y_i +\\ +& = \hat{\bbeta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \{ [ 1 - \mathbf{H}_{ii}(\lambda)] Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}(\lambda) + \mathbf{H}_{ii}(\lambda) Y_i \} +\\ +& = \hat{\bbeta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}(\lambda) ]. +\end{align*} +The latter enables the reformulation of the prediction error as: +\begin{align*} +Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}_{-i}(\lambda) & = Y_i - \mathbf{X}_{i, \ast} \{ \hat{\bbeta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}(\lambda)] \} +\\ +& = Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}(\lambda) + \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}(\lambda) ] +\\ +& = Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}(\lambda) + \mathbf{H}_{ii} (\lambda)[ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}(\lambda) ] +\\ +& = [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast}^{\top} \hat{\bbeta}(\lambda) ], +\end{align*} +which in turn results in the re-expression of Allen's PRESS statistic: +\begin{align*} +\lambda_{\mbox{{\tiny opt}}} & = \arg \min_{\lambda} \frac{1}{n} \sum_{i=1}^n [Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}_{-i}(\lambda)]^2 +\, \, \, = \, \, \, \arg \min_{\lambda} \tfrac{1}{n} \| \mathbf{B}(\lambda) [\mathbf{I}_{nn} - \mathbf{H}(\lambda)] \mathbf{Y} \|_ F^2, +\end{align*} +where $\mathbf{B}(\lambda)$ is diagonal with $[\mathbf{B}(\lambda)]_{ii} = [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1}$. Hence, the prediction performance for a given $\lambda$ can be assessed directly from the ridge hat matrix and the response vector without the recalculation of the $n$ leave-one-out ridge estimators. Computationally, this is a considerable gain. + + + +======= Simulations ======= + +Simulations are presented that illustrate properties of the ridge estimator not discussed explicitly in the previous sections of this chapter. + +===== Role of the variance of the covariates} label{ridge:covariateVariances ===== +In many applications of high-dimensional data the covariates are standardized prior to the execution of the ridge regression. Before we discuss whether this is appropriate, we first illustrate the effect of ridge penalization on covariates with distinct variances using simulated data. + +The simulation involves one response to be (ridge) regressed on fifty covariates. Data (with $n=1000$) for the covariates, denoted $\mathbf{X}$, are drawn from a multivariate normal distribution: $\mathbf{X} \sim \mathcal{N}(\mathbf{0}_{50}, \mathbf{\Sigma})$ with $\mathbf{\Sigma}$ diagonal and $(\mathbf{\Sigma})_{jj} = j / 10$. From this the response is generated through $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsilon$ with $\bbeta = \mathbf{1}_{50}$ and $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_{50}, \mathbf{I}_{50 \times 50})$. + +With the simulated data at hand the ridge regression estimates of $\bbeta$ are evaluated for a large grid of the penalty parameter $\lambda$. The resulting ridge regularization paths of the regression coefficients are plotted (Figure ref{fig.effectOfRidge_effectOfVariances}). All paths start ($\lambda=0$) close to one and vanish as $\lambda \rightarrow \infty$. However, ridge regularization paths of regression coefficients corresponding to covariates with a large variance dominate those with a low variance. + + +# original latex figure with scale=0.45, angle=0 + +FIGURE: [covariatesWithDifferentVariance.eps, width=400 frac=1.0] Top panel: Ridge regularization paths for coefficients of the 50 uncorrelated covariates with distinct variances. Color and line type indicated the grouping of the covariates by their variance. Bottom panels: Graphical illustration of the effect of a covariate's variance on the ridge estimator. The grey circle depicts the ridge parameter constraint. The dashed black ellipsoids are the level sets of the least squares loss function. The red dot is the ridge regression estimate. Left and right panels represent the cases with equal and unequal, respectively, variances of the covariates.} label{fig.effectOfRidge_effectOfVariances + + + + + +Ridge regression's preference of covariates with a large variance can intuitively be understood as follows. First note that the ridge regression estimator now can be written as: +\begin{align*} +\bbeta (\lambda) & = [ \mbox{Var}(\mathbf{X}) + \lambda \mathbf{I}_{50 \times 50}]^{-1} \mbox{Cov}(\mathbf{X}, \mathbf{Y}) +\\ +& = ( \SSigma + \lambda \mathbf{I}_{50 \times 50})^{-1} \SSigma [ \mbox{Var}(\mathbf{X}) ]^{-1} \mbox{Cov}(\mathbf{X}, \mathbf{Y}) +\\ +& = ( \SSigma + \lambda \mathbf{I}_{50 \times 50})^{-1} \SSigma \bbeta. +\end{align*} +Plug in the employed parametrization of $\mathbf{\Sigma}$, which gives: +\begin{align*} +[\bbeta (\lambda)]_j & = \frac{j}{j + 50 \lambda} \, (\bbeta)_j. +\end{align*} +Hence, the larger the covariate's variance (corresponding to the larger $j$), the larger its ridge regression coefficient estimate. Ridge regression thus prefers (among a set of covariates with comparable effect sizes) those with larger variances. + + + +The reformulation of ridge penalized estimation as a constrained estimation problem offers a geometrical interpretation of this phenomenon. Let $p=2$ and the design matrix $\mathbf{X}$ be orthogonal, while both covariates contribute equally to the response. Contrast the cases with $\mbox{Var}(X_1) \approx \mbox{Var}(X_2)$ and $\mbox{Var}(X_1) \gg \mbox{Var}(X_2)$. The level sets of the least squares loss function associated with the former case are circular, while that of the latter are strongly ellipsoidal (see Figure ref{fig.effectOfRidge_effectOfVariances}). The diameters along the principal axes (that - due to the orthogonality of $\mathbf{X}$ - are parallel to that of the $\beta_1$- and $\beta_2$-axes) of both circle and ellipsoid are reciprocals of the variance of the covariates. When the variances of both covariates are equal, the level sets of the loss function expand equally fast along both axis. With the two covariates having the same regression coefficient, the point of these level sets closest to the parameter constraint is to be found on the line $\beta_1 = \beta_2$ (Figure ref{fig.effectOfRidge_effectOfVariances}, left panel). Consequently, the ridge regression estimate satisfies $\hat{\beta}_1 (\lambda) \approx \hat{\beta}_2(\lambda)$. With unequal variances between the covariates, the ellipsoidal level sets of the loss function have diameters of rather different sizes. In particular, along the $\beta_1$-axis it is narrow (as $\mbox{Var}(X_1)$ is large), and - vice versa - wide along the $\beta_2$-axis. Consequently, the point of these level sets closest to the circular parameter constraint will be closer to the $\beta_1$- than to the $\beta_2$-axis (Figure ref{fig.effectOfRidge_effectOfVariances}, left panel). For the ridge estimates of the regression parameter this implies $0 \ll \hat{\beta}_1 (\lambda) < 1$ and $0 < \hat{\beta}_2 (\lambda) \ll 1$. Hence, the covariate with a larger variance yields the larger ridge regression estimate. + + +Should one thus standardize the covariates prior to ridge regression analysis? When dealing with gene expression data from microarrays, the data have been subjected to a series of pre-processing steps (e.g. quality control, background correction, within- and between-normalization). The purpose of these steps is to make the expression levels of genes comparable both within and between hybridizations. The preprocessing should thus be considered an inherent part of the measurement. As such it is to be done independently of whatever down-stream analysis is to follow and further tinkering with the data is preferably to be avoided (as it may mess up the `comparable-ness' of the expression levels as achieved by the preprocessing). For other data types different considerations may apply. + +Among the considerations to decide on standardization of the covariates, one should also include the fact that ridge estimates prior and posterior to scaling do not simply differ by a factor. To see this assume that the covariates have been centered. Scaling of the covariates amounts to post-multiplication of the design matrix by a $(p \times p)$-dimensional diagonal matrix $\mathbf{A}$ with the reciprocals of the covariates' scale estimates on its diagonal \citep{Sard2008}. Hence, the ridge estimator (for the rescaled data) is then given by: +\begin{align*} +\min_{\bbeta} \| \mathbf{Y} - \mathbf{X} \mathbf{A} \bbeta \|_2^2 + \lambda \| \bbeta \|_ 2^2. +\end{align*} +Apply the change-of-variable $\ggamma = \mathbf{A} \bbeta$ and obtain: +\begin{align*} +\min_{\ggamma} \| \mathbf{Y} - \mathbf{X} \gamma \|_2^2 + \lambda \| \mathbf{A}^{-1} \ggamma \|_ 2^2 & = \min_{\bbeta} \| \mathbf{Y} - \mathbf{X} \gamma \|_2^2 + \sum_{j=1}^p \lambda [(\mathbf{A})_{jj}]^{-2} \gamma_j^2. +\end{align*} +Effectively, the scaling is equivalent to covariate-wise penalization. The `scaled' ridge estimator may then be derived along the same lines as before in Section ref{sect.constrainedEstimation}: +\begin{align*} +\hat{\bbeta}^{\mbox{{\tiny (scaled)}}} (\lambda) & = \mathbf{A}^{-1} \hat{\ggamma} (\lambda) +\, \, \, = \, \, \, \mathbf{A}^{-1} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{A}^{-2})^{-1} \mathbf{X}^{\top} \mathbf{Y}. +\end{align*} +In general, this is unequal to the ridge estimator without the rescaling of the columns of the design matrix. Moreover, it should be clear that $\hat{\bbeta}^{\mbox{{\tiny (scaled)}}} (\lambda) \not= \mathbf{A} \hat{\bbeta}(\lambda)$. + +===== Ridge regression and collinearity} label{sect:collinearCovariates ===== +Initially, ridge regression was motivated as an ad-hoc fix of (super)-collinear covariates in order to obtain a well-defined estimator. We now study the effect of this ad-hoc fix on the regression coefficient estimates of collinear covariates. In particular, their ridge regularization paths are contrasted to those of `non-collinear' covariates. + +To this end, we consider a simulation in which one response is regressed on 50 covariates. The data of these covariates, stored in a design matrix denoted $\mathbf{X}$, are sampled from a multivariate normal distribution, with mean zero and a $5 \times 5$ blocked covariance matrix: +\begin{align*} +\mathbf{\Sigma} & = \left( +\begin{array}{ccccc} +\mathbf{\Sigma}_{11} & \mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} +& \mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} +\\ +\mathbf{0}_{10 \times 10} & \mathbf{\Sigma}_{22} & \mathbf{0}_{10 \times 10} +& \mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} +\\ +\mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} +& \mathbf{\Sigma}_{33} & \mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} +\\ +\mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} +& \mathbf{0}_{10 \times 10} & \mathbf{\Sigma}_{44} & \mathbf{0}_{10 \times 10} +\\ +\mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} +& \mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} & \mathbf{\Sigma}_{55} +\end{array} +\right) +\end{align*} +with +\begin{align*} +\mathbf{\Sigma}_{kk} & = \frac{k-1}{5} \, \mathbf{1}_{10 \times 10} + \frac{6-k}{5} \, \mathbf{I}_{10 \times 10}. +\end{align*} +The data of the response variable $\mathbf{Y}$ are then obtained through: $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsilon$, with $\vvarepsilon \sim \mathcal{N}( \mathbf{0}_{n}, \mathbf{I}_{nn})$ and $\bbeta = \mathbf{1}_{50}$. Hence, all covariates contribute equally to the response. Would the columns of $\mathbf{X}$ be orthogonal, little difference in the ridge estimates of the regression coefficients is expected. + +The results of this simulation study with sample size $n=1000$ are presented in Figure ref{fig.ridgeEstimates_correlatedCovariates}. All 50 regularization paths start close to one as $\lambda$ is small and converge to zero as $\lambda \rightarrow \infty$. But the paths of covariates of the same block of the covariance matrix $\mathbf{\Sigma}$ quickly group, with those corresponding to a block with larger off-diagonal elements above those with smaller ones. Thus, ridge regression prefers (i.e. shrinks less) coefficient estimates of strongly positively correlated covariates. + +# original latex figure with scale=0.45, angle=0 + +FIGURE: [correlatedCovariates.eps, width=400 frac=1.0] Left panel: Ridge regularization paths for coefficients of the 50 covariates, with various degree of collinearity but equal variance. Color and line type correspond to the five blocks of the covariate matrix $\mathbf{\Sigma}$. Right panel: Graphical illustration of the effect of the collinearity among covariates on the ridge estimator. The solid and dotted grey circles depict the ridge parameter constraint for the collinear and orthogonal cases, respectively. The dashed black ellipsoids are the level sets of the sum-of-squares squares loss function. The red dot and violet diamond are the ridge regression for the positive collinear and orthogonal case, respectively.} label{fig.ridgeEstimates_correlatedCovariates +# \afterpage{} + + + +Intuitive understanding of the observed behaviour may be obtained from the $p=2$ case. Let $U$, $V$ and $\varepsilon$ be independent random variables with zero mean. Define $X_1 = U + V$, $X_2 = U - V$, and $Y = \beta_1 X_1 + \beta_2 X_2 + \varepsilon$ with $\beta_1$ and $\beta_2$ constants. Hence, $\mathbb{E}(Y) = 0$. Then: +\begin{align*} +# Y & = \beta_1 X_1 + \beta_2 X_2 + \varepsilon +# \\ +# & = \beta_1 (U + V) + \beta_2 (U - V) + \varepsilon +# \\ +Y & = (\beta_1 + \beta_2) U + (\beta_1 - \beta_2) V + \varepsilon +\\ +& = \gamma_u U + \gamma_v V + \varepsilon +\end{align*} +and $\mbox{Cor}(X_{1}, X_{2}) = [\mbox{Var}(U) - \mbox{Var}(V)] / [ \mbox{Var}(U) + \mbox{Var}(V) ]$. +# \begin{align*} +# \mbox{Cor}(X_{1}, X_{2}) +# & = \frac{ \mbox{Cov}(X_{1}, X_{2}) }{ \sqrt{\mbox{Var}(X_{1})} \sqrt{\mbox{Var}(X_{2})} } +# \\ +# & = \frac{ \mbox{Cov}(U + V, U - V) }{ \sqrt{\mbox{Var}(U + V)} \sqrt{\mbox{Var}(U - V)} } +# \\ +# & = +# \frac{ \mbox{Var}(U) - \mbox{Var}(V) }{ \mbox{Var}(U) + \mbox{Var}(V) }. +# \end{align*} +The random variables $X_1$ and $X_2$ are strongly positively correlated if $\mbox{Var}(U) \gg \mbox{Var}(V)$. + +The ridge regression estimator associated with regression of $Y$ on $U$ and $V$ is: +\begin{align*} +\ggamma(\lambda) & = \left( +\begin{array}{rr} +\mbox{Var}(U) + \lambda & 0 +\\ +0 & \mbox{Var}(V) + \lambda +\end{array} +\right)^{-1} +\left( +\begin{array}{r} +\mbox{Cov}(U, Y) +\\ +\mbox{Cov}(V, Y) +\end{array} +\right). +\end{align*} +For large enough $\lambda$ +\begin{align*} +\ggamma(\lambda) +# & & \frac{1}{\lambda} \left( \begin{array}{rr} \mbox{Var}(U) & 0 \\ 0 \mbox{Var}(V) \end{array} \right) \left( \begin{array}{rr} \mbox{Var}(U) & 0 +# \\ +# 0 & \mbox{Var}(V) +# \end{array} +# \right)^{-1} +# \left( +# \begin{array}{r} +# \mbox{Cov}(U, Y) +# \\ +# \mbox{Cov}(V, Y) +# \end{array} +# \right) +# \\ +& \approx \frac{1}{\lambda} +\left( +\begin{array}{rr} +\mbox{Var}(U) & 0 +\\ +0 & \mbox{Var}(V) +\end{array} +\right) +\left( +\begin{array}{r} +\beta_1 + \beta_2 +\\ +\beta_1 - \beta_2 +\end{array} +\right). +\end{align*} +When $\mbox{Var}(U) \gg \mbox{Var}(V)$ and $\beta_1 \approx \beta_2$, the ridge estimate of $\gamma_v$ vanishes for large $\lambda$. Hence, ridge regression prefers positively covariates with similar effect sizes. + + +This phenomenon too can be explained geometrically. For the illustration consider ridge estimation with $\lambda=1$ of the linear model $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsilon$ with $\bbeta = (3, 3)^{\top}$, $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_2, \mathbf{I}_{22})$ and the columns of $\mathbf{X}$ strongly and positively collinear. The level sets of the sum-of-squares loss, $\| \mathbf{Y} - \mathbf{X} \bbeta \|_2^2$, are plotted in the right panel of Figure ref{fig.ridgeEstimates_correlatedCovariates}. Recall that the ridge estimate is found by looking for the smallest loss level set that hits the ridge contraint. The sought-for estimate is then the point of intersection between this level set and the constraint, and - for the case at hand - is on the $x=y$-line. This is no different from the case with orthogonal $\mathbf{X}$ columns. Yet their estimates differ, even though the same $\lambda$ is applied. The difference is to due to fact that the radius of the ridge constraint depends on $\lambda$, $\mathbf{X}$ and $\mathbf{Y}$. This is immediate from the fact that the radius of the constraint equals $\| \hat{\bbeta}(\lambda) \|_2^2$ (see Section ref{sect.constrainedEstimation}). To study the effect of $\mathbf{X}$ on the radius, we remove its dependence on $\mathbf{Y}$ by considering its expectation, which is: +\begin{align*} +\mathbb{E}[ \| \hat{\bbeta}(\lambda) \|_2^2 ] & = \mathbb{E} \{ [(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \hat{\bbeta}]^{\top} \, (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \hat{\bbeta} \} \nonumber % \, \, \, = \, \, \, \mathbb{E} ( \hat{\bbeta}^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \hat{\bbeta} ) \nonumber +\\ +# & = \mathbb{E} [ \mathbf{Y}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} ] \nonumber +# \\ +# & = \mathbb{E} [ \mathbf{Y}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} (\mathbf{X}^{\top} \mathbf{X}) (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) (\mathbf{X}^{\top} \mathbf{X})(\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} ] \nonumber +# \\ +& = \mathbb{E} [ \mathbf{Y}^{\top} \mathbf{X} +(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-2} \mathbf{X}^{\top} \mathbf{Y} ] \nonumber +\\ +& = \sigma^2 \, \mbox{tr}\big\{ \mathbf{X} +(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-2} \mathbf{X}^{\top} \big\} + \bbeta^{\top} \mathbf{X}^{ \top} \mathbf{X} +(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-2} \mathbf{X}^{\top} \, \mathbf{X} \bbeta. % label{form.expectationPenalty} +\end{align*} +In the last step we have used $\mathbf{Y} \sim \mathcal{N}( \mathbf{X} \bbeta, \sigma^2 \mathbf{I}_{pp})$ and the expectation of the quadratic form of a multivariate random variable $\vvarepsilon \sim \mathcal{N}(\mmu_{\varepsilon}, \SSigma_{\varepsilon})$ is $\mathbb{E} ( \vvarepsilon^{\top} \, \LLambda \, \vvarepsilon) = \mbox{tr} ( \LLambda \, \SSigma_{\varepsilon}) + \mmu_{\varepsilon}^{\top} \, \LLambda \, \mmu_{\varepsilon}$ (cf. \citealp{Math1992}). The expression for the expectation of the radius of the ridge constraint can now be evaluated for the orthogonal $\mathbf{X}$ and the strongly, positively collinear $\mathbf{X}$. It turns out that the latter is larger than the former. This results in a larger ridge constraint. For the larger ridge constraint there is a smaller level set that hits it first. The point of intersection, still on the $x=y$-line, is now thus closer to $\bbeta$ and further from the origin (cf. right panel of Figure ref{fig.ridgeEstimates_correlatedCovariates}). The resulting estimate is thus larger than that from the orthogonal case. + +The above needs some attenuation. Among others it depends on: *i)* the number of covariates in each block, *ii)* the size of the effects, i.e. regression coefficients of each covariate, and +*iii)* the degree of collinearity. Possibly, there are more factors influencing the behaviour of the ridge estimator presented in this subsection. + +This behaviour of ridge regression is to be understood when using (say) gene expression data to predict a certain clinical outcome. Genes work in concert to fulfil a certain function in the cell. Consequently, one expects their expression levels to be correlated. Indeed, gene expression studies exhibit many co-expressed genes, that is, genes with correlating transcript levels. + + + + +======= Illustration} label{sect.ridgeRegressionDataIllustration ======= +The application of ridge regression to actual data aims to illustrate its use in practice. + +===== MCM7 expression regulation by microRNAs ===== + +Recently, a new class of RNA was discovered, referred to as microRNA. MicroRNAs are non-coding, single stranded RNAs of approximately 22 nucleotides. Like mRNAs, microRNAs are encoded in and transcribed from the DNA. MicroRNAs play an important role in the regulatory mechanism of the cell. MicroRNAs down-regulate gene expression by either of two post-transcriptional mechanisms: mRNA cleavage or transcriptional repression. This depends on the degree of complementarity between the microRNA and the target. Perfect or nearly perfect complementarity of the mRNA to the microRNA will lead to cleavage and degradation of the target mRNA. Imperfect complementarity will repress the productive translation and reduction in protein levels without affecting the mRNA levels. +A single microRNA can bind to and regulate many different mRNA targets. Conversely, several microRNAs can bind to and cooperatively control a single mRNA target (\citealp{Bart2004}; \citealp{Esqu2006}; \citealp{Kim2006}). + +In this illustration we wish to confirm the regulation of mRNA expression by microRNAs in an independent data set. We cherry pick an arbitrary finding from literature reported in cite{Ambs2008}, which focusses on the microRNA regulation of the MCM7 gene in prostate cancer. The MCM7 gene is involved in DNA replication \citep{Tye1999}, a cellular process often derailed in cancer. Furthermore, MCM7 interacts with the tumor-suppressor gene RB1 \citep{Ster1998}. Several studies indeed confirm the involvement of MCM7 in prostate cancer \citep{Padm2004}. And recently, it has been reported that in prostate cancer MCM7 may be regulated by microRNAs \citep{Ambs2008}. + +We here assess whether the MCM7 down-regulation by microRNAs can be observed in a data set other than the one upon which the microRNA-regulation of MCM7 claim has been based. To this end we download from the Gene Expression Omnibus (GEO) a prostate cancer data set (presented by \citealp{Wang2009GeneNetworks}). This data set (with GEO identifier: GSE20161) has both mRNA and microRNA profiles for all samples available. The preprocessed (as detailed in \citealp{Wang2009GeneNetworks}) data are downloaded and require only minor further manipulations to suit our purpose. These manipulations comprise *i)* averaging of duplicated profiles of several samples, *ii)* gene- and mir-wise zero-centering of the expression data, *iii)* averaging the expression levels of the probes that interrogate MCM7. Eventually, this leaves 90 profiles each comprising of 735 microRNA expression measurements. + + + +\lstinputlisting{prostate_ridgeAnalysis.r} + + +With this prostate data set at hand we now investigate whether MCM7 is regulated by microRNAs. Hereto we fit a linear regression model regressing the expression levels of MCM7 onto those of the microRNAs. As the number of microRNAs exceeds the number of samples, ordinary least squares fails and we resort to the ridge estimator of the regression coefficients. First, an informed choice of the penalty parameter is made through maximization of the LOOCV log-likelihood, resulting in $\lambda_{\mbox{{\tiny opt}}} = 1812.826$. Having decided on the value of the to-be-employed penalty parameter, the ridge regression estimator can now readily be evaluated. The thus fitted model allows for the evaluation of microRNA-regulation of MCM7. E.g., by the proportion of variation of the MCM7 expression levels by the microRNAs as expressed in coefficient of determination: $R^2 = 0.4492$. Alternatively, but closely related, observed expression levels may be related to the linear predictor of the MCM7 expression levels: $\hat{\mathbf{Y}}(\lambda_{\mbox{{\tiny opt}}}) = \mathbf{X} \hat{\bbeta} (\lambda_{\mbox{{\tiny opt}}})$. The Spearman correlation of response and predictor equals 0.6295. A visual inspection is provided by the left panel of Figure ref{fig.RidgeProstateExample}. Note the difference in scale of the $x$- and $y$-axes. This is due to the fact that the regression coefficients have been estimated in penalized fashion, consequently shrinking estimates of the regression coefficients towards zero leading to small estimates and in turn compressing the range of the linear prediction. The above suggests there is indeed association between the microRNA expression levels and those of MCM7. + + + +# original latex figure with scale=0.45, angle=0 + +FIGURE: [prostate_ridgeFit.eps, width=400 frac=1.0] Left panel: Observed vs. (ridge) fitted MCM7 expression values. Right panel: Histogram of the ridge regression coefficient estimates.} label{fig.RidgeProstateExample + + +The overall aim of this illustration was to assess whether microRNA-regulation of MCM7 could also be observed in this prostate cancer data set. In this endeavour the dogma (stating this regulation should be negative) has nowhere been used. A first simple assessment of the validity of this dogma studies the signs of the estimated regression coefficients. The ridge regression estimate has 394 out of the 735 microRNA probes with a negative coefficient. Hence, a small majority has a sign in line with the `microRNA $\downarrow$ mRNA' dogma. When, in addition, taking the size of these coefficients into account (Figure ref{fig.RidgeProstateExample}, right panel), the negative regression coefficient estimates do not substantially differ from their positive counterparts (as can be witnessed from their almost symmetrical distribution around zero). Hence, the value of the `microRNA $\downarrow$ mRNA' dogma is not confirmed by this ridge regression analysis of the MCM7-regulation by microRNAs. Nor is it refuted. + + +The implementation of ridge regression in the {\tt penalized}-package offers the possibility to fully obey the dogma on negative regulation of mRNA expression by microRNAs. This requires all regression coefficients to be negative. Incorporation of the requirement into the ridge estimation augments the constrained estimation problem with an additional constraint: +\begin{align*} % label{form.constrEstProblemRidge} +\hat{\bbeta}(\lambda) & = \arg \min_{\| \bbeta \|_2^2 \leq c (\lambda) \atop \beta_j \leq 0 \, \mbox{{\tiny for all $j$}}} \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2. +\end{align*} +With the additional non-positivity constraint on the parameters, there is no explicit solution for the estimator. The ridge estimate of the regression parameters is then found by numerical optimization using e.g. the Newton-Raphson algorithm or a gradient descent approach. The next listing gives the R-code for ridge estimation with the non-positivity constraint of the linear regression model. + +\lstinputlisting{prostate_ridgeAnalysisWithConstraint.r} + +The linear regression model linking MCM7 expression to that of the microRNAs is fitted by ridge regression while simultaneously obeying the `negative regulation of mRNA by microRNA'-dogma to the prostate cancer data. In the resulting model 401 out of 735 microRNA probes have a nonzero (and negative) coefficient. There is a large overlap in microRNAs with a negative coefficient between those from this and the previous fit. The models are also compared in terms of their fit to the data. The Spearman rank correlation coefficient between response and predictor for the model without positive regression coefficients equals 0.679 and its coefficient of determination 0.524 (confer the left panel of ref{fig.RidgeProstateExample_constrainedAnalysis} for a visualization). This is a slight improvement upon the unconstrained ridge estimated model. The improvement may be small but it should be kept in mind that the number of parameters used by both models is 401 (for the model without positive regression coefficients) vs. 735. Hence, with close to half the number of parameters the dogma-obeying model gives a somewhat better description of the data. This may suggest that there is some value in the dogma as inclusion of this prior information leads to a more parsimonious model without any loss in fit. + + + +# original latex figure with scale=0.45, angle=0 + +FIGURE: [prostate_ridgeFitConstrained.eps, width=400 frac=1.0] Left panel: Observed vs. (ridge) fitted MCM7 expression values (with the non-positive constraint on the parameters in place). Right panel: Histogram of the ridge regression coefficient estimates (from the non-positivity constrained analysis).} label{fig.RidgeProstateExample_constrainedAnalysis + + + +The dogma-obeying model selects 401 microRNAs that aid in the explanation of the variation in the gene expression levels of MCM7. There is an active field of research, called *target prediction*, trying to identify which microRNAs target the mRNA of which genes. Within {\tt R} there is a collection of packages that provide the target prediction of known microRNAs. The packages differ on the method (e.g. experimental or sequence comparison) that has been used to arrive at the prediction. These target predictions may be used to evaluate the value of the found 401 microRNAs. Ideally, there would be a substantial amount of overlap. The {\tt R}-script that loads the target predictions and does the comparison is below. + +\lstinputlisting{prostate_link2predictionTools.r} + + +|-----------------------------------------------------------------| +| # #if FORMAT in ("latex", "pdflatex") +\vspace{-7pt} +# #endif | | | +|---------r--------------------r--------------------r-------------| +| # #if FORMAT in ("latex", "pdflatex") +\vspace{3pt} +# #endif | $\hat{\beta}_j = 0$ | $\hat{\beta}_j < 0$ | +| # #if FORMAT in ("latex", "pdflatex") +\vspace{-4pt} +# #endif | | | +| microRNA not target | 323 | 390 | +| microRNA target | 11 | 11 | +| # #if FORMAT in ("latex", "pdflatex") +\vspace{-9pt} +# #endif | | | +|-----------------------------------------------------------------| + + +\caption{Cross-tabulation of the microRNAs being a potential target of MCM7 vs. the value of its regression coefficient in the dogma-obeying model.} label{table.mir2mcm7prediction} + + +With knowledge available on each microRNA whether it is predicted (by at least one target prediction package) to be a potential target of MCM7, it may be cross-tabulated against its corresponding regression coefficient estimate in the dogma-obeying model being equal to zero or not. Table ref{table.mir2mcm7prediction} contains the result. Somewhat superfluous considering the data, we may test whether the targets of MCM7 are overrepresented in the group of strictly negatively estimated regression coefficients. The corresponding chi-squared test (with Yates' continuity correction) yields the test statistic $\chi^2 = 0.0478$ with a $p$-value equal to 0.827. Hence, there is no enrichment among the 401 microRNAS of those that have been predicted to target MCM7. This may seem worrisome. However, the microRNAs have been selected for their predictive power of the expression levels of MCM7. Variable selection has not been a criterion (although the sign constraint implies selection). Moreover, criticism on the value of the microRNA target prediction has been accumulating in recent years. + + +======= Conclusion ======= + +We discussed ridge regression as a modification of linear regression to overcome the empirical non-identifiability of the latter when confronted with high-dimensional data. The means to this end was the addition of a (ridge) penalty to the sum-of-squares loss function of the linear regression model, which turned out to be equivalent to constraining the parameter domain. This warranted the identification of the regression coefficients, but came at the cost of introducing bias in the estimates. Several properties of ridge regression like moments, MSE, and its Bayesian interpretation have been reviewed. Finally, its behaviour and use have been illustrated in simulation and omics data. + + +======= Exercises ======= +\begin{question}[^footnote2][^footnote2]: This exercise is freely rendered from cite{Drap1998} \mbox{ } +\\ +Find the ridge regression solution for the data below for a general value of $\lambda$ and for the straight line model $Y = \beta_0 + \beta_1 X + \varepsilon$ (only apply the ridge penalty to the slope parameter, not to the intercept). Show that when $\lambda$ is chosen as 0.4, the ridge solution fit is $\hat{Y} = 40 + 1.75 X$. Data: $\mathbf{X}^{\top} = (X_1, X_2, \ldots, X_{8})^{\top} = (-2, -1, -1, -1, 0, 1, 2, 2)^{\top}$, and $\mathbf{Y}^{\top} = (Y_1, Y_2, \ldots, Y_{8})^{\top} = (35, 40, 36, 38, 40, 43, 45, 43)^{\top}$. +\end{question} + +\begin{question}[^footnote3][^footnote3]: This exercise is freely rendered from cite{Hast2009, but can be found in many other places. The original source is unknown to the author.} label{question:ridgeAugmentation} \mbox{ } +\\ +Show that the ridge regression estimates can be obtained by ordinary least squares regression on an augmented data set. We augment the centered matrix $\mathbf{X}$ with $p$ additional row $\sqrt{\lambda} \mathbf{I}$, and augment $\mathbf{y}$ with $p$ zeros. +\end{question} + +\begin{question} label{question.ridgeResidualsProjection} \mbox{ } +\\ +The coefficients $\bbeta$ of a linear regression model, $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsilon$, are estimated by $\hat{\bbeta} = (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}$. The associated fitted values then given by $\widehat{\mathbf{Y}} = \mathbf{X} \, \hat{\bbeta} = \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} = \mathbf{H} \mathbf{Y}$, where $\mathbf{H} =\mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top}$ referred to as the hat matrix. The matrix $\mathbf{P}$ is a projection matrix and satisfies $\mathbf{H} = \mathbf{H}^ 2$. Hence, linear regression projects the response $\mathbf{Y}$ onto the vector space spanned by the columns of $\mathbf{Y}$. Consequently, the residuals $\hat{\vvarepsilon}$ and $\hat{\mathbf{Y}}$ are orthogonal. Now consider the ridge estimator of the regression coefficients: $\hat{\bbeta}(\lambda) = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}$. Let $\hat{\mathbf{Y}}(\lambda) = \mathbf{X} \hat{\bbeta}(\lambda)$ be the vector of associated fitted values. + +\begin{compactitem} +\item[*a)*] Show that the matrix $\mathbf{H}(\lambda) = \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top}$, associated with ridge regression, is not a projection matrix (for any $\lambda > 0$). + +\item[*b)*] Show that the `ridge fit' $\widehat{\mathbf{Y}}(\lambda)$ is not orthogonal to the associated `ridge residuals' $\hat{\vvarepsilon}(\lambda)$ (for any $\lambda > 0$). + +\item[*c)*] Derive the distribution of the `ridge residuals'. +\end{compactitem} +\end{question} + + +\begin{question} label{question.MSEofLinearPredictor} \mbox{ } +\\ +Recall that there exists $\lambda > 0$ such that $MSE(\hat{\bbeta}) > MSE[\hat{\bbeta}(\lambda)]$. Verify that this carries over to the linear predictor. That is, there exists a $\lambda > 0$ such that$MSE(\widehat{\mathbf{Y}}) = MSE(\mathbf{X} \hat{\bbeta}) > MSE[\mathbf{X}\hat{\bbeta}(\lambda)]$. +\end{question} + +\begin{question} \mbox{ } +\\ +Consider a 3-gene pathway. Expression levels of these three genes have been measured in an observational study involving hundred individuals. In order to assess how the expression levels of gene A are affect by that of genes B and C, a medical researcher fits the +\begin{align*} +Y_{i}^{(A)} &= \beta_b Y_{i}^{(B)} + \beta_c Y_{i}^{(C)} + +\varepsilon_{i}, +\end{align*} +with $\varepsilon_i \sim \mathcal{N}(0, \sigma^2)$. This model fitted by means of ridge regression, but with a separate penalty parameter, $\lambda_{2,b}$ and $\lambda_{2,c}$, for the two regression coefficient, $\beta_b$ and $\beta_c$, respectively. + +\begin{compactitem} +\item[*a)*] Write down the ridge penalized loss function employed by the researcher. + +\item[*b)*] Does a different choice of penalty parameter for the second regression coefficient affect the estimation of the first regression coefficient? Motivate your answer. + +\item[*c)*] The researcher decides that the second covariate $Y_i^{(C)}$ is irrelevant. Instead of removing the covariate from model, the researcher decides to set $\lambda_{2,c} = +\infty$. Show that this results in the same ridge estimate for $\beta_b$ as when fitting (again by means of ridge regression) the model without the second covariate. +\end{compactitem} +\end{question} + +\begin{question} \mbox{ } +\\ +The expression levels of the $j$-the gene are explained by a linear regression model in terms of those of all other genes. Consider the following two ridge regression estimators of the regression parameter of this model, defined as: +\begin{align*} +\arg \max_\bbeta \sum_{i=1}^n (Y_{i,j} - \mathbf{Y}_{i,\setminus j} \bbeta_j)^2 + \lambda \| \bbeta_j \|_ 2^2 +\quad +\mbox{and} \quad +\arg \max_\bbeta \sum_{i=1}^n (Y_{i,j} - \mathbf{Y}_{i,\setminus j} \bbeta_j)^2 + n \lambda \| \bbeta_j \|_ 2^2. +\end{align*} +Which do you prefer? Motivate. +\end{question} + + + + +========= Generalizing ridge regression ========= label{chap:genRidge} +# ======= Generalized ridge regression ======= + +The expos\'{e} on ridge regression may be generalized in many ways. Among others different generalized linear models may be considered (confer Section ref{sect.ridgeLogistic}). In this section we stick to the linear regression model $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsilon$ with the usual assumptions, but fit it in weighted fashion and generalize the common, spherical penalty. The loss function corresponding to this scenario is: + +!bt + +!bt +\begin{align} label{form:generalizedRidgeLoss} +(\mathbf{Y} - \mathbf{X} \bbeta)^{\top} \mathbf{W} (\mathbf{Y} - \mathbf{X} \bbeta) + (\bbeta - \bbeta_0)^{\top} \mathbf{\Delta} +(\bbeta - \bbeta_0), +\end{align} +!et +!et +which comprises a weighted least squares criterion and a generalized ridge penalty. In this $\mathbf{W}$ is a $(n \times n)$-dimensional, diagonal matrix with $(\mathbf{W})_{ii} \in [0,1]$ representing the weight of the $i$-th observation. The penalty is now a quadratic form with penalty parameter $\mathbf{\Delta}$, a $(p \times p)$-dimensional, positive definite, symmetric matrix. When $\mathbf{\Delta} = \lambda \mathbf{I}_{pp}$, one regains the spherical penalty of `regular ridge regression'. This penalty shrinks each element of the regression parameter $\bbeta$ equally along the unit vectors $\mathbf{e}_j$. Generalizing $\mathbf{\Delta}$ to the class of symmetric, positive definite matrices $\mathcal{S}_{++}$ allows for *i)* different penalization per regression parameter, and *ii)* joint (or correlated) shrinkage among the elements of $\bbeta$. The penalty parameter $\mathbf{\Delta}$ determines the speed and direction of shrinkage. The $p$-dimensional column vector $\bbeta_0$ is a user-specified, non-random target towards which $\bbeta$ is shrunken as the penalty parameter increases. When recasting generalized ridge estimation as a constrained estimation problem, the implications of the penalty may be visualized (Figure ref{fig:generalizedRidgeIllustration}, left panel). The generalized ridge penalty is a quadratic form centered around $\bbeta_0$. In Figure ref{fig:generalizedRidgeIllustration} the parameter constraint clearly is ellipsoidal (and not spherical). Moreover, the center of this ellipsoid is not at zero. + +# original latex figure with scale=0.40, angle=0 + +FIGURE: [generalizedRidgeIllustration_penalty.eps, width=400 frac=1.0] Left panel: the contours of the likelihood (grey solid ellipsoids) and the parameter constraint implied by the generalized penalty (black dashed ellipsoid. Right panel: generalized (fat coloured lines) and `regular' (thin coloured lines) regularization paths of four regression coefficients. The dotted grey (straight) lines indicated the targets towards the generalized ridge penalty shrinks regression coefficient estimates.} label{fig:generalizedRidgeIllustration + + +The addition of the generalized ridge penalty to the sum-of-squares ensures the existence of a unique regression estimator in the face of super-collinearity. The generalized penalty is a non-degenerated quadratic form in $\bbeta$ due to the positive definiteness of the matrix $\mathbf{\Delta}$. As it is non-degenerate, it is strictly convex. Consequently, the generalized ridge regression loss function (ref{form:generalizedRidgeLoss}), being the sum of a convex and strictly convex function, is also strictly convex. This warrants the existence of a unique global minimum and, thereby, a unique estimator. + + +Like for the `regular' ridge loss function (ref{form.ridgeLossFunction}), there is an explicit expression for the optimum of the generalized ridge loss function (ref{form:generalizedRidgeLoss}). To see this, obtain the estimating equation of $\bbeta$ through equating its derivative with respect to $\bbeta$ to zero: +\begin{align*} +2 \mathbf{X}^{\top} \mathbf{W} \mathbf{Y} - 2 \mathbf{X}^{\top} \mathbf{W} \mathbf{X} \bbeta - 2 \mathbf{\Delta} \bbeta + 2 \mathbf{\Delta} \bbeta_0 & = \mathbf{0}_{p}. +\end{align*} +This is solved by: + +!bt + +!bt +\begin{align} +\hat{\bbeta}(\mathbf{\Delta}) & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} (\mathbf{X}^{\top} \mathbf{W} \mathbf{Y} + \mathbf{\Delta} \bbeta_0). +\end{align} +!et +!et +Clearly, this reduces to the `regular' ridge estimator by setting $\mathbf{W} = \mathbf{I}_{nn}$, $\bbeta_0 = \mathbf{0}_{p}$, and $\mathbf{\Delta} = \lambda \mathbf{I}_{pp}$. The effects of the generalized ridge penalty on the estimates can be seen in the regularization paths of the estimates. Figure ref{fig:generalizedRidgeIllustration} (right panel) contains an example of the regularization paths for coefficients of a linear regression model with four explanatory variables. Most striking is the limiting behaviour of the estimates of $\beta_3$ and $\beta_4$ for large values of the penalty parameter $\lambda$: they convergence to a non-zero value (as was specified by a nonzero $\beta_0$). More subtle is the (temporary) convergence of the regularization paths of the estimates of $\beta_2$ and $\beta_3$. That of $\beta_2$ is pulled away from zero (its true value and approximately its unpenalized estimate) towards the estimate of $\beta_3$. In the regularization path of $\beta_3$ this can be observed in a delayed convergence to its nonzero target value (for comparison consider that of $\beta_4$). For reference the corresponding regularization paths of the `regular' ridge estimates (as thinner lines of the same colour) are included in Figure ref{fig:generalizedRidgeIllustration}. + + + +\begin{example} *Fused ridge estimation* label{example.gRidge2orthonormalDesign} +\\ +An example of a generalized ridge penalty is the *fused ridge penalty*. Consider the standard linear model $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsilon$. The fused ridge estimator of $\bbeta$ then minimizes: + +!bt + +!bt +\begin{align} label{form:fusedRidgeLoss} +\| \mathbf{Y} - \mathbf{X} \bbeta \|_2^2 + \lambda \sum_{j=2}^p \| \beta_{j} - \beta_{j-1} \|_2^2. +\end{align} +!et +!et +The penalty in the loss function above can be written as a generalized ridge penalty: +\begin{align*} +\lambda \sum_{j=2}^p \| \beta_{j} - \beta_{j-1} \|_2^2 & = \bbeta^{\top} +\left( +\begin{array}{rrrrrr} +\lambda & -\lambda & 0 & \ldots & \ldots & 0 +# #if FORMAT in ("latex", "pdflatex") +\vspace{-4pt} +# #endif +\\ +-\lambda & 2 \lambda & -\lambda & \ddots & & \vdots +# #if FORMAT in ("latex", "pdflatex") +\vspace{-4pt} +# #endif +\\ +0 & -\lambda & 2 \lambda & \ddots & \ddots & \vdots +# #if FORMAT in ("latex", "pdflatex") +\vspace{-4pt} +# #endif +\\ +\vdots & \ddots & \ddots & \ddots & \ddots & 0 +# #if FORMAT in ("latex", "pdflatex") +\vspace{-4pt} +# #endif +\\ +\vdots & & \ddots & \ddots & \ddots & -\lambda +# # #if FORMAT in ("latex", "pdflatex") +\vspace{-4pt} +# #endif +\\ +0 & \ldots & \ldots & 0 & -\lambda & \lambda +\end{array}\right) +\bbeta. +\end{align*} +The matrix $\mathbf{\Delta}$ employed above is semi-positive definite and therefore the loss function (ref{form:fusedRidgeLoss}) is not strictly convex. Hence, often a regular ridge penalty $\| \bbeta \|_2^2$ is added (with its own penalty parameter). + +To illustrate the effect of the fused ridge penalty on the estimation of the linear regression model $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsilon$, let $\beta_j = \phi_{0,1}(z_j)$ with $z_j =-30 + \tfrac{6}{50} j$ for $j=1, \ldots, 500$. Sample the elements of the design matrix $\mathbf{X}$ and those of the error vector $\vvarepsilon$ from the standard normal distribution, then form the response $\mathbf{Y}$ from the linear model. The regression parameter is estimated through fused ridge loss minimization with $\lambda=1000$. The estimate is shown in Figure ref{fig:fusedRidgeIllustration} (red line). For reference the figure includes the true $\bbeta$ (black line) and the `regular ridge' estimate with $\lambda=1$ (blue line). Clearly, the fused ridge estimate yields a nice smooth vector of $\bbeta$ estimates +\end{example} + +# original latex figure with scale=0.40, angle=0 + +FIGURE: [fusedRidgeIllustration_simulation.eps, width=400 frac=1.0] Left panel: illustration of the fused ridge estimator (in simulation). The true parameter $\bbeta$ and its ridge and fused ridge estimates against their spatial order. Right panel: Ridge vs. fused ridge estimates of the DNA copy effect on KRAS expression levels. The dashed, grey vertical bar indicates the location of the KRAS gene. } label{fig:fusedRidgeIllustration + + + + +======= Moments ======= + +The expectation and variance of $\hat{\bbeta}(\mathbf{\Delta})$ are obtained through application of the same matrix algebra and expectation and covariance rules used in the derivation of their counterparts of the `regular' ridge regression estimator. This leads to: +\begin{align*} +\mathbb{E}[\hat{\bbeta}(\mathbf{\Delta})] & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} \bbeta + \mathbf{\Delta} \bbeta_0), +\\ +\mbox{Var}[\hat{\bbeta}(\mathbf{\Delta})] & = \sigma^2 (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} \mathbf{X}^{\top} \mathbf{W}^2 \mathbf{X} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1}. +\end{align*} +From these expressions similar limiting behaviour as for the `regular' ridge regression case can be deduced. To this end let $\mathbf{V}_{\delta} \mathbf{D}_{\delta} \mathbf{V}_{\delta}^{\top}$ be the eigendecomposition of $\mathbf{\Delta}$ and $d_{\delta,j} = (\mathbf{D}_{\delta})_{jj}$. Furthermore, define (with some abuse of notation) $\lim_{\mathbf{\Delta} \rightarrow \infty}$ as the limit of all $d_{\delta,j}$ simultaneously tending to infinity. Then, $\lim_{\mathbf{\Delta} \rightarrow \infty} \mathbb{E}[\hat{\bbeta}(\mathbf{\Delta})] = \bbeta_0$ and $\lim_{\mathbf{\Delta} \rightarrow \infty} \mbox{Var}[\hat{\bbeta}(\mathbf{\Delta})] = \mathbf{0}_{pp}$. + + +\begin{example} \mbox{ } label{example.gRidge2orthonormalDesign} +\\ +Let $\mathbf{X}$ be an $(n \times p)$-dimensional, orthonormal design matrix. Contrast the regular and generalized ridge regression estimator, the latter with $\mathbf{W} = \mathbf{I}_{pp}$, $\bbeta_0 = \mathbf{0}_p$ and $\mathbf{\Delta} = \lambda \mathbf{R}$ where $\mathbf{R} = (1-\rho) \mathbf{I}_{pp} + \rho \mathbf{1}_{pp}$ for $\rho \in (-(p-1)^{-1}, 1)$. For $\rho =0$ the two estimators coincide. The variance of the generalized ridge regression estimator then is $\mbox{Var}[ \hat{\bbeta}(\mathbf{\Delta})] = (\mathbf{I}_{pp} + \mathbf{\Delta})^{-2}$. The efficiency of this estimator, measured by its generalized variance, is: +\begin{align*} +\det \{ \mbox{Var}[ \hat{\bbeta}(\mathbf{\Delta})] \} & = \{ [1 + \lambda + (p-1) \rho] (1 + \lambda-\rho)^{p-1} \}^{-2}. +\end{align*} +This efficiency attains its minimum at $\rho = 0$. In the present case, the regular ridge regression estimator is thus more efficient than its generalized counterpart. +\end{example} + + +\begin{example} *(MSE with perfect target)* +\\ +Set $\bbeta_0 = \bbeta$, i.e. the target is equal to the true value of the regression parameter. Then: +\begin{align*} +\mathbb{E}[\hat{\bbeta}(\Delta)] & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \Delta)^{-1} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} \bbeta + \Delta \bbeta) \, \, \, = \, \, \, \bbeta. +\end{align*} +Hence, irrespective of the choice of $\Delta$, the generalized ridge is then unbiased. Thus: +\begin{align*} +\mbox{MSE}[\hat{\bbeta}(\Delta)] & = \mbox{tr} \{ +\mbox{Var}[\hat{\bbeta}(\Delta)] \} +\\ +& = \mbox{tr}[ \sigma^{2} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} \mathbf{X}^{\top} \mathbf{W}^2 \mathbf{X} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1}] +\\ +& = \sigma^2 \mbox{tr}[ \mathbf{X}^{\top} \mathbf{W}^2 \mathbf{X} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-2}]. +\end{align*} +When $\mathbf{\Delta} = \lambda \mathbf{I}_{pp}$, this MSE is smaller than that of the ML regression estimator, irrespective of the choice of $\lambda$. +\end{example} + + +======= The Bayesian connection} label{sect:genRidgeBayes ======= +This generalized ridge estimator can, like the regular ridge estimator, be viewed as a Bayesian estimator. It requires to replace the conjugate prior on $\bbeta$ by a more general normal law, $\bbeta \sim \mathcal{N}(\bbeta_0, \sigma^2 \mathbf{\Delta}^{-1})$, but retains the gamma prior on $\sigma^2$. The joint posterior distribution of $\bbeta$ and $\sigma^2$ is then obtained analogously (the details are left as Exercise ref{question.generalizedRidgeAndBayes}) to Section ref{sect:Bayes}: +\begin{align*} +f_{\bbeta, \sigma^2} (\bbeta, \sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) & = f_Y (\mathbf{Y} \, | \, \mathbf{X}, \bbeta, \sigma^2) \, f_{\beta}(\bbeta | \sigma^2) \, f_{\sigma}(\sigma^2) +\\ +& \propto & g_{\bbeta} (\bbeta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) \, +g_{\sigma^2} (\sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) +\end{align*} +with +\begin{align*} +g_{\bbeta} (\bbeta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) +& \propto & \exp \Big\{ - \frac{1}{2\sigma^2} \big[ \bbeta - \hat{\bbeta}(\mathbf{\Delta}) \big]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \mathbf{\Delta}) \big[ \bbeta - \hat{\bbeta}(\mathbf{\Delta}) \big] \Big\}. +\end{align*} +This implies $\mathbb{E}(\bbeta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) = \hat{\bbeta}(\mathbf{\Delta})$. Hence, the generalized ridge regression estimator too can be viewed as the Bayesian posterior mean estimator of $\bbeta$ when imposing a multivariate Gaussian prior on the regression parameter. + + + + + +======= Application ======= + +An illustration involving omics data can be found in the explanation of a gene's expression levels in terms of its DNA copy number. The latter is simply the number of gene copies encoded in the DNA. For instance, for most genes on the autosomal chromosomes the DNA copy number is two, as there is a single gene copy on each chromosome and autosomal chromosomes come in pairs. Alternatively, in males the copy number is one for genes that map to the X or Y chromosome, while in females it is zero for genes on the Y chromosome. In cancer the DNA replication process has often been compromised leading to a (partially) reshuffled and aberrated DNA. Consequently, the cancer cell may exhibit gene copy numbers well over a hundred for classic oncogenes. A faulted replication process does - of course - not nicely follow the boundaries of gene encoding regions. This causes contiguous genes to commonly share aberrated copy numbers. With genes being transcribed from the DNA and a higher DNA copy number implying an enlarged availability of the gene's template, the latter is expected to lead to elevated expression levels. Intuitively, one expects this effect to be localized (a so-called *cis*-effect), but some suggest that aberrations elsewhere in the DNA may directly affect the expression levels of distant genes (referred to as a *trans*-effect). + +The *cis*- and *trans*-effects of DNA copy aberrations on the expression levels of the KRAS oncogene in colorectal cancer are investigated. Data of both molecular levels from the TCGA (The Cancer Genome Atlas) repository are downloaded \citep{TCGA2012colon}. The gene expression data are limited to that of KRAS, while for the DNA copy number data only that of chromosome 12, which harbors KRAS, is retained. This leaves genomic profiles of 195 samples comprising 927 aberrations. Both molecular data types are zero centered feature-wise. Moreover, the data are limited to ten - conveniently chosen? - samples. The KRAS expression levels are explained by the DNA copy number aberrations through the linear regression model. The model is fitted by means of ridge regression, with $\lambda \mathbf{\Delta}$ and $\mathbf{\Delta} = \mathbf{I}_{pp}$ and a single-banded $\mathbf{\Delta}$ with unit diagonal and the elements of the first off-diagonal equal to the arbitrary value of $-0.4$. The latter choice appeals to the spatial structure of the genome and encourages similar regression estimates for contiguous DNA copy numbers. The penalty parameter is chosen by means of leave-one-out cross-validation using the squared error loss. + +\lstinputlisting{fusedRidge_KRASexample.r} + +The right panel of Figure ref{fig:fusedRidgeIllustration} shows the ridge regression estimate with both choices of $\mathbf{\Delta}$ and optimal penalty parameters plotted against the chromosomal order. The location of KRAS is indicated by a vertical dashed bar. The ordinary ridge regression estimates show a minor peak at the location of KRAS but is otherwise more or less flat. In the generalized ridge estimates the peak at KRAS is emphasized. Moreover, the region close to KRAS exhibits clearly elevated estimates, suggesting co-abberated DNA. For the remainder the generalized ridge estimates portray a flat surface, with the exception of a single downward spike away from KRAS. Such negative effects are biologically nonsensible (more gene templates leading to reduced expression levels?). On the whole the generalized ridge estimates point towards the *cis*-effect as the dominant genomic regulation mechanism of KRAS expression. The isolated spike may suggest the presence of a *trans*-effect, but its sign is biological nonsensible and the spike is fully absent in the ordinary ridge estimates. This leads us to ignore the possibility of a genomic *trans*-effect on KRAS expression levels in colorectal cancer. + +The sample selection demands justification. It yields a clear illustrate-able difference between the ordinary and ridge estimates. When all samples are left in, the *cis*-effect is clearly present, discernable from both estimates that yield a virtually similar profile. + + +======= Generalized ridge regression ======= + +What is generally referred to as `generalized ridge regression' (cf. \citealp{Hoer1970, Hemm1975}) is the particular case of loss function (ref{form:generalizedRidgeLoss}) in which $\mathbf{W} = \mathbf{I}_{nn}$, $\bbeta_0 = \mathbf{0}_{p}$, and $\mathbf{\Delta} = \mathbf{V}_{x} \mathbf{\Lambda} \mathbf{V}_x^{\top}$, where $\mathbf{V}_x$ is obtained from the singular value decomposition of $\mathbf{X}$ (i.e., $\mathbf{X} = \mathbf{U}_{x} \mathbf{D}_x \mathbf{V}_x^{\top}$ with its constituents endowed with the usual interpretation) and $\mathbf{\Lambda}$ a positive definite diagonal matrix. This gives the estimator: +\begin{align*} +\hat{\bbeta}(\mathbf{\Lambda}) & = (\mathbf{X}^{\top} \mathbf{X} + \mathbf{\Delta})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = (\mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top} + \mathbf{V}_x \mathbf{\Lambda} \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x \mathbf{Y} +\\ +& = \mathbf{V}_x (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1} \mathbf{D}_x \mathbf{U}_x \mathbf{Y}. +\end{align*} +From this last expression it becomes clear how this estimator generalizes the `regular ridge estimator'. The latter shrinks all eigenvalues, irrespectively of their size, in the same manner through a common penalty parameter. The `generalized ridge estimator', through differing penalty parameters (i.e. the diagonal elements of $\mathbf{\Lambda}$), shrinks them individually. + +The generalized ridge estimator coincides with the Bayesian linear regression estimator with the normal prior $\mathcal{N}[\mathbf{0}_p, (\mathbf{V}_x \mathbf{\Lambda} \mathbf{V}_x^{\top})^{-1}]$ on the regression parameter $\bbeta$ (and preserving the inverse gamma prior on the error variance). Assume $\mathbf{X}$ to be of full column rank and choose $\mathbf{\Lambda} = g^{-1} \mathbf{D}_x^2$ with $g$ a positive scalar. The prior on $\bbeta$ then - assuming $(\mathbf{X}^{\top} \mathbf{X})^{-1}$ exits - reduces to Zellner's $g$-prior: $\bbeta \sim \mathcal{N}[\mathbf{0}_p, g (\mathbf{X}^{\top} \mathbf{X})^{-1}]$ \citep{Zell1986}. The corresponding estimator of the regression coefficient is: $\hat{\bbeta}(g) = g (1+g)^{-1} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}$, which is proportional to the unpenalized ordinary least squares estimator of $\bbeta$. + +For convenience of notation in the analysis of the generalized ridge estimator the linear regression model is usually rewritten as: +\begin{align*} +\mathbf{Y} & = \mathbf{X} \bbeta + \vvarepsilon \, \, \, = \, \, \, +\mathbf{X} \mathbf{V}_x \mathbf{V}_x^{\top} \bbeta + \vvarepsilon \, \, \, = \, \, \, \tilde{\mathbf{X}} \aalpha + \vvarepsilon, +\end{align*} +with $\tilde{\mathbf{X}} = \mathbf{X} \mathbf{V}_x = \mathbf{U}_x +\mathbf{D}_x$ (and thus $\tilde{\mathbf{X}}^{\top} \tilde{\mathbf{X}} = \mathbf{D}_x^ 2$) and $\aalpha = \mathbf{V}_x^{\top} \bbeta$ with loss function $(\mathbf{Y} - \tilde{\mathbf{X}} \aalpha)^{\top} (\mathbf{Y} - \tilde{\mathbf{X}} \aalpha) + \aalpha^{\top} \mathbf{\Lambda} \aalpha$. In the notation above the generalized ridge estimator is then: +\begin{align*} +\hat{\aalpha}(\mathbf{\Lambda}) & = (\tilde{\mathbf{X}}^{\top} \tilde{\mathbf{X}} + \mathbf{\Lambda})^ {-1} \tilde{\mathbf{X}}^{\top} \mathbf{Y} = (\mathbf{D}_x^ 2 + \mathbf{\Lambda})^{-1} \tilde{\mathbf{X}}^{\top} \mathbf{Y}, +\end{align*} +from which one obtains $\hat{\bbeta}(\mathbf{\Lambda}) = \mathbf{V}_x \hat{\aalpha}(\mathbf{\Lambda})$. Using $\mathbb{E}[\hat{\aalpha}(\mathbf{\Lambda})] = (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1} \mathbf{D}_x^2 \aalpha$ and $\mbox{Var}[\hat{\aalpha}(\mathbf{\Lambda})] = \sigma^2 (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1} \mathbf{D}_x^2 (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1}$, the MSE for the generalized ridge estimator can be written as: +\begin{align*} +\mbox{MSE}[\hat{\aalpha}(\mathbf{\Lambda})] & = \sum_{j=1}^p ( \sigma^2 d_{x,j}^2 + \alpha_j^2 \lambda_{j}^2 ) (d_{x,j}^2 + \lambda_{j} )^{-2}, +\end{align*} +where $d_{x,j} = (\mathbf{D}_x)_{jj}$ and $\lambda_j = (\mathbf{\Lambda})_{jj}$. Having $\aalpha$ and $\sigma^ 2$ available, it is easily seen (equate the derivative w.r.t. $\lambda_j$ to zero and solve) that the MSE of $\hat{\aalpha}(\mathbf{\Lambda})$ is minimized by $\lambda_j = \sigma^2 / \alpha_j^2$ for all $j$. With $\aalpha$ and $\sigma^2$ unknown, cite{Hoer1970} suggest an iterative procedure to estimate the $\lambda_j$'s. Initiate the procedure with the OLS estimates of $\aalpha$ and $\sigma^2$, followed by sequentially updating the $\lambda_j$'s and +the estimates of $\aalpha$ and $\sigma^2$. An analytic expression of the limit of this procedure exists (\citealp{Hemm1975}). This limit, however, still depends on the observed $\mathbf{Y}$ and as such it does not necessarily yield the minimal attainable value of the MSE. This limit may nonetheless still yield a potential gain in MSE. This is investigated in cite{Lawl1981}. Under a variety of cases it seems to indeed outperform the OLS estimator, but there are exceptions. + +======= Conclusion ======= + +To conclude: a note of caution. The generalized ridge penalty is extremely flexible. It can incorporate any prior knowledge on the parameter values (through specification of $\bbeta_0$) and the relations among these parameters (via $\mathbf{\Delta}$). While a pilot study or literature may provide a suggestion for $\bbeta_0$, it is less obvious how to choose an informative $\mathbf{\Delta}$ (although a spatial structure is a nice exception). In general, exact knowledge on the parameters should not be incorporated implicitly via the penalty (read: prior) but preferably be used explicitly in the model - the likelihood - itself. Though this may be the viewpoint of a prudent frequentist and a subjective Bayesian might disagree. + + +======= Exercises ======= +\begin{question} \mbox{ } +\\ +Consider the linear regression model $Y_i = \beta_1 X_{i,1} + \beta_2 X_{i,2} + \varepsilon_i$ for $i=1, \ldots, n$. +Suppose estimates of the regression parameters $(\beta_1, \beta_2)$ of this model are obtained through the minimization of the sum-of-squares augmented with a ridge-type penalty: +\begin{align*} +\Big[ \sum_{i=1}^n (Y_i - \beta_1 X_{i,1} - \beta_2 X_{i,2})^2 \Big] + \lambda (\beta_1^2 + \beta_2^2 + 2 \nu \beta_1 \beta_2), +\end{align*} +with penalty parameters $\lambda \in \mathbb{R}_{> 0}$ and $\nu \in (-1, 1)$. + +\begin{compactitem} +\item[*a)*] Sketch (for both $\nu=0$ and $\nu=0.9$) the shape of the parameter constraint induced by the penalty above and describe in words the qualitative difference between both shapes. + +\item[*b)*] When $\nu = -1$ and $\lambda \rightarrow \infty$ the estimates of $\beta_1$ and $\beta_2$ (resulting from minimization of the penalized loss function above) converge towards each other: +$\lim_{\lambda \rightarrow \infty} \hat{\beta}_1(\lambda, -1) = \lim_{\lambda \rightarrow \infty} \hat{\beta}_2(\lambda, -1)$. Motivated by this observation a data scientists incorporates the equality constraint $\beta_1 = \beta = \beta_2$ explicitly into the model, and s/he estimates the `joint regression parameter' $\beta$ through the minimization (with respect to $\beta$) of: +\begin{align*} +\Big[ \sum_{i=1}^n (Y_i - \beta X_{i,1} - \beta X_{i,2})^2 \Big] + \delta \beta^2, +\end{align*} +with penalty parameter $\delta \in \mathbb{R}_{> 0}$. The data scientist is surprised to find that resulting estimate $\hat{\beta}(\delta)$ does not have the same limiting (in the penalty parameter) behavior as the $\hat{\beta}_1(\lambda, -1)$, i.e. $\lim_{\delta \rightarrow \infty} \hat{\beta} (\delta) \not= \lim_{\lambda \rightarrow \infty} \hat{\beta}_1(\lambda, -1)$. Explain the misconception of the data scientist. + +\item[*c)*] Assume that *i)* $n \gg 2$, *ii)* the unpenalized estimates $(\hat{\beta}_1(0, 0), \hat{\beta}_2(0, 0))$ equal $(-2,2)$, and *iii)* that the two covariates $X_1$ and $X_2$ are zero-centered, have equal variance, and are strongly negatively correlated. Consider $(\hat{\beta}_1(\lambda, \nu), \hat{\beta}_2(\lambda, \nu))$ for both $\nu=-0.9$ and $\nu=0.9$. For which value of $\nu$ do you expect the sum of the absolute value of the estimates to be largest? *Hint:* Distinguish between small and large values of $\lambda$ and think geometrically! +\end{compactitem} +\end{question} + +\begin{question} label{question.generalizedRidgeAndBayes} \mbox{ } +\\ +Consider the linear regression model $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsilon$ with $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_p, \sigma^2 \mathbf{I}_{pp})$. Assume $\bbeta \sim \mathcal{N}(\bbeta_0, \sigma^2 \mathbf{\Delta}^{-1})$ with $\bbeta_0 \in \mathbb{R}^p$ and $\mathbf{\Delta} \succ 0$ and a gamma prior on the error variance. Verify (i.e., work out the details of the derivation) that the posterior mean coincides with the generalized ridge estimator defined as: +\begin{align*} +\hat{\bbeta} & = (\mathbf{X}^{\top} \mathbf{X} + \mathbf{\Delta})^{-1} (\mathbf{X}^{\top} \mathbf{Y} + \mathbf{\Delta} \bbeta_0). +\end{align*} +\end{question} + + + +\begin{question} label{question.ridgeAR1penalty} \mbox{ } +\\ +The ridge penalty may be interpreted as a multivariate normal prior on the regression coefficients: $\bbeta \sim \mathcal{N}(\mathbf{0}, \lambda^{-1} \mathbf{I}_{pp})$. Different priors may be considered. In case the covariates are spatially related in some sense (e.g. genomically), it may of interest to assume a first-order autoregressive prior: $\bbeta \sim \mathcal{N}(\mathbf{0}, \lambda^{-1} \SSigma_A)$, in which $\SSigma_A$ is a $p \times p$-correlation matrix with $(\SSigma_A)_{j_1, j_2} = \rho^{ | j_1 - j_2 | } $ for some correlation coefficient $\rho \in [0, 1)$. Hence, +\begin{align*} +\SSigma_A \, \, \, = \, \, \, +\left( +\begin{array}{cccc} +1 & \rho & \ldots & \rho^{p-1} +\\ +\rho & 1 & \ldots & \rho^{p-2} +\\ +\vdots & \vdots & \ddots & \vdots +\\ +\rho^{p-1} & \rho^{p-2} & \ldots & 1 +\end{array} +\right). +\end{align*} + +\begin{compactitem} +\item[*a)*] The penalized loss function associated with this AR(1) prior is: +\begin{align*} +\mathcal{L}(\bbeta; \lambda, \SSigma_A) & = \| \mathbf{Y} - \mathbf{X} \bbeta \|_2^2 + \lambda \bbeta^{\top} \SSigma_A^{-1} \bbeta. +\end{align*} +Find the minimizer of this loss function. + +\item[*b)*] What is the effect of $\rho$ on the ridge estimates? Contrast this to the effect of $\lambda$. Illustrate this on (simulated) data. + +\item[*c)*] Instead of an AR(1) prior assume a prior with a uniform correlation between the elements of $\bbeta$. That is, replace $\SSigma_A$ by $\SSigma_U$, given by: +\begin{align*} +\SSigma_U \, \, \, = \, \, \, \left( +\begin{array}{ccc} +1 & \rho & \rho +\\ +\rho & 1 & \rho +\\ +\rho & \rho & 1 +\end{array} +\right) +\end{align*} +\\ +Investigate (again on data) the effect of changing from the AR(1) to the uniform prior on the ridge regression estimates. +\end{compactitem} +\end{question} + + + + +========= Ridge logistic regression ========= label{sect.ridgeLogistic} +# ======= Ridge logistic regression ======= + +Ridge penalized estimation is not limited to the standard linear regression model, but may be used to estimate (virtually) any model. Here we illustrate how it may be used to fit the logistic regression model. To this end we first recap this model and the (unpenalized) maximum likelihood estimation of its parameters. After which the model is estimated by means of ridge penalized maximum likelihood, which will turn out to be a relatively straightforward modification of unpenalized estimation. + +======= Logistic regression ======= + +The logistic regression model explains a binary response variable (through some transformation) by a linear combination of a set of covariates (as in the linear regression model). Denote this response of the $i$-th sample by $Y_i$ with $Y_i \in \{ 0, 1 \}$ for $i=1, \ldots, n$. The $n$-dimensional column vector $\mathbf{Y}$ stacks these $n$ responses. For each sample information on the $p$ explanatory variables $X_{i,1}, \ldots, X_{i,p}$ is available. In row vector form this information is denoted $\mathbf{X}_{i,\ast} = (X_{i,1}, \ldots, X_{i,p})$. Or, in short, $\mathbf{X}_i$ when the context tolerates no confusion. The $(n \times p)$-dimensional matrix $\mathbf{X}$ aggregates these vectors, such that $\mathbf{X}_i$ is the $i$-th row vector. + +The binary response cannot be modelled as in the linear model like $Y_i = \mathbf{X}_i \bbeta + \varepsilon_i$. With each element of $\mathbf{X}_i$ and $\bbeta$ assuming a value in $\mathbb{R}$, the linear predictor is not restricted to the domain of the response. This is resolved by modeling $p_i = P(Y_i = 1)$ instead. Still the linear predictor may exceed the domain of the response ($p_i \in [0,1]$). Hence, a transformation is applied to map $p_i$ to $\mathbb{R}$, the range of the linear predictor. +# original latex figure with scale=0.40, angle=0 + +FIGURE: [logistic_effectOfBeta0.eps, width=400 frac=1.0] Top row, left panel: the response curve for various choices of the intercept $\beta_0$. Top row, right panel: the response curve for various choices of the regression coefficent $\beta_1$. Bottom row, left panel: the responce curve for various choices of the link function. Bottom panel, right panel: observations, fits and their deviations. } label{fig.logisticRidge_modelAndFitIllustration +The transformation associated with the logistic regression model is the logarithm of the odds, with the odds defined as: $\mbox{*odds*} = P(\mbox{succes}) / P(\mbox{failure}) = p_i/ (1-p_i)$. The logistic model is then written as $\log[ p_i / (1-p_i)] = \mathbf{X}_i \bbeta$ for all $i$. Or, expressed in terms of the response: +\begin{align*} +p_i & = P(Y_i = 1) \, \, \, = \, \, \, g^{-1}(\mathbf{X}_i; \bbeta) \, \, \, = \, \, \,\frac{\exp(\mathbf{X}_i \bbeta) }{1 + \exp(\mathbf{X}_i \bbeta) }. +\end{align*} +The function $g(\cdot; \cdot)$ is called the *link function*. It links the response to the explanatory variables. The one above is called the logistic link function. Or short, logit. The regression parameters have tangible interpretations. When the first covariate represents the intercept, i.e. $X_{i,j} = 1$ for all $i$, then $\beta_1$ determines where the link function equals a half when all other covariates fail to contribute to the linear predictor (i.e. where $P (Y_i = 1 \, | \, \mathbf{X}_{i}) = 0.5$ when $\mathbf{X}_{i} \bbeta = \beta_1$). This is illustrated in the top-left panel of Figure ref{fig.logisticRidge_modelAndFitIllustration} for various choices of the intercept. On the other hand, the regression parameters are directly related to the odds ratio: $\mbox{*odds ratio*} = \mbox{odds}(X_{i,j}+1) / \mbox{odds}(X_{i,j}) = \exp(\beta_j)$. Hence, the effect of a unit change in the $j$-th covariate on the odds ratio is $\exp(\beta_j)$ (see Figure ref{fig.logisticRidge_modelAndFitIllustration}, top-right panel). Other link functions (depicted in Figure ref{fig.logisticRidge_modelAndFitIllustration}, bottom-left panel) are common, e.g. the *probit*: $p_i = \Phi_{0,1}(\mathbf{X}_i \bbeta)$; the *cloglog*: $p_i = \frac{1}{\pi} \arctan(\mathbf{X}_i \bbeta) + \frac{1}{2}$; the *Cauchit*: $p_i = \exp[ - \exp(\mathbf{X}_i \bbeta)]$. All these link function are invertible. Irrespective of the choice of the link function, the binary data are thus modelled as $Y_i \sim \mathcal{B}[g^{-1}(\mathbf{X}_i; \bbeta), 1]$. That is, as a single draw from the Binomial distribution with success probability $g^{-1}(\mathbf{X}_i; \bbeta)$. + + +Let us now estimate the parameter of the logistic regression model by means of the maximum likelihood method. The likelihood of the experiment is then: +\begin{align*} +L(\mathbf{Y} \, | \, \mathbf{X}; \bbeta) & = \prod_{i=1}^n \big[ P(Y_i = 1 \, | \, \mathbf{X}_i) \big]^{Y_i} \big[ P(Y_i = 0 \, | \, \mathbf{X}_i) \big]^{1-Y_i}. +\end{align*} +After taking the logarithm and some ready algebra, the log-likelihood is found to be: +\begin{align*} +\mathcal{L}(\mathbf{Y} \, | \, \mathbf{X}; \bbeta) & = \sum_{i=1}^n \big\{ Y_i \mathbf{X}_i \bbeta - \log [ 1 + \exp(\mathbf{X}_i \bbeta) ] \big\}. +\end{align*} +Differentiate the log-likelihood with respect to $\bbeta$, equate it zero, and obtain the estimating equation for $\bbeta$: + +!bt + +!bt +\begin{align} label{form:logisticRidge_estimatingEquationOfBeta} +\frac{\partial \mathcal{L}}{\partial \bbeta } & = \sum_{i=1}^n \Big[ Y_i - \frac{\exp(\mathbf{X}_i \bbeta)}{ 1 + \exp(\mathbf{X}_i \bbeta)} \Big] \mathbf{X}_i^{\top} \, \, \, = \, \, \, \mathbf{0}_p. +\end{align} +!et +!et +The ML estimate of $\bbeta$ strikes a (weighted by the $\mathbf{X}_i$) balance between observation and model. Put differently (and illustrated in the bottom-right panel of Figure ref{fig.logisticRidge_modelAndFitIllustration}), a curve is fit through data by minimizing the distance between them: at the ML estimate of $\bbeta$ a weighted average of their deviations is zero. + +The maximum likelihood estimate of $\bbeta$ is evaluated by solving Equation (ref{form:logisticRidge_estimatingEquationOfBeta}) with respect to $\bbeta$ by means of the Newton-Raphson algorithm. The Newton-Raphson algorithm iteratively finds the zeros of a smooth enough function $f(\cdot)$. Let $x_0$ denote an initial guess of the zero. Then, approximate $f(\cdot)$ around $x_0$ by means of a first order Taylor series: $f(x) \approx x_0 + (x - x_0) \, (d f / d x) |_{x=x_0}$. Solve this for $x$ and obtain: $x = x_0 - [ (d f / d x) |_{x=x_0} ]^{-1} f(x_0)$. Let $x_1$ be the solution for $x$, use this as the new guess and repeat the above until convergence. When the function $f(\cdot)$ has multiple arguments, is vector-valued and denoted by $\vec{\mathbf{f}}$, and the Taylor approximation becomes: $\vec{\mathbf{f}}(\mathbf{x}) \approx \mathbf{x}_0 + J \vec{\mathbf{f}} \big|_{\mathbf{x}=\mathbf{x}_0} (\mathbf{x} - \mathbf{x}_0)$ with +\begin{align*} +J \vec{\mathbf{f}} = \left( +\begin{array}{llll} +\frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \ldots & \frac{\partial f_1}{\partial x_p} +\\ +\frac{\partial f_1}{\partial x_1} & \frac{\partial f_2}{\partial x_2} & \ldots & \frac{\partial f_2}{\partial x_p} +\\ +\vdots & \vdots & \ddots & \vdots +\\ +\frac{\partial f_q}{\partial x_1} & \frac{\partial f_q}{\partial x_2} & \ldots & \frac{\partial f_q}{\partial x_p} +\end{array} +\right), +\end{align*} +the Jacobi matrix. An update of $x_0$ is now readily constructed by solving (the approximation for) $\vec{\mathbf{f}}(\mathbf{x}) = \mathbf{0}$ for $\mathbf{x}$. + +When applied here to the maximum likelihood estimation of the regression parameter $\bbeta$ of the logistic regression model, the Newton-Raphson update is: +\begin{align*} +\hat{\bbeta}^{\mbox{{\scriptsize new}}} & = \hat{\bbeta}^{\mbox{{\scriptsize old}}} - \Big( \frac{\partial^2 \mathcal{L}}{\partial \bbeta \partial \bbeta^{\top}} \Big)^{-1} \Big|_{\bbeta = \hat{\bbeta}^{\mbox{{\tiny old}}} } \, \, \frac{\partial \mathcal{L}}{\partial \bbeta } \Big|_{\bbeta = \hat{\bbeta}^{\mbox{{\tiny old}}} } +\end{align*} +where the Hessian of the log-likelihood equals: +\begin{align*} +\frac{\partial^2 \mathcal{L}}{\partial \bbeta \partial \bbeta^{\top}} & = - \sum_{i=1}^n \frac{\exp(\mathbf{X}_i \bbeta)}{ [1 + \exp(\mathbf{X}_i \bbeta)]^2} \mathbf{X}_i^{\top} \mathbf{X}_i. +\end{align*} +Iterative application of this updating formula converges to the ML estimate of $\bbeta$. + +The Newton-Raphson algorithm is often reformulated as an iteratively re-weighted least squares algorithm. Hereto, first write the gradient and Hessian in matrix notation: +\begin{align*} +\frac{\partial \mathcal{L}}{\partial \bbeta } \, \, \, = \, \, \, \mathbf{X}^{\top} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta)] +& \mbox{ and } & +\frac{\partial^2 \mathcal{L}}{\partial \bbeta \partial \bbeta^{\top}} \, \, \, = \, \, \, - \mathbf{X}^{\top} \mathbf{W} \mathbf{X}, +\end{align*} +where $\vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta) = [g^{-1}( \mathbf{X}_{1, \ast}; \bbeta), \ldots, g^{-1}( \mathbf{X}_{n, \ast}; \bbeta)]^{\top}$ with $g^{-1}(\cdot; \cdot) = \exp(\cdot; \cdot) / [1 + \exp(\cdot; \cdot)]$ and $\mathbf{W}$ diagonal with $(\mathbf{W})_{ii} = \exp(\mathbf{X}_i \hat{\bbeta}^{\mbox{{\scriptsize old}}} ) [ 1 + \exp(\mathbf{X}_i \hat{\bbeta}^{\mbox{{\scriptsize old}}} ) ]^{-2}$. The updating formula of the estimate then becomes: +\begin{align*} +\hat{\bbeta}^{\mbox{{\scriptsize new}}} & = \hat{\bbeta}^{\mbox{{\scriptsize old}}} + (\mathbf{X}^{\top} \mathbf{W} \mathbf{X})^{-1} \mathbf{X}^{\top} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta^{\mbox{{\scriptsize old}}})] +\\ +& = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{W} \{ \mathbf{X} \hat{\bbeta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta^{\mbox{{\scriptsize old}}})] \} +\\ +& = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{Z}, +\end{align*} +where $\mathbf{Z} = \{ \mathbf{X} \hat{\bbeta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta^{\mbox{{\scriptsize old}}})] \}$. The Newton-Raphson update is thus the solution to the following weighted least squares problem: +\begin{align*} +\hat{\bbeta}^{\mbox{{\scriptsize new}}} & = \arg \min_{\bbeta} (\mathbf{Z} - \mathbf{X} \bbeta)^{\top} \mathbf{W} (\mathbf{Z} - \mathbf{X} \bbeta). +\end{align*} +Effectively, at each iteration the *adjusted response* $\mathbf{Z}$ is regressed on the covariates that comprise $\mathbf{X}$. For more on logistic regression confer the monograph of cite{Hosm2013}. + + +======= Ridge estimation ======= + +High-dimensionally, the linear predictor $\mathbf{X} \bbeta$ may be uniquely defined, but the maximum likelihood estimate of the logistic regression parameter is not. Assume $p > n$ and an estimate $\hat{\bbeta}$ available. Due to the high-dimensionality, the null space of $\mathbf{X}$ is non-trivial. Hence, let $\ggamma \in \mbox{null}(\mbox{span}(\mathbf{X}))$. Then: $\mathbf{X} \hat{\bbeta} = \mathbf{X} \hat{\bbeta} + \mathbf{X} \ggamma = \mathbf{X} (\hat{\bbeta} + \ggamma)$. As the null space is a $p-n$-dimensional subspace, $\ggamma$ need not equal zero. Hence, an infinite number of estimates of the logistic regression parameter exists that yield the same log-likelihood. Augmentation of the loss function with a ridge penalty resolves the matter, as their sum is strictly concave in $\bbeta$ (not convex as a maximum rather than a minimum is sought here) and thereby has a unique maximum. + +# original latex figure with scale=0.40, angle=0 + +FIGURE: [logisticPenLL2ridgePenalty.eps, width=400 frac=1.0] Top row, left panel: contour plot of the penalized log-likelihood of a logistic regression model with the ridge constraint (red line). Top row, right panel: the regularization paths of the ridge estimator of the logistic regression parameter. Bottom row, left panel: variance of the ridge estimator of the logistic regression parameter against the logarithm of the penalty parameter. Bottom panel, right panel: the predicted success probability versus the linear predictor for various choices of the penalty parameter. } label{fig.logisticRidge_effectOfPenalization +\mbox{ } + + +Ridge maximum likelihood estimates of the logistic model parameters are found by the maximization of the ridge penalized loglikelihood (cf. \citealt{Scha1984,LeCe1992}): +\begin{align*} +\mathcal{L}^{\mbox{{\tiny pen}}}(\mathbf{Y}, \mathbf{X}; \bbeta, \lambda) & = \mathcal{L} (\mathbf{Y}, \mathbf{X}; \bbeta) - \tfrac{1}{2} \lambda \| \bbeta \|_2^2 +\\ +& = \sum_{i=1}^n \big\{ Y_i \mathbf{X}_i \bbeta - \log [ 1 + \exp(\mathbf{X}_i \bbeta) ] \big\} - \tfrac{1}{2} \lambda \bbeta^{\top} \bbeta, +\end{align*} +where the second summand is the ridge penalty (the sum of the square of the elements of $\bbeta$) with $\lambda$ the penalty parameter. Note that as in Section ref{sect.constrainedEstimation} maximization of this penalized loss function can be reformulated as a constrained estimation problem. This is illustrated by the top left panel of Figure ref{fig.logisticRidge_effectOfPenalization}, which depicts the contours (black lines) of the log-likelihood and the spherical domain of the parameter (red line). The optimization of the above loss function proceeds, due to the differentiability of the penalty, fully analogous to the unpenalized case and uses the Newton-Raphson algorithm for solving the (penalized) estimating equation. Hence, the unpenalized ML estimation procedure is modified straightforwardly by replacing gradient and Hessian by their `penalized' counterparts: +\begin{align*} +\frac{\partial \mathcal{L}^{\mbox{{\tiny pen}}}}{\partial \bbeta } \, \, \, = \, \, \, \frac{\partial \mathcal{L}}{\partial \bbeta } - \lambda \bbeta & \mbox{ and } & \frac{\partial^2 \mathcal{L}^{\mbox{{\tiny pen}}}}{\partial \bbeta \partial \bbeta^{\top}} \, \, \, = \, \, \, \frac{\partial^2 \mathcal{L}}{\partial \bbeta \partial \bbeta^{\top}} - \lambda \mathbf{I}_{pp}. +\end{align*} +With these at hand, the Newton-Raphson algorithm is (again) reformulated as an iteratively re-weighted least squares algorithm with the updating step changes accordingly to: +\begin{align*} +\hat{\bbeta}^{\mbox{{\scriptsize new}}} & = \hat{\bbeta}^{\mbox{{\scriptsize old}}} + \mathbf{V}^{-1} \{ \mathbf{X}^{\top} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta^{\mbox{{\scriptsize old}}}) ] - \lambda \bbeta^{\mbox{{\scriptsize old}}} \} +\\ +& = \mathbf{V}^{-1} \mathbf{V} \hat{\bbeta}^{\mbox{{\scriptsize old}}} - \lambda \mathbf{V}^{-1} \hat{\bbeta}^{\mbox{{\scriptsize old}}} + \mathbf{V}^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta^{\mbox{{\scriptsize old}}})] +\\ +& = \mathbf{V}^{-1} \mathbf{X}^{\top} \mathbf{W} \{ \mathbf{X} \hat{\bbeta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta^{\mbox{{\scriptsize old}}})] \} +\\ +& = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{Z}, +\end{align*} +where $\mathbf{V} = \mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp}$ and $\mathbf{W}$ and $\mathbf{Z}$ as before. Hence, use this to update the estimate of $\bbeta$ until convergence, which yields the desired ridge ML estimate. + +Obviously, the ridge estimate of the logistic regression parameter tends to zero as $\lambda \rightarrow \infty$. Now consider a linear predictor with an intercept that is left unpenalized. When $\lambda$ tends to infinity, all regression coefficients but the intercept vanish. The intercept is left to model the success probability. Hence, in this case $\lim_{\lambda \rightarrow \infty} \hat{\beta}_0 (\lambda) = \log [ \tfrac{1}{n} \sum_{i=1}^n Y_i / \tfrac{1}{n} \sum_{i=1}^n (1-Y_i)]$. + + +# original latex figure with scale=0.40, angle=0 + +FIGURE: [logisticRidge_effectOnPrediction_lambda0.eps, width=400 frac=1.0] The realized design as scatter plot ($X_1$ vs $X_2$ overlayed by the success (\textcolor{red}{RED}) and failure regions (\textcolor{green}{GREEN}) for various choices of the penalty parameter: $\lambda = 0$ (top row, left panel), $\lambda = 10$ (top row, right panel) $\lambda = 40$ (bottom row, left panel), $\lambda = 100$ (bottom row, right panel).} label{fig.logisticRidge_effectOnPrediction + + + +The effect of the ridge penalty on parameter estimates propagates to the predictor $\hat{p}_i$. The linear predictor of the linear regression model involving the ridge estimator $\mathbf{X}_i \hat{\bbeta}(\lambda)$ shrinks towards a common value for each $i$, leading to a scale difference between observation and predictor (as seen before in Section ref{sect.ridgeRegressionDataIllustration}). This behaviour transfers to the ridge logistic regression predictor, as is illustrated on simulated data. The dimension and sample size of these data are $p=2$ and $n=200$, respectively. The covariate data are drawn from the standard normal, while that of the response is sampled from a Bernoulli distribution with success probability $P(Y_i=1) = \exp(2 X_{i,1} - 2 X_{i,2}) / [ 1 + \exp(2 X_{i,1} - 2 X_{i,2})]$. The logistic regression model is estimated from these data by means of ridge penalized likelihood maximization with various choices of the penalty parameter. The bottom right plot in Figure ref{fig.logisticRidge_effectOfPenalization} shows the predicted success probability versus the linear predictor for various choices of the penalty parameter. Larger values of the penalty parameter $\lambda$ flatten the slope of this curve. Consequently, for larger $\lambda$ more excessive values of the covariates are needed to achieve the same predicted success probability as those obtained with smaller $\lambda$ at more moderate covariate values. The implications for the resulting classification may become clearer when studying the effect of the penalty parameter on the `failure' and `success regions' respectively defined by: +\\ +\indent $\{(x_1, x_2) : P({\color{green}{\mathbf{Y=0}}} \, | \, X_1=x_1, X_2=x_2, \hat{\bbeta}(\lambda)) > 0.75 \}$, +\\ +\indent $\{(x_1, x_2) : P({\color{red}{\mathbf{Y=1}}} \, | \, X_1=x_1, X_2=x_2, \hat{\bbeta}(\lambda)) > 0.75 \}$. +\\ +This separates the design space in a light red (`failure') and light green (`success') domain. The white bar between them is the domain where samples cannot be classified with high enough certainty. As $\lambda$ grows, so does the white area that separates the failure and success regions. Hence, as stronger penalization shrinks the logistic regression parameter estimate towards zero, it produces a predictor that is less outspoken in its class assignments. + + + + +======= Moments ======= + +The $1^{\mbox{{\tiny st}}}$ and $2^{\mbox{{\tiny nd}}}$ order moment of the ridge ML parameter of the logistic model may be approximated by the final update of the Newton-Raphson estimate. Assume the one-to-last update $\hat{\bbeta}^{\mbox{{\scriptsize old}}}$ to be non-random and proceed as for the ridge estimator of the linear regression model parameter to arrive at: +# \begin{align*} +# & & \hat{\bbeta}^{\mbox{{\scriptsize new}}} = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + 2 \lambda \mathbf{I}_{p \times p} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{z} +# \end{align*} +\begin{align*} +\mathbb{E} \big( \hat{\bbeta}^{\mbox{{\scriptsize new}}} \big) & = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbb{E}( \mathbf{Z}), +\\ +\mbox{Var} \big( \hat{\bbeta}^{\mbox{{\scriptsize new}}} \big) & = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \big[ \mbox{Var} ( \mathbf{Z} ) \big] \mathbf{W} \mathbf{X} [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}, +\end{align*} +with +\begin{align*} +\mathbb{E}(\mathbf{Z}) & = \{ \mathbf{X} \hat{\bbeta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbb{E}(\mathbf{Y}) - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta^{\mbox{{\scriptsize old}}})] \}, +\\ +\mbox{Var}(\mathbf{Z}) & = \mathbf{W}^{-1} \mbox{Var}(\mathbf{Y}) \mathbf{W}^{-1} = \mathbf{W}^{-1}, +\end{align*} +where the identity $\mbox{Var}(\mathbf{Y}) = \mathbf{W}$ follows from the variance of a Binomial distributed random variable. From these expressions similar properties as for the ridge ML estimate of the regression parameter of the linear model may be deduced. For instance, the ridge ML estimate of the logistic regression parameter converges to zero as the penalty parameter tends to infinity (confer the top right panel of Figure ref{fig.logisticRidge_effectOfPenalization}). Similarly, their variances vanish as $\lambda \rightarrow \infty$ (illustrated in the bottom left panel of Figure ref{fig.logisticRidge_effectOfPenalization}). + +======= The Bayesian connection ======= + +All penalized estimators can be formulated as Bayesian estimators, including the ridge logistic estimator. In particular, ridge estimators correspond to Bayesian estimators with a multivariate normal prior on the regression coefficients. Thus, assume $\bbeta \sim \mathcal{N}(\mathbf{0}_p, \mathbf{\Delta}^{-1})$. The posterior distribution of $\bbeta$ then is: +\begin{align*} +f_{\bbeta}(\bbeta \, | \, \mathbf{Y}, \mathbf{X}) & \propto & \Big\{ \prod_{i=1}^n \big[ P(Y_i = 1 \, | \, \mathbf{X}_i) \big]^{Y_i} \big[ P(Y_i = 0 \, | \, \mathbf{X}_i) \big]^{1-Y_i} \Big\} \exp( - \tfrac{1}{2} \bbeta \mathbf{\Delta} \bbeta). +\end{align*} +This does not coincide with any standard distribution. But, under appropriate conditions, the posterior distribution is asymptotically normal. This invites a (multivariate) normal approximation to the posterior distribution above. The Laplace's method provides (cf. \citealp{Bish2006}). + +# original latex figure with scale=0.40, angle=0 + +FIGURE: [logisticRidge_laplace2posterior.eps, width=400 frac=1.0] Right panel: Laplace approximation to the posterior density of the Bayesian logistic regression parameter.} label{fig.logisticRidge_MSEandLaplace2posterior + +Laplace's method *i)* centers the normal approximation at the mode of the posterior, and *ii)* chooses the covariance to match the curvature of the posterior at the mode. The posterior mode is the location of the maximum of the posterior distribution. The location of this maximum coincides with that of the logarithm of the posterior. The latter is the log-likelihood augmented with a ridge penalty. Hence, the posterior mode, which is taken as the mean of the approximating Gaussian, coincides +with the ridge logistic estimator. For the covariance of the approximating Gaussian, the logarithm of the posterior is approximated by a second order Taylor series around the posterior mode and limited to second order terms: +\begin{align*} +\log[f_{\bbeta}(\bbeta \, | \, \mathbf{Y}, \mathbf{X})] & \propto & +\left. \log[f_{\bbeta}(\bbeta \, | \, \mathbf{Y}, \mathbf{X})] +\right|_{\bbeta = \hat{\bbeta}_{\mbox{{\tiny MAP}}}} +\\ +& & + \tfrac{1}{2} (\bbeta - \hat{\bbeta}_{\mbox{{\tiny MAP}}})^{\top} \left. \frac{\partial^2}{\partial \bbeta \partial \bbeta^{\top}} +\log[f_{\bbeta}(\bbeta \, | \, \mathbf{Y}, \mathbf{X})] + \right|_{\bbeta = \hat{\bbeta}_{\mbox{{\tiny MAP}}}} (\bbeta - \hat{\bbeta}_{\mbox{{\tiny MAP}}})^{\top}, +\end{align*} +in which the first order term cancels as the derivative of $f_{\bbeta}(\bbeta \, | \, \mathbf{Y}, \mathbf{X})$ with respect to $\bbeta$ vanishes at the posterior mode - its maximum. Take the exponential of this approximation and match its arguments to that of a multivariate Gaussian $\exp[-\tfrac{1}{2} (\bbeta - \mmu_{\beta})^{\top} \mathbf{\Sigma}_{\bbeta}^{-1} (\bbeta - \mmu_{\beta})]$. The covariance of the sought Gaussian approximation is thus the inverse of the Hessian of the negative penalized log-likelihood. Put together the posterior is approximated by: +\begin{align*} +\bbeta \, | \, \mathbf{Y}, \mathbf{X} \sim \mathcal{N} \Big( \hat{\bbeta}_{\mbox{{\tiny MAP}}}, \Big\{ \mathbf{\Delta} + \sum_{i=1}^n \frac{\exp(\mathbf{X}_i \bbeta)}{ [1+ \exp(\mathbf{X}_i \bbeta) ]^2 } \mathbf{X}_i \mathbf{X}_i^{\top} \Big\}^{-1} \Big). +\end{align*} +The Gaussian approximation is convenient but need not be good. Fortunately, the Bernstein-Von Mises Theorem \citep{VdVa2000} tells it is very accurate when the model is regular, the prior smooth, and the sample size sufficiently large. The quality of the approximation for an artificial example data set is shown in Figure ref{fig.logisticRidge_MSEandLaplace2posterior}. + +======= Penalty parameter selection ======= + +As before the penalty parameter may be chosen through $K$-fold cross-validation. For the $K=n$ case cite{Meij2013} describe a computationally efficient approximation of the leave-one-out cross-validated loglikelihood. It is based on the exact evaluation of the LOOCV loss, discussed in Section ref{subsect.crossvalidation}, that avoided resampling. The approach of cite{Meij2013} hinges upon the first-order Taylor expansion of the left-out penalized loglikelihood of the left-out estimate $\hat{\bbeta}_{-i} (\lambda)$ around $\hat{\bbeta} (\lambda)$, which yields an approximation of the former: +\begin{align*} +\hat{\bbeta}_{-i} (\lambda) & \approx \hat{\bbeta} (\lambda) - +\left( \left. \frac{\partial^2 \mathcal{L}_{-i}^{\mbox{{\tiny pen}}}}{\partial \bbeta \partial \bbeta^{\top}} \right|_{\bbeta = \hat{\bbeta}(\lambda)} \right)^{-1} \left. \frac{\partial \mathcal{L}_{-i}^{\mbox{{\tiny pen}}}}{\partial \bbeta } \right|_{\bbeta = \hat{\bbeta}(\lambda)} +\\ +& = \hat{\bbeta} (\lambda) + (\mathbf{X}_{- i, \ast}^{\top} \mathbf{W}_{-i, -i} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1} \{ \mathbf{X}_{- i, \ast}^{\top} [\mathbf{Y}_{-i} - \vec{\mathbf{g}}^{-1}(\mathbf{X}_{-i, \ast}; \hat{\bbeta}(\lambda))] - \lambda \hat{\bbeta}(\lambda) \}. +\end{align*} +This approximation involves the inverse of a $p \times p$ dimensional matrix, which amounts to the evaluation of $n$ such inverses for the LOOCV loss. As in Section ref{subsect.crossvalidation} this may be avoided. Rewrite both the gradient and the Hessian of the left-out loglikelihood in the approximation of the preceding display: +\begin{align*} +\mathbf{X}_{-i, \ast}^{\top} \{ \mathbf{Y}_{-i} - \vec{\mathbf{g}}^{-1}(\mathbf{X}_{-i, \ast}; \hat{\bbeta}(\lambda)]\} - \lambda \hat{\bbeta}(\lambda) +& = \mathbf{X}^{\top} \{ \mathbf{Y} - \vec{\mathbf{g}}^{-1}[\mathbf{X}; \hat{\bbeta}(\lambda)]\} - \lambda \hat{\bbeta}(\lambda) +- \mathbf{X}_{i, \ast}^{\top} \{Y_{i} - g^{-1}[\mathbf{X}_{i, \ast}; \hat{\bbeta}(\lambda)]\} +\\ +& = - \mathbf{X}_{i, \ast}^{\top} \{Y_{i} - g^{-1}[\mathbf{X}_{i, \ast}; \hat{\bbeta}(\lambda)]\} +\end{align*} +and +\begin{align*} +(\mathbf{X}_{- i, \ast}^{\top} \mathbf{W}_{-i, -i} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1} & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} + \mathbf{W}_{ii} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} +\\ +& & \qquad \qquad \qquad \qquad \qquad \quad [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1}, +\end{align*} +where the Woodbury identity has been used and now $\mathbf{H}_{ii}(\lambda) = \mathbf{W}_{ii} \mathbf{X}_{i, \ast}(\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top}$. Substitute both in the approximation of the left-out ridge logistic regression estimator and manipulate as in Section ref{subsect.crossvalidation} to obtain: +\begin{align*} +\hat{\bbeta}_{- i}(\lambda) & \approx \hat{\bbeta}(\lambda) - (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - g^{-1}(\mathbf{X}_{i, \ast}; \hat{\bbeta}(\lambda)) ]. +\end{align*} +Hence, the leave-one-out cross-validated loglikelihood $\sum_{i=1}^n \mathcal{L} [Y_i \, | \, \mathbf{X}_{i, \ast}, \hat{\bbeta}_{-i}(\lambda)]$ can now be evaluated by means of a single inverse of a $p \times p$ dimensional matrix and some matrix multiplications. For the performance of this approximation in terms of accuracy and speed confer cite{Meij2013}. + + + + + + +======= Application ======= + +The ridge logistic regression is used here to explain the status (dead or alive) of ovarian cancer samples at the close of the study from gene expression data at baseline. Data stem from the TCGA study \citep{TCGA2011ovarian}, which measured gene expression by means of sequencing technology. Available are 295 samples with both status and transcriptomic profiles. These profiles are composed of 19990 transcript reads. The sequencing data, being representative of the mRNA transcript count, is heavily skewed. cite{Zwie2014} show that a simple transformation of the data prior to model building generally yields a better model than tailor-made approaches. Motivated by this observation the data were - to accommodate the zero counts - $\mbox{asinh}$-transformed. The logistic regression model is then fitted in ridge penalized fashion, leaving the intercept unpenalized. The ridge penalty parameter is chosen through 10-fold cross-validation minimizing the cross-validated error. R-code, and that for the sequel of this example, is to be found below. + +\lstinputlisting{ridgeLogistic_ovarianExample.r} + +The fit of the resulting model is studied. Hereto the fitted linear predictor $\mathbf{X} \hat{\bbeta}(\lambda_{\mbox{\tiny opt}})$ is plotted against the status (Figure ref{fig:logisticRidge_ovarianExample}, left panel). The plot shows some overlap between the boxes, but also a clear separation. The latter suggests gene expression at baseline thus enables us to distinguish surviving from the to-be-diseased ovarian cancer patients. Ideally, a decision rule based on the linear predictor can be formulated to predict an individual's outcome. + +# original latex figure with scale=0.40, angle=0 + +FIGURE: [ridgeLogistic_ovarianExample_fit.ps, width=400 frac=1.0] Left panel: Box plot of the status vs. the fitted linear predictor using the full data set. Right panel: Box plot of the status vs. the linear prediction in the left-out samples of the 10 folds.} label{fig:logisticRidge_ovarianExample + + +The fit, however, is evaluated on the samples that have been used to build the model. This gives no insight on the model's predictive performance on novel samples. A replication of the study is generally costly and comparable data sets need not be at hand. A common workaround is to evaluate the predictive performance on the same data \citep{Subr2010}. This requires to put several samples aside for performance evaluation while the remainder is used for model building. The left-out sample may accidently be chosen to yield an exaggerated (either dramatically poor or overly optimistic) performance. This is avoided through the repetition of this exercise, leaving (groups of) samples out one at the time. The left-out performance evaluations are then averaged and believed to be representative of the predictive performance of the model on novel samples. +Note that, effectively, as the model building involves cross-validation and so does the performance evaluation, a double cross-validation loop is applied. This procedure is applied with a ten-fold split in both loops. Denote the outer folds by $f = 1, \ldots, 10$. Then, $\mathbf{X}_{f}$ and $\mathbf{X}_{-f}$ represent the design matrix of the samples comprising fold $f$ and that of the remaining samples, respectively. Define $\mathbf{Y}_{f}$ and $\mathbf{Y}_{-f}$ similarly. The linear prediction for the left-out fold $f$ is then $\mathbf{X}_{f} \hat{\bbeta}_{-f} (\lambda_{\mbox{{\tiny opt, -f}}})$. For reference to the fit, this is compared to $\mathbf{Y}_{f}$ visually by means of a boxplot as used above (see Figure ref{fig:logisticRidge_ovarianExample}, right panel). The boxes overlap almost perfectly. Hence, little to nothing remains of the predictive power suggested by the boxplot of the fit. The fit may thus give a reasonable description of the data at hand, but it extrapolates poorly to new samples. + + +======= Conclusion ======= + +To deal with response variables other than continuous ones, ridge logistic regression was discussed. High-dimensionally, the empirical identifiability problem then persists. Again, penalization came to the rescue: the ridge penalty may be combined with other link functions than the identity. Properties of ridge regression were shown to carry over to its logistic equivalent. + + + + + + +======= Exercises ======= +\begin{question} label{question.ridgeCoxNewtonRaphson} \mbox{ } +\\ +Consider an experiment involving $n$ cancer samples. For each sample $i$ the transcriptome of its tumor has been profiled and is denoted $\mathbf{X}_{i} = (X_{i1}, \ldots, X_{ip})^{\top}$ where $X_{ij}$ represents the gene $j=1, \ldots, p$ in sample $i$. Additionally, the overall survival data, $(Y_i, c_i)$ for $i=1, \ldots,n$ of these samples is available. In this $Y_i$ denotes the survival time of sample $i$ and $c_i$ the event indicator with $c_i = 0$ and $c_i = 1$ representing non- and censoredness, respectively. You may ignore the possibility of ties in the remainder. + +\begin{compactitem} +\item[*a)*] Write down the Cox proportional regression model that links overall survival times (as the response variable) to the expression levels. + +\item[*b)*] Specify its loss function for penalized maximum partial (!) likelihood estimation of the parameters. Penalization is via the ridge penalty. + +\item[*c)*] From this loss function, derive the estimation equation for the Cox regression coefficients. + +\item[*d)*] Describe (in words) how you would find the `ridge ML estimate'. +\end{compactitem} +\end{question} + +\begin{question} \mbox{ } +\\ +Download the {\tt multtest} package from BioConductor: +\\ +\indent {\tt > source("http://www.bioconductor.org/biocLite.R")} +\\ +\indent {\tt > biocLite("multtest")} +\\ +Activate the library and load leukemia data from the package: +\\ +\indent {\tt > library(multtest)} +\\ +\indent {\tt > data(golub)} +\\ +The objects {\tt golub} and {\tt golub.cl} are now available. The matrix-object {\tt golub} contains the expression profiles of 38 leukemia patients. Each profile comprises expression levels of 3051 genes. The numeric-object {\tt golub.cl} is an indicator variable for the leukemia type (AML or ALL) of the patient. + +\begin{compactitem} +\item[*a)*] Relate the leukemia subtype and the gene expression levels by a logistic regression model. Fit this model by means of penalized maximum likelihood, employing the ridge penalty with penalty parameter $\lambda=1$. This is implemented in the {\tt penalized}-packages available from {\tt CRAN}. *Note:* center (gene-wise) the expression levels around zero. + +\item[*b)*] Obtain the fits from the regression model. The fit is almost perfect. Could this be due to overfitting the data? Alternatively, could it be that the biological information in the gene expression levels indeed determines the leukemia subtype almost perfectly? + +\item[*c)*] To discern between the two explanations for the almost perfect fit, randomly shuffle the subtypes. Refit the logistic regression model and obtain the fits. On the basis of this and the previous fit, which explanation is more plausible? + +\item[*d)*] Compare the fit of the logistic model with different penalty parameters, say $\lambda = 1$ and $\lambda = 1000$. How does $\lambda$ influence the possibility of overfitting the data? + +\item[*e)*] Describe what you would do to prevent overfitting. +\end{compactitem} +\end{question} + + +\begin{question} label{question.ridgeLogisticBreastData} \mbox{ } +\\ +Download the {\tt breastCancerNKI} package from BioConductor: +\\ +\indent {\tt > source("http://www.bioconductor.org/biocLite.R")} +\\ +\indent {\tt > biocLite("breastCancerNKI")} +\\ +Activate the library and load leukemia data from the package: +\\ +\indent {\tt > library(breastCancerNKI)} +\\ +\indent {\tt > data(nki)} +\\ +The eset-object {\tt nki} is now available. It contains the expression profiles of 337 breast cancer patients. Each profile comprises expression levels of 24481 genes. Extract the expression data from the object, remove all genes with missing values, center the gene expression gene-wise around zero, and limit the data set to the first thousand genes. The reduction of the gene dimensionality is only for computational speed. +\\ +\indent {\tt X <- exprs(nki) } +\\ +\indent {\tt X <- X[-which(rowSums(is.na(X)) > 0),] } +\\ +\indent {\tt X <- apply(X[1:1000,], 1, function(X){ X - mean(X) }) }. +\\ +Furthermore, extract the estrogen receptor status (short: ER status), an important prognostic indicator for breast cancer. +\\ +\indent {\tt Y <- pData(nki)[,8] } + + +\begin{compactitem} +\item[*a)*] Relate the ER status and the gene expression levels by a logistic regression model, which is fitted by means of ridge penalized maximum likelihood. First, find the optimal value of the penalty parameter of $\lambda$ by means of cross-validation. This is implemented in {\tt optL2}-function of the {\tt penalized}-package available from {\tt CRAN}. + +\item[*b)*] Evaluate whether the cross-validated likelihood indeed attains a maximum at the optimal value of $\lambda$. This can be done with the {\tt profL2}-function of the {\tt penalized}-package available from {\tt CRAN}. + +\item[*c)*] Investigate the sensitivity of the penalty parameter selection with respect to the choice of the cross-validation fold. + +\item[*d)*] Does the optimal lambda produce a reasonable fit? +\end{compactitem} +\end{question} + + + + + + From 5d287fa028a21f10344280cb51d463e45fd0813f Mon Sep 17 00:00:00 2001 From: mhjensen Date: Wed, 5 Sep 2018 15:39:52 +0200 Subject: [PATCH 05/12] Typo in ridge matrix in exercise 4 of hw2 --- doc/Projects/2018/hw2/html/hw2-bs.html | 4 +- doc/Projects/2018/hw2/html/hw2.html | 4 +- .../2018/hw2/ipynb/ipynb-hw2-src.tar.gz | Bin 207 -> 207 bytes doc/Projects/2018/hw2/pdf/hw2.p.tex | 4 +- doc/Projects/2018/hw2/pdf/hw2.pdf | Bin 198096 -> 198097 bytes doc/Projects/2018/hw2/pdf/hw2.tex | 4 +- doc/src/Projects/2018/Exercises/hw2.do.txt | 2 +- doc/src/Regression/Regression.do.txt | 2205 ++++++++++++++++- doc/src/Regression/out.txt | 1147 ++++----- 9 files changed, 2716 insertions(+), 654 deletions(-) diff --git a/doc/Projects/2018/hw2/html/hw2-bs.html b/doc/Projects/2018/hw2/html/hw2-bs.html index 7e1d9a41e..5ff410dfb 100644 --- a/doc/Projects/2018/hw2/html/hw2-bs.html +++ b/doc/Projects/2018/hw2/html/hw2-bs.html @@ -114,7 +114,7 @@ MathJax.Hub.Config({

    Department of Physics, University of Oslo, Norway

    -

    Sep 3, 2018

    +

    Sep 5, 2018


    @@ -145,7 +145,7 @@ y = 5*x<

    1. Write your own code for the Ridge method (see chapter 3.4 of Hastie et al., equations (3.43) and (3.44)) and compute the parametrization for different values of \( \lambda \). Compare and analyze your results with those from exercise 2. Study the dependence on \( \lambda \) while also varying the strength of the noise in your expression for \( y(x) \).
    2. Repeat the above but using the functionality of scikit-learn. Compare your code with the results from scikit-learn. Remember to run with the same random numbers for generating \( x \) and \( y \).
    3. -
    4. Our next step is to study the variance of the parameters \( \beta_1 \) and \( \beta_2 \) (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix \( (\hat{X}^T\hat{X})^{-1}+\lambda\hat{I} \)) or use the functionality of scikit-learn and compute their variances. Discuss the results of these variances as functions of \( \lambda \). In particular, try to link your discussion with the discussion in Hastie et al. and their figure 3.11.
    5. +
    6. Our next step is to study the variance of the parameters \( \beta_1 \) and \( \beta_2 \) (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix \( (\hat{X}^T\hat{X})+\lambda\hat{I})^{-1} \)) or use the functionality of scikit-learn and compute their variances. Discuss the results of these variances as functions of \( \lambda \). In particular, try to link your discussion with the discussion in Hastie et al. and their figure 3.11.
    7. Repeat the previous step but add now the Lasso method, see equation (3.53) of Hastie et al.. Discuss your results and compare with standard regression and the Ridge regression results. You can write your own code or use the functionality of scikit-learn.
    8. Finally, using scikit-learn or your own code, compute also the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error defined as
    diff --git a/doc/Projects/2018/hw2/html/hw2.html b/doc/Projects/2018/hw2/html/hw2.html index e68f82db2..66482871e 100644 --- a/doc/Projects/2018/hw2/html/hw2.html +++ b/doc/Projects/2018/hw2/html/hw2.html @@ -81,7 +81,7 @@ MathJax.Hub.Config({
    Department of Physics, University of Oslo, Norway

    -

    Sep 3, 2018

    +

    Sep 5, 2018


    Exercise 4

    @@ -110,7 +110,7 @@ y = 5*x<
    1. Write your own code for the Ridge method (see chapter 3.4 of Hastie et al., equations (3.43) and (3.44)) and compute the parametrization for different values of \( \lambda \). Compare and analyze your results with those from exercise 2. Study the dependence on \( \lambda \) while also varying the strength of the noise in your expression for \( y(x) \).
    2. Repeat the above but using the functionality of scikit-learn. Compare your code with the results from scikit-learn. Remember to run with the same random numbers for generating \( x \) and \( y \).
    3. -
    4. Our next step is to study the variance of the parameters \( \beta_1 \) and \( \beta_2 \) (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix \( (\hat{X}^T\hat{X})^{-1}+\lambda\hat{I} \)) or use the functionality of scikit-learn and compute their variances. Discuss the results of these variances as functions of \( \lambda \). In particular, try to link your discussion with the discussion in Hastie et al. and their figure 3.11.
    5. +
    6. Our next step is to study the variance of the parameters \( \beta_1 \) and \( \beta_2 \) (assuming that we are parametrizing our function with a second-order polynomial. We will use standard linear regression and the Ridge regression. You can now opt for either writing your own function that calculates the variance of these paramaters (recall that this is equal to the diagonal elements of the matrix \( (\hat{X}^T\hat{X})+\lambda\hat{I})^{-1} \)) or use the functionality of scikit-learn and compute their variances. Discuss the results of these variances as functions of \( \lambda \). In particular, try to link your discussion with the discussion in Hastie et al. and their figure 3.11.
    7. Repeat the previous step but add now the Lasso method, see equation (3.53) of Hastie et al.. Discuss your results and compare with standard regression and the Ridge regression results. You can write your own code or use the functionality of scikit-learn.
    8. Finally, using scikit-learn or your own code, compute also the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error defined as
    diff --git a/doc/Projects/2018/hw2/ipynb/ipynb-hw2-src.tar.gz b/doc/Projects/2018/hw2/ipynb/ipynb-hw2-src.tar.gz index 6bb2b7ebf214a27972f81ff43417b60f0a74f477..eddf88e9ac632bd4f11a05b825b072182e4eb6a8 100644 GIT binary patch literal 207 zcmb2|=3wZ#(;v;i{Pw(W7L%huTjKS3i~J0}{Mp6#;!vx?Bb|KnAcGJ4YZ#+4>WmpQ G7#INHYheoj literal 207 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 JB_%~qMhXvy*L(l~ delta 4101 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 n$, the vector $\beta$ cannot uniquely be determined from this system of equations. To make this more specific let $U$ be the $n$-dimensional space spanned by the columns of $\mathbf{X}$ and the $p-n$-dimensional space $V$ be orthogonal complement of $U$, i.e. $V = U^{\perp}$. Then, $\mathbf{X} \mathbf{v} = \mathbf{0}_{p}$ for all $\mathbf{v} \in V$. So, $V$ is the non-trivial null space of $\mathbf{X}$. Consequently, as $\mathbf{X}^{\top} \mathbf{X} \mathbf{v} = +\mathbf{X}^{\top} \mathbf{0}_{p} = \mathbf{0}_{n}$, the solution of the normal equations is: + +!bt +\begin{align*} +\hat{\beta} & = ( \mathbf{X}^{\top} \mathbf{X})^{-} \mathbf{X}^{\top} \mathbf{Y} + \mathbf{v} \qquad \mbox{for all } \mathbf{v} \in V, +\end{align*} +!et + +where $\mathbf{A}^{-}$ denotes the Moore-Penrose inverse of the matrix $\mathbf{A}$, which is defined as: + +!bt +\begin{align*} +\mathbf{A}^{-} & = \sum_{j=1}^p \nu_j^{-1} \, I_{\{ \nu_j \not= 0 \} } \, \mathbf{v}_j \, \mathbf{v}_j^{\top}. +\end{align*} +!et + +The solution of the normal equations is thus only determined up to an +element from a non-trivial space $V$, and there is no unique estimator +of the regression parameter. + +To obtain an estimate of the regression parameter $\beta$ when +$\mathbf{X}$ is (close to) super-collinearity, cite{Hoer1970} proposed +an ad-hoc fix to resolve the (almost) singularity of +$\mathbf{X}^{\top} \mathbf{X}$. Simply replace $\mathbf{X}^{\top} +\mathbf{X}$ by $\mathbf{X}^{\top} \mathbf{X} + \lambda +\mathbf{I}_{pp}$ with $\lambda \in [0, \infty)$. The scalar $\lambda$ +is a tuning parameter, henceforth called the *penalty parameter*. + + + +Recall the super-collinear design matrix $\mathbf{X}$ of Example ref{example.supercollinearity}. Then, for (say) $\lambda = 1$: +!bt +\begin{align*} +\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} & = \left( +\begin{array}{rrr} +5 & 2 & 2 +\\ +2 & 7 & -4 +\\ +2 & -4 & 7 +\end{array} \right). +\end{align*} +!et +The eigenvalues of this matrix are 11, 7, and 1. Hence, $\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}$ has no zero eigenvalue and its inverse is well-defined. + +With the ad-hoc fix for the singularity of $\mathbf{X}^{\top} \mathbf{X}$, cite{Hoer1970} proceed to define the *ridge regression estimator*: + + +!bt +\begin{align} label{form.ridgeRegressionEstimator} +\hat{\beta}(\lambda) & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}, +\end{align} +!et + +for $\lambda \in [0, \infty)$. Clearly, this is - for $\lambda$ +strictly positive - a well-defined estimator, even if $\mathbf{X}$ is +high-dimensional. However, each choice of $\lambda$ leads to a +different ridge regression estimate. The set of all ridge regression +estimates $\{ \hat{\beta}(\lambda) \, : \, \lambda \in [0, \infty) \}$ +is called the *solution* or *regularization path* of the ridge +estimator. + + + + +Recall the super-collinear design matrix $\mathbf{X}$ of Example ref{example.supercollinearity}. Suppose that the corresponding response vector is $\mathbf{Y} = (1.3, -0.5, 2.6, 0.9)^{\top}$. +The ridge regression estimates for, e.g. $\lambda = 1, 2$, and $10$ are then: +\begin{align*} +\hat{\beta}(1) & = (0.614, 0.548, 0.066)^{\top}, +\\ +\hat{\beta}(2) & = (0.537, 0.490, 0.048)^{\top}, +\\ +\hat{\beta}(10) & = (0.269, 0.267, 0.002)^{\top}. +\end{align*} +The full solution path of the ridge estimator is plotted in Figure ref{fig.ridgeSolPathPlusVar}. + + +Having obtained an estimate of the regression parameter $\beta$, one can define the fit $\widehat{\mathbf{Y}}$. It is defined analogous to the standard case: + +!bt +\begin{align*} +\widehat{\mathbf{Y}}(\lambda) & = \mathbf{X} \hat{\beta}(\lambda) +\, \, \, = \, \, \, \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\, \, \, := \, \, \, \mathbf{H}(\lambda) \mathbf{Y}. +\end{align*} +!et + +Previously, when using the ML estimator, the fit could be understood as a projection of $\mathbf{Y}$ onto the subspace spanned by the columns of $\mathbf{X}$. The fit $\widehat{\mathbf{Y}}(\lambda)$ corresponding to the ridge estimator is not a projection of $\mathbf{Y}$ onto $\mathbf{X}$ (confer Exercise ref{question.ridgeResidualsProjection} $\!$a). Consequently, the `ridge residuals' $\mathbf{Y} - \widehat{\mathbf{Y}}(\lambda)$ are not orthogonal to the fit $\widehat{\mathbf{Y}}(\lambda)$ (confer Exercise ref{question.ridgeResidualsProjection} $\!$b). + + +======= Eigenvalue shrinkage ======= + +The effect of the ridge penalty may also studied from the perspective of singular values. Let the singular value decomposition of the $(n \times p)$-dimensional design matrix $\mathbf{X}$ be: + +!bt +\begin{align*} +\mathbf{X} & = \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top}, +\end{align*} +!et + +where $\mathbf{D}_x$ an $(n \times n)$-dimensional diagonal matrix +with the singular values, $\mathbf{U}_x$ an $(n \times n)$-dimensional +matrix with columns containing the left singular vectors (denoted +$\mathbf{u}_i$), and $\mathbf{V}_x$ a $(p \times n)$-dimensional +matrix with columns containing the right singular vectors (denoted +$\mathbf{v}_i$). The columns of $\mathbf{U}_x$ and $\mathbf{V}_x$ are +orthogonal: $\mathbf{U}_x^{\top} \mathbf{U}_x = \mathbf{I}_{nn} = +\mathbf{V}_x^{\top} \mathbf{V}_x$. + +The OLS estimator can then be rewritten in terms of the SVD-matrices as: + + +\begin{align*} +\hat{\beta} & = (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = (\mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} +\\ +& = (\mathbf{V}_x \mathbf{D}_x^2 \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} +\\ +& = \mathbf{V}_x \mathbf{D}_x^{-2} \mathbf{V}_x^{\top} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} +\\ +& = \mathbf{V}_x \mathbf{D}_x^{-2} \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y}, +\end{align*} +where $\mathbf{D}_x^{-2} \mathbf{D}_x$ is not simplified further to emphasize the effect of the ridge penalty. Similarly, the ridge estimator can be rewritten in terms of the SVD-matrices as: +\begin{align*} +\hat{\beta} & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = (\mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} +\\ +& = (\mathbf{V}_x \mathbf{D}_x^2 \mathbf{V}_x^{\top} + \lambda \mathbf{V}_x \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} +\\ +& = \mathbf{V}_x (\mathbf{D}_x^{2} + \lambda \mathbf{I}_{nn})^{-1} \mathbf{V}_x^{\top} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} +\\ +& = \mathbf{V}_x (\mathbf{D}_x^{2} + \lambda \mathbf{I}_{nn})^{-1} \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y}. +\end{align*} +Combining the two results and writing $(\mathbf{D}_x)_{jj} = d_{x,jj}$ we have: +\begin{align*} +d_{x,jj}^{-1} & \geq & \frac{d_{x,jj}}{d_{x,jj}^2 + \lambda} \qquad \mbox{ for all } \lambda > 0. +\end{align*} +Thus, the ridge penalty shrinks the singular values. +\\ +\\ +Return to the problem of the super-collinearity of $\mathbf{X}$ in the high-dimensional setting ($p > n$). The super-collinearity implies the singularity of $\mathbf{X}^{\top} \mathbf{X}$ and prevents the calculation of the OLS estimator of the regression coefficients. However, $\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}$ is non-singular, with inverse: +\begin{align*} +(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} & = \sum_{j=1}^p (d_{x,jj}^2 + \lambda)^{-1} \mathbf{v}_j \mathbf{v}_j^{\top}. +\end{align*} +The right-hand side is well-defined for $\lambda > 0$. + + +===== Principal components regression ===== + +Principal component regression is a close relative to ridge regression that can also be applied in a high-dimensional context. Principal components regression explains the response not by the covariates themselves but by linear combinations of the covariates as defined by the principal components of $\mathbf{X}$. Let $\mathbf{U} \mathbf{D} \mathbf{V}^{\top}$ be the singular value decomposition of $\mathbf{X}$. The $i$-th principal component of $\mathbf{X}$ is then $\mathbf{X} \mathbf{v}_i$, henceforth denoted $\mathbf{z}_i$. Let $\mathbf{Z}_k$ be the matrix of the first $k$ principal components, i.e. $\mathbf{Z}_k = \mathbf{X} \mathbf{V}_k$ where $\mathbf{V}_k$ contains the first $k$ right singular vectors as columns. Principal components regression then amounts to regressing the response $\mathbf{Y}$ onto $\mathbf{Z}_{k}$, that is, it fits the model $\mathbf{Y} = \mathbf{Z}_k \ggamma + \vvarepsilon$. The least squares estimator of $\ggamma$ then is (with some abuse of notation): +\begin{align*} +\hat{\ggamma} & = (\mathbf{Z}_k^{\top} \mathbf{Z}_k)^{-1} \mathbf{Z}_k^{\top} \mathbf{Y} \, \, \, = \, \, \, (\mathbf{V}_k^{\top} \mathbf{X}^{\top} \mathbf{X} \mathbf{V}_k)^{-1} \mathbf{V}_k^{\top} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = (\mathbf{V}_k^{\top} \mathbf{V} \mathbf{D} \mathbf{U}^{\top} \mathbf{U} \mathbf{D} \mathbf{V}^{\top} \mathbf{V}_k)^{-1} \mathbf{V}_k^{\top} \mathbf{V} \mathbf{D} \mathbf{U}^{\top} \mathbf{Y} +\\ +& = (\mathbf{I}_{kn} \mathbf{D}^2 \mathbf{I}_{nk})^{-1} \mathbf{I}_{kn} \mathbf{D} \mathbf{U}^{\top} \mathbf{Y} +\\ +& = \mathbf{D}_k^{-2} \widetilde{\mathbf{D}}_k \mathbf{U}^{\top} \mathbf{Y} \, \, \, = \, \, \ \widetilde{\mathbf{D}}_k^{-1} \mathbf{U}^{\top} \mathbf{Y}, +\end{align*} +where $\mathbf{D}_k$ and $\widetilde{\mathbf{D}}_k$ are submatrices of $\mathbf{D}$. The matrix $\mathbf{D}_k$ is obtained from $\mathbf{D}$ by removal of the last $n-p$ rows and columsn, while for $\widetilde{\mathbf{D}}_k$ only the last $n-k$ rows are dropped. Similarly, $\mathbf{I}_{kn}$ and $\mathbf{I}_{nk}$ are obtained from $\mathbf{I}_{nn}$ by removal of the last $n-k$ rows and columns, respectively. The principal component regression estimator of $\beta$ then is $\hat{\beta}_{\mbox{{\tiny pcr}}} = \mathbf{V}_k \widetilde{\mathbf{D}}_k^{-1} \mathbf{U}^{\top} \mathbf{Y}$. When $k$ is set equal to the column rank of $\mathbf{X}$, and thus to the rank of $\mathbf{X}^{\top} \mathbf{X}$, the +principal component regression estimator $\hat{\beta}_{\mbox{{\tiny pcr}}} = (\mathbf{X}^{\top} \mathbf{X})^- \mathbf{X}^{\top} \mathbf{Y}$, where $\mathbf{A}^-$ denotes the Moore-Penrose inverse of matrix $\mathbf{A}$. + +The relation between ridge and principal component regression becomes clear when their corresponding estimators are written in terms of the singular value decomposition of $\mathbf{X}$: +\begin{align*} +\hat{\beta}_{\mbox{{\tiny pcr}}} & = \mathbf{V}_x (\mathbf{I}_{nk} \mathbf{D}_x \mathbf{I}_{kn})^{-1} \mathbf{U}_x^{\top} \mathbf{Y}, +\\ +\hat{\beta} (\lambda) & = \mathbf{V}_x (\mathbf{D}_x^2 + \lambda \mathbf{I}_{nn})^{-1} \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y}. +\end{align*} +Both operate on the singular values of the design matrix. But where principal component regression thresholds the singular values of $\mathbf{X}$, ridge regression shrinks them (depending on their size). Hence, one applies a discrete map on the singular values while the other a continuous one. + + + + + +======= Moments ======= + +The first two moments of the ridge regression estimator are derived. Next the performance of the ridge regression estimator is studied in terms of the mean squared error, which combines the first two moments. + + +===== Expectation ===== + +The left panel of Figure ref{fig.ridgeSolPathPlusVar} shows ridge estimates of the regression parameters converging to zero as the penalty parameter tends to infinity. This behaviour of the ridge estimator does not depend on the specifics of the data set. To see this study the expectation of the ridge estimator: +\begin{align*} +\mathbb{E} \big[ \hat{\beta}(\lambda) \big] & = \mathbb{E} \big[ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} \big] +\\ +& = \mathbb{E} \big[ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y} \big] +\\ +& = \mathbb{E} \big[ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \hat{\beta} \big] +\\ +& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \mathbb{E} ( \hat{\beta} ) +\\ +& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \beta. +\end{align*} +Clearly, $\mathbb{E} \big[ \hat{\beta}(\lambda) \big] \not= \beta$ for any $\lambda > 0$. Hence, the ridge estimator is biased. + +From the expression above it is clear that the expectation of the ridge estimator vanishes as $\lambda$ tends to infinity: +\begin{align*} +\lim_{\lambda \rightarrow \infty} \mathbb{E} \big[ \hat{\beta}(\lambda) \big] & = \lim_{\lambda \rightarrow \infty} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \beta \, \, \, = \, \, \, \mathbf{0}_{p}. +\end{align*} +Hence, all regression coefficients are shrunken towards zero as the penalty parameter increases. This also holds for $\mathbf{X}$ with $p > n$. Furthermore, this behaviour is not strictly monotone in $\lambda$: $\lambda_{a} > \lambda_b$ does not necessarily imply $|\hat{\beta}_j (\lambda_a) | < |\hat{\beta}_j (\lambda_b) |$. Upon close inspection this can be witnessed from the ridge solution path of $\beta_3$ in Figure ref{fig.ridgeSolPathPlusVar}. + + +\begin{example} *Orthonormal design matrix* label{example.orthoronormalDesign} +\\ +Consider an orthonormal design matrix $\mathbf{X}$, i.e.: +\begin{align*} +\mathbf{X}^{\top} \mathbf{X} & = \mathbf{I}_{pp} \, \, \, = \, \, \, (\mathbf{X}^{\top} \mathbf{X})^{-1}. +\end{align*} +An example of an orthonormal design matrix would be: +\begin{align*} +\mathbf{X} & = \frac{1}{2} \left( +\begin{array}{rr} +-1 & -1 +\\ +-1 & 1 +\\ +1 & -1 +\\ +1 & 1 +\end{array} \right). +\end{align*} +This design matrix is orthonormal as $\mathbf{X}^{\top} \mathbf{X} = \mathbf{I}_{22}$, which is easily verified: +\begin{align*} +\mathbf{X}^{\top} \mathbf{X} & = \frac{1}{4} +\left( +\begin{array}{rrrr} +-1 & -1 & 1 & 1 +\\ +-1 & 1 & -1 & 1 +\end{array} \right) +\left( +\begin{array}{rr} +-1 & -1 +\\ +-1 & 1 +\\ +1 & -1 +\\ +1 & 1 +\end{array} \right) \, \, \, = \, \, \, +\frac{1}{4} +\left( +\begin{array}{rr} +4 & 0 +\\ +0 & 4 +\end{array} \right) \, \, \, = \, \, \, \mathbf{I}_{22}. +\end{align*} +In case of an orthonormal design matrix the relation between the OLS and ridge estimator is: +\begin{align*} +\hat{\beta}(\lambda) & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\, \, \, = \, \, \, (\mathbf{I}_{pp} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = (1 + \lambda)^{-1} \mathbf{I}_{pp} \mathbf{X}^{\top} \mathbf{Y} +\qquad \, \, = \, \, \, (1 + \lambda)^{-1} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = (1 + \lambda)^{-1} \hat{\beta}. +\end{align*} +Hence, the ridge estimator scales the OLS estimator by a factor. When taking the expectation on both sides, it is evident that the ridge estimator converges to zero as $\lambda \rightarrow \infty$. +\end{example} + + + +===== Variance ===== + +As for the ML estimate of the regression parameter $\beta$ of model (ref{form.linRegressionModelinMatrix}), we derive the second moment of the ridge estimator. Hereto define: +\begin{align*} +\mathbf{W}_{\lambda} & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{X}. +\end{align*} +Using $\mathbf{W}_{\lambda}$ the ridge estimator $\hat{\beta}(\lambda)$ can be expressed as $\mathbf{W}_{\lambda} \hat{\beta}$ for: +\begin{align*} +\mathbf{W}_{\lambda} \hat{\beta} & = \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = \{ (\mathbf{X}^{\top} \mathbf{X})^{-1} [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ] \}^{-1} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = \hat{\beta}(\lambda). +\end{align*} +The linear operator $\mathbf{W}_{\lambda}$ thus transforms the ML estimator of the regression parameter into the ridge estimator. + +It is now easily seen that: +\begin{align*} +\mbox{Var}[ \hat{\beta}(\lambda) ] & = \mbox{Var}[ \mathbf{W}_{\lambda} \hat{\beta} ] \qquad \qquad \, \, \, \, \, \, = \, \, \, \mathbf{W}_{\lambda} \mbox{Var}[\hat{\beta} ] \mathbf{W}_{\lambda}^{\top} +\\ +& = \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} \, \, \, = \, \, \, \sigma^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{X} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}\}^{\top}, +\end{align*} +in which we have used $\mbox{Var}(\mathbf{A} \mathbf{Y}) = \mathbf{A} \mbox{Var}( \mathbf{Y}) \mathbf{A}^{\top}$ for a non-random matrix $\mathbf{A}$, the fact that $\mathbf{W}_{\lambda}$ is non-random, and $ \mbox{Var}[\hat{\beta} ] = \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1}$. + + +Like the expectation the variance of the ridge estimator vanishes as $\lambda$ tends to infinity: +\begin{align*} +\lim_{\lambda \rightarrow \infty} \mbox{Var} \big[ \hat{\beta}(\lambda) \big] & = \lim_{\lambda \rightarrow \infty} \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} \, \, \, = \, \, \, \mathbf{0}_{pp}. +\end{align*} +Hence, the variance of the ridge regression coefficient estimates decreases towards zero as the penalty parameter becomes large. This is illustrated in the right panel of Figure ref{fig.ridgeSolPathPlusVar} for the data of Example ref{example.supercollinearity}. + + +With an explicit expression of the variance of the ridge estimator at hand, we can compare it to that of the OLS estimator: +\begin{align*} +\mbox{Var}[ \hat{\beta} ] - \mbox{Var}[ \hat{\beta}(\lambda) ] & = \sigma^2 [(\mathbf{X}^{\top} \mathbf{X})^{-1} - \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} ] +\\ +& = \sigma^2 \mathbf{W}_{\lambda} \{ [\mathbf{I} + \lambda (\mathbf{X}^{\top} \mathbf{X})^{-1} ] (\mathbf{X}^{\top} \mathbf{X})^{-1} [\mathbf{I} + \lambda (\mathbf{X}^{\top} \mathbf{X})^{-1} ]^{\top} - (\mathbf{X}^{\top} \mathbf{X})^{-1} \} \mathbf{W}_{\lambda}^{\top} +\\ +& = \sigma^2 \mathbf{W}_{\lambda} [ 2 \, \lambda \, (\mathbf{X}^{\top} \mathbf{X})^{-2} + \lambda^2 (\mathbf{X}^{\top} \mathbf{X})^{-3} ] \mathbf{W}_{\lambda}^{\top} +\\ +& = \sigma^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} [ 2 \, \lambda \, \mathbf{I}_{pp} + \lambda^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} ] \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}\}^{\top}. +\end{align*} +The difference is non-negative definite as each component in the matrix product is non-negative definite. Hence, the variance of the ML estimator exceeds (in the positive definite ordering) that of the ridge estimator: + +!bt + +!bt +\begin{align} label{form.VarInequalityMLandRidge} +\mbox{Var}[ \hat{\beta} ] & \succeq & \mbox{Var}[ \hat{\beta}(\lambda) ], +\end{align} +!et +!et +with the inequality being strict if $\lambda > 0$. In other words, the variance of the ML estimator is larger than that of the ridge estimator (in the sense that their difference is non-negative definite). The variance inequality (ref{form.VarInequalityMLandRidge}) can be interpreted in terms of the stochastic behaviour of the estimator. This is illustrated by the next example. + +# original latex figure with scale=0.45, angle=0 + +FIGURE: [varMLellipses.eps, width=400 frac=1.0] Level sets of the distribution of the ML (left panel) and ridge (right panel) regression estimators.} label{fig.varOLSandRidge +# \afterpage{} + + +\begin{example} *Variance comparison* +\\ +Consider the design matrix: +\begin{align*} +\mathbf{X} & = \left( +\begin{array}{rr} +-1 & 2 +\\ +0 & 1 +\\ +2 & -1 +\\ +1 & 0 +\end{array} \right). +\end{align*} +The variances of the ML and ridge (with $\lambda=1$) estimates of the regression coefficients then are: +\begin{align*} +\mbox{Var}(\hat{\beta}) & = \sigma^2 \left( +\begin{array}{rr} +0.3 & 0.2 +\\ +0.2 & 0.3 +\end{array} \right) +\qquad \mbox{and} \qquad +\mbox{Var}[\hat{\beta}(\lambda)] \, \, \, = \, \, \, \sigma^2 \left( +\begin{array}{rr} +0.1524 & 0.0698 +\\ +0.0698 & 0.1524 +\end{array} \right). +\end{align*} +These variances can be used to construct levels sets of the distribution of the estimates. The level sets that contain 50\%, 75\% and 95\% of the distribution of the ML and ridge estimates are plotted in Figure ref{fig.varOLSandRidge}. In line with inequality (ref{form.VarInequalityMLandRidge}) the level sets of the ridge estimate are smaller than that of the ML estimate: it thus varies less. +\end{example} + + + + +\begin{contexample}_ref{example.orthoronormalDesign_} *Orthonormal design matrix (continued)* +\\ +Assume the design matrix $\mathbf{X}$ is orthonormal. Then, $\mbox{Var}[ \hat{\beta} ] = \sigma^2 \mathbf{I}_{pp}$ and +\begin{align*} +\mbox{Var}[ \hat{\beta}(\lambda) ] & = \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} +\, \, \, = \, \, \, \sigma^2 [\mathbf{I}_{pp} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{I}_{pp} \{ [\mathbf{I}_{pp} + \lambda \mathbf{I}_{pp} ]^{-1} \}^{\top} +\, \, \, = \, \, \, \sigma^2 (1 + \lambda )^{-2} \mathbf{I}_{pp} . +\end{align*} +As the penalty parameter $\lambda$ is non-negative the former exceeds the latter. In particular, this expression vanishes as $\lambda \rightarrow \infty$. +\end{contexample} + +# #if FORMAT in ("latex", "pdflatex") +\noindent +# #endif +The full distribution of the ridge regression estimator is now known. The estimator, $\hat{\beta}(\lambda) = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}$ is a linear estimator, linear in $\mathbf{Y}$. As $\mathbf{Y}$ is normally distributed, so is $\hat{\beta}(\lambda)$. Moreover, the normal distribution is fully characterized by its first two moments, which are available. Hence: +\begin{align*} +\hat{\beta}(\lambda) & \sim & \mathcal{N} \big( (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{X} \, \beta, \sigma^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{X} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}\}^{\top} \big). +\end{align*} +Given $\lambda$ and $\beta$, the random behavior of the estimator is thus known. + + + +===== Mean squared error} label{sect:ridgeMSE ===== +Previously, we motivated the ridge estimator as an ad hoc solution to collinearity. An alternative motivation comes from studying the Mean Squared Error (MSE) of the ridge regression estimator: for a suitable choice of $\lambda$ the ridge regression estimator may outperform the ML regression estimator in terms of the MSE. Before we prove this, we first derive the MSE of the ridge estimator and quote some auxiliary results. + +Recall that (in general) for any estimator of a parameter $\theta$: +\begin{align*} +\mbox{MSE}( \hat{\theta} ) & = \mathbb{E} [ ( \hat{\theta} - \theta)^2 ] +\, \, \, = \, \, \, \mbox{Var}( \hat{ \theta} ) + [\mbox{Bias} ( \hat{\theta} )]^2. +\end{align*} +Hence, the MSE is a measure of the quality of the estimator. + +The MSE of the ridge estimator is: + +!bt + +!bt +\begin{align} +\mbox{MSE}[\hat{\beta}(\lambda)] & = \mathbb{E} [ (\mathbf{W}_{\lambda} \, \hat{\beta} - \beta)^{\top} \, (\mathbf{W}_{\lambda} \, \hat{\beta} - \beta) ] \nonumber +\\ +& = \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \hat{\beta} ) - \mathbb{E} ( \beta^{\top} \, \mathbf{W}_{\lambda} \, \hat{\beta}) - \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \beta) + \mathbb{E} ( \beta^{\top} \beta) \nonumber +\\ +& = \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \hat{\beta} ) - \mathbb{E} ( \beta^{\top} \, \mathbf{W}_{\lambda}^{\top} \mathbf{W}_{\lambda} \, \hat{\beta}) - \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \beta) + \mathbb{E} ( \beta^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \beta ) \nonumber +\\ +& & - \mathbb{E} ( \beta^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \beta ) + \mathbb{E} ( \beta^{\top} \, \mathbf{W}_{\lambda}^{\top} \mathbf{W}_{\lambda} \, \hat{\beta}) + \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \beta) \nonumber +\\ +& & - \mathbb{E} ( \beta^{\top} \, \mathbf{W}_{\lambda} \, \hat{\beta}) - \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \beta) + \mathbb{E} ( \beta^{\top} \beta) \nonumber +\\ +& = \mathbb{E} [ ( \hat{\beta} - \beta )^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \, (\hat{\beta} - \beta) ] \nonumber +\\ +& & - \beta^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \beta + \beta^{\top} \, \mathbf{W}_{\lambda}^{\top} \mathbf{W}_{\lambda} \, \beta + \beta^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \beta \nonumber +\\ +& & - \beta^{\top} \, \mathbf{W}_{\lambda} \, \beta - \beta^{\top} \mathbf{W}_{\lambda}^{\top} \, \beta + \beta^{\top} \beta \nonumber +\\ +& = \mathbb{E} \big\{ ( \hat{\beta} - \beta )^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \, (\hat{\beta} - \beta) \big\} + \beta^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \, \beta \nonumber +\\ +& = \sigma^2 \, \mbox{tr}\big\{ \mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{W}_{\lambda}^{\top} \big\} + \beta^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \, \beta. label{form.ridgeMSE} +\end{align} +!et +!et +In the last step we have used $\hat{\beta} \sim \mathcal{N}( \beta, \sigma^2 \, [\mathbf{X}^{\top} \mathbf{X}]^{-1} )$ and the expectation of the quadratic form of a multivariate random variable $\vvarepsilon \sim \mathcal{N}(\mmu_{\varepsilon}, \SSigma_{\varepsilon})$ for some nonrandom symmetric positive definite matrix $\LLambda$ is (cf. \citealt{Math1992}): +\begin{align*} +\mathbb{E} ( \vvarepsilon^{\top} \, \LLambda \, \vvarepsilon) & = \mbox{tr} ( \LLambda \, \SSigma_{\varepsilon}) + \mmu_{\varepsilon}^{\top} \, \LLambda \, \mmu_{\varepsilon}, +\end{align*} +of course replacing $\vvarepsilon$ by $\hat{\beta}$ in this expectation. The first summand in the final derived expression for $\mbox{MSE}[\hat{\beta}(\lambda)]$ is the sum of the variances of the ridge estimator, while the second summand can be thought of the ``squared bias'' of the ridge estimator. In particular, $\lim_{\lambda \rightarrow \infty} \mbox{MSE}[\hat{\beta}(\lambda)] = \beta^{\top} \beta$, which is the squared biased for an estimator that equals zero (as does the ridge estimator in the limit). + + + +\begin{example} *Orthonormal design matrix* +\\ +Assume the design matrix $\mathbf{X}$ is orthonormal. Then, $\mbox{MSE}[ \hat{\beta} ] = p \, \sigma^2$ and +\begin{align*} +\mbox{MSE}[ \hat{\beta}(\lambda) ] & = \frac{p \, \sigma^2}{ (1+ \lambda)^{2}} + \frac{\lambda^2}{ (1+ \lambda)^{2}} \beta^{\top} \beta. +\end{align*} +The latter achieves its minimum at: $\lambda = p \sigma^2 / \beta^{\top} \beta$. +\end{example} + + + +The following theorem and proposition are required for the proof of the main result. + +\begin{theorem} *(Theorem 1 of \citealp{Theo1974*}) label{theo.Theobald1} +\\ +Let $\hat{\ttheta}_1$ and $\hat{\ttheta}_2$ be (different) estimators of $\ttheta$ with second order moments: +\begin{align*} +\mathbf{M}_k & = \mathbb{E} [ (\hat{\ttheta}_k - \ttheta) (\hat{\ttheta}_k - \ttheta)^{\top} ] \qquad \mbox{for } k=1,2, +\end{align*} +and +\begin{align*} +\mbox{MSE}(\hat{\ttheta}_k) & = \mathbb{E} [ (\hat{\ttheta}_k - \ttheta)^{\top} \mathbf{A} (\hat{\ttheta}_k - \ttheta) ] \qquad \mbox{for } k=1,2, +\end{align*} +where $\mathbf{A} \succeq 0$. Then, $\mathbf{M}_1 - \mathbf{M}_2 \succeq 0$ if and only if $\mbox{MSE}(\hat{\ttheta}_1) - \mbox{MSE}(\hat{\ttheta}_2) \geq 0$ for all $\mathbf{A} \succeq 0$. +\end{theorem} + + +\begin{proposition} *(\citealp{Fare1976*}) label{prop.Farebrother} +\\ +Let $\mathbf{A}$ be a $(p \times p)$-dimensional, positive definite matrix, $\mathbf{b}$ be a nonzero $p$ dimensional vector, and $c \in \mathbb{R}_+$. Then, $c \mathbf{A} - \mathbf{b} \mathbf{b}^{\top} \succ 0$ if and only if $\mathbf{b}^{\top} \mathbf{A}^{-1} \mathbf{b} > c$. +\end{proposition} + +We are now ready to proof the main result, formalized as Theorem ref{theo.Theobald2}, that for some $\lambda$ the ridge regression estimator yields a lower MSE than the ML regression estimator. + +\begin{theorem} *(Theorem 2 of \citealp{Theo1974*}) label{theo.Theobald2} +\\ +There exists $\lambda > 0$ such that $\mbox{MSE}[\hat{\beta}(\lambda)] < \mbox{MSE}[\hat{\beta}(0)] = \mbox{MSE}[\hat{\beta}]$. +\end{theorem} + +\begin{proof} +The second order moment matrix of the ridge estimator is: +\begin{align*} +\mathbf{M} (\lambda) & := & \mathbb{E} [ (\hat{\beta}(\lambda) - \beta) (\hat{\beta} (\lambda) - \beta)^{\top} ] +\\ +& = \mathbb{E} \{ \hat{\beta}(\lambda) [\hat{\beta}(\lambda)]^{\top} \} - \mathbb{E} [ \hat{\beta}(\lambda) ] \{ \mathbb{E} [ \hat{\beta}(\lambda) ] \}^{\top} + \mathbb{E} [\hat{\beta} (\lambda) - \beta)] \{ \mathbb{E} [\hat{\beta} (\lambda) - \beta)] \}^{\top} +\\ +& = \mbox{Var}[ \hat{\beta}(\lambda) ] + \mathbb{E} [\hat{\beta} (\lambda) - \beta)] \{ \mathbb{E} [\hat{\beta} (\lambda) - \beta)] \}^{\top}. +\end{align*} +Then: +\begin{align*} +\mathbf{M} ( 0 ) - \mathbf{M}(\lambda) & = \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} - \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} ] +\\ +& & - (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \beta \beta^{\top} (\mathbf{W}_{\lambda} -\mathbf{I}_{pp})^{\top} +\\ +& = \sigma^2 \mathbf{W}_{\lambda} [ 2 \, \lambda \, (\mathbf{X}^{\top} \mathbf{X})^{-2} + \lambda^2 (\mathbf{X}^{\top} \mathbf{X})^{-3} ] \mathbf{W}_{\lambda}^{\top} +\\ +& & - \lambda^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \beta \beta^{\top} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top} +\\ +& = \sigma^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} [ 2 \, \lambda \, \mathbf{I}_{pp} + \lambda^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} ] \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top} +\\ +& & - \lambda^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \beta \beta^{\top} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top} +\\ +& = \lambda [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} [ 2 \, \sigma^2 \, \mathbf{I}_{pp} + \lambda \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} - \lambda \beta \beta^{\top} ] \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top}. +\end{align*} +This is positive definite if and only if $ 2 \, \sigma^2 \, \mathbf{I}_{pp} + \lambda \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} - \lambda \beta \beta^{\top} \succ 0$. Hereto it suffices to show that $2 \, \sigma^2 \, \mathbf{I}_{pp} - \lambda \beta \beta^{\top} \succ 0$. By Proposition ref{prop.Farebrother} this holds for $\lambda$ such that $2 \sigma^2 (\beta^{\top} \beta)^{-1} > \lambda$. For these $\lambda$, we thus have $\mathbf{M} ( 0 ) - \mathbf{M}(\lambda)$. Application of Theorem ref{theo.Theobald1} now concludes the proof. +\end{proof} +This result of cite{Theo1974} is generalized by cite{Fare1976} to the class of design matrices $\mathbf{X}$ with $\mbox{rank}(\mathbf{X}) < p$. +\\ +\\ +Theorem ref{theo.Theobald2} can be used to illustrate that the ridge regression estimator strikes a balance between the bias and variance. This is illustrated in the left panel of Figure ref{fig.MSEridge}. For small $\lambda$, the variance of the ridge estimator dominates the MSE. This may be understood when realizing that in this domain of $\lambda$ the ridge estimator is close to the unbiased ML regression estimator. For large $\lambda$, the variance vanishes and the bias dominates the MSE. For small enough values of $\lambda$, the decrease in variance of the ridge regression estimator exceeds the increase in its bias. As the MSE is the sum of these two, the MSE first decreases as $\lambda$ moves away from zero. In particular, as $\lambda = 0$ corresponds to the ML regression estimator, the ridge regression estimator yields a lower MSE for these values of $\lambda$. In the right panel of Figure ref{fig.MSEridge} $\mbox{MSE}[ \hat{\beta}(\lambda)] < \mbox{MSE}[ \hat{\beta}(0)]$ for $\lambda < 7$ (roughly) and the ridge estimator outperforms the ML estimator. +# original latex figure with scale=0.45, angle=0 + +FIGURE: [MSE_ridge.eps, width=400 frac=1.0] Left panel: mean squared error, and its `bias' and `variance' parts, of the ridge regression estimator (for artificial data). Right panel: mean squared error of the ridge and ML estimator of the regression coefficient vector (for the same artificial data).} label{fig.MSEridge +# \afterpage{} +\\ +\\ +# #if FORMAT in ("latex", "pdflatex") +\noindent +# #endif +Besides another motivation behind the ridge regression estimator, the use of Theorem ref{theo.Theobald2} is limited. The optimal choice of $\lambda$ depends on the quantities $\beta$ and $\sigma^2$. These are unknown in practice. Then, the penalty parameter is chosen in a data-driven fashion by means of cross-validation (see Section ref{subsect.crossvalidation}). +\\ +\\ +\begin{remark} \mbox{ } +\\ +Theorem ref{theo.Theobald2} can also be used to conclude on the biasedness of the ridge regression estimator. The Gauss-Markov theorem \citep{Rao1973} states (under some assumptions) that the ML regression estimator is the best linear unbiased estimator (BLUE) with the smallest MSE. As the ridge regression estimator is a linear estimator and outperforms (in terms of MSE) this ML estimator, it must be biased (for it would otherwise refute the Gauss-Markov theorem). +\end{remark} + + + + +======= Constrained estimation} label{sect.constrainedEstimation ======= +The ad-hoc fix of cite{Hoer1970} to super-collinearity of the design matrix (and, consequently the singularity of the matrix $\mathbf{X}^{\top} \mathbf{X}$) has been motivated post-hoc. +The ridge estimator minimizes the *ridge loss function*, which is defined as: + +!bt + +!bt +\begin{align} +\mathcal{L}_{\mbox{{\footnotesize ridge}}}(\beta; \lambda) & = \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2 + \lambda \| \beta \|^2_2 +\, \, \, = \, \, \, \sum_{i=1}^n (Y_i - \mathbf{X}_{i\ast} \, \beta)^2 + \lambda \sum_{j=1}^p \beta_j^2. label{form.ridgeLossFunction} +\end{align} +!et +!et +This loss function is the traditional sum-of-squares augmented with a *penalty*. The particular form of the penalty, $\lambda \| \beta \|^2_2$ is referred to as the *ridge penalty* and $\lambda$ as the *penalty parameter*. For $\lambda=0$, minimization of the ridge loss function yields the ML estimator. For any $\lambda > 0$, the ridge penalty contributes to the loss function, affecting its minimum and its location. The minimum of the sum-of-squares is well-known. The minimum of the ridge penalty is attained at $\beta = \mathbf{0}_{p}$ whenever $\lambda > 0$. The $\beta$ that minimizes $\mathcal{L}_{\mbox{{\footnotesize ridge}}}(\beta; \lambda)$ then balances the sum-of-squares and the penalty. The effect of the penalty in this balancing act is to shrink the regression coefficients towards zero, its minimum. In particular, the larger $\lambda$, the larger the contribution of the penalty to the loss function, the stronger the tendency to shrink non-zero regression coefficients to zero (and decrease the contribution of the penalty to the loss function). This motivates the name `penalty' as non-zero elements of $\beta$ increase (or penalize) the loss function. + + +To verify that the ridge estimator indeed minimizes the ridge loss function, proceed as usual. Take the derivative with respect to $\beta$: +\begin{align*} +\frac{\partial}{\partial \beta} \mathcal{L}_{\mbox{{\footnotesize ridge}}}(\beta; \lambda) & = -2 \, \mathbf{X}^{\top} (\mathbf{Y} - \mathbf{X} \beta) + 2 \, \lambda \, \mathbf{I}_{pp} \, \beta \, \, \, = \, \, \, -2 \, \mathbf{X}^{\top} \mathbf{Y} + 2 \, ( \mathbf{X}^{\top} \mathbf{X} + \lambda \, \mathbf{I}_{pp}) \beta. +\end{align*} +Equate the derivative to zero and solve for $\beta$. This yields the ridge regression estimator. + +The ridge estimator is thus a stationary point of the ridge loss function. A stationary point corresponds to a minimum if the Hessian matrix with second order partial derivatives is positive definite. The Hessian of the ridge loss function is +\begin{align*} +\frac{\partial^2}{\partial \beta \, \partial \beta^{\top}} \mathcal{L}_{\mbox{{\footnotesize ridge}}}(\beta; \lambda) & = 2 \, ( \mathbf{X}^{\top} \mathbf{X} + \lambda \, \mathbf{I}_{pp}). +\end{align*} +This Hessian is the sum of the semi-positive definite matrix $\mathbf{X}^{\top} \mathbf{X}$ and the positive definite matrix $\lambda \, \mathbf{I}_{pp}$. Lemma 14.2.4 of cite{Harv2008} then states that the sum of these matrices is itself a positive definite matrix. Hence, the Hessian is positive definite and the ridge loss function has a stationary point at the ridge estimator, which is a minimum. + +The ridge regression estimator minimizes the ridge loss function. It rests to verify that it is a global minimum. To this end we introduce the concept of a convex function. As a prerequisite, a set $\mathcal{S} \subset \mathbb{R}^p$ is called *convex* if for all $\beta_1, \beta_2 \in \mathcal{S}$ their weighted average $\beta_{\theta} = (1 - \theta) \beta_1 + \theta \beta_2$ for all $\theta \in [0, 1]$ is itself an element of $\mathcal{S}$, thus $\beta_{\theta} \in \mathcal{S}$. If for all $\theta \in (0, 1)$, the weighted average $\beta_{\theta}$ is inside $\mathcal{S}$ and not on its boundary, the set is called *strict convex*. Examples of (strict) convex and nonconvex sets are depicted in Figure ref{fig.ridgeAsConstrainedEst}. A function $f(\cdot)$ is *(strict) convex* if the set $\{ y \, : \, y \geq f(\beta) \mbox{ for all } \beta \in \mathcal{S} \mbox{ for any convex } \mathcal{S} \}$, called the epigraph of $f(\cdot)$, is (strict) convex. Examples of (strict) convex and nonconvex functions are depicted in Figure ref{fig.ridgeAsConstrainedEst}. The ridge loss function is the sum of two parabola's: one at least convex and the other a strict convex function in $\beta$. The sum of convex and strict convex function is itself strict convex (confer Lemma 9.4.2 of \citealt{Flet2008}). The ridge loss function is thus strict convex. Theorem 9.4.1 of \citealt{Flet2008} then warrants, by the strict convexity of the ridge loss function, that the ridge estimator is a global minimum. +\\ +\\ +From the ridge loss function the limiting behavior of the variance of the ridge regression estimator can be understood. The ridge penalty with its minimum $\beta = \mathbf{0}_{p}$ does not involve data and, consequently, the variance of its minimum equals zero. With the ridge regression being a compromise between the ML estimator and the minimum of the penalty, so is its variance a compromise of their variances. As $\lambda$ tends to infinity, the ridge estimator and its variance converge to the minimum and the variance of the minimum, respectively. Hence, in the limit (large $\lambda$) the variance of the ridge regression estimator vanishes. Understandably, as the penalty now fully dominates the loss function and, consequently, it does no longer involve data (i.e. randomness). +# original latex figure with scale=0.38, angle=0 + +FIGURE: [convexSets.eps, width=400 frac=1.0] Top panels show examples of convex (left) and nonconvex (right) sets. Middle panels show examples of convex (left) and nonconvex (right) functions. The left bottom panel illustrates the ridge estimation as a constrained estimation problem. The ellipses represent the contours of the ML loss function, with the blue dot at the center the ML estimate. The circle is the ridge parameter constraint. The red dot is the ridge estimate. It is at the intersection of the ridge constraint and the smallest contour with a non-empty intersection with the constraint. The right bottom panel shows the data corresponding to Example ref{exam.overfitting}. The grey line represents the `true' relationship, while the black line the fitted one. } label{fig.ridgeAsConstrainedEst +\afterpage{} +\\ +\\ +Above it has been shown that the ridge estimator can be defined as: + +!bt + +!bt +\begin{align} label{form.ridgeEstViaPenEst} +\hat{\beta}(\lambda) & = \arg \min_{\beta} \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2 + \lambda \| \beta \|^2_2. +\end{align} +!et +!et +This minimization problem can be reformulated into the following constrained optimization problem (illustrated in Figure ref{fig.ridgeAsConstrainedEst}): + +!bt + +!bt +\begin{align} label{form.constrEstProblemRidge} +\hat{\beta}(\lambda) & = \arg \min_{\| \beta \|_2^2 \leq c} \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2, +\end{align} +!et +!et +for some suitable $c > 0$. The constrained optimization problem (ref{form.constrEstProblemRidge}) can be solved by means of the Karush-Kuhn-Tucker (KKT) multiplier method, which minimizes a function subject to inequality constraints. The KKT multiplier method states that, under some regularity conditions (all met here), there exists a constant $\nu \geq 0$, called the *multiplier*, such that the solution $\hat{\beta}(\nu)$ of the constrained minimization problem (ref{form.constrEstProblemRidge}) satisfies the so-called KKT conditions. The first KKT condition (referred to as the stationarity condition) demands that the gradient (with respect to $\beta$) of the Lagrangian associated with the minimization problem equals zero at the solution $\hat{\beta}(\nu)$. The Lagrangian for problem (ref{form.constrEstProblemRidge}) is: +\begin{align*} +\| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2 + \nu ( \| \beta \|^2_2 - c). +\end{align*} +The second KKT condition (the complementarity condition) requires that $\nu (\| \hat{\beta}(\nu) \|_2^2 - c) = 0$. If $\nu = \lambda$ and $c = \| \hat{\beta}(\lambda) \|_2^2$, the ridge estimator $\beta (\lambda)$ satisfies both KKT conditions. Hence, both problems have the same solution when $c = \| \hat{\beta}(\lambda) \|_2^2$. +\\ +\\ +The relevance of viewing the ridge regression estimator as the solution to a constrained estimation problem becomes obvious when considering a typical threat to high-dimensional data analysis: overfitting. *Overfitting* refers to the phenomenon of modelling the noise rather than the signal. In case the true model is parsimonious (few covariates driving the response) and data on many covariates are available, it is likely that a linear combination of all covariates yields a higher likelihood than a combination of the few that are actually related to the response. As only the few covariates related to the response contain the signal, the model involving all covariates then cannot but explain more than the signal alone: it also models the error. Hence, it overfits the data. In high-dimensional settings overfitting is a real threat. The number of explanatory variables exceeds the number of observations. It is thus possible to form a linear combination of the covariates that perfectly explains the response, including the noise. + +Large estimates of regression coefficients are often an indication of overfitting. Augmentation of the estimation procedure with a constraint on the regression coefficients is a simple remedy to large parameter estimates. As a consequence it decreases the probability of overfitting. Overfitting is illustrated in the next example. + + +\begin{example} *(Overfitting)* label{exam.overfitting} +\\ +Consider an artificial data set comprising of ten observations on a response $Y_i$ and nine covariates $X_{i,j}$. All covariate data are sampled from the standard normal distribution: $X_{i,j} \sim \mathcal{N}(0, 1)$. The response is generated by $Y_i = X_{i,1} + \varepsilon_i$ with $\varepsilon_{i} \sim \mathcal{N}(0, 1/4)$. Hence, only the first covariate contributes to the response. + +The regression model $Y_i = \sum_{j=1}^9 X_{i,j} \beta_j+ \varepsilon_i$ is fitted to the artificial data using `R`. This yields the regression parameter estimates: +\begin{align*} +\hat{\beta}^{\top} & = (0.048, -2.386, -5.528, 6.243, -4.819, 0.760, -3.345, -4.748, 2.136). +\end{align*} +As $\beta^{\top} = (1, 0, \ldots, 0)$, many regression coefficient are clearly over-estimated. + +The fitted values $\widehat{Y}_i = \mathbf{X}_i \hat{\beta}$ are plotted against the values of the first covariates in the right bottom panel of Figure ref{fig.ridgeAsConstrainedEst}. As a reference the line $x=y$ is added, which represents the `true' model. The fitted model follows the `true' relationship. But it also captures the deviations from this line that represent the errors. +\end{example} + + + +======= Bayesian regression} label{sect:Bayes ======= +Ridge regression has a close connection to Bayesian linear regression. Bayesian linear regression assumes the parameters $\beta$ and $\sigma^2$ to be the random variables, while at the same time considering $\mathbf{X}$ and $\mathbf{Y}$ as fixed. Within the regression context, the conjugate priors of $\beta$ and $\sigma^2$ are: +\begin{align*} +\beta \, | \, \sigma^2 \sim \mathcal{N}(\mathbf{0}_p, \sigma^2 \lambda^{-1} \mathbf{I}_{pp}) \qquad \mbox{and} \qquad \sigma^2 \sim \mathcal{IG}(\alpha_0, \beta_0), +\end{align*} +where $\mathcal{IG}$ denotes the inverse Gamma distribution with shape parameter $\alpha_0$ and scale parameter $\beta_0$. The penalty parameter can be interpreted as the precision of the prior, determining how informative the prior should be. A smaller penalty (i.e. precision) corresponds to a wider prior, and a larger penalty to a more informative, concentrated prior (Figure ref{fig.ridgePriorOfBeta}). +# original latex figure with scale=0.45, angle=0 + +FIGURE: [ridgePriorOfBeta.eps, width=400 frac=1.0] Conjugate prior of the regression parameter $\beta$ for various choices of $\lambda$, the penalty parameters c.q. precision.} label{fig.ridgePriorOfBeta + +Under the assumption of the conjugate priors above, the joint posterior distribution of $\beta$ and $\sigma^2$ is then: +\begin{align*} +f_{\beta, \sigma^2} (\beta, \sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) & = f_Y (\mathbf{Y} \, | \, \mathbf{X}, \beta, \sigma^2) \, f_{\beta}(\beta | \sigma^2) \, f_{\sigma}(\sigma^2) +\\ +& \propto & \sigma^{-n} \exp \Big[ - \frac{1}{2\sigma^2} ( \mathbf{Y} - \mathbf{X} \beta)^{\top} ( \mathbf{Y} - \mathbf{X} \beta) \Big] +\\ +& & \times \, \, \sigma^{-p} \exp \Big[ - \frac{1}{2\sigma^2} \lambda \beta^{\top} \beta \Big] \, \times \, \, [\sigma^2]^{-\alpha_0-1} \exp \Big[ - \frac{\beta_0}{2\sigma^2} \Big]. +\end{align*} +As +\begin{align*} +& & \hspace{-1.5cm} ( \mathbf{Y} - \mathbf{X} \beta)^{\top} ( \mathbf{Y} - \mathbf{X} \beta) + \lambda \beta^{\top} \beta +\\ +& = \mathbf{Y}^{\top} \mathbf{Y} - +\beta^{\top} \mathbf{X}^{\top} \mathbf{Y} - \mathbf{Y}^{\top} \mathbf{X} \beta + \beta^{\top} \mathbf{X}^{\top} \mathbf{X} \beta + \lambda \beta^{\top} \beta +\\ +& = \mathbf{Y}^{\top} \mathbf{Y} - \beta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& & - \, \mathbf{Y}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \beta + \beta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \beta +\\ +& = \mathbf{Y}^{\top} \mathbf{Y} - \beta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) +\hat{\beta} (\lambda) +\\ +& & - \, [ \hat{\beta} (\lambda) ]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \beta + \beta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \beta +\\ +& = \mathbf{Y}^{\top} \mathbf{Y} - \mathbf{Y}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& & + \, \big[ \beta - \hat{\beta}(\lambda) \big]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \big[ \beta - \hat{\beta}(\lambda) \big], +\end{align*} +the posterior distribution can be rewritten to: +\begin{align*} +f_{\beta, \sigma^2} (\beta, \sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) +& \propto & g_{\beta} (\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) \, +g_{\sigma^2} (\sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) +\end{align*} +with +\begin{align*} +g_{\beta} (\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) +& \propto & \exp \Big\{ - \frac{1}{2\sigma^2} \big[ \beta - \hat{\beta}(\lambda) \big]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \big[ \beta - \hat{\beta}(\lambda) \big] \Big\}. +\end{align*} +Then, clearly the conditional posterior mean of $\beta$ is $\mathbb{E}(\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) = \hat{\beta}(\lambda)$. Hence, the ridge regression estimator can be viewed as the Bayesian posterior mean estimator of $\beta$ when imposing a Gaussian prior on the regression parameter. + +With little extra work we may also obtain the conditional posterior of $\sigma^2$ from the joint posterior distribution: +\begin{align*} +f_{\sigma^2} (\sigma^2 \, | \, \beta, \mathbf{Y}, \mathbf{X}) & \propto & (\sigma^2)^{-[(n+p)/2 + \alpha_0 + 1]} +\exp [ - \frac{1}{2\sigma^2} ( \| \mathbf{Y} - \mathbf{X} \beta \|_2^2 + +\lambda \| \beta \|_2^2 + \beta_0) ], +\end{align*} +in which one can recognize the shape of an inverse gamma distribution. +\\ +\\ +A Bayesian estimator of a parameter $\ttheta$ is the estimator that minimizes the Bayes risk over a prior distribution of the parameter $\ttheta$. The Bayes risk is defined as $\int_{\ttheta} \mathbb{E} [(\hat{\ttheta} - \ttheta)^{\top} (\hat{\ttheta} - \ttheta)] \pi_{\ttheta}(\ttheta; \aalpha) d\ttheta$, where $\pi_{\ttheta}(\ttheta; \aalpha)$ is the prior distribution of $\ttheta$ with hyperparameter $\aalpha$. It is thus a weighted average of the Mean Squared Error, with weights specified through the prior. The Bayes risk is minimized by the mean posterior $\mathbb{E}_{\ttheta}(\ttheta \, | \, \mbox{data})$ (cf., e.g., \citealp{Bijm2017}). The Bayesian estimator of $\ttheta$ thus yields the smallest possible expected MSE, under the assumption of the employed prior. + +The Bayes risk of the ridge estimator over the normal prior $\beta \sim \mathcal{N}(\mathbf{0}_p, \sigma^2 \lambda^{-1} \mathbf{I}_{pp})$ is: +\begin{align*} +\mathbb{E}_{\beta} \{\mbox{MSE}[\hat{\beta}(\lambda)] +\, | \, \sigma^2, \mathbf{Y}, \mathbf{X} \} & = \sigma^2 \, \mbox{tr}\big\{ \mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{W}_{\lambda}^{\top} \big\} + \mathbb{E}_{\beta} [ \beta^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \, \beta] +\\ +& = \sigma^2 \, \big\{ \mbox{tr} \big[ \mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{W}_{\lambda}^{\top} \big] + +\lambda^{-1} \mbox{tr} [(\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})] \big\} +\\ +& = \sigma^2 \sum_{j=1}^p (d_{jj}^2 + \lambda)^{-1}, +\end{align*} +in which we have used *i)* the previously derived explicit expression (ref{form.ridgeMSE}) of the ridge estimator's MSE, *ii)* the expectation of the quadratic form of a multivariate random variable \citep{Math1992}, *iii)* the singular value decomposition of $\mathbf{X}$ with singular values $d_{jj}$, and *iv)* the fact that the trace of a square matrix equals the sum of its eigenvalues. As the ridge estimator coincides with the posterior mean, this is the minimal achievable MSE under a zero-centered normal prior with an uncorrelated and equivariant covariance matrix. + +Above the Bayes risk of the ridge estimator factorizes with respect to $\sigma^2$ and $\lambda$. Hence, the larger the hyperparameter $\lambda$ the lower the Bayes risk of the ridge estimator. In particular, its Bayes risk converges to zero as $\lambda \rightarrow \infty$. This can be understood as follows. The limit corresponds to an infinite precision of the prior, thus reducing the variance contribution to the MSE. Moreover, as the ridge estimator shrinks towards zero and the prior distribution of $\beta$ has a zero mean, the bias too vanishes as $\lambda \rightarrow \infty$. + +The calculation of the Bayes risk above relates the Bayesian and frequentist statements on the MSE of the ridge estimator. For the latter revisit Theorem ref{theo.Theobald2} of Section ref{sect:ridgeMSE}, which states the existence of a $\lambda$ such that the resulting ridge estimator has a superior MSE over that of the ML estimator. This result made no assumption on (the distribution of) $\beta$. In fact, it can be viewed as a statement of the MSE conditional on $\beta$. The Bayesian result integrates out the uncertainty - specified by the prior - in $\beta$ from the (frequentist's) conditional MSE to arrive at the unconditional MSE. + + + +# The Bayesian result states that the ridge regression estimator minimizes the weighted MSE (over a normal prior on the parameter $\beta$). It thus integrates out the uncertainty in $\beta$ from the (frequentist's) conditional MSE to arrive at the unconditional MSE. + +======= Degrees of freedom ======= + +The degrees of freedom consumed by ridge regression is calculated. The degrees of freedom may be used in combination with an information criterion to decide on the value of the penalty parameter. Recall from ordinary regression that: +\begin{align*} +\widehat{\mathbf{Y}} & = \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} \, \, \, = \, \, \, \mathbf{H} \mathbf{Y}, +\end{align*} +where $\mathbf{H}$ is the hat matrix. The degrees of freedom used in the regression is then equal to $\mbox{tr}(\mathbf{H})$, the trace of $\mathbf{H}$. In particular, if $ \mathbf{X}$ is of full rank, i.e. $\mbox{rank}(\mathbf{X}) = p$, then $\mbox{tr}(\mathbf{H}) = p$. + +By analogy, the ridge-version of the hat matrix is: +\begin{align*} +\mathbf{H}(\lambda) & = \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top}. +\end{align*} +Continuing this analogy, the degrees of freedom of ridge regression is given by the trace of the ridge hat matrix $\mathbf{H}(\lambda)$: +\begin{align*} +\mbox{tr}[ \mathbf{H}(\lambda)] & = \mbox{tr}[ \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} ] \, \, \, = \, \, \, \sum_{j=1}^p \frac{d_{jj}^2}{d_{jj}^2 + \lambda}. +\end{align*} +The degrees of freedom consumed by ridge regression is monotone decreasing in $\lambda$. In particular: +\begin{align*} +\lim_{\lambda \rightarrow \infty} \mbox{tr}[ \mathbf{H}(\lambda)] & = 0. +\end{align*} +That is, in the limit no information from $\mathbf{X}$ is used. Indeed, $\beta$ is forced to equal $\mathbf{0}_{p}$ which is not derived from data. + + + +======= Efficient calculation ======= + +In the high-dimensional setting the number of covariates $p$ is large compared to the number of samples $n$. In a microarray experiment $p = 40000$ and $n= 100$ is not uncommon. To perform ridge regression in this context, the following expression needs to be evaluated numerically: +\begin{align*} +(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}. +\end{align*} +For $p=40000$ this requires the inversion of a $40000 \times 40000$ dimensional matrix. This is not feasible on most desktop computers. However, there is a workaround. + +Revisit the singular value decomposition of $\mathbf{X} = \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top}$ and write $\mathbf{R}_x = \mathbf{U}_x \mathbf{D}_x$. As both $\mathbf{U}_x$ and $\mathbf{D}_x$ are $(n \times n)$-dimensional matrices, so is $\mathbf{R}_x$. Consequently, $\mathbf{X}$ is now decomposed as $\mathbf{X} = \mathbf{R}_x \mathbf{V}_x^{\top}$. The ridge estimator can be rewritten in terms of $\mathbf{R}_x$ and $\mathbf{V}_x$: +\begin{align*} +\hat{\beta}(\lambda) & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = (\mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{R}_x \mathbf{V}_x^{\top} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{Y} +\\ +& = (\mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{R}_x \mathbf{V}_x^{\top} + \lambda \mathbf{V}_x \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{Y} +\\ +& = \mathbf{V}_x (\mathbf{R}_x^{\top} \mathbf{R}_x + \lambda \mathbf{I}_{nn})^{-1} \mathbf{V}_x^{\top} \mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{Y} +\\ +& = \mathbf{V}_x (\mathbf{R}_x^{\top} \mathbf{R}_x + \lambda \mathbf{I}_{nn})^{-1} \mathbf{R}_x^{\top} \mathbf{Y}. +\end{align*} +Hence, the reformulated ridge estimator involves the inversion of an $(n \times n)$-dimensional matrix. With $n= 100$ this is feasible on most standard computers. + +cite{Hast2004} point out that the number of computation operations reduces from $\mathcal{O}(p^3)$ to $\mathcal{O}(p n^2)$. In addition, they point out that this computational short-cut can be used in combination with other loss functions, for instance that of standard generalized linear models. +\\ +\\ +Avoidance of the inversion of the $(p \times p)$-dimensional matrix may be achieved in an other way. Hereto one needs the Woodbury identity. Let $\mathbf{A}$, $\mathbf{U}$ and $\mathbf{V}$ be $(p \times p)$-, $(p \times n)$- and $(n \times p)$-dimensional matrices, respectively. +The (simplified form of the) Woodbury identity then is: +\begin{align*} +(\mathbf{A} + \mathbf{U} \mathbf{V})^{-1} & = \mathbf{A}^{-1} - \mathbf{A}^{-1} \mathbf{U} (\mathbf{I}_{nn} + \mathbf{V} \mathbf{A}^{-1} \mathbf{U})^{-1} \mathbf{V} \mathbf{A}^{-1}. +\end{align*} +Application of the Woodbury identity to the matrix inverse in the ridge estimator of the regression parameter gives: +\begin{align*} +(\lambda \mathbf{I}_{pp} + \mathbf{X}^{\top} \mathbf{X})^{-1} & = \lambda^{-1} \mathbf{I}_{pp} - \lambda^{-2} \mathbf{X}^{\top} (\mathbf{I}_{nn} + \lambda^{-1} \mathbf{X} \mathbf{X}^{\top})^{-1} \mathbf{X}. +\end{align*} +This gives: +\begin{align*} +(\lambda \mathbf{I}_{pp} + \mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} & = \lambda^{-1} \mathbf{X}^{\top} \mathbf{Y} - \lambda^{-2} \mathbf{X}^{\top} (\mathbf{I}_{nn} + \lambda^{-1} \mathbf{X} \mathbf{X}^{\top})^{-1} \mathbf{X} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = \lambda^{-1} \mathbf{X}^{\top} \left[ \mathbf{Y} - \lambda^{-1} \mathbf{X}^{\top} (\mathbf{I}_{nn} + \lambda^{-1} \mathbf{X} \mathbf{X}^{\top})^{-1} \mathbf{X} \mathbf{Y} \right]. +\end{align*} +The inversion of the $(p \times p)$-dimensional matrix $\lambda \mathbf{I}_{pp} + \mathbf{X}^{\top} \mathbf{X}$ is thus replaced by that of the $(n \times n)$-dimensional matrix $\mathbf{I}_{nn} + \lambda^{-1} \mathbf{X} \mathbf{X}^{\top}$. In addition, this expression of the ridge regression estimator avoids the singular value decomposition of $\mathbf{X}$, which may in some cases introduce additional numerical errors (e.g. at the level of machine precision). + + + +======= Choice of the penalty parameter ======= + +Throughout the introduction of ridge regression and the subsequent discussion of its properties the penalty parameter is considered known or `given'. In practice, it is unknown and the user needs to make an informed decision on its value. Several strategies to facilitate such a decision are presented. + +===== Information criterion ===== + +A popular strategy is to choose a penalty parameter that yields a good but parsimonious model. Information criteria measure the balance between model fit and model complexity. Here we present the Aikaike's information criterion (AIC), but many other criteria have been presented in the literature (e.g. \citealp{Akai1974}, \citealp{Schw1978}). The AIC measures model fit by the log-likelihood and model complexity is measured by the number of parameters used by the model. The number of model parameters in regular regression simply corresponds to the number of covariates in the model. Or, by the degrees of freedom consumed by the model, which is equivalent to the trace of the hat matrix. For ridge regression it thus seems natural to define model complexity +analogously by the trace of the ridge hat matrix. This yields the AIC for the linear regression model with ridge estimates: +\begin{align*} +\mbox{AIC}(\lambda) & = 2 \, p - 2 \log(\hat{L}) +\\ +& = 2 \, \mbox{tr} [\mathbf{H}(\lambda)] - 2 \log\{L[\hat{\beta}(\lambda), \hat{\sigma}^2(\lambda)]\} +\\ +& = 2 \, \sum_{j=1}^p \frac{d_{jj}^2}{d_{jj}^2 + \lambda} ++ 2 n \, \log[\sqrt{2 \, \pi} \, \hat{\sigma}(\lambda)] + \frac{1}{\hat{\sigma}^2(\lambda)} \sum_{i=1}^n [y_i - \mathbf{X}_{i, \ast} \, \hat{\beta}(\lambda)]^2. +\end{align*} +The value of $\lambda$ which minimizes $\mbox{AIC}(\lambda)$ corresponds to the `optimal' balance of model complexity and overfitting. + +Information criteria guide the decision process when having to decide among various different models. Different models use different sets of explanatory variables to explain the behaviour of the response variable. In that sense, the use of information criteria for the deciding on the ridge penalty parameter may be considered inappropriate: ridge regression uses the same set of explanatory variables irrespective of the value of the penalty parameter. Moreover, often ridge regression is employed to predict a response and not to provide an insightful explanatory model. The latter need not yield the best predictions. Finally, empirically we observe that the AIC often does not show an optimum *inside* the domain of the ridge penalty parameter. Henceforth, we refrain from the use of the AIC (or any of its relatives) in determining the optimal ridge penalty parameter. + + +===== Cross-validation} label{subsect.crossvalidation ===== +Instead of choosing the penalty parameter to balance model fit with model complexity, cross-validation requires it (i.e. the penalty parameter) to yield a model with good prediction performance. Commonly, this performance is evaluated on novel data. Novel data need not be easy to come by and one has to make do with the data at hand. The setting of `original' and novel data is then mimicked by sample splitting: the data set is divided into two (groups of samples). One of these two data sets, called the *training set*, plays the role of `original' data on which the model is built. The second of these data sets, called the *test set*, plays the role of the `novel' data and is used to evaluate the prediction performance (often operationalized as the log-likelihood or the prediction error) of the model built on the training data set. This procedure (model building and prediction evaluation on training and test set, respectively) is done for a collection of possible penalty parameter choices. The penalty parameter that yields the model with the best prediction performance is to be preferred. The thus obtained performance evaluation depends on the actual split of the data set. To remove this dependence the data set is split many times into a training and test set. For each split the model parameters are estimated for all choices of $\lambda$ using the training data and estimated parameters are evaluated on the corresponding test set. The penalty parameter that on average over the test sets performs best (in some sense) is then selected. + +When the repetitive splitting of the data set is done randomly, samples may accidently end up in a fast majority of the splits in either training or test set. Such samples may have an unbalanced influence on either model building or prediction evaluation. To avoid this $k$-fold cross-validation structures the data splitting. The samples are divided into $k$ more or less equally sized exhaustive and mutually exclusive subsets. In turn (at each split) one of these subsets plays the role of the test set while the union of the remaining subsets constitutes the training set. Such a splitting warrants a balanced representation of each sample in both training and test set over the splits. Still the division into the $k$ subsets involves a degree of randomness. This may be fully excluded when choosing $k=n$. This particular case is referred to as leave-one-out cross-validation (LOOCV). For illustration purposes the LOOCV procedure is detailed fully below: +\begin{compactitem} +\item[0)] Define a range of interest for the penalty parameter. + +\item[1)] Divide the data set into training and test set comprising samples $\{1, \ldots, n\} \setminus i$ and $\{ i \}$, respectively. + +\item[2)] Fit the linear regression model by means of ridge estimation for each $\lambda$ in the grid using the training set. This yields: +\begin{align*} +\hat{\beta}_{-i}(\lambda) & = ( \mathbf{X}_{-i, \ast}^{\top} +\mathbf{X}_{-i, \ast} + \lambda \mathbf{I}_{pp})^{-1} +\mathbf{X}_{-i, \ast}^{\top} \mathbf{Y}_{-i} +\end{align*} +and the corresponding estimate of the error variance $\hat{\sigma}_{-i}^2(\lambda)$. + +\item[3)] Evaluate the prediction performance of these models on the test set by $\log\{L[Y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}$. Or, by the prediction error $|Y_i - \mathbf{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)|$, possibly squared. + +\item[4)] Repeat steps 1) to 3) such that each sample plays the role of the test set once. + +\item[5)] Average the prediction performances of the test sets at each grid point of the penalty parameter: +\begin{align*} +\frac{1}{n} \sum_{i = 1}^n \log\{L[Y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}. +\end{align*} +The quantity above is called the *cross-validated log-likelihood*. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. + +\item[6)] The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. +\end{compactitem} +The procedure is straightforwardly adopted to $k$-fold cross-validation, a different criterion, and different estimators. + +In the LOOCV procedure above resampling can be avoided when the prediction performance is measured by Allen's PRESS (Predicted Residual Error Sum of Squares) statistic \citep{Alle1974}. For then, the LOOCV prediction performance can be expressed analytically in terms of the known quantities derived from the design matrix and response (as pointed out but not detailed in \citealt{Golu1979}). Define the optimal penalty parameter to minimize Allen's PRESS statistic: +\begin{align*} +\lambda_{\mbox{{\tiny opt}}} = \arg \min_{\lambda} \frac{1}{n} \sum_{i=1}^n [Y_i - \mathbf{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)]^2. +\end{align*} +To derive an analytic expression for the right-hand side first +rewrite $(\mathbf{X}_{- i, \ast}^{\top} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1}$ by means of the Woodbury identity as: +\begin{align*} +(\mathbf{X}_{- i, \ast}^{\top} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1} & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} - \mathbf{X}_{i, \ast}^{\top} \mathbf{X}_{i, \ast})^{-1} +\\ +& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} ++ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top}]^{-1} +\\ +& & \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\\ +& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} ++ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\end{align*} +with $\mathbf{H}_{ii}(\lambda) = \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top}$. +Furthermore, $\mathbf{X}_{-i}^{\top} \mathbf{Y}_{-i} = \mathbf{X}^{\top} \mathbf{Y} - \mathbf{X}_{i, \ast}^{\top} Y_i$. Substitute both in the leave-one-out ridge regression estimator and manipulate: +\begin{align*} +\hat{\beta}_{- i}(\lambda) & = (\mathbf{X}_{- i, \ast}^{\top} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{- i, \ast}^{\top} \mathbf{Y}_{- i} +\\ +& = \{(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} ++ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1}\} +\\ +& & \times (\mathbf{X}^{\top} \mathbf{Y} - \mathbf{X}_{i, \ast}^{\top} Y_i ) +\\ +& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} Y_i +\\ +& & + (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii} (\lambda)]^{-1} \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\mathbf{X}^{\top} \mathbf{Y} +\\ +& & - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} +\mathbf{X}_{i, \ast}^{\top} Y_i +\\ +& = \hat{\beta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ 1 - \mathbf{H}_{ii}(\lambda)] Y_i +\\ +& & + (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) +\\ +& & - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{H}_{ii} (\lambda) Y_i +\\ +& = \hat{\beta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \{ [ 1 - \mathbf{H}_{ii}(\lambda)] Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) + \mathbf{H}_{ii}(\lambda) Y_i \} +\\ +& = \hat{\beta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) ]. +\end{align*} +The latter enables the reformulation of the prediction error as: +\begin{align*} +Y_i - \mathbf{X}_{i, \ast} \hat{\beta}_{-i}(\lambda) & = Y_i - \mathbf{X}_{i, \ast} \{ \hat{\beta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda)] \} +\\ +& = Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) + \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) ] +\\ +& = Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) + \mathbf{H}_{ii} (\lambda)[ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) ] +\\ +& = [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast}^{\top} \hat{\beta}(\lambda) ], +\end{align*} +which in turn results in the re-expression of Allen's PRESS statistic: +\begin{align*} +\lambda_{\mbox{{\tiny opt}}} & = \arg \min_{\lambda} \frac{1}{n} \sum_{i=1}^n [Y_i - \mathbf{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)]^2 +\, \, \, = \, \, \, \arg \min_{\lambda} \tfrac{1}{n} \| \mathbf{B}(\lambda) [\mathbf{I}_{nn} - \mathbf{H}(\lambda)] \mathbf{Y} \|_ F^2, +\end{align*} +where $\mathbf{B}(\lambda)$ is diagonal with $[\mathbf{B}(\lambda)]_{ii} = [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1}$. Hence, the prediction performance for a given $\lambda$ can be assessed directly from the ridge hat matrix and the response vector without the recalculation of the $n$ leave-one-out ridge estimators. Computationally, this is a considerable gain. + + + +======= Simulations ======= + +Simulations are presented that illustrate properties of the ridge estimator not discussed explicitly in the previous sections of this chapter. + +===== Role of the variance of the covariates} label{ridge:covariateVariances ===== +In many applications of high-dimensional data the covariates are standardized prior to the execution of the ridge regression. Before we discuss whether this is appropriate, we first illustrate the effect of ridge penalization on covariates with distinct variances using simulated data. + +The simulation involves one response to be (ridge) regressed on fifty covariates. Data (with $n=1000$) for the covariates, denoted $\mathbf{X}$, are drawn from a multivariate normal distribution: $\mathbf{X} \sim \mathcal{N}(\mathbf{0}_{50}, \mathbf{\Sigma})$ with $\mathbf{\Sigma}$ diagonal and $(\mathbf{\Sigma})_{jj} = j / 10$. From this the response is generated through $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$ with $\beta = \mathbf{1}_{50}$ and $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_{50}, \mathbf{I}_{50 \times 50})$. + +With the simulated data at hand the ridge regression estimates of $\beta$ are evaluated for a large grid of the penalty parameter $\lambda$. The resulting ridge regularization paths of the regression coefficients are plotted (Figure ref{fig.effectOfRidge_effectOfVariances}). All paths start ($\lambda=0$) close to one and vanish as $\lambda \rightarrow \infty$. However, ridge regularization paths of regression coefficients corresponding to covariates with a large variance dominate those with a low variance. + + +# original latex figure with scale=0.45, angle=0 + +FIGURE: [covariatesWithDifferentVariance.eps, width=400 frac=1.0] Top panel: Ridge regularization paths for coefficients of the 50 uncorrelated covariates with distinct variances. Color and line type indicated the grouping of the covariates by their variance. Bottom panels: Graphical illustration of the effect of a covariate's variance on the ridge estimator. The grey circle depicts the ridge parameter constraint. The dashed black ellipsoids are the level sets of the least squares loss function. The red dot is the ridge regression estimate. Left and right panels represent the cases with equal and unequal, respectively, variances of the covariates.} label{fig.effectOfRidge_effectOfVariances + + + + + +Ridge regression's preference of covariates with a large variance can intuitively be understood as follows. First note that the ridge regression estimator now can be written as: +\begin{align*} +\beta (\lambda) & = [ \mbox{Var}(\mathbf{X}) + \lambda \mathbf{I}_{50 \times 50}]^{-1} \mbox{Cov}(\mathbf{X}, \mathbf{Y}) +\\ +& = ( \SSigma + \lambda \mathbf{I}_{50 \times 50})^{-1} \SSigma [ \mbox{Var}(\mathbf{X}) ]^{-1} \mbox{Cov}(\mathbf{X}, \mathbf{Y}) +\\ +& = ( \SSigma + \lambda \mathbf{I}_{50 \times 50})^{-1} \SSigma \beta. +\end{align*} +Plug in the employed parametrization of $\mathbf{\Sigma}$, which gives: +\begin{align*} +[\beta (\lambda)]_j & = \frac{j}{j + 50 \lambda} \, (\beta)_j. +\end{align*} +Hence, the larger the covariate's variance (corresponding to the larger $j$), the larger its ridge regression coefficient estimate. Ridge regression thus prefers (among a set of covariates with comparable effect sizes) those with larger variances. + + + +The reformulation of ridge penalized estimation as a constrained estimation problem offers a geometrical interpretation of this phenomenon. Let $p=2$ and the design matrix $\mathbf{X}$ be orthogonal, while both covariates contribute equally to the response. Contrast the cases with $\mbox{Var}(X_1) \approx \mbox{Var}(X_2)$ and $\mbox{Var}(X_1) \gg \mbox{Var}(X_2)$. The level sets of the least squares loss function associated with the former case are circular, while that of the latter are strongly ellipsoidal (see Figure ref{fig.effectOfRidge_effectOfVariances}). The diameters along the principal axes (that - due to the orthogonality of $\mathbf{X}$ - are parallel to that of the $\beta_1$- and $\beta_2$-axes) of both circle and ellipsoid are reciprocals of the variance of the covariates. When the variances of both covariates are equal, the level sets of the loss function expand equally fast along both axis. With the two covariates having the same regression coefficient, the point of these level sets closest to the parameter constraint is to be found on the line $\beta_1 = \beta_2$ (Figure ref{fig.effectOfRidge_effectOfVariances}, left panel). Consequently, the ridge regression estimate satisfies $\hat{\beta}_1 (\lambda) \approx \hat{\beta}_2(\lambda)$. With unequal variances between the covariates, the ellipsoidal level sets of the loss function have diameters of rather different sizes. In particular, along the $\beta_1$-axis it is narrow (as $\mbox{Var}(X_1)$ is large), and - vice versa - wide along the $\beta_2$-axis. Consequently, the point of these level sets closest to the circular parameter constraint will be closer to the $\beta_1$- than to the $\beta_2$-axis (Figure ref{fig.effectOfRidge_effectOfVariances}, left panel). For the ridge estimates of the regression parameter this implies $0 \ll \hat{\beta}_1 (\lambda) < 1$ and $0 < \hat{\beta}_2 (\lambda) \ll 1$. Hence, the covariate with a larger variance yields the larger ridge regression estimate. + + +Should one thus standardize the covariates prior to ridge regression analysis? When dealing with gene expression data from microarrays, the data have been subjected to a series of pre-processing steps (e.g. quality control, background correction, within- and between-normalization). The purpose of these steps is to make the expression levels of genes comparable both within and between hybridizations. The preprocessing should thus be considered an inherent part of the measurement. As such it is to be done independently of whatever down-stream analysis is to follow and further tinkering with the data is preferably to be avoided (as it may mess up the `comparable-ness' of the expression levels as achieved by the preprocessing). For other data types different considerations may apply. + +Among the considerations to decide on standardization of the covariates, one should also include the fact that ridge estimates prior and posterior to scaling do not simply differ by a factor. To see this assume that the covariates have been centered. Scaling of the covariates amounts to post-multiplication of the design matrix by a $(p \times p)$-dimensional diagonal matrix $\mathbf{A}$ with the reciprocals of the covariates' scale estimates on its diagonal \citep{Sard2008}. Hence, the ridge estimator (for the rescaled data) is then given by: +\begin{align*} +\min_{\beta} \| \mathbf{Y} - \mathbf{X} \mathbf{A} \beta \|_2^2 + \lambda \| \beta \|_ 2^2. +\end{align*} +Apply the change-of-variable $\ggamma = \mathbf{A} \beta$ and obtain: +\begin{align*} +\min_{\ggamma} \| \mathbf{Y} - \mathbf{X} \gamma \|_2^2 + \lambda \| \mathbf{A}^{-1} \ggamma \|_ 2^2 & = \min_{\beta} \| \mathbf{Y} - \mathbf{X} \gamma \|_2^2 + \sum_{j=1}^p \lambda [(\mathbf{A})_{jj}]^{-2} \gamma_j^2. +\end{align*} +Effectively, the scaling is equivalent to covariate-wise penalization. The `scaled' ridge estimator may then be derived along the same lines as before in Section ref{sect.constrainedEstimation}: +\begin{align*} +\hat{\beta}^{\mbox{{\tiny (scaled)}}} (\lambda) & = \mathbf{A}^{-1} \hat{\ggamma} (\lambda) +\, \, \, = \, \, \, \mathbf{A}^{-1} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{A}^{-2})^{-1} \mathbf{X}^{\top} \mathbf{Y}. +\end{align*} +In general, this is unequal to the ridge estimator without the rescaling of the columns of the design matrix. Moreover, it should be clear that $\hat{\beta}^{\mbox{{\tiny (scaled)}}} (\lambda) \not= \mathbf{A} \hat{\beta}(\lambda)$. + +===== Ridge regression and collinearity} label{sect:collinearCovariates ===== +Initially, ridge regression was motivated as an ad-hoc fix of (super)-collinear covariates in order to obtain a well-defined estimator. We now study the effect of this ad-hoc fix on the regression coefficient estimates of collinear covariates. In particular, their ridge regularization paths are contrasted to those of `non-collinear' covariates. + +To this end, we consider a simulation in which one response is regressed on 50 covariates. The data of these covariates, stored in a design matrix denoted $\mathbf{X}$, are sampled from a multivariate normal distribution, with mean zero and a $5 \times 5$ blocked covariance matrix: +\begin{align*} +\mathbf{\Sigma} & = \left( +\begin{array}{ccccc} +\mathbf{\Sigma}_{11} & \mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} +& \mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} +\\ +\mathbf{0}_{10 \times 10} & \mathbf{\Sigma}_{22} & \mathbf{0}_{10 \times 10} +& \mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} +\\ +\mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} +& \mathbf{\Sigma}_{33} & \mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} +\\ +\mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} +& \mathbf{0}_{10 \times 10} & \mathbf{\Sigma}_{44} & \mathbf{0}_{10 \times 10} +\\ +\mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} +& \mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} & \mathbf{\Sigma}_{55} +\end{array} +\right) +\end{align*} +with +\begin{align*} +\mathbf{\Sigma}_{kk} & = \frac{k-1}{5} \, \mathbf{1}_{10 \times 10} + \frac{6-k}{5} \, \mathbf{I}_{10 \times 10}. +\end{align*} +The data of the response variable $\mathbf{Y}$ are then obtained through: $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$, with $\vvarepsilon \sim \mathcal{N}( \mathbf{0}_{n}, \mathbf{I}_{nn})$ and $\beta = \mathbf{1}_{50}$. Hence, all covariates contribute equally to the response. Would the columns of $\mathbf{X}$ be orthogonal, little difference in the ridge estimates of the regression coefficients is expected. + +The results of this simulation study with sample size $n=1000$ are presented in Figure ref{fig.ridgeEstimates_correlatedCovariates}. All 50 regularization paths start close to one as $\lambda$ is small and converge to zero as $\lambda \rightarrow \infty$. But the paths of covariates of the same block of the covariance matrix $\mathbf{\Sigma}$ quickly group, with those corresponding to a block with larger off-diagonal elements above those with smaller ones. Thus, ridge regression prefers (i.e. shrinks less) coefficient estimates of strongly positively correlated covariates. + +# original latex figure with scale=0.45, angle=0 + +FIGURE: [correlatedCovariates.eps, width=400 frac=1.0] Left panel: Ridge regularization paths for coefficients of the 50 covariates, with various degree of collinearity but equal variance. Color and line type correspond to the five blocks of the covariate matrix $\mathbf{\Sigma}$. Right panel: Graphical illustration of the effect of the collinearity among covariates on the ridge estimator. The solid and dotted grey circles depict the ridge parameter constraint for the collinear and orthogonal cases, respectively. The dashed black ellipsoids are the level sets of the sum-of-squares squares loss function. The red dot and violet diamond are the ridge regression for the positive collinear and orthogonal case, respectively.} label{fig.ridgeEstimates_correlatedCovariates +# \afterpage{} + + + +Intuitive understanding of the observed behaviour may be obtained from the $p=2$ case. Let $U$, $V$ and $\varepsilon$ be independent random variables with zero mean. Define $X_1 = U + V$, $X_2 = U - V$, and $Y = \beta_1 X_1 + \beta_2 X_2 + \varepsilon$ with $\beta_1$ and $\beta_2$ constants. Hence, $\mathbb{E}(Y) = 0$. Then: +\begin{align*} +# Y & = \beta_1 X_1 + \beta_2 X_2 + \varepsilon +# \\ +# & = \beta_1 (U + V) + \beta_2 (U - V) + \varepsilon +# \\ +Y & = (\beta_1 + \beta_2) U + (\beta_1 - \beta_2) V + \varepsilon +\\ +& = \gamma_u U + \gamma_v V + \varepsilon +\end{align*} +and $\mbox{Cor}(X_{1}, X_{2}) = [\mbox{Var}(U) - \mbox{Var}(V)] / [ \mbox{Var}(U) + \mbox{Var}(V) ]$. +# \begin{align*} +# \mbox{Cor}(X_{1}, X_{2}) +# & = \frac{ \mbox{Cov}(X_{1}, X_{2}) }{ \sqrt{\mbox{Var}(X_{1})} \sqrt{\mbox{Var}(X_{2})} } +# \\ +# & = \frac{ \mbox{Cov}(U + V, U - V) }{ \sqrt{\mbox{Var}(U + V)} \sqrt{\mbox{Var}(U - V)} } +# \\ +# & = +# \frac{ \mbox{Var}(U) - \mbox{Var}(V) }{ \mbox{Var}(U) + \mbox{Var}(V) }. +# \end{align*} +The random variables $X_1$ and $X_2$ are strongly positively correlated if $\mbox{Var}(U) \gg \mbox{Var}(V)$. + +The ridge regression estimator associated with regression of $Y$ on $U$ and $V$ is: +\begin{align*} +\ggamma(\lambda) & = \left( +\begin{array}{rr} +\mbox{Var}(U) + \lambda & 0 +\\ +0 & \mbox{Var}(V) + \lambda +\end{array} +\right)^{-1} +\left( +\begin{array}{r} +\mbox{Cov}(U, Y) +\\ +\mbox{Cov}(V, Y) +\end{array} +\right). +\end{align*} +For large enough $\lambda$ +\begin{align*} +\ggamma(\lambda) +# & & \frac{1}{\lambda} \left( \begin{array}{rr} \mbox{Var}(U) & 0 \\ 0 \mbox{Var}(V) \end{array} \right) \left( \begin{array}{rr} \mbox{Var}(U) & 0 +# \\ +# 0 & \mbox{Var}(V) +# \end{array} +# \right)^{-1} +# \left( +# \begin{array}{r} +# \mbox{Cov}(U, Y) +# \\ +# \mbox{Cov}(V, Y) +# \end{array} +# \right) +# \\ +& \approx \frac{1}{\lambda} +\left( +\begin{array}{rr} +\mbox{Var}(U) & 0 +\\ +0 & \mbox{Var}(V) +\end{array} +\right) +\left( +\begin{array}{r} +\beta_1 + \beta_2 +\\ +\beta_1 - \beta_2 +\end{array} +\right). +\end{align*} +When $\mbox{Var}(U) \gg \mbox{Var}(V)$ and $\beta_1 \approx \beta_2$, the ridge estimate of $\gamma_v$ vanishes for large $\lambda$. Hence, ridge regression prefers positively covariates with similar effect sizes. + + +This phenomenon too can be explained geometrically. For the illustration consider ridge estimation with $\lambda=1$ of the linear model $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$ with $\beta = (3, 3)^{\top}$, $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_2, \mathbf{I}_{22})$ and the columns of $\mathbf{X}$ strongly and positively collinear. The level sets of the sum-of-squares loss, $\| \mathbf{Y} - \mathbf{X} \beta \|_2^2$, are plotted in the right panel of Figure ref{fig.ridgeEstimates_correlatedCovariates}. Recall that the ridge estimate is found by looking for the smallest loss level set that hits the ridge contraint. The sought-for estimate is then the point of intersection between this level set and the constraint, and - for the case at hand - is on the $x=y$-line. This is no different from the case with orthogonal $\mathbf{X}$ columns. Yet their estimates differ, even though the same $\lambda$ is applied. The difference is to due to fact that the radius of the ridge constraint depends on $\lambda$, $\mathbf{X}$ and $\mathbf{Y}$. This is immediate from the fact that the radius of the constraint equals $\| \hat{\beta}(\lambda) \|_2^2$ (see Section ref{sect.constrainedEstimation}). To study the effect of $\mathbf{X}$ on the radius, we remove its dependence on $\mathbf{Y}$ by considering its expectation, which is: +\begin{align*} +\mathbb{E}[ \| \hat{\beta}(\lambda) \|_2^2 ] & = \mathbb{E} \{ [(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \hat{\beta}]^{\top} \, (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \hat{\beta} \} \nonumber % \, \, \, = \, \, \, \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \hat{\beta} ) \nonumber +\\ +# & = \mathbb{E} [ \mathbf{Y}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} ] \nonumber +# \\ +# & = \mathbb{E} [ \mathbf{Y}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} (\mathbf{X}^{\top} \mathbf{X}) (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) (\mathbf{X}^{\top} \mathbf{X})(\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} ] \nonumber +# \\ +& = \mathbb{E} [ \mathbf{Y}^{\top} \mathbf{X} +(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-2} \mathbf{X}^{\top} \mathbf{Y} ] \nonumber +\\ +& = \sigma^2 \, \mbox{tr}\big\{ \mathbf{X} +(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-2} \mathbf{X}^{\top} \big\} + \beta^{\top} \mathbf{X}^{ \top} \mathbf{X} +(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-2} \mathbf{X}^{\top} \, \mathbf{X} \beta. % label{form.expectationPenalty} +\end{align*} +In the last step we have used $\mathbf{Y} \sim \mathcal{N}( \mathbf{X} \beta, \sigma^2 \mathbf{I}_{pp})$ and the expectation of the quadratic form of a multivariate random variable $\vvarepsilon \sim \mathcal{N}(\mmu_{\varepsilon}, \SSigma_{\varepsilon})$ is $\mathbb{E} ( \vvarepsilon^{\top} \, \LLambda \, \vvarepsilon) = \mbox{tr} ( \LLambda \, \SSigma_{\varepsilon}) + \mmu_{\varepsilon}^{\top} \, \LLambda \, \mmu_{\varepsilon}$ (cf. \citealp{Math1992}). The expression for the expectation of the radius of the ridge constraint can now be evaluated for the orthogonal $\mathbf{X}$ and the strongly, positively collinear $\mathbf{X}$. It turns out that the latter is larger than the former. This results in a larger ridge constraint. For the larger ridge constraint there is a smaller level set that hits it first. The point of intersection, still on the $x=y$-line, is now thus closer to $\beta$ and further from the origin (cf. right panel of Figure ref{fig.ridgeEstimates_correlatedCovariates}). The resulting estimate is thus larger than that from the orthogonal case. + +The above needs some attenuation. Among others it depends on: *i)* the number of covariates in each block, *ii)* the size of the effects, i.e. regression coefficients of each covariate, and +*iii)* the degree of collinearity. Possibly, there are more factors influencing the behaviour of the ridge estimator presented in this subsection. + +This behaviour of ridge regression is to be understood when using (say) gene expression data to predict a certain clinical outcome. Genes work in concert to fulfil a certain function in the cell. Consequently, one expects their expression levels to be correlated. Indeed, gene expression studies exhibit many co-expressed genes, that is, genes with correlating transcript levels. + + + + +======= Illustration} label{sect.ridgeRegressionDataIllustration ======= +The application of ridge regression to actual data aims to illustrate its use in practice. + +===== MCM7 expression regulation by microRNAs ===== + +Recently, a new class of RNA was discovered, referred to as microRNA. MicroRNAs are non-coding, single stranded RNAs of approximately 22 nucleotides. Like mRNAs, microRNAs are encoded in and transcribed from the DNA. MicroRNAs play an important role in the regulatory mechanism of the cell. MicroRNAs down-regulate gene expression by either of two post-transcriptional mechanisms: mRNA cleavage or transcriptional repression. This depends on the degree of complementarity between the microRNA and the target. Perfect or nearly perfect complementarity of the mRNA to the microRNA will lead to cleavage and degradation of the target mRNA. Imperfect complementarity will repress the productive translation and reduction in protein levels without affecting the mRNA levels. +A single microRNA can bind to and regulate many different mRNA targets. Conversely, several microRNAs can bind to and cooperatively control a single mRNA target (\citealp{Bart2004}; \citealp{Esqu2006}; \citealp{Kim2006}). + +In this illustration we wish to confirm the regulation of mRNA expression by microRNAs in an independent data set. We cherry pick an arbitrary finding from literature reported in cite{Ambs2008}, which focusses on the microRNA regulation of the MCM7 gene in prostate cancer. The MCM7 gene is involved in DNA replication \citep{Tye1999}, a cellular process often derailed in cancer. Furthermore, MCM7 interacts with the tumor-suppressor gene RB1 \citep{Ster1998}. Several studies indeed confirm the involvement of MCM7 in prostate cancer \citep{Padm2004}. And recently, it has been reported that in prostate cancer MCM7 may be regulated by microRNAs \citep{Ambs2008}. + +We here assess whether the MCM7 down-regulation by microRNAs can be observed in a data set other than the one upon which the microRNA-regulation of MCM7 claim has been based. To this end we download from the Gene Expression Omnibus (GEO) a prostate cancer data set (presented by \citealp{Wang2009GeneNetworks}). This data set (with GEO identifier: GSE20161) has both mRNA and microRNA profiles for all samples available. The preprocessed (as detailed in \citealp{Wang2009GeneNetworks}) data are downloaded and require only minor further manipulations to suit our purpose. These manipulations comprise *i)* averaging of duplicated profiles of several samples, *ii)* gene- and mir-wise zero-centering of the expression data, *iii)* averaging the expression levels of the probes that interrogate MCM7. Eventually, this leaves 90 profiles each comprising of 735 microRNA expression measurements. + + + +\lstinputlisting{prostate_ridgeAnalysis.r} + + +With this prostate data set at hand we now investigate whether MCM7 is regulated by microRNAs. Hereto we fit a linear regression model regressing the expression levels of MCM7 onto those of the microRNAs. As the number of microRNAs exceeds the number of samples, ordinary least squares fails and we resort to the ridge estimator of the regression coefficients. First, an informed choice of the penalty parameter is made through maximization of the LOOCV log-likelihood, resulting in $\lambda_{\mbox{{\tiny opt}}} = 1812.826$. Having decided on the value of the to-be-employed penalty parameter, the ridge regression estimator can now readily be evaluated. The thus fitted model allows for the evaluation of microRNA-regulation of MCM7. E.g., by the proportion of variation of the MCM7 expression levels by the microRNAs as expressed in coefficient of determination: $R^2 = 0.4492$. Alternatively, but closely related, observed expression levels may be related to the linear predictor of the MCM7 expression levels: $\hat{\mathbf{Y}}(\lambda_{\mbox{{\tiny opt}}}) = \mathbf{X} \hat{\beta} (\lambda_{\mbox{{\tiny opt}}})$. The Spearman correlation of response and predictor equals 0.6295. A visual inspection is provided by the left panel of Figure ref{fig.RidgeProstateExample}. Note the difference in scale of the $x$- and $y$-axes. This is due to the fact that the regression coefficients have been estimated in penalized fashion, consequently shrinking estimates of the regression coefficients towards zero leading to small estimates and in turn compressing the range of the linear prediction. The above suggests there is indeed association between the microRNA expression levels and those of MCM7. + + + +# original latex figure with scale=0.45, angle=0 + +FIGURE: [prostate_ridgeFit.eps, width=400 frac=1.0] Left panel: Observed vs. (ridge) fitted MCM7 expression values. Right panel: Histogram of the ridge regression coefficient estimates.} label{fig.RidgeProstateExample + + +The overall aim of this illustration was to assess whether microRNA-regulation of MCM7 could also be observed in this prostate cancer data set. In this endeavour the dogma (stating this regulation should be negative) has nowhere been used. A first simple assessment of the validity of this dogma studies the signs of the estimated regression coefficients. The ridge regression estimate has 394 out of the 735 microRNA probes with a negative coefficient. Hence, a small majority has a sign in line with the `microRNA $\downarrow$ mRNA' dogma. When, in addition, taking the size of these coefficients into account (Figure ref{fig.RidgeProstateExample}, right panel), the negative regression coefficient estimates do not substantially differ from their positive counterparts (as can be witnessed from their almost symmetrical distribution around zero). Hence, the value of the `microRNA $\downarrow$ mRNA' dogma is not confirmed by this ridge regression analysis of the MCM7-regulation by microRNAs. Nor is it refuted. + + +The implementation of ridge regression in the {\tt penalized}-package offers the possibility to fully obey the dogma on negative regulation of mRNA expression by microRNAs. This requires all regression coefficients to be negative. Incorporation of the requirement into the ridge estimation augments the constrained estimation problem with an additional constraint: +\begin{align*} % label{form.constrEstProblemRidge} +\hat{\beta}(\lambda) & = \arg \min_{\| \beta \|_2^2 \leq c (\lambda) \atop \beta_j \leq 0 \, \mbox{{\tiny for all $j$}}} \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2. +\end{align*} +With the additional non-positivity constraint on the parameters, there is no explicit solution for the estimator. The ridge estimate of the regression parameters is then found by numerical optimization using e.g. the Newton-Raphson algorithm or a gradient descent approach. The next listing gives the R-code for ridge estimation with the non-positivity constraint of the linear regression model. + +\lstinputlisting{prostate_ridgeAnalysisWithConstraint.r} + +The linear regression model linking MCM7 expression to that of the microRNAs is fitted by ridge regression while simultaneously obeying the `negative regulation of mRNA by microRNA'-dogma to the prostate cancer data. In the resulting model 401 out of 735 microRNA probes have a nonzero (and negative) coefficient. There is a large overlap in microRNAs with a negative coefficient between those from this and the previous fit. The models are also compared in terms of their fit to the data. The Spearman rank correlation coefficient between response and predictor for the model without positive regression coefficients equals 0.679 and its coefficient of determination 0.524 (confer the left panel of ref{fig.RidgeProstateExample_constrainedAnalysis} for a visualization). This is a slight improvement upon the unconstrained ridge estimated model. The improvement may be small but it should be kept in mind that the number of parameters used by both models is 401 (for the model without positive regression coefficients) vs. 735. Hence, with close to half the number of parameters the dogma-obeying model gives a somewhat better description of the data. This may suggest that there is some value in the dogma as inclusion of this prior information leads to a more parsimonious model without any loss in fit. + + + +# original latex figure with scale=0.45, angle=0 + +FIGURE: [prostate_ridgeFitConstrained.eps, width=400 frac=1.0] Left panel: Observed vs. (ridge) fitted MCM7 expression values (with the non-positive constraint on the parameters in place). Right panel: Histogram of the ridge regression coefficient estimates (from the non-positivity constrained analysis).} label{fig.RidgeProstateExample_constrainedAnalysis + + + +The dogma-obeying model selects 401 microRNAs that aid in the explanation of the variation in the gene expression levels of MCM7. There is an active field of research, called *target prediction*, trying to identify which microRNAs target the mRNA of which genes. Within {\tt R} there is a collection of packages that provide the target prediction of known microRNAs. The packages differ on the method (e.g. experimental or sequence comparison) that has been used to arrive at the prediction. These target predictions may be used to evaluate the value of the found 401 microRNAs. Ideally, there would be a substantial amount of overlap. The {\tt R}-script that loads the target predictions and does the comparison is below. + +\lstinputlisting{prostate_link2predictionTools.r} + + +|-----------------------------------------------------------------| +| # #if FORMAT in ("latex", "pdflatex") +\vspace{-7pt} +# #endif | | | +|---------r--------------------r--------------------r-------------| +| # #if FORMAT in ("latex", "pdflatex") +\vspace{3pt} +# #endif | $\hat{\beta}_j = 0$ | $\hat{\beta}_j < 0$ | +| # #if FORMAT in ("latex", "pdflatex") +\vspace{-4pt} +# #endif | | | +| microRNA not target | 323 | 390 | +| microRNA target | 11 | 11 | +| # #if FORMAT in ("latex", "pdflatex") +\vspace{-9pt} +# #endif | | | +|-----------------------------------------------------------------| + + +\caption{Cross-tabulation of the microRNAs being a potential target of MCM7 vs. the value of its regression coefficient in the dogma-obeying model.} label{table.mir2mcm7prediction} + + +With knowledge available on each microRNA whether it is predicted (by at least one target prediction package) to be a potential target of MCM7, it may be cross-tabulated against its corresponding regression coefficient estimate in the dogma-obeying model being equal to zero or not. Table ref{table.mir2mcm7prediction} contains the result. Somewhat superfluous considering the data, we may test whether the targets of MCM7 are overrepresented in the group of strictly negatively estimated regression coefficients. The corresponding chi-squared test (with Yates' continuity correction) yields the test statistic $\chi^2 = 0.0478$ with a $p$-value equal to 0.827. Hence, there is no enrichment among the 401 microRNAS of those that have been predicted to target MCM7. This may seem worrisome. However, the microRNAs have been selected for their predictive power of the expression levels of MCM7. Variable selection has not been a criterion (although the sign constraint implies selection). Moreover, criticism on the value of the microRNA target prediction has been accumulating in recent years. + + +======= Conclusion ======= + +We discussed ridge regression as a modification of linear regression to overcome the empirical non-identifiability of the latter when confronted with high-dimensional data. The means to this end was the addition of a (ridge) penalty to the sum-of-squares loss function of the linear regression model, which turned out to be equivalent to constraining the parameter domain. This warranted the identification of the regression coefficients, but came at the cost of introducing bias in the estimates. Several properties of ridge regression like moments, MSE, and its Bayesian interpretation have been reviewed. Finally, its behaviour and use have been illustrated in simulation and omics data. + + +======= Exercises ======= +\begin{question}[^footnote2][^footnote2]: This exercise is freely rendered from cite{Drap1998} \mbox{ } +\\ +Find the ridge regression solution for the data below for a general value of $\lambda$ and for the straight line model $Y = \beta_0 + \beta_1 X + \varepsilon$ (only apply the ridge penalty to the slope parameter, not to the intercept). Show that when $\lambda$ is chosen as 0.4, the ridge solution fit is $\hat{Y} = 40 + 1.75 X$. Data: $\mathbf{X}^{\top} = (X_1, X_2, \ldots, X_{8})^{\top} = (-2, -1, -1, -1, 0, 1, 2, 2)^{\top}$, and $\mathbf{Y}^{\top} = (Y_1, Y_2, \ldots, Y_{8})^{\top} = (35, 40, 36, 38, 40, 43, 45, 43)^{\top}$. +\end{question} + +\begin{question}[^footnote3][^footnote3]: This exercise is freely rendered from cite{Hast2009, but can be found in many other places. The original source is unknown to the author.} label{question:ridgeAugmentation} \mbox{ } +\\ +Show that the ridge regression estimates can be obtained by ordinary least squares regression on an augmented data set. We augment the centered matrix $\mathbf{X}$ with $p$ additional row $\sqrt{\lambda} \mathbf{I}$, and augment $\mathbf{y}$ with $p$ zeros. +\end{question} + +\begin{question} label{question.ridgeResidualsProjection} \mbox{ } +\\ +The coefficients $\beta$ of a linear regression model, $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$, are estimated by $\hat{\beta} = (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}$. The associated fitted values then given by $\widehat{\mathbf{Y}} = \mathbf{X} \, \hat{\beta} = \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} = \mathbf{H} \mathbf{Y}$, where $\mathbf{H} =\mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top}$ referred to as the hat matrix. The matrix $\mathbf{P}$ is a projection matrix and satisfies $\mathbf{H} = \mathbf{H}^ 2$. Hence, linear regression projects the response $\mathbf{Y}$ onto the vector space spanned by the columns of $\mathbf{Y}$. Consequently, the residuals $\hat{\vvarepsilon}$ and $\hat{\mathbf{Y}}$ are orthogonal. Now consider the ridge estimator of the regression coefficients: $\hat{\beta}(\lambda) = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}$. Let $\hat{\mathbf{Y}}(\lambda) = \mathbf{X} \hat{\beta}(\lambda)$ be the vector of associated fitted values. + +\begin{compactitem} +\item[*a)*] Show that the matrix $\mathbf{H}(\lambda) = \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top}$, associated with ridge regression, is not a projection matrix (for any $\lambda > 0$). + +\item[*b)*] Show that the `ridge fit' $\widehat{\mathbf{Y}}(\lambda)$ is not orthogonal to the associated `ridge residuals' $\hat{\vvarepsilon}(\lambda)$ (for any $\lambda > 0$). + +\item[*c)*] Derive the distribution of the `ridge residuals'. +\end{compactitem} +\end{question} + + +\begin{question} label{question.MSEofLinearPredictor} \mbox{ } +\\ +Recall that there exists $\lambda > 0$ such that $MSE(\hat{\beta}) > MSE[\hat{\beta}(\lambda)]$. Verify that this carries over to the linear predictor. That is, there exists a $\lambda > 0$ such that$MSE(\widehat{\mathbf{Y}}) = MSE(\mathbf{X} \hat{\beta}) > MSE[\mathbf{X}\hat{\beta}(\lambda)]$. +\end{question} + +\begin{question} \mbox{ } +\\ +Consider a 3-gene pathway. Expression levels of these three genes have been measured in an observational study involving hundred individuals. In order to assess how the expression levels of gene A are affect by that of genes B and C, a medical researcher fits the +\begin{align*} +Y_{i}^{(A)} &= \beta_b Y_{i}^{(B)} + \beta_c Y_{i}^{(C)} + +\varepsilon_{i}, +\end{align*} +with $\varepsilon_i \sim \mathcal{N}(0, \sigma^2)$. This model fitted by means of ridge regression, but with a separate penalty parameter, $\lambda_{2,b}$ and $\lambda_{2,c}$, for the two regression coefficient, $\beta_b$ and $\beta_c$, respectively. + +\begin{compactitem} +\item[*a)*] Write down the ridge penalized loss function employed by the researcher. + +\item[*b)*] Does a different choice of penalty parameter for the second regression coefficient affect the estimation of the first regression coefficient? Motivate your answer. + +\item[*c)*] The researcher decides that the second covariate $Y_i^{(C)}$ is irrelevant. Instead of removing the covariate from model, the researcher decides to set $\lambda_{2,c} = +\infty$. Show that this results in the same ridge estimate for $\beta_b$ as when fitting (again by means of ridge regression) the model without the second covariate. +\end{compactitem} +\end{question} + +\begin{question} \mbox{ } +\\ +The expression levels of the $j$-the gene are explained by a linear regression model in terms of those of all other genes. Consider the following two ridge regression estimators of the regression parameter of this model, defined as: +\begin{align*} +\arg \max_\beta \sum_{i=1}^n (Y_{i,j} - \mathbf{Y}_{i,\setminus j} \beta_j)^2 + \lambda \| \beta_j \|_ 2^2 +\quad +\mbox{and} \quad +\arg \max_\beta \sum_{i=1}^n (Y_{i,j} - \mathbf{Y}_{i,\setminus j} \beta_j)^2 + n \lambda \| \beta_j \|_ 2^2. +\end{align*} +Which do you prefer? Motivate. +\end{question} + + + + +========= Generalizing ridge regression ========= label{chap:genRidge} +# ======= Generalized ridge regression ======= + +The expos\'{e} on ridge regression may be generalized in many ways. Among others different generalized linear models may be considered (confer Section ref{sect.ridgeLogistic}). In this section we stick to the linear regression model $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$ with the usual assumptions, but fit it in weighted fashion and generalize the common, spherical penalty. The loss function corresponding to this scenario is: + +!bt + +!bt +\begin{align} label{form:generalizedRidgeLoss} +(\mathbf{Y} - \mathbf{X} \beta)^{\top} \mathbf{W} (\mathbf{Y} - \mathbf{X} \beta) + (\beta - \beta_0)^{\top} \mathbf{\Delta} +(\beta - \beta_0), +\end{align} +!et +!et +which comprises a weighted least squares criterion and a generalized ridge penalty. In this $\mathbf{W}$ is a $(n \times n)$-dimensional, diagonal matrix with $(\mathbf{W})_{ii} \in [0,1]$ representing the weight of the $i$-th observation. The penalty is now a quadratic form with penalty parameter $\mathbf{\Delta}$, a $(p \times p)$-dimensional, positive definite, symmetric matrix. When $\mathbf{\Delta} = \lambda \mathbf{I}_{pp}$, one regains the spherical penalty of `regular ridge regression'. This penalty shrinks each element of the regression parameter $\beta$ equally along the unit vectors $\mathbf{e}_j$. Generalizing $\mathbf{\Delta}$ to the class of symmetric, positive definite matrices $\mathcal{S}_{++}$ allows for *i)* different penalization per regression parameter, and *ii)* joint (or correlated) shrinkage among the elements of $\beta$. The penalty parameter $\mathbf{\Delta}$ determines the speed and direction of shrinkage. The $p$-dimensional column vector $\beta_0$ is a user-specified, non-random target towards which $\beta$ is shrunken as the penalty parameter increases. When recasting generalized ridge estimation as a constrained estimation problem, the implications of the penalty may be visualized (Figure ref{fig:generalizedRidgeIllustration}, left panel). The generalized ridge penalty is a quadratic form centered around $\beta_0$. In Figure ref{fig:generalizedRidgeIllustration} the parameter constraint clearly is ellipsoidal (and not spherical). Moreover, the center of this ellipsoid is not at zero. + +# original latex figure with scale=0.40, angle=0 + +FIGURE: [generalizedRidgeIllustration_penalty.eps, width=400 frac=1.0] Left panel: the contours of the likelihood (grey solid ellipsoids) and the parameter constraint implied by the generalized penalty (black dashed ellipsoid. Right panel: generalized (fat coloured lines) and `regular' (thin coloured lines) regularization paths of four regression coefficients. The dotted grey (straight) lines indicated the targets towards the generalized ridge penalty shrinks regression coefficient estimates.} label{fig:generalizedRidgeIllustration + + +The addition of the generalized ridge penalty to the sum-of-squares ensures the existence of a unique regression estimator in the face of super-collinearity. The generalized penalty is a non-degenerated quadratic form in $\beta$ due to the positive definiteness of the matrix $\mathbf{\Delta}$. As it is non-degenerate, it is strictly convex. Consequently, the generalized ridge regression loss function (ref{form:generalizedRidgeLoss}), being the sum of a convex and strictly convex function, is also strictly convex. This warrants the existence of a unique global minimum and, thereby, a unique estimator. + + +Like for the `regular' ridge loss function (ref{form.ridgeLossFunction}), there is an explicit expression for the optimum of the generalized ridge loss function (ref{form:generalizedRidgeLoss}). To see this, obtain the estimating equation of $\beta$ through equating its derivative with respect to $\beta$ to zero: +\begin{align*} +2 \mathbf{X}^{\top} \mathbf{W} \mathbf{Y} - 2 \mathbf{X}^{\top} \mathbf{W} \mathbf{X} \beta - 2 \mathbf{\Delta} \beta + 2 \mathbf{\Delta} \beta_0 & = \mathbf{0}_{p}. +\end{align*} +This is solved by: + +!bt + +!bt +\begin{align} +\hat{\beta}(\mathbf{\Delta}) & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} (\mathbf{X}^{\top} \mathbf{W} \mathbf{Y} + \mathbf{\Delta} \beta_0). +\end{align} +!et +!et +Clearly, this reduces to the `regular' ridge estimator by setting $\mathbf{W} = \mathbf{I}_{nn}$, $\beta_0 = \mathbf{0}_{p}$, and $\mathbf{\Delta} = \lambda \mathbf{I}_{pp}$. The effects of the generalized ridge penalty on the estimates can be seen in the regularization paths of the estimates. Figure ref{fig:generalizedRidgeIllustration} (right panel) contains an example of the regularization paths for coefficients of a linear regression model with four explanatory variables. Most striking is the limiting behaviour of the estimates of $\beta_3$ and $\beta_4$ for large values of the penalty parameter $\lambda$: they convergence to a non-zero value (as was specified by a nonzero $\beta_0$). More subtle is the (temporary) convergence of the regularization paths of the estimates of $\beta_2$ and $\beta_3$. That of $\beta_2$ is pulled away from zero (its true value and approximately its unpenalized estimate) towards the estimate of $\beta_3$. In the regularization path of $\beta_3$ this can be observed in a delayed convergence to its nonzero target value (for comparison consider that of $\beta_4$). For reference the corresponding regularization paths of the `regular' ridge estimates (as thinner lines of the same colour) are included in Figure ref{fig:generalizedRidgeIllustration}. + + + +\begin{example} *Fused ridge estimation* label{example.gRidge2orthonormalDesign} +\\ +An example of a generalized ridge penalty is the *fused ridge penalty*. Consider the standard linear model $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$. The fused ridge estimator of $\beta$ then minimizes: + +!bt + +!bt +\begin{align} label{form:fusedRidgeLoss} +\| \mathbf{Y} - \mathbf{X} \beta \|_2^2 + \lambda \sum_{j=2}^p \| \beta_{j} - \beta_{j-1} \|_2^2. +\end{align} +!et +!et +The penalty in the loss function above can be written as a generalized ridge penalty: +\begin{align*} +\lambda \sum_{j=2}^p \| \beta_{j} - \beta_{j-1} \|_2^2 & = \beta^{\top} +\left( +\begin{array}{rrrrrr} +\lambda & -\lambda & 0 & \ldots & \ldots & 0 +# #if FORMAT in ("latex", "pdflatex") +\vspace{-4pt} +# #endif +\\ +-\lambda & 2 \lambda & -\lambda & \ddots & & \vdots +# #if FORMAT in ("latex", "pdflatex") +\vspace{-4pt} +# #endif +\\ +0 & -\lambda & 2 \lambda & \ddots & \ddots & \vdots +# #if FORMAT in ("latex", "pdflatex") +\vspace{-4pt} +# #endif +\\ +\vdots & \ddots & \ddots & \ddots & \ddots & 0 +# #if FORMAT in ("latex", "pdflatex") +\vspace{-4pt} +# #endif +\\ +\vdots & & \ddots & \ddots & \ddots & -\lambda +# # #if FORMAT in ("latex", "pdflatex") +\vspace{-4pt} +# #endif +\\ +0 & \ldots & \ldots & 0 & -\lambda & \lambda +\end{array}\right) +\beta. +\end{align*} +The matrix $\mathbf{\Delta}$ employed above is semi-positive definite and therefore the loss function (ref{form:fusedRidgeLoss}) is not strictly convex. Hence, often a regular ridge penalty $\| \beta \|_2^2$ is added (with its own penalty parameter). + +To illustrate the effect of the fused ridge penalty on the estimation of the linear regression model $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$, let $\beta_j = \phi_{0,1}(z_j)$ with $z_j =-30 + \tfrac{6}{50} j$ for $j=1, \ldots, 500$. Sample the elements of the design matrix $\mathbf{X}$ and those of the error vector $\vvarepsilon$ from the standard normal distribution, then form the response $\mathbf{Y}$ from the linear model. The regression parameter is estimated through fused ridge loss minimization with $\lambda=1000$. The estimate is shown in Figure ref{fig:fusedRidgeIllustration} (red line). For reference the figure includes the true $\beta$ (black line) and the `regular ridge' estimate with $\lambda=1$ (blue line). Clearly, the fused ridge estimate yields a nice smooth vector of $\beta$ estimates +\end{example} + +# original latex figure with scale=0.40, angle=0 + +FIGURE: [fusedRidgeIllustration_simulation.eps, width=400 frac=1.0] Left panel: illustration of the fused ridge estimator (in simulation). The true parameter $\beta$ and its ridge and fused ridge estimates against their spatial order. Right panel: Ridge vs. fused ridge estimates of the DNA copy effect on KRAS expression levels. The dashed, grey vertical bar indicates the location of the KRAS gene. } label{fig:fusedRidgeIllustration + + + + +======= Moments ======= + +The expectation and variance of $\hat{\beta}(\mathbf{\Delta})$ are obtained through application of the same matrix algebra and expectation and covariance rules used in the derivation of their counterparts of the `regular' ridge regression estimator. This leads to: +\begin{align*} +\mathbb{E}[\hat{\beta}(\mathbf{\Delta})] & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} \beta + \mathbf{\Delta} \beta_0), +\\ +\mbox{Var}[\hat{\beta}(\mathbf{\Delta})] & = \sigma^2 (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} \mathbf{X}^{\top} \mathbf{W}^2 \mathbf{X} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1}. +\end{align*} +From these expressions similar limiting behaviour as for the `regular' ridge regression case can be deduced. To this end let $\mathbf{V}_{\delta} \mathbf{D}_{\delta} \mathbf{V}_{\delta}^{\top}$ be the eigendecomposition of $\mathbf{\Delta}$ and $d_{\delta,j} = (\mathbf{D}_{\delta})_{jj}$. Furthermore, define (with some abuse of notation) $\lim_{\mathbf{\Delta} \rightarrow \infty}$ as the limit of all $d_{\delta,j}$ simultaneously tending to infinity. Then, $\lim_{\mathbf{\Delta} \rightarrow \infty} \mathbb{E}[\hat{\beta}(\mathbf{\Delta})] = \beta_0$ and $\lim_{\mathbf{\Delta} \rightarrow \infty} \mbox{Var}[\hat{\beta}(\mathbf{\Delta})] = \mathbf{0}_{pp}$. + + +\begin{example} \mbox{ } label{example.gRidge2orthonormalDesign} +\\ +Let $\mathbf{X}$ be an $(n \times p)$-dimensional, orthonormal design matrix. Contrast the regular and generalized ridge regression estimator, the latter with $\mathbf{W} = \mathbf{I}_{pp}$, $\beta_0 = \mathbf{0}_p$ and $\mathbf{\Delta} = \lambda \mathbf{R}$ where $\mathbf{R} = (1-\rho) \mathbf{I}_{pp} + \rho \mathbf{1}_{pp}$ for $\rho \in (-(p-1)^{-1}, 1)$. For $\rho =0$ the two estimators coincide. The variance of the generalized ridge regression estimator then is $\mbox{Var}[ \hat{\beta}(\mathbf{\Delta})] = (\mathbf{I}_{pp} + \mathbf{\Delta})^{-2}$. The efficiency of this estimator, measured by its generalized variance, is: +\begin{align*} +\det \{ \mbox{Var}[ \hat{\beta}(\mathbf{\Delta})] \} & = \{ [1 + \lambda + (p-1) \rho] (1 + \lambda-\rho)^{p-1} \}^{-2}. +\end{align*} +This efficiency attains its minimum at $\rho = 0$. In the present case, the regular ridge regression estimator is thus more efficient than its generalized counterpart. +\end{example} + + +\begin{example} *(MSE with perfect target)* +\\ +Set $\beta_0 = \beta$, i.e. the target is equal to the true value of the regression parameter. Then: +\begin{align*} +\mathbb{E}[\hat{\beta}(\Delta)] & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \Delta)^{-1} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} \beta + \Delta \beta) \, \, \, = \, \, \, \beta. +\end{align*} +Hence, irrespective of the choice of $\Delta$, the generalized ridge is then unbiased. Thus: +\begin{align*} +\mbox{MSE}[\hat{\beta}(\Delta)] & = \mbox{tr} \{ +\mbox{Var}[\hat{\beta}(\Delta)] \} +\\ +& = \mbox{tr}[ \sigma^{2} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} \mathbf{X}^{\top} \mathbf{W}^2 \mathbf{X} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1}] +\\ +& = \sigma^2 \mbox{tr}[ \mathbf{X}^{\top} \mathbf{W}^2 \mathbf{X} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-2}]. +\end{align*} +When $\mathbf{\Delta} = \lambda \mathbf{I}_{pp}$, this MSE is smaller than that of the ML regression estimator, irrespective of the choice of $\lambda$. +\end{example} + + +======= The Bayesian connection} label{sect:genRidgeBayes ======= +This generalized ridge estimator can, like the regular ridge estimator, be viewed as a Bayesian estimator. It requires to replace the conjugate prior on $\beta$ by a more general normal law, $\beta \sim \mathcal{N}(\beta_0, \sigma^2 \mathbf{\Delta}^{-1})$, but retains the gamma prior on $\sigma^2$. The joint posterior distribution of $\beta$ and $\sigma^2$ is then obtained analogously (the details are left as Exercise ref{question.generalizedRidgeAndBayes}) to Section ref{sect:Bayes}: +\begin{align*} +f_{\beta, \sigma^2} (\beta, \sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) & = f_Y (\mathbf{Y} \, | \, \mathbf{X}, \beta, \sigma^2) \, f_{\beta}(\beta | \sigma^2) \, f_{\sigma}(\sigma^2) +\\ +& \propto & g_{\beta} (\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) \, +g_{\sigma^2} (\sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) +\end{align*} +with +\begin{align*} +g_{\beta} (\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) +& \propto & \exp \Big\{ - \frac{1}{2\sigma^2} \big[ \beta - \hat{\beta}(\mathbf{\Delta}) \big]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \mathbf{\Delta}) \big[ \beta - \hat{\beta}(\mathbf{\Delta}) \big] \Big\}. +\end{align*} +This implies $\mathbb{E}(\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) = \hat{\beta}(\mathbf{\Delta})$. Hence, the generalized ridge regression estimator too can be viewed as the Bayesian posterior mean estimator of $\beta$ when imposing a multivariate Gaussian prior on the regression parameter. + + + + + +======= Application ======= + +An illustration involving omics data can be found in the explanation of a gene's expression levels in terms of its DNA copy number. The latter is simply the number of gene copies encoded in the DNA. For instance, for most genes on the autosomal chromosomes the DNA copy number is two, as there is a single gene copy on each chromosome and autosomal chromosomes come in pairs. Alternatively, in males the copy number is one for genes that map to the X or Y chromosome, while in females it is zero for genes on the Y chromosome. In cancer the DNA replication process has often been compromised leading to a (partially) reshuffled and aberrated DNA. Consequently, the cancer cell may exhibit gene copy numbers well over a hundred for classic oncogenes. A faulted replication process does - of course - not nicely follow the boundaries of gene encoding regions. This causes contiguous genes to commonly share aberrated copy numbers. With genes being transcribed from the DNA and a higher DNA copy number implying an enlarged availability of the gene's template, the latter is expected to lead to elevated expression levels. Intuitively, one expects this effect to be localized (a so-called *cis*-effect), but some suggest that aberrations elsewhere in the DNA may directly affect the expression levels of distant genes (referred to as a *trans*-effect). + +The *cis*- and *trans*-effects of DNA copy aberrations on the expression levels of the KRAS oncogene in colorectal cancer are investigated. Data of both molecular levels from the TCGA (The Cancer Genome Atlas) repository are downloaded \citep{TCGA2012colon}. The gene expression data are limited to that of KRAS, while for the DNA copy number data only that of chromosome 12, which harbors KRAS, is retained. This leaves genomic profiles of 195 samples comprising 927 aberrations. Both molecular data types are zero centered feature-wise. Moreover, the data are limited to ten - conveniently chosen? - samples. The KRAS expression levels are explained by the DNA copy number aberrations through the linear regression model. The model is fitted by means of ridge regression, with $\lambda \mathbf{\Delta}$ and $\mathbf{\Delta} = \mathbf{I}_{pp}$ and a single-banded $\mathbf{\Delta}$ with unit diagonal and the elements of the first off-diagonal equal to the arbitrary value of $-0.4$. The latter choice appeals to the spatial structure of the genome and encourages similar regression estimates for contiguous DNA copy numbers. The penalty parameter is chosen by means of leave-one-out cross-validation using the squared error loss. + +\lstinputlisting{fusedRidge_KRASexample.r} + +The right panel of Figure ref{fig:fusedRidgeIllustration} shows the ridge regression estimate with both choices of $\mathbf{\Delta}$ and optimal penalty parameters plotted against the chromosomal order. The location of KRAS is indicated by a vertical dashed bar. The ordinary ridge regression estimates show a minor peak at the location of KRAS but is otherwise more or less flat. In the generalized ridge estimates the peak at KRAS is emphasized. Moreover, the region close to KRAS exhibits clearly elevated estimates, suggesting co-abberated DNA. For the remainder the generalized ridge estimates portray a flat surface, with the exception of a single downward spike away from KRAS. Such negative effects are biologically nonsensible (more gene templates leading to reduced expression levels?). On the whole the generalized ridge estimates point towards the *cis*-effect as the dominant genomic regulation mechanism of KRAS expression. The isolated spike may suggest the presence of a *trans*-effect, but its sign is biological nonsensible and the spike is fully absent in the ordinary ridge estimates. This leads us to ignore the possibility of a genomic *trans*-effect on KRAS expression levels in colorectal cancer. + +The sample selection demands justification. It yields a clear illustrate-able difference between the ordinary and ridge estimates. When all samples are left in, the *cis*-effect is clearly present, discernable from both estimates that yield a virtually similar profile. + + +======= Generalized ridge regression ======= + +What is generally referred to as `generalized ridge regression' (cf. \citealp{Hoer1970, Hemm1975}) is the particular case of loss function (ref{form:generalizedRidgeLoss}) in which $\mathbf{W} = \mathbf{I}_{nn}$, $\beta_0 = \mathbf{0}_{p}$, and $\mathbf{\Delta} = \mathbf{V}_{x} \mathbf{\Lambda} \mathbf{V}_x^{\top}$, where $\mathbf{V}_x$ is obtained from the singular value decomposition of $\mathbf{X}$ (i.e., $\mathbf{X} = \mathbf{U}_{x} \mathbf{D}_x \mathbf{V}_x^{\top}$ with its constituents endowed with the usual interpretation) and $\mathbf{\Lambda}$ a positive definite diagonal matrix. This gives the estimator: +\begin{align*} +\hat{\beta}(\mathbf{\Lambda}) & = (\mathbf{X}^{\top} \mathbf{X} + \mathbf{\Delta})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\\ +& = (\mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top} + \mathbf{V}_x \mathbf{\Lambda} \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x \mathbf{Y} +\\ +& = \mathbf{V}_x (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1} \mathbf{D}_x \mathbf{U}_x \mathbf{Y}. +\end{align*} +From this last expression it becomes clear how this estimator generalizes the `regular ridge estimator'. The latter shrinks all eigenvalues, irrespectively of their size, in the same manner through a common penalty parameter. The `generalized ridge estimator', through differing penalty parameters (i.e. the diagonal elements of $\mathbf{\Lambda}$), shrinks them individually. + +The generalized ridge estimator coincides with the Bayesian linear regression estimator with the normal prior $\mathcal{N}[\mathbf{0}_p, (\mathbf{V}_x \mathbf{\Lambda} \mathbf{V}_x^{\top})^{-1}]$ on the regression parameter $\beta$ (and preserving the inverse gamma prior on the error variance). Assume $\mathbf{X}$ to be of full column rank and choose $\mathbf{\Lambda} = g^{-1} \mathbf{D}_x^2$ with $g$ a positive scalar. The prior on $\beta$ then - assuming $(\mathbf{X}^{\top} \mathbf{X})^{-1}$ exits - reduces to Zellner's $g$-prior: $\beta \sim \mathcal{N}[\mathbf{0}_p, g (\mathbf{X}^{\top} \mathbf{X})^{-1}]$ \citep{Zell1986}. The corresponding estimator of the regression coefficient is: $\hat{\beta}(g) = g (1+g)^{-1} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}$, which is proportional to the unpenalized ordinary least squares estimator of $\beta$. + +For convenience of notation in the analysis of the generalized ridge estimator the linear regression model is usually rewritten as: +\begin{align*} +\mathbf{Y} & = \mathbf{X} \beta + \vvarepsilon \, \, \, = \, \, \, +\mathbf{X} \mathbf{V}_x \mathbf{V}_x^{\top} \beta + \vvarepsilon \, \, \, = \, \, \, \tilde{\mathbf{X}} \aalpha + \vvarepsilon, +\end{align*} +with $\tilde{\mathbf{X}} = \mathbf{X} \mathbf{V}_x = \mathbf{U}_x +\mathbf{D}_x$ (and thus $\tilde{\mathbf{X}}^{\top} \tilde{\mathbf{X}} = \mathbf{D}_x^ 2$) and $\aalpha = \mathbf{V}_x^{\top} \beta$ with loss function $(\mathbf{Y} - \tilde{\mathbf{X}} \aalpha)^{\top} (\mathbf{Y} - \tilde{\mathbf{X}} \aalpha) + \aalpha^{\top} \mathbf{\Lambda} \aalpha$. In the notation above the generalized ridge estimator is then: +\begin{align*} +\hat{\aalpha}(\mathbf{\Lambda}) & = (\tilde{\mathbf{X}}^{\top} \tilde{\mathbf{X}} + \mathbf{\Lambda})^ {-1} \tilde{\mathbf{X}}^{\top} \mathbf{Y} = (\mathbf{D}_x^ 2 + \mathbf{\Lambda})^{-1} \tilde{\mathbf{X}}^{\top} \mathbf{Y}, +\end{align*} +from which one obtains $\hat{\beta}(\mathbf{\Lambda}) = \mathbf{V}_x \hat{\aalpha}(\mathbf{\Lambda})$. Using $\mathbb{E}[\hat{\aalpha}(\mathbf{\Lambda})] = (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1} \mathbf{D}_x^2 \aalpha$ and $\mbox{Var}[\hat{\aalpha}(\mathbf{\Lambda})] = \sigma^2 (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1} \mathbf{D}_x^2 (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1}$, the MSE for the generalized ridge estimator can be written as: +\begin{align*} +\mbox{MSE}[\hat{\aalpha}(\mathbf{\Lambda})] & = \sum_{j=1}^p ( \sigma^2 d_{x,j}^2 + \alpha_j^2 \lambda_{j}^2 ) (d_{x,j}^2 + \lambda_{j} )^{-2}, +\end{align*} +where $d_{x,j} = (\mathbf{D}_x)_{jj}$ and $\lambda_j = (\mathbf{\Lambda})_{jj}$. Having $\aalpha$ and $\sigma^ 2$ available, it is easily seen (equate the derivative w.r.t. $\lambda_j$ to zero and solve) that the MSE of $\hat{\aalpha}(\mathbf{\Lambda})$ is minimized by $\lambda_j = \sigma^2 / \alpha_j^2$ for all $j$. With $\aalpha$ and $\sigma^2$ unknown, cite{Hoer1970} suggest an iterative procedure to estimate the $\lambda_j$'s. Initiate the procedure with the OLS estimates of $\aalpha$ and $\sigma^2$, followed by sequentially updating the $\lambda_j$'s and +the estimates of $\aalpha$ and $\sigma^2$. An analytic expression of the limit of this procedure exists (\citealp{Hemm1975}). This limit, however, still depends on the observed $\mathbf{Y}$ and as such it does not necessarily yield the minimal attainable value of the MSE. This limit may nonetheless still yield a potential gain in MSE. This is investigated in cite{Lawl1981}. Under a variety of cases it seems to indeed outperform the OLS estimator, but there are exceptions. + +======= Conclusion ======= + +To conclude: a note of caution. The generalized ridge penalty is extremely flexible. It can incorporate any prior knowledge on the parameter values (through specification of $\beta_0$) and the relations among these parameters (via $\mathbf{\Delta}$). While a pilot study or literature may provide a suggestion for $\beta_0$, it is less obvious how to choose an informative $\mathbf{\Delta}$ (although a spatial structure is a nice exception). In general, exact knowledge on the parameters should not be incorporated implicitly via the penalty (read: prior) but preferably be used explicitly in the model - the likelihood - itself. Though this may be the viewpoint of a prudent frequentist and a subjective Bayesian might disagree. + + +======= Exercises ======= +\begin{question} \mbox{ } +\\ +Consider the linear regression model $Y_i = \beta_1 X_{i,1} + \beta_2 X_{i,2} + \varepsilon_i$ for $i=1, \ldots, n$. +Suppose estimates of the regression parameters $(\beta_1, \beta_2)$ of this model are obtained through the minimization of the sum-of-squares augmented with a ridge-type penalty: +\begin{align*} +\Big[ \sum_{i=1}^n (Y_i - \beta_1 X_{i,1} - \beta_2 X_{i,2})^2 \Big] + \lambda (\beta_1^2 + \beta_2^2 + 2 \nu \beta_1 \beta_2), +\end{align*} +with penalty parameters $\lambda \in \mathbb{R}_{> 0}$ and $\nu \in (-1, 1)$. + +\begin{compactitem} +\item[*a)*] Sketch (for both $\nu=0$ and $\nu=0.9$) the shape of the parameter constraint induced by the penalty above and describe in words the qualitative difference between both shapes. + +\item[*b)*] When $\nu = -1$ and $\lambda \rightarrow \infty$ the estimates of $\beta_1$ and $\beta_2$ (resulting from minimization of the penalized loss function above) converge towards each other: +$\lim_{\lambda \rightarrow \infty} \hat{\beta}_1(\lambda, -1) = \lim_{\lambda \rightarrow \infty} \hat{\beta}_2(\lambda, -1)$. Motivated by this observation a data scientists incorporates the equality constraint $\beta_1 = \beta = \beta_2$ explicitly into the model, and s/he estimates the `joint regression parameter' $\beta$ through the minimization (with respect to $\beta$) of: +\begin{align*} +\Big[ \sum_{i=1}^n (Y_i - \beta X_{i,1} - \beta X_{i,2})^2 \Big] + \delta \beta^2, +\end{align*} +with penalty parameter $\delta \in \mathbb{R}_{> 0}$. The data scientist is surprised to find that resulting estimate $\hat{\beta}(\delta)$ does not have the same limiting (in the penalty parameter) behavior as the $\hat{\beta}_1(\lambda, -1)$, i.e. $\lim_{\delta \rightarrow \infty} \hat{\beta} (\delta) \not= \lim_{\lambda \rightarrow \infty} \hat{\beta}_1(\lambda, -1)$. Explain the misconception of the data scientist. + +\item[*c)*] Assume that *i)* $n \gg 2$, *ii)* the unpenalized estimates $(\hat{\beta}_1(0, 0), \hat{\beta}_2(0, 0))$ equal $(-2,2)$, and *iii)* that the two covariates $X_1$ and $X_2$ are zero-centered, have equal variance, and are strongly negatively correlated. Consider $(\hat{\beta}_1(\lambda, \nu), \hat{\beta}_2(\lambda, \nu))$ for both $\nu=-0.9$ and $\nu=0.9$. For which value of $\nu$ do you expect the sum of the absolute value of the estimates to be largest? *Hint:* Distinguish between small and large values of $\lambda$ and think geometrically! +\end{compactitem} +\end{question} + +\begin{question} label{question.generalizedRidgeAndBayes} \mbox{ } +\\ +Consider the linear regression model $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$ with $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_p, \sigma^2 \mathbf{I}_{pp})$. Assume $\beta \sim \mathcal{N}(\beta_0, \sigma^2 \mathbf{\Delta}^{-1})$ with $\beta_0 \in \mathbb{R}^p$ and $\mathbf{\Delta} \succ 0$ and a gamma prior on the error variance. Verify (i.e., work out the details of the derivation) that the posterior mean coincides with the generalized ridge estimator defined as: +\begin{align*} +\hat{\beta} & = (\mathbf{X}^{\top} \mathbf{X} + \mathbf{\Delta})^{-1} (\mathbf{X}^{\top} \mathbf{Y} + \mathbf{\Delta} \beta_0). +\end{align*} +\end{question} + + + +\begin{question} label{question.ridgeAR1penalty} \mbox{ } +\\ +The ridge penalty may be interpreted as a multivariate normal prior on the regression coefficients: $\beta \sim \mathcal{N}(\mathbf{0}, \lambda^{-1} \mathbf{I}_{pp})$. Different priors may be considered. In case the covariates are spatially related in some sense (e.g. genomically), it may of interest to assume a first-order autoregressive prior: $\beta \sim \mathcal{N}(\mathbf{0}, \lambda^{-1} \SSigma_A)$, in which $\SSigma_A$ is a $p \times p$-correlation matrix with $(\SSigma_A)_{j_1, j_2} = \rho^{ | j_1 - j_2 | } $ for some correlation coefficient $\rho \in [0, 1)$. Hence, +\begin{align*} +\SSigma_A \, \, \, = \, \, \, +\left( +\begin{array}{cccc} +1 & \rho & \ldots & \rho^{p-1} +\\ +\rho & 1 & \ldots & \rho^{p-2} +\\ +\vdots & \vdots & \ddots & \vdots +\\ +\rho^{p-1} & \rho^{p-2} & \ldots & 1 +\end{array} +\right). +\end{align*} + +\begin{compactitem} +\item[*a)*] The penalized loss function associated with this AR(1) prior is: +\begin{align*} +\mathcal{L}(\beta; \lambda, \SSigma_A) & = \| \mathbf{Y} - \mathbf{X} \beta \|_2^2 + \lambda \beta^{\top} \SSigma_A^{-1} \beta. +\end{align*} +Find the minimizer of this loss function. + +\item[*b)*] What is the effect of $\rho$ on the ridge estimates? Contrast this to the effect of $\lambda$. Illustrate this on (simulated) data. + +\item[*c)*] Instead of an AR(1) prior assume a prior with a uniform correlation between the elements of $\beta$. That is, replace $\SSigma_A$ by $\SSigma_U$, given by: +\begin{align*} +\SSigma_U \, \, \, = \, \, \, \left( +\begin{array}{ccc} +1 & \rho & \rho +\\ +\rho & 1 & \rho +\\ +\rho & \rho & 1 +\end{array} +\right) +\end{align*} +\\ +Investigate (again on data) the effect of changing from the AR(1) to the uniform prior on the ridge regression estimates. +\end{compactitem} +\end{question} + + + + +========= Ridge logistic regression ========= label{sect.ridgeLogistic} +# ======= Ridge logistic regression ======= + +Ridge penalized estimation is not limited to the standard linear regression model, but may be used to estimate (virtually) any model. Here we illustrate how it may be used to fit the logistic regression model. To this end we first recap this model and the (unpenalized) maximum likelihood estimation of its parameters. After which the model is estimated by means of ridge penalized maximum likelihood, which will turn out to be a relatively straightforward modification of unpenalized estimation. + +======= Logistic regression ======= + +The logistic regression model explains a binary response variable (through some transformation) by a linear combination of a set of covariates (as in the linear regression model). Denote this response of the $i$-th sample by $Y_i$ with $Y_i \in \{ 0, 1 \}$ for $i=1, \ldots, n$. The $n$-dimensional column vector $\mathbf{Y}$ stacks these $n$ responses. For each sample information on the $p$ explanatory variables $X_{i,1}, \ldots, X_{i,p}$ is available. In row vector form this information is denoted $\mathbf{X}_{i,\ast} = (X_{i,1}, \ldots, X_{i,p})$. Or, in short, $\mathbf{X}_i$ when the context tolerates no confusion. The $(n \times p)$-dimensional matrix $\mathbf{X}$ aggregates these vectors, such that $\mathbf{X}_i$ is the $i$-th row vector. + +The binary response cannot be modelled as in the linear model like $Y_i = \mathbf{X}_i \beta + \varepsilon_i$. With each element of $\mathbf{X}_i$ and $\beta$ assuming a value in $\mathbb{R}$, the linear predictor is not restricted to the domain of the response. This is resolved by modeling $p_i = P(Y_i = 1)$ instead. Still the linear predictor may exceed the domain of the response ($p_i \in [0,1]$). Hence, a transformation is applied to map $p_i$ to $\mathbb{R}$, the range of the linear predictor. +# original latex figure with scale=0.40, angle=0 + +FIGURE: [logistic_effectOfBeta0.eps, width=400 frac=1.0] Top row, left panel: the response curve for various choices of the intercept $\beta_0$. Top row, right panel: the response curve for various choices of the regression coefficent $\beta_1$. Bottom row, left panel: the responce curve for various choices of the link function. Bottom panel, right panel: observations, fits and their deviations. } label{fig.logisticRidge_modelAndFitIllustration +The transformation associated with the logistic regression model is the logarithm of the odds, with the odds defined as: $\mbox{*odds*} = P(\mbox{succes}) / P(\mbox{failure}) = p_i/ (1-p_i)$. The logistic model is then written as $\log[ p_i / (1-p_i)] = \mathbf{X}_i \beta$ for all $i$. Or, expressed in terms of the response: +\begin{align*} +p_i & = P(Y_i = 1) \, \, \, = \, \, \, g^{-1}(\mathbf{X}_i; \beta) \, \, \, = \, \, \,\frac{\exp(\mathbf{X}_i \beta) }{1 + \exp(\mathbf{X}_i \beta) }. +\end{align*} +The function $g(\cdot; \cdot)$ is called the *link function*. It links the response to the explanatory variables. The one above is called the logistic link function. Or short, logit. The regression parameters have tangible interpretations. When the first covariate represents the intercept, i.e. $X_{i,j} = 1$ for all $i$, then $\beta_1$ determines where the link function equals a half when all other covariates fail to contribute to the linear predictor (i.e. where $P (Y_i = 1 \, | \, \mathbf{X}_{i}) = 0.5$ when $\mathbf{X}_{i} \beta = \beta_1$). This is illustrated in the top-left panel of Figure ref{fig.logisticRidge_modelAndFitIllustration} for various choices of the intercept. On the other hand, the regression parameters are directly related to the odds ratio: $\mbox{*odds ratio*} = \mbox{odds}(X_{i,j}+1) / \mbox{odds}(X_{i,j}) = \exp(\beta_j)$. Hence, the effect of a unit change in the $j$-th covariate on the odds ratio is $\exp(\beta_j)$ (see Figure ref{fig.logisticRidge_modelAndFitIllustration}, top-right panel). Other link functions (depicted in Figure ref{fig.logisticRidge_modelAndFitIllustration}, bottom-left panel) are common, e.g. the *probit*: $p_i = \Phi_{0,1}(\mathbf{X}_i \beta)$; the *cloglog*: $p_i = \frac{1}{\pi} \arctan(\mathbf{X}_i \beta) + \frac{1}{2}$; the *Cauchit*: $p_i = \exp[ - \exp(\mathbf{X}_i \beta)]$. All these link function are invertible. Irrespective of the choice of the link function, the binary data are thus modelled as $Y_i \sim \mathcal{B}[g^{-1}(\mathbf{X}_i; \beta), 1]$. That is, as a single draw from the Binomial distribution with success probability $g^{-1}(\mathbf{X}_i; \beta)$. + + +Let us now estimate the parameter of the logistic regression model by means of the maximum likelihood method. The likelihood of the experiment is then: +\begin{align*} +L(\mathbf{Y} \, | \, \mathbf{X}; \beta) & = \prod_{i=1}^n \big[ P(Y_i = 1 \, | \, \mathbf{X}_i) \big]^{Y_i} \big[ P(Y_i = 0 \, | \, \mathbf{X}_i) \big]^{1-Y_i}. +\end{align*} +After taking the logarithm and some ready algebra, the log-likelihood is found to be: +\begin{align*} +\mathcal{L}(\mathbf{Y} \, | \, \mathbf{X}; \beta) & = \sum_{i=1}^n \big\{ Y_i \mathbf{X}_i \beta - \log [ 1 + \exp(\mathbf{X}_i \beta) ] \big\}. +\end{align*} +Differentiate the log-likelihood with respect to $\beta$, equate it zero, and obtain the estimating equation for $\beta$: + +!bt + +!bt +\begin{align} label{form:logisticRidge_estimatingEquationOfBeta} +\frac{\partial \mathcal{L}}{\partial \beta } & = \sum_{i=1}^n \Big[ Y_i - \frac{\exp(\mathbf{X}_i \beta)}{ 1 + \exp(\mathbf{X}_i \beta)} \Big] \mathbf{X}_i^{\top} \, \, \, = \, \, \, \mathbf{0}_p. +\end{align} +!et +!et +The ML estimate of $\beta$ strikes a (weighted by the $\mathbf{X}_i$) balance between observation and model. Put differently (and illustrated in the bottom-right panel of Figure ref{fig.logisticRidge_modelAndFitIllustration}), a curve is fit through data by minimizing the distance between them: at the ML estimate of $\beta$ a weighted average of their deviations is zero. + +The maximum likelihood estimate of $\beta$ is evaluated by solving Equation (ref{form:logisticRidge_estimatingEquationOfBeta}) with respect to $\beta$ by means of the Newton-Raphson algorithm. The Newton-Raphson algorithm iteratively finds the zeros of a smooth enough function $f(\cdot)$. Let $x_0$ denote an initial guess of the zero. Then, approximate $f(\cdot)$ around $x_0$ by means of a first order Taylor series: $f(x) \approx x_0 + (x - x_0) \, (d f / d x) |_{x=x_0}$. Solve this for $x$ and obtain: $x = x_0 - [ (d f / d x) |_{x=x_0} ]^{-1} f(x_0)$. Let $x_1$ be the solution for $x$, use this as the new guess and repeat the above until convergence. When the function $f(\cdot)$ has multiple arguments, is vector-valued and denoted by $\vec{\mathbf{f}}$, and the Taylor approximation becomes: $\vec{\mathbf{f}}(\mathbf{x}) \approx \mathbf{x}_0 + J \vec{\mathbf{f}} \big|_{\mathbf{x}=\mathbf{x}_0} (\mathbf{x} - \mathbf{x}_0)$ with +\begin{align*} +J \vec{\mathbf{f}} = \left( +\begin{array}{llll} +\frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \ldots & \frac{\partial f_1}{\partial x_p} +\\ +\frac{\partial f_1}{\partial x_1} & \frac{\partial f_2}{\partial x_2} & \ldots & \frac{\partial f_2}{\partial x_p} +\\ +\vdots & \vdots & \ddots & \vdots +\\ +\frac{\partial f_q}{\partial x_1} & \frac{\partial f_q}{\partial x_2} & \ldots & \frac{\partial f_q}{\partial x_p} +\end{array} +\right), +\end{align*} +the Jacobi matrix. An update of $x_0$ is now readily constructed by solving (the approximation for) $\vec{\mathbf{f}}(\mathbf{x}) = \mathbf{0}$ for $\mathbf{x}$. + +When applied here to the maximum likelihood estimation of the regression parameter $\beta$ of the logistic regression model, the Newton-Raphson update is: +\begin{align*} +\hat{\beta}^{\mbox{{\scriptsize new}}} & = \hat{\beta}^{\mbox{{\scriptsize old}}} - \Big( \frac{\partial^2 \mathcal{L}}{\partial \beta \partial \beta^{\top}} \Big)^{-1} \Big|_{\beta = \hat{\beta}^{\mbox{{\tiny old}}} } \, \, \frac{\partial \mathcal{L}}{\partial \beta } \Big|_{\beta = \hat{\beta}^{\mbox{{\tiny old}}} } +\end{align*} +where the Hessian of the log-likelihood equals: +\begin{align*} +\frac{\partial^2 \mathcal{L}}{\partial \beta \partial \beta^{\top}} & = - \sum_{i=1}^n \frac{\exp(\mathbf{X}_i \beta)}{ [1 + \exp(\mathbf{X}_i \beta)]^2} \mathbf{X}_i^{\top} \mathbf{X}_i. +\end{align*} +Iterative application of this updating formula converges to the ML estimate of $\beta$. + +The Newton-Raphson algorithm is often reformulated as an iteratively re-weighted least squares algorithm. Hereto, first write the gradient and Hessian in matrix notation: +\begin{align*} +\frac{\partial \mathcal{L}}{\partial \beta } \, \, \, = \, \, \, \mathbf{X}^{\top} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta)] +& \mbox{ and } & +\frac{\partial^2 \mathcal{L}}{\partial \beta \partial \beta^{\top}} \, \, \, = \, \, \, - \mathbf{X}^{\top} \mathbf{W} \mathbf{X}, +\end{align*} +where $\vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta) = [g^{-1}( \mathbf{X}_{1, \ast}; \beta), \ldots, g^{-1}( \mathbf{X}_{n, \ast}; \beta)]^{\top}$ with $g^{-1}(\cdot; \cdot) = \exp(\cdot; \cdot) / [1 + \exp(\cdot; \cdot)]$ and $\mathbf{W}$ diagonal with $(\mathbf{W})_{ii} = \exp(\mathbf{X}_i \hat{\beta}^{\mbox{{\scriptsize old}}} ) [ 1 + \exp(\mathbf{X}_i \hat{\beta}^{\mbox{{\scriptsize old}}} ) ]^{-2}$. The updating formula of the estimate then becomes: +\begin{align*} +\hat{\beta}^{\mbox{{\scriptsize new}}} & = \hat{\beta}^{\mbox{{\scriptsize old}}} + (\mathbf{X}^{\top} \mathbf{W} \mathbf{X})^{-1} \mathbf{X}^{\top} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] +\\ +& = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{W} \{ \mathbf{X} \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] \} +\\ +& = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{Z}, +\end{align*} +where $\mathbf{Z} = \{ \mathbf{X} \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] \}$. The Newton-Raphson update is thus the solution to the following weighted least squares problem: +\begin{align*} +\hat{\beta}^{\mbox{{\scriptsize new}}} & = \arg \min_{\beta} (\mathbf{Z} - \mathbf{X} \beta)^{\top} \mathbf{W} (\mathbf{Z} - \mathbf{X} \beta). +\end{align*} +Effectively, at each iteration the *adjusted response* $\mathbf{Z}$ is regressed on the covariates that comprise $\mathbf{X}$. For more on logistic regression confer the monograph of cite{Hosm2013}. + + +======= Ridge estimation ======= + +High-dimensionally, the linear predictor $\mathbf{X} \beta$ may be uniquely defined, but the maximum likelihood estimate of the logistic regression parameter is not. Assume $p > n$ and an estimate $\hat{\beta}$ available. Due to the high-dimensionality, the null space of $\mathbf{X}$ is non-trivial. Hence, let $\ggamma \in \mbox{null}(\mbox{span}(\mathbf{X}))$. Then: $\mathbf{X} \hat{\beta} = \mathbf{X} \hat{\beta} + \mathbf{X} \ggamma = \mathbf{X} (\hat{\beta} + \ggamma)$. As the null space is a $p-n$-dimensional subspace, $\ggamma$ need not equal zero. Hence, an infinite number of estimates of the logistic regression parameter exists that yield the same log-likelihood. Augmentation of the loss function with a ridge penalty resolves the matter, as their sum is strictly concave in $\beta$ (not convex as a maximum rather than a minimum is sought here) and thereby has a unique maximum. + +# original latex figure with scale=0.40, angle=0 + +FIGURE: [logisticPenLL2ridgePenalty.eps, width=400 frac=1.0] Top row, left panel: contour plot of the penalized log-likelihood of a logistic regression model with the ridge constraint (red line). Top row, right panel: the regularization paths of the ridge estimator of the logistic regression parameter. Bottom row, left panel: variance of the ridge estimator of the logistic regression parameter against the logarithm of the penalty parameter. Bottom panel, right panel: the predicted success probability versus the linear predictor for various choices of the penalty parameter. } label{fig.logisticRidge_effectOfPenalization +\mbox{ } + + +Ridge maximum likelihood estimates of the logistic model parameters are found by the maximization of the ridge penalized loglikelihood (cf. \citealt{Scha1984,LeCe1992}): +\begin{align*} +\mathcal{L}^{\mbox{{\tiny pen}}}(\mathbf{Y}, \mathbf{X}; \beta, \lambda) & = \mathcal{L} (\mathbf{Y}, \mathbf{X}; \beta) - \tfrac{1}{2} \lambda \| \beta \|_2^2 +\\ +& = \sum_{i=1}^n \big\{ Y_i \mathbf{X}_i \beta - \log [ 1 + \exp(\mathbf{X}_i \beta) ] \big\} - \tfrac{1}{2} \lambda \beta^{\top} \beta, +\end{align*} +where the second summand is the ridge penalty (the sum of the square of the elements of $\beta$) with $\lambda$ the penalty parameter. Note that as in Section ref{sect.constrainedEstimation} maximization of this penalized loss function can be reformulated as a constrained estimation problem. This is illustrated by the top left panel of Figure ref{fig.logisticRidge_effectOfPenalization}, which depicts the contours (black lines) of the log-likelihood and the spherical domain of the parameter (red line). The optimization of the above loss function proceeds, due to the differentiability of the penalty, fully analogous to the unpenalized case and uses the Newton-Raphson algorithm for solving the (penalized) estimating equation. Hence, the unpenalized ML estimation procedure is modified straightforwardly by replacing gradient and Hessian by their `penalized' counterparts: +\begin{align*} +\frac{\partial \mathcal{L}^{\mbox{{\tiny pen}}}}{\partial \beta } \, \, \, = \, \, \, \frac{\partial \mathcal{L}}{\partial \beta } - \lambda \beta & \mbox{ and } & \frac{\partial^2 \mathcal{L}^{\mbox{{\tiny pen}}}}{\partial \beta \partial \beta^{\top}} \, \, \, = \, \, \, \frac{\partial^2 \mathcal{L}}{\partial \beta \partial \beta^{\top}} - \lambda \mathbf{I}_{pp}. +\end{align*} +With these at hand, the Newton-Raphson algorithm is (again) reformulated as an iteratively re-weighted least squares algorithm with the updating step changes accordingly to: +\begin{align*} +\hat{\beta}^{\mbox{{\scriptsize new}}} & = \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{V}^{-1} \{ \mathbf{X}^{\top} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}}) ] - \lambda \beta^{\mbox{{\scriptsize old}}} \} +\\ +& = \mathbf{V}^{-1} \mathbf{V} \hat{\beta}^{\mbox{{\scriptsize old}}} - \lambda \mathbf{V}^{-1} \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{V}^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] +\\ +& = \mathbf{V}^{-1} \mathbf{X}^{\top} \mathbf{W} \{ \mathbf{X} \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] \} +\\ +& = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{Z}, +\end{align*} +where $\mathbf{V} = \mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp}$ and $\mathbf{W}$ and $\mathbf{Z}$ as before. Hence, use this to update the estimate of $\beta$ until convergence, which yields the desired ridge ML estimate. + +Obviously, the ridge estimate of the logistic regression parameter tends to zero as $\lambda \rightarrow \infty$. Now consider a linear predictor with an intercept that is left unpenalized. When $\lambda$ tends to infinity, all regression coefficients but the intercept vanish. The intercept is left to model the success probability. Hence, in this case $\lim_{\lambda \rightarrow \infty} \hat{\beta}_0 (\lambda) = \log [ \tfrac{1}{n} \sum_{i=1}^n Y_i / \tfrac{1}{n} \sum_{i=1}^n (1-Y_i)]$. + + +# original latex figure with scale=0.40, angle=0 + +FIGURE: [logisticRidge_effectOnPrediction_lambda0.eps, width=400 frac=1.0] The realized design as scatter plot ($X_1$ vs $X_2$ overlayed by the success (\textcolor{red}{RED}) and failure regions (\textcolor{green}{GREEN}) for various choices of the penalty parameter: $\lambda = 0$ (top row, left panel), $\lambda = 10$ (top row, right panel) $\lambda = 40$ (bottom row, left panel), $\lambda = 100$ (bottom row, right panel).} label{fig.logisticRidge_effectOnPrediction + + + +The effect of the ridge penalty on parameter estimates propagates to the predictor $\hat{p}_i$. The linear predictor of the linear regression model involving the ridge estimator $\mathbf{X}_i \hat{\beta}(\lambda)$ shrinks towards a common value for each $i$, leading to a scale difference between observation and predictor (as seen before in Section ref{sect.ridgeRegressionDataIllustration}). This behaviour transfers to the ridge logistic regression predictor, as is illustrated on simulated data. The dimension and sample size of these data are $p=2$ and $n=200$, respectively. The covariate data are drawn from the standard normal, while that of the response is sampled from a Bernoulli distribution with success probability $P(Y_i=1) = \exp(2 X_{i,1} - 2 X_{i,2}) / [ 1 + \exp(2 X_{i,1} - 2 X_{i,2})]$. The logistic regression model is estimated from these data by means of ridge penalized likelihood maximization with various choices of the penalty parameter. The bottom right plot in Figure ref{fig.logisticRidge_effectOfPenalization} shows the predicted success probability versus the linear predictor for various choices of the penalty parameter. Larger values of the penalty parameter $\lambda$ flatten the slope of this curve. Consequently, for larger $\lambda$ more excessive values of the covariates are needed to achieve the same predicted success probability as those obtained with smaller $\lambda$ at more moderate covariate values. The implications for the resulting classification may become clearer when studying the effect of the penalty parameter on the `failure' and `success regions' respectively defined by: +\\ +\indent $\{(x_1, x_2) : P({\color{green}{\mathbf{Y=0}}} \, | \, X_1=x_1, X_2=x_2, \hat{\beta}(\lambda)) > 0.75 \}$, +\\ +\indent $\{(x_1, x_2) : P({\color{red}{\mathbf{Y=1}}} \, | \, X_1=x_1, X_2=x_2, \hat{\beta}(\lambda)) > 0.75 \}$. +\\ +This separates the design space in a light red (`failure') and light green (`success') domain. The white bar between them is the domain where samples cannot be classified with high enough certainty. As $\lambda$ grows, so does the white area that separates the failure and success regions. Hence, as stronger penalization shrinks the logistic regression parameter estimate towards zero, it produces a predictor that is less outspoken in its class assignments. + + + + +======= Moments ======= + +The $1^{\mbox{{\tiny st}}}$ and $2^{\mbox{{\tiny nd}}}$ order moment of the ridge ML parameter of the logistic model may be approximated by the final update of the Newton-Raphson estimate. Assume the one-to-last update $\hat{\beta}^{\mbox{{\scriptsize old}}}$ to be non-random and proceed as for the ridge estimator of the linear regression model parameter to arrive at: +# \begin{align*} +# & & \hat{\beta}^{\mbox{{\scriptsize new}}} = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + 2 \lambda \mathbf{I}_{p \times p} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{z} +# \end{align*} +\begin{align*} +\mathbb{E} \big( \hat{\beta}^{\mbox{{\scriptsize new}}} \big) & = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbb{E}( \mathbf{Z}), +\\ +\mbox{Var} \big( \hat{\beta}^{\mbox{{\scriptsize new}}} \big) & = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \big[ \mbox{Var} ( \mathbf{Z} ) \big] \mathbf{W} \mathbf{X} [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}, +\end{align*} +with +\begin{align*} +\mathbb{E}(\mathbf{Z}) & = \{ \mathbf{X} \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbb{E}(\mathbf{Y}) - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] \}, +\\ +\mbox{Var}(\mathbf{Z}) & = \mathbf{W}^{-1} \mbox{Var}(\mathbf{Y}) \mathbf{W}^{-1} = \mathbf{W}^{-1}, +\end{align*} +where the identity $\mbox{Var}(\mathbf{Y}) = \mathbf{W}$ follows from the variance of a Binomial distributed random variable. From these expressions similar properties as for the ridge ML estimate of the regression parameter of the linear model may be deduced. For instance, the ridge ML estimate of the logistic regression parameter converges to zero as the penalty parameter tends to infinity (confer the top right panel of Figure ref{fig.logisticRidge_effectOfPenalization}). Similarly, their variances vanish as $\lambda \rightarrow \infty$ (illustrated in the bottom left panel of Figure ref{fig.logisticRidge_effectOfPenalization}). + +======= The Bayesian connection ======= + +All penalized estimators can be formulated as Bayesian estimators, including the ridge logistic estimator. In particular, ridge estimators correspond to Bayesian estimators with a multivariate normal prior on the regression coefficients. Thus, assume $\beta \sim \mathcal{N}(\mathbf{0}_p, \mathbf{\Delta}^{-1})$. The posterior distribution of $\beta$ then is: +\begin{align*} +f_{\beta}(\beta \, | \, \mathbf{Y}, \mathbf{X}) & \propto & \Big\{ \prod_{i=1}^n \big[ P(Y_i = 1 \, | \, \mathbf{X}_i) \big]^{Y_i} \big[ P(Y_i = 0 \, | \, \mathbf{X}_i) \big]^{1-Y_i} \Big\} \exp( - \tfrac{1}{2} \beta \mathbf{\Delta} \beta). +\end{align*} +This does not coincide with any standard distribution. But, under appropriate conditions, the posterior distribution is asymptotically normal. This invites a (multivariate) normal approximation to the posterior distribution above. The Laplace's method provides (cf. \citealp{Bish2006}). + +# original latex figure with scale=0.40, angle=0 + +FIGURE: [logisticRidge_laplace2posterior.eps, width=400 frac=1.0] Right panel: Laplace approximation to the posterior density of the Bayesian logistic regression parameter.} label{fig.logisticRidge_MSEandLaplace2posterior + +Laplace's method *i)* centers the normal approximation at the mode of the posterior, and *ii)* chooses the covariance to match the curvature of the posterior at the mode. The posterior mode is the location of the maximum of the posterior distribution. The location of this maximum coincides with that of the logarithm of the posterior. The latter is the log-likelihood augmented with a ridge penalty. Hence, the posterior mode, which is taken as the mean of the approximating Gaussian, coincides +with the ridge logistic estimator. For the covariance of the approximating Gaussian, the logarithm of the posterior is approximated by a second order Taylor series around the posterior mode and limited to second order terms: +\begin{align*} +\log[f_{\beta}(\beta \, | \, \mathbf{Y}, \mathbf{X})] & \propto & +\left. \log[f_{\beta}(\beta \, | \, \mathbf{Y}, \mathbf{X})] +\right|_{\beta = \hat{\beta}_{\mbox{{\tiny MAP}}}} +\\ +& & + \tfrac{1}{2} (\beta - \hat{\beta}_{\mbox{{\tiny MAP}}})^{\top} \left. \frac{\partial^2}{\partial \beta \partial \beta^{\top}} +\log[f_{\beta}(\beta \, | \, \mathbf{Y}, \mathbf{X})] + \right|_{\beta = \hat{\beta}_{\mbox{{\tiny MAP}}}} (\beta - \hat{\beta}_{\mbox{{\tiny MAP}}})^{\top}, +\end{align*} +in which the first order term cancels as the derivative of $f_{\beta}(\beta \, | \, \mathbf{Y}, \mathbf{X})$ with respect to $\beta$ vanishes at the posterior mode - its maximum. Take the exponential of this approximation and match its arguments to that of a multivariate Gaussian $\exp[-\tfrac{1}{2} (\beta - \mmu_{\beta})^{\top} \mathbf{\Sigma}_{\beta}^{-1} (\beta - \mmu_{\beta})]$. The covariance of the sought Gaussian approximation is thus the inverse of the Hessian of the negative penalized log-likelihood. Put together the posterior is approximated by: +\begin{align*} +\beta \, | \, \mathbf{Y}, \mathbf{X} \sim \mathcal{N} \Big( \hat{\beta}_{\mbox{{\tiny MAP}}}, \Big\{ \mathbf{\Delta} + \sum_{i=1}^n \frac{\exp(\mathbf{X}_i \beta)}{ [1+ \exp(\mathbf{X}_i \beta) ]^2 } \mathbf{X}_i \mathbf{X}_i^{\top} \Big\}^{-1} \Big). +\end{align*} +The Gaussian approximation is convenient but need not be good. Fortunately, the Bernstein-Von Mises Theorem \citep{VdVa2000} tells it is very accurate when the model is regular, the prior smooth, and the sample size sufficiently large. The quality of the approximation for an artificial example data set is shown in Figure ref{fig.logisticRidge_MSEandLaplace2posterior}. + +======= Penalty parameter selection ======= + +As before the penalty parameter may be chosen through $K$-fold cross-validation. For the $K=n$ case cite{Meij2013} describe a computationally efficient approximation of the leave-one-out cross-validated loglikelihood. It is based on the exact evaluation of the LOOCV loss, discussed in Section ref{subsect.crossvalidation}, that avoided resampling. The approach of cite{Meij2013} hinges upon the first-order Taylor expansion of the left-out penalized loglikelihood of the left-out estimate $\hat{\beta}_{-i} (\lambda)$ around $\hat{\beta} (\lambda)$, which yields an approximation of the former: +\begin{align*} +\hat{\beta}_{-i} (\lambda) & \approx \hat{\beta} (\lambda) - +\left( \left. \frac{\partial^2 \mathcal{L}_{-i}^{\mbox{{\tiny pen}}}}{\partial \beta \partial \beta^{\top}} \right|_{\beta = \hat{\beta}(\lambda)} \right)^{-1} \left. \frac{\partial \mathcal{L}_{-i}^{\mbox{{\tiny pen}}}}{\partial \beta } \right|_{\beta = \hat{\beta}(\lambda)} +\\ +& = \hat{\beta} (\lambda) + (\mathbf{X}_{- i, \ast}^{\top} \mathbf{W}_{-i, -i} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1} \{ \mathbf{X}_{- i, \ast}^{\top} [\mathbf{Y}_{-i} - \vec{\mathbf{g}}^{-1}(\mathbf{X}_{-i, \ast}; \hat{\beta}(\lambda))] - \lambda \hat{\beta}(\lambda) \}. +\end{align*} +This approximation involves the inverse of a $p \times p$ dimensional matrix, which amounts to the evaluation of $n$ such inverses for the LOOCV loss. As in Section ref{subsect.crossvalidation} this may be avoided. Rewrite both the gradient and the Hessian of the left-out loglikelihood in the approximation of the preceding display: +\begin{align*} +\mathbf{X}_{-i, \ast}^{\top} \{ \mathbf{Y}_{-i} - \vec{\mathbf{g}}^{-1}(\mathbf{X}_{-i, \ast}; \hat{\beta}(\lambda)]\} - \lambda \hat{\beta}(\lambda) +& = \mathbf{X}^{\top} \{ \mathbf{Y} - \vec{\mathbf{g}}^{-1}[\mathbf{X}; \hat{\beta}(\lambda)]\} - \lambda \hat{\beta}(\lambda) +- \mathbf{X}_{i, \ast}^{\top} \{Y_{i} - g^{-1}[\mathbf{X}_{i, \ast}; \hat{\beta}(\lambda)]\} +\\ +& = - \mathbf{X}_{i, \ast}^{\top} \{Y_{i} - g^{-1}[\mathbf{X}_{i, \ast}; \hat{\beta}(\lambda)]\} +\end{align*} +and +\begin{align*} +(\mathbf{X}_{- i, \ast}^{\top} \mathbf{W}_{-i, -i} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1} & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} + \mathbf{W}_{ii} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} +\\ +& & \qquad \qquad \qquad \qquad \qquad \quad [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1}, +\end{align*} +where the Woodbury identity has been used and now $\mathbf{H}_{ii}(\lambda) = \mathbf{W}_{ii} \mathbf{X}_{i, \ast}(\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top}$. Substitute both in the approximation of the left-out ridge logistic regression estimator and manipulate as in Section ref{subsect.crossvalidation} to obtain: +\begin{align*} +\hat{\beta}_{- i}(\lambda) & \approx \hat{\beta}(\lambda) - (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - g^{-1}(\mathbf{X}_{i, \ast}; \hat{\beta}(\lambda)) ]. +\end{align*} +Hence, the leave-one-out cross-validated loglikelihood $\sum_{i=1}^n \mathcal{L} [Y_i \, | \, \mathbf{X}_{i, \ast}, \hat{\beta}_{-i}(\lambda)]$ can now be evaluated by means of a single inverse of a $p \times p$ dimensional matrix and some matrix multiplications. For the performance of this approximation in terms of accuracy and speed confer cite{Meij2013}. + + + + diff --git a/doc/src/Regression/out.txt b/doc/src/Regression/out.txt index e7253cd8d..95ddc0d91 100644 --- a/doc/src/Regression/out.txt +++ b/doc/src/Regression/out.txt @@ -1,17 +1,4 @@ -# #ifdef LATEX2DOCONCE -This is the result of the doconce latex2doconce program. -The translation from LaTeX is just a helper. The text must -be carefully examined! (Be prepared that some text might also -be lost in the translation - in seldom cases.) - -## search for CHECK to see if auto editing was correct - -# #endif - -========= Ridge regression ========= label{chap:ridgeRegression} -\pagenumbering{arabic} -# \setcounter{page} High-throughput techniques measure many characteristics of a single sample simultaneously. The number of characteristics $p$ measured may easily exceed ten thousand. In most medical studies the number of samples $n$ involved often falls behind the number of characteristics measured, i.e: $p > n$. The resulting $(n \times p)$-dimensional data matrix $\mathbf{X}$: \begin{align*} \mathbf{X} & = @@ -35,213 +22,316 @@ X_{n,1} & \ldots & X_{n,p} \end{align*} from such a study contains a larger number of covariates than samples. When $p > n$ the data matrix $\mathbf{X}$ is said to be *high-dimensional*. -In this chapter we adopt the traditional statistical notation of the data matrix. An alternative notation would be $\mathbf{X}^{\top}$ (rather than $\mathbf{X}$), which is employed in the field of (statistical) bioinformatics. In $\mathbf{X}^{\top}$ the rows comprise the samples rather than the covariates. The case for the bioinformatics notation stems from practical arguments. A spreadsheet is designed to have more rows than columns. In case $p > n$ the traditional notation yields a spreadsheet with more columns than rows. When $p > 10000$ the conventional display is impractical. In this chapter we stick to the conventional statistical notation of the data matrix as all mathematical expressions involving $\mathbf{X}$ are then in line with those of standard textbooks on regression. +In this chapter we adopt the traditional statistical notation of the +data matrix. An alternative notation would be $\mathbf{X}^{\top}$ +(rather than $\mathbf{X}$), which is employed in the field of +(statistical) bioinformatics. In $\mathbf{X}^{\top}$ the rows comprise +the samples rather than the covariates. The case for the +bioinformatics notation stems from practical arguments. A spreadsheet +is designed to have more rows than columns. In case $p > n$ the +traditional notation yields a spreadsheet with more columns than +rows. When $p > 10000$ the conventional display is impractical. In +this chapter we stick to the conventional statistical notation of the +data matrix as all mathematical expressions involving $\mathbf{X}$ are +then in line with those of standard textbooks on regression. -The information contained in $\mathbf{X}$ is often used to explain a particular property of the samples involved. In applications in molecular biology $\mathbf{X}$ may contain microRNA expression data from which the expression levels of a gene are to be described. When the gene's expression levels are denoted by $\mathbf{Y} = (Y_{1}, \ldots, Y_n)^{\top}$, the aim is to find the linear relation $Y_i = \mathbf{X}_{i, \ast} \bbeta$ from the data at hand by means of regression analysis. Regression is however frustrated by the high-dimensionality of $\mathbf{X}$ (illustrated in Section ref{sect.ridgeRegression} and at the end of Section ref{sect.constrainedEstimation}). These notes discuss how regression may be modified to accommodate the high-dimensionality of $\mathbf{X}$. First, however, `standard' linear regression is recaputilated. +The information contained in $\mathbf{X}$ is often used to explain a +particular property of the samples involved. In applications in +molecular biology $\mathbf{X}$ may contain microRNA expression data +from which the expression levels of a gene are to be described. When +the gene's expression levels are denoted by $\mathbf{Y} = (Y_{1}, +\ldots, Y_n)^{\top}$, the aim is to find the linear relation $Y_i = +\mathbf{X}_{i, \ast} \beta$ from the data at hand by means of +regression analysis. Regression is however frustrated by the +high-dimensionality of $\mathbf{X}$ (illustrated in Section +ref{sect.ridgeRegression} and at the end of Section +ref{sect.constrainedEstimation}). These notes discuss how regression +may be modified to accommodate the high-dimensionality of +$\mathbf{X}$. First, however, `standard' linear regression is +recaputilated. ======= Linear regression ======= -Consider an experiment in which $p$ characteristics of $n$ samples are measured. The data from this experiment are denoted $\mathbf{X}$, with $\mathbf{X}$ as above. The matrix $\mathbf{X}$ is called the *design matrix*. Additional information of the samples is available in the form of $\mathbf{Y}$ (also as above). The variable $\mathbf{Y}$ is generally referred to as the *response variable*. The aim of regression analysis is to explain $\mathbf{Y}$ in terms of $\mathbf{X}$ through a functional relationship like $Y_i = f(\mathbf{X}_{i,\ast})$. When no prior knowledge on the form of $f(\cdot)$ is available, it is common to assume a linear relationship between $\mathbf{X}$ and $\mathbf{Y}$. This assumption gives rise to the *linear regression model*: +Consider an experiment in which $p$ characteristics of $n$ samples are +measured. The data from this experiment are denoted $\mathbf{X}$, with +$\mathbf{X}$ as above. The matrix $\mathbf{X}$ is called the *design +matrix*. Additional information of the samples is available in the +form of $\mathbf{Y}$ (also as above). The variable $\mathbf{Y}$ is +generally referred to as the *response variable*. The aim of +regression analysis is to explain $\mathbf{Y}$ in terms of +$\mathbf{X}$ through a functional relationship like $Y_i = +f(\mathbf{X}_{i,\ast})$. When no prior knowledge on the form of +$f(\cdot)$ is available, it is common to assume a linear relationship +between $\mathbf{X}$ and $\mathbf{Y}$. This assumption gives rise to +the *linear regression model*: -!bt !bt \begin{align} -Y_{i} & = \mathbf{X}_{i,\ast} \, \bbeta + \varepsilon_i label{form.linRegressionModel} +Y_{i} & = \mathbf{X}_{i,\ast} \, \beta + \varepsilon_i label{form.linRegressionModel} \\ \nonumber & = \beta_1 \, X_{i,1} + \ldots + \beta_{p} \, X_{i, p} + \varepsilon_i. \end{align} !et -!et -In model (ref{form.linRegressionModel}) $\bbeta = (\beta_1, \ldots, \beta_p)^{\top}$ is the *regression parameter*. The parameter $\beta_j$, $j=1, \ldots, p$, represents the -effect size of covariate $j$ on the response. That is, for each unit change in covariate $j$ (while keeping the other covariates fixed) the observed change in the response is equal to $\beta_j$. -The second summand on the right-hand side of the model, $\varepsilon_i$, is referred to as the error. It represents the part of the response not explained by the functional part $\mathbf{X}_{i,\ast} \, \bbeta$ of the model (ref{form.linRegressionModel}). In contrast to the functional part, which is considered to be systematic (i.e. non-random), the error is assumed to be random. Consequently, $Y_{i_1,\ast}$ need not equal $Y_{i_2,\ast}$ for $i_1 \not= i_2$, even if $\mathbf{X}_{i_1,\ast}= \mathbf{X}_{i_2,\ast}$. To complete the formulation of model (ref{form.linRegressionModel}) we need to specify the probability distribution of $\varepsilon_i$. It is assumed that $\varepsilon_i \sim \mathcal{N}(0, \sigma^2)$ and the $\varepsilon_{i}$ are independent, i.e.: -\begin{align*} -\mbox{Cov}(\varepsilon_{i_1}, \varepsilon_{i_2}) & = -\left\{ -\begin{array}{lcc} -\sigma^2 & \mbox{if} & i_1 = i_2, -\\ -0 & \mbox{if} & i_1 \not= i_2. -\end{array} -\right. -\end{align*} -The randomness of $\varepsilon_i$ implies that $\mathbf{Y}_i$ is also a random variable. In particular, $\mathbf{Y}_i$ is normally distributed, because $\varepsilon_i \sim \mathcal{N}(0, \sigma^2)$ and $\mathbf{X}_{i,\ast} \, \bbeta$ is a non-random scalar. To specify the parameters of the distribution of $\mathbf{Y}_i$ we need to calculate its first two moments. Its expectation equals: -\begin{align*} -\mathbb{E}(Y_i) & = \mathbb{E}(\mathbf{X}_{i, \ast} \, \bbeta) + \mathbb{E}(\varepsilon_i) \, \, \, = \, \, \, \mathbf{X}_{i, \ast} \, \bbeta, -\end{align*} -while its variance is: -\begin{align*} -\mbox{Var}(Y_i) & = \mathbb{E} \{ [Y_i - \mathbb{E}(Y_i)]^2 \} \, \, \, = \, \, \, \mathbb{E} ( Y_i^2 ) - [\mathbb{E}(Y_i)]^2 -# \\ -# & = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, \bbeta + \varepsilon_i )^2] - ( \mathbf{X}_{i, \ast} \, \bbeta)^2 -\\ -& = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, \bbeta)^2 + 2 \varepsilon_i \mathbf{X}_{i, \ast} \, \bbeta + \varepsilon_i^2 ] - ( \mathbf{X}_{i, \ast} \, \bbeta)^2 -\\ -# & = ( \mathbf{X}_{i, \ast} \, \bbeta)^2 + 2 \mathbb{E}(\varepsilon_i) \mathbf{X}_{i, \ast} \, \bbeta + \mathbb{E}(\varepsilon_i^2 ) - ( \mathbf{X}_{i, \ast} \, \bbeta)^2 -# \\ -& = \mathbb{E}(\varepsilon_i^2 ) \, \, \, = \, \, \, \mbox{Var}(\varepsilon_i) \, \, \, = \, \, \, \sigma^2. -\end{align*} -Hence, $Y_i \sim \mathcal{N}( \mathbf{X}_{i, \ast} \, \bbeta, \sigma^2)$. This formulation (in terms of the normal distribution) is equivalent to the formulation of model -(ref{form.linRegressionModel}), as both capture the assumptions involved: the linearity of the functional part and the normality of the error. + +In model (ref{form.linRegressionModel}) $\beta = (\beta_1, \ldots, +\beta_p)^{\top}$ is the *regression parameter*. The parameter +$\beta_j$, $j=1, \ldots, p$, represents the effect size of covariate +$j$ on the response. That is, for each unit change in covariate $j$ +(while keeping the other covariates fixed) the observed change in the +response is equal to $\beta_j$. The second summand on the right-hand +side of the model, $\varepsilon_i$, is referred to as the error. It +represents the part of the response not explained by the functional +part $\mathbf{X}_{i,\ast} \, \beta$ of the model +(ref{form.linRegressionModel}). In contrast to the functional part, +which is considered to be systematic (i.e. non-random), the error is +assumed to be random. Consequently, $Y_{i_1,\ast}$ need not equal +$Y_{i_2,\ast}$ for $i_1 \not= i_2$, even if $\mathbf{X}_{i_1,\ast}= +\mathbf{X}_{i_2,\ast}$. To complete the formulation of model +(ref{form.linRegressionModel}) we need to specify the probability +distribution of $\varepsilon_i$. It is assumed that $\varepsilon_i +\sim \mathcal{N}(0, \sigma^2)$ and the $\varepsilon_{i}$ are +independent, i.e.: \begin{align*} \mbox{Cov}(\varepsilon_{i_1}, +\varepsilon_{i_2}) & = \left\{ \begin{array}{lcc} \sigma^2 & \mbox{if} +& i_1 = i_2, \\ 0 & \mbox{if} & i_1 \not= i_2. \end{array} \right. +\end{align*} The randomness of $\varepsilon_i$ implies that +$\mathbf{Y}_i$ is also a random variable. In particular, +$\mathbf{Y}_i$ is normally distributed, because $\varepsilon_i \sim +\mathcal{N}(0, \sigma^2)$ and $\mathbf{X}_{i,\ast} \, \beta$ is a +non-random scalar. To specify the parameters of the distribution of +$\mathbf{Y}_i$ we need to calculate its first two moments. Its +expectation equals: \begin{align*} \mathbb{E}(Y_i) & = +\mathbb{E}(\mathbf{X}_{i, \ast} \, \beta) + \mathbb{E}(\varepsilon_i) +\, \, \, = \, \, \, \mathbf{X}_{i, \ast} \, \beta, \end{align*} while +its variance is: \begin{align*} \mbox{Var}(Y_i) & = \mathbb{E} \{ [Y_i +- \mathbb{E}(Y_i)]^2 \} \, \, \, = \, \, \, \mathbb{E} ( Y_i^2 ) - +[\mathbb{E}(Y_i)]^2 # \\ # & = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, +\beta + \varepsilon_i )^2] - ( \mathbf{X}_{i, \ast} \, \beta)^2 \\ & += \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 \varepsilon_i +\mathbf{X}_{i, \ast} \, \beta + \varepsilon_i^2 ] - ( \mathbf{X}_{i, +\ast} \, \beta)^2 \\ # & = ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 +\mathbb{E}(\varepsilon_i) \mathbf{X}_{i, \ast} \, \beta + +\mathbb{E}(\varepsilon_i^2 ) - ( \mathbf{X}_{i, \ast} \, \beta)^2 # +\\ & = \mathbb{E}(\varepsilon_i^2 ) \, \, \, = \, \, \, +\mbox{Var}(\varepsilon_i) \, \, \, = \, \, \, \sigma^2. \end{align*} +Hence, $Y_i \sim \mathcal{N}( \mathbf{X}_{i, \ast} \, \beta, +\sigma^2)$. This formulation (in terms of the normal distribution) is +equivalent to the formulation of model (ref{form.linRegressionModel}), +as both capture the assumptions involved: the linearity of the +functional part and the normality of the error. Model (ref{form.linRegressionModel}) is often written in a more condensed matrix form: -!bt !bt \begin{align} -\mathbf{Y} & = \mathbf{X} \, \bbeta + \vvarepsilon, label{form.linRegressionModelinMatrix} +\mathbf{Y} & = \mathbf{X} \, \beta + \vvarepsilon, label{form.linRegressionModelinMatrix} \end{align} !et -!et -where $\vvarepsilon = (\varepsilon_1, \varepsilon_2, \ldots, \varepsilon_n)^{\top}$ and distributed as $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_{p}, \sigma^2 \mathbf{I}_{nn})$. As above model (ref{form.linRegressionModelinMatrix}) can be expressed as a multivariate normal distribution: $\mathbf{Y} \sim \mathcal{N}(\mathbf{X} \, \bbeta, \sigma^2 \mathbf{I}_{nn})$. +where $\vvarepsilon = (\varepsilon_1, \varepsilon_2, \ldots, \varepsilon_n)^{\top}$ and distributed as $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_{p}, \sigma^2 \mathbf{I}_{nn})$. As above model (ref{form.linRegressionModelinMatrix}) can be expressed as a multivariate normal distribution: $\mathbf{Y} \sim \mathcal{N}(\mathbf{X} \, \beta, \sigma^2 \mathbf{I}_{nn})$. -Model (ref{form.linRegressionModelinMatrix}) is a so-called hierarchical model. This terminology emphasizes that $\mathbf{X}$ and $\mathbf{Y}$ are not on a par, they play different roles in the model. The former is used to explain the latter. In model (ref{form.linRegressionModel}) $\mathbf{X}$ is referred as the *explanatory* or *independent* variable, while the variable $\mathbf{Y}$ is generally referred to as the *response* or *dependent* variable. +Model (ref{form.linRegressionModelinMatrix}) is a so-called +hierarchical model. This terminology emphasizes that $\mathbf{X}$ and +$\mathbf{Y}$ are not on a par, they play different roles in the +model. The former is used to explain the latter. In model +(ref{form.linRegressionModel}) $\mathbf{X}$ is referred as the +*explanatory* or *independent* variable, while the variable +$\mathbf{Y}$ is generally referred to as the *response* or *dependent* +variable. -The covariates, the columns of $\mathbf{X}$, may themselves be random. To apply the linear model they are temporarily assumed fixed. The linear regression model is then to be interpreted as $\mathbf{Y} \, | \, \mathbf{X} \sim \mathcal{N}(\mathbf{X} \, \bbeta, \sigma^2 \mathbf{I}_{nn})$ +The covariates, the columns of $\mathbf{X}$, may themselves be +random. To apply the linear model they are temporarily assumed +fixed. The linear regression model is then to be interpreted as +$\mathbf{Y} \, | \, \mathbf{X} \sim \mathcal{N}(\mathbf{X} \, \beta, +\sigma^2 \mathbf{I}_{nn})$ -\begin{example} *Methylation of a tumor-suppressor gene* -\\ -Consider a study which measures the gene expression levels of a tumor-suppressor genes (TSG) and two methylation markers (MM1 and MM2) on 67 samples. A methylation marker is a gene that promotes methylation. Methylation refers to attachment of a methyl group to a nucleotide of the DNA. In case this attachment takes place in or close by the promotor region of a gene, this complicates the transcription of the gene. Methylation may down-regulate a gene. This mechanism also works in the reverse direction: removal of methyl groups may up-regulate a gene. A tumor-suppressor gene is a gene that halts the progression of the cell towards a cancerous state. -The medical question associated with these data: do the expression levels methylation markers affect the expression levels of the tumor-suppressor gene? To answer this question we may formulate the following linear regression model: +The linear regression model (ref{form.linRegressionModel}) involves the unknown parameters: $\beta$ and $\sigma^2$, which need to be learned from the data. The parameters of the regression model, $\beta$ and $\sigma^2$ are estimated by means of likelihood maximization. Recall that $Y_i \sim \mathcal{N}( \mathbf{X}_{i,\ast} \, \beta, \sigma^2)$ with corresponding density: $ f_{Y_i}(y_i) = (2 \, \pi \, \sigma^2)^{-1/2} \, \exp[ - (y_i - \mathbf{X}_{i\ast} \, \beta)^2 / 2 \sigma^2 ]$. The likelihood thus is: + + +!bt \begin{align*} -Y_{i, `{\footnotesize tsg`}} & = \beta_0 + \beta_{`{\footnotesize mm1`}} X_{i, `{\footnotesize mm1`}} -+ \beta_{`{\footnotesize mm2`}} X_{i, `{\footnotesize mm2`}} + \varepsilon_i, -\end{align*} -with $i = 1, \ldots, 67$ and $\varepsilon_i \sim \mathcal{N}(0, \sigma^2)$. The interest focusses on $\beta_{`{\footnotesize mm1`}}$ and $\beta_{`{\footnotesize mm2`}}$. A non-zero value of at least one of these two regression parameters indicates that there is a linear association between the expression levels of the tumor-suppressor gene and that of the methylation markers. - -Prior knowledge from biology suggests that the $\beta_{`{\footnotesize mm1`}}$ and $\beta_{`{\footnotesize mm2`}}$ are both non-positive. High expression levels of the methylation markers lead to hyper-methylation, in turn inhibiting the transcription of the tumor-suppressor gene. Vice versa, low expression levels of MM1 and MM2 are (via hypo-methylation) associated with high expression levels of TSG. Hence, a negative concordant effect between MM1 and MM2 (on one side) and TSG (on the other) is expected. Of course, the methylation markers may affect expression levels of other genes that in turn regulate the tumor-suppressor gene. The regression parameters $\beta_{`{\footnotesize mm1`}}$ and $\beta_{`{\footnotesize mm2`}}$ then reflect the indirect effect of the methylation markers on the expression levels of the tumor suppressor gene. -\end{example} - - -# #if FORMAT in ("latex", "pdflatex") -\noindent -# #endif -The linear regression model (ref{form.linRegressionModel}) involves the unknown parameters: $\bbeta$ and $\sigma^2$, which need to be learned from the data. The parameters of the regression model, $\bbeta$ and $\sigma^2$ are estimated by means of likelihood maximization. Recall that $Y_i \sim \mathcal{N}( \mathbf{X}_{i,\ast} \, \bbeta, \sigma^2)$ with corresponding density: $ f_{Y_i}(y_i) = (2 \, \pi \, \sigma^2)^{-1/2} \, \exp[ - (y_i - \mathbf{X}_{i\ast} \, \bbeta)^2 / 2 \sigma^2 ]$. The likelihood thus is: -\begin{align*} -L(\mathbf{Y}, \mathbf{X}; \bbeta, \sigma^2) & = +L(\mathbf{Y}, \mathbf{X}; \beta, \sigma^2) & = # f_{\mathbf{Y}}(\mathbf{y}) \, \, \, = \, \, \, \prod_{i=1}^n f_{Y_i}(y_i) \, \, \, = \, \, \, -\prod_{i=1}^n \frac{1}{\sqrt{2 \, \pi} \, \sigma} \, \exp[ - (Y_i - \mathbf{X}_{i, \ast} \, \bbeta)^2 / 2 \sigma^2 ], +\prod_{i=1}^n \frac{1}{\sqrt{2 \, \pi} \, \sigma} \, \exp[ - (Y_i - \mathbf{X}_{i, \ast} \, \beta)^2 / 2 \sigma^2 ], \end{align*} -in which the independence of the observations has been used. Because of the concavity of the logarithm, the maximization of the likelihood coincides with the maximum of the logarithm of the likelihood (called the log-likelihood). Hence, to obtain maximum likelihood (ML) estimates of the parameter it is equivalent to find the maximum of the log-likelihood. The log-likelihood is: +!et + +in which the independence of the observations has been used. Because +of the concavity of the logarithm, the maximization of the likelihood +coincides with the maximum of the logarithm of the likelihood (called +the log-likelihood). Hence, to obtain maximum likelihood (ML) +estimates of the parameter it is equivalent to find the maximum of the +log-likelihood. The log-likelihood is: + +!bt \begin{align*} -\mathcal{L}(\mathbf{Y}, \mathbf{X}; \bbeta, \sigma^2) & = -\log[ L(\mathbf{Y}, \mathbf{X}; \bbeta, \sigma^2) ] +\mathcal{L}(\mathbf{Y}, \mathbf{X}; \beta, \sigma^2) & = +\log[ L(\mathbf{Y}, \mathbf{X}; \beta, \sigma^2) ] \, \, \, = \, \, \, % \log \Big[ \prod_{i=1}^n f_{Y_i}(y_i) \Big] # \, \, \, = \, \, \, \sum_{i=1}^n \log[ f_{Y_i}(y_i) ] # \\ -# & = \sum_{i=1}^n [ -\log(\sqrt{2 \, \pi} \, \sigma) - (y_i - \mathbf{X}_{i\ast} \, \bbeta)^2 / 2 \sigma^2 ] +# & = \sum_{i=1}^n [ -\log(\sqrt{2 \, \pi} \, \sigma) - (y_i - \mathbf{X}_{i\ast} \, \beta)^2 / 2 \sigma^2 ] # \\ # & = --n \, \log(\sqrt{2 \, \pi} \, \sigma) - \frac{1}{ 2 \sigma^2} \sum_{i=1}^n (y_i - \mathbf{X}_{i, \ast} \, \bbeta)^2. +-n \, \log(\sqrt{2 \, \pi} \, \sigma) - \frac{1}{ 2 \sigma^2} \sum_{i=1}^n (y_i - \mathbf{X}_{i, \ast} \, \beta)^2. \end{align*} -After noting that $\sum_{i=1}^n (Y_i - \mathbf{X}_{i, \ast} \, \bbeta)^2 = \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2 \, \, \, = \, \, \, (\mathbf{Y} - \mathbf{X} \, \bbeta)^{\top} \, (\mathbf{Y} - \mathbf{X} \, \bbeta)$, the log-likelihood can be written as: +After noting that $\sum_{i=1}^n (Y_i - \mathbf{X}_{i, \ast} \, \beta)^2 = \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2 \, \, \, = \, \, \, (\mathbf{Y} - \mathbf{X} \, \beta)^{\top} \, (\mathbf{Y} - \mathbf{X} \, \beta)$, the log-likelihood can be written as: \begin{align*} -\mathcal{L}(\mathbf{Y}, \mathbf{X}; \bbeta, \sigma^2) & = -n \, \log(\sqrt{2 \, \pi} \, \sigma) - \frac{1}{ 2 \sigma^2} \, \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2. +\mathcal{L}(\mathbf{Y}, \mathbf{X}; \beta, \sigma^2) & = -n \, \log(\sqrt{2 \, \pi} \, \sigma) - \frac{1}{ 2 \sigma^2} \, \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2. \end{align*} -In order to find the maximum of the log-likelihood, take its derivate with respect to $\bbeta$: -\begin{align*} -\frac{\partial }{\partial \, \beta} \mathcal{L}(\mathbf{Y}, \mathbf{X}; \bbeta, \sigma^2) & = - \frac{1}{ 2 \sigma^2} \, \frac{\partial }{\partial \, \beta} \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2 \, \, \, = \, \, \, \frac{1}{\sigma^2} \, \mathbf{X}^{\top} (\mathbf{Y} - \mathbf{X} \, \bbeta). -\end{align*} -Equate this derivative to zero gives the estimating equation for $\bbeta$: +!et +In order to find the maximum of the log-likelihood, take its derivate with respect to $\beta$: !bt +\begin{align*} +\frac{\partial }{\partial \, \beta} \mathcal{L}(\mathbf{Y}, \mathbf{X}; \beta, \sigma^2) & = - \frac{1}{ 2 \sigma^2} \, \frac{\partial }{\partial \, \beta} \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2 \, \, \, = \, \, \, \frac{1}{\sigma^2} \, \mathbf{X}^{\top} (\mathbf{Y} - \mathbf{X} \, \beta). +\end{align*} +!et + +Equate this derivative to zero gives the estimating equation for $\beta$: !bt \begin{align} label{form.normalEquation} -\mathbf{X}^{\top} \mathbf{X} \, \bbeta & = \mathbf{X}^{\top} \mathbf{Y}. +\mathbf{X}^{\top} \mathbf{X} \, \beta & = \mathbf{X}^{\top} \mathbf{Y}. \end{align} !et -!et -Equation (ref{form.normalEquation}) is called to the *normal equation*. Pre-multiplication of both sides of the normal equation by $(\mathbf{X}^{\top} \mathbf{X})^{-1}$ now yields the ML estimator of the regression parameter: $\hat{\bbeta} = (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y}$, in which it is assumed that $(\mathbf{X}^{\top} \mathbf{X})^{-1}$ is well-defined. + +Equation (ref{form.normalEquation}) is called to the *normal equation*. Pre-multiplication of both sides of the normal equation by $(\mathbf{X}^{\top} \mathbf{X})^{-1}$ now yields the ML estimator of the regression parameter: $\hat{\beta} = (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y}$, in which it is assumed that $(\mathbf{X}^{\top} \mathbf{X})^{-1}$ is well-defined. Along the same lines one obtains the ML estimator of the residual variance. Take the partial derivative of the log-likelihood with respect to $\sigma^2$: -\begin{align*} -\frac{\partial }{\partial \, \sigma} \mathcal{L}(\mathbf{Y}, \mathbf{X}; \bbeta, \sigma^2) & = - \frac{n}{\sigma} + \frac{1}{\sigma^3} \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2. -\end{align*} -Equate the right-hand side to zero and solve for $\sigma^2$ to find $\hat{\sigma}^2 = \tfrac{1}{n} \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2$. In this expression $\bbeta$ is unknown and the ML estimate of $\bbeta$ is plugged-in. -\\ -\\ -With explicit expressions of the ML estimators at hand, we can study their properties. The expectation of the ML estimator of the regression parameter $\bbeta$ is: -\begin{align*} -\mathbb{E}(\hat{\bbeta}) & = \mathbb{E}[ (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y}] -\, \, \, = \, \, \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbb{E}[ \mathbf{Y}] -# \\ -\, \, \, = \, \, \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{X} \, \bbeta -\, \, \, \, \, = \, \, \, \bbeta. -\end{align*} -Hence, the ML estimator of the regression coefficients is unbiased. -The variance of the ML estimator of $\bbeta$ is: +!bt \begin{align*} -\mbox{Var}(\hat{\bbeta}) & = \mathbb{E} \{ [\hat{\bbeta} - \mathbb{E}(\hat{\bbeta})] [\hat{\bbeta} - \mathbb{E}(\hat{\bbeta})]^{\top} \} +\frac{\partial }{\partial \, \sigma} \mathcal{L}(\mathbf{Y}, \mathbf{X}; \beta, \sigma^2) & = - \frac{n}{\sigma} + \frac{1}{\sigma^3} \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2. +\end{align*} +!et + + +Equate the right-hand side to zero and solve for $\sigma^2$ to find +$\hat{\sigma}^2 = \tfrac{1}{n} \| \mathbf{Y} - \mathbf{X} \, \beta +\|^2_2$. In this expression $\beta$ is unknown and the ML estimate of +$\beta$ is plugged-in. \\ \\ With explicit expressions of the ML +estimators at hand, we can study their properties. The expectation of +the ML estimator of the regression parameter $\beta$ is: + +!bt +\begin{align*} +\mathbb{E}(\hat{\beta}) & = \mathbb{E}[ +(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y}] +\, \, \, = \, \, \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, +\mathbf{X}^{\top} \mathbb{E}[ \mathbf{Y}] # \\ \, \, \, = \, \, \, +(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{X} \, +\beta \, \, \, \, \, = \, \, \, \beta. +\end{align*} +!et + +Hence, the ML +estimator of the regression coefficients is unbiased. + +The variance of the ML estimator of $\beta$ is: + +!bt +\begin{align*} +\mbox{Var}(\hat{\beta}) & = \mathbb{E} \{ [\hat{\beta} - \mathbb{E}(\hat{\beta})] [\hat{\beta} - \mathbb{E}(\hat{\beta})]^{\top} \} \\ -& = \mathbb{E} \{ [(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y} - \bbeta] \, [(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y} - \bbeta]^{\top} \} +& = \mathbb{E} \{ [(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y} - \beta] \, [(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y} - \beta]^{\top} \} \\ -# & = \mathbb{E} \{ [(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y}] \, [(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y}]^{\top} \} - \bbeta \, \bbeta^{\top} +# & = \mathbb{E} \{ [(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y}] \, [(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y}]^{\top} \} - \beta \, \beta^{\top} # \\ -# & = \mathbb{E} \{ (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y} \, \mathbf{Y}^{\top} \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \} - \bbeta \, \bbeta^{\top} +# & = \mathbb{E} \{ (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y} \, \mathbf{Y}^{\top} \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \} - \beta \, \beta^{\top} # \\ -& = (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \, \mathbb{E} \{ \mathbf{Y} \, \mathbf{Y}^{\top} \} \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} - \bbeta \, \bbeta^{\top} +& = (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \, \mathbb{E} \{ \mathbf{Y} \, \mathbf{Y}^{\top} \} \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} - \beta \, \beta^{\top} \\ -& = (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \, \{ \mathbf{X} \, \bbeta \, \bbeta^{\top} \, \mathbf{X}^{\top} + \SSigma \} \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} - \bbeta \, \bbeta^{\top} +& = (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \, \{ \mathbf{X} \, \beta \, \beta^{\top} \, \mathbf{X}^{\top} + \SSigma \} \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} - \beta \, \beta^{\top} # \\ -# & = (\mathbf{X}^T \mathbf{X})^{-1} \, \mathbf{X}^T \, \mathbf{X} \, \bbeta \, \bbeta^T \, \mathbf{X}^T \, \mathbf{X} \, (\mathbf{X}^T % \mathbf{X})^{-1} +# & = (\mathbf{X}^T \mathbf{X})^{-1} \, \mathbf{X}^T \, \mathbf{X} \, \beta \, \beta^T \, \mathbf{X}^T \, \mathbf{X} \, (\mathbf{X}^T % \mathbf{X})^{-1} # \\ -# & & + \, \, \sigma^2 \, (\mathbf{X}^T \mathbf{X})^{-1} \, \mathbf{X}^T \, \mathbf{X} \, (\mathbf{X}^T \mathbf{X})^{-1} - \bbeta \bbeta^T +# & & + \, \, \sigma^2 \, (\mathbf{X}^T \mathbf{X})^{-1} \, \mathbf{X}^T \, \mathbf{X} \, (\mathbf{X}^T \mathbf{X})^{-1} - \beta \beta^T \\ -& = \bbeta \, \bbeta^{\top} + \sigma^2 \, (\mathbf{X}^{\top} \mathbf{X})^{-1} - \bbeta \, \bbeta^{\top} +& = \beta \, \beta^{\top} + \sigma^2 \, (\mathbf{X}^{\top} \mathbf{X})^{-1} - \beta \, \beta^{\top} \, \, \, = \, \, \, \sigma^2 \, (\mathbf{X}^{\top} \mathbf{X})^{-1}, \end{align*} -in which we have used that $\mathbb{E} (\mathbf{Y} \mathbf{Y}^{\top}) = \mathbf{X} \, \bbeta \, \bbeta^{\top} \, \mathbf{X}^{\top} + \sigma^2 \, \mathbf{I}_{nn}$. From $\mbox{Var}(\hat{\bbeta}) = \sigma^2 \, (\mathbf{X}^{\top} \mathbf{X})^{-1}$, one obtains an estimate of the variance of the estimate of the $j$-th regression coefficient: $\hat{\sigma}^2 (\hat{\beta}_j ) = \hat{\sigma}^2 \sqrt{ [(\mathbf{X}^{\top} \mathbf{X})^{-1}]_{jj} }$. This may be used to construct a confidence interval for the estimates or test the hypothesis $H_0: \beta_j = 0$. In the latter $\hat{\sigma}^2$ should not be the maximum likelihood estimator, as it is biased. It is then to be replaced by the residual sum-of-squares divided by $n-p$ rather than $n$. -\\ -\\ -The prediction of $Y_i$, denoted $\widehat{Y}_i$, is the expected value of $Y_i$ according the linear regression model (with its parameters replaced by their estimates). The prediction of $Y_i$ thus equals $\mathbb{E}(Y_i; \hat{\bbeta}, \hat{\sigma}^2) = \mathbf{X}_{i, \ast} \hat{\bbeta}$. In matrix notation the prediction is: +!et + +in which we have used that $\mathbb{E} (\mathbf{Y} \mathbf{Y}^{\top}) += \mathbf{X} \, \beta \, \beta^{\top} \, \mathbf{X}^{\top} + \sigma^2 +\, \mathbf{I}_{nn}$. From $\mbox{Var}(\hat{\beta}) = \sigma^2 \, +(\mathbf{X}^{\top} \mathbf{X})^{-1}$, one obtains an estimate of the +variance of the estimate of the $j$-th regression coefficient: +$\hat{\sigma}^2 (\hat{\beta}_j ) = \hat{\sigma}^2 \sqrt{ +[(\mathbf{X}^{\top} \mathbf{X})^{-1}]_{jj} }$. This may be used to +construct a confidence interval for the estimates or test the +hypothesis $H_0: \beta_j = 0$. In the latter $\hat{\sigma}^2$ should +not be the maximum likelihood estimator, as it is biased. It is then +to be replaced by the residual sum-of-squares divided by $n-p$ rather +than $n$. + + +The prediction of $Y_i$, denoted $\widehat{Y}_i$, is the expected +value of $Y_i$ according the linear regression model (with its +parameters replaced by their estimates). The prediction of $Y_i$ thus +equals $\mathbb{E}(Y_i; \hat{\beta}, \hat{\sigma}^2) = \mathbf{X}_{i, +\ast} \hat{\beta}$. In matrix notation the prediction is: + +!bt \begin{align*} -\widehat{\mathbf{Y}} & = \mathbf{X} \, \hat{\bbeta} \, \, \, = \, \, \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} \, \, \, := \, \, \, \mathbf{H} \mathbf{Y}, +\widehat{\mathbf{Y}} & = \mathbf{X} \, \hat{\beta} \, \, \, = \, \, \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} \, \, \, := \, \, \, \mathbf{H} \mathbf{Y}, \end{align*} -where $\mathbf{H}$ is the *hat matrix*, as it `puts the hat' on $\mathbf{Y}$. Note that the hat matrix is a projection matrix, i.e. $\mathbf{H}^2 = \mathbf{H}$ for +!et + +where $\mathbf{H}$ is the *hat matrix*, as it `puts the hat' on +$\mathbf{Y}$. Note that the hat matrix is a projection matrix, +i.e. $\mathbf{H}^2 = \mathbf{H}$ for + +!bt \begin{align*} \mathbf{H}^2 & = \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \, \, \, = \, \, \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top}. \end{align*} -Thus, the prediction $\widehat{\mathbf{Y}}$ is an orthogonal projection of $\mathbf{Y}$ onto the space spanned by the columns of $\mathbf{X}$. +!et -With $\widehat{\bbeta}$ available, an estimate of the errors $\hat{\varepsilon}_i$, dubbed the *residuals* are obtained via: +Thus, the prediction $\widehat{\mathbf{Y}}$ is an orthogonal +projection of $\mathbf{Y}$ onto the space spanned by the columns of +$\mathbf{X}$. + +With $\widehat{\beta}$ available, an estimate of the errors +$\hat{\varepsilon}_i$, dubbed the *residuals* are obtained via: + +!bt \begin{align*} -\hat{\vvarepsilon} & = \mathbf{Y} - \widehat{\mathbf{Y}} \, \, \, = \, \, \, \mathbf{Y} - \mathbf{X} \, \hat{\bbeta} \, \, \, = \, \, \, \mathbf{Y} - \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} \, \, \, = \, \, \, [ \mathbf{I} - \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} ] \, \mathbf{Y}. +\hat{\vvarepsilon} & = \mathbf{Y} - \widehat{\mathbf{Y}} \, \, \, = \, \, \, \mathbf{Y} - \mathbf{X} \, \hat{\beta} \, \, \, = \, \, \, \mathbf{Y} - \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} \, \, \, = \, \, \, [ \mathbf{I} - \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} ] \, \mathbf{Y}. \end{align*} -Thus, the residuals are a projection of $\mathbf{Y}$ onto the orthogonal complement of the space spanned by the columns of $\mathbf{X}$. The residuals are to be used in diagnostics, e.g. checking of the normality assumption by means of a normal probability plot. -\\ -\\ -For more on the linear regression model confer the monograph of cite{Drap1998}. +!et + +Thus, the residuals are a projection of $\mathbf{Y}$ onto the +orthogonal complement of the space spanned by the columns of +$\mathbf{X}$. The residuals are to be used in diagnostics, +e.g. checking of the normality assumption by means of a normal +probability plot. -======= Ridge regression} label{sect.ridgeRegression ======= -When the design matrix is high-dimensional, the covariates (the columns of $\mathbf{X}$) are super-collinear. Recall *collinearity* in regression analysis refers to the event of two (or multiple) covariates being highly linearly related. Consequently, the subspace spanned by collinear covariates may not be (or close to not being) of full rank. When the subspace (onto which $\mathbf{Y}$ is projected) is (close to) rank deficient, it is (almost) impossible to separate the contribution of the individual covariates. The uncertainty with respect to the covariate responsible for the variation explained in $\mathbf{Y}$ is often reflected in the fit of the linear regression model to data by a large error of the estimates of the regression parameters corresponding to the collinear covariates. +======= Ridge regression ======= -\begin{example} \mbox{ } \\ -The flotillins (the FLOT-1 and FLOT-2 genes) have been observed to regulate the proto-oncogene ERBB2 *in vitro* \citep{Pust2013}. One may wish to corroborate this *in vivo*. To this end we use gene expression data of a breast cancer study, available as a Bioconductor package: {\tt breastCancerVDX}. From this study the expression levels of probes interrogating the FLOT-1 and ERBB2 genes are retrieved. For clarity of the illustration the FLOT-2 gene is ignored. After centering, the expression levels of the first ERBB2 probe are regressed on those of the four FLOT-1 probes. The R-code below carries out the data retrieval and analysis. -\lstinputlisting{introExampleForNotes.r} -Prior to the regression analysis, we first assess whether there is collinearity among the FLOT-1 probes through evaluation of the correlation matrix. This reveals a strong correlation ($\hat{\rho} = 0.91$) between the second and third probe. All other cross-correlations do not exceed the 0.20 (in an absolute sense). Hence, there is collinearity among the columns of the design matrix in the to-be-performed regression analysis. -\verbatiminput{introExampleRegressionOutput.txt} -The output of the regression analysis above shows the first probe to be significantly associated to the expression levels of ERBB2. The collinearity of the second and third probe reveals itself in the standard errors of the effect size: for these probes the standard error is much larger than those of the other two probes. This reflects the uncertainty in the estimates. Regression analysis has difficulty to decide to which covariate the explained proportion of variation in the response should be attributed. The large standard error of these effect sizes propagates to the testing as the Wald test statistic is the ratio of the estimated effect size and its standard error. Collinear covariates are thus less likely to pass the significance threshold. -\end{example} - -# #if FORMAT in ("latex", "pdflatex") -\noindent -# #endif -The case of two (or multiple) covariates being perfectly linearly dependent is referred as *super-collinearity*. The rank of a high-dimensional design matrix is maximally equal to $n$: $\mbox{rank}(\mathbf{X}) \leq n$. Consequently, the dimension of subspace spanned by the columns of $\mathbf{X}$ is smaller than or equal to $n$. As $p > n$, this implies that columns of $\mathbf{X}$ are linearly dependent. Put differently, a high-dimensional $\mathbf{X}$ suffers from super-collinearity. +When the design matrix is high-dimensional, the covariates (the +columns of $\mathbf{X}$) are super-collinear. Recall *collinearity* in +regression analysis refers to the event of two (or multiple) +covariates being highly linearly related. Consequently, the subspace +spanned by collinear covariates may not be (or close to not being) of +full rank. When the subspace (onto which $\mathbf{Y}$ is projected) +is (close to) rank deficient, it is (almost) impossible to separate +the contribution of the individual covariates. The uncertainty with +respect to the covariate responsible for the variation explained in +$\mathbf{Y}$ is often reflected in the fit of the linear regression +model to data by a large error of the estimates of the regression +parameters corresponding to the collinear covariates. - -\begin{example} *Super-collinearity* label{example.supercollinearity} -\\ Consider the design matrix: + +!bt \begin{align*} \mathbf{X} & = \left( \begin{array}{rrr} @@ -254,18 +344,23 @@ Consider the design matrix: 1 & 1 & 0 \end{array} \right) \end{align*} -The columns of $\mathbf{X}$ are linearly dependent: the first column is the row-wise sum of the other two columns. The rank (more correct, the column rank) of a matrix is the dimension of space spanned by the column vectors. Hence, the rank of $\mathbf{X}$ is equal to the number of linearly independent columns: $\mbox{rank}(\mathbf{X}) = 2$. -\end{example} +!et + +The columns of $\mathbf{X}$ are linearly dependent: the first column +is the row-wise sum of the other two columns. The rank (more correct, +the column rank) of a matrix is the dimension of space spanned by the +column vectors. Hence, the rank of $\mathbf{X}$ is equal to the number +of linearly independent columns: $\mbox{rank}(\mathbf{X}) = 2$. + + -# #if FORMAT in ("latex", "pdflatex") -\noindent -# #endif Super-collinearity of an $(n \times p)$-dimensional design matrix $\mathbf{X}$ implies[^footnote1][^footnote1]: If the (column) rank of $\mathbf{X$ is smaller than $p$, there exists a non-trivial $\mathbf{v} \in \mathbb{R}^p$ such that $\mathbf{X} \mathbf{v} = \mathbf{0}_{p}$. Multiplication of this inequality by $\mathbf{X}^{\top}$ yields $\mathbf{X}^{\top} \mathbf{X} \mathbf{v} = \mathbf{0}_{p}$. As $\mathbf{v} \not= \mathbf{0}_{p}$, this implies that $\mathbf{X}^{\top} \mathbf{X}$ is not invertible.} that the rank of the $(p \times p)$-dimensional matrix $\mathbf{X}^{\top} \mathbf{X}$ is smaller than $p$, and, consequently, it is singular. A square matrix that does not have an inverse is called *singular*. A matrix $\mathbf{A}$ is singular if and only if its determinant is zero: $\mbox{det}(\mathbf{A}) = 0$. -\begin{example} *Singularity* label{example.singular} -\\ + + Consider the matrix $\mathbf{A}$ given by: +!bt \begin{align*} \mathbf{A} & = \left( \begin{array}{rr} @@ -274,70 +369,98 @@ Consider the matrix $\mathbf{A}$ given by: 2 & 4 \end{array} \right) \end{align*} +!et Clearly, $\mbox{det}(\mathbf{A}) = a_{11} a_{22} - a_{12} a_{21} = 1 \times 4 - 2 \times 2 = 0$. Hence, $\mathbf{A}$ is singular and its inverse is undefined. -\end{example} -# #if FORMAT in ("latex", "pdflatex") -\noindent -# #endif -As $\mbox{det}(\mathbf{A})$ is equal to the product of the eigenvalues $\nu_j$ of $\mathbf{A}$, the matrix $\mathbf{A}$ is singular if one (or more) of the eigenvalues of $\mathbf{A}$ is zero. To see this, consider the spectral decomposition of $\mathbf{A}$: +As $\mbox{det}(\mathbf{A})$ is equal to the product of the eigenvalues +$\nu_j$ of $\mathbf{A}$, the matrix $\mathbf{A}$ is singular if one +(or more) of the eigenvalues of $\mathbf{A}$ is zero. To see this, +consider the spectral decomposition of $\mathbf{A}$: + +!bt \begin{align*} \mathbf{A} & = \sum_{j=1}^p \nu_j \, \mathbf{v}_j \, \mathbf{v}_j^{\top}, \end{align*} +!et where $\mathbf{v}_j$ is the eigenvector corresponding to $\nu_j$. The inverse of $\mathbf{A}$ is then: +!bt \begin{align*} \mathbf{A}^{-1} & = \sum_{j=1}^p \nu_j^{-1} \, \mathbf{v}_j \, \mathbf{v}_j^{\top}. \end{align*} +!et + The right-hand side is undefined if $\nu_j =0$ for any $j$. -\begin{contexample}_ref{example.singular_} \hspace{3pt}*Singularity (continued)* -\\ -Revisit Example ref{example.singular}. Matrix $\mathbf{A}$ has eigenvalues $\nu_1 =5$ and $\nu_2=0$. According to the spectral decomposition, the inverse of $\mathbf{A}$ is: +Matrix $\mathbf{A}$ has eigenvalues $\nu_1 =5$ and $\nu_2=0$. According to the spectral decomposition, the inverse of $\mathbf{A}$ is: +!bt \begin{align*} \mathbf{A}^{-1} & = \frac{1}{5} \, \mathbf{v}_1 \, \mathbf{v}_1^{\top} + \frac{1}{0} \, \mathbf{v}_2 \, \mathbf{v}_2^{\top}. \end{align*} +!et + This expression is undefined as we divide by zero in the second summand on the right-hand side. -\end{contexample} -# #if FORMAT in ("latex", "pdflatex") -\noindent -# #endif -In summary, the columns of a high-dimensional design matrix $\mathbf{X}$ are linearly dependent and this super-collinearity causes $\mathbf{X}^{\top} \mathbf{X}$ to be singular. Now recall the ML estimator of the parameter of the linear regression model: -!bt + +In summary, the columns of a high-dimensional design matrix +$\mathbf{X}$ are linearly dependent and this super-collinearity causes +$\mathbf{X}^{\top} \mathbf{X}$ to be singular. Now recall the ML +estimator of the parameter of the linear regression model: !bt \begin{align} -\hat{\bbeta} & = (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}. +\hat{\beta} & = (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}. \end{align} !et -!et -This estimator is only well-defined if $(\mathbf{X}^{\top} \mathbf{X})^{-1}$ exits. Hence, when $\mathbf{X}$ is high-dimensional the regression parameter $\bbeta$ cannot be estimated. -\\ -\\ + + +This estimator is only well-defined if $(\mathbf{X}^{\top} +\mathbf{X})^{-1}$ exits. Hence, when $\mathbf{X}$ is high-dimensional +the regression parameter $\beta$ cannot be estimated. + + Above only the practical consequence of high-dimensionality is presented: the expression $( \mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}$ cannot be evaluated numerically. But the problem arising from the high-dimensionality of the data is more fundamental. To appreciate this, consider the normal equations: + +!bt \begin{align*} -\mathbf{X}^{\top} \mathbf{X} \bbeta & = \mathbf{X}^{\top} \mathbf{Y}. +\mathbf{X}^{\top} \mathbf{X} \beta & = \mathbf{X}^{\top} \mathbf{Y}. \end{align*} -The matrix $\mathbf{X}^{\top} \mathbf{X}$ is of rank $n$, while $\bbeta$ is a vector of length $p$. Hence, while there are $p$ unknowns, the system of linear equations from which these are to be solved effectively comprises $n$ degrees of freedom. If $p > n$, the vector $\bbeta$ cannot uniquely be determined from this system of equations. To make this more specific let $U$ be the $n$-dimensional space spanned by the columns of $\mathbf{X}$ and the $p-n$-dimensional space $V$ be orthogonal complement of $U$, i.e. $V = U^{\perp}$. Then, $\mathbf{X} \mathbf{v} = \mathbf{0}_{p}$ for all $\mathbf{v} \in V$. So, $V$ is the non-trivial null space of $\mathbf{X}$. Consequently, as $\mathbf{X}^{\top} \mathbf{X} \mathbf{v} = +!et + +The matrix $\mathbf{X}^{\top} \mathbf{X}$ is of rank $n$, while $\beta$ is a vector of length $p$. Hence, while there are $p$ unknowns, the system of linear equations from which these are to be solved effectively comprises $n$ degrees of freedom. If $p > n$, the vector $\beta$ cannot uniquely be determined from this system of equations. To make this more specific let $U$ be the $n$-dimensional space spanned by the columns of $\mathbf{X}$ and the $p-n$-dimensional space $V$ be orthogonal complement of $U$, i.e. $V = U^{\perp}$. Then, $\mathbf{X} \mathbf{v} = \mathbf{0}_{p}$ for all $\mathbf{v} \in V$. So, $V$ is the non-trivial null space of $\mathbf{X}$. Consequently, as $\mathbf{X}^{\top} \mathbf{X} \mathbf{v} = \mathbf{X}^{\top} \mathbf{0}_{p} = \mathbf{0}_{n}$, the solution of the normal equations is: + +!bt \begin{align*} -\hat{\bbeta} & = ( \mathbf{X}^{\top} \mathbf{X})^{-} \mathbf{X}^{\top} \mathbf{Y} + \mathbf{v} \qquad \mbox{for all } \mathbf{v} \in V, +\hat{\beta} & = ( \mathbf{X}^{\top} \mathbf{X})^{-} \mathbf{X}^{\top} \mathbf{Y} + \mathbf{v} \qquad \mbox{for all } \mathbf{v} \in V, \end{align*} +!et + where $\mathbf{A}^{-}$ denotes the Moore-Penrose inverse of the matrix $\mathbf{A}$, which is defined as: + +!bt \begin{align*} \mathbf{A}^{-} & = \sum_{j=1}^p \nu_j^{-1} \, I_{\{ \nu_j \not= 0 \} } \, \mathbf{v}_j \, \mathbf{v}_j^{\top}. \end{align*} -The solution of the normal equations is thus only determined up to an element from a non-trivial space $V$, and there is no unique estimator of the regression parameter. -\\ -\\ -To obtain an estimate of the regression parameter $\bbeta$ when $\mathbf{X}$ is (close to) super-collinearity, cite{Hoer1970} proposed an ad-hoc fix to resolve the (almost) singularity of $\mathbf{X}^{\top} \mathbf{X}$. Simply replace $\mathbf{X}^{\top} \mathbf{X}$ by $\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}$ with $\lambda \in [0, \infty)$. The scalar $\lambda$ is a tuning parameter, henceforth called the *penalty parameter*. +!et + +The solution of the normal equations is thus only determined up to an +element from a non-trivial space $V$, and there is no unique estimator +of the regression parameter. + +To obtain an estimate of the regression parameter $\beta$ when +$\mathbf{X}$ is (close to) super-collinearity, cite{Hoer1970} proposed +an ad-hoc fix to resolve the (almost) singularity of +$\mathbf{X}^{\top} \mathbf{X}$. Simply replace $\mathbf{X}^{\top} +\mathbf{X}$ by $\mathbf{X}^{\top} \mathbf{X} + \lambda +\mathbf{I}_{pp}$ with $\lambda \in [0, \infty)$. The scalar $\lambda$ +is a tuning parameter, henceforth called the *penalty parameter*. + -\begin{contexample}_ref{example.supercollinearity_} \hspace{3pt}*Super-collinearity (continued)* -\\ Recall the super-collinear design matrix $\mathbf{X}$ of Example ref{example.supercollinearity}. Then, for (say) $\lambda = 1$: +!bt \begin{align*} \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} & = \left( \begin{array}{rrr} @@ -348,69 +471,78 @@ Recall the super-collinear design matrix $\mathbf{X}$ of Example ref{example.sup 2 & -4 & 7 \end{array} \right). \end{align*} +!et The eigenvalues of this matrix are 11, 7, and 1. Hence, $\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}$ has no zero eigenvalue and its inverse is well-defined. -\end{contexample} -# #if FORMAT in ("latex", "pdflatex") -\noindent -# #endif With the ad-hoc fix for the singularity of $\mathbf{X}^{\top} \mathbf{X}$, cite{Hoer1970} proceed to define the *ridge regression estimator*: -!bt !bt \begin{align} label{form.ridgeRegressionEstimator} -\hat{\bbeta}(\lambda) & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}, +\hat{\beta}(\lambda) & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}, \end{align} !et -!et -for $\lambda \in [0, \infty)$. Clearly, this is - for $\lambda$ strictly positive - a well-defined estimator, even if $\mathbf{X}$ is high-dimensional. However, each choice of $\lambda$ leads to a different ridge regression estimate. The set of all ridge regression estimates $\{ \hat{\bbeta}(\lambda) \, : \, \lambda \in [0, \infty) \}$ is called the *solution* or *regularization path* of the ridge estimator. + +for $\lambda \in [0, \infty)$. Clearly, this is - for $\lambda$ +strictly positive - a well-defined estimator, even if $\mathbf{X}$ is +high-dimensional. However, each choice of $\lambda$ leads to a +different ridge regression estimate. The set of all ridge regression +estimates $\{ \hat{\beta}(\lambda) \, : \, \lambda \in [0, \infty) \}$ +is called the *solution* or *regularization path* of the ridge +estimator. + -\begin{contexample}_ref{example.supercollinearity_} \hspace{3pt}*Super-collinearity (continued)* -\\ Recall the super-collinear design matrix $\mathbf{X}$ of Example ref{example.supercollinearity}. Suppose that the corresponding response vector is $\mathbf{Y} = (1.3, -0.5, 2.6, 0.9)^{\top}$. The ridge regression estimates for, e.g. $\lambda = 1, 2$, and $10$ are then: \begin{align*} -\hat{\bbeta}(1) & = (0.614, 0.548, 0.066)^{\top}, +\hat{\beta}(1) & = (0.614, 0.548, 0.066)^{\top}, \\ -\hat{\bbeta}(2) & = (0.537, 0.490, 0.048)^{\top}, +\hat{\beta}(2) & = (0.537, 0.490, 0.048)^{\top}, \\ -\hat{\bbeta}(10) & = (0.269, 0.267, 0.002)^{\top}. +\hat{\beta}(10) & = (0.269, 0.267, 0.002)^{\top}. \end{align*} The full solution path of the ridge estimator is plotted in Figure ref{fig.ridgeSolPathPlusVar}. -# original latex figure with scale=0.45, angle=0 -FIGURE: [ridgeSolutionPath_logLambda.eps, width=400 frac=1.0] Solution path of the ridge estimator and its variance. The left panel shows the solution path of the ridge estimator for the data of Example ref{example.supercollinearity}. In the right panel the corresponding variance of the ridge estimator is plotted against the (logarithm of the) penalty parameter.} label{fig.ridgeSolPathPlusVar -# \afterpage{} -\end{contexample} +Having obtained an estimate of the regression parameter $\beta$, one can define the fit $\widehat{\mathbf{Y}}$. It is defined analogous to the standard case: -# #if FORMAT in ("latex", "pdflatex") -\noindent -# #endif -Having obtained an estimate of the regression parameter $\bbeta$, one can define the fit $\widehat{\mathbf{Y}}$. It is defined analogous to the standard case: +!bt \begin{align*} -\widehat{\mathbf{Y}}(\lambda) & = \mathbf{X} \hat{\bbeta}(\lambda) +\widehat{\mathbf{Y}}(\lambda) & = \mathbf{X} \hat{\beta}(\lambda) \, \, \, = \, \, \, \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} \, \, \, := \, \, \, \mathbf{H}(\lambda) \mathbf{Y}. \end{align*} +!et + Previously, when using the ML estimator, the fit could be understood as a projection of $\mathbf{Y}$ onto the subspace spanned by the columns of $\mathbf{X}$. The fit $\widehat{\mathbf{Y}}(\lambda)$ corresponding to the ridge estimator is not a projection of $\mathbf{Y}$ onto $\mathbf{X}$ (confer Exercise ref{question.ridgeResidualsProjection} $\!$a). Consequently, the `ridge residuals' $\mathbf{Y} - \widehat{\mathbf{Y}}(\lambda)$ are not orthogonal to the fit $\widehat{\mathbf{Y}}(\lambda)$ (confer Exercise ref{question.ridgeResidualsProjection} $\!$b). ======= Eigenvalue shrinkage ======= The effect of the ridge penalty may also studied from the perspective of singular values. Let the singular value decomposition of the $(n \times p)$-dimensional design matrix $\mathbf{X}$ be: + +!bt \begin{align*} \mathbf{X} & = \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top}, \end{align*} -where $\mathbf{D}_x$ an $(n \times n)$-dimensional diagonal matrix with the singular values, -$\mathbf{U}_x$ an $(n \times n)$-dimensional matrix with columns containing the left singular vectors (denoted $\mathbf{u}_i$), and $\mathbf{V}_x$ a $(p \times n)$-dimensional matrix with columns containing the right singular vectors (denoted $\mathbf{v}_i$). The columns of $\mathbf{U}_x$ and $\mathbf{V}_x$ are orthogonal: $\mathbf{U}_x^{\top} \mathbf{U}_x = \mathbf{I}_{nn} = \mathbf{V}_x^{\top} \mathbf{V}_x$. +!et + +where $\mathbf{D}_x$ an $(n \times n)$-dimensional diagonal matrix +with the singular values, $\mathbf{U}_x$ an $(n \times n)$-dimensional +matrix with columns containing the left singular vectors (denoted +$\mathbf{u}_i$), and $\mathbf{V}_x$ a $(p \times n)$-dimensional +matrix with columns containing the right singular vectors (denoted +$\mathbf{v}_i$). The columns of $\mathbf{U}_x$ and $\mathbf{V}_x$ are +orthogonal: $\mathbf{U}_x^{\top} \mathbf{U}_x = \mathbf{I}_{nn} = +\mathbf{V}_x^{\top} \mathbf{V}_x$. The OLS estimator can then be rewritten in terms of the SVD-matrices as: + + \begin{align*} -\hat{\bbeta} & = (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\hat{\beta} & = (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} \\ & = (\mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} \\ @@ -422,7 +554,7 @@ The OLS estimator can then be rewritten in terms of the SVD-matrices as: \end{align*} where $\mathbf{D}_x^{-2} \mathbf{D}_x$ is not simplified further to emphasize the effect of the ridge penalty. Similarly, the ridge estimator can be rewritten in terms of the SVD-matrices as: \begin{align*} -\hat{\bbeta} & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\hat{\beta} & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} \\ & = (\mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} \\ @@ -458,14 +590,14 @@ Principal component regression is a close relative to ridge regression that can \\ & = \mathbf{D}_k^{-2} \widetilde{\mathbf{D}}_k \mathbf{U}^{\top} \mathbf{Y} \, \, \, = \, \, \ \widetilde{\mathbf{D}}_k^{-1} \mathbf{U}^{\top} \mathbf{Y}, \end{align*} -where $\mathbf{D}_k$ and $\widetilde{\mathbf{D}}_k$ are submatrices of $\mathbf{D}$. The matrix $\mathbf{D}_k$ is obtained from $\mathbf{D}$ by removal of the last $n-p$ rows and columsn, while for $\widetilde{\mathbf{D}}_k$ only the last $n-k$ rows are dropped. Similarly, $\mathbf{I}_{kn}$ and $\mathbf{I}_{nk}$ are obtained from $\mathbf{I}_{nn}$ by removal of the last $n-k$ rows and columns, respectively. The principal component regression estimator of $\bbeta$ then is $\hat{\bbeta}_{\mbox{{\tiny pcr}}} = \mathbf{V}_k \widetilde{\mathbf{D}}_k^{-1} \mathbf{U}^{\top} \mathbf{Y}$. When $k$ is set equal to the column rank of $\mathbf{X}$, and thus to the rank of $\mathbf{X}^{\top} \mathbf{X}$, the -principal component regression estimator $\hat{\bbeta}_{\mbox{{\tiny pcr}}} = (\mathbf{X}^{\top} \mathbf{X})^- \mathbf{X}^{\top} \mathbf{Y}$, where $\mathbf{A}^-$ denotes the Moore-Penrose inverse of matrix $\mathbf{A}$. +where $\mathbf{D}_k$ and $\widetilde{\mathbf{D}}_k$ are submatrices of $\mathbf{D}$. The matrix $\mathbf{D}_k$ is obtained from $\mathbf{D}$ by removal of the last $n-p$ rows and columsn, while for $\widetilde{\mathbf{D}}_k$ only the last $n-k$ rows are dropped. Similarly, $\mathbf{I}_{kn}$ and $\mathbf{I}_{nk}$ are obtained from $\mathbf{I}_{nn}$ by removal of the last $n-k$ rows and columns, respectively. The principal component regression estimator of $\beta$ then is $\hat{\beta}_{\mbox{{\tiny pcr}}} = \mathbf{V}_k \widetilde{\mathbf{D}}_k^{-1} \mathbf{U}^{\top} \mathbf{Y}$. When $k$ is set equal to the column rank of $\mathbf{X}$, and thus to the rank of $\mathbf{X}^{\top} \mathbf{X}$, the +principal component regression estimator $\hat{\beta}_{\mbox{{\tiny pcr}}} = (\mathbf{X}^{\top} \mathbf{X})^- \mathbf{X}^{\top} \mathbf{Y}$, where $\mathbf{A}^-$ denotes the Moore-Penrose inverse of matrix $\mathbf{A}$. The relation between ridge and principal component regression becomes clear when their corresponding estimators are written in terms of the singular value decomposition of $\mathbf{X}$: \begin{align*} -\hat{\bbeta}_{\mbox{{\tiny pcr}}} & = \mathbf{V}_x (\mathbf{I}_{nk} \mathbf{D}_x \mathbf{I}_{kn})^{-1} \mathbf{U}_x^{\top} \mathbf{Y}, +\hat{\beta}_{\mbox{{\tiny pcr}}} & = \mathbf{V}_x (\mathbf{I}_{nk} \mathbf{D}_x \mathbf{I}_{kn})^{-1} \mathbf{U}_x^{\top} \mathbf{Y}, \\ -\hat{\bbeta} (\lambda) & = \mathbf{V}_x (\mathbf{D}_x^2 + \lambda \mathbf{I}_{nn})^{-1} \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y}. +\hat{\beta} (\lambda) & = \mathbf{V}_x (\mathbf{D}_x^2 + \lambda \mathbf{I}_{nn})^{-1} \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y}. \end{align*} Both operate on the singular values of the design matrix. But where principal component regression thresholds the singular values of $\mathbf{X}$, ridge regression shrinks them (depending on their size). Hence, one applies a discrete map on the singular values while the other a continuous one. @@ -482,21 +614,21 @@ The first two moments of the ridge regression estimator are derived. Next the pe The left panel of Figure ref{fig.ridgeSolPathPlusVar} shows ridge estimates of the regression parameters converging to zero as the penalty parameter tends to infinity. This behaviour of the ridge estimator does not depend on the specifics of the data set. To see this study the expectation of the ridge estimator: \begin{align*} -\mathbb{E} \big[ \hat{\bbeta}(\lambda) \big] & = \mathbb{E} \big[ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} \big] +\mathbb{E} \big[ \hat{\beta}(\lambda) \big] & = \mathbb{E} \big[ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} \big] \\ & = \mathbb{E} \big[ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y} \big] \\ -& = \mathbb{E} \big[ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \hat{\bbeta} \big] +& = \mathbb{E} \big[ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \hat{\beta} \big] \\ -& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \mathbb{E} ( \hat{\bbeta} ) +& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \mathbb{E} ( \hat{\beta} ) \\ -& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \bbeta. +& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \beta. \end{align*} -Clearly, $\mathbb{E} \big[ \hat{\bbeta}(\lambda) \big] \not= \bbeta$ for any $\lambda > 0$. Hence, the ridge estimator is biased. +Clearly, $\mathbb{E} \big[ \hat{\beta}(\lambda) \big] \not= \beta$ for any $\lambda > 0$. Hence, the ridge estimator is biased. From the expression above it is clear that the expectation of the ridge estimator vanishes as $\lambda$ tends to infinity: \begin{align*} -\lim_{\lambda \rightarrow \infty} \mathbb{E} \big[ \hat{\bbeta}(\lambda) \big] & = \lim_{\lambda \rightarrow \infty} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \bbeta \, \, \, = \, \, \, \mathbf{0}_{p}. +\lim_{\lambda \rightarrow \infty} \mathbb{E} \big[ \hat{\beta}(\lambda) \big] & = \lim_{\lambda \rightarrow \infty} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \beta \, \, \, = \, \, \, \mathbf{0}_{p}. \end{align*} Hence, all regression coefficients are shrunken towards zero as the penalty parameter increases. This also holds for $\mathbf{X}$ with $p > n$. Furthermore, this behaviour is not strictly monotone in $\lambda$: $\lambda_{a} > \lambda_b$ does not necessarily imply $|\hat{\beta}_j (\lambda_a) | < |\hat{\beta}_j (\lambda_b) |$. Upon close inspection this can be witnessed from the ridge solution path of $\beta_3$ in Figure ref{fig.ridgeSolPathPlusVar}. @@ -549,13 +681,13 @@ This design matrix is orthonormal as $\mathbf{X}^{\top} \mathbf{X} = \mathbf{I}_ \end{align*} In case of an orthonormal design matrix the relation between the OLS and ridge estimator is: \begin{align*} -\hat{\bbeta}(\lambda) & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\hat{\beta}(\lambda) & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} \, \, \, = \, \, \, (\mathbf{I}_{pp} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} \\ & = (1 + \lambda)^{-1} \mathbf{I}_{pp} \mathbf{X}^{\top} \mathbf{Y} \qquad \, \, = \, \, \, (1 + \lambda)^{-1} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} \\ -& = (1 + \lambda)^{-1} \hat{\bbeta}. +& = (1 + \lambda)^{-1} \hat{\beta}. \end{align*} Hence, the ridge estimator scales the OLS estimator by a factor. When taking the expectation on both sides, it is evident that the ridge estimator converges to zero as $\lambda \rightarrow \infty$. \end{example} @@ -564,13 +696,13 @@ Hence, the ridge estimator scales the OLS estimator by a factor. When taking the ===== Variance ===== -As for the ML estimate of the regression parameter $\bbeta$ of model (ref{form.linRegressionModelinMatrix}), we derive the second moment of the ridge estimator. Hereto define: +As for the ML estimate of the regression parameter $\beta$ of model (ref{form.linRegressionModelinMatrix}), we derive the second moment of the ridge estimator. Hereto define: \begin{align*} \mathbf{W}_{\lambda} & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{X}. \end{align*} -Using $\mathbf{W}_{\lambda}$ the ridge estimator $\hat{\bbeta}(\lambda)$ can be expressed as $\mathbf{W}_{\lambda} \hat{\bbeta}$ for: +Using $\mathbf{W}_{\lambda}$ the ridge estimator $\hat{\beta}(\lambda)$ can be expressed as $\mathbf{W}_{\lambda} \hat{\beta}$ for: \begin{align*} -\mathbf{W}_{\lambda} \hat{\bbeta} & = \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\mathbf{W}_{\lambda} \hat{\beta} & = \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} \\ & = \{ (\mathbf{X}^{\top} \mathbf{X})^{-1} [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ] \}^{-1} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} \\ @@ -578,29 +710,29 @@ Using $\mathbf{W}_{\lambda}$ the ridge estimator $\hat{\bbeta}(\lambda)$ can be \\ & = [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{Y} \\ -& = \hat{\bbeta}(\lambda). +& = \hat{\beta}(\lambda). \end{align*} The linear operator $\mathbf{W}_{\lambda}$ thus transforms the ML estimator of the regression parameter into the ridge estimator. It is now easily seen that: \begin{align*} -\mbox{Var}[ \hat{\bbeta}(\lambda) ] & = \mbox{Var}[ \mathbf{W}_{\lambda} \hat{\bbeta} ] \qquad \qquad \, \, \, \, \, \, = \, \, \, \mathbf{W}_{\lambda} \mbox{Var}[\hat{\bbeta} ] \mathbf{W}_{\lambda}^{\top} +\mbox{Var}[ \hat{\beta}(\lambda) ] & = \mbox{Var}[ \mathbf{W}_{\lambda} \hat{\beta} ] \qquad \qquad \, \, \, \, \, \, = \, \, \, \mathbf{W}_{\lambda} \mbox{Var}[\hat{\beta} ] \mathbf{W}_{\lambda}^{\top} \\ & = \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} \, \, \, = \, \, \, \sigma^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{X} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}\}^{\top}, \end{align*} -in which we have used $\mbox{Var}(\mathbf{A} \mathbf{Y}) = \mathbf{A} \mbox{Var}( \mathbf{Y}) \mathbf{A}^{\top}$ for a non-random matrix $\mathbf{A}$, the fact that $\mathbf{W}_{\lambda}$ is non-random, and $ \mbox{Var}[\hat{\bbeta} ] = \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1}$. +in which we have used $\mbox{Var}(\mathbf{A} \mathbf{Y}) = \mathbf{A} \mbox{Var}( \mathbf{Y}) \mathbf{A}^{\top}$ for a non-random matrix $\mathbf{A}$, the fact that $\mathbf{W}_{\lambda}$ is non-random, and $ \mbox{Var}[\hat{\beta} ] = \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1}$. Like the expectation the variance of the ridge estimator vanishes as $\lambda$ tends to infinity: \begin{align*} -\lim_{\lambda \rightarrow \infty} \mbox{Var} \big[ \hat{\bbeta}(\lambda) \big] & = \lim_{\lambda \rightarrow \infty} \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} \, \, \, = \, \, \, \mathbf{0}_{pp}. +\lim_{\lambda \rightarrow \infty} \mbox{Var} \big[ \hat{\beta}(\lambda) \big] & = \lim_{\lambda \rightarrow \infty} \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} \, \, \, = \, \, \, \mathbf{0}_{pp}. \end{align*} Hence, the variance of the ridge regression coefficient estimates decreases towards zero as the penalty parameter becomes large. This is illustrated in the right panel of Figure ref{fig.ridgeSolPathPlusVar} for the data of Example ref{example.supercollinearity}. With an explicit expression of the variance of the ridge estimator at hand, we can compare it to that of the OLS estimator: \begin{align*} -\mbox{Var}[ \hat{\bbeta} ] - \mbox{Var}[ \hat{\bbeta}(\lambda) ] & = \sigma^2 [(\mathbf{X}^{\top} \mathbf{X})^{-1} - \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} ] +\mbox{Var}[ \hat{\beta} ] - \mbox{Var}[ \hat{\beta}(\lambda) ] & = \sigma^2 [(\mathbf{X}^{\top} \mathbf{X})^{-1} - \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} ] \\ & = \sigma^2 \mathbf{W}_{\lambda} \{ [\mathbf{I} + \lambda (\mathbf{X}^{\top} \mathbf{X})^{-1} ] (\mathbf{X}^{\top} \mathbf{X})^{-1} [\mathbf{I} + \lambda (\mathbf{X}^{\top} \mathbf{X})^{-1} ]^{\top} - (\mathbf{X}^{\top} \mathbf{X})^{-1} \} \mathbf{W}_{\lambda}^{\top} \\ @@ -614,7 +746,7 @@ The difference is non-negative definite as each component in the matrix product !bt \begin{align} label{form.VarInequalityMLandRidge} -\mbox{Var}[ \hat{\bbeta} ] & \succeq & \mbox{Var}[ \hat{\bbeta}(\lambda) ], +\mbox{Var}[ \hat{\beta} ] & \succeq & \mbox{Var}[ \hat{\beta}(\lambda) ], \end{align} !et !et @@ -643,14 +775,14 @@ Consider the design matrix: \end{align*} The variances of the ML and ridge (with $\lambda=1$) estimates of the regression coefficients then are: \begin{align*} -\mbox{Var}(\hat{\bbeta}) & = \sigma^2 \left( +\mbox{Var}(\hat{\beta}) & = \sigma^2 \left( \begin{array}{rr} 0.3 & 0.2 \\ 0.2 & 0.3 \end{array} \right) \qquad \mbox{and} \qquad -\mbox{Var}[\hat{\bbeta}(\lambda)] \, \, \, = \, \, \, \sigma^2 \left( +\mbox{Var}[\hat{\beta}(\lambda)] \, \, \, = \, \, \, \sigma^2 \left( \begin{array}{rr} 0.1524 & 0.0698 \\ @@ -665,9 +797,9 @@ These variances can be used to construct levels sets of the distribution of the \begin{contexample}_ref{example.orthoronormalDesign_} *Orthonormal design matrix (continued)* \\ -Assume the design matrix $\mathbf{X}$ is orthonormal. Then, $\mbox{Var}[ \hat{\bbeta} ] = \sigma^2 \mathbf{I}_{pp}$ and +Assume the design matrix $\mathbf{X}$ is orthonormal. Then, $\mbox{Var}[ \hat{\beta} ] = \sigma^2 \mathbf{I}_{pp}$ and \begin{align*} -\mbox{Var}[ \hat{\bbeta}(\lambda) ] & = \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} +\mbox{Var}[ \hat{\beta}(\lambda) ] & = \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} \, \, \, = \, \, \, \sigma^2 [\mathbf{I}_{pp} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{I}_{pp} \{ [\mathbf{I}_{pp} + \lambda \mathbf{I}_{pp} ]^{-1} \}^{\top} \, \, \, = \, \, \, \sigma^2 (1 + \lambda )^{-2} \mathbf{I}_{pp} . \end{align*} @@ -677,11 +809,11 @@ As the penalty parameter $\lambda$ is non-negative the former exceeds the latter # #if FORMAT in ("latex", "pdflatex") \noindent # #endif -The full distribution of the ridge regression estimator is now known. The estimator, $\hat{\bbeta}(\lambda) = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}$ is a linear estimator, linear in $\mathbf{Y}$. As $\mathbf{Y}$ is normally distributed, so is $\hat{\bbeta}(\lambda)$. Moreover, the normal distribution is fully characterized by its first two moments, which are available. Hence: +The full distribution of the ridge regression estimator is now known. The estimator, $\hat{\beta}(\lambda) = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}$ is a linear estimator, linear in $\mathbf{Y}$. As $\mathbf{Y}$ is normally distributed, so is $\hat{\beta}(\lambda)$. Moreover, the normal distribution is fully characterized by its first two moments, which are available. Hence: \begin{align*} -\hat{\bbeta}(\lambda) & \sim & \mathcal{N} \big( (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{X} \, \bbeta, \sigma^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{X} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}\}^{\top} \big). +\hat{\beta}(\lambda) & \sim & \mathcal{N} \big( (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{X} \, \beta, \sigma^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{X} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}\}^{\top} \big). \end{align*} -Given $\lambda$ and $\bbeta$, the random behavior of the estimator is thus known. +Given $\lambda$ and $\beta$, the random behavior of the estimator is thus known. @@ -701,43 +833,43 @@ The MSE of the ridge estimator is: !bt \begin{align} -\mbox{MSE}[\hat{\bbeta}(\lambda)] & = \mathbb{E} [ (\mathbf{W}_{\lambda} \, \hat{\bbeta} - \bbeta)^{\top} \, (\mathbf{W}_{\lambda} \, \hat{\bbeta} - \bbeta) ] \nonumber +\mbox{MSE}[\hat{\beta}(\lambda)] & = \mathbb{E} [ (\mathbf{W}_{\lambda} \, \hat{\beta} - \beta)^{\top} \, (\mathbf{W}_{\lambda} \, \hat{\beta} - \beta) ] \nonumber \\ -& = \mathbb{E} ( \hat{\bbeta}^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \hat{\bbeta} ) - \mathbb{E} ( \bbeta^{\top} \, \mathbf{W}_{\lambda} \, \hat{\bbeta}) - \mathbb{E} ( \hat{\bbeta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \bbeta) + \mathbb{E} ( \bbeta^{\top} \bbeta) \nonumber +& = \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \hat{\beta} ) - \mathbb{E} ( \beta^{\top} \, \mathbf{W}_{\lambda} \, \hat{\beta}) - \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \beta) + \mathbb{E} ( \beta^{\top} \beta) \nonumber \\ -& = \mathbb{E} ( \hat{\bbeta}^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \hat{\bbeta} ) - \mathbb{E} ( \bbeta^{\top} \, \mathbf{W}_{\lambda}^{\top} \mathbf{W}_{\lambda} \, \hat{\bbeta}) - \mathbb{E} ( \hat{\bbeta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \bbeta) + \mathbb{E} ( \bbeta^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \bbeta ) \nonumber +& = \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \hat{\beta} ) - \mathbb{E} ( \beta^{\top} \, \mathbf{W}_{\lambda}^{\top} \mathbf{W}_{\lambda} \, \hat{\beta}) - \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \beta) + \mathbb{E} ( \beta^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \beta ) \nonumber \\ -& & - \mathbb{E} ( \bbeta^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \bbeta ) + \mathbb{E} ( \bbeta^{\top} \, \mathbf{W}_{\lambda}^{\top} \mathbf{W}_{\lambda} \, \hat{\bbeta}) + \mathbb{E} ( \hat{\bbeta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \bbeta) \nonumber +& & - \mathbb{E} ( \beta^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \beta ) + \mathbb{E} ( \beta^{\top} \, \mathbf{W}_{\lambda}^{\top} \mathbf{W}_{\lambda} \, \hat{\beta}) + \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \beta) \nonumber \\ -& & - \mathbb{E} ( \bbeta^{\top} \, \mathbf{W}_{\lambda} \, \hat{\bbeta}) - \mathbb{E} ( \hat{\bbeta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \bbeta) + \mathbb{E} ( \bbeta^{\top} \bbeta) \nonumber +& & - \mathbb{E} ( \beta^{\top} \, \mathbf{W}_{\lambda} \, \hat{\beta}) - \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \beta) + \mathbb{E} ( \beta^{\top} \beta) \nonumber \\ -& = \mathbb{E} [ ( \hat{\bbeta} - \bbeta )^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \, (\hat{\bbeta} - \bbeta) ] \nonumber +& = \mathbb{E} [ ( \hat{\beta} - \beta )^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \, (\hat{\beta} - \beta) ] \nonumber \\ -& & - \bbeta^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \bbeta + \bbeta^{\top} \, \mathbf{W}_{\lambda}^{\top} \mathbf{W}_{\lambda} \, \bbeta + \bbeta^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \bbeta \nonumber +& & - \beta^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \beta + \beta^{\top} \, \mathbf{W}_{\lambda}^{\top} \mathbf{W}_{\lambda} \, \beta + \beta^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \beta \nonumber \\ -& & - \bbeta^{\top} \, \mathbf{W}_{\lambda} \, \bbeta - \bbeta^{\top} \mathbf{W}_{\lambda}^{\top} \, \bbeta + \bbeta^{\top} \bbeta \nonumber +& & - \beta^{\top} \, \mathbf{W}_{\lambda} \, \beta - \beta^{\top} \mathbf{W}_{\lambda}^{\top} \, \beta + \beta^{\top} \beta \nonumber \\ -& = \mathbb{E} \big\{ ( \hat{\bbeta} - \bbeta )^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \, (\hat{\bbeta} - \bbeta) \big\} + \bbeta^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \, \bbeta \nonumber +& = \mathbb{E} \big\{ ( \hat{\beta} - \beta )^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \, (\hat{\beta} - \beta) \big\} + \beta^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \, \beta \nonumber \\ -& = \sigma^2 \, \mbox{tr}\big\{ \mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{W}_{\lambda}^{\top} \big\} + \bbeta^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \, \bbeta. label{form.ridgeMSE} +& = \sigma^2 \, \mbox{tr}\big\{ \mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{W}_{\lambda}^{\top} \big\} + \beta^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \, \beta. label{form.ridgeMSE} \end{align} !et !et -In the last step we have used $\hat{\bbeta} \sim \mathcal{N}( \bbeta, \sigma^2 \, [\mathbf{X}^{\top} \mathbf{X}]^{-1} )$ and the expectation of the quadratic form of a multivariate random variable $\vvarepsilon \sim \mathcal{N}(\mmu_{\varepsilon}, \SSigma_{\varepsilon})$ for some nonrandom symmetric positive definite matrix $\LLambda$ is (cf. \citealt{Math1992}): +In the last step we have used $\hat{\beta} \sim \mathcal{N}( \beta, \sigma^2 \, [\mathbf{X}^{\top} \mathbf{X}]^{-1} )$ and the expectation of the quadratic form of a multivariate random variable $\vvarepsilon \sim \mathcal{N}(\mmu_{\varepsilon}, \SSigma_{\varepsilon})$ for some nonrandom symmetric positive definite matrix $\LLambda$ is (cf. \citealt{Math1992}): \begin{align*} \mathbb{E} ( \vvarepsilon^{\top} \, \LLambda \, \vvarepsilon) & = \mbox{tr} ( \LLambda \, \SSigma_{\varepsilon}) + \mmu_{\varepsilon}^{\top} \, \LLambda \, \mmu_{\varepsilon}, \end{align*} -of course replacing $\vvarepsilon$ by $\hat{\bbeta}$ in this expectation. The first summand in the final derived expression for $\mbox{MSE}[\hat{\bbeta}(\lambda)]$ is the sum of the variances of the ridge estimator, while the second summand can be thought of the ``squared bias'' of the ridge estimator. In particular, $\lim_{\lambda \rightarrow \infty} \mbox{MSE}[\hat{\bbeta}(\lambda)] = \bbeta^{\top} \bbeta$, which is the squared biased for an estimator that equals zero (as does the ridge estimator in the limit). +of course replacing $\vvarepsilon$ by $\hat{\beta}$ in this expectation. The first summand in the final derived expression for $\mbox{MSE}[\hat{\beta}(\lambda)]$ is the sum of the variances of the ridge estimator, while the second summand can be thought of the ``squared bias'' of the ridge estimator. In particular, $\lim_{\lambda \rightarrow \infty} \mbox{MSE}[\hat{\beta}(\lambda)] = \beta^{\top} \beta$, which is the squared biased for an estimator that equals zero (as does the ridge estimator in the limit). \begin{example} *Orthonormal design matrix* \\ -Assume the design matrix $\mathbf{X}$ is orthonormal. Then, $\mbox{MSE}[ \hat{\bbeta} ] = p \, \sigma^2$ and +Assume the design matrix $\mathbf{X}$ is orthonormal. Then, $\mbox{MSE}[ \hat{\beta} ] = p \, \sigma^2$ and \begin{align*} -\mbox{MSE}[ \hat{\bbeta}(\lambda) ] & = \frac{p \, \sigma^2}{ (1+ \lambda)^{2}} + \frac{\lambda^2}{ (1+ \lambda)^{2}} \bbeta^{\top} \bbeta. +\mbox{MSE}[ \hat{\beta}(\lambda) ] & = \frac{p \, \sigma^2}{ (1+ \lambda)^{2}} + \frac{\lambda^2}{ (1+ \lambda)^{2}} \beta^{\top} \beta. \end{align*} -The latter achieves its minimum at: $\lambda = p \sigma^2 / \bbeta^{\top} \bbeta$. +The latter achieves its minimum at: $\lambda = p \sigma^2 / \beta^{\top} \beta$. \end{example} @@ -767,40 +899,40 @@ We are now ready to proof the main result, formalized as Theorem ref{theo.Theoba \begin{theorem} *(Theorem 2 of \citealp{Theo1974*}) label{theo.Theobald2} \\ -There exists $\lambda > 0$ such that $\mbox{MSE}[\hat{\bbeta}(\lambda)] < \mbox{MSE}[\hat{\bbeta}(0)] = \mbox{MSE}[\hat{\bbeta}]$. +There exists $\lambda > 0$ such that $\mbox{MSE}[\hat{\beta}(\lambda)] < \mbox{MSE}[\hat{\beta}(0)] = \mbox{MSE}[\hat{\beta}]$. \end{theorem} \begin{proof} The second order moment matrix of the ridge estimator is: \begin{align*} -\mathbf{M} (\lambda) & := & \mathbb{E} [ (\hat{\bbeta}(\lambda) - \bbeta) (\hat{\bbeta} (\lambda) - \bbeta)^{\top} ] +\mathbf{M} (\lambda) & := & \mathbb{E} [ (\hat{\beta}(\lambda) - \beta) (\hat{\beta} (\lambda) - \beta)^{\top} ] \\ -& = \mathbb{E} \{ \hat{\bbeta}(\lambda) [\hat{\bbeta}(\lambda)]^{\top} \} - \mathbb{E} [ \hat{\bbeta}(\lambda) ] \{ \mathbb{E} [ \hat{\bbeta}(\lambda) ] \}^{\top} + \mathbb{E} [\hat{\bbeta} (\lambda) - \bbeta)] \{ \mathbb{E} [\hat{\bbeta} (\lambda) - \bbeta)] \}^{\top} +& = \mathbb{E} \{ \hat{\beta}(\lambda) [\hat{\beta}(\lambda)]^{\top} \} - \mathbb{E} [ \hat{\beta}(\lambda) ] \{ \mathbb{E} [ \hat{\beta}(\lambda) ] \}^{\top} + \mathbb{E} [\hat{\beta} (\lambda) - \beta)] \{ \mathbb{E} [\hat{\beta} (\lambda) - \beta)] \}^{\top} \\ -& = \mbox{Var}[ \hat{\bbeta}(\lambda) ] + \mathbb{E} [\hat{\bbeta} (\lambda) - \bbeta)] \{ \mathbb{E} [\hat{\bbeta} (\lambda) - \bbeta)] \}^{\top}. +& = \mbox{Var}[ \hat{\beta}(\lambda) ] + \mathbb{E} [\hat{\beta} (\lambda) - \beta)] \{ \mathbb{E} [\hat{\beta} (\lambda) - \beta)] \}^{\top}. \end{align*} Then: \begin{align*} \mathbf{M} ( 0 ) - \mathbf{M}(\lambda) & = \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} - \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} ] \\ -& & - (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \bbeta \bbeta^{\top} (\mathbf{W}_{\lambda} -\mathbf{I}_{pp})^{\top} +& & - (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \beta \beta^{\top} (\mathbf{W}_{\lambda} -\mathbf{I}_{pp})^{\top} \\ & = \sigma^2 \mathbf{W}_{\lambda} [ 2 \, \lambda \, (\mathbf{X}^{\top} \mathbf{X})^{-2} + \lambda^2 (\mathbf{X}^{\top} \mathbf{X})^{-3} ] \mathbf{W}_{\lambda}^{\top} \\ -& & - \lambda^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \bbeta \bbeta^{\top} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top} +& & - \lambda^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \beta \beta^{\top} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top} \\ & = \sigma^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} [ 2 \, \lambda \, \mathbf{I}_{pp} + \lambda^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} ] \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top} \\ -& & - \lambda^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \bbeta \bbeta^{\top} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top} +& & - \lambda^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \beta \beta^{\top} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top} \\ -& = \lambda [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} [ 2 \, \sigma^2 \, \mathbf{I}_{pp} + \lambda \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} - \lambda \bbeta \bbeta^{\top} ] \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top}. +& = \lambda [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} [ 2 \, \sigma^2 \, \mathbf{I}_{pp} + \lambda \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} - \lambda \beta \beta^{\top} ] \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top}. \end{align*} -This is positive definite if and only if $ 2 \, \sigma^2 \, \mathbf{I}_{pp} + \lambda \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} - \lambda \bbeta \bbeta^{\top} \succ 0$. Hereto it suffices to show that $2 \, \sigma^2 \, \mathbf{I}_{pp} - \lambda \bbeta \bbeta^{\top} \succ 0$. By Proposition ref{prop.Farebrother} this holds for $\lambda$ such that $2 \sigma^2 (\bbeta^{\top} \bbeta)^{-1} > \lambda$. For these $\lambda$, we thus have $\mathbf{M} ( 0 ) - \mathbf{M}(\lambda)$. Application of Theorem ref{theo.Theobald1} now concludes the proof. +This is positive definite if and only if $ 2 \, \sigma^2 \, \mathbf{I}_{pp} + \lambda \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} - \lambda \beta \beta^{\top} \succ 0$. Hereto it suffices to show that $2 \, \sigma^2 \, \mathbf{I}_{pp} - \lambda \beta \beta^{\top} \succ 0$. By Proposition ref{prop.Farebrother} this holds for $\lambda$ such that $2 \sigma^2 (\beta^{\top} \beta)^{-1} > \lambda$. For these $\lambda$, we thus have $\mathbf{M} ( 0 ) - \mathbf{M}(\lambda)$. Application of Theorem ref{theo.Theobald1} now concludes the proof. \end{proof} This result of cite{Theo1974} is generalized by cite{Fare1976} to the class of design matrices $\mathbf{X}$ with $\mbox{rank}(\mathbf{X}) < p$. \\ \\ -Theorem ref{theo.Theobald2} can be used to illustrate that the ridge regression estimator strikes a balance between the bias and variance. This is illustrated in the left panel of Figure ref{fig.MSEridge}. For small $\lambda$, the variance of the ridge estimator dominates the MSE. This may be understood when realizing that in this domain of $\lambda$ the ridge estimator is close to the unbiased ML regression estimator. For large $\lambda$, the variance vanishes and the bias dominates the MSE. For small enough values of $\lambda$, the decrease in variance of the ridge regression estimator exceeds the increase in its bias. As the MSE is the sum of these two, the MSE first decreases as $\lambda$ moves away from zero. In particular, as $\lambda = 0$ corresponds to the ML regression estimator, the ridge regression estimator yields a lower MSE for these values of $\lambda$. In the right panel of Figure ref{fig.MSEridge} $\mbox{MSE}[ \hat{\bbeta}(\lambda)] < \mbox{MSE}[ \hat{\bbeta}(0)]$ for $\lambda < 7$ (roughly) and the ridge estimator outperforms the ML estimator. +Theorem ref{theo.Theobald2} can be used to illustrate that the ridge regression estimator strikes a balance between the bias and variance. This is illustrated in the left panel of Figure ref{fig.MSEridge}. For small $\lambda$, the variance of the ridge estimator dominates the MSE. This may be understood when realizing that in this domain of $\lambda$ the ridge estimator is close to the unbiased ML regression estimator. For large $\lambda$, the variance vanishes and the bias dominates the MSE. For small enough values of $\lambda$, the decrease in variance of the ridge regression estimator exceeds the increase in its bias. As the MSE is the sum of these two, the MSE first decreases as $\lambda$ moves away from zero. In particular, as $\lambda = 0$ corresponds to the ML regression estimator, the ridge regression estimator yields a lower MSE for these values of $\lambda$. In the right panel of Figure ref{fig.MSEridge} $\mbox{MSE}[ \hat{\beta}(\lambda)] < \mbox{MSE}[ \hat{\beta}(0)]$ for $\lambda < 7$ (roughly) and the ridge estimator outperforms the ML estimator. # original latex figure with scale=0.45, angle=0 FIGURE: [MSE_ridge.eps, width=400 frac=1.0] Left panel: mean squared error, and its `bias' and `variance' parts, of the ridge regression estimator (for artificial data). Right panel: mean squared error of the ridge and ML estimator of the regression coefficient vector (for the same artificial data).} label{fig.MSEridge @@ -810,7 +942,7 @@ FIGURE: [MSE_ridge.eps, width=400 frac=1.0] Left panel: mean squared error, and # #if FORMAT in ("latex", "pdflatex") \noindent # #endif -Besides another motivation behind the ridge regression estimator, the use of Theorem ref{theo.Theobald2} is limited. The optimal choice of $\lambda$ depends on the quantities $\bbeta$ and $\sigma^2$. These are unknown in practice. Then, the penalty parameter is chosen in a data-driven fashion by means of cross-validation (see Section ref{subsect.crossvalidation}). +Besides another motivation behind the ridge regression estimator, the use of Theorem ref{theo.Theobald2} is limited. The optimal choice of $\lambda$ depends on the quantities $\beta$ and $\sigma^2$. These are unknown in practice. Then, the penalty parameter is chosen in a data-driven fashion by means of cross-validation (see Section ref{subsect.crossvalidation}). \\ \\ \begin{remark} \mbox{ } @@ -829,30 +961,30 @@ The ridge estimator minimizes the *ridge loss function*, which is defined as: !bt \begin{align} -\mathcal{L}_{\mbox{{\footnotesize ridge}}}(\bbeta; \lambda) & = \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2 + \lambda \| \bbeta \|^2_2 -\, \, \, = \, \, \, \sum_{i=1}^n (Y_i - \mathbf{X}_{i\ast} \, \bbeta)^2 + \lambda \sum_{j=1}^p \beta_j^2. label{form.ridgeLossFunction} +\mathcal{L}_{\mbox{{\footnotesize ridge}}}(\beta; \lambda) & = \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2 + \lambda \| \beta \|^2_2 +\, \, \, = \, \, \, \sum_{i=1}^n (Y_i - \mathbf{X}_{i\ast} \, \beta)^2 + \lambda \sum_{j=1}^p \beta_j^2. label{form.ridgeLossFunction} \end{align} !et !et -This loss function is the traditional sum-of-squares augmented with a *penalty*. The particular form of the penalty, $\lambda \| \bbeta \|^2_2$ is referred to as the *ridge penalty* and $\lambda$ as the *penalty parameter*. For $\lambda=0$, minimization of the ridge loss function yields the ML estimator. For any $\lambda > 0$, the ridge penalty contributes to the loss function, affecting its minimum and its location. The minimum of the sum-of-squares is well-known. The minimum of the ridge penalty is attained at $\bbeta = \mathbf{0}_{p}$ whenever $\lambda > 0$. The $\bbeta$ that minimizes $\mathcal{L}_{\mbox{{\footnotesize ridge}}}(\bbeta; \lambda)$ then balances the sum-of-squares and the penalty. The effect of the penalty in this balancing act is to shrink the regression coefficients towards zero, its minimum. In particular, the larger $\lambda$, the larger the contribution of the penalty to the loss function, the stronger the tendency to shrink non-zero regression coefficients to zero (and decrease the contribution of the penalty to the loss function). This motivates the name `penalty' as non-zero elements of $\bbeta$ increase (or penalize) the loss function. +This loss function is the traditional sum-of-squares augmented with a *penalty*. The particular form of the penalty, $\lambda \| \beta \|^2_2$ is referred to as the *ridge penalty* and $\lambda$ as the *penalty parameter*. For $\lambda=0$, minimization of the ridge loss function yields the ML estimator. For any $\lambda > 0$, the ridge penalty contributes to the loss function, affecting its minimum and its location. The minimum of the sum-of-squares is well-known. The minimum of the ridge penalty is attained at $\beta = \mathbf{0}_{p}$ whenever $\lambda > 0$. The $\beta$ that minimizes $\mathcal{L}_{\mbox{{\footnotesize ridge}}}(\beta; \lambda)$ then balances the sum-of-squares and the penalty. The effect of the penalty in this balancing act is to shrink the regression coefficients towards zero, its minimum. In particular, the larger $\lambda$, the larger the contribution of the penalty to the loss function, the stronger the tendency to shrink non-zero regression coefficients to zero (and decrease the contribution of the penalty to the loss function). This motivates the name `penalty' as non-zero elements of $\beta$ increase (or penalize) the loss function. -To verify that the ridge estimator indeed minimizes the ridge loss function, proceed as usual. Take the derivative with respect to $\bbeta$: +To verify that the ridge estimator indeed minimizes the ridge loss function, proceed as usual. Take the derivative with respect to $\beta$: \begin{align*} -\frac{\partial}{\partial \bbeta} \mathcal{L}_{\mbox{{\footnotesize ridge}}}(\bbeta; \lambda) & = -2 \, \mathbf{X}^{\top} (\mathbf{Y} - \mathbf{X} \bbeta) + 2 \, \lambda \, \mathbf{I}_{pp} \, \bbeta \, \, \, = \, \, \, -2 \, \mathbf{X}^{\top} \mathbf{Y} + 2 \, ( \mathbf{X}^{\top} \mathbf{X} + \lambda \, \mathbf{I}_{pp}) \bbeta. +\frac{\partial}{\partial \beta} \mathcal{L}_{\mbox{{\footnotesize ridge}}}(\beta; \lambda) & = -2 \, \mathbf{X}^{\top} (\mathbf{Y} - \mathbf{X} \beta) + 2 \, \lambda \, \mathbf{I}_{pp} \, \beta \, \, \, = \, \, \, -2 \, \mathbf{X}^{\top} \mathbf{Y} + 2 \, ( \mathbf{X}^{\top} \mathbf{X} + \lambda \, \mathbf{I}_{pp}) \beta. \end{align*} -Equate the derivative to zero and solve for $\bbeta$. This yields the ridge regression estimator. +Equate the derivative to zero and solve for $\beta$. This yields the ridge regression estimator. The ridge estimator is thus a stationary point of the ridge loss function. A stationary point corresponds to a minimum if the Hessian matrix with second order partial derivatives is positive definite. The Hessian of the ridge loss function is \begin{align*} -\frac{\partial^2}{\partial \bbeta \, \partial \bbeta^{\top}} \mathcal{L}_{\mbox{{\footnotesize ridge}}}(\bbeta; \lambda) & = 2 \, ( \mathbf{X}^{\top} \mathbf{X} + \lambda \, \mathbf{I}_{pp}). +\frac{\partial^2}{\partial \beta \, \partial \beta^{\top}} \mathcal{L}_{\mbox{{\footnotesize ridge}}}(\beta; \lambda) & = 2 \, ( \mathbf{X}^{\top} \mathbf{X} + \lambda \, \mathbf{I}_{pp}). \end{align*} This Hessian is the sum of the semi-positive definite matrix $\mathbf{X}^{\top} \mathbf{X}$ and the positive definite matrix $\lambda \, \mathbf{I}_{pp}$. Lemma 14.2.4 of cite{Harv2008} then states that the sum of these matrices is itself a positive definite matrix. Hence, the Hessian is positive definite and the ridge loss function has a stationary point at the ridge estimator, which is a minimum. -The ridge regression estimator minimizes the ridge loss function. It rests to verify that it is a global minimum. To this end we introduce the concept of a convex function. As a prerequisite, a set $\mathcal{S} \subset \mathbb{R}^p$ is called *convex* if for all $\bbeta_1, \bbeta_2 \in \mathcal{S}$ their weighted average $\bbeta_{\theta} = (1 - \theta) \bbeta_1 + \theta \bbeta_2$ for all $\theta \in [0, 1]$ is itself an element of $\mathcal{S}$, thus $\bbeta_{\theta} \in \mathcal{S}$. If for all $\theta \in (0, 1)$, the weighted average $\bbeta_{\theta}$ is inside $\mathcal{S}$ and not on its boundary, the set is called *strict convex*. Examples of (strict) convex and nonconvex sets are depicted in Figure ref{fig.ridgeAsConstrainedEst}. A function $f(\cdot)$ is *(strict) convex* if the set $\{ y \, : \, y \geq f(\bbeta) \mbox{ for all } \bbeta \in \mathcal{S} \mbox{ for any convex } \mathcal{S} \}$, called the epigraph of $f(\cdot)$, is (strict) convex. Examples of (strict) convex and nonconvex functions are depicted in Figure ref{fig.ridgeAsConstrainedEst}. The ridge loss function is the sum of two parabola's: one at least convex and the other a strict convex function in $\bbeta$. The sum of convex and strict convex function is itself strict convex (confer Lemma 9.4.2 of \citealt{Flet2008}). The ridge loss function is thus strict convex. Theorem 9.4.1 of \citealt{Flet2008} then warrants, by the strict convexity of the ridge loss function, that the ridge estimator is a global minimum. +The ridge regression estimator minimizes the ridge loss function. It rests to verify that it is a global minimum. To this end we introduce the concept of a convex function. As a prerequisite, a set $\mathcal{S} \subset \mathbb{R}^p$ is called *convex* if for all $\beta_1, \beta_2 \in \mathcal{S}$ their weighted average $\beta_{\theta} = (1 - \theta) \beta_1 + \theta \beta_2$ for all $\theta \in [0, 1]$ is itself an element of $\mathcal{S}$, thus $\beta_{\theta} \in \mathcal{S}$. If for all $\theta \in (0, 1)$, the weighted average $\beta_{\theta}$ is inside $\mathcal{S}$ and not on its boundary, the set is called *strict convex*. Examples of (strict) convex and nonconvex sets are depicted in Figure ref{fig.ridgeAsConstrainedEst}. A function $f(\cdot)$ is *(strict) convex* if the set $\{ y \, : \, y \geq f(\beta) \mbox{ for all } \beta \in \mathcal{S} \mbox{ for any convex } \mathcal{S} \}$, called the epigraph of $f(\cdot)$, is (strict) convex. Examples of (strict) convex and nonconvex functions are depicted in Figure ref{fig.ridgeAsConstrainedEst}. The ridge loss function is the sum of two parabola's: one at least convex and the other a strict convex function in $\beta$. The sum of convex and strict convex function is itself strict convex (confer Lemma 9.4.2 of \citealt{Flet2008}). The ridge loss function is thus strict convex. Theorem 9.4.1 of \citealt{Flet2008} then warrants, by the strict convexity of the ridge loss function, that the ridge estimator is a global minimum. \\ \\ -From the ridge loss function the limiting behavior of the variance of the ridge regression estimator can be understood. The ridge penalty with its minimum $\bbeta = \mathbf{0}_{p}$ does not involve data and, consequently, the variance of its minimum equals zero. With the ridge regression being a compromise between the ML estimator and the minimum of the penalty, so is its variance a compromise of their variances. As $\lambda$ tends to infinity, the ridge estimator and its variance converge to the minimum and the variance of the minimum, respectively. Hence, in the limit (large $\lambda$) the variance of the ridge regression estimator vanishes. Understandably, as the penalty now fully dominates the loss function and, consequently, it does no longer involve data (i.e. randomness). +From the ridge loss function the limiting behavior of the variance of the ridge regression estimator can be understood. The ridge penalty with its minimum $\beta = \mathbf{0}_{p}$ does not involve data and, consequently, the variance of its minimum equals zero. With the ridge regression being a compromise between the ML estimator and the minimum of the penalty, so is its variance a compromise of their variances. As $\lambda$ tends to infinity, the ridge estimator and its variance converge to the minimum and the variance of the minimum, respectively. Hence, in the limit (large $\lambda$) the variance of the ridge regression estimator vanishes. Understandably, as the penalty now fully dominates the loss function and, consequently, it does no longer involve data (i.e. randomness). # original latex figure with scale=0.38, angle=0 FIGURE: [convexSets.eps, width=400 frac=1.0] Top panels show examples of convex (left) and nonconvex (right) sets. Middle panels show examples of convex (left) and nonconvex (right) functions. The left bottom panel illustrates the ridge estimation as a constrained estimation problem. The ellipses represent the contours of the ML loss function, with the blue dot at the center the ML estimate. The circle is the ridge parameter constraint. The red dot is the ridge estimate. It is at the intersection of the ridge constraint and the smallest contour with a non-empty intersection with the constraint. The right bottom panel shows the data corresponding to Example ref{exam.overfitting}. The grey line represents the `true' relationship, while the black line the fitted one. } label{fig.ridgeAsConstrainedEst @@ -865,7 +997,7 @@ Above it has been shown that the ridge estimator can be defined as: !bt \begin{align} label{form.ridgeEstViaPenEst} -\hat{\bbeta}(\lambda) & = \arg \min_{\bbeta} \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2 + \lambda \| \bbeta \|^2_2. +\hat{\beta}(\lambda) & = \arg \min_{\beta} \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2 + \lambda \| \beta \|^2_2. \end{align} !et !et @@ -875,15 +1007,15 @@ This minimization problem can be reformulated into the following constrained opt !bt \begin{align} label{form.constrEstProblemRidge} -\hat{\bbeta}(\lambda) & = \arg \min_{\| \bbeta \|_2^2 \leq c} \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2, +\hat{\beta}(\lambda) & = \arg \min_{\| \beta \|_2^2 \leq c} \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2, \end{align} !et !et -for some suitable $c > 0$. The constrained optimization problem (ref{form.constrEstProblemRidge}) can be solved by means of the Karush-Kuhn-Tucker (KKT) multiplier method, which minimizes a function subject to inequality constraints. The KKT multiplier method states that, under some regularity conditions (all met here), there exists a constant $\nu \geq 0$, called the *multiplier*, such that the solution $\hat{\bbeta}(\nu)$ of the constrained minimization problem (ref{form.constrEstProblemRidge}) satisfies the so-called KKT conditions. The first KKT condition (referred to as the stationarity condition) demands that the gradient (with respect to $\bbeta$) of the Lagrangian associated with the minimization problem equals zero at the solution $\hat{\bbeta}(\nu)$. The Lagrangian for problem (ref{form.constrEstProblemRidge}) is: +for some suitable $c > 0$. The constrained optimization problem (ref{form.constrEstProblemRidge}) can be solved by means of the Karush-Kuhn-Tucker (KKT) multiplier method, which minimizes a function subject to inequality constraints. The KKT multiplier method states that, under some regularity conditions (all met here), there exists a constant $\nu \geq 0$, called the *multiplier*, such that the solution $\hat{\beta}(\nu)$ of the constrained minimization problem (ref{form.constrEstProblemRidge}) satisfies the so-called KKT conditions. The first KKT condition (referred to as the stationarity condition) demands that the gradient (with respect to $\beta$) of the Lagrangian associated with the minimization problem equals zero at the solution $\hat{\beta}(\nu)$. The Lagrangian for problem (ref{form.constrEstProblemRidge}) is: \begin{align*} -\| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2 + \nu ( \| \bbeta \|^2_2 - c). +\| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2 + \nu ( \| \beta \|^2_2 - c). \end{align*} -The second KKT condition (the complementarity condition) requires that $\nu (\| \hat{\bbeta}(\nu) \|_2^2 - c) = 0$. If $\nu = \lambda$ and $c = \| \hat{\bbeta}(\lambda) \|_2^2$, the ridge estimator $\bbeta (\lambda)$ satisfies both KKT conditions. Hence, both problems have the same solution when $c = \| \hat{\bbeta}(\lambda) \|_2^2$. +The second KKT condition (the complementarity condition) requires that $\nu (\| \hat{\beta}(\nu) \|_2^2 - c) = 0$. If $\nu = \lambda$ and $c = \| \hat{\beta}(\lambda) \|_2^2$, the ridge estimator $\beta (\lambda)$ satisfies both KKT conditions. Hence, both problems have the same solution when $c = \| \hat{\beta}(\lambda) \|_2^2$. \\ \\ The relevance of viewing the ridge regression estimator as the solution to a constrained estimation problem becomes obvious when considering a typical threat to high-dimensional data analysis: overfitting. *Overfitting* refers to the phenomenon of modelling the noise rather than the signal. In case the true model is parsimonious (few covariates driving the response) and data on many covariates are available, it is likely that a linear combination of all covariates yields a higher likelihood than a combination of the few that are actually related to the response. As only the few covariates related to the response contain the signal, the model involving all covariates then cannot but explain more than the signal alone: it also models the error. Hence, it overfits the data. In high-dimensional settings overfitting is a real threat. The number of explanatory variables exceeds the number of observations. It is thus possible to form a linear combination of the covariates that perfectly explains the response, including the noise. @@ -897,81 +1029,81 @@ Consider an artificial data set comprising of ten observations on a response $Y_ The regression model $Y_i = \sum_{j=1}^9 X_{i,j} \beta_j+ \varepsilon_i$ is fitted to the artificial data using `R`. This yields the regression parameter estimates: \begin{align*} -\hat{\bbeta}^{\top} & = (0.048, -2.386, -5.528, 6.243, -4.819, 0.760, -3.345, -4.748, 2.136). +\hat{\beta}^{\top} & = (0.048, -2.386, -5.528, 6.243, -4.819, 0.760, -3.345, -4.748, 2.136). \end{align*} -As $\bbeta^{\top} = (1, 0, \ldots, 0)$, many regression coefficient are clearly over-estimated. +As $\beta^{\top} = (1, 0, \ldots, 0)$, many regression coefficient are clearly over-estimated. -The fitted values $\widehat{Y}_i = \mathbf{X}_i \hat{\bbeta}$ are plotted against the values of the first covariates in the right bottom panel of Figure ref{fig.ridgeAsConstrainedEst}. As a reference the line $x=y$ is added, which represents the `true' model. The fitted model follows the `true' relationship. But it also captures the deviations from this line that represent the errors. +The fitted values $\widehat{Y}_i = \mathbf{X}_i \hat{\beta}$ are plotted against the values of the first covariates in the right bottom panel of Figure ref{fig.ridgeAsConstrainedEst}. As a reference the line $x=y$ is added, which represents the `true' model. The fitted model follows the `true' relationship. But it also captures the deviations from this line that represent the errors. \end{example} ======= Bayesian regression} label{sect:Bayes ======= -Ridge regression has a close connection to Bayesian linear regression. Bayesian linear regression assumes the parameters $\bbeta$ and $\sigma^2$ to be the random variables, while at the same time considering $\mathbf{X}$ and $\mathbf{Y}$ as fixed. Within the regression context, the conjugate priors of $\bbeta$ and $\sigma^2$ are: +Ridge regression has a close connection to Bayesian linear regression. Bayesian linear regression assumes the parameters $\beta$ and $\sigma^2$ to be the random variables, while at the same time considering $\mathbf{X}$ and $\mathbf{Y}$ as fixed. Within the regression context, the conjugate priors of $\beta$ and $\sigma^2$ are: \begin{align*} -\bbeta \, | \, \sigma^2 \sim \mathcal{N}(\mathbf{0}_p, \sigma^2 \lambda^{-1} \mathbf{I}_{pp}) \qquad \mbox{and} \qquad \sigma^2 \sim \mathcal{IG}(\alpha_0, \beta_0), +\beta \, | \, \sigma^2 \sim \mathcal{N}(\mathbf{0}_p, \sigma^2 \lambda^{-1} \mathbf{I}_{pp}) \qquad \mbox{and} \qquad \sigma^2 \sim \mathcal{IG}(\alpha_0, \beta_0), \end{align*} where $\mathcal{IG}$ denotes the inverse Gamma distribution with shape parameter $\alpha_0$ and scale parameter $\beta_0$. The penalty parameter can be interpreted as the precision of the prior, determining how informative the prior should be. A smaller penalty (i.e. precision) corresponds to a wider prior, and a larger penalty to a more informative, concentrated prior (Figure ref{fig.ridgePriorOfBeta}). # original latex figure with scale=0.45, angle=0 -FIGURE: [ridgePriorOfBeta.eps, width=400 frac=1.0] Conjugate prior of the regression parameter $\bbeta$ for various choices of $\lambda$, the penalty parameters c.q. precision.} label{fig.ridgePriorOfBeta +FIGURE: [ridgePriorOfBeta.eps, width=400 frac=1.0] Conjugate prior of the regression parameter $\beta$ for various choices of $\lambda$, the penalty parameters c.q. precision.} label{fig.ridgePriorOfBeta -Under the assumption of the conjugate priors above, the joint posterior distribution of $\bbeta$ and $\sigma^2$ is then: +Under the assumption of the conjugate priors above, the joint posterior distribution of $\beta$ and $\sigma^2$ is then: \begin{align*} -f_{\bbeta, \sigma^2} (\bbeta, \sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) & = f_Y (\mathbf{Y} \, | \, \mathbf{X}, \bbeta, \sigma^2) \, f_{\beta}(\bbeta | \sigma^2) \, f_{\sigma}(\sigma^2) +f_{\beta, \sigma^2} (\beta, \sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) & = f_Y (\mathbf{Y} \, | \, \mathbf{X}, \beta, \sigma^2) \, f_{\beta}(\beta | \sigma^2) \, f_{\sigma}(\sigma^2) \\ -& \propto & \sigma^{-n} \exp \Big[ - \frac{1}{2\sigma^2} ( \mathbf{Y} - \mathbf{X} \bbeta)^{\top} ( \mathbf{Y} - \mathbf{X} \bbeta) \Big] +& \propto & \sigma^{-n} \exp \Big[ - \frac{1}{2\sigma^2} ( \mathbf{Y} - \mathbf{X} \beta)^{\top} ( \mathbf{Y} - \mathbf{X} \beta) \Big] \\ -& & \times \, \, \sigma^{-p} \exp \Big[ - \frac{1}{2\sigma^2} \lambda \bbeta^{\top} \bbeta \Big] \, \times \, \, [\sigma^2]^{-\alpha_0-1} \exp \Big[ - \frac{\beta_0}{2\sigma^2} \Big]. +& & \times \, \, \sigma^{-p} \exp \Big[ - \frac{1}{2\sigma^2} \lambda \beta^{\top} \beta \Big] \, \times \, \, [\sigma^2]^{-\alpha_0-1} \exp \Big[ - \frac{\beta_0}{2\sigma^2} \Big]. \end{align*} As \begin{align*} -& & \hspace{-1.5cm} ( \mathbf{Y} - \mathbf{X} \bbeta)^{\top} ( \mathbf{Y} - \mathbf{X} \bbeta) + \lambda \bbeta^{\top} \bbeta +& & \hspace{-1.5cm} ( \mathbf{Y} - \mathbf{X} \beta)^{\top} ( \mathbf{Y} - \mathbf{X} \beta) + \lambda \beta^{\top} \beta \\ & = \mathbf{Y}^{\top} \mathbf{Y} - -\bbeta^{\top} \mathbf{X}^{\top} \mathbf{Y} - \mathbf{Y}^{\top} \mathbf{X} \bbeta + \bbeta^{\top} \mathbf{X}^{\top} \mathbf{X} \bbeta + \lambda \bbeta^{\top} \bbeta +\beta^{\top} \mathbf{X}^{\top} \mathbf{Y} - \mathbf{Y}^{\top} \mathbf{X} \beta + \beta^{\top} \mathbf{X}^{\top} \mathbf{X} \beta + \lambda \beta^{\top} \beta \\ -& = \mathbf{Y}^{\top} \mathbf{Y} - \bbeta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +& = \mathbf{Y}^{\top} \mathbf{Y} - \beta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} \\ -& & - \, \mathbf{Y}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \bbeta + \bbeta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \bbeta +& & - \, \mathbf{Y}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \beta + \beta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \beta \\ -& = \mathbf{Y}^{\top} \mathbf{Y} - \bbeta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) -\hat{\bbeta} (\lambda) +& = \mathbf{Y}^{\top} \mathbf{Y} - \beta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) +\hat{\beta} (\lambda) \\ -& & - \, [ \hat{\bbeta} (\lambda) ]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \bbeta + \bbeta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \bbeta +& & - \, [ \hat{\beta} (\lambda) ]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \beta + \beta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \beta \\ & = \mathbf{Y}^{\top} \mathbf{Y} - \mathbf{Y}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} \\ -& & + \, \big[ \bbeta - \hat{\bbeta}(\lambda) \big]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \big[ \bbeta - \hat{\bbeta}(\lambda) \big], +& & + \, \big[ \beta - \hat{\beta}(\lambda) \big]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \big[ \beta - \hat{\beta}(\lambda) \big], \end{align*} the posterior distribution can be rewritten to: \begin{align*} -f_{\bbeta, \sigma^2} (\bbeta, \sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) -& \propto & g_{\bbeta} (\bbeta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) \, +f_{\beta, \sigma^2} (\beta, \sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) +& \propto & g_{\beta} (\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) \, g_{\sigma^2} (\sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) \end{align*} with \begin{align*} -g_{\bbeta} (\bbeta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) -& \propto & \exp \Big\{ - \frac{1}{2\sigma^2} \big[ \bbeta - \hat{\bbeta}(\lambda) \big]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \big[ \bbeta - \hat{\bbeta}(\lambda) \big] \Big\}. +g_{\beta} (\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) +& \propto & \exp \Big\{ - \frac{1}{2\sigma^2} \big[ \beta - \hat{\beta}(\lambda) \big]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \big[ \beta - \hat{\beta}(\lambda) \big] \Big\}. \end{align*} -Then, clearly the conditional posterior mean of $\bbeta$ is $\mathbb{E}(\bbeta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) = \hat{\bbeta}(\lambda)$. Hence, the ridge regression estimator can be viewed as the Bayesian posterior mean estimator of $\bbeta$ when imposing a Gaussian prior on the regression parameter. +Then, clearly the conditional posterior mean of $\beta$ is $\mathbb{E}(\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) = \hat{\beta}(\lambda)$. Hence, the ridge regression estimator can be viewed as the Bayesian posterior mean estimator of $\beta$ when imposing a Gaussian prior on the regression parameter. With little extra work we may also obtain the conditional posterior of $\sigma^2$ from the joint posterior distribution: \begin{align*} -f_{\sigma^2} (\sigma^2 \, | \, \bbeta, \mathbf{Y}, \mathbf{X}) & \propto & (\sigma^2)^{-[(n+p)/2 + \alpha_0 + 1]} -\exp [ - \frac{1}{2\sigma^2} ( \| \mathbf{Y} - \mathbf{X} \bbeta \|_2^2 + -\lambda \| \bbeta \|_2^2 + \beta_0) ], +f_{\sigma^2} (\sigma^2 \, | \, \beta, \mathbf{Y}, \mathbf{X}) & \propto & (\sigma^2)^{-[(n+p)/2 + \alpha_0 + 1]} +\exp [ - \frac{1}{2\sigma^2} ( \| \mathbf{Y} - \mathbf{X} \beta \|_2^2 + +\lambda \| \beta \|_2^2 + \beta_0) ], \end{align*} in which one can recognize the shape of an inverse gamma distribution. \\ \\ A Bayesian estimator of a parameter $\ttheta$ is the estimator that minimizes the Bayes risk over a prior distribution of the parameter $\ttheta$. The Bayes risk is defined as $\int_{\ttheta} \mathbb{E} [(\hat{\ttheta} - \ttheta)^{\top} (\hat{\ttheta} - \ttheta)] \pi_{\ttheta}(\ttheta; \aalpha) d\ttheta$, where $\pi_{\ttheta}(\ttheta; \aalpha)$ is the prior distribution of $\ttheta$ with hyperparameter $\aalpha$. It is thus a weighted average of the Mean Squared Error, with weights specified through the prior. The Bayes risk is minimized by the mean posterior $\mathbb{E}_{\ttheta}(\ttheta \, | \, \mbox{data})$ (cf., e.g., \citealp{Bijm2017}). The Bayesian estimator of $\ttheta$ thus yields the smallest possible expected MSE, under the assumption of the employed prior. -The Bayes risk of the ridge estimator over the normal prior $\bbeta \sim \mathcal{N}(\mathbf{0}_p, \sigma^2 \lambda^{-1} \mathbf{I}_{pp})$ is: +The Bayes risk of the ridge estimator over the normal prior $\beta \sim \mathcal{N}(\mathbf{0}_p, \sigma^2 \lambda^{-1} \mathbf{I}_{pp})$ is: \begin{align*} -\mathbb{E}_{\bbeta} \{\mbox{MSE}[\hat{\bbeta}(\lambda)] -\, | \, \sigma^2, \mathbf{Y}, \mathbf{X} \} & = \sigma^2 \, \mbox{tr}\big\{ \mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{W}_{\lambda}^{\top} \big\} + \mathbb{E}_{\bbeta} [ \bbeta^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \, \bbeta] +\mathbb{E}_{\beta} \{\mbox{MSE}[\hat{\beta}(\lambda)] +\, | \, \sigma^2, \mathbf{Y}, \mathbf{X} \} & = \sigma^2 \, \mbox{tr}\big\{ \mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{W}_{\lambda}^{\top} \big\} + \mathbb{E}_{\beta} [ \beta^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \, \beta] \\ & = \sigma^2 \, \big\{ \mbox{tr} \big[ \mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{W}_{\lambda}^{\top} \big] + \lambda^{-1} \mbox{tr} [(\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})] \big\} @@ -980,13 +1112,13 @@ The Bayes risk of the ridge estimator over the normal prior $\bbeta \sim \mathca \end{align*} in which we have used *i)* the previously derived explicit expression (ref{form.ridgeMSE}) of the ridge estimator's MSE, *ii)* the expectation of the quadratic form of a multivariate random variable \citep{Math1992}, *iii)* the singular value decomposition of $\mathbf{X}$ with singular values $d_{jj}$, and *iv)* the fact that the trace of a square matrix equals the sum of its eigenvalues. As the ridge estimator coincides with the posterior mean, this is the minimal achievable MSE under a zero-centered normal prior with an uncorrelated and equivariant covariance matrix. -Above the Bayes risk of the ridge estimator factorizes with respect to $\sigma^2$ and $\lambda$. Hence, the larger the hyperparameter $\lambda$ the lower the Bayes risk of the ridge estimator. In particular, its Bayes risk converges to zero as $\lambda \rightarrow \infty$. This can be understood as follows. The limit corresponds to an infinite precision of the prior, thus reducing the variance contribution to the MSE. Moreover, as the ridge estimator shrinks towards zero and the prior distribution of $\bbeta$ has a zero mean, the bias too vanishes as $\lambda \rightarrow \infty$. +Above the Bayes risk of the ridge estimator factorizes with respect to $\sigma^2$ and $\lambda$. Hence, the larger the hyperparameter $\lambda$ the lower the Bayes risk of the ridge estimator. In particular, its Bayes risk converges to zero as $\lambda \rightarrow \infty$. This can be understood as follows. The limit corresponds to an infinite precision of the prior, thus reducing the variance contribution to the MSE. Moreover, as the ridge estimator shrinks towards zero and the prior distribution of $\beta$ has a zero mean, the bias too vanishes as $\lambda \rightarrow \infty$. -The calculation of the Bayes risk above relates the Bayesian and frequentist statements on the MSE of the ridge estimator. For the latter revisit Theorem ref{theo.Theobald2} of Section ref{sect:ridgeMSE}, which states the existence of a $\lambda$ such that the resulting ridge estimator has a superior MSE over that of the ML estimator. This result made no assumption on (the distribution of) $\bbeta$. In fact, it can be viewed as a statement of the MSE conditional on $\bbeta$. The Bayesian result integrates out the uncertainty - specified by the prior - in $\bbeta$ from the (frequentist's) conditional MSE to arrive at the unconditional MSE. +The calculation of the Bayes risk above relates the Bayesian and frequentist statements on the MSE of the ridge estimator. For the latter revisit Theorem ref{theo.Theobald2} of Section ref{sect:ridgeMSE}, which states the existence of a $\lambda$ such that the resulting ridge estimator has a superior MSE over that of the ML estimator. This result made no assumption on (the distribution of) $\beta$. In fact, it can be viewed as a statement of the MSE conditional on $\beta$. The Bayesian result integrates out the uncertainty - specified by the prior - in $\beta$ from the (frequentist's) conditional MSE to arrive at the unconditional MSE. -# The Bayesian result states that the ridge regression estimator minimizes the weighted MSE (over a normal prior on the parameter $\bbeta$). It thus integrates out the uncertainty in $\bbeta$ from the (frequentist's) conditional MSE to arrive at the unconditional MSE. +# The Bayesian result states that the ridge regression estimator minimizes the weighted MSE (over a normal prior on the parameter $\beta$). It thus integrates out the uncertainty in $\beta$ from the (frequentist's) conditional MSE to arrive at the unconditional MSE. ======= Degrees of freedom ======= @@ -1008,7 +1140,7 @@ The degrees of freedom consumed by ridge regression is monotone decreasing in $\ \begin{align*} \lim_{\lambda \rightarrow \infty} \mbox{tr}[ \mathbf{H}(\lambda)] & = 0. \end{align*} -That is, in the limit no information from $\mathbf{X}$ is used. Indeed, $\bbeta$ is forced to equal $\mathbf{0}_{p}$ which is not derived from data. +That is, in the limit no information from $\mathbf{X}$ is used. Indeed, $\beta$ is forced to equal $\mathbf{0}_{p}$ which is not derived from data. @@ -1022,7 +1154,7 @@ For $p=40000$ this requires the inversion of a $40000 \times 40000$ dimensional Revisit the singular value decomposition of $\mathbf{X} = \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top}$ and write $\mathbf{R}_x = \mathbf{U}_x \mathbf{D}_x$. As both $\mathbf{U}_x$ and $\mathbf{D}_x$ are $(n \times n)$-dimensional matrices, so is $\mathbf{R}_x$. Consequently, $\mathbf{X}$ is now decomposed as $\mathbf{X} = \mathbf{R}_x \mathbf{V}_x^{\top}$. The ridge estimator can be rewritten in terms of $\mathbf{R}_x$ and $\mathbf{V}_x$: \begin{align*} -\hat{\bbeta}(\lambda) & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\hat{\beta}(\lambda) & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} \\ & = (\mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{R}_x \mathbf{V}_x^{\top} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{Y} \\ @@ -1067,10 +1199,10 @@ analogously by the trace of the ridge hat matrix. This yields the AIC for the li \begin{align*} \mbox{AIC}(\lambda) & = 2 \, p - 2 \log(\hat{L}) \\ -& = 2 \, \mbox{tr} [\mathbf{H}(\lambda)] - 2 \log\{L[\hat{\bbeta}(\lambda), \hat{\sigma}^2(\lambda)]\} +& = 2 \, \mbox{tr} [\mathbf{H}(\lambda)] - 2 \log\{L[\hat{\beta}(\lambda), \hat{\sigma}^2(\lambda)]\} \\ & = 2 \, \sum_{j=1}^p \frac{d_{jj}^2}{d_{jj}^2 + \lambda} -+ 2 n \, \log[\sqrt{2 \, \pi} \, \hat{\sigma}(\lambda)] + \frac{1}{\hat{\sigma}^2(\lambda)} \sum_{i=1}^n [y_i - \mathbf{X}_{i, \ast} \, \hat{\bbeta}(\lambda)]^2. ++ 2 n \, \log[\sqrt{2 \, \pi} \, \hat{\sigma}(\lambda)] + \frac{1}{\hat{\sigma}^2(\lambda)} \sum_{i=1}^n [y_i - \mathbf{X}_{i, \ast} \, \hat{\beta}(\lambda)]^2. \end{align*} The value of $\lambda$ which minimizes $\mbox{AIC}(\lambda)$ corresponds to the `optimal' balance of model complexity and overfitting. @@ -1088,19 +1220,19 @@ When the repetitive splitting of the data set is done randomly, samples may acc \item[2)] Fit the linear regression model by means of ridge estimation for each $\lambda$ in the grid using the training set. This yields: \begin{align*} -\hat{\bbeta}_{-i}(\lambda) & = ( \mathbf{X}_{-i, \ast}^{\top} +\hat{\beta}_{-i}(\lambda) & = ( \mathbf{X}_{-i, \ast}^{\top} \mathbf{X}_{-i, \ast} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{-i, \ast}^{\top} \mathbf{Y}_{-i} \end{align*} and the corresponding estimate of the error variance $\hat{\sigma}_{-i}^2(\lambda)$. -\item[3)] Evaluate the prediction performance of these models on the test set by $\log\{L[Y_i, \mathbf{X}_{i, \ast}; \hat{\bbeta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}$. Or, by the prediction error $|Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}_{-i}(\lambda)|$, possibly squared. +\item[3)] Evaluate the prediction performance of these models on the test set by $\log\{L[Y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}$. Or, by the prediction error $|Y_i - \mathbf{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)|$, possibly squared. \item[4)] Repeat steps 1) to 3) such that each sample plays the role of the test set once. \item[5)] Average the prediction performances of the test sets at each grid point of the penalty parameter: \begin{align*} -\frac{1}{n} \sum_{i = 1}^n \log\{L[Y_i, \mathbf{X}_{i, \ast}; \hat{\bbeta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}. +\frac{1}{n} \sum_{i = 1}^n \log\{L[Y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}. \end{align*} The quantity above is called the *cross-validated log-likelihood*. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. @@ -1110,7 +1242,7 @@ The procedure is straightforwardly adopted to $k$-fold cross-validation, a diffe In the LOOCV procedure above resampling can be avoided when the prediction performance is measured by Allen's PRESS (Predicted Residual Error Sum of Squares) statistic \citep{Alle1974}. For then, the LOOCV prediction performance can be expressed analytically in terms of the known quantities derived from the design matrix and response (as pointed out but not detailed in \citealt{Golu1979}). Define the optimal penalty parameter to minimize Allen's PRESS statistic: \begin{align*} -\lambda_{\mbox{{\tiny opt}}} = \arg \min_{\lambda} \frac{1}{n} \sum_{i=1}^n [Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}_{-i}(\lambda)]^2. +\lambda_{\mbox{{\tiny opt}}} = \arg \min_{\lambda} \frac{1}{n} \sum_{i=1}^n [Y_i - \mathbf{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)]^2. \end{align*} To derive an analytic expression for the right-hand side first rewrite $(\mathbf{X}_{- i, \ast}^{\top} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1}$ by means of the Woodbury identity as: @@ -1130,7 +1262,7 @@ rewrite $(\mathbf{X}_{- i, \ast}^{\top} \mathbf{X}_{- i, \ast} + \lambda \mathbf with $\mathbf{H}_{ii}(\lambda) = \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top}$. Furthermore, $\mathbf{X}_{-i}^{\top} \mathbf{Y}_{-i} = \mathbf{X}^{\top} \mathbf{Y} - \mathbf{X}_{i, \ast}^{\top} Y_i$. Substitute both in the leave-one-out ridge regression estimator and manipulate: \begin{align*} -\hat{\bbeta}_{- i}(\lambda) & = (\mathbf{X}_{- i, \ast}^{\top} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{- i, \ast}^{\top} \mathbf{Y}_{- i} +\hat{\beta}_{- i}(\lambda) & = (\mathbf{X}_{- i, \ast}^{\top} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{- i, \ast}^{\top} \mathbf{Y}_{- i} \\ & = \{(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} + (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} @@ -1148,29 +1280,29 @@ Furthermore, $\mathbf{X}_{-i}^{\top} \mathbf{Y}_{-i} = \mathbf{X}^{\top} \mathbf \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} Y_i \\ -& = \hat{\bbeta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ 1 - \mathbf{H}_{ii}(\lambda)] Y_i +& = \hat{\beta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ 1 - \mathbf{H}_{ii}(\lambda)] Y_i \\ -& & + (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} \hat{\bbeta}(\lambda) +& & + (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) \\ & & - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{H}_{ii} (\lambda) Y_i \\ -& = \hat{\bbeta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \{ [ 1 - \mathbf{H}_{ii}(\lambda)] Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}(\lambda) + \mathbf{H}_{ii}(\lambda) Y_i \} +& = \hat{\beta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \{ [ 1 - \mathbf{H}_{ii}(\lambda)] Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) + \mathbf{H}_{ii}(\lambda) Y_i \} \\ -& = \hat{\bbeta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}(\lambda) ]. +& = \hat{\beta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) ]. \end{align*} The latter enables the reformulation of the prediction error as: \begin{align*} -Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}_{-i}(\lambda) & = Y_i - \mathbf{X}_{i, \ast} \{ \hat{\bbeta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}(\lambda)] \} +Y_i - \mathbf{X}_{i, \ast} \hat{\beta}_{-i}(\lambda) & = Y_i - \mathbf{X}_{i, \ast} \{ \hat{\beta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda)] \} \\ -& = Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}(\lambda) + \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}(\lambda) ] +& = Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) + \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) ] \\ -& = Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}(\lambda) + \mathbf{H}_{ii} (\lambda)[ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}(\lambda) ] +& = Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) + \mathbf{H}_{ii} (\lambda)[ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) ] \\ -& = [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast}^{\top} \hat{\bbeta}(\lambda) ], +& = [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast}^{\top} \hat{\beta}(\lambda) ], \end{align*} which in turn results in the re-expression of Allen's PRESS statistic: \begin{align*} -\lambda_{\mbox{{\tiny opt}}} & = \arg \min_{\lambda} \frac{1}{n} \sum_{i=1}^n [Y_i - \mathbf{X}_{i, \ast} \hat{\bbeta}_{-i}(\lambda)]^2 +\lambda_{\mbox{{\tiny opt}}} & = \arg \min_{\lambda} \frac{1}{n} \sum_{i=1}^n [Y_i - \mathbf{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)]^2 \, \, \, = \, \, \, \arg \min_{\lambda} \tfrac{1}{n} \| \mathbf{B}(\lambda) [\mathbf{I}_{nn} - \mathbf{H}(\lambda)] \mathbf{Y} \|_ F^2, \end{align*} where $\mathbf{B}(\lambda)$ is diagonal with $[\mathbf{B}(\lambda)]_{ii} = [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1}$. Hence, the prediction performance for a given $\lambda$ can be assessed directly from the ridge hat matrix and the response vector without the recalculation of the $n$ leave-one-out ridge estimators. Computationally, this is a considerable gain. @@ -1184,9 +1316,9 @@ Simulations are presented that illustrate properties of the ridge estimator not ===== Role of the variance of the covariates} label{ridge:covariateVariances ===== In many applications of high-dimensional data the covariates are standardized prior to the execution of the ridge regression. Before we discuss whether this is appropriate, we first illustrate the effect of ridge penalization on covariates with distinct variances using simulated data. -The simulation involves one response to be (ridge) regressed on fifty covariates. Data (with $n=1000$) for the covariates, denoted $\mathbf{X}$, are drawn from a multivariate normal distribution: $\mathbf{X} \sim \mathcal{N}(\mathbf{0}_{50}, \mathbf{\Sigma})$ with $\mathbf{\Sigma}$ diagonal and $(\mathbf{\Sigma})_{jj} = j / 10$. From this the response is generated through $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsilon$ with $\bbeta = \mathbf{1}_{50}$ and $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_{50}, \mathbf{I}_{50 \times 50})$. +The simulation involves one response to be (ridge) regressed on fifty covariates. Data (with $n=1000$) for the covariates, denoted $\mathbf{X}$, are drawn from a multivariate normal distribution: $\mathbf{X} \sim \mathcal{N}(\mathbf{0}_{50}, \mathbf{\Sigma})$ with $\mathbf{\Sigma}$ diagonal and $(\mathbf{\Sigma})_{jj} = j / 10$. From this the response is generated through $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$ with $\beta = \mathbf{1}_{50}$ and $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_{50}, \mathbf{I}_{50 \times 50})$. -With the simulated data at hand the ridge regression estimates of $\bbeta$ are evaluated for a large grid of the penalty parameter $\lambda$. The resulting ridge regularization paths of the regression coefficients are plotted (Figure ref{fig.effectOfRidge_effectOfVariances}). All paths start ($\lambda=0$) close to one and vanish as $\lambda \rightarrow \infty$. However, ridge regularization paths of regression coefficients corresponding to covariates with a large variance dominate those with a low variance. +With the simulated data at hand the ridge regression estimates of $\beta$ are evaluated for a large grid of the penalty parameter $\lambda$. The resulting ridge regularization paths of the regression coefficients are plotted (Figure ref{fig.effectOfRidge_effectOfVariances}). All paths start ($\lambda=0$) close to one and vanish as $\lambda \rightarrow \infty$. However, ridge regularization paths of regression coefficients corresponding to covariates with a large variance dominate those with a low variance. # original latex figure with scale=0.45, angle=0 @@ -1199,15 +1331,15 @@ FIGURE: [covariatesWithDifferentVariance.eps, width=400 frac=1.0] Top panel: Rid Ridge regression's preference of covariates with a large variance can intuitively be understood as follows. First note that the ridge regression estimator now can be written as: \begin{align*} -\bbeta (\lambda) & = [ \mbox{Var}(\mathbf{X}) + \lambda \mathbf{I}_{50 \times 50}]^{-1} \mbox{Cov}(\mathbf{X}, \mathbf{Y}) +\beta (\lambda) & = [ \mbox{Var}(\mathbf{X}) + \lambda \mathbf{I}_{50 \times 50}]^{-1} \mbox{Cov}(\mathbf{X}, \mathbf{Y}) \\ & = ( \SSigma + \lambda \mathbf{I}_{50 \times 50})^{-1} \SSigma [ \mbox{Var}(\mathbf{X}) ]^{-1} \mbox{Cov}(\mathbf{X}, \mathbf{Y}) \\ -& = ( \SSigma + \lambda \mathbf{I}_{50 \times 50})^{-1} \SSigma \bbeta. +& = ( \SSigma + \lambda \mathbf{I}_{50 \times 50})^{-1} \SSigma \beta. \end{align*} Plug in the employed parametrization of $\mathbf{\Sigma}$, which gives: \begin{align*} -[\bbeta (\lambda)]_j & = \frac{j}{j + 50 \lambda} \, (\bbeta)_j. +[\beta (\lambda)]_j & = \frac{j}{j + 50 \lambda} \, (\beta)_j. \end{align*} Hence, the larger the covariate's variance (corresponding to the larger $j$), the larger its ridge regression coefficient estimate. Ridge regression thus prefers (among a set of covariates with comparable effect sizes) those with larger variances. @@ -1220,18 +1352,18 @@ Should one thus standardize the covariates prior to ridge regression analysis? Among the considerations to decide on standardization of the covariates, one should also include the fact that ridge estimates prior and posterior to scaling do not simply differ by a factor. To see this assume that the covariates have been centered. Scaling of the covariates amounts to post-multiplication of the design matrix by a $(p \times p)$-dimensional diagonal matrix $\mathbf{A}$ with the reciprocals of the covariates' scale estimates on its diagonal \citep{Sard2008}. Hence, the ridge estimator (for the rescaled data) is then given by: \begin{align*} -\min_{\bbeta} \| \mathbf{Y} - \mathbf{X} \mathbf{A} \bbeta \|_2^2 + \lambda \| \bbeta \|_ 2^2. +\min_{\beta} \| \mathbf{Y} - \mathbf{X} \mathbf{A} \beta \|_2^2 + \lambda \| \beta \|_ 2^2. \end{align*} -Apply the change-of-variable $\ggamma = \mathbf{A} \bbeta$ and obtain: +Apply the change-of-variable $\ggamma = \mathbf{A} \beta$ and obtain: \begin{align*} -\min_{\ggamma} \| \mathbf{Y} - \mathbf{X} \gamma \|_2^2 + \lambda \| \mathbf{A}^{-1} \ggamma \|_ 2^2 & = \min_{\bbeta} \| \mathbf{Y} - \mathbf{X} \gamma \|_2^2 + \sum_{j=1}^p \lambda [(\mathbf{A})_{jj}]^{-2} \gamma_j^2. +\min_{\ggamma} \| \mathbf{Y} - \mathbf{X} \gamma \|_2^2 + \lambda \| \mathbf{A}^{-1} \ggamma \|_ 2^2 & = \min_{\beta} \| \mathbf{Y} - \mathbf{X} \gamma \|_2^2 + \sum_{j=1}^p \lambda [(\mathbf{A})_{jj}]^{-2} \gamma_j^2. \end{align*} Effectively, the scaling is equivalent to covariate-wise penalization. The `scaled' ridge estimator may then be derived along the same lines as before in Section ref{sect.constrainedEstimation}: \begin{align*} -\hat{\bbeta}^{\mbox{{\tiny (scaled)}}} (\lambda) & = \mathbf{A}^{-1} \hat{\ggamma} (\lambda) +\hat{\beta}^{\mbox{{\tiny (scaled)}}} (\lambda) & = \mathbf{A}^{-1} \hat{\ggamma} (\lambda) \, \, \, = \, \, \, \mathbf{A}^{-1} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{A}^{-2})^{-1} \mathbf{X}^{\top} \mathbf{Y}. \end{align*} -In general, this is unequal to the ridge estimator without the rescaling of the columns of the design matrix. Moreover, it should be clear that $\hat{\bbeta}^{\mbox{{\tiny (scaled)}}} (\lambda) \not= \mathbf{A} \hat{\bbeta}(\lambda)$. +In general, this is unequal to the ridge estimator without the rescaling of the columns of the design matrix. Moreover, it should be clear that $\hat{\beta}^{\mbox{{\tiny (scaled)}}} (\lambda) \not= \mathbf{A} \hat{\beta}(\lambda)$. ===== Ridge regression and collinearity} label{sect:collinearCovariates ===== Initially, ridge regression was motivated as an ad-hoc fix of (super)-collinear covariates in order to obtain a well-defined estimator. We now study the effect of this ad-hoc fix on the regression coefficient estimates of collinear covariates. In particular, their ridge regularization paths are contrasted to those of `non-collinear' covariates. @@ -1261,7 +1393,7 @@ with \begin{align*} \mathbf{\Sigma}_{kk} & = \frac{k-1}{5} \, \mathbf{1}_{10 \times 10} + \frac{6-k}{5} \, \mathbf{I}_{10 \times 10}. \end{align*} -The data of the response variable $\mathbf{Y}$ are then obtained through: $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsilon$, with $\vvarepsilon \sim \mathcal{N}( \mathbf{0}_{n}, \mathbf{I}_{nn})$ and $\bbeta = \mathbf{1}_{50}$. Hence, all covariates contribute equally to the response. Would the columns of $\mathbf{X}$ be orthogonal, little difference in the ridge estimates of the regression coefficients is expected. +The data of the response variable $\mathbf{Y}$ are then obtained through: $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$, with $\vvarepsilon \sim \mathcal{N}( \mathbf{0}_{n}, \mathbf{I}_{nn})$ and $\beta = \mathbf{1}_{50}$. Hence, all covariates contribute equally to the response. Would the columns of $\mathbf{X}$ be orthogonal, little difference in the ridge estimates of the regression coefficients is expected. The results of this simulation study with sample size $n=1000$ are presented in Figure ref{fig.ridgeEstimates_correlatedCovariates}. All 50 regularization paths start close to one as $\lambda$ is small and converge to zero as $\lambda \rightarrow \infty$. But the paths of covariates of the same block of the covariance matrix $\mathbf{\Sigma}$ quickly group, with those corresponding to a block with larger off-diagonal elements above those with smaller ones. Thus, ridge regression prefers (i.e. shrinks less) coefficient estimates of strongly positively correlated covariates. @@ -1346,9 +1478,9 @@ For large enough $\lambda$ When $\mbox{Var}(U) \gg \mbox{Var}(V)$ and $\beta_1 \approx \beta_2$, the ridge estimate of $\gamma_v$ vanishes for large $\lambda$. Hence, ridge regression prefers positively covariates with similar effect sizes. -This phenomenon too can be explained geometrically. For the illustration consider ridge estimation with $\lambda=1$ of the linear model $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsilon$ with $\bbeta = (3, 3)^{\top}$, $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_2, \mathbf{I}_{22})$ and the columns of $\mathbf{X}$ strongly and positively collinear. The level sets of the sum-of-squares loss, $\| \mathbf{Y} - \mathbf{X} \bbeta \|_2^2$, are plotted in the right panel of Figure ref{fig.ridgeEstimates_correlatedCovariates}. Recall that the ridge estimate is found by looking for the smallest loss level set that hits the ridge contraint. The sought-for estimate is then the point of intersection between this level set and the constraint, and - for the case at hand - is on the $x=y$-line. This is no different from the case with orthogonal $\mathbf{X}$ columns. Yet their estimates differ, even though the same $\lambda$ is applied. The difference is to due to fact that the radius of the ridge constraint depends on $\lambda$, $\mathbf{X}$ and $\mathbf{Y}$. This is immediate from the fact that the radius of the constraint equals $\| \hat{\bbeta}(\lambda) \|_2^2$ (see Section ref{sect.constrainedEstimation}). To study the effect of $\mathbf{X}$ on the radius, we remove its dependence on $\mathbf{Y}$ by considering its expectation, which is: +This phenomenon too can be explained geometrically. For the illustration consider ridge estimation with $\lambda=1$ of the linear model $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$ with $\beta = (3, 3)^{\top}$, $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_2, \mathbf{I}_{22})$ and the columns of $\mathbf{X}$ strongly and positively collinear. The level sets of the sum-of-squares loss, $\| \mathbf{Y} - \mathbf{X} \beta \|_2^2$, are plotted in the right panel of Figure ref{fig.ridgeEstimates_correlatedCovariates}. Recall that the ridge estimate is found by looking for the smallest loss level set that hits the ridge contraint. The sought-for estimate is then the point of intersection between this level set and the constraint, and - for the case at hand - is on the $x=y$-line. This is no different from the case with orthogonal $\mathbf{X}$ columns. Yet their estimates differ, even though the same $\lambda$ is applied. The difference is to due to fact that the radius of the ridge constraint depends on $\lambda$, $\mathbf{X}$ and $\mathbf{Y}$. This is immediate from the fact that the radius of the constraint equals $\| \hat{\beta}(\lambda) \|_2^2$ (see Section ref{sect.constrainedEstimation}). To study the effect of $\mathbf{X}$ on the radius, we remove its dependence on $\mathbf{Y}$ by considering its expectation, which is: \begin{align*} -\mathbb{E}[ \| \hat{\bbeta}(\lambda) \|_2^2 ] & = \mathbb{E} \{ [(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \hat{\bbeta}]^{\top} \, (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \hat{\bbeta} \} \nonumber % \, \, \, = \, \, \, \mathbb{E} ( \hat{\bbeta}^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \hat{\bbeta} ) \nonumber +\mathbb{E}[ \| \hat{\beta}(\lambda) \|_2^2 ] & = \mathbb{E} \{ [(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \hat{\beta}]^{\top} \, (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \hat{\beta} \} \nonumber % \, \, \, = \, \, \, \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \hat{\beta} ) \nonumber \\ # & = \mathbb{E} [ \mathbf{Y}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} ] \nonumber # \\ @@ -1358,10 +1490,10 @@ This phenomenon too can be explained geometrically. For the illustration conside (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-2} \mathbf{X}^{\top} \mathbf{Y} ] \nonumber \\ & = \sigma^2 \, \mbox{tr}\big\{ \mathbf{X} -(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-2} \mathbf{X}^{\top} \big\} + \bbeta^{\top} \mathbf{X}^{ \top} \mathbf{X} -(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-2} \mathbf{X}^{\top} \, \mathbf{X} \bbeta. % label{form.expectationPenalty} +(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-2} \mathbf{X}^{\top} \big\} + \beta^{\top} \mathbf{X}^{ \top} \mathbf{X} +(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-2} \mathbf{X}^{\top} \, \mathbf{X} \beta. % label{form.expectationPenalty} \end{align*} -In the last step we have used $\mathbf{Y} \sim \mathcal{N}( \mathbf{X} \bbeta, \sigma^2 \mathbf{I}_{pp})$ and the expectation of the quadratic form of a multivariate random variable $\vvarepsilon \sim \mathcal{N}(\mmu_{\varepsilon}, \SSigma_{\varepsilon})$ is $\mathbb{E} ( \vvarepsilon^{\top} \, \LLambda \, \vvarepsilon) = \mbox{tr} ( \LLambda \, \SSigma_{\varepsilon}) + \mmu_{\varepsilon}^{\top} \, \LLambda \, \mmu_{\varepsilon}$ (cf. \citealp{Math1992}). The expression for the expectation of the radius of the ridge constraint can now be evaluated for the orthogonal $\mathbf{X}$ and the strongly, positively collinear $\mathbf{X}$. It turns out that the latter is larger than the former. This results in a larger ridge constraint. For the larger ridge constraint there is a smaller level set that hits it first. The point of intersection, still on the $x=y$-line, is now thus closer to $\bbeta$ and further from the origin (cf. right panel of Figure ref{fig.ridgeEstimates_correlatedCovariates}). The resulting estimate is thus larger than that from the orthogonal case. +In the last step we have used $\mathbf{Y} \sim \mathcal{N}( \mathbf{X} \beta, \sigma^2 \mathbf{I}_{pp})$ and the expectation of the quadratic form of a multivariate random variable $\vvarepsilon \sim \mathcal{N}(\mmu_{\varepsilon}, \SSigma_{\varepsilon})$ is $\mathbb{E} ( \vvarepsilon^{\top} \, \LLambda \, \vvarepsilon) = \mbox{tr} ( \LLambda \, \SSigma_{\varepsilon}) + \mmu_{\varepsilon}^{\top} \, \LLambda \, \mmu_{\varepsilon}$ (cf. \citealp{Math1992}). The expression for the expectation of the radius of the ridge constraint can now be evaluated for the orthogonal $\mathbf{X}$ and the strongly, positively collinear $\mathbf{X}$. It turns out that the latter is larger than the former. This results in a larger ridge constraint. For the larger ridge constraint there is a smaller level set that hits it first. The point of intersection, still on the $x=y$-line, is now thus closer to $\beta$ and further from the origin (cf. right panel of Figure ref{fig.ridgeEstimates_correlatedCovariates}). The resulting estimate is thus larger than that from the orthogonal case. The above needs some attenuation. Among others it depends on: *i)* the number of covariates in each block, *ii)* the size of the effects, i.e. regression coefficients of each covariate, and *iii)* the degree of collinearity. Possibly, there are more factors influencing the behaviour of the ridge estimator presented in this subsection. @@ -1388,7 +1520,7 @@ We here assess whether the MCM7 down-regulation by microRNAs can be observed in \lstinputlisting{prostate_ridgeAnalysis.r} -With this prostate data set at hand we now investigate whether MCM7 is regulated by microRNAs. Hereto we fit a linear regression model regressing the expression levels of MCM7 onto those of the microRNAs. As the number of microRNAs exceeds the number of samples, ordinary least squares fails and we resort to the ridge estimator of the regression coefficients. First, an informed choice of the penalty parameter is made through maximization of the LOOCV log-likelihood, resulting in $\lambda_{\mbox{{\tiny opt}}} = 1812.826$. Having decided on the value of the to-be-employed penalty parameter, the ridge regression estimator can now readily be evaluated. The thus fitted model allows for the evaluation of microRNA-regulation of MCM7. E.g., by the proportion of variation of the MCM7 expression levels by the microRNAs as expressed in coefficient of determination: $R^2 = 0.4492$. Alternatively, but closely related, observed expression levels may be related to the linear predictor of the MCM7 expression levels: $\hat{\mathbf{Y}}(\lambda_{\mbox{{\tiny opt}}}) = \mathbf{X} \hat{\bbeta} (\lambda_{\mbox{{\tiny opt}}})$. The Spearman correlation of response and predictor equals 0.6295. A visual inspection is provided by the left panel of Figure ref{fig.RidgeProstateExample}. Note the difference in scale of the $x$- and $y$-axes. This is due to the fact that the regression coefficients have been estimated in penalized fashion, consequently shrinking estimates of the regression coefficients towards zero leading to small estimates and in turn compressing the range of the linear prediction. The above suggests there is indeed association between the microRNA expression levels and those of MCM7. +With this prostate data set at hand we now investigate whether MCM7 is regulated by microRNAs. Hereto we fit a linear regression model regressing the expression levels of MCM7 onto those of the microRNAs. As the number of microRNAs exceeds the number of samples, ordinary least squares fails and we resort to the ridge estimator of the regression coefficients. First, an informed choice of the penalty parameter is made through maximization of the LOOCV log-likelihood, resulting in $\lambda_{\mbox{{\tiny opt}}} = 1812.826$. Having decided on the value of the to-be-employed penalty parameter, the ridge regression estimator can now readily be evaluated. The thus fitted model allows for the evaluation of microRNA-regulation of MCM7. E.g., by the proportion of variation of the MCM7 expression levels by the microRNAs as expressed in coefficient of determination: $R^2 = 0.4492$. Alternatively, but closely related, observed expression levels may be related to the linear predictor of the MCM7 expression levels: $\hat{\mathbf{Y}}(\lambda_{\mbox{{\tiny opt}}}) = \mathbf{X} \hat{\beta} (\lambda_{\mbox{{\tiny opt}}})$. The Spearman correlation of response and predictor equals 0.6295. A visual inspection is provided by the left panel of Figure ref{fig.RidgeProstateExample}. Note the difference in scale of the $x$- and $y$-axes. This is due to the fact that the regression coefficients have been estimated in penalized fashion, consequently shrinking estimates of the regression coefficients towards zero leading to small estimates and in turn compressing the range of the linear prediction. The above suggests there is indeed association between the microRNA expression levels and those of MCM7. @@ -1402,7 +1534,7 @@ The overall aim of this illustration was to assess whether microRNA-regulation o The implementation of ridge regression in the {\tt penalized}-package offers the possibility to fully obey the dogma on negative regulation of mRNA expression by microRNAs. This requires all regression coefficients to be negative. Incorporation of the requirement into the ridge estimation augments the constrained estimation problem with an additional constraint: \begin{align*} % label{form.constrEstProblemRidge} -\hat{\bbeta}(\lambda) & = \arg \min_{\| \bbeta \|_2^2 \leq c (\lambda) \atop \beta_j \leq 0 \, \mbox{{\tiny for all $j$}}} \| \mathbf{Y} - \mathbf{X} \, \bbeta \|^2_2. +\hat{\beta}(\lambda) & = \arg \min_{\| \beta \|_2^2 \leq c (\lambda) \atop \beta_j \leq 0 \, \mbox{{\tiny for all $j$}}} \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2. \end{align*} With the additional non-positivity constraint on the parameters, there is no explicit solution for the estimator. The ridge estimate of the regression parameters is then found by numerical optimization using e.g. the Newton-Raphson algorithm or a gradient descent approach. The next listing gives the R-code for ridge estimation with the non-positivity constraint of the linear regression model. @@ -1466,7 +1598,7 @@ Show that the ridge regression estimates can be obtained by ordinary least squar \begin{question} label{question.ridgeResidualsProjection} \mbox{ } \\ -The coefficients $\bbeta$ of a linear regression model, $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsilon$, are estimated by $\hat{\bbeta} = (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}$. The associated fitted values then given by $\widehat{\mathbf{Y}} = \mathbf{X} \, \hat{\bbeta} = \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} = \mathbf{H} \mathbf{Y}$, where $\mathbf{H} =\mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top}$ referred to as the hat matrix. The matrix $\mathbf{P}$ is a projection matrix and satisfies $\mathbf{H} = \mathbf{H}^ 2$. Hence, linear regression projects the response $\mathbf{Y}$ onto the vector space spanned by the columns of $\mathbf{Y}$. Consequently, the residuals $\hat{\vvarepsilon}$ and $\hat{\mathbf{Y}}$ are orthogonal. Now consider the ridge estimator of the regression coefficients: $\hat{\bbeta}(\lambda) = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}$. Let $\hat{\mathbf{Y}}(\lambda) = \mathbf{X} \hat{\bbeta}(\lambda)$ be the vector of associated fitted values. +The coefficients $\beta$ of a linear regression model, $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$, are estimated by $\hat{\beta} = (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}$. The associated fitted values then given by $\widehat{\mathbf{Y}} = \mathbf{X} \, \hat{\beta} = \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} = \mathbf{H} \mathbf{Y}$, where $\mathbf{H} =\mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top}$ referred to as the hat matrix. The matrix $\mathbf{P}$ is a projection matrix and satisfies $\mathbf{H} = \mathbf{H}^ 2$. Hence, linear regression projects the response $\mathbf{Y}$ onto the vector space spanned by the columns of $\mathbf{Y}$. Consequently, the residuals $\hat{\vvarepsilon}$ and $\hat{\mathbf{Y}}$ are orthogonal. Now consider the ridge estimator of the regression coefficients: $\hat{\beta}(\lambda) = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}$. Let $\hat{\mathbf{Y}}(\lambda) = \mathbf{X} \hat{\beta}(\lambda)$ be the vector of associated fitted values. \begin{compactitem} \item[*a)*] Show that the matrix $\mathbf{H}(\lambda) = \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top}$, associated with ridge regression, is not a projection matrix (for any $\lambda > 0$). @@ -1480,7 +1612,7 @@ The coefficients $\bbeta$ of a linear regression model, $\mathbf{Y} = \mathbf{X} \begin{question} label{question.MSEofLinearPredictor} \mbox{ } \\ -Recall that there exists $\lambda > 0$ such that $MSE(\hat{\bbeta}) > MSE[\hat{\bbeta}(\lambda)]$. Verify that this carries over to the linear predictor. That is, there exists a $\lambda > 0$ such that$MSE(\widehat{\mathbf{Y}}) = MSE(\mathbf{X} \hat{\bbeta}) > MSE[\mathbf{X}\hat{\bbeta}(\lambda)]$. +Recall that there exists $\lambda > 0$ such that $MSE(\hat{\beta}) > MSE[\hat{\beta}(\lambda)]$. Verify that this carries over to the linear predictor. That is, there exists a $\lambda > 0$ such that$MSE(\widehat{\mathbf{Y}}) = MSE(\mathbf{X} \hat{\beta}) > MSE[\mathbf{X}\hat{\beta}(\lambda)]$. \end{question} \begin{question} \mbox{ } @@ -1506,10 +1638,10 @@ with $\varepsilon_i \sim \mathcal{N}(0, \sigma^2)$. This model fitted by means o \\ The expression levels of the $j$-the gene are explained by a linear regression model in terms of those of all other genes. Consider the following two ridge regression estimators of the regression parameter of this model, defined as: \begin{align*} -\arg \max_\bbeta \sum_{i=1}^n (Y_{i,j} - \mathbf{Y}_{i,\setminus j} \bbeta_j)^2 + \lambda \| \bbeta_j \|_ 2^2 +\arg \max_\beta \sum_{i=1}^n (Y_{i,j} - \mathbf{Y}_{i,\setminus j} \beta_j)^2 + \lambda \| \beta_j \|_ 2^2 \quad \mbox{and} \quad -\arg \max_\bbeta \sum_{i=1}^n (Y_{i,j} - \mathbf{Y}_{i,\setminus j} \bbeta_j)^2 + n \lambda \| \bbeta_j \|_ 2^2. +\arg \max_\beta \sum_{i=1}^n (Y_{i,j} - \mathbf{Y}_{i,\setminus j} \beta_j)^2 + n \lambda \| \beta_j \|_ 2^2. \end{align*} Which do you prefer? Motivate. \end{question} @@ -1520,30 +1652,30 @@ Which do you prefer? Motivate. ========= Generalizing ridge regression ========= label{chap:genRidge} # ======= Generalized ridge regression ======= -The expos\'{e} on ridge regression may be generalized in many ways. Among others different generalized linear models may be considered (confer Section ref{sect.ridgeLogistic}). In this section we stick to the linear regression model $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsilon$ with the usual assumptions, but fit it in weighted fashion and generalize the common, spherical penalty. The loss function corresponding to this scenario is: +The expos\'{e} on ridge regression may be generalized in many ways. Among others different generalized linear models may be considered (confer Section ref{sect.ridgeLogistic}). In this section we stick to the linear regression model $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$ with the usual assumptions, but fit it in weighted fashion and generalize the common, spherical penalty. The loss function corresponding to this scenario is: !bt !bt \begin{align} label{form:generalizedRidgeLoss} -(\mathbf{Y} - \mathbf{X} \bbeta)^{\top} \mathbf{W} (\mathbf{Y} - \mathbf{X} \bbeta) + (\bbeta - \bbeta_0)^{\top} \mathbf{\Delta} -(\bbeta - \bbeta_0), +(\mathbf{Y} - \mathbf{X} \beta)^{\top} \mathbf{W} (\mathbf{Y} - \mathbf{X} \beta) + (\beta - \beta_0)^{\top} \mathbf{\Delta} +(\beta - \beta_0), \end{align} !et !et -which comprises a weighted least squares criterion and a generalized ridge penalty. In this $\mathbf{W}$ is a $(n \times n)$-dimensional, diagonal matrix with $(\mathbf{W})_{ii} \in [0,1]$ representing the weight of the $i$-th observation. The penalty is now a quadratic form with penalty parameter $\mathbf{\Delta}$, a $(p \times p)$-dimensional, positive definite, symmetric matrix. When $\mathbf{\Delta} = \lambda \mathbf{I}_{pp}$, one regains the spherical penalty of `regular ridge regression'. This penalty shrinks each element of the regression parameter $\bbeta$ equally along the unit vectors $\mathbf{e}_j$. Generalizing $\mathbf{\Delta}$ to the class of symmetric, positive definite matrices $\mathcal{S}_{++}$ allows for *i)* different penalization per regression parameter, and *ii)* joint (or correlated) shrinkage among the elements of $\bbeta$. The penalty parameter $\mathbf{\Delta}$ determines the speed and direction of shrinkage. The $p$-dimensional column vector $\bbeta_0$ is a user-specified, non-random target towards which $\bbeta$ is shrunken as the penalty parameter increases. When recasting generalized ridge estimation as a constrained estimation problem, the implications of the penalty may be visualized (Figure ref{fig:generalizedRidgeIllustration}, left panel). The generalized ridge penalty is a quadratic form centered around $\bbeta_0$. In Figure ref{fig:generalizedRidgeIllustration} the parameter constraint clearly is ellipsoidal (and not spherical). Moreover, the center of this ellipsoid is not at zero. +which comprises a weighted least squares criterion and a generalized ridge penalty. In this $\mathbf{W}$ is a $(n \times n)$-dimensional, diagonal matrix with $(\mathbf{W})_{ii} \in [0,1]$ representing the weight of the $i$-th observation. The penalty is now a quadratic form with penalty parameter $\mathbf{\Delta}$, a $(p \times p)$-dimensional, positive definite, symmetric matrix. When $\mathbf{\Delta} = \lambda \mathbf{I}_{pp}$, one regains the spherical penalty of `regular ridge regression'. This penalty shrinks each element of the regression parameter $\beta$ equally along the unit vectors $\mathbf{e}_j$. Generalizing $\mathbf{\Delta}$ to the class of symmetric, positive definite matrices $\mathcal{S}_{++}$ allows for *i)* different penalization per regression parameter, and *ii)* joint (or correlated) shrinkage among the elements of $\beta$. The penalty parameter $\mathbf{\Delta}$ determines the speed and direction of shrinkage. The $p$-dimensional column vector $\beta_0$ is a user-specified, non-random target towards which $\beta$ is shrunken as the penalty parameter increases. When recasting generalized ridge estimation as a constrained estimation problem, the implications of the penalty may be visualized (Figure ref{fig:generalizedRidgeIllustration}, left panel). The generalized ridge penalty is a quadratic form centered around $\beta_0$. In Figure ref{fig:generalizedRidgeIllustration} the parameter constraint clearly is ellipsoidal (and not spherical). Moreover, the center of this ellipsoid is not at zero. # original latex figure with scale=0.40, angle=0 FIGURE: [generalizedRidgeIllustration_penalty.eps, width=400 frac=1.0] Left panel: the contours of the likelihood (grey solid ellipsoids) and the parameter constraint implied by the generalized penalty (black dashed ellipsoid. Right panel: generalized (fat coloured lines) and `regular' (thin coloured lines) regularization paths of four regression coefficients. The dotted grey (straight) lines indicated the targets towards the generalized ridge penalty shrinks regression coefficient estimates.} label{fig:generalizedRidgeIllustration -The addition of the generalized ridge penalty to the sum-of-squares ensures the existence of a unique regression estimator in the face of super-collinearity. The generalized penalty is a non-degenerated quadratic form in $\bbeta$ due to the positive definiteness of the matrix $\mathbf{\Delta}$. As it is non-degenerate, it is strictly convex. Consequently, the generalized ridge regression loss function (ref{form:generalizedRidgeLoss}), being the sum of a convex and strictly convex function, is also strictly convex. This warrants the existence of a unique global minimum and, thereby, a unique estimator. +The addition of the generalized ridge penalty to the sum-of-squares ensures the existence of a unique regression estimator in the face of super-collinearity. The generalized penalty is a non-degenerated quadratic form in $\beta$ due to the positive definiteness of the matrix $\mathbf{\Delta}$. As it is non-degenerate, it is strictly convex. Consequently, the generalized ridge regression loss function (ref{form:generalizedRidgeLoss}), being the sum of a convex and strictly convex function, is also strictly convex. This warrants the existence of a unique global minimum and, thereby, a unique estimator. -Like for the `regular' ridge loss function (ref{form.ridgeLossFunction}), there is an explicit expression for the optimum of the generalized ridge loss function (ref{form:generalizedRidgeLoss}). To see this, obtain the estimating equation of $\bbeta$ through equating its derivative with respect to $\bbeta$ to zero: +Like for the `regular' ridge loss function (ref{form.ridgeLossFunction}), there is an explicit expression for the optimum of the generalized ridge loss function (ref{form:generalizedRidgeLoss}). To see this, obtain the estimating equation of $\beta$ through equating its derivative with respect to $\beta$ to zero: \begin{align*} -2 \mathbf{X}^{\top} \mathbf{W} \mathbf{Y} - 2 \mathbf{X}^{\top} \mathbf{W} \mathbf{X} \bbeta - 2 \mathbf{\Delta} \bbeta + 2 \mathbf{\Delta} \bbeta_0 & = \mathbf{0}_{p}. +2 \mathbf{X}^{\top} \mathbf{W} \mathbf{Y} - 2 \mathbf{X}^{\top} \mathbf{W} \mathbf{X} \beta - 2 \mathbf{\Delta} \beta + 2 \mathbf{\Delta} \beta_0 & = \mathbf{0}_{p}. \end{align*} This is solved by: @@ -1551,29 +1683,29 @@ This is solved by: !bt \begin{align} -\hat{\bbeta}(\mathbf{\Delta}) & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} (\mathbf{X}^{\top} \mathbf{W} \mathbf{Y} + \mathbf{\Delta} \bbeta_0). +\hat{\beta}(\mathbf{\Delta}) & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} (\mathbf{X}^{\top} \mathbf{W} \mathbf{Y} + \mathbf{\Delta} \beta_0). \end{align} !et !et -Clearly, this reduces to the `regular' ridge estimator by setting $\mathbf{W} = \mathbf{I}_{nn}$, $\bbeta_0 = \mathbf{0}_{p}$, and $\mathbf{\Delta} = \lambda \mathbf{I}_{pp}$. The effects of the generalized ridge penalty on the estimates can be seen in the regularization paths of the estimates. Figure ref{fig:generalizedRidgeIllustration} (right panel) contains an example of the regularization paths for coefficients of a linear regression model with four explanatory variables. Most striking is the limiting behaviour of the estimates of $\beta_3$ and $\beta_4$ for large values of the penalty parameter $\lambda$: they convergence to a non-zero value (as was specified by a nonzero $\beta_0$). More subtle is the (temporary) convergence of the regularization paths of the estimates of $\beta_2$ and $\beta_3$. That of $\beta_2$ is pulled away from zero (its true value and approximately its unpenalized estimate) towards the estimate of $\beta_3$. In the regularization path of $\beta_3$ this can be observed in a delayed convergence to its nonzero target value (for comparison consider that of $\beta_4$). For reference the corresponding regularization paths of the `regular' ridge estimates (as thinner lines of the same colour) are included in Figure ref{fig:generalizedRidgeIllustration}. +Clearly, this reduces to the `regular' ridge estimator by setting $\mathbf{W} = \mathbf{I}_{nn}$, $\beta_0 = \mathbf{0}_{p}$, and $\mathbf{\Delta} = \lambda \mathbf{I}_{pp}$. The effects of the generalized ridge penalty on the estimates can be seen in the regularization paths of the estimates. Figure ref{fig:generalizedRidgeIllustration} (right panel) contains an example of the regularization paths for coefficients of a linear regression model with four explanatory variables. Most striking is the limiting behaviour of the estimates of $\beta_3$ and $\beta_4$ for large values of the penalty parameter $\lambda$: they convergence to a non-zero value (as was specified by a nonzero $\beta_0$). More subtle is the (temporary) convergence of the regularization paths of the estimates of $\beta_2$ and $\beta_3$. That of $\beta_2$ is pulled away from zero (its true value and approximately its unpenalized estimate) towards the estimate of $\beta_3$. In the regularization path of $\beta_3$ this can be observed in a delayed convergence to its nonzero target value (for comparison consider that of $\beta_4$). For reference the corresponding regularization paths of the `regular' ridge estimates (as thinner lines of the same colour) are included in Figure ref{fig:generalizedRidgeIllustration}. \begin{example} *Fused ridge estimation* label{example.gRidge2orthonormalDesign} \\ -An example of a generalized ridge penalty is the *fused ridge penalty*. Consider the standard linear model $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsilon$. The fused ridge estimator of $\bbeta$ then minimizes: +An example of a generalized ridge penalty is the *fused ridge penalty*. Consider the standard linear model $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$. The fused ridge estimator of $\beta$ then minimizes: !bt !bt \begin{align} label{form:fusedRidgeLoss} -\| \mathbf{Y} - \mathbf{X} \bbeta \|_2^2 + \lambda \sum_{j=2}^p \| \beta_{j} - \beta_{j-1} \|_2^2. +\| \mathbf{Y} - \mathbf{X} \beta \|_2^2 + \lambda \sum_{j=2}^p \| \beta_{j} - \beta_{j-1} \|_2^2. \end{align} !et !et The penalty in the loss function above can be written as a generalized ridge penalty: \begin{align*} -\lambda \sum_{j=2}^p \| \beta_{j} - \beta_{j-1} \|_2^2 & = \bbeta^{\top} +\lambda \sum_{j=2}^p \| \beta_{j} - \beta_{j-1} \|_2^2 & = \beta^{\top} \left( \begin{array}{rrrrrr} \lambda & -\lambda & 0 & \ldots & \ldots & 0 @@ -1603,36 +1735,36 @@ The penalty in the loss function above can be written as a generalized ridge pen \\ 0 & \ldots & \ldots & 0 & -\lambda & \lambda \end{array}\right) -\bbeta. +\beta. \end{align*} -The matrix $\mathbf{\Delta}$ employed above is semi-positive definite and therefore the loss function (ref{form:fusedRidgeLoss}) is not strictly convex. Hence, often a regular ridge penalty $\| \bbeta \|_2^2$ is added (with its own penalty parameter). +The matrix $\mathbf{\Delta}$ employed above is semi-positive definite and therefore the loss function (ref{form:fusedRidgeLoss}) is not strictly convex. Hence, often a regular ridge penalty $\| \beta \|_2^2$ is added (with its own penalty parameter). -To illustrate the effect of the fused ridge penalty on the estimation of the linear regression model $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsilon$, let $\beta_j = \phi_{0,1}(z_j)$ with $z_j =-30 + \tfrac{6}{50} j$ for $j=1, \ldots, 500$. Sample the elements of the design matrix $\mathbf{X}$ and those of the error vector $\vvarepsilon$ from the standard normal distribution, then form the response $\mathbf{Y}$ from the linear model. The regression parameter is estimated through fused ridge loss minimization with $\lambda=1000$. The estimate is shown in Figure ref{fig:fusedRidgeIllustration} (red line). For reference the figure includes the true $\bbeta$ (black line) and the `regular ridge' estimate with $\lambda=1$ (blue line). Clearly, the fused ridge estimate yields a nice smooth vector of $\bbeta$ estimates +To illustrate the effect of the fused ridge penalty on the estimation of the linear regression model $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$, let $\beta_j = \phi_{0,1}(z_j)$ with $z_j =-30 + \tfrac{6}{50} j$ for $j=1, \ldots, 500$. Sample the elements of the design matrix $\mathbf{X}$ and those of the error vector $\vvarepsilon$ from the standard normal distribution, then form the response $\mathbf{Y}$ from the linear model. The regression parameter is estimated through fused ridge loss minimization with $\lambda=1000$. The estimate is shown in Figure ref{fig:fusedRidgeIllustration} (red line). For reference the figure includes the true $\beta$ (black line) and the `regular ridge' estimate with $\lambda=1$ (blue line). Clearly, the fused ridge estimate yields a nice smooth vector of $\beta$ estimates \end{example} # original latex figure with scale=0.40, angle=0 -FIGURE: [fusedRidgeIllustration_simulation.eps, width=400 frac=1.0] Left panel: illustration of the fused ridge estimator (in simulation). The true parameter $\bbeta$ and its ridge and fused ridge estimates against their spatial order. Right panel: Ridge vs. fused ridge estimates of the DNA copy effect on KRAS expression levels. The dashed, grey vertical bar indicates the location of the KRAS gene. } label{fig:fusedRidgeIllustration +FIGURE: [fusedRidgeIllustration_simulation.eps, width=400 frac=1.0] Left panel: illustration of the fused ridge estimator (in simulation). The true parameter $\beta$ and its ridge and fused ridge estimates against their spatial order. Right panel: Ridge vs. fused ridge estimates of the DNA copy effect on KRAS expression levels. The dashed, grey vertical bar indicates the location of the KRAS gene. } label{fig:fusedRidgeIllustration ======= Moments ======= -The expectation and variance of $\hat{\bbeta}(\mathbf{\Delta})$ are obtained through application of the same matrix algebra and expectation and covariance rules used in the derivation of their counterparts of the `regular' ridge regression estimator. This leads to: +The expectation and variance of $\hat{\beta}(\mathbf{\Delta})$ are obtained through application of the same matrix algebra and expectation and covariance rules used in the derivation of their counterparts of the `regular' ridge regression estimator. This leads to: \begin{align*} -\mathbb{E}[\hat{\bbeta}(\mathbf{\Delta})] & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} \bbeta + \mathbf{\Delta} \bbeta_0), +\mathbb{E}[\hat{\beta}(\mathbf{\Delta})] & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} \beta + \mathbf{\Delta} \beta_0), \\ -\mbox{Var}[\hat{\bbeta}(\mathbf{\Delta})] & = \sigma^2 (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} \mathbf{X}^{\top} \mathbf{W}^2 \mathbf{X} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1}. +\mbox{Var}[\hat{\beta}(\mathbf{\Delta})] & = \sigma^2 (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} \mathbf{X}^{\top} \mathbf{W}^2 \mathbf{X} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1}. \end{align*} -From these expressions similar limiting behaviour as for the `regular' ridge regression case can be deduced. To this end let $\mathbf{V}_{\delta} \mathbf{D}_{\delta} \mathbf{V}_{\delta}^{\top}$ be the eigendecomposition of $\mathbf{\Delta}$ and $d_{\delta,j} = (\mathbf{D}_{\delta})_{jj}$. Furthermore, define (with some abuse of notation) $\lim_{\mathbf{\Delta} \rightarrow \infty}$ as the limit of all $d_{\delta,j}$ simultaneously tending to infinity. Then, $\lim_{\mathbf{\Delta} \rightarrow \infty} \mathbb{E}[\hat{\bbeta}(\mathbf{\Delta})] = \bbeta_0$ and $\lim_{\mathbf{\Delta} \rightarrow \infty} \mbox{Var}[\hat{\bbeta}(\mathbf{\Delta})] = \mathbf{0}_{pp}$. +From these expressions similar limiting behaviour as for the `regular' ridge regression case can be deduced. To this end let $\mathbf{V}_{\delta} \mathbf{D}_{\delta} \mathbf{V}_{\delta}^{\top}$ be the eigendecomposition of $\mathbf{\Delta}$ and $d_{\delta,j} = (\mathbf{D}_{\delta})_{jj}$. Furthermore, define (with some abuse of notation) $\lim_{\mathbf{\Delta} \rightarrow \infty}$ as the limit of all $d_{\delta,j}$ simultaneously tending to infinity. Then, $\lim_{\mathbf{\Delta} \rightarrow \infty} \mathbb{E}[\hat{\beta}(\mathbf{\Delta})] = \beta_0$ and $\lim_{\mathbf{\Delta} \rightarrow \infty} \mbox{Var}[\hat{\beta}(\mathbf{\Delta})] = \mathbf{0}_{pp}$. \begin{example} \mbox{ } label{example.gRidge2orthonormalDesign} \\ -Let $\mathbf{X}$ be an $(n \times p)$-dimensional, orthonormal design matrix. Contrast the regular and generalized ridge regression estimator, the latter with $\mathbf{W} = \mathbf{I}_{pp}$, $\bbeta_0 = \mathbf{0}_p$ and $\mathbf{\Delta} = \lambda \mathbf{R}$ where $\mathbf{R} = (1-\rho) \mathbf{I}_{pp} + \rho \mathbf{1}_{pp}$ for $\rho \in (-(p-1)^{-1}, 1)$. For $\rho =0$ the two estimators coincide. The variance of the generalized ridge regression estimator then is $\mbox{Var}[ \hat{\bbeta}(\mathbf{\Delta})] = (\mathbf{I}_{pp} + \mathbf{\Delta})^{-2}$. The efficiency of this estimator, measured by its generalized variance, is: +Let $\mathbf{X}$ be an $(n \times p)$-dimensional, orthonormal design matrix. Contrast the regular and generalized ridge regression estimator, the latter with $\mathbf{W} = \mathbf{I}_{pp}$, $\beta_0 = \mathbf{0}_p$ and $\mathbf{\Delta} = \lambda \mathbf{R}$ where $\mathbf{R} = (1-\rho) \mathbf{I}_{pp} + \rho \mathbf{1}_{pp}$ for $\rho \in (-(p-1)^{-1}, 1)$. For $\rho =0$ the two estimators coincide. The variance of the generalized ridge regression estimator then is $\mbox{Var}[ \hat{\beta}(\mathbf{\Delta})] = (\mathbf{I}_{pp} + \mathbf{\Delta})^{-2}$. The efficiency of this estimator, measured by its generalized variance, is: \begin{align*} -\det \{ \mbox{Var}[ \hat{\bbeta}(\mathbf{\Delta})] \} & = \{ [1 + \lambda + (p-1) \rho] (1 + \lambda-\rho)^{p-1} \}^{-2}. +\det \{ \mbox{Var}[ \hat{\beta}(\mathbf{\Delta})] \} & = \{ [1 + \lambda + (p-1) \rho] (1 + \lambda-\rho)^{p-1} \}^{-2}. \end{align*} This efficiency attains its minimum at $\rho = 0$. In the present case, the regular ridge regression estimator is thus more efficient than its generalized counterpart. \end{example} @@ -1640,14 +1772,14 @@ This efficiency attains its minimum at $\rho = 0$. In the present case, the regu \begin{example} *(MSE with perfect target)* \\ -Set $\bbeta_0 = \bbeta$, i.e. the target is equal to the true value of the regression parameter. Then: +Set $\beta_0 = \beta$, i.e. the target is equal to the true value of the regression parameter. Then: \begin{align*} -\mathbb{E}[\hat{\bbeta}(\Delta)] & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \Delta)^{-1} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} \bbeta + \Delta \bbeta) \, \, \, = \, \, \, \bbeta. +\mathbb{E}[\hat{\beta}(\Delta)] & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \Delta)^{-1} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} \beta + \Delta \beta) \, \, \, = \, \, \, \beta. \end{align*} Hence, irrespective of the choice of $\Delta$, the generalized ridge is then unbiased. Thus: \begin{align*} -\mbox{MSE}[\hat{\bbeta}(\Delta)] & = \mbox{tr} \{ -\mbox{Var}[\hat{\bbeta}(\Delta)] \} +\mbox{MSE}[\hat{\beta}(\Delta)] & = \mbox{tr} \{ +\mbox{Var}[\hat{\beta}(\Delta)] \} \\ & = \mbox{tr}[ \sigma^{2} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} \mathbf{X}^{\top} \mathbf{W}^2 \mathbf{X} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1}] \\ @@ -1658,19 +1790,19 @@ When $\mathbf{\Delta} = \lambda \mathbf{I}_{pp}$, this MSE is smaller than that ======= The Bayesian connection} label{sect:genRidgeBayes ======= -This generalized ridge estimator can, like the regular ridge estimator, be viewed as a Bayesian estimator. It requires to replace the conjugate prior on $\bbeta$ by a more general normal law, $\bbeta \sim \mathcal{N}(\bbeta_0, \sigma^2 \mathbf{\Delta}^{-1})$, but retains the gamma prior on $\sigma^2$. The joint posterior distribution of $\bbeta$ and $\sigma^2$ is then obtained analogously (the details are left as Exercise ref{question.generalizedRidgeAndBayes}) to Section ref{sect:Bayes}: +This generalized ridge estimator can, like the regular ridge estimator, be viewed as a Bayesian estimator. It requires to replace the conjugate prior on $\beta$ by a more general normal law, $\beta \sim \mathcal{N}(\beta_0, \sigma^2 \mathbf{\Delta}^{-1})$, but retains the gamma prior on $\sigma^2$. The joint posterior distribution of $\beta$ and $\sigma^2$ is then obtained analogously (the details are left as Exercise ref{question.generalizedRidgeAndBayes}) to Section ref{sect:Bayes}: \begin{align*} -f_{\bbeta, \sigma^2} (\bbeta, \sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) & = f_Y (\mathbf{Y} \, | \, \mathbf{X}, \bbeta, \sigma^2) \, f_{\beta}(\bbeta | \sigma^2) \, f_{\sigma}(\sigma^2) +f_{\beta, \sigma^2} (\beta, \sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) & = f_Y (\mathbf{Y} \, | \, \mathbf{X}, \beta, \sigma^2) \, f_{\beta}(\beta | \sigma^2) \, f_{\sigma}(\sigma^2) \\ -& \propto & g_{\bbeta} (\bbeta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) \, +& \propto & g_{\beta} (\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) \, g_{\sigma^2} (\sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) \end{align*} with \begin{align*} -g_{\bbeta} (\bbeta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) -& \propto & \exp \Big\{ - \frac{1}{2\sigma^2} \big[ \bbeta - \hat{\bbeta}(\mathbf{\Delta}) \big]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \mathbf{\Delta}) \big[ \bbeta - \hat{\bbeta}(\mathbf{\Delta}) \big] \Big\}. +g_{\beta} (\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) +& \propto & \exp \Big\{ - \frac{1}{2\sigma^2} \big[ \beta - \hat{\beta}(\mathbf{\Delta}) \big]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \mathbf{\Delta}) \big[ \beta - \hat{\beta}(\mathbf{\Delta}) \big] \Big\}. \end{align*} -This implies $\mathbb{E}(\bbeta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) = \hat{\bbeta}(\mathbf{\Delta})$. Hence, the generalized ridge regression estimator too can be viewed as the Bayesian posterior mean estimator of $\bbeta$ when imposing a multivariate Gaussian prior on the regression parameter. +This implies $\mathbb{E}(\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) = \hat{\beta}(\mathbf{\Delta})$. Hence, the generalized ridge regression estimator too can be viewed as the Bayesian posterior mean estimator of $\beta$ when imposing a multivariate Gaussian prior on the regression parameter. @@ -1691,9 +1823,9 @@ The sample selection demands justification. It yields a clear illustrate-able di ======= Generalized ridge regression ======= -What is generally referred to as `generalized ridge regression' (cf. \citealp{Hoer1970, Hemm1975}) is the particular case of loss function (ref{form:generalizedRidgeLoss}) in which $\mathbf{W} = \mathbf{I}_{nn}$, $\bbeta_0 = \mathbf{0}_{p}$, and $\mathbf{\Delta} = \mathbf{V}_{x} \mathbf{\Lambda} \mathbf{V}_x^{\top}$, where $\mathbf{V}_x$ is obtained from the singular value decomposition of $\mathbf{X}$ (i.e., $\mathbf{X} = \mathbf{U}_{x} \mathbf{D}_x \mathbf{V}_x^{\top}$ with its constituents endowed with the usual interpretation) and $\mathbf{\Lambda}$ a positive definite diagonal matrix. This gives the estimator: +What is generally referred to as `generalized ridge regression' (cf. \citealp{Hoer1970, Hemm1975}) is the particular case of loss function (ref{form:generalizedRidgeLoss}) in which $\mathbf{W} = \mathbf{I}_{nn}$, $\beta_0 = \mathbf{0}_{p}$, and $\mathbf{\Delta} = \mathbf{V}_{x} \mathbf{\Lambda} \mathbf{V}_x^{\top}$, where $\mathbf{V}_x$ is obtained from the singular value decomposition of $\mathbf{X}$ (i.e., $\mathbf{X} = \mathbf{U}_{x} \mathbf{D}_x \mathbf{V}_x^{\top}$ with its constituents endowed with the usual interpretation) and $\mathbf{\Lambda}$ a positive definite diagonal matrix. This gives the estimator: \begin{align*} -\hat{\bbeta}(\mathbf{\Lambda}) & = (\mathbf{X}^{\top} \mathbf{X} + \mathbf{\Delta})^{-1} \mathbf{X}^{\top} \mathbf{Y} +\hat{\beta}(\mathbf{\Lambda}) & = (\mathbf{X}^{\top} \mathbf{X} + \mathbf{\Delta})^{-1} \mathbf{X}^{\top} \mathbf{Y} \\ & = (\mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top} + \mathbf{V}_x \mathbf{\Lambda} \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x \mathbf{Y} \\ @@ -1701,19 +1833,19 @@ What is generally referred to as `generalized ridge regression' (cf. \citealp{Ho \end{align*} From this last expression it becomes clear how this estimator generalizes the `regular ridge estimator'. The latter shrinks all eigenvalues, irrespectively of their size, in the same manner through a common penalty parameter. The `generalized ridge estimator', through differing penalty parameters (i.e. the diagonal elements of $\mathbf{\Lambda}$), shrinks them individually. -The generalized ridge estimator coincides with the Bayesian linear regression estimator with the normal prior $\mathcal{N}[\mathbf{0}_p, (\mathbf{V}_x \mathbf{\Lambda} \mathbf{V}_x^{\top})^{-1}]$ on the regression parameter $\bbeta$ (and preserving the inverse gamma prior on the error variance). Assume $\mathbf{X}$ to be of full column rank and choose $\mathbf{\Lambda} = g^{-1} \mathbf{D}_x^2$ with $g$ a positive scalar. The prior on $\bbeta$ then - assuming $(\mathbf{X}^{\top} \mathbf{X})^{-1}$ exits - reduces to Zellner's $g$-prior: $\bbeta \sim \mathcal{N}[\mathbf{0}_p, g (\mathbf{X}^{\top} \mathbf{X})^{-1}]$ \citep{Zell1986}. The corresponding estimator of the regression coefficient is: $\hat{\bbeta}(g) = g (1+g)^{-1} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}$, which is proportional to the unpenalized ordinary least squares estimator of $\bbeta$. +The generalized ridge estimator coincides with the Bayesian linear regression estimator with the normal prior $\mathcal{N}[\mathbf{0}_p, (\mathbf{V}_x \mathbf{\Lambda} \mathbf{V}_x^{\top})^{-1}]$ on the regression parameter $\beta$ (and preserving the inverse gamma prior on the error variance). Assume $\mathbf{X}$ to be of full column rank and choose $\mathbf{\Lambda} = g^{-1} \mathbf{D}_x^2$ with $g$ a positive scalar. The prior on $\beta$ then - assuming $(\mathbf{X}^{\top} \mathbf{X})^{-1}$ exits - reduces to Zellner's $g$-prior: $\beta \sim \mathcal{N}[\mathbf{0}_p, g (\mathbf{X}^{\top} \mathbf{X})^{-1}]$ \citep{Zell1986}. The corresponding estimator of the regression coefficient is: $\hat{\beta}(g) = g (1+g)^{-1} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}$, which is proportional to the unpenalized ordinary least squares estimator of $\beta$. For convenience of notation in the analysis of the generalized ridge estimator the linear regression model is usually rewritten as: \begin{align*} -\mathbf{Y} & = \mathbf{X} \bbeta + \vvarepsilon \, \, \, = \, \, \, -\mathbf{X} \mathbf{V}_x \mathbf{V}_x^{\top} \bbeta + \vvarepsilon \, \, \, = \, \, \, \tilde{\mathbf{X}} \aalpha + \vvarepsilon, +\mathbf{Y} & = \mathbf{X} \beta + \vvarepsilon \, \, \, = \, \, \, +\mathbf{X} \mathbf{V}_x \mathbf{V}_x^{\top} \beta + \vvarepsilon \, \, \, = \, \, \, \tilde{\mathbf{X}} \aalpha + \vvarepsilon, \end{align*} with $\tilde{\mathbf{X}} = \mathbf{X} \mathbf{V}_x = \mathbf{U}_x -\mathbf{D}_x$ (and thus $\tilde{\mathbf{X}}^{\top} \tilde{\mathbf{X}} = \mathbf{D}_x^ 2$) and $\aalpha = \mathbf{V}_x^{\top} \bbeta$ with loss function $(\mathbf{Y} - \tilde{\mathbf{X}} \aalpha)^{\top} (\mathbf{Y} - \tilde{\mathbf{X}} \aalpha) + \aalpha^{\top} \mathbf{\Lambda} \aalpha$. In the notation above the generalized ridge estimator is then: +\mathbf{D}_x$ (and thus $\tilde{\mathbf{X}}^{\top} \tilde{\mathbf{X}} = \mathbf{D}_x^ 2$) and $\aalpha = \mathbf{V}_x^{\top} \beta$ with loss function $(\mathbf{Y} - \tilde{\mathbf{X}} \aalpha)^{\top} (\mathbf{Y} - \tilde{\mathbf{X}} \aalpha) + \aalpha^{\top} \mathbf{\Lambda} \aalpha$. In the notation above the generalized ridge estimator is then: \begin{align*} \hat{\aalpha}(\mathbf{\Lambda}) & = (\tilde{\mathbf{X}}^{\top} \tilde{\mathbf{X}} + \mathbf{\Lambda})^ {-1} \tilde{\mathbf{X}}^{\top} \mathbf{Y} = (\mathbf{D}_x^ 2 + \mathbf{\Lambda})^{-1} \tilde{\mathbf{X}}^{\top} \mathbf{Y}, \end{align*} -from which one obtains $\hat{\bbeta}(\mathbf{\Lambda}) = \mathbf{V}_x \hat{\aalpha}(\mathbf{\Lambda})$. Using $\mathbb{E}[\hat{\aalpha}(\mathbf{\Lambda})] = (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1} \mathbf{D}_x^2 \aalpha$ and $\mbox{Var}[\hat{\aalpha}(\mathbf{\Lambda})] = \sigma^2 (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1} \mathbf{D}_x^2 (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1}$, the MSE for the generalized ridge estimator can be written as: +from which one obtains $\hat{\beta}(\mathbf{\Lambda}) = \mathbf{V}_x \hat{\aalpha}(\mathbf{\Lambda})$. Using $\mathbb{E}[\hat{\aalpha}(\mathbf{\Lambda})] = (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1} \mathbf{D}_x^2 \aalpha$ and $\mbox{Var}[\hat{\aalpha}(\mathbf{\Lambda})] = \sigma^2 (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1} \mathbf{D}_x^2 (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1}$, the MSE for the generalized ridge estimator can be written as: \begin{align*} \mbox{MSE}[\hat{\aalpha}(\mathbf{\Lambda})] & = \sum_{j=1}^p ( \sigma^2 d_{x,j}^2 + \alpha_j^2 \lambda_{j}^2 ) (d_{x,j}^2 + \lambda_{j} )^{-2}, \end{align*} @@ -1722,7 +1854,7 @@ the estimates of $\aalpha$ and $\sigma^2$. An analytic expression of the limit o ======= Conclusion ======= -To conclude: a note of caution. The generalized ridge penalty is extremely flexible. It can incorporate any prior knowledge on the parameter values (through specification of $\bbeta_0$) and the relations among these parameters (via $\mathbf{\Delta}$). While a pilot study or literature may provide a suggestion for $\bbeta_0$, it is less obvious how to choose an informative $\mathbf{\Delta}$ (although a spatial structure is a nice exception). In general, exact knowledge on the parameters should not be incorporated implicitly via the penalty (read: prior) but preferably be used explicitly in the model - the likelihood - itself. Though this may be the viewpoint of a prudent frequentist and a subjective Bayesian might disagree. +To conclude: a note of caution. The generalized ridge penalty is extremely flexible. It can incorporate any prior knowledge on the parameter values (through specification of $\beta_0$) and the relations among these parameters (via $\mathbf{\Delta}$). While a pilot study or literature may provide a suggestion for $\beta_0$, it is less obvious how to choose an informative $\mathbf{\Delta}$ (although a spatial structure is a nice exception). In general, exact knowledge on the parameters should not be incorporated implicitly via the penalty (read: prior) but preferably be used explicitly in the model - the likelihood - itself. Though this may be the viewpoint of a prudent frequentist and a subjective Bayesian might disagree. ======= Exercises ======= @@ -1751,9 +1883,9 @@ with penalty parameter $\delta \in \mathbb{R}_{> 0}$. The data scientist is surp \begin{question} label{question.generalizedRidgeAndBayes} \mbox{ } \\ -Consider the linear regression model $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsilon$ with $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_p, \sigma^2 \mathbf{I}_{pp})$. Assume $\bbeta \sim \mathcal{N}(\bbeta_0, \sigma^2 \mathbf{\Delta}^{-1})$ with $\bbeta_0 \in \mathbb{R}^p$ and $\mathbf{\Delta} \succ 0$ and a gamma prior on the error variance. Verify (i.e., work out the details of the derivation) that the posterior mean coincides with the generalized ridge estimator defined as: +Consider the linear regression model $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$ with $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_p, \sigma^2 \mathbf{I}_{pp})$. Assume $\beta \sim \mathcal{N}(\beta_0, \sigma^2 \mathbf{\Delta}^{-1})$ with $\beta_0 \in \mathbb{R}^p$ and $\mathbf{\Delta} \succ 0$ and a gamma prior on the error variance. Verify (i.e., work out the details of the derivation) that the posterior mean coincides with the generalized ridge estimator defined as: \begin{align*} -\hat{\bbeta} & = (\mathbf{X}^{\top} \mathbf{X} + \mathbf{\Delta})^{-1} (\mathbf{X}^{\top} \mathbf{Y} + \mathbf{\Delta} \bbeta_0). +\hat{\beta} & = (\mathbf{X}^{\top} \mathbf{X} + \mathbf{\Delta})^{-1} (\mathbf{X}^{\top} \mathbf{Y} + \mathbf{\Delta} \beta_0). \end{align*} \end{question} @@ -1761,7 +1893,7 @@ Consider the linear regression model $\mathbf{Y} = \mathbf{X} \bbeta + \vvarepsi \begin{question} label{question.ridgeAR1penalty} \mbox{ } \\ -The ridge penalty may be interpreted as a multivariate normal prior on the regression coefficients: $\bbeta \sim \mathcal{N}(\mathbf{0}, \lambda^{-1} \mathbf{I}_{pp})$. Different priors may be considered. In case the covariates are spatially related in some sense (e.g. genomically), it may of interest to assume a first-order autoregressive prior: $\bbeta \sim \mathcal{N}(\mathbf{0}, \lambda^{-1} \SSigma_A)$, in which $\SSigma_A$ is a $p \times p$-correlation matrix with $(\SSigma_A)_{j_1, j_2} = \rho^{ | j_1 - j_2 | } $ for some correlation coefficient $\rho \in [0, 1)$. Hence, +The ridge penalty may be interpreted as a multivariate normal prior on the regression coefficients: $\beta \sim \mathcal{N}(\mathbf{0}, \lambda^{-1} \mathbf{I}_{pp})$. Different priors may be considered. In case the covariates are spatially related in some sense (e.g. genomically), it may of interest to assume a first-order autoregressive prior: $\beta \sim \mathcal{N}(\mathbf{0}, \lambda^{-1} \SSigma_A)$, in which $\SSigma_A$ is a $p \times p$-correlation matrix with $(\SSigma_A)_{j_1, j_2} = \rho^{ | j_1 - j_2 | } $ for some correlation coefficient $\rho \in [0, 1)$. Hence, \begin{align*} \SSigma_A \, \, \, = \, \, \, \left( @@ -1780,13 +1912,13 @@ The ridge penalty may be interpreted as a multivariate normal prior on the regre \begin{compactitem} \item[*a)*] The penalized loss function associated with this AR(1) prior is: \begin{align*} -\mathcal{L}(\bbeta; \lambda, \SSigma_A) & = \| \mathbf{Y} - \mathbf{X} \bbeta \|_2^2 + \lambda \bbeta^{\top} \SSigma_A^{-1} \bbeta. +\mathcal{L}(\beta; \lambda, \SSigma_A) & = \| \mathbf{Y} - \mathbf{X} \beta \|_2^2 + \lambda \beta^{\top} \SSigma_A^{-1} \beta. \end{align*} Find the minimizer of this loss function. \item[*b)*] What is the effect of $\rho$ on the ridge estimates? Contrast this to the effect of $\lambda$. Illustrate this on (simulated) data. -\item[*c)*] Instead of an AR(1) prior assume a prior with a uniform correlation between the elements of $\bbeta$. That is, replace $\SSigma_A$ by $\SSigma_U$, given by: +\item[*c)*] Instead of an AR(1) prior assume a prior with a uniform correlation between the elements of $\beta$. That is, replace $\SSigma_A$ by $\SSigma_U$, given by: \begin{align*} \SSigma_U \, \, \, = \, \, \, \left( \begin{array}{ccc} @@ -1815,38 +1947,38 @@ Ridge penalized estimation is not limited to the standard linear regression mode The logistic regression model explains a binary response variable (through some transformation) by a linear combination of a set of covariates (as in the linear regression model). Denote this response of the $i$-th sample by $Y_i$ with $Y_i \in \{ 0, 1 \}$ for $i=1, \ldots, n$. The $n$-dimensional column vector $\mathbf{Y}$ stacks these $n$ responses. For each sample information on the $p$ explanatory variables $X_{i,1}, \ldots, X_{i,p}$ is available. In row vector form this information is denoted $\mathbf{X}_{i,\ast} = (X_{i,1}, \ldots, X_{i,p})$. Or, in short, $\mathbf{X}_i$ when the context tolerates no confusion. The $(n \times p)$-dimensional matrix $\mathbf{X}$ aggregates these vectors, such that $\mathbf{X}_i$ is the $i$-th row vector. -The binary response cannot be modelled as in the linear model like $Y_i = \mathbf{X}_i \bbeta + \varepsilon_i$. With each element of $\mathbf{X}_i$ and $\bbeta$ assuming a value in $\mathbb{R}$, the linear predictor is not restricted to the domain of the response. This is resolved by modeling $p_i = P(Y_i = 1)$ instead. Still the linear predictor may exceed the domain of the response ($p_i \in [0,1]$). Hence, a transformation is applied to map $p_i$ to $\mathbb{R}$, the range of the linear predictor. +The binary response cannot be modelled as in the linear model like $Y_i = \mathbf{X}_i \beta + \varepsilon_i$. With each element of $\mathbf{X}_i$ and $\beta$ assuming a value in $\mathbb{R}$, the linear predictor is not restricted to the domain of the response. This is resolved by modeling $p_i = P(Y_i = 1)$ instead. Still the linear predictor may exceed the domain of the response ($p_i \in [0,1]$). Hence, a transformation is applied to map $p_i$ to $\mathbb{R}$, the range of the linear predictor. # original latex figure with scale=0.40, angle=0 FIGURE: [logistic_effectOfBeta0.eps, width=400 frac=1.0] Top row, left panel: the response curve for various choices of the intercept $\beta_0$. Top row, right panel: the response curve for various choices of the regression coefficent $\beta_1$. Bottom row, left panel: the responce curve for various choices of the link function. Bottom panel, right panel: observations, fits and their deviations. } label{fig.logisticRidge_modelAndFitIllustration -The transformation associated with the logistic regression model is the logarithm of the odds, with the odds defined as: $\mbox{*odds*} = P(\mbox{succes}) / P(\mbox{failure}) = p_i/ (1-p_i)$. The logistic model is then written as $\log[ p_i / (1-p_i)] = \mathbf{X}_i \bbeta$ for all $i$. Or, expressed in terms of the response: +The transformation associated with the logistic regression model is the logarithm of the odds, with the odds defined as: $\mbox{*odds*} = P(\mbox{succes}) / P(\mbox{failure}) = p_i/ (1-p_i)$. The logistic model is then written as $\log[ p_i / (1-p_i)] = \mathbf{X}_i \beta$ for all $i$. Or, expressed in terms of the response: \begin{align*} -p_i & = P(Y_i = 1) \, \, \, = \, \, \, g^{-1}(\mathbf{X}_i; \bbeta) \, \, \, = \, \, \,\frac{\exp(\mathbf{X}_i \bbeta) }{1 + \exp(\mathbf{X}_i \bbeta) }. +p_i & = P(Y_i = 1) \, \, \, = \, \, \, g^{-1}(\mathbf{X}_i; \beta) \, \, \, = \, \, \,\frac{\exp(\mathbf{X}_i \beta) }{1 + \exp(\mathbf{X}_i \beta) }. \end{align*} -The function $g(\cdot; \cdot)$ is called the *link function*. It links the response to the explanatory variables. The one above is called the logistic link function. Or short, logit. The regression parameters have tangible interpretations. When the first covariate represents the intercept, i.e. $X_{i,j} = 1$ for all $i$, then $\beta_1$ determines where the link function equals a half when all other covariates fail to contribute to the linear predictor (i.e. where $P (Y_i = 1 \, | \, \mathbf{X}_{i}) = 0.5$ when $\mathbf{X}_{i} \bbeta = \beta_1$). This is illustrated in the top-left panel of Figure ref{fig.logisticRidge_modelAndFitIllustration} for various choices of the intercept. On the other hand, the regression parameters are directly related to the odds ratio: $\mbox{*odds ratio*} = \mbox{odds}(X_{i,j}+1) / \mbox{odds}(X_{i,j}) = \exp(\beta_j)$. Hence, the effect of a unit change in the $j$-th covariate on the odds ratio is $\exp(\beta_j)$ (see Figure ref{fig.logisticRidge_modelAndFitIllustration}, top-right panel). Other link functions (depicted in Figure ref{fig.logisticRidge_modelAndFitIllustration}, bottom-left panel) are common, e.g. the *probit*: $p_i = \Phi_{0,1}(\mathbf{X}_i \bbeta)$; the *cloglog*: $p_i = \frac{1}{\pi} \arctan(\mathbf{X}_i \bbeta) + \frac{1}{2}$; the *Cauchit*: $p_i = \exp[ - \exp(\mathbf{X}_i \bbeta)]$. All these link function are invertible. Irrespective of the choice of the link function, the binary data are thus modelled as $Y_i \sim \mathcal{B}[g^{-1}(\mathbf{X}_i; \bbeta), 1]$. That is, as a single draw from the Binomial distribution with success probability $g^{-1}(\mathbf{X}_i; \bbeta)$. +The function $g(\cdot; \cdot)$ is called the *link function*. It links the response to the explanatory variables. The one above is called the logistic link function. Or short, logit. The regression parameters have tangible interpretations. When the first covariate represents the intercept, i.e. $X_{i,j} = 1$ for all $i$, then $\beta_1$ determines where the link function equals a half when all other covariates fail to contribute to the linear predictor (i.e. where $P (Y_i = 1 \, | \, \mathbf{X}_{i}) = 0.5$ when $\mathbf{X}_{i} \beta = \beta_1$). This is illustrated in the top-left panel of Figure ref{fig.logisticRidge_modelAndFitIllustration} for various choices of the intercept. On the other hand, the regression parameters are directly related to the odds ratio: $\mbox{*odds ratio*} = \mbox{odds}(X_{i,j}+1) / \mbox{odds}(X_{i,j}) = \exp(\beta_j)$. Hence, the effect of a unit change in the $j$-th covariate on the odds ratio is $\exp(\beta_j)$ (see Figure ref{fig.logisticRidge_modelAndFitIllustration}, top-right panel). Other link functions (depicted in Figure ref{fig.logisticRidge_modelAndFitIllustration}, bottom-left panel) are common, e.g. the *probit*: $p_i = \Phi_{0,1}(\mathbf{X}_i \beta)$; the *cloglog*: $p_i = \frac{1}{\pi} \arctan(\mathbf{X}_i \beta) + \frac{1}{2}$; the *Cauchit*: $p_i = \exp[ - \exp(\mathbf{X}_i \beta)]$. All these link function are invertible. Irrespective of the choice of the link function, the binary data are thus modelled as $Y_i \sim \mathcal{B}[g^{-1}(\mathbf{X}_i; \beta), 1]$. That is, as a single draw from the Binomial distribution with success probability $g^{-1}(\mathbf{X}_i; \beta)$. Let us now estimate the parameter of the logistic regression model by means of the maximum likelihood method. The likelihood of the experiment is then: \begin{align*} -L(\mathbf{Y} \, | \, \mathbf{X}; \bbeta) & = \prod_{i=1}^n \big[ P(Y_i = 1 \, | \, \mathbf{X}_i) \big]^{Y_i} \big[ P(Y_i = 0 \, | \, \mathbf{X}_i) \big]^{1-Y_i}. +L(\mathbf{Y} \, | \, \mathbf{X}; \beta) & = \prod_{i=1}^n \big[ P(Y_i = 1 \, | \, \mathbf{X}_i) \big]^{Y_i} \big[ P(Y_i = 0 \, | \, \mathbf{X}_i) \big]^{1-Y_i}. \end{align*} After taking the logarithm and some ready algebra, the log-likelihood is found to be: \begin{align*} -\mathcal{L}(\mathbf{Y} \, | \, \mathbf{X}; \bbeta) & = \sum_{i=1}^n \big\{ Y_i \mathbf{X}_i \bbeta - \log [ 1 + \exp(\mathbf{X}_i \bbeta) ] \big\}. +\mathcal{L}(\mathbf{Y} \, | \, \mathbf{X}; \beta) & = \sum_{i=1}^n \big\{ Y_i \mathbf{X}_i \beta - \log [ 1 + \exp(\mathbf{X}_i \beta) ] \big\}. \end{align*} -Differentiate the log-likelihood with respect to $\bbeta$, equate it zero, and obtain the estimating equation for $\bbeta$: +Differentiate the log-likelihood with respect to $\beta$, equate it zero, and obtain the estimating equation for $\beta$: !bt !bt \begin{align} label{form:logisticRidge_estimatingEquationOfBeta} -\frac{\partial \mathcal{L}}{\partial \bbeta } & = \sum_{i=1}^n \Big[ Y_i - \frac{\exp(\mathbf{X}_i \bbeta)}{ 1 + \exp(\mathbf{X}_i \bbeta)} \Big] \mathbf{X}_i^{\top} \, \, \, = \, \, \, \mathbf{0}_p. +\frac{\partial \mathcal{L}}{\partial \beta } & = \sum_{i=1}^n \Big[ Y_i - \frac{\exp(\mathbf{X}_i \beta)}{ 1 + \exp(\mathbf{X}_i \beta)} \Big] \mathbf{X}_i^{\top} \, \, \, = \, \, \, \mathbf{0}_p. \end{align} !et !et -The ML estimate of $\bbeta$ strikes a (weighted by the $\mathbf{X}_i$) balance between observation and model. Put differently (and illustrated in the bottom-right panel of Figure ref{fig.logisticRidge_modelAndFitIllustration}), a curve is fit through data by minimizing the distance between them: at the ML estimate of $\bbeta$ a weighted average of their deviations is zero. +The ML estimate of $\beta$ strikes a (weighted by the $\mathbf{X}_i$) balance between observation and model. Put differently (and illustrated in the bottom-right panel of Figure ref{fig.logisticRidge_modelAndFitIllustration}), a curve is fit through data by minimizing the distance between them: at the ML estimate of $\beta$ a weighted average of their deviations is zero. -The maximum likelihood estimate of $\bbeta$ is evaluated by solving Equation (ref{form:logisticRidge_estimatingEquationOfBeta}) with respect to $\bbeta$ by means of the Newton-Raphson algorithm. The Newton-Raphson algorithm iteratively finds the zeros of a smooth enough function $f(\cdot)$. Let $x_0$ denote an initial guess of the zero. Then, approximate $f(\cdot)$ around $x_0$ by means of a first order Taylor series: $f(x) \approx x_0 + (x - x_0) \, (d f / d x) |_{x=x_0}$. Solve this for $x$ and obtain: $x = x_0 - [ (d f / d x) |_{x=x_0} ]^{-1} f(x_0)$. Let $x_1$ be the solution for $x$, use this as the new guess and repeat the above until convergence. When the function $f(\cdot)$ has multiple arguments, is vector-valued and denoted by $\vec{\mathbf{f}}$, and the Taylor approximation becomes: $\vec{\mathbf{f}}(\mathbf{x}) \approx \mathbf{x}_0 + J \vec{\mathbf{f}} \big|_{\mathbf{x}=\mathbf{x}_0} (\mathbf{x} - \mathbf{x}_0)$ with +The maximum likelihood estimate of $\beta$ is evaluated by solving Equation (ref{form:logisticRidge_estimatingEquationOfBeta}) with respect to $\beta$ by means of the Newton-Raphson algorithm. The Newton-Raphson algorithm iteratively finds the zeros of a smooth enough function $f(\cdot)$. Let $x_0$ denote an initial guess of the zero. Then, approximate $f(\cdot)$ around $x_0$ by means of a first order Taylor series: $f(x) \approx x_0 + (x - x_0) \, (d f / d x) |_{x=x_0}$. Solve this for $x$ and obtain: $x = x_0 - [ (d f / d x) |_{x=x_0} ]^{-1} f(x_0)$. Let $x_1$ be the solution for $x$, use this as the new guess and repeat the above until convergence. When the function $f(\cdot)$ has multiple arguments, is vector-valued and denoted by $\vec{\mathbf{f}}$, and the Taylor approximation becomes: $\vec{\mathbf{f}}(\mathbf{x}) \approx \mathbf{x}_0 + J \vec{\mathbf{f}} \big|_{\mathbf{x}=\mathbf{x}_0} (\mathbf{x} - \mathbf{x}_0)$ with \begin{align*} J \vec{\mathbf{f}} = \left( \begin{array}{llll} @@ -1862,40 +1994,40 @@ J \vec{\mathbf{f}} = \left( \end{align*} the Jacobi matrix. An update of $x_0$ is now readily constructed by solving (the approximation for) $\vec{\mathbf{f}}(\mathbf{x}) = \mathbf{0}$ for $\mathbf{x}$. -When applied here to the maximum likelihood estimation of the regression parameter $\bbeta$ of the logistic regression model, the Newton-Raphson update is: +When applied here to the maximum likelihood estimation of the regression parameter $\beta$ of the logistic regression model, the Newton-Raphson update is: \begin{align*} -\hat{\bbeta}^{\mbox{{\scriptsize new}}} & = \hat{\bbeta}^{\mbox{{\scriptsize old}}} - \Big( \frac{\partial^2 \mathcal{L}}{\partial \bbeta \partial \bbeta^{\top}} \Big)^{-1} \Big|_{\bbeta = \hat{\bbeta}^{\mbox{{\tiny old}}} } \, \, \frac{\partial \mathcal{L}}{\partial \bbeta } \Big|_{\bbeta = \hat{\bbeta}^{\mbox{{\tiny old}}} } +\hat{\beta}^{\mbox{{\scriptsize new}}} & = \hat{\beta}^{\mbox{{\scriptsize old}}} - \Big( \frac{\partial^2 \mathcal{L}}{\partial \beta \partial \beta^{\top}} \Big)^{-1} \Big|_{\beta = \hat{\beta}^{\mbox{{\tiny old}}} } \, \, \frac{\partial \mathcal{L}}{\partial \beta } \Big|_{\beta = \hat{\beta}^{\mbox{{\tiny old}}} } \end{align*} where the Hessian of the log-likelihood equals: \begin{align*} -\frac{\partial^2 \mathcal{L}}{\partial \bbeta \partial \bbeta^{\top}} & = - \sum_{i=1}^n \frac{\exp(\mathbf{X}_i \bbeta)}{ [1 + \exp(\mathbf{X}_i \bbeta)]^2} \mathbf{X}_i^{\top} \mathbf{X}_i. +\frac{\partial^2 \mathcal{L}}{\partial \beta \partial \beta^{\top}} & = - \sum_{i=1}^n \frac{\exp(\mathbf{X}_i \beta)}{ [1 + \exp(\mathbf{X}_i \beta)]^2} \mathbf{X}_i^{\top} \mathbf{X}_i. \end{align*} -Iterative application of this updating formula converges to the ML estimate of $\bbeta$. +Iterative application of this updating formula converges to the ML estimate of $\beta$. The Newton-Raphson algorithm is often reformulated as an iteratively re-weighted least squares algorithm. Hereto, first write the gradient and Hessian in matrix notation: \begin{align*} -\frac{\partial \mathcal{L}}{\partial \bbeta } \, \, \, = \, \, \, \mathbf{X}^{\top} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta)] +\frac{\partial \mathcal{L}}{\partial \beta } \, \, \, = \, \, \, \mathbf{X}^{\top} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta)] & \mbox{ and } & -\frac{\partial^2 \mathcal{L}}{\partial \bbeta \partial \bbeta^{\top}} \, \, \, = \, \, \, - \mathbf{X}^{\top} \mathbf{W} \mathbf{X}, +\frac{\partial^2 \mathcal{L}}{\partial \beta \partial \beta^{\top}} \, \, \, = \, \, \, - \mathbf{X}^{\top} \mathbf{W} \mathbf{X}, \end{align*} -where $\vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta) = [g^{-1}( \mathbf{X}_{1, \ast}; \bbeta), \ldots, g^{-1}( \mathbf{X}_{n, \ast}; \bbeta)]^{\top}$ with $g^{-1}(\cdot; \cdot) = \exp(\cdot; \cdot) / [1 + \exp(\cdot; \cdot)]$ and $\mathbf{W}$ diagonal with $(\mathbf{W})_{ii} = \exp(\mathbf{X}_i \hat{\bbeta}^{\mbox{{\scriptsize old}}} ) [ 1 + \exp(\mathbf{X}_i \hat{\bbeta}^{\mbox{{\scriptsize old}}} ) ]^{-2}$. The updating formula of the estimate then becomes: +where $\vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta) = [g^{-1}( \mathbf{X}_{1, \ast}; \beta), \ldots, g^{-1}( \mathbf{X}_{n, \ast}; \beta)]^{\top}$ with $g^{-1}(\cdot; \cdot) = \exp(\cdot; \cdot) / [1 + \exp(\cdot; \cdot)]$ and $\mathbf{W}$ diagonal with $(\mathbf{W})_{ii} = \exp(\mathbf{X}_i \hat{\beta}^{\mbox{{\scriptsize old}}} ) [ 1 + \exp(\mathbf{X}_i \hat{\beta}^{\mbox{{\scriptsize old}}} ) ]^{-2}$. The updating formula of the estimate then becomes: \begin{align*} -\hat{\bbeta}^{\mbox{{\scriptsize new}}} & = \hat{\bbeta}^{\mbox{{\scriptsize old}}} + (\mathbf{X}^{\top} \mathbf{W} \mathbf{X})^{-1} \mathbf{X}^{\top} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta^{\mbox{{\scriptsize old}}})] +\hat{\beta}^{\mbox{{\scriptsize new}}} & = \hat{\beta}^{\mbox{{\scriptsize old}}} + (\mathbf{X}^{\top} \mathbf{W} \mathbf{X})^{-1} \mathbf{X}^{\top} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] \\ -& = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{W} \{ \mathbf{X} \hat{\bbeta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta^{\mbox{{\scriptsize old}}})] \} +& = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{W} \{ \mathbf{X} \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] \} \\ & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{Z}, \end{align*} -where $\mathbf{Z} = \{ \mathbf{X} \hat{\bbeta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta^{\mbox{{\scriptsize old}}})] \}$. The Newton-Raphson update is thus the solution to the following weighted least squares problem: +where $\mathbf{Z} = \{ \mathbf{X} \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] \}$. The Newton-Raphson update is thus the solution to the following weighted least squares problem: \begin{align*} -\hat{\bbeta}^{\mbox{{\scriptsize new}}} & = \arg \min_{\bbeta} (\mathbf{Z} - \mathbf{X} \bbeta)^{\top} \mathbf{W} (\mathbf{Z} - \mathbf{X} \bbeta). +\hat{\beta}^{\mbox{{\scriptsize new}}} & = \arg \min_{\beta} (\mathbf{Z} - \mathbf{X} \beta)^{\top} \mathbf{W} (\mathbf{Z} - \mathbf{X} \beta). \end{align*} Effectively, at each iteration the *adjusted response* $\mathbf{Z}$ is regressed on the covariates that comprise $\mathbf{X}$. For more on logistic regression confer the monograph of cite{Hosm2013}. ======= Ridge estimation ======= -High-dimensionally, the linear predictor $\mathbf{X} \bbeta$ may be uniquely defined, but the maximum likelihood estimate of the logistic regression parameter is not. Assume $p > n$ and an estimate $\hat{\bbeta}$ available. Due to the high-dimensionality, the null space of $\mathbf{X}$ is non-trivial. Hence, let $\ggamma \in \mbox{null}(\mbox{span}(\mathbf{X}))$. Then: $\mathbf{X} \hat{\bbeta} = \mathbf{X} \hat{\bbeta} + \mathbf{X} \ggamma = \mathbf{X} (\hat{\bbeta} + \ggamma)$. As the null space is a $p-n$-dimensional subspace, $\ggamma$ need not equal zero. Hence, an infinite number of estimates of the logistic regression parameter exists that yield the same log-likelihood. Augmentation of the loss function with a ridge penalty resolves the matter, as their sum is strictly concave in $\bbeta$ (not convex as a maximum rather than a minimum is sought here) and thereby has a unique maximum. +High-dimensionally, the linear predictor $\mathbf{X} \beta$ may be uniquely defined, but the maximum likelihood estimate of the logistic regression parameter is not. Assume $p > n$ and an estimate $\hat{\beta}$ available. Due to the high-dimensionality, the null space of $\mathbf{X}$ is non-trivial. Hence, let $\ggamma \in \mbox{null}(\mbox{span}(\mathbf{X}))$. Then: $\mathbf{X} \hat{\beta} = \mathbf{X} \hat{\beta} + \mathbf{X} \ggamma = \mathbf{X} (\hat{\beta} + \ggamma)$. As the null space is a $p-n$-dimensional subspace, $\ggamma$ need not equal zero. Hence, an infinite number of estimates of the logistic regression parameter exists that yield the same log-likelihood. Augmentation of the loss function with a ridge penalty resolves the matter, as their sum is strictly concave in $\beta$ (not convex as a maximum rather than a minimum is sought here) and thereby has a unique maximum. # original latex figure with scale=0.40, angle=0 @@ -1905,25 +2037,25 @@ FIGURE: [logisticPenLL2ridgePenalty.eps, width=400 frac=1.0] Top row, left panel Ridge maximum likelihood estimates of the logistic model parameters are found by the maximization of the ridge penalized loglikelihood (cf. \citealt{Scha1984,LeCe1992}): \begin{align*} -\mathcal{L}^{\mbox{{\tiny pen}}}(\mathbf{Y}, \mathbf{X}; \bbeta, \lambda) & = \mathcal{L} (\mathbf{Y}, \mathbf{X}; \bbeta) - \tfrac{1}{2} \lambda \| \bbeta \|_2^2 +\mathcal{L}^{\mbox{{\tiny pen}}}(\mathbf{Y}, \mathbf{X}; \beta, \lambda) & = \mathcal{L} (\mathbf{Y}, \mathbf{X}; \beta) - \tfrac{1}{2} \lambda \| \beta \|_2^2 \\ -& = \sum_{i=1}^n \big\{ Y_i \mathbf{X}_i \bbeta - \log [ 1 + \exp(\mathbf{X}_i \bbeta) ] \big\} - \tfrac{1}{2} \lambda \bbeta^{\top} \bbeta, +& = \sum_{i=1}^n \big\{ Y_i \mathbf{X}_i \beta - \log [ 1 + \exp(\mathbf{X}_i \beta) ] \big\} - \tfrac{1}{2} \lambda \beta^{\top} \beta, \end{align*} -where the second summand is the ridge penalty (the sum of the square of the elements of $\bbeta$) with $\lambda$ the penalty parameter. Note that as in Section ref{sect.constrainedEstimation} maximization of this penalized loss function can be reformulated as a constrained estimation problem. This is illustrated by the top left panel of Figure ref{fig.logisticRidge_effectOfPenalization}, which depicts the contours (black lines) of the log-likelihood and the spherical domain of the parameter (red line). The optimization of the above loss function proceeds, due to the differentiability of the penalty, fully analogous to the unpenalized case and uses the Newton-Raphson algorithm for solving the (penalized) estimating equation. Hence, the unpenalized ML estimation procedure is modified straightforwardly by replacing gradient and Hessian by their `penalized' counterparts: +where the second summand is the ridge penalty (the sum of the square of the elements of $\beta$) with $\lambda$ the penalty parameter. Note that as in Section ref{sect.constrainedEstimation} maximization of this penalized loss function can be reformulated as a constrained estimation problem. This is illustrated by the top left panel of Figure ref{fig.logisticRidge_effectOfPenalization}, which depicts the contours (black lines) of the log-likelihood and the spherical domain of the parameter (red line). The optimization of the above loss function proceeds, due to the differentiability of the penalty, fully analogous to the unpenalized case and uses the Newton-Raphson algorithm for solving the (penalized) estimating equation. Hence, the unpenalized ML estimation procedure is modified straightforwardly by replacing gradient and Hessian by their `penalized' counterparts: \begin{align*} -\frac{\partial \mathcal{L}^{\mbox{{\tiny pen}}}}{\partial \bbeta } \, \, \, = \, \, \, \frac{\partial \mathcal{L}}{\partial \bbeta } - \lambda \bbeta & \mbox{ and } & \frac{\partial^2 \mathcal{L}^{\mbox{{\tiny pen}}}}{\partial \bbeta \partial \bbeta^{\top}} \, \, \, = \, \, \, \frac{\partial^2 \mathcal{L}}{\partial \bbeta \partial \bbeta^{\top}} - \lambda \mathbf{I}_{pp}. +\frac{\partial \mathcal{L}^{\mbox{{\tiny pen}}}}{\partial \beta } \, \, \, = \, \, \, \frac{\partial \mathcal{L}}{\partial \beta } - \lambda \beta & \mbox{ and } & \frac{\partial^2 \mathcal{L}^{\mbox{{\tiny pen}}}}{\partial \beta \partial \beta^{\top}} \, \, \, = \, \, \, \frac{\partial^2 \mathcal{L}}{\partial \beta \partial \beta^{\top}} - \lambda \mathbf{I}_{pp}. \end{align*} With these at hand, the Newton-Raphson algorithm is (again) reformulated as an iteratively re-weighted least squares algorithm with the updating step changes accordingly to: \begin{align*} -\hat{\bbeta}^{\mbox{{\scriptsize new}}} & = \hat{\bbeta}^{\mbox{{\scriptsize old}}} + \mathbf{V}^{-1} \{ \mathbf{X}^{\top} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta^{\mbox{{\scriptsize old}}}) ] - \lambda \bbeta^{\mbox{{\scriptsize old}}} \} +\hat{\beta}^{\mbox{{\scriptsize new}}} & = \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{V}^{-1} \{ \mathbf{X}^{\top} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}}) ] - \lambda \beta^{\mbox{{\scriptsize old}}} \} \\ -& = \mathbf{V}^{-1} \mathbf{V} \hat{\bbeta}^{\mbox{{\scriptsize old}}} - \lambda \mathbf{V}^{-1} \hat{\bbeta}^{\mbox{{\scriptsize old}}} + \mathbf{V}^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta^{\mbox{{\scriptsize old}}})] +& = \mathbf{V}^{-1} \mathbf{V} \hat{\beta}^{\mbox{{\scriptsize old}}} - \lambda \mathbf{V}^{-1} \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{V}^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] \\ -& = \mathbf{V}^{-1} \mathbf{X}^{\top} \mathbf{W} \{ \mathbf{X} \hat{\bbeta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta^{\mbox{{\scriptsize old}}})] \} +& = \mathbf{V}^{-1} \mathbf{X}^{\top} \mathbf{W} \{ \mathbf{X} \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] \} \\ & = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{Z}, \end{align*} -where $\mathbf{V} = \mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp}$ and $\mathbf{W}$ and $\mathbf{Z}$ as before. Hence, use this to update the estimate of $\bbeta$ until convergence, which yields the desired ridge ML estimate. +where $\mathbf{V} = \mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp}$ and $\mathbf{W}$ and $\mathbf{Z}$ as before. Hence, use this to update the estimate of $\beta$ until convergence, which yields the desired ridge ML estimate. Obviously, the ridge estimate of the logistic regression parameter tends to zero as $\lambda \rightarrow \infty$. Now consider a linear predictor with an intercept that is left unpenalized. When $\lambda$ tends to infinity, all regression coefficients but the intercept vanish. The intercept is left to model the success probability. Hence, in this case $\lim_{\lambda \rightarrow \infty} \hat{\beta}_0 (\lambda) = \log [ \tfrac{1}{n} \sum_{i=1}^n Y_i / \tfrac{1}{n} \sum_{i=1}^n (1-Y_i)]$. @@ -1934,11 +2066,11 @@ FIGURE: [logisticRidge_effectOnPrediction_lambda0.eps, width=400 frac=1.0] The r -The effect of the ridge penalty on parameter estimates propagates to the predictor $\hat{p}_i$. The linear predictor of the linear regression model involving the ridge estimator $\mathbf{X}_i \hat{\bbeta}(\lambda)$ shrinks towards a common value for each $i$, leading to a scale difference between observation and predictor (as seen before in Section ref{sect.ridgeRegressionDataIllustration}). This behaviour transfers to the ridge logistic regression predictor, as is illustrated on simulated data. The dimension and sample size of these data are $p=2$ and $n=200$, respectively. The covariate data are drawn from the standard normal, while that of the response is sampled from a Bernoulli distribution with success probability $P(Y_i=1) = \exp(2 X_{i,1} - 2 X_{i,2}) / [ 1 + \exp(2 X_{i,1} - 2 X_{i,2})]$. The logistic regression model is estimated from these data by means of ridge penalized likelihood maximization with various choices of the penalty parameter. The bottom right plot in Figure ref{fig.logisticRidge_effectOfPenalization} shows the predicted success probability versus the linear predictor for various choices of the penalty parameter. Larger values of the penalty parameter $\lambda$ flatten the slope of this curve. Consequently, for larger $\lambda$ more excessive values of the covariates are needed to achieve the same predicted success probability as those obtained with smaller $\lambda$ at more moderate covariate values. The implications for the resulting classification may become clearer when studying the effect of the penalty parameter on the `failure' and `success regions' respectively defined by: +The effect of the ridge penalty on parameter estimates propagates to the predictor $\hat{p}_i$. The linear predictor of the linear regression model involving the ridge estimator $\mathbf{X}_i \hat{\beta}(\lambda)$ shrinks towards a common value for each $i$, leading to a scale difference between observation and predictor (as seen before in Section ref{sect.ridgeRegressionDataIllustration}). This behaviour transfers to the ridge logistic regression predictor, as is illustrated on simulated data. The dimension and sample size of these data are $p=2$ and $n=200$, respectively. The covariate data are drawn from the standard normal, while that of the response is sampled from a Bernoulli distribution with success probability $P(Y_i=1) = \exp(2 X_{i,1} - 2 X_{i,2}) / [ 1 + \exp(2 X_{i,1} - 2 X_{i,2})]$. The logistic regression model is estimated from these data by means of ridge penalized likelihood maximization with various choices of the penalty parameter. The bottom right plot in Figure ref{fig.logisticRidge_effectOfPenalization} shows the predicted success probability versus the linear predictor for various choices of the penalty parameter. Larger values of the penalty parameter $\lambda$ flatten the slope of this curve. Consequently, for larger $\lambda$ more excessive values of the covariates are needed to achieve the same predicted success probability as those obtained with smaller $\lambda$ at more moderate covariate values. The implications for the resulting classification may become clearer when studying the effect of the penalty parameter on the `failure' and `success regions' respectively defined by: \\ -\indent $\{(x_1, x_2) : P({\color{green}{\mathbf{Y=0}}} \, | \, X_1=x_1, X_2=x_2, \hat{\bbeta}(\lambda)) > 0.75 \}$, +\indent $\{(x_1, x_2) : P({\color{green}{\mathbf{Y=0}}} \, | \, X_1=x_1, X_2=x_2, \hat{\beta}(\lambda)) > 0.75 \}$, \\ -\indent $\{(x_1, x_2) : P({\color{red}{\mathbf{Y=1}}} \, | \, X_1=x_1, X_2=x_2, \hat{\bbeta}(\lambda)) > 0.75 \}$. +\indent $\{(x_1, x_2) : P({\color{red}{\mathbf{Y=1}}} \, | \, X_1=x_1, X_2=x_2, \hat{\beta}(\lambda)) > 0.75 \}$. \\ This separates the design space in a light red (`failure') and light green (`success') domain. The white bar between them is the domain where samples cannot be classified with high enough certainty. As $\lambda$ grows, so does the white area that separates the failure and success regions. Hence, as stronger penalization shrinks the logistic regression parameter estimate towards zero, it produces a predictor that is less outspoken in its class assignments. @@ -1947,18 +2079,18 @@ This separates the design space in a light red (`failure') and light green (`suc ======= Moments ======= -The $1^{\mbox{{\tiny st}}}$ and $2^{\mbox{{\tiny nd}}}$ order moment of the ridge ML parameter of the logistic model may be approximated by the final update of the Newton-Raphson estimate. Assume the one-to-last update $\hat{\bbeta}^{\mbox{{\scriptsize old}}}$ to be non-random and proceed as for the ridge estimator of the linear regression model parameter to arrive at: +The $1^{\mbox{{\tiny st}}}$ and $2^{\mbox{{\tiny nd}}}$ order moment of the ridge ML parameter of the logistic model may be approximated by the final update of the Newton-Raphson estimate. Assume the one-to-last update $\hat{\beta}^{\mbox{{\scriptsize old}}}$ to be non-random and proceed as for the ridge estimator of the linear regression model parameter to arrive at: # \begin{align*} -# & & \hat{\bbeta}^{\mbox{{\scriptsize new}}} = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + 2 \lambda \mathbf{I}_{p \times p} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{z} +# & & \hat{\beta}^{\mbox{{\scriptsize new}}} = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + 2 \lambda \mathbf{I}_{p \times p} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{z} # \end{align*} \begin{align*} -\mathbb{E} \big( \hat{\bbeta}^{\mbox{{\scriptsize new}}} \big) & = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbb{E}( \mathbf{Z}), +\mathbb{E} \big( \hat{\beta}^{\mbox{{\scriptsize new}}} \big) & = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbb{E}( \mathbf{Z}), \\ -\mbox{Var} \big( \hat{\bbeta}^{\mbox{{\scriptsize new}}} \big) & = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \big[ \mbox{Var} ( \mathbf{Z} ) \big] \mathbf{W} \mathbf{X} [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}, +\mbox{Var} \big( \hat{\beta}^{\mbox{{\scriptsize new}}} \big) & = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \big[ \mbox{Var} ( \mathbf{Z} ) \big] \mathbf{W} \mathbf{X} [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}, \end{align*} with \begin{align*} -\mathbb{E}(\mathbf{Z}) & = \{ \mathbf{X} \hat{\bbeta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbb{E}(\mathbf{Y}) - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \bbeta^{\mbox{{\scriptsize old}}})] \}, +\mathbb{E}(\mathbf{Z}) & = \{ \mathbf{X} \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbb{E}(\mathbf{Y}) - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] \}, \\ \mbox{Var}(\mathbf{Z}) & = \mathbf{W}^{-1} \mbox{Var}(\mathbf{Y}) \mathbf{W}^{-1} = \mathbf{W}^{-1}, \end{align*} @@ -1966,9 +2098,9 @@ where the identity $\mbox{Var}(\mathbf{Y}) = \mathbf{W}$ follows from the varian ======= The Bayesian connection ======= -All penalized estimators can be formulated as Bayesian estimators, including the ridge logistic estimator. In particular, ridge estimators correspond to Bayesian estimators with a multivariate normal prior on the regression coefficients. Thus, assume $\bbeta \sim \mathcal{N}(\mathbf{0}_p, \mathbf{\Delta}^{-1})$. The posterior distribution of $\bbeta$ then is: +All penalized estimators can be formulated as Bayesian estimators, including the ridge logistic estimator. In particular, ridge estimators correspond to Bayesian estimators with a multivariate normal prior on the regression coefficients. Thus, assume $\beta \sim \mathcal{N}(\mathbf{0}_p, \mathbf{\Delta}^{-1})$. The posterior distribution of $\beta$ then is: \begin{align*} -f_{\bbeta}(\bbeta \, | \, \mathbf{Y}, \mathbf{X}) & \propto & \Big\{ \prod_{i=1}^n \big[ P(Y_i = 1 \, | \, \mathbf{X}_i) \big]^{Y_i} \big[ P(Y_i = 0 \, | \, \mathbf{X}_i) \big]^{1-Y_i} \Big\} \exp( - \tfrac{1}{2} \bbeta \mathbf{\Delta} \bbeta). +f_{\beta}(\beta \, | \, \mathbf{Y}, \mathbf{X}) & \propto & \Big\{ \prod_{i=1}^n \big[ P(Y_i = 1 \, | \, \mathbf{X}_i) \big]^{Y_i} \big[ P(Y_i = 0 \, | \, \mathbf{X}_i) \big]^{1-Y_i} \Big\} \exp( - \tfrac{1}{2} \beta \mathbf{\Delta} \beta). \end{align*} This does not coincide with any standard distribution. But, under appropriate conditions, the posterior distribution is asymptotically normal. This invites a (multivariate) normal approximation to the posterior distribution above. The Laplace's method provides (cf. \citealp{Bish2006}). @@ -1979,36 +2111,36 @@ FIGURE: [logisticRidge_laplace2posterior.eps, width=400 frac=1.0] Right panel: L Laplace's method *i)* centers the normal approximation at the mode of the posterior, and *ii)* chooses the covariance to match the curvature of the posterior at the mode. The posterior mode is the location of the maximum of the posterior distribution. The location of this maximum coincides with that of the logarithm of the posterior. The latter is the log-likelihood augmented with a ridge penalty. Hence, the posterior mode, which is taken as the mean of the approximating Gaussian, coincides with the ridge logistic estimator. For the covariance of the approximating Gaussian, the logarithm of the posterior is approximated by a second order Taylor series around the posterior mode and limited to second order terms: \begin{align*} -\log[f_{\bbeta}(\bbeta \, | \, \mathbf{Y}, \mathbf{X})] & \propto & -\left. \log[f_{\bbeta}(\bbeta \, | \, \mathbf{Y}, \mathbf{X})] -\right|_{\bbeta = \hat{\bbeta}_{\mbox{{\tiny MAP}}}} +\log[f_{\beta}(\beta \, | \, \mathbf{Y}, \mathbf{X})] & \propto & +\left. \log[f_{\beta}(\beta \, | \, \mathbf{Y}, \mathbf{X})] +\right|_{\beta = \hat{\beta}_{\mbox{{\tiny MAP}}}} \\ -& & + \tfrac{1}{2} (\bbeta - \hat{\bbeta}_{\mbox{{\tiny MAP}}})^{\top} \left. \frac{\partial^2}{\partial \bbeta \partial \bbeta^{\top}} -\log[f_{\bbeta}(\bbeta \, | \, \mathbf{Y}, \mathbf{X})] - \right|_{\bbeta = \hat{\bbeta}_{\mbox{{\tiny MAP}}}} (\bbeta - \hat{\bbeta}_{\mbox{{\tiny MAP}}})^{\top}, +& & + \tfrac{1}{2} (\beta - \hat{\beta}_{\mbox{{\tiny MAP}}})^{\top} \left. \frac{\partial^2}{\partial \beta \partial \beta^{\top}} +\log[f_{\beta}(\beta \, | \, \mathbf{Y}, \mathbf{X})] + \right|_{\beta = \hat{\beta}_{\mbox{{\tiny MAP}}}} (\beta - \hat{\beta}_{\mbox{{\tiny MAP}}})^{\top}, \end{align*} -in which the first order term cancels as the derivative of $f_{\bbeta}(\bbeta \, | \, \mathbf{Y}, \mathbf{X})$ with respect to $\bbeta$ vanishes at the posterior mode - its maximum. Take the exponential of this approximation and match its arguments to that of a multivariate Gaussian $\exp[-\tfrac{1}{2} (\bbeta - \mmu_{\beta})^{\top} \mathbf{\Sigma}_{\bbeta}^{-1} (\bbeta - \mmu_{\beta})]$. The covariance of the sought Gaussian approximation is thus the inverse of the Hessian of the negative penalized log-likelihood. Put together the posterior is approximated by: +in which the first order term cancels as the derivative of $f_{\beta}(\beta \, | \, \mathbf{Y}, \mathbf{X})$ with respect to $\beta$ vanishes at the posterior mode - its maximum. Take the exponential of this approximation and match its arguments to that of a multivariate Gaussian $\exp[-\tfrac{1}{2} (\beta - \mmu_{\beta})^{\top} \mathbf{\Sigma}_{\beta}^{-1} (\beta - \mmu_{\beta})]$. The covariance of the sought Gaussian approximation is thus the inverse of the Hessian of the negative penalized log-likelihood. Put together the posterior is approximated by: \begin{align*} -\bbeta \, | \, \mathbf{Y}, \mathbf{X} \sim \mathcal{N} \Big( \hat{\bbeta}_{\mbox{{\tiny MAP}}}, \Big\{ \mathbf{\Delta} + \sum_{i=1}^n \frac{\exp(\mathbf{X}_i \bbeta)}{ [1+ \exp(\mathbf{X}_i \bbeta) ]^2 } \mathbf{X}_i \mathbf{X}_i^{\top} \Big\}^{-1} \Big). +\beta \, | \, \mathbf{Y}, \mathbf{X} \sim \mathcal{N} \Big( \hat{\beta}_{\mbox{{\tiny MAP}}}, \Big\{ \mathbf{\Delta} + \sum_{i=1}^n \frac{\exp(\mathbf{X}_i \beta)}{ [1+ \exp(\mathbf{X}_i \beta) ]^2 } \mathbf{X}_i \mathbf{X}_i^{\top} \Big\}^{-1} \Big). \end{align*} The Gaussian approximation is convenient but need not be good. Fortunately, the Bernstein-Von Mises Theorem \citep{VdVa2000} tells it is very accurate when the model is regular, the prior smooth, and the sample size sufficiently large. The quality of the approximation for an artificial example data set is shown in Figure ref{fig.logisticRidge_MSEandLaplace2posterior}. ======= Penalty parameter selection ======= -As before the penalty parameter may be chosen through $K$-fold cross-validation. For the $K=n$ case cite{Meij2013} describe a computationally efficient approximation of the leave-one-out cross-validated loglikelihood. It is based on the exact evaluation of the LOOCV loss, discussed in Section ref{subsect.crossvalidation}, that avoided resampling. The approach of cite{Meij2013} hinges upon the first-order Taylor expansion of the left-out penalized loglikelihood of the left-out estimate $\hat{\bbeta}_{-i} (\lambda)$ around $\hat{\bbeta} (\lambda)$, which yields an approximation of the former: +As before the penalty parameter may be chosen through $K$-fold cross-validation. For the $K=n$ case cite{Meij2013} describe a computationally efficient approximation of the leave-one-out cross-validated loglikelihood. It is based on the exact evaluation of the LOOCV loss, discussed in Section ref{subsect.crossvalidation}, that avoided resampling. The approach of cite{Meij2013} hinges upon the first-order Taylor expansion of the left-out penalized loglikelihood of the left-out estimate $\hat{\beta}_{-i} (\lambda)$ around $\hat{\beta} (\lambda)$, which yields an approximation of the former: \begin{align*} -\hat{\bbeta}_{-i} (\lambda) & \approx \hat{\bbeta} (\lambda) - -\left( \left. \frac{\partial^2 \mathcal{L}_{-i}^{\mbox{{\tiny pen}}}}{\partial \bbeta \partial \bbeta^{\top}} \right|_{\bbeta = \hat{\bbeta}(\lambda)} \right)^{-1} \left. \frac{\partial \mathcal{L}_{-i}^{\mbox{{\tiny pen}}}}{\partial \bbeta } \right|_{\bbeta = \hat{\bbeta}(\lambda)} +\hat{\beta}_{-i} (\lambda) & \approx \hat{\beta} (\lambda) - +\left( \left. \frac{\partial^2 \mathcal{L}_{-i}^{\mbox{{\tiny pen}}}}{\partial \beta \partial \beta^{\top}} \right|_{\beta = \hat{\beta}(\lambda)} \right)^{-1} \left. \frac{\partial \mathcal{L}_{-i}^{\mbox{{\tiny pen}}}}{\partial \beta } \right|_{\beta = \hat{\beta}(\lambda)} \\ -& = \hat{\bbeta} (\lambda) + (\mathbf{X}_{- i, \ast}^{\top} \mathbf{W}_{-i, -i} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1} \{ \mathbf{X}_{- i, \ast}^{\top} [\mathbf{Y}_{-i} - \vec{\mathbf{g}}^{-1}(\mathbf{X}_{-i, \ast}; \hat{\bbeta}(\lambda))] - \lambda \hat{\bbeta}(\lambda) \}. +& = \hat{\beta} (\lambda) + (\mathbf{X}_{- i, \ast}^{\top} \mathbf{W}_{-i, -i} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1} \{ \mathbf{X}_{- i, \ast}^{\top} [\mathbf{Y}_{-i} - \vec{\mathbf{g}}^{-1}(\mathbf{X}_{-i, \ast}; \hat{\beta}(\lambda))] - \lambda \hat{\beta}(\lambda) \}. \end{align*} This approximation involves the inverse of a $p \times p$ dimensional matrix, which amounts to the evaluation of $n$ such inverses for the LOOCV loss. As in Section ref{subsect.crossvalidation} this may be avoided. Rewrite both the gradient and the Hessian of the left-out loglikelihood in the approximation of the preceding display: \begin{align*} -\mathbf{X}_{-i, \ast}^{\top} \{ \mathbf{Y}_{-i} - \vec{\mathbf{g}}^{-1}(\mathbf{X}_{-i, \ast}; \hat{\bbeta}(\lambda)]\} - \lambda \hat{\bbeta}(\lambda) -& = \mathbf{X}^{\top} \{ \mathbf{Y} - \vec{\mathbf{g}}^{-1}[\mathbf{X}; \hat{\bbeta}(\lambda)]\} - \lambda \hat{\bbeta}(\lambda) -- \mathbf{X}_{i, \ast}^{\top} \{Y_{i} - g^{-1}[\mathbf{X}_{i, \ast}; \hat{\bbeta}(\lambda)]\} +\mathbf{X}_{-i, \ast}^{\top} \{ \mathbf{Y}_{-i} - \vec{\mathbf{g}}^{-1}(\mathbf{X}_{-i, \ast}; \hat{\beta}(\lambda)]\} - \lambda \hat{\beta}(\lambda) +& = \mathbf{X}^{\top} \{ \mathbf{Y} - \vec{\mathbf{g}}^{-1}[\mathbf{X}; \hat{\beta}(\lambda)]\} - \lambda \hat{\beta}(\lambda) +- \mathbf{X}_{i, \ast}^{\top} \{Y_{i} - g^{-1}[\mathbf{X}_{i, \ast}; \hat{\beta}(\lambda)]\} \\ -& = - \mathbf{X}_{i, \ast}^{\top} \{Y_{i} - g^{-1}[\mathbf{X}_{i, \ast}; \hat{\bbeta}(\lambda)]\} +& = - \mathbf{X}_{i, \ast}^{\top} \{Y_{i} - g^{-1}[\mathbf{X}_{i, \ast}; \hat{\beta}(\lambda)]\} \end{align*} and \begin{align*} @@ -2018,124 +2150,9 @@ and \end{align*} where the Woodbury identity has been used and now $\mathbf{H}_{ii}(\lambda) = \mathbf{W}_{ii} \mathbf{X}_{i, \ast}(\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top}$. Substitute both in the approximation of the left-out ridge logistic regression estimator and manipulate as in Section ref{subsect.crossvalidation} to obtain: \begin{align*} -\hat{\bbeta}_{- i}(\lambda) & \approx \hat{\bbeta}(\lambda) - (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - g^{-1}(\mathbf{X}_{i, \ast}; \hat{\bbeta}(\lambda)) ]. +\hat{\beta}_{- i}(\lambda) & \approx \hat{\beta}(\lambda) - (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - g^{-1}(\mathbf{X}_{i, \ast}; \hat{\beta}(\lambda)) ]. \end{align*} -Hence, the leave-one-out cross-validated loglikelihood $\sum_{i=1}^n \mathcal{L} [Y_i \, | \, \mathbf{X}_{i, \ast}, \hat{\bbeta}_{-i}(\lambda)]$ can now be evaluated by means of a single inverse of a $p \times p$ dimensional matrix and some matrix multiplications. For the performance of this approximation in terms of accuracy and speed confer cite{Meij2013}. - - - - - - -======= Application ======= - -The ridge logistic regression is used here to explain the status (dead or alive) of ovarian cancer samples at the close of the study from gene expression data at baseline. Data stem from the TCGA study \citep{TCGA2011ovarian}, which measured gene expression by means of sequencing technology. Available are 295 samples with both status and transcriptomic profiles. These profiles are composed of 19990 transcript reads. The sequencing data, being representative of the mRNA transcript count, is heavily skewed. cite{Zwie2014} show that a simple transformation of the data prior to model building generally yields a better model than tailor-made approaches. Motivated by this observation the data were - to accommodate the zero counts - $\mbox{asinh}$-transformed. The logistic regression model is then fitted in ridge penalized fashion, leaving the intercept unpenalized. The ridge penalty parameter is chosen through 10-fold cross-validation minimizing the cross-validated error. R-code, and that for the sequel of this example, is to be found below. - -\lstinputlisting{ridgeLogistic_ovarianExample.r} - -The fit of the resulting model is studied. Hereto the fitted linear predictor $\mathbf{X} \hat{\bbeta}(\lambda_{\mbox{\tiny opt}})$ is plotted against the status (Figure ref{fig:logisticRidge_ovarianExample}, left panel). The plot shows some overlap between the boxes, but also a clear separation. The latter suggests gene expression at baseline thus enables us to distinguish surviving from the to-be-diseased ovarian cancer patients. Ideally, a decision rule based on the linear predictor can be formulated to predict an individual's outcome. - -# original latex figure with scale=0.40, angle=0 - -FIGURE: [ridgeLogistic_ovarianExample_fit.ps, width=400 frac=1.0] Left panel: Box plot of the status vs. the fitted linear predictor using the full data set. Right panel: Box plot of the status vs. the linear prediction in the left-out samples of the 10 folds.} label{fig:logisticRidge_ovarianExample - - -The fit, however, is evaluated on the samples that have been used to build the model. This gives no insight on the model's predictive performance on novel samples. A replication of the study is generally costly and comparable data sets need not be at hand. A common workaround is to evaluate the predictive performance on the same data \citep{Subr2010}. This requires to put several samples aside for performance evaluation while the remainder is used for model building. The left-out sample may accidently be chosen to yield an exaggerated (either dramatically poor or overly optimistic) performance. This is avoided through the repetition of this exercise, leaving (groups of) samples out one at the time. The left-out performance evaluations are then averaged and believed to be representative of the predictive performance of the model on novel samples. -Note that, effectively, as the model building involves cross-validation and so does the performance evaluation, a double cross-validation loop is applied. This procedure is applied with a ten-fold split in both loops. Denote the outer folds by $f = 1, \ldots, 10$. Then, $\mathbf{X}_{f}$ and $\mathbf{X}_{-f}$ represent the design matrix of the samples comprising fold $f$ and that of the remaining samples, respectively. Define $\mathbf{Y}_{f}$ and $\mathbf{Y}_{-f}$ similarly. The linear prediction for the left-out fold $f$ is then $\mathbf{X}_{f} \hat{\bbeta}_{-f} (\lambda_{\mbox{{\tiny opt, -f}}})$. For reference to the fit, this is compared to $\mathbf{Y}_{f}$ visually by means of a boxplot as used above (see Figure ref{fig:logisticRidge_ovarianExample}, right panel). The boxes overlap almost perfectly. Hence, little to nothing remains of the predictive power suggested by the boxplot of the fit. The fit may thus give a reasonable description of the data at hand, but it extrapolates poorly to new samples. - - -======= Conclusion ======= - -To deal with response variables other than continuous ones, ridge logistic regression was discussed. High-dimensionally, the empirical identifiability problem then persists. Again, penalization came to the rescue: the ridge penalty may be combined with other link functions than the identity. Properties of ridge regression were shown to carry over to its logistic equivalent. - - - - - - -======= Exercises ======= -\begin{question} label{question.ridgeCoxNewtonRaphson} \mbox{ } -\\ -Consider an experiment involving $n$ cancer samples. For each sample $i$ the transcriptome of its tumor has been profiled and is denoted $\mathbf{X}_{i} = (X_{i1}, \ldots, X_{ip})^{\top}$ where $X_{ij}$ represents the gene $j=1, \ldots, p$ in sample $i$. Additionally, the overall survival data, $(Y_i, c_i)$ for $i=1, \ldots,n$ of these samples is available. In this $Y_i$ denotes the survival time of sample $i$ and $c_i$ the event indicator with $c_i = 0$ and $c_i = 1$ representing non- and censoredness, respectively. You may ignore the possibility of ties in the remainder. - -\begin{compactitem} -\item[*a)*] Write down the Cox proportional regression model that links overall survival times (as the response variable) to the expression levels. - -\item[*b)*] Specify its loss function for penalized maximum partial (!) likelihood estimation of the parameters. Penalization is via the ridge penalty. - -\item[*c)*] From this loss function, derive the estimation equation for the Cox regression coefficients. - -\item[*d)*] Describe (in words) how you would find the `ridge ML estimate'. -\end{compactitem} -\end{question} - -\begin{question} \mbox{ } -\\ -Download the {\tt multtest} package from BioConductor: -\\ -\indent {\tt > source("http://www.bioconductor.org/biocLite.R")} -\\ -\indent {\tt > biocLite("multtest")} -\\ -Activate the library and load leukemia data from the package: -\\ -\indent {\tt > library(multtest)} -\\ -\indent {\tt > data(golub)} -\\ -The objects {\tt golub} and {\tt golub.cl} are now available. The matrix-object {\tt golub} contains the expression profiles of 38 leukemia patients. Each profile comprises expression levels of 3051 genes. The numeric-object {\tt golub.cl} is an indicator variable for the leukemia type (AML or ALL) of the patient. - -\begin{compactitem} -\item[*a)*] Relate the leukemia subtype and the gene expression levels by a logistic regression model. Fit this model by means of penalized maximum likelihood, employing the ridge penalty with penalty parameter $\lambda=1$. This is implemented in the {\tt penalized}-packages available from {\tt CRAN}. *Note:* center (gene-wise) the expression levels around zero. - -\item[*b)*] Obtain the fits from the regression model. The fit is almost perfect. Could this be due to overfitting the data? Alternatively, could it be that the biological information in the gene expression levels indeed determines the leukemia subtype almost perfectly? - -\item[*c)*] To discern between the two explanations for the almost perfect fit, randomly shuffle the subtypes. Refit the logistic regression model and obtain the fits. On the basis of this and the previous fit, which explanation is more plausible? - -\item[*d)*] Compare the fit of the logistic model with different penalty parameters, say $\lambda = 1$ and $\lambda = 1000$. How does $\lambda$ influence the possibility of overfitting the data? - -\item[*e)*] Describe what you would do to prevent overfitting. -\end{compactitem} -\end{question} - - -\begin{question} label{question.ridgeLogisticBreastData} \mbox{ } -\\ -Download the {\tt breastCancerNKI} package from BioConductor: -\\ -\indent {\tt > source("http://www.bioconductor.org/biocLite.R")} -\\ -\indent {\tt > biocLite("breastCancerNKI")} -\\ -Activate the library and load leukemia data from the package: -\\ -\indent {\tt > library(breastCancerNKI)} -\\ -\indent {\tt > data(nki)} -\\ -The eset-object {\tt nki} is now available. It contains the expression profiles of 337 breast cancer patients. Each profile comprises expression levels of 24481 genes. Extract the expression data from the object, remove all genes with missing values, center the gene expression gene-wise around zero, and limit the data set to the first thousand genes. The reduction of the gene dimensionality is only for computational speed. -\\ -\indent {\tt X <- exprs(nki) } -\\ -\indent {\tt X <- X[-which(rowSums(is.na(X)) > 0),] } -\\ -\indent {\tt X <- apply(X[1:1000,], 1, function(X){ X - mean(X) }) }. -\\ -Furthermore, extract the estrogen receptor status (short: ER status), an important prognostic indicator for breast cancer. -\\ -\indent {\tt Y <- pData(nki)[,8] } - - -\begin{compactitem} -\item[*a)*] Relate the ER status and the gene expression levels by a logistic regression model, which is fitted by means of ridge penalized maximum likelihood. First, find the optimal value of the penalty parameter of $\lambda$ by means of cross-validation. This is implemented in {\tt optL2}-function of the {\tt penalized}-package available from {\tt CRAN}. - -\item[*b)*] Evaluate whether the cross-validated likelihood indeed attains a maximum at the optimal value of $\lambda$. This can be done with the {\tt profL2}-function of the {\tt penalized}-package available from {\tt CRAN}. - -\item[*c)*] Investigate the sensitivity of the penalty parameter selection with respect to the choice of the cross-validation fold. - -\item[*d)*] Does the optimal lambda produce a reasonable fit? -\end{compactitem} -\end{question} +Hence, the leave-one-out cross-validated loglikelihood $\sum_{i=1}^n \mathcal{L} [Y_i \, | \, \mathbf{X}_{i, \ast}, \hat{\beta}_{-i}(\lambda)]$ can now be evaluated by means of a single inverse of a $p \times p$ dimensional matrix and some matrix multiplications. For the performance of this approximation in terms of accuracy and speed confer cite{Meij2013}. From 1b59ce5a0ca2751461ec29cf4523039fee4fb902 Mon Sep 17 00:00:00 2001 From: mhjensen Date: Wed, 5 Sep 2018 16:46:51 +0200 Subject: [PATCH 06/12] added hint to exercise 5 --- doc/Projects/2018/hw2/html/hw2-bs.html | 7 +++++-- doc/Projects/2018/hw2/html/hw2.html | 7 +++++-- .../2018/hw2/ipynb/ipynb-hw2-src.tar.gz | Bin 207 -> 207 bytes doc/Projects/2018/hw2/pdf/hw2.p.tex | 6 ++++-- doc/Projects/2018/hw2/pdf/hw2.pdf | Bin 198097 -> 198515 bytes doc/Projects/2018/hw2/pdf/hw2.tex | 6 ++++-- doc/src/Projects/2018/Exercises/hw2.do.txt | 6 ++++-- 7 files changed, 22 insertions(+), 10 deletions(-) diff --git a/doc/Projects/2018/hw2/html/hw2-bs.html b/doc/Projects/2018/hw2/html/hw2-bs.html index 5ff410dfb..2cac701d8 100644 --- a/doc/Projects/2018/hw2/html/hw2-bs.html +++ b/doc/Projects/2018/hw2/html/hw2-bs.html @@ -171,12 +171,15 @@ Discuss these quantities as functions of the variable \( \lambda \) in the Ridge

    Using the singular value decomposition, show that the variance of the direction vector -\( \hat{z}_i=\hat{X}\hat{v}_i \) is equal to (equation (3.49) of Hastie et al.) +\( \hat{z}_i=\hat{X}\hat{v}_i=\hat{u}_1d_1 \) is equal to (equation (3.49) of Hastie et al.) $$ \mathrm{Var}(\hat{z}_i)=\frac{d_i^2}{N}, $$ -where \( d_i \) are the singular values of the matrix \( \hat{X} \). Give an interpretation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. +where \( d_i \) are the singular values of the matrix \( \hat{X} \). In Hastie et al, the matrix elements of \( X \) are centered. The consequence is that the mean values of for example \( \hat{u}_i \) are zero. + +

    +Give an interpretation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise.

    diff --git a/doc/Projects/2018/hw2/html/hw2.html b/doc/Projects/2018/hw2/html/hw2.html index 66482871e..102ba1e39 100644 --- a/doc/Projects/2018/hw2/html/hw2.html +++ b/doc/Projects/2018/hw2/html/hw2.html @@ -136,12 +136,15 @@ Discuss these quantities as functions of the variable \( \lambda \) in the Ridge

    Using the singular value decomposition, show that the variance of the direction vector -\( \hat{z}_i=\hat{X}\hat{v}_i \) is equal to (equation (3.49) of Hastie et al.) +\( \hat{z}_i=\hat{X}\hat{v}_i=\hat{u}_1d_1 \) is equal to (equation (3.49) of Hastie et al.) $$ \mathrm{Var}(\hat{z}_i)=\frac{d_i^2}{N}, $$ -where \( d_i \) are the singular values of the matrix \( \hat{X} \). Give an interpretation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. +where \( d_i \) are the singular values of the matrix \( \hat{X} \). In Hastie et al, the matrix elements of \( X \) are centered. The consequence is that the mean values of for example \( \hat{u}_i \) are zero. + +

    @@ -222,7 +251,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Aug 24, 2018

    +

    Sep 6, 2018


    @@ -246,7 +275,7 @@ MathJax.Hub.Config({

  • 9
  • 10
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs001.html b/doc/pub/Regression/html/._Regression-bs001.html index 33c014dc2..f1cdcf478 100644 --- a/doc/pub/Regression/html/._Regression-bs001.html +++ b/doc/pub/Regression/html/._Regression-bs001.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -243,7 +272,7 @@ A regression model aims at finding a likelihood function \( p(y\vert \hat{x}) \)
  • 10
  • 11
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs002.html b/doc/pub/Regression/html/._Regression-bs002.html index 25f3b7f34..523f9d68c 100644 --- a/doc/pub/Regression/html/._Regression-bs002.html +++ b/doc/pub/Regression/html/._Regression-bs002.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,19 +232,29 @@ MathJax.Hub.Config({ -

    General linear models

    +

    Regression analysis, overarching aims II

    -Before we proceed let us study a case from linear algebra where we aim at fitting a set of data \( \hat{y}=[y_0,y_1,\dots,y_{n-1}] \). We could think of these data as a result of an experiment or a complicated numerical experiment. These data are functions of a series of variables \( \hat{x}=[x_0,x_1,\dots,x_{n-1}] \), that is \( y_i = y(x_i) \) with \( i=0,1,2,\dots,n-1 \). The variables \( x_i \) could represent physical quantities like time, temperature, position etc. We assume that \( y(x) \) is a smooth function.

    -Since obtaining these data points may not be trivial, we want to use these data to fit a function which can allow us to make predictions for values of \( y \) which are not in the present set. The perhaps simplest approach is to assume we can parametrize our function in terms of a polynomial of degree \( n-1 \) with \( n \) points, that is -$$ -y=y(x) \rightarrow y(x_i)=\tilde{y}_i+\epsilon_i=\sum_{j=0}^{n-1} \beta_i x_i^j+\epsilon_i, -$$ - -where \( \epsilon_i \) is the error in our approximation. +Consider an experiment in which \( p \) characteristics of \( n \) samples are +measured. The data from this experiment are denoted \( \mathbf{X} \), with +\( \mathbf{X} \) as above. The matrix \( \mathbf{X} \) is called the design +matrix. Additional information of the samples is available in the +form of \( \mathbf{Y} \) (also as above). The variable \( \mathbf{Y} \) is +generally referred to as the response variable. The aim of +regression analysis is to explain \( \mathbf{Y} \) in terms of +\( \mathbf{X} \) through a functional relationship like \( Y_i = +f(\mathbf{X}_{i,\ast}) \). When no prior knowledge on the form of +\( f(\cdot) \) is available, it is common to assume a linear relationship +between \( \mathbf{X} \) and \( \mathbf{Y} \). This assumption gives rise to +the linear regression model where \( \beta = (\beta_1, \ldots, +\beta_p)^{\top} \) is the regression parameter. The parameter +\( \beta_j \), \( j=1, \ldots, p \), represents the effect size of covariate +\( j \) on the response. That is, for each unit change in covariate \( j \) +(while keeping the other covariates fixed) the observed change in the +response is equal to \( \beta_j \).

    @@ -240,7 +279,7 @@ where \( \epsilon_i \) is the error in our approximation.
  • 11
  • 12
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs003.html b/doc/pub/Regression/html/._Regression-bs003.html index 89470dd65..d18ec8f83 100644 --- a/doc/pub/Regression/html/._Regression-bs003.html +++ b/doc/pub/Regression/html/._Regression-bs003.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,20 +232,21 @@ MathJax.Hub.Config({ -

    Rewriting the fitting procedure as a linear algebra problem

    +

    General linear models

    -For every set of values \( y_i,x_i \) we have thus the corresponding set of equations +Before we proceed let us study a case from linear algebra where we aim at fitting a set of data \( \hat{y}=[y_0,y_1,\dots,y_{n-1}] \). We could think of these data as a result of an experiment or a complicated numerical experiment. These data are functions of a series of variables \( \hat{x}=[x_0,x_1,\dots,x_{n-1}] \), that is \( y_i = y(x_i) \) with \( i=0,1,2,\dots,n-1 \). The variables \( x_i \) could represent physical quantities like time, temperature, position etc. We assume that \( y(x) \) is a smooth function. + +

    +Since obtaining these data points may not be trivial, we want to use these data to fit a function which can allow us to make predictions for values of \( y \) which are not in the present set. The perhaps simplest approach is to assume we can parametrize our function in terms of a polynomial of degree \( n-1 \) with \( n \) points, that is $$ -\begin{align*} -y_0&=\beta_0+\beta_1x_0^1+\beta_2x_0^2+\dots+\beta_{n-1}x_0^{n-1}+\epsilon_0\\ -y_1&=\beta_0+\beta_1x_1^1+\beta_2x_1^2+\dots+\beta_{n-1}x_1^{n-1}+\epsilon_1\\ -y_2&=\beta_0+\beta_1x_2^1+\beta_2x_2^2+\dots+\beta_{n-1}x_2^{n-1}+\epsilon_2\\ -\dots & \dots \\ -y_{n-1}&=\beta_0+\beta_1x_{n-1}^1+\beta_2x_{n-1}^2+\dots+\beta_1x_{n-1}^{n-1}+\epsilon_{n-1}.\\ -\end{align*} +y=y(x) \rightarrow y(x_i)=\tilde{y}_i+\epsilon_i=\sum_{j=0}^{n-1} \beta_i x_i^j+\epsilon_i, $$ + +where \( \epsilon_i \) is the error in our approximation. + +

    @@ -240,7 +270,7 @@ $$
  • 12
  • 13
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs004.html b/doc/pub/Regression/html/._Regression-bs004.html index 2140156d2..643f337c1 100644 --- a/doc/pub/Regression/html/._Regression-bs004.html +++ b/doc/pub/Regression/html/._Regression-bs004.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,40 +232,19 @@ MathJax.Hub.Config({ -

    Rewriting the fitting procedure as a linear algebra problem, follows

    +

    Rewriting the fitting procedure as a linear algebra problem

    -Defining the vectors +For every set of values \( y_i,x_i \) we have thus the corresponding set of equations $$ -\hat{y} = [y_0,y_1, y_2,\dots, y_{n-1}]^T, -$$ - -and -$$ -\hat{\beta} = [\beta_0,\beta_1, \beta_2,\dots, \beta_{n-1}]^T, -$$ - -and -$$ -\hat{\epsilon} = [\epsilon_0,\epsilon_1, \epsilon_2,\dots, \epsilon_{n-1}]^T, -$$ - -and the matrix -$$ -\hat{X}= -\begin{bmatrix} -1& x_{0}^1 &x_{0}^2& \dots & \dots &x_{0}^{n-1}\\ -1& x_{1}^1 &x_{1}^2& \dots & \dots &x_{1}^{n-1}\\ -1& x_{2}^1 &x_{2}^2& \dots & \dots &x_{2}^{n-1}\\ -\dots& \dots &\dots& \dots & \dots &\dots\\ -1& x_{n-1}^1 &x_{n-1}^2& \dots & \dots &x_{n-1}^{n-1}\\ -\end{bmatrix} -$$ - -we can rewrite our equations as -$$ -\hat{y} = \hat{X}\hat{\beta}+\hat{\epsilon}. +\begin{align*} +y_0&=\beta_0+\beta_1x_0^1+\beta_2x_0^2+\dots+\beta_{n-1}x_0^{n-1}+\epsilon_0\\ +y_1&=\beta_0+\beta_1x_1^1+\beta_2x_1^2+\dots+\beta_{n-1}x_1^{n-1}+\epsilon_1\\ +y_2&=\beta_0+\beta_1x_2^1+\beta_2x_2^2+\dots+\beta_{n-1}x_2^{n-1}+\epsilon_2\\ +\dots & \dots \\ +y_{n-1}&=\beta_0+\beta_1x_{n-1}^1+\beta_2x_{n-1}^2+\dots+\beta_1x_{n-1}^{n-1}+\epsilon_{n-1}.\\ +\end{align*} $$

    @@ -262,7 +270,7 @@ $$
  • 13
  • 14
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs005.html b/doc/pub/Regression/html/._Regression-bs005.html index af0a02dcd..79e79e7b3 100644 --- a/doc/pub/Regression/html/._Regression-bs005.html +++ b/doc/pub/Regression/html/._Regression-bs005.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,22 +232,40 @@ MathJax.Hub.Config({ -

    Generalizing the fitting procedure as a linear algebra problem

    +

    Rewriting the fitting procedure as a linear algebra problem, follows

    -We are obviously not limited to the above polynomial. We could replace the various powers of \( x \) with elements of Fourier series, that is, instead of \( x_i^j \) we could have \( \cos{(j x_i)} \) or \( \sin{(j x_i)} \), or time series or other orthogonal functions. -For every set of values \( y_i,x_i \) we can then generalize the equations to +Defining the vectors $$ -\begin{align*} -y_0&=\beta_0x_{00}+\beta_1x_{01}+\beta_2x_{02}+\dots+\beta_{n-1}x_{0n-1}+\epsilon_0\\ -y_1&=\beta_0x_{10}+\beta_1x_{11}+\beta_2x_{12}+\dots+\beta_{n-1}x_{1n-1}+\epsilon_1\\ -y_2&=\beta_0x_{20}+\beta_1x_{21}+\beta_2x_{22}+\dots+\beta_{n-1}x_{2n-1}+\epsilon_2\\ -\dots & \dots \\ -y_{i}&=\beta_0x_{i0}+\beta_1x_{i1}+\beta_2x_{i2}+\dots+\beta_{n-1}x_{in-1}+\epsilon_i\\ -\dots & \dots \\ -y_{n-1}&=\beta_0x_{n-1,0}+\beta_1x_{n-1,2}+\beta_2x_{n-1,2}+\dots+\beta_1x_{n-1,n-1}+\epsilon_{n-1}.\\ -\end{align*} +\hat{y} = [y_0,y_1, y_2,\dots, y_{n-1}]^T, +$$ + +and +$$ +\hat{\beta} = [\beta_0,\beta_1, \beta_2,\dots, \beta_{n-1}]^T, +$$ + +and +$$ +\hat{\epsilon} = [\epsilon_0,\epsilon_1, \epsilon_2,\dots, \epsilon_{n-1}]^T, +$$ + +and the matrix +$$ +\hat{X}= +\begin{bmatrix} +1& x_{0}^1 &x_{0}^2& \dots & \dots &x_{0}^{n-1}\\ +1& x_{1}^1 &x_{1}^2& \dots & \dots &x_{1}^{n-1}\\ +1& x_{2}^1 &x_{2}^2& \dots & \dots &x_{2}^{n-1}\\ +\dots& \dots &\dots& \dots & \dots &\dots\\ +1& x_{n-1}^1 &x_{n-1}^2& \dots & \dots &x_{n-1}^{n-1}\\ +\end{bmatrix} +$$ + +we can rewrite our equations as +$$ +\hat{y} = \hat{X}\hat{\beta}+\hat{\epsilon}. $$

    @@ -245,7 +292,7 @@ $$
  • 14
  • 15
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs006.html b/doc/pub/Regression/html/._Regression-bs006.html index 8e92c7d0c..0666eaf89 100644 --- a/doc/pub/Regression/html/._Regression-bs006.html +++ b/doc/pub/Regression/html/._Regression-bs006.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -207,24 +236,19 @@ MathJax.Hub.Config({

    -We redefine in turn the matrix \( \hat{X} \) as +We are obviously not limited to the above polynomial. We could replace the various powers of \( x \) with elements of Fourier series, that is, instead of \( x_i^j \) we could have \( \cos{(j x_i)} \) or \( \sin{(j x_i)} \), or time series or other orthogonal functions. +For every set of values \( y_i,x_i \) we can then generalize the equations to $$ -\hat{X}= -\begin{bmatrix} -x_{00}& x_{01} &x_{02}& \dots & \dots &x_{0,n-1}\\ -x_{10}& x_{11} &x_{12}& \dots & \dots &x_{1,n-1}\\ -x_{20}& x_{21} &x_{22}& \dots & \dots &x_{2,n-1}\\ -\dots& \dots &\dots& \dots & \dots &\dots\\ -x_{n-1,0}& x_{n-1,1} &x_{n-1,2}& \dots & \dots &x_{n-1,n-1}\\ -\end{bmatrix} +\begin{align*} +y_0&=\beta_0x_{00}+\beta_1x_{01}+\beta_2x_{02}+\dots+\beta_{n-1}x_{0n-1}+\epsilon_0\\ +y_1&=\beta_0x_{10}+\beta_1x_{11}+\beta_2x_{12}+\dots+\beta_{n-1}x_{1n-1}+\epsilon_1\\ +y_2&=\beta_0x_{20}+\beta_1x_{21}+\beta_2x_{22}+\dots+\beta_{n-1}x_{2n-1}+\epsilon_2\\ +\dots & \dots \\ +y_{i}&=\beta_0x_{i0}+\beta_1x_{i1}+\beta_2x_{i2}+\dots+\beta_{n-1}x_{in-1}+\epsilon_i\\ +\dots & \dots \\ +y_{n-1}&=\beta_0x_{n-1,0}+\beta_1x_{n-1,2}+\beta_2x_{n-1,2}+\dots+\beta_1x_{n-1,n-1}+\epsilon_{n-1}.\\ +\end{align*} $$ - -and without loss of generality we rewrite again our equations as -$$ -\hat{y} = \hat{X}\hat{\beta}+\hat{\epsilon}. -$$ - -The left-hand side of this equation forms know. Our error vector \( \hat{\epsilon} \) and the parameter vector \( \hat{\beta} \) are our unknow quantities. How can we obtain the optimal set of \( \beta_i \) values?

    @@ -251,7 +275,7 @@ The left-hand side of this equation forms know. Our error vector \( \hat{\epsilo
  • 15
  • 16
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs007.html b/doc/pub/Regression/html/._Regression-bs007.html index 039c86a9e..1cbc6bb56 100644 --- a/doc/pub/Regression/html/._Regression-bs007.html +++ b/doc/pub/Regression/html/._Regression-bs007.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,22 +232,28 @@ MathJax.Hub.Config({ -

    Optimizing our parameters

    +

    Generalizing the fitting procedure as a linear algebra problem

    -We have defined the matrix \( \hat{X} \) +We redefine in turn the matrix \( \hat{X} \) as $$ -\begin{align*} -y_0&=\beta_0x_{00}+\beta_1x_{01}+\beta_2x_{02}+\dots+\beta_{n-1}x_{0n-1}+\epsilon_0\\ -y_1&=\beta_0x_{10}+\beta_1x_{11}+\beta_2x_{12}+\dots+\beta_{n-1}x_{1n-1}+\epsilon_1\\ -y_2&=\beta_0x_{20}+\beta_1x_{21}+\beta_2x_{22}+\dots+\beta_{n-1}x_{2n-1}+\epsilon_1\\ -\dots & \dots \\ -y_{i}&=\beta_0x_{i0}+\beta_1x_{i1}+\beta_2x_{i2}+\dots+\beta_{n-1}x_{in-1}+\epsilon_1\\ -\dots & \dots \\ -y_{n-1}&=\beta_0x_{n-1,0}+\beta_1x_{n-1,2}+\beta_2x_{n-1,2}+\dots+\beta_1x_{n-1,n-1}+\epsilon_{n-1}.\\ -\end{align*} +\hat{X}= +\begin{bmatrix} +x_{00}& x_{01} &x_{02}& \dots & \dots &x_{0,n-1}\\ +x_{10}& x_{11} &x_{12}& \dots & \dots &x_{1,n-1}\\ +x_{20}& x_{21} &x_{22}& \dots & \dots &x_{2,n-1}\\ +\dots& \dots &\dots& \dots & \dots &\dots\\ +x_{n-1,0}& x_{n-1,1} &x_{n-1,2}& \dots & \dots &x_{n-1,n-1}\\ +\end{bmatrix} $$ + +and without loss of generality we rewrite again our equations as +$$ +\hat{y} = \hat{X}\hat{\beta}+\hat{\epsilon}. +$$ + +The left-hand side of this equation forms know. Our error vector \( \hat{\epsilon} \) and the parameter vector \( \hat{\beta} \) are our unknow quantities. How can we obtain the optimal set of \( \beta_i \) values?

    @@ -246,7 +281,7 @@ $$
  • 16
  • 17
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs008.html b/doc/pub/Regression/html/._Regression-bs008.html index c165bad53..ebb470521 100644 --- a/doc/pub/Regression/html/._Regression-bs008.html +++ b/doc/pub/Regression/html/._Regression-bs008.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,23 +232,21 @@ MathJax.Hub.Config({ -

    Optimizing our parameters, more details

    +

    Optimizing our parameters

    -We well use this matrix to define the approximation \( \hat{\tilde{y}} \) via the unknown quantity \( \hat{\beta} \) as +We have defined the matrix \( \hat{X} \) $$ -\hat{\tilde{y}}= \hat{X}\hat{\beta}, -$$ - -and in order to find the optimal parameters \( \beta_i \) instead of solving the above linear algebra problem, we define a function which gives a measure of the spread between the values \( y_i \) (which represent hopefully the exact values) and the parametrized values \( \tilde{y}_i \), namely -$$ -Q(\hat{\beta})=\sum_{i=0}^{n-1}\left(y_i-\tilde{y}_i\right)^2=\left(\hat{y}-\hat{\tilde{y}}\right)^T\left(\hat{y}-\hat{\tilde{y}}\right), -$$ - -or using the matrix \( \hat{X} \) as -$$ -Q(\hat{\beta})=\left(\hat{y}-\hat{X}\hat{\beta}\right)^T\left(\hat{y}-\hat{X}\hat{\beta}\right). +\begin{align*} +y_0&=\beta_0x_{00}+\beta_1x_{01}+\beta_2x_{02}+\dots+\beta_{n-1}x_{0n-1}+\epsilon_0\\ +y_1&=\beta_0x_{10}+\beta_1x_{11}+\beta_2x_{12}+\dots+\beta_{n-1}x_{1n-1}+\epsilon_1\\ +y_2&=\beta_0x_{20}+\beta_1x_{21}+\beta_2x_{22}+\dots+\beta_{n-1}x_{2n-1}+\epsilon_1\\ +\dots & \dots \\ +y_{i}&=\beta_0x_{i0}+\beta_1x_{i1}+\beta_2x_{i2}+\dots+\beta_{n-1}x_{in-1}+\epsilon_1\\ +\dots & \dots \\ +y_{n-1}&=\beta_0x_{n-1,0}+\beta_1x_{n-1,2}+\beta_2x_{n-1,2}+\dots+\beta_1x_{n-1,n-1}+\epsilon_{n-1}.\\ +\end{align*} $$

    @@ -249,7 +276,7 @@ $$
  • 17
  • 18
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs009.html b/doc/pub/Regression/html/._Regression-bs009.html index 8cc5f39fa..2c4747519 100644 --- a/doc/pub/Regression/html/._Regression-bs009.html +++ b/doc/pub/Regression/html/._Regression-bs009.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,39 +232,24 @@ MathJax.Hub.Config({ -

    Interpretations and optimizing our parameters

    +

    Optimizing our parameters, more details

    -The function +We well use this matrix to define the approximation \( \hat{\tilde{y}} \) via the unknown quantity \( \hat{\beta} \) as $$ -Q(\hat{\beta})=\left(\hat{y}-\hat{X}\hat{\beta}\right)^T\left(\hat{y}-\hat{X}\hat{\beta}\right), +\hat{\tilde{y}}= \hat{X}\hat{\beta}, $$ -can be linked to the variance of the quantity \( y_i \) if we interpret the latter as the mean value of for example a numerical experiment. When linking below with the maximum likelihood approach below, we will indeed interpret \( y_i \) as a mean value +and in order to find the optimal parameters \( \beta_i \) instead of solving the above linear algebra problem, we define a function which gives a measure of the spread between the values \( y_i \) (which represent hopefully the exact values) and the parametrized values \( \tilde{y}_i \), namely $$ -y_{i}=\langle y_i \rangle = \beta_0x_{i,0}+\beta_1x_{i,1}+\beta_2x_{i,2}+\dots+\beta_{n-1}x_{i,n-1}+\epsilon_i, +Q(\hat{\beta})=\sum_{i=0}^{n-1}\left(y_i-\tilde{y}_i\right)^2=\left(\hat{y}-\hat{\tilde{y}}\right)^T\left(\hat{y}-\hat{\tilde{y}}\right), $$ -where \( \langle y_i \rangle \) is the mean value. Keep in mind also that till now we have treated \( y_i \) as the exact value. Normally, the response (dependent or outcome) variable \( y_i \) the outcome of a numerical experiment or another type of experiment and is thus only an approximation to the true value. It is then always accompanied by an error estimate, often limited to a statistical error estimate given by the standard deviation discussed earlier. In the discussion here we will treat \( y_i \) as our exact value for the response variable. - -

    -In order to find the parameters \( \beta_i \) we will then minimize the spread of \( Q(\hat{\beta}) \) by requiring +or using the matrix \( \hat{X} \) as $$ -\frac{\partial Q(\hat{\beta})}{\partial \beta_j} = \frac{\partial }{\partial \beta_j}\left[ \sum_{i=0}^{n-1}\left(y_i-\beta_0x_{i,0}-\beta_1x_{i,1}-\beta_2x_{i,2}-\dots-\beta_{n-1}x_{i,n-1}\right)^2\right]=0, +Q(\hat{\beta})=\left(\hat{y}-\hat{X}\hat{\beta}\right)^T\left(\hat{y}-\hat{X}\hat{\beta}\right). $$ - -which results in -$$ -\frac{\partial Q(\hat{\beta})}{\partial \beta_j} = -2\left[ \sum_{i=0}^{n-1}x_{ij}\left(y_i-\beta_0x_{i,0}-\beta_1x_{i,1}-\beta_2x_{i,2}-\dots-\beta_{n-1}x_{i,n-1}\right)\right]=0, -$$ - -or in a matrix-vector form as -$$ -\frac{\partial Q(\hat{\beta})}{\partial \hat{\beta}} = 0 = \hat{X}^T\left( \hat{y}-\hat{X}\hat{\beta}\right). -$$ - -

    @@ -265,7 +279,7 @@ $$
  • 18
  • 19
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs010.html b/doc/pub/Regression/html/._Regression-bs010.html index a9e44dede..90e7a3478 100644 --- a/doc/pub/Regression/html/._Regression-bs010.html +++ b/doc/pub/Regression/html/._Regression-bs010.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -207,19 +236,32 @@ MathJax.Hub.Config({

    -We can rewrite +The function $$ -\frac{\partial Q(\hat{\beta})}{\partial \hat{\beta}} = 0 = \hat{X}^T\left( \hat{y}-\hat{X}\hat{\beta}\right), +Q(\hat{\beta})=\left(\hat{y}-\hat{X}\hat{\beta}\right)^T\left(\hat{y}-\hat{X}\hat{\beta}\right), $$ -as +can be linked to the variance of the quantity \( y_i \) if we interpret the latter as the mean value of for example a numerical experiment. When linking below with the maximum likelihood approach below, we will indeed interpret \( y_i \) as a mean value $$ -\hat{X}^T\hat{y} = \hat{X}^T\hat{X}\hat{\beta}, +y_{i}=\langle y_i \rangle = \beta_0x_{i,0}+\beta_1x_{i,1}+\beta_2x_{i,2}+\dots+\beta_{n-1}x_{i,n-1}+\epsilon_i, $$ -and if the matrix \( \hat{X}^T\hat{X} \) is invertible we have the solution +where \( \langle y_i \rangle \) is the mean value. Keep in mind also that till now we have treated \( y_i \) as the exact value. Normally, the response (dependent or outcome) variable \( y_i \) the outcome of a numerical experiment or another type of experiment and is thus only an approximation to the true value. It is then always accompanied by an error estimate, often limited to a statistical error estimate given by the standard deviation discussed earlier. In the discussion here we will treat \( y_i \) as our exact value for the response variable. + +

    +In order to find the parameters \( \beta_i \) we will then minimize the spread of \( Q(\hat{\beta}) \) by requiring $$ -\hat{\beta} =\left(\hat{X}^T\hat{X}\right)^{-1}\hat{X}^T\hat{y}. +\frac{\partial Q(\hat{\beta})}{\partial \beta_j} = \frac{\partial }{\partial \beta_j}\left[ \sum_{i=0}^{n-1}\left(y_i-\beta_0x_{i,0}-\beta_1x_{i,1}-\beta_2x_{i,2}-\dots-\beta_{n-1}x_{i,n-1}\right)^2\right]=0, +$$ + +which results in +$$ +\frac{\partial Q(\hat{\beta})}{\partial \beta_j} = -2\left[ \sum_{i=0}^{n-1}x_{ij}\left(y_i-\beta_0x_{i,0}-\beta_1x_{i,1}-\beta_2x_{i,2}-\dots-\beta_{n-1}x_{i,n-1}\right)\right]=0, +$$ + +or in a matrix-vector form as +$$ +\frac{\partial Q(\hat{\beta})}{\partial \hat{\beta}} = 0 = \hat{X}^T\left( \hat{y}-\hat{X}\hat{\beta}\right). $$

    @@ -253,7 +295,7 @@ $$

  • 19
  • 20
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs011.html b/doc/pub/Regression/html/._Regression-bs011.html index d48d2e413..94864f6a6 100644 --- a/doc/pub/Regression/html/._Regression-bs011.html +++ b/doc/pub/Regression/html/._Regression-bs011.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -207,23 +236,21 @@ MathJax.Hub.Config({

    -The residuals \( \hat{\epsilon} \) are in turn given by +We can rewrite $$ -\hat{\epsilon} = \hat{y}-\hat{\tilde{y}} = \hat{y}-\hat{X}\hat{\beta}, +\frac{\partial Q(\hat{\beta})}{\partial \hat{\beta}} = 0 = \hat{X}^T\left( \hat{y}-\hat{X}\hat{\beta}\right), $$ -and with +as $$ -\hat{X}^T\left( \hat{y}-\hat{X}\hat{\beta}\right)= 0, +\hat{X}^T\hat{y} = \hat{X}^T\hat{X}\hat{\beta}, $$ -we have +and if the matrix \( \hat{X}^T\hat{X} \) is invertible we have the solution $$ -\hat{X}^T\hat{\epsilon}=\hat{X}^T\left( \hat{y}-\hat{X}\hat{\beta}\right)= 0, +\hat{\beta} =\left(\hat{X}^T\hat{X}\right)^{-1}\hat{X}^T\hat{y}. $$ -meaning that the solution for \( \hat{\beta} \) is the one which minimizes the residuals. Later we will link this with the maximum likelihood approach. -

    @@ -255,7 +282,7 @@ meaning that the solution for \( \hat{\beta} \) is the one which minimizes the r
  • 20
  • 21
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs012.html b/doc/pub/Regression/html/._Regression-bs012.html index 70f805206..dd8c3fbf9 100644 --- a/doc/pub/Regression/html/._Regression-bs012.html +++ b/doc/pub/Regression/html/._Regression-bs012.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,21 +232,26 @@ MathJax.Hub.Config({ -

    The \( \chi^2 \) function

    +

    Interpretations and optimizing our parameters

    - -

    -Normally, the response (dependent or outcome) variable \( y_i \) the outcome of a numerical experiment or another type of experiment and is thus only an approximation to the true value. It is then always accompanied by an error estimate, often limited to a statistical error estimate given by the standard deviation discussed earlier. In the discussion here we will treat \( y_i \) as our exact value for the response variable. - -

    -Introducing the standard deviation \( \sigma_i \) for each measurement \( y_i \), we define now the \( \chi^2 \) function as +The residuals \( \hat{\epsilon} \) are in turn given by $$ -\chi^2(\hat{\beta})=\sum_{i=0}^{n-1}\frac{\left(y_i-\tilde{y}_i\right)^2}{\sigma_i^2}=\left(\hat{y}-\hat{\tilde{y}}\right)^T\frac{1}{\hat{\Sigma^2}}\left(\hat{y}-\hat{\tilde{y}}\right), +\hat{\epsilon} = \hat{y}-\hat{\tilde{y}} = \hat{y}-\hat{X}\hat{\beta}, $$ -where the matrix \( \hat{\Sigma} \) is a diagonal matrix with \( \sigma_i \) as matrix elements. +and with +$$ +\hat{X}^T\left( \hat{y}-\hat{X}\hat{\beta}\right)= 0, +$$ + +we have +$$ +\hat{X}^T\hat{\epsilon}=\hat{X}^T\left( \hat{y}-\hat{X}\hat{\beta}\right)= 0, +$$ + +meaning that the solution for \( \hat{\beta} \) is the one which minimizes the residuals. Later we will link this with the maximum likelihood approach.

    @@ -250,7 +284,7 @@ where the matrix \( \hat{\Sigma} \) is a diagonal matrix with \( \sigma_i \) as
  • 21
  • 22
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs013.html b/doc/pub/Regression/html/._Regression-bs013.html index 89a242dec..86165977c 100644 --- a/doc/pub/Regression/html/._Regression-bs013.html +++ b/doc/pub/Regression/html/._Regression-bs013.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -209,22 +238,17 @@ MathJax.Hub.Config({

    -In order to find the parameters \( \beta_i \) we will then minimize the spread of \( \chi^2(\hat{\beta}) \) by requiring +Normally, the response (dependent or outcome) variable \( y_i \) the outcome of a numerical experiment or another type of experiment and is thus only an approximation to the true value. It is then always accompanied by an error estimate, often limited to a statistical error estimate given by the standard deviation discussed earlier. In the discussion here we will treat \( y_i \) as our exact value for the response variable. + +

    +Introducing the standard deviation \( \sigma_i \) for each measurement \( y_i \), we define now the \( \chi^2 \) function as $$ -\frac{\partial \chi^2(\hat{\beta})}{\partial \beta_j} = \frac{\partial }{\partial \beta_j}\left[ \sum_{i=0}^{n-1}\left(\frac{y_i-\beta_0x_{i,0}-\beta_1x_{i,1}-\beta_2x_{i,2}-\dots-\beta_{n-1}x_{i,n-1}}{\sigma_i}\right)^2\right]=0, +\chi^2(\hat{\beta})=\sum_{i=0}^{n-1}\frac{\left(y_i-\tilde{y}_i\right)^2}{\sigma_i^2}=\left(\hat{y}-\hat{\tilde{y}}\right)^T\frac{1}{\hat{\Sigma^2}}\left(\hat{y}-\hat{\tilde{y}}\right), $$ -which results in -$$ -\frac{\partial \chi^2(\hat{\beta})}{\partial \beta_j} = -2\left[ \sum_{i=0}^{n-1}\frac{x_{ij}}{\sigma_i}\left(\frac{y_i-\beta_0x_{i,0}-\beta_1x_{i,1}-\beta_2x_{i,2}-\dots-\beta_{n-1}x_{i,n-1}}{\sigma_i}\right)\right]=0, -$$ +where the matrix \( \hat{\Sigma} \) is a diagonal matrix with \( \sigma_i \) as matrix elements. -or in a matrix-vector form as -$$ -\frac{\partial \chi^2(\hat{\beta})}{\partial \hat{\beta}} = 0 = \hat{A}^T\left( \hat{b}-\hat{A}\hat{\beta}\right). -$$ - -where we have defined the matrix \( \hat{A} =\hat{X}/\hat{\Sigma} \) with matrix elements \( a_{ij} = x_{ij}/\sigma_i \) and the vector \( \hat{b} \) with elements \( b_i = y_i/\sigma_i \). +

    @@ -255,7 +279,7 @@ where we have defined the matrix \( \hat{A} =\hat{X}/\hat{\Sigma} \) with matrix
  • 22
  • 23
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs014.html b/doc/pub/Regression/html/._Regression-bs014.html index 896a5038a..bbde82e75 100644 --- a/doc/pub/Regression/html/._Regression-bs014.html +++ b/doc/pub/Regression/html/._Regression-bs014.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -209,20 +238,22 @@ MathJax.Hub.Config({

    -We can rewrite +In order to find the parameters \( \beta_i \) we will then minimize the spread of \( \chi^2(\hat{\beta}) \) by requiring $$ -\frac{\partial \chi^2(\hat{\beta})}{\partial \hat{\beta}} = 0 = \hat{A}^T\left( \hat{b}-\hat{A}\hat{\beta}\right), +\frac{\partial \chi^2(\hat{\beta})}{\partial \beta_j} = \frac{\partial }{\partial \beta_j}\left[ \sum_{i=0}^{n-1}\left(\frac{y_i-\beta_0x_{i,0}-\beta_1x_{i,1}-\beta_2x_{i,2}-\dots-\beta_{n-1}x_{i,n-1}}{\sigma_i}\right)^2\right]=0, $$ -as +which results in $$ -\hat{A}^T\hat{b} = \hat{A}^T\hat{A}\hat{\beta}, +\frac{\partial \chi^2(\hat{\beta})}{\partial \beta_j} = -2\left[ \sum_{i=0}^{n-1}\frac{x_{ij}}{\sigma_i}\left(\frac{y_i-\beta_0x_{i,0}-\beta_1x_{i,1}-\beta_2x_{i,2}-\dots-\beta_{n-1}x_{i,n-1}}{\sigma_i}\right)\right]=0, $$ -and if the matrix \( \hat{A}^T\hat{A} \) is invertible we have the solution +or in a matrix-vector form as $$ -\hat{\beta} =\left(\hat{A}^T\hat{A}\right)^{-1}\hat{A}^T\hat{b}. +\frac{\partial \chi^2(\hat{\beta})}{\partial \hat{\beta}} = 0 = \hat{A}^T\left( \hat{b}-\hat{A}\hat{\beta}\right). $$ + +where we have defined the matrix \( \hat{A} =\hat{X}/\hat{\Sigma} \) with matrix elements \( a_{ij} = x_{ij}/\sigma_i \) and the vector \( \hat{b} \) with elements \( b_i = y_i/\sigma_i \).

    @@ -253,7 +284,7 @@ $$
  • 23
  • 24
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs015.html b/doc/pub/Regression/html/._Regression-bs015.html index dd2dbedfa..9bb6354df 100644 --- a/doc/pub/Regression/html/._Regression-bs015.html +++ b/doc/pub/Regression/html/._Regression-bs015.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -209,24 +238,19 @@ MathJax.Hub.Config({

    -If we then introduce the matrix +We can rewrite $$ -\hat{H} = \left(\hat{A}^T\hat{A}\right)^{-1}, +\frac{\partial \chi^2(\hat{\beta})}{\partial \hat{\beta}} = 0 = \hat{A}^T\left( \hat{b}-\hat{A}\hat{\beta}\right), $$ -we have then the following expression for the parameters \( \beta_j \) (the matrix elements of \( \hat{H} \) are \( h_{ij} \)) +as $$ -\beta_j = \sum_{k=0}^{p-1}h_{jk}\sum_{i=0}^{n-1}\frac{y_i}{\sigma_i}\frac{x_{ik}}{\sigma_i} = \sum_{k=0}^{p-1}h_{jk}\sum_{i=0}^{n-1}b_ia_{ik} +\hat{A}^T\hat{b} = \hat{A}^T\hat{A}\hat{\beta}, $$ -We state without proof the expression for the uncertainty in the parameters \( \beta_j \) as (we leave this as an exercise) +and if the matrix \( \hat{A}^T\hat{A} \) is invertible we have the solution $$ -\sigma^2(\beta_j) = \sum_{i=0}^{n-1}\sigma_i^2\left( \frac{\partial \beta_j}{\partial y_i}\right)^2, -$$ - -resulting in -$$ -\sigma^2(\beta_j) = \left(\sum_{k=0}^{p-1}h_{jk}\sum_{i=0}^{n-1}a_{ik}\right)\left(\sum_{l=0}^{p-1}h_{jl}\sum_{m=0}^{n-1}a_{ml}\right) = h_{jj}! +\hat{\beta} =\left(\hat{A}^T\hat{A}\right)^{-1}\hat{A}^T\hat{b}. $$ @@ -258,7 +282,7 @@ $$

  • 24
  • 25
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs016.html b/doc/pub/Regression/html/._Regression-bs016.html index 6a8765bee..b3aeb045a 100644 --- a/doc/pub/Regression/html/._Regression-bs016.html +++ b/doc/pub/Regression/html/._Regression-bs016.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -207,19 +236,26 @@ MathJax.Hub.Config({

    -The first step here is to approximate the function \( y \) with a first-order polynomial, that is we write + +

    +If we then introduce the matrix $$ -y=y(x) \rightarrow y(x_i) \approx \beta_0+\beta_1 x_i. +\hat{H} = \left(\hat{A}^T\hat{A}\right)^{-1}, $$ -By computing the derivatives of \( \chi^2 \) with respect to \( \beta_0 \) and \( \beta_1 \) show that these are given by +we have then the following expression for the parameters \( \beta_j \) (the matrix elements of \( \hat{H} \) are \( h_{ij} \)) $$ -\frac{\partial \chi^2(\hat{\beta})}{\partial \beta_0} = -2\left[ \sum_{i=0}^{n-1}\left(\frac{y_i-\beta_0-\beta_1x_{i}}{\sigma_i^2}\right)\right]=0, +\beta_j = \sum_{k=0}^{p-1}h_{jk}\sum_{i=0}^{n-1}\frac{y_i}{\sigma_i}\frac{x_{ik}}{\sigma_i} = \sum_{k=0}^{p-1}h_{jk}\sum_{i=0}^{n-1}b_ia_{ik} $$ -and +We state without proof the expression for the uncertainty in the parameters \( \beta_j \) as (we leave this as an exercise) $$ -\frac{\partial \chi^2(\hat{\beta})}{\partial \beta_0} = -2\left[ \sum_{i=0}^{n-1}x_i\left(\frac{y_i-\beta_0-\beta_1x_{i}}{\sigma_i^2}\right)\right]=0. +\sigma^2(\beta_j) = \sum_{i=0}^{n-1}\sigma_i^2\left( \frac{\partial \beta_j}{\partial y_i}\right)^2, +$$ + +resulting in +$$ +\sigma^2(\beta_j) = \left(\sum_{k=0}^{p-1}h_{jk}\sum_{i=0}^{n-1}a_{ik}\right)\left(\sum_{l=0}^{p-1}h_{jl}\sum_{m=0}^{n-1}a_{ml}\right) = h_{jj}! $$

    @@ -251,7 +287,7 @@ $$
  • 25
  • 26
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs017.html b/doc/pub/Regression/html/._Regression-bs017.html index 4375e1866..a258a9d2c 100644 --- a/doc/pub/Regression/html/._Regression-bs017.html +++ b/doc/pub/Regression/html/._Regression-bs017.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -207,42 +236,20 @@ MathJax.Hub.Config({

    - -

    -For a linear fit we don't need to invert a matrix!! -Defining +The first step here is to approximate the function \( y \) with a first-order polynomial, that is we write $$ -\gamma = \sum_{i=0}^{n-1}\frac{1}{\sigma_i^2}, +y=y(x) \rightarrow y(x_i) \approx \beta_0+\beta_1 x_i. $$ - +By computing the derivatives of \( \chi^2 \) with respect to \( \beta_0 \) and \( \beta_1 \) show that these are given by $$ -\gamma_x = \sum_{i=0}^{n-1}\frac{x_{i}}{\sigma_i^2}, +\frac{\partial \chi^2(\hat{\beta})}{\partial \beta_0} = -2\left[ \sum_{i=0}^{n-1}\left(\frac{y_i-\beta_0-\beta_1x_{i}}{\sigma_i^2}\right)\right]=0, $$ +and $$ -\gamma_y = \sum_{i=0}^{n-1}\left(\frac{y_i}{\sigma_i^2}\right), +\frac{\partial \chi^2(\hat{\beta})}{\partial \beta_0} = -2\left[ \sum_{i=0}^{n-1}x_i\left(\frac{y_i-\beta_0-\beta_1x_{i}}{\sigma_i^2}\right)\right]=0. $$ - -$$ -\gamma_{xx} = \sum_{i=0}^{n-1}\frac{x_ix_{i}}{\sigma_i^2}, -$$ - -$$ -\gamma_{xy} = \sum_{i=0}^{n-1}\frac{y_ix_{i}}{\sigma_i^2}, -$$ - -we obtain -$$ -\beta_0 = \frac{\gamma_{xx}\gamma_y-\gamma_x\gamma_y}{\gamma\gamma_{xx}-\gamma_x^2}, -$$ - -$$ -\beta_1 = \frac{\gamma_{xy}\gamma-\gamma_x\gamma_y}{\gamma\gamma_{xx}-\gamma_x^2}. -$$ - -

    -This approach (different linear and non-linear regression) suffers often from both being underdetermined and overdetermined in the unknown coefficients \( \beta_i \). A better approach is to use the Singular Value Decomposition (SVD) method discussed below. Or using Lasso and Ridge regression. See below.

    @@ -273,7 +280,7 @@ This approach (different linear and non-linear regression) suffers often from bo
  • 26
  • 27
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs018.html b/doc/pub/Regression/html/._Regression-bs018.html index 0ba0aa5ad..cc9cfc97e 100644 --- a/doc/pub/Regression/html/._Regression-bs018.html +++ b/doc/pub/Regression/html/._Regression-bs018.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,42 +232,49 @@ MathJax.Hub.Config({ -

    Simple regression model

    -We are now ready to write our first program which aims at solving the above linear regression equations. We start with data we have produced ourselves, in this case normally distributed random numbers along the \( x \)-axis. These numbers define then the value of a function \( y(x)=4+3x+N(0,1) \). Thereafter we order the \( x \) values and employ our linear regression algorithm to set up the best fit. Here we find it useful to use the numpy function \( c\_ \) arrays where arrays are stacked along their last axis after being upgraded to at least two dimensions with ones post-pended to the shape. The following examples help in understanding what happens +

    The \( \chi^2 \) function

    +
    +
    +

    +

    +For a linear fit we don't need to invert a matrix!! +Defining +$$ +\gamma = \sum_{i=0}^{n-1}\frac{1}{\sigma_i^2}, +$$ + + +$$ +\gamma_x = \sum_{i=0}^{n-1}\frac{x_{i}}{\sigma_i^2}, +$$ + +$$ +\gamma_y = \sum_{i=0}^{n-1}\left(\frac{y_i}{\sigma_i^2}\right), +$$ + +$$ +\gamma_{xx} = \sum_{i=0}^{n-1}\frac{x_ix_{i}}{\sigma_i^2}, +$$ + +$$ +\gamma_{xy} = \sum_{i=0}^{n-1}\frac{y_ix_{i}}{\sigma_i^2}, +$$ + +we obtain +$$ +\beta_0 = \frac{\gamma_{xx}\gamma_y-\gamma_x\gamma_y}{\gamma\gamma_{xx}-\gamma_x^2}, +$$ + +$$ +\beta_1 = \frac{\gamma_{xy}\gamma-\gamma_x\gamma_y}{\gamma\gamma_{xx}-\gamma_x^2}. +$$ - -

    import numpy as np
    -print(np.c_[np.array([1,2,3]), np.array([4,5,6])])
    -print(np.c_[np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]])])
    -

    +This approach (different linear and non-linear regression) suffers often from both being underdetermined and overdetermined in the unknown coefficients \( \beta_i \). A better approach is to use the Singular Value Decomposition (SVD) method discussed below. Or using Lasso and Ridge regression. See below. +

    +
    - -
    # Importing various packages
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    -
    -x = 2*np.random.rand(100,1)
    -y = 4+3*x+np.random.randn(100,1)
    -
    -xb = np.c_[np.ones((100,1)), x]
    -beta = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    -xnew = np.array([[0],[2]])
    -xbnew = np.c_[np.ones((2,1)), xnew]
    -ypredict = xbnew.dot(beta)
    -
    -plt.plot(xnew, ypredict, "r-")
    -plt.plot(x, y ,'ro')
    -plt.axis([0,2.0,0, 15.0])
    -plt.xlabel(r'$x$')
    -plt.ylabel(r'$y$')
    -plt.title(r'Linear Regression')
    -plt.show()
    -
    -

    -We see that, as expected, a linear fit gives a seemingly (from the graph) good representation of the data.

    @@ -266,7 +302,7 @@ We see that, as expected, a linear fit gives a seemingly (from the graph) good r

  • 27
  • 28
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs019.html b/doc/pub/Regression/html/._Regression-bs019.html index 98985f9d7..26f66fce1 100644 --- a/doc/pub/Regression/html/._Regression-bs019.html +++ b/doc/pub/Regression/html/._Regression-bs019.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,10 +232,15 @@ MathJax.Hub.Config({ -

    Simple regression model, now using scikit-learn

    - +

    Simple regression model

    +We are now ready to write our first program which aims at solving the above linear regression equations. We start with data we have produced ourselves, in this case normally distributed random numbers along the \( x \)-axis. These numbers define then the value of a function \( y(x)=4+3x+N(0,1) \). Thereafter we order the \( x \) values and employ our linear regression algorithm to set up the best fit. Here we find it useful to use the numpy function \( c\_ \) arrays where arrays are stacked along their last axis after being upgraded to at least two dimensions with ones post-pended to the shape. The following examples help in understanding what happens

    -We can repeat the above algorithm using scikit-learn as follows + + +

    import numpy as np
    +print(np.c_[np.array([1,2,3]), np.array([4,5,6])])
    +print(np.c_[np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]])])
    +

    @@ -214,23 +248,27 @@ We can repeat the above algorithm using scikit-learn as follows from random import random, seed import numpy as np import matplotlib.pyplot as plt -from sklearn.linear_model import LinearRegression x = 2*np.random.rand(100,1) y = 4+3*x+np.random.randn(100,1) -linreg = LinearRegression() -linreg.fit(x,y) + +xb = np.c_[np.ones((100,1)), x] +beta = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y) xnew = np.array([[0],[2]]) -ypredict = linreg.predict(xnew) +xbnew = np.c_[np.ones((2,1)), xnew] +ypredict = xbnew.dot(beta) plt.plot(xnew, ypredict, "r-") plt.plot(x, y ,'ro') plt.axis([0,2.0,0, 15.0]) plt.xlabel(r'$x$') plt.ylabel(r'$y$') -plt.title(r'Random numbers ') +plt.title(r'Linear Regression') plt.show() +

    +We see that, as expected, a linear fit gives a seemingly (from the graph) good representation of the data. +

    @@ -257,7 +295,7 @@ plt.show()

  • 28
  • 29
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs020.html b/doc/pub/Regression/html/._Regression-bs020.html index 420ad0471..4cbf19b9e 100644 --- a/doc/pub/Regression/html/._Regression-bs020.html +++ b/doc/pub/Regression/html/._Regression-bs020.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,69 +232,32 @@ MathJax.Hub.Config({ -

    Simple linear regression model using scikit-learn

    +

    Simple regression model, now using scikit-learn

    -We start with perhaps our simplest possible example, using scikit-learn to perform linear regression analysis on a data set produced by us. -What follows is a simple Python code where we have defined function \( y \) in terms of the variable \( x \). Both are defined as vectors of dimension \( 1\times 100 \). The entries to the vector \( \hat{x} \) are given by random numbers generated with a uniform distribution with entries \( x_i \in [0,1] \) (more about probability distribution functions later). These values are then used to define a function \( y(x) \) (tabulated again as a vector) with a linear dependence on \( x \) plus a random noise added via the normal distribution. - -

    -The Numpy functions are imported used the import numpy as np -statement and the random number generator for the uniform distribution -is called using the function np.random.rand(), where we specificy -that we want \( 100 \) random variables. Using Numpy we define -automatically an array with the specified number of elements, \( 100 \) in -our case. With the Numpy function randn() we can compute random -numbers with the normal distribution (mean value \( \mu \) equal to zero and -variance \( \sigma^2 \) set to one) and produce the values of \( y \) assuming a linear -dependence as function of \( x \) - -$$ -y = 2x+N(0,1), -$$ - -

    -where \( N(0,1) \) represents random numbers generated by the normal -distribution. From scikit-learn we import then the -LinearRegression functionality and make a prediction \( \tilde{y} = -\alpha + \beta x \) using the function fit(x,y). We call the set of -data \( (\hat{x},\hat{y}) \) for our training data. The Python package -scikit-learn has also a functionality which extracts the above -fitting parameters \( \alpha \) and \( \beta \) (see below). Later we will -distinguish between training data and test data. - -

    -For plotting we use the Python package -matplotlib which produces publication -quality figures. Feel free to explore the extensive -gallery of examples. In -this example we plot our original values of \( x \) and \( y \) as well as the -prediction ypredict (\( \tilde{y} \)), which attempts at fitting our -data with a straight line. - -

    -The Python code follows here. +We can repeat the above algorithm using scikit-learn as follows

    # Importing various packages
    +from random import random, seed
     import numpy as np
     import matplotlib.pyplot as plt
     from sklearn.linear_model import LinearRegression
     
    -x = np.random.rand(100,1)
    -y = 2*x+np.random.randn(100,1)
    +x = 2*np.random.rand(100,1)
    +y = 4+3*x+np.random.randn(100,1)
     linreg = LinearRegression()
     linreg.fit(x,y)
    -xnew = np.array([[0],[1]])
    +xnew = np.array([[0],[2]])
     ypredict = linreg.predict(xnew)
     
     plt.plot(xnew, ypredict, "r-")
     plt.plot(x, y ,'ro')
    -plt.axis([0,1.0,0, 5.0])
    +plt.axis([0,2.0,0, 15.0])
     plt.xlabel(r'$x$')
     plt.ylabel(r'$y$')
    -plt.title(r'Simple Linear Regression')
    +plt.title(r'Random numbers ')
     plt.show()
     

    @@ -294,7 +286,7 @@ plt.show()

  • 29
  • 30
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs021.html b/doc/pub/Regression/html/._Regression-bs021.html index c1f975f55..a768c9fd4 100644 --- a/doc/pub/Regression/html/._Regression-bs021.html +++ b/doc/pub/Regression/html/._Regression-bs021.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,25 +232,71 @@ MathJax.Hub.Config({ -

    Simple linear regression model

    +

    Simple linear regression model using scikit-learn

    -This example serves several aims. It allows us to demonstrate several -aspects of data analysis and later machine learning algorithms. The -immediate visualization shows that our linear fit is not -impressive. It goes through the data points, but there are many -outliers which are not reproduced by our linear regression. We could -now play around with this small program and change for example the -factor in front of \( x \) and the normal distribution. Try to change the -function \( y \) to +We start with perhaps our simplest possible example, using scikit-learn to perform linear regression analysis on a data set produced by us. +What follows is a simple Python code where we have defined function \( y \) in terms of the variable \( x \). Both are defined as vectors of dimension \( 1\times 100 \). The entries to the vector \( \hat{x} \) are given by random numbers generated with a uniform distribution with entries \( x_i \in [0,1] \) (more about probability distribution functions later). These values are then used to define a function \( y(x) \) (tabulated again as a vector) with a linear dependence on \( x \) plus a random noise added via the normal distribution. + +

    +The Numpy functions are imported used the import numpy as np +statement and the random number generator for the uniform distribution +is called using the function np.random.rand(), where we specificy +that we want \( 100 \) random variables. Using Numpy we define +automatically an array with the specified number of elements, \( 100 \) in +our case. With the Numpy function randn() we can compute random +numbers with the normal distribution (mean value \( \mu \) equal to zero and +variance \( \sigma^2 \) set to one) and produce the values of \( y \) assuming a linear +dependence as function of \( x \) $$ -y = 10x+0.01 \times N(0,1), +y = 2x+N(0,1), $$

    -where \( x \) is defined as before. +where \( N(0,1) \) represents random numbers generated by the normal +distribution. From scikit-learn we import then the +LinearRegression functionality and make a prediction \( \tilde{y} = +\alpha + \beta x \) using the function fit(x,y). We call the set of +data \( (\hat{x},\hat{y}) \) for our training data. The Python package +scikit-learn has also a functionality which extracts the above +fitting parameters \( \alpha \) and \( \beta \) (see below). Later we will +distinguish between training data and test data. +

    +For plotting we use the Python package +matplotlib which produces publication +quality figures. Feel free to explore the extensive +gallery of examples. In +this example we plot our original values of \( x \) and \( y \) as well as the +prediction ypredict (\( \tilde{y} \)), which attempts at fitting our +data with a straight line. + +

    +The Python code follows here. +

    + + +

    # Importing various packages
    +import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.linear_model import LinearRegression
    +
    +x = np.random.rand(100,1)
    +y = 2*x+np.random.randn(100,1)
    +linreg = LinearRegression()
    +linreg.fit(x,y)
    +xnew = np.array([[0],[1]])
    +ypredict = linreg.predict(xnew)
    +
    +plt.plot(xnew, ypredict, "r-")
    +plt.plot(x, y ,'ro')
    +plt.axis([0,1.0,0, 5.0])
    +plt.xlabel(r'$x$')
    +plt.ylabel(r'$y$')
    +plt.title(r'Simple Linear Regression')
    +plt.show()
    +

    @@ -248,7 +323,7 @@ where \( x \) is defined as before.

  • 30
  • 31
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs022.html b/doc/pub/Regression/html/._Regression-bs022.html index 2487b3f53..dc088d321 100644 --- a/doc/pub/Regression/html/._Regression-bs022.html +++ b/doc/pub/Regression/html/._Regression-bs022.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,15 +232,24 @@ MathJax.Hub.Config({ -

    Less noise

    +

    Simple linear regression model

    -Does the fit look better? Indeed, by -reducing the role of the normal distribution we see immediately that -our linear prediction seemingly reproduces better the training -set. However, this testing 'by the eye' is obviouly not satisfactory in the -long run. Here we have only defined the training data and our model, and -have not discussed a more rigorous approach to the cost function. +This example serves several aims. It allows us to demonstrate several +aspects of data analysis and later machine learning algorithms. The +immediate visualization shows that our linear fit is not +impressive. It goes through the data points, but there are many +outliers which are not reproduced by our linear regression. We could +now play around with this small program and change for example the +factor in front of \( x \) and the normal distribution. Try to change the +function \( y \) to + +$$ +y = 10x+0.01 \times N(0,1), +$$ + +

    +where \( x \) is defined as before.

    @@ -239,7 +277,7 @@ have not discussed a more rigorous approach to the cost function.

  • 31
  • 32
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs023.html b/doc/pub/Regression/html/._Regression-bs023.html index bd1b9f6a5..193801b1c 100644 --- a/doc/pub/Regression/html/._Regression-bs023.html +++ b/doc/pub/Regression/html/._Regression-bs023.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,24 +232,15 @@ MathJax.Hub.Config({ -

    How to study our fits

    +

    Less noise

    -We need more rigorous criteria in defining whether we have succeeded or -not in modeling our training data. You will be surprised to see that -many scientists seldomly venture beyond this 'by the eye' approach. A -standard approach for the cost function is the so-called \( \chi^2 \) -function - -$$ \chi^2 = \frac{1}{n} -\sum_{i=0}^{n-1}\frac{(y_i-\tilde{y}_i)^2}{\sigma_i^2}, -$$ - -

    -where \( \sigma_i^2 \) is the variance (to be defined later) of the entry -\( y_i \). We may not know the explicit value of \( \sigma_i^2 \), it serves -however the aim of scaling the equations and make the cost function -dimensionless. +Does the fit look better? Indeed, by +reducing the role of the normal distribution we see immediately that +our linear prediction seemingly reproduces better the training +set. However, this testing 'by the eye' is obviouly not satisfactory in the +long run. Here we have only defined the training data and our model, and +have not discussed a more rigorous approach to the cost function.

    @@ -248,7 +268,7 @@ dimensionless.

  • 32
  • 33
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs024.html b/doc/pub/Regression/html/._Regression-bs024.html index 4979e3750..fe69a6e2a 100644 --- a/doc/pub/Regression/html/._Regression-bs024.html +++ b/doc/pub/Regression/html/._Regression-bs024.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,23 +232,24 @@ MathJax.Hub.Config({ -

    Minimizing the cost function

    +

    How to study our fits

    -Minimizing the cost function is a central aspect of -our discussions to come. Finding its minima as function of the model -parameters (\( \alpha \) and \( \beta \) in our case) will be a recurring -theme in these series of lectures. Essentially all machine learning -algorithms we will discuss center around the minimization of the -chosen cost function. This depends in turn on our specific -model for describing the data, a typical situation in supervised -learning. Automatizing the search for the minima of the cost function is a -central ingredient in all algorithms. Typical methods which are -employed are various variants of gradient methods. These will be -discussed in more detail later. Again, you'll be surprised to hear that -many practitioners minimize the above function ''by the eye', popularly dubbed as -'chi by the eye'. That is, change a parameter and see (visually and numerically) that -the \( \chi^2 \) function becomes smaller. +We need more rigorous criteria in defining whether we have succeeded or +not in modeling our training data. You will be surprised to see that +many scientists seldomly venture beyond this 'by the eye' approach. A +standard approach for the cost function is the so-called \( \chi^2 \) +function + +$$ \chi^2 = \frac{1}{n} +\sum_{i=0}^{n-1}\frac{(y_i-\tilde{y}_i)^2}{\sigma_i^2}, +$$ + +

    +where \( \sigma_i^2 \) is the variance (to be defined later) of the entry +\( y_i \). We may not know the explicit value of \( \sigma_i^2 \), it serves +however the aim of scaling the equations and make the cost function +dimensionless.

    @@ -247,7 +277,7 @@ the \( \chi^2 \) function becomes smaller.

  • 33
  • 34
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs025.html b/doc/pub/Regression/html/._Regression-bs025.html index 3596923c1..a1e2a076e 100644 --- a/doc/pub/Regression/html/._Regression-bs025.html +++ b/doc/pub/Regression/html/._Regression-bs025.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,42 +232,23 @@ MathJax.Hub.Config({ -

    Relative error

    +

    Minimizing the cost function

    -There are many ways to define the cost function. A simpler approach is to look at the relative difference between the training data and the predicted data, that is we define -the relative error as - -$$ -\epsilon_{\mathrm{relative}}= \frac{\vert \hat{y} -\hat{\tilde{y}}\vert}{\vert \hat{y}\vert}. -$$ - -We can modify easily the above Python code and plot the relative error instead -

    - - -

    import numpy as np
    -import matplotlib.pyplot as plt
    -from sklearn.linear_model import LinearRegression
    -
    -x = np.random.rand(100,1)
    -y = 5*x+0.01*np.random.randn(100,1)
    -linreg = LinearRegression()
    -linreg.fit(x,y)
    -ypredict = linreg.predict(x)
    -
    -plt.plot(x, np.abs(ypredict-y)/abs(y), "ro")
    -plt.axis([0,1.0,0.0, 0.5])
    -plt.xlabel(r'$x$')
    -plt.ylabel(r'$\epsilon_{\mathrm{relative}}$')
    -plt.title(r'Relative error')
    -plt.show()
    -
    -

    -Depending on the parameter in front of the normal distribution, we may -have a small or larger relative error. Try to play around with -different training data sets and study (graphically) the value of the -relative error. +Minimizing the cost function is a central aspect of +our discussions to come. Finding its minima as function of the model +parameters (\( \alpha \) and \( \beta \) in our case) will be a recurring +theme in these series of lectures. Essentially all machine learning +algorithms we will discuss center around the minimization of the +chosen cost function. This depends in turn on our specific +model for describing the data, a typical situation in supervised +learning. Automatizing the search for the minima of the cost function is a +central ingredient in all algorithms. Typical methods which are +employed are various variants of gradient methods. These will be +discussed in more detail later. Again, you'll be surprised to hear that +many practitioners minimize the above function ''by the eye', popularly dubbed as +'chi by the eye'. That is, change a parameter and see (visually and numerically) that +the \( \chi^2 \) function becomes smaller.

    @@ -266,7 +276,7 @@ relative error.

  • 34
  • 35
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs026.html b/doc/pub/Regression/html/._Regression-bs026.html index f827affc9..2b050bf0f 100644 --- a/doc/pub/Regression/html/._Regression-bs026.html +++ b/doc/pub/Regression/html/._Regression-bs026.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,48 +232,43 @@ MathJax.Hub.Config({ -

    The richness of scikit-learn

    +

    Relative error

    -As mentioned above, scikit-learn has an impressive functionality. -We can for example extract the values of \( \alpha \) and \( \beta \) and -their error estimates, or the variance and standard deviation and many -other properties from the statistical data analysis. +There are many ways to define the cost function. A simpler approach is to look at the relative difference between the training data and the predicted data, that is we define +the relative error as -

    -Here we show an -example of the functionality of scikit-learn. +$$ +\epsilon_{\mathrm{relative}}= \frac{\vert \hat{y} -\hat{\tilde{y}}\vert}{\vert \hat{y}\vert}. +$$ + +We can modify easily the above Python code and plot the relative error instead

    -

    import numpy as np 
    -import matplotlib.pyplot as plt 
    -from sklearn.linear_model import LinearRegression 
    -from sklearn.metrics import mean_squared_error, r2_score, mean_squared_log_error, mean_absolute_error
    +
    import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.linear_model import LinearRegression
     
     x = np.random.rand(100,1)
    -y = 2.0+ 5*x+0.5*np.random.randn(100,1)
    +y = 5*x+0.01*np.random.randn(100,1)
     linreg = LinearRegression()
     linreg.fit(x,y)
     ypredict = linreg.predict(x)
    -print('The intercept alpha: \n', linreg.intercept_)
    -print('Coefficient beta : \n', linreg.coef_)
    -# The mean squared error                               
    -print("Mean squared error: %.2f" % mean_squared_error(y, ypredict))
    -# Explained variance score: 1 is perfect prediction                                 
    -print('Variance score: %.2f' % r2_score(y, ypredict))
    -# Mean squared log error                                                        
    -print('Mean squared log error: %.2f' % mean_squared_log_error(y, ypredict) )
    -# Mean absolute error                                                           
    -print('Mean absolute error: %.2f' % mean_absolute_error(y, ypredict))
    -plt.plot(x, ypredict, "r-")
    -plt.plot(x, y ,'ro')
    -plt.axis([0.0,1.0,1.5, 7.0])
    +
    +plt.plot(x, np.abs(ypredict-y)/abs(y), "ro")
    +plt.axis([0,1.0,0.0, 0.5])
     plt.xlabel(r'$x$')
    -plt.ylabel(r'$y$')
    -plt.title(r'Linear Regression fit ')
    +plt.ylabel(r'$\epsilon_{\mathrm{relative}}$')
    +plt.title(r'Relative error')
     plt.show()
     
    +

    +Depending on the parameter in front of the normal distribution, we may +have a small or larger relative error. Try to play around with +different training data sets and study (graphically) the value of the +relative error. +

    @@ -271,7 +295,7 @@ plt.show()

  • 35
  • 36
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs027.html b/doc/pub/Regression/html/._Regression-bs027.html index d68ae908b..79b422d69 100644 --- a/doc/pub/Regression/html/._Regression-bs027.html +++ b/doc/pub/Regression/html/._Regression-bs027.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,20 +232,48 @@ MathJax.Hub.Config({ -

    Functions in scikit-learn

    +

    The richness of scikit-learn

    -The function coef gives us the parameter \( \beta \) of our fit while intercept yields -\( \alpha \). Depending on the constant in front of the normal distribution, we get values near or far from \( alpha =2 \) and \( \beta =5 \). Try to play around with different parameters in front of the normal distribution. The function meansquarederror gives us the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error or loss defined as -$$ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} -\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, -$$ +As mentioned above, scikit-learn has an impressive functionality. +We can for example extract the values of \( \alpha \) and \( \beta \) and +their error estimates, or the variance and standard deviation and many +other properties from the statistical data analysis.

    -The smaller the value, the better the fit. Ideally we would like to -have an MSE equal zero. The attentive reader has probably recognized -this function as being similar to the \( \chi^2 \) function defined above. +Here we show an +example of the functionality of scikit-learn. +

    + +

    import numpy as np 
    +import matplotlib.pyplot as plt 
    +from sklearn.linear_model import LinearRegression 
    +from sklearn.metrics import mean_squared_error, r2_score, mean_squared_log_error, mean_absolute_error
    +
    +x = np.random.rand(100,1)
    +y = 2.0+ 5*x+0.5*np.random.randn(100,1)
    +linreg = LinearRegression()
    +linreg.fit(x,y)
    +ypredict = linreg.predict(x)
    +print('The intercept alpha: \n', linreg.intercept_)
    +print('Coefficient beta : \n', linreg.coef_)
    +# The mean squared error                               
    +print("Mean squared error: %.2f" % mean_squared_error(y, ypredict))
    +# Explained variance score: 1 is perfect prediction                                 
    +print('Variance score: %.2f' % r2_score(y, ypredict))
    +# Mean squared log error                                                        
    +print('Mean squared log error: %.2f' % mean_squared_log_error(y, ypredict) )
    +# Mean absolute error                                                           
    +print('Mean absolute error: %.2f' % mean_absolute_error(y, ypredict))
    +plt.plot(x, ypredict, "r-")
    +plt.plot(x, y ,'ro')
    +plt.axis([0.0,1.0,1.5, 7.0])
    +plt.xlabel(r'$x$')
    +plt.ylabel(r'$y$')
    +plt.title(r'Linear Regression fit ')
    +plt.show()
    +

    @@ -243,7 +300,7 @@ this function as being similar to the \( \chi^2 \) function defined above.

  • 36
  • 37
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs028.html b/doc/pub/Regression/html/._Regression-bs028.html index 39f493b62..79c5f693a 100644 --- a/doc/pub/Regression/html/._Regression-bs028.html +++ b/doc/pub/Regression/html/._Regression-bs028.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,26 +232,19 @@ MathJax.Hub.Config({ -

    Other functions in scikit-learn

    +

    Functions in scikit-learn

    -The r2score function computes \( R^2 \), the coefficient of -determination. It provides a measure of how well future samples are -likely to be predicted by the model. Best possible score is 1.0 and it -can be negative (because the model can be arbitrarily worse). A -constant model that always predicts the expected value of \( \hat{y} \), -disregarding the input features, would get a \( R^2 \) score of \( 0.0 \). +The function coef gives us the parameter \( \beta \) of our fit while intercept yields +\( \alpha \). Depending on the constant in front of the normal distribution, we get values near or far from \( alpha =2 \) and \( \beta =5 \). Try to play around with different parameters in front of the normal distribution. The function meansquarederror gives us the mean square error, a risk metric corresponding to the expected value of the squared (quadratic) error or loss defined as +$$ MSE(\hat{y},\hat{\tilde{y}}) = \frac{1}{n} +\sum_{i=0}^{n-1}(y_i-\tilde{y}_i)^2, +$$

    -If \( \tilde{\hat{y}}_i \) is the predicted value of the \( i-th \) sample and \( y_i \) is the corresponding true value, then the score \( R^2 \) is defined as -$$ -R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, -$$ - -where we have defined the mean value of \( \hat{y} \) as -$$ -\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. -$$ +The smaller the value, the better the fit. Ideally we would like to +have an MSE equal zero. The attentive reader has probably recognized +this function as being similar to the \( \chi^2 \) function defined above.

    @@ -249,6 +271,8 @@ $$

  • 36
  • 37
  • 38
  • +
  • ...
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs029.html b/doc/pub/Regression/html/._Regression-bs029.html index 6a182d377..33cd41ef8 100644 --- a/doc/pub/Regression/html/._Regression-bs029.html +++ b/doc/pub/Regression/html/._Regression-bs029.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,27 +232,26 @@ MathJax.Hub.Config({ -

    The mean absolute error and other functions in scikit-learn

    +

    Other functions in scikit-learn

    -Another quantity will meet again in our discussions of regression analysis is - mean absolute error (MAE), a risk metric corresponding to the expected value of the absolute error loss or what we call the \( l1 \)-norm loss. In our discussion above we presented the relative error. -The MAE is defined as follows -$$ -\text{MAE}(\hat{y}, \hat{\tilde{y}}) = \frac{1}{n} \sum_{i=0}^{n-1} \left| y_i - \tilde{y}_i \right|. -$$ - -Finally we present the -squared logarithmic (quadratic) error -$$ -\text{MSLE}(\hat{y}, \hat{\tilde{y}}) = \frac{1}{n} \sum_{i=0}^{n - 1} (\log_e (1 + y_i) - \log_e (1 + \tilde{y}_i) )^2, -$$ +The r2score function computes \( R^2 \), the coefficient of +determination. It provides a measure of how well future samples are +likely to be predicted by the model. Best possible score is 1.0 and it +can be negative (because the model can be arbitrarily worse). A +constant model that always predicts the expected value of \( \hat{y} \), +disregarding the input features, would get a \( R^2 \) score of \( 0.0 \).

    -where \( \log_e (x) \) stands for the natural logarithm of \( x \). This error -estimate is best to use when targets having exponential growth, such -as population counts, average sales of a commodity over a span of -years etc. +If \( \tilde{\hat{y}}_i \) is the predicted value of the \( i-th \) sample and \( y_i \) is the corresponding true value, then the score \( R^2 \) is defined as +$$ +R^2(\hat{y}, \tilde{\hat{y}}) = 1 - \frac{\sum_{i=0}^{n - 1} (y_i - \tilde{y}_i)^2}{\sum_{i=0}^{n - 1} (y_i - \bar{y})^2}, +$$ + +where we have defined the mean value of \( \hat{y} \) as +$$ +\bar{y} = \frac{1}{n} \sum_{i=0}^{n - 1} y_i. +$$

    @@ -249,6 +277,9 @@ years etc.

  • 36
  • 37
  • 38
  • +
  • 39
  • +
  • ...
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs030.html b/doc/pub/Regression/html/._Regression-bs030.html index a0e4dfa92..69b76d122 100644 --- a/doc/pub/Regression/html/._Regression-bs030.html +++ b/doc/pub/Regression/html/._Regression-bs030.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,50 +232,27 @@ MathJax.Hub.Config({ -

    Cubic polynomial in scikit-learn

    +

    The mean absolute error and other functions in scikit-learn

    -We will discuss in more -detail these and other functions in the various lectures. We conclude this part with another example. Instead of -a linear \( x \)-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. +Another quantity will meet again in our discussions of regression analysis is + mean absolute error (MAE), a risk metric corresponding to the expected value of the absolute error loss or what we call the \( l1 \)-norm loss. In our discussion above we presented the relative error. +The MAE is defined as follows +$$ +\text{MAE}(\hat{y}, \hat{\tilde{y}}) = \frac{1}{n} \sum_{i=0}^{n-1} \left| y_i - \tilde{y}_i \right|. +$$ + +Finally we present the +squared logarithmic (quadratic) error +$$ +\text{MSLE}(\hat{y}, \hat{\tilde{y}}) = \frac{1}{n} \sum_{i=0}^{n - 1} (\log_e (1 + y_i) - \log_e (1 + \tilde{y}_i) )^2, +$$

    - - -

    import matplotlib.pyplot as plt
    -import numpy as np
    -import random
    -from sklearn.linear_model import Ridge
    -from sklearn.preprocessing import PolynomialFeatures
    -from sklearn.pipeline import make_pipeline
    -from sklearn.linear_model import LinearRegression
    -
    -x=np.linspace(0.02,0.98,200)
    -noise = np.asarray(random.sample((range(200)),200))
    -y=x**3*noise
    -yn=x**3*100
    -poly3 = PolynomialFeatures(degree=3)
    -X = poly3.fit_transform(x[:,np.newaxis])
    -clf3 = LinearRegression()
    -clf3.fit(X,y)
    -
    -Xplot=poly3.fit_transform(x[:,np.newaxis])
    -poly3_plot=plt.plot(x, clf3.predict(Xplot), label='Cubic Fit')
    -plt.plot(x,yn, color='red', label="True Cubic")
    -plt.scatter(x, y, label='Data', color='orange', s=15)
    -plt.legend()
    -plt.show()
    -
    -def error(a):
    -    for i in y:
    -        err=(y-yn)/yn
    -    return abs(np.sum(err))/len(err)
    -
    -print (error(y))
    -
    -

    -Similarly, using R, we can perform similar studies. -(more details on R will be inserted later). +where \( \log_e (x) \) stands for the natural logarithm of \( x \). This error +estimate is best to use when targets having exponential growth, such +as population counts, average sales of a commodity over a span of +years etc.

    @@ -271,6 +277,10 @@ Similarly, using R, we can perform similar studies.

  • 36
  • 37
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • ...
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs031.html b/doc/pub/Regression/html/._Regression-bs031.html index 3ad7cabb6..3033d8063 100644 --- a/doc/pub/Regression/html/._Regression-bs031.html +++ b/doc/pub/Regression/html/._Regression-bs031.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,47 +232,51 @@ MathJax.Hub.Config({ -

    Simple regression model with gradient descent

    -Add info about the equations, play around with different learning rates +

    Cubic polynomial in scikit-learn

    + +

    +We will discuss in more +detail these and other functions in the various lectures. We conclude this part with another example. Instead of +a linear \( x \)-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. +Add description of the various python commands. +

    -

    # Importing various packages
    -from math import exp, sqrt
    -from random import random, seed
    +
    import matplotlib.pyplot as plt
     import numpy as np
    -import matplotlib.pyplot as plt
    +import random
    +from sklearn.linear_model import Ridge
    +from sklearn.preprocessing import PolynomialFeatures
    +from sklearn.pipeline import make_pipeline
    +from sklearn.linear_model import LinearRegression
     
    -x = 2*np.random.rand(100,1)
    -y = 4+3*x+np.random.randn(100,1)
    +x=np.linspace(0.02,0.98,200)
    +noise = np.asarray(random.sample((range(200)),200))
    +y=x**3*noise
    +yn=x**3*100
    +poly3 = PolynomialFeatures(degree=3)
    +X = poly3.fit_transform(x[:,np.newaxis])
    +clf3 = LinearRegression()
    +clf3.fit(X,y)
     
    -xb = np.c_[np.ones((100,1)), x]
    -theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    -print(theta_linreg)
    -theta = np.random.randn(2,1)
    -
    -eta = 0.1
    -Niterations = 1000
    -m = 100
    -
    -for iter in range(Niterations):
    -    gradients = 2.0/m*xb.T.dot(xb.dot(theta)-y)
    -    theta -= eta*gradients
    -
    -print(theta)
    -xnew = np.array([[0],[2]])
    -xbnew = np.c_[np.ones((2,1)), xnew]
    -ypredict = xbnew.dot(theta)
    -ypredict2 = xbnew.dot(theta_linreg)
    -plt.plot(xnew, ypredict, "r-")
    -plt.plot(xnew, ypredict2, "b-")
    -plt.plot(x, y ,'ro')
    -plt.axis([0,2.0,0, 15.0])
    -plt.xlabel(r'$x$')
    -plt.ylabel(r'$y$')
    -plt.title(r'Random numbers ')
    +Xplot=poly3.fit_transform(x[:,np.newaxis])
    +poly3_plot=plt.plot(x, clf3.predict(Xplot), label='Cubic Fit')
    +plt.plot(x,yn, color='red', label="True Cubic")
    +plt.scatter(x, y, label='Data', color='orange', s=15)
    +plt.legend()
     plt.show()
    +
    +def error(a):
    +    for i in y:
    +        err=(y-yn)/yn
    +    return abs(np.sum(err))/len(err)
    +
    +print (error(y))
     
    +

    +Using R, we can perform similar studies. +

    @@ -266,6 +299,11 @@ plt.show()

  • 36
  • 37
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • ...
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs032.html b/doc/pub/Regression/html/._Regression-bs032.html index cae569fdf..0f9b89474 100644 --- a/doc/pub/Regression/html/._Regression-bs032.html +++ b/doc/pub/Regression/html/._Regression-bs032.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,8 +232,7 @@ MathJax.Hub.Config({ -

    Simple regression model with stochastic gradient descent

    -Add info about the equations, play around with different learning rates +

    Polynomial Regression

    @@ -213,17 +241,24 @@ Add info about the equations, play around with different learning rates from random import random, seed import numpy as np import matplotlib.pyplot as plt -from sklearn.linear_model import SGDRegressor -x = 2*np.random.rand(100,1) -y = 4+3*x+np.random.randn(100,1) +m = 100 +x = 2*np.random.rand(m,1)+4. +y = 4+3*x*x+ +x-np.random.randn(m,1) -xb = np.c_[np.ones((100,1)), x] -theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y) -print(theta_linreg) -sgdreg = SGDRegressor(n_iter = 50, penalty=None, eta0=0.1) -sgdreg.fit(x,y.ravel()) -print(sgdreg.intercept_, sgdreg.coef_) +xb = np.c_[np.ones((m,1)), x] +theta = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y) +xnew = np.array([[0],[2]]) +xbnew = np.c_[np.ones((2,1)), xnew] +ypredict = xbnew.dot(theta) + +plt.plot(xnew, ypredict, "r-") +plt.plot(x, y ,'ro') +plt.axis([0,2.0,0, 15.0]) +plt.xlabel(r'$x$') +plt.ylabel(r'$y$') +plt.title(r'Random numbers ') +plt.show()

    @@ -246,6 +281,12 @@ sgdreg.fit(x,y.

  • 36
  • 37
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • 42
  • +
  • ...
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs033.html b/doc/pub/Regression/html/._Regression-bs033.html index 21186180b..d55114e2c 100644 --- a/doc/pub/Regression/html/._Regression-bs033.html +++ b/doc/pub/Regression/html/._Regression-bs033.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -201,36 +230,32 @@ MathJax.Hub.Config({

     

     

     

    - + + +

    Linking the regression analysis with a statistical interpretation

    -

    Polynomial Regression

    +Before we proceed, and to link with our discussions of Bayesian statistics to come, it is useful the derive the standard regression analysis equations using a statistical interpretation. This allows us also to derive quantities like the variance and other expectation values in a rather straightforward way. - -

    # Importing various packages
    -from math import exp, sqrt
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    +

    +It is assumed that \( \varepsilon_i +\sim \mathcal{N}(0, \sigma^2) \) and the \( \varepsilon_{i} \) are +independent, i.e.: +$$ +\begin{align*} +\mbox{Cov}(\varepsilon_{i_1}, +\varepsilon_{i_2}) & = \left\{ \begin{array}{lcc} \sigma^2 & \mbox{if} +& i_1 = i_2, \\ 0 & \mbox{if} & i_1 \not= i_2. \end{array} \right. +\end{align*} +$$ -m = 100 -x = 2*np.random.rand(m,1)+4. -y = 4+3*x*x+ +x-np.random.randn(m,1) +The randomness of \( \varepsilon_i \) implies that +\( \mathbf{Y}_i \) is also a random variable. In particular, +\( \mathbf{Y}_i \) is normally distributed, because \( \varepsilon_i \sim +\mathcal{N}(0, \sigma^2) \) and \( \mathbf{X}_{i,\ast} \, \beta \) is a +non-random scalar. To specify the parameters of the distribution of +\( \mathbf{Y}_i \) we need to calculate its first two moments. -xb = np.c_[np.ones((m,1)), x] -theta = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y) -xnew = np.array([[0],[2]]) -xbnew = np.c_[np.ones((2,1)), xnew] -ypredict = xbnew.dot(theta) - -plt.plot(xnew, ypredict, "r-") -plt.plot(x, y ,'ro') -plt.axis([0,2.0,0, 15.0]) -plt.xlabel(r'$x$') -plt.ylabel(r'$y$') -plt.title(r'Random numbers ') -plt.show() -

    @@ -251,6 +276,13 @@ plt.show()

  • 36
  • 37
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • 42
  • +
  • 43
  • +
  • ...
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs034.html b/doc/pub/Regression/html/._Regression-bs034.html index 364fa6719..a5c44e236 100644 --- a/doc/pub/Regression/html/._Regression-bs034.html +++ b/doc/pub/Regression/html/._Regression-bs034.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,84 +232,37 @@ MathJax.Hub.Config({ -

    Ridge and Lasso Regression

    +

    Expectation value and variance

    +Its expectation equals: +$$ +\begin{align*} +\mathbb{E}(Y_i) & = +\mathbb{E}(\mathbf{X}_{i, \ast} \, \beta) + \mathbb{E}(\varepsilon_i) +\, \, \, = \, \, \, \mathbf{X}_{i, \ast} \, \beta, +\end{align*} +$$ - -

    import matplotlib.pyplot as plt
    -import numpy as np
    -from sklearn import linear_model
    -from sklearn.linear_model import LinearRegression
    -from sklearn.metrics import mean_squared_error, r2_score
    +while
    +its variance is 
    +$$
    +\begin{align*} \mbox{Var}(Y_i) & = \mathbb{E} \{ [Y_i
    +- \mathbb{E}(Y_i)]^2 \} \, \, \, = \, \, \, \mathbb{E} ( Y_i^2 ) -
    +[\mathbb{E}(Y_i)]^2  \\  & = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \,
    +\beta + \varepsilon_i )^2] - ( \mathbf{X}_{i, \ast} \, \beta)^2 \\ &
    += \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 \varepsilon_i
    +\mathbf{X}_{i, \ast} \, \beta + \varepsilon_i^2 ] - ( \mathbf{X}_{i,
    +\ast} \, \beta)^2 \\  & = ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2
    +\mathbb{E}(\varepsilon_i) \mathbf{X}_{i, \ast} \, \beta +
    +\mathbb{E}(\varepsilon_i^2 ) - ( \mathbf{X}_{i, \ast} \, \beta)^2 
    +\\ & = \mathbb{E}(\varepsilon_i^2 ) \, \, \, = \, \, \,
    +\mbox{Var}(\varepsilon_i) \, \, \, = \, \, \, \sigma^2.  
    +\end{align*}
    +$$
     
    -#creating data with random noise
    -x=np.arange(50)
    +Hence, \( Y_i \sim \mathcal{N}( \mathbf{X}_{i, \ast} \, \beta, \sigma^2) \).
     
    -delta=np.random.uniform(-2.5,2.5, size=(50))
    -np.random.shuffle(delta)
    -y =0.5*x+5+delta
    -
    -#arranging data into 2x50 matrix
    -a=np.array(x) #inputs
    -b=np.array(y) #outputs
    -
    -#Split into training and test
    -X_train=a[:37, np.newaxis]
    -X_test=a[37:, np.newaxis]
    -y_train=b[:37]
    -y_test=b[37:]
    -
    -print ("X_train: ", X_train.shape)
    -print ("y_train: ", y_train.shape)
    -print ("X_test: ", X_test.shape)
    -print ("y_test: ", y_test.shape)
    -
    -print ("------------------------------------")
    -
    -print ("Ordinary Least Squares")
    -#Add Ordinary Least Squares fit
    -reg=LinearRegression()
    -reg.fit(X_train, y_train)
    -pred=reg.predict(X_test)
    -print ("Prediction Shape: ", pred.shape)
    -
    -print('Coefficients: \n', reg.coef_)
    -# The mean squared error
    -print("Mean squared error: %.2f"
    -      % mean_squared_error(y_test, pred))
    -# Explained variance score: 1 is perfect prediction
    -print('Variance score: %.2f' % r2_score(y_test, pred))
    -
    -#plot
    -plt.scatter(X_test,y_test,color='green', label="Training Data")
    -plt.plot(X_test, pred, color='black', label="Fit Line")
    -plt.legend()
    -plt.show()
    -
    -print ("------------------------------------")
    -
    -print ("Ridge Regression")
    -
    -ridge=linear_model.RidgeCV(alphas=[0.1,1.0,10.0])
    -ridge.fit(X_train,y_train)
    -print ("Ridge Coefficient: ",ridge.coef_)
    -print ("Ridge Intercept: ", ridge.intercept_)
    -#Look into graphing with Ridge fit
    -
    -print ("------------------------------------")
    -
    -print ("Lasso")
    -lasso=linear_model.Lasso(alpha=0.1)
    -lasso.fit(X_train,y_train)
    -predl=lasso.predict(X_test)
    -print("Lasso Coefficient: ", lasso.coef_)
    -print("Lasso Intercept: ", lasso.intercept_)
    -plt.scatter(X_test,y_test,color='green', label="Training Data")
    -plt.plot(X_test, predl, color='blue', label="Lasso")
    -plt.legend()
    -plt.show()
    -

    @@ -300,6 +282,14 @@ plt.show()

  • 36
  • 37
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • 42
  • +
  • 43
  • +
  • 44
  • +
  • ...
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs035.html b/doc/pub/Regression/html/._Regression-bs035.html index 476608042..3902c8b08 100644 --- a/doc/pub/Regression/html/._Regression-bs035.html +++ b/doc/pub/Regression/html/._Regression-bs035.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -207,16 +236,20 @@ MathJax.Hub.Config({

    -How can we use the singular value decomposition to find the parameters \( \beta_j \)? More details will come. We first note that a general \( m\times n \) matrix \( \hat{A} \) can be written in terms of a diagonal matrix \( \hat{\Sigma} \) of dimensionality \( n\times n \) and two orthognal matrices \( \hat{U} \) and \( \hat{V} \), where the first has dimensionality \( m \times n \) and the last dimensionality \( n\times n \). We have then -$$ -\hat{A} = \hat{U}\hat{\Sigma}\hat{V} -$$ -

    -
    -

    -Add codes and discuss this in connection with lasso and ridge, show example where the standard inversion of a matrix fails and where SVD comes to rescue +A general +\( m\times n \) matrix \( \hat{A} \) can be written in terms of a diagonal +matrix \( \hat{D} \) of dimensionality \( n\times n \) and two orthognal +matrices \( \hat{U} \) and \( \hat{V} \), where the first has dimensionality +\( m \times m \) and the last dimensionality \( n\times n \). +We have then +$$ +\hat{A} = \hat{U}\hat{D}\hat{V}^T +$$ +

    + +

    @@ -236,6 +269,15 @@ Add codes and discuss this in connection with lasso and ridge, show example wher

  • 36
  • 37
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • 42
  • +
  • 43
  • +
  • 44
  • +
  • 45
  • +
  • ...
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs036.html b/doc/pub/Regression/html/._Regression-bs036.html index b5551cea1..a2a01b043 100644 --- a/doc/pub/Regression/html/._Regression-bs036.html +++ b/doc/pub/Regression/html/._Regression-bs036.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,11 +232,84 @@ MathJax.Hub.Config({ -

    Lasso and Ridge regression

    +

    Code examples for Ridge and Lasso Regression

    -Discuss the mathematics here + +

    import matplotlib.pyplot as plt
    +import numpy as np
    +from sklearn import linear_model
    +from sklearn.linear_model import LinearRegression
    +from sklearn.metrics import mean_squared_error, r2_score
    +
    +#creating data with random noise
    +x=np.arange(50)
    +
    +delta=np.random.uniform(-2.5,2.5, size=(50))
    +np.random.shuffle(delta)
    +y =0.5*x+5+delta
    +
    +#arranging data into 2x50 matrix
    +a=np.array(x) #inputs
    +b=np.array(y) #outputs
    +
    +#Split into training and test
    +X_train=a[:37, np.newaxis]
    +X_test=a[37:, np.newaxis]
    +y_train=b[:37]
    +y_test=b[37:]
    +
    +print ("X_train: ", X_train.shape)
    +print ("y_train: ", y_train.shape)
    +print ("X_test: ", X_test.shape)
    +print ("y_test: ", y_test.shape)
    +
    +print ("------------------------------------")
    +
    +print ("Ordinary Least Squares")
    +#Add Ordinary Least Squares fit
    +reg=LinearRegression()
    +reg.fit(X_train, y_train)
    +pred=reg.predict(X_test)
    +print ("Prediction Shape: ", pred.shape)
    +
    +print('Coefficients: \n', reg.coef_)
    +# The mean squared error
    +print("Mean squared error: %.2f"
    +      % mean_squared_error(y_test, pred))
    +# Explained variance score: 1 is perfect prediction
    +print('Variance score: %.2f' % r2_score(y_test, pred))
    +
    +#plot
    +plt.scatter(X_test,y_test,color='green', label="Training Data")
    +plt.plot(X_test, pred, color='black', label="Fit Line")
    +plt.legend()
    +plt.show()
    +
    +print ("------------------------------------")
    +
    +print ("Ridge Regression")
    +
    +ridge=linear_model.RidgeCV(alphas=[0.1,1.0,10.0])
    +ridge.fit(X_train,y_train)
    +print ("Ridge Coefficient: ",ridge.coef_)
    +print ("Ridge Intercept: ", ridge.intercept_)
    +#Look into graphing with Ridge fit
    +
    +print ("------------------------------------")
    +
    +print ("Lasso")
    +lasso=linear_model.Lasso(alpha=0.1)
    +lasso.fit(X_train,y_train)
    +predl=lasso.predict(X_test)
    +print("Lasso Coefficient: ", lasso.coef_)
    +print("Lasso Intercept: ", lasso.intercept_)
    +plt.scatter(X_test,y_test,color='green', label="Training Data")
    +plt.plot(X_test, predl, color='blue', label="Lasso")
    +plt.legend()
    +plt.show()
    +

    @@ -225,6 +327,14 @@ Discuss the mathematics here

  • 36
  • 37
  • 38
  • +
  • 39
  • +
  • 40
  • +
  • 41
  • +
  • 42
  • +
  • 43
  • +
  • 44
  • +
  • 45
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs037.html b/doc/pub/Regression/html/._Regression-bs037.html index 1a3204fc2..d7790e7d6 100644 --- a/doc/pub/Regression/html/._Regression-bs037.html +++ b/doc/pub/Regression/html/._Regression-bs037.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -203,14 +232,55 @@ MathJax.Hub.Config({ -

    Logistic regression

    -Add discussion about classification versus regression, show examples of more than two cases and why regression is not the best approach. Motivate for k-nearest neighbors +

    From standard regression to Ridge regressions

    -Add examples on classification problems +One of the typical problems we encounter with linear regression, in particular +when the matrix \( \hat{X} \) (our so-called design matrix) is high-dimensional, +are problems with near singular or singular matrices. The column vectors of \( \hat{X} \) +may be linearly dependent, normally referred to as super-collinearity. +This means that the matrix may be rank deficient and it is basically impossible to +to model the data using linear regression. As an example, consider the matrix +$$ +\begin{align*} +\mathbf{X} & = \left[ +\begin{array}{rrr} +1 & -1 & 2 +\\ +1 & 0 & 1 +\\ +1 & 2 & -1 +\\ +1 & 1 & 0 +\end{array} \right] +\end{align*} +$$

    +The columns of \( \hat{X} \) are linearly dependent. We se this easily since the +the first column is the row-wise sum of the other two columns. The rank (more correct, +the column rank) of a matrix is the dimension of the space spanned by the +column vectors. Hence, the rank of \( \mathbf{X} \) is equal to the number +of linearly independent columns. In this particular case the matrix has rank 2. +

    +Super-collinearity of an \( (n \times p) \)-dimensional design matrix \( \mathbf{X} \) implies +that the inverse of the matrix \( \hat{X}^T\hat{x} \) (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this +$$ +\begin{align*} +\hat{X} & = \left[ +\begin{array}{rr} +1 & -1 +\\ +1 & -1 +\end{array} \right]. +\end{align*} +$$ + +We see easily that \( \mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0 \). Hence, \( \mathbf{X} \) is singular and its inverse is undefined. +This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigenvalue which is zero. + +

    diff --git a/doc/pub/Regression/html/._Regression-bs038.html b/doc/pub/Regression/html/._Regression-bs038.html new file mode 100644 index 000000000..cca079168 --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs038.html @@ -0,0 +1,307 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Fixing the singularity

    + +

    +If our design matrix \( \hat{X} \) which enters the linear regression problem +$$ +\begin{align} +\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, +\tag{1} +\end{align} +$$ + +has linearly dependent column vectors, we will not be able to compute the inverse +of \( \hat{X}^T\hat{X} \) and we cannot find the parameters (estimators) \( \beta_i \). +The estimators are only well-defined if \( (\hat{X}^{T}\hat{X})^{-1} \) exits. +This is more likely to happen when the matrix \( \hat{X} \) is high-dimensional. In this case it is likely to encounter a situation where +the regression parameters \( \beta_i \) cannot be estimated. + +

    +The ad hoc approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change +$$ +\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, +$$ + +where \( \hat{I} \) is the identity matrix. + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs039.html b/doc/pub/Regression/html/._Regression-bs039.html new file mode 100644 index 000000000..aa8c96dc3 --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs039.html @@ -0,0 +1,392 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    A second-order polynomial with Ridge and Lasso

    +

    + + +

    import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.linear_model import Ridge
    +from sklearn.metrics import r2_score
    +
    +np.random.seed(4155)
    +
    +n_samples = 100
    +
    +x = np.random.rand(n_samples,1)
    +y = 5*x*x + 0.1*np.random.rand(n_samples,1)
    +
    +# Centering  x and y.
    +x_ = x - np.mean(x)
    +y_ = y - np.mean(y) # beta_0 = mean(y)
    +
    +X = np.c_[np.ones((n_samples,1)), x, x**2]
    +X_ = np.c_[x_, x_**2]
    +
    +
    +### 1.
    +lmb_values = [1e-4, 1e-3, 1e-2, 10, 1e2, 1e4]
    +num_values = len(lmb_values)
    +
    +## Ridge-regression of centered and not centered data
    +beta_ridge = np.zeros((3,num_values))
    +beta_ridge_centered = np.zeros((3,num_values))
    +
    +I3 = np.eye(3)
    +I2 = np.eye(2)
    +
    +for i,lmb in enumerate(lmb_values):
    +    beta_ridge[:,i] = (np.linalg.inv( X.T @ X + lmb*I3) @ X.T @ y).flatten()
    +    beta_ridge_centered[1:,i] = (np.linalg.inv( X_.T @ X_ + lmb*I2) @ X_.T @ y_).flatten()
    +
    +# sett beta_0 = np.mean(y)
    +beta_ridge_centered[0,:] = np.mean(y)
    +
    +## OLS (ordinary least squares) solution 
    +beta_ls = np.linalg.inv( X.T @ X ) @ X.T @ y
    +
    +## Evaluate the models
    +pred_ls = X @ beta_ls
    +pred_ridge =  X @ beta_ridge
    +pred_ridge_centered =  X_ @ beta_ridge_centered[1:] + beta_ridge_centered[0,:]
    +
    +## Plot the results
    +
    +# Sorting
    +sort_ind = np.argsort(x[:,0])
    +
    +x_plot = x[sort_ind,0]
    +x_centered_plot = x_[sort_ind,0]
    +
    +pred_ls_plot = pred_ls[sort_ind,0]
    +pred_ridge_plot = pred_ridge[sort_ind,:]
    +pred_ridge_centered_plot = pred_ridge_centered[sort_ind,:]
    +
    +# Plott not centered
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +
    +plt.title('linear regression on un-centered data')
    +plt.legend()
    +
    +# Plott centered
    +plt.figure()
    +
    +for i in range(num_values):
    +    plt.plot(x_centered_plot,pred_ridge_centered_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x_,y,'ro')
    +
    +plt.title('linear regression on centered data')
    +plt.legend()
    +
    +
    +# 2.
    +
    +pred_ridge_scikit =  np.zeros((n_samples,num_values))
    +for i,lmb in enumerate(lmb_values):
    +    pred_ridge_scikit[:,i] = (Ridge(alpha=lmb,fit_intercept=False).fit(X,y).predict(X)).flatten() # fit_intercept=False fordi bias er allerede i X
    +
    +plt.figure()
    +
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_scikit[sort_ind,i],label='scikit-ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +plt.legend()
    +plt.title('linear regression using scikit')
    +
    +plt.show()
    +
    +### R2-score of the results
    +for i in range(num_values):
    +    print('lambda = %g'%lmb_values[i])
    +    print('r2 for scikit: %g'%r2_score(y,pred_ridge_scikit[:,i]))
    +    print('r2 for own code, not centered: %g'%r2_score(y,pred_ridge[:,i]))
    +    print('r2 for own, centered: %g\n'%r2_score(y,pred_ridge_centered[:,i]))
    +
    +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs040.html b/doc/pub/Regression/html/._Regression-bs040.html new file mode 100644 index 000000000..e62c176d7 --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs040.html @@ -0,0 +1,304 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Fitting vs. predicting when data is in the model class

    + +

    +We start by considering the case +\( f(x)=2x \). + +

    +Then the data is clearly generated by a model that is contained within +all three model classes we are using to make predictions (linear +models, third order polynomials, and tenth order polynomials). + +

    +Run the code for the following cases: + +

      +
    1. For \( f(x)=2x \) , \( Ntrain=10 \) and \( \sigma =0 \) (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when \( x \in [0,1] \) . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?
    2. +
    3. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?
    4. +
    5. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example \( x \in [0,1.2] \) ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?
    6. +
    7. Repeat the above for \( f(x)=2x \) , \( Ntrain=10 \) , and \( \sigma=1 \) . What changes?
    8. +
    + +Repeat the exercises above for \( f(x)=2x \) , \( Ntrain=100 \) , and \( \sigma=1 \) . What changes? +Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well. + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs041.html b/doc/pub/Regression/html/._Regression-bs041.html new file mode 100644 index 000000000..0449005ac --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs041.html @@ -0,0 +1,291 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Fitting versus predicting when data is not in the model class

    + +

    +Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider \( f(x)=2x-10x^5+15x^{10} \) . Notice that the for linear and third-order polynomial the true model \( f(x) \) is not contained in model class. + +

      +
    1. Do better fits lead to better predictions?
    2. +
    3. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points \( Ntrain \) and \( \sigma \)?
    4. +
    + +Summarize what you think you learned about the relationship of knowing the true model class and predictive power. + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs042.html b/doc/pub/Regression/html/._Regression-bs042.html new file mode 100644 index 000000000..ff3f3130a --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs042.html @@ -0,0 +1,365 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    The code

    + +

    + + +

    import numpy as np
    +import sklearn as sk
    +from sklearn import datasets, linear_model
    +from sklearn.preprocessing import PolynomialFeatures
    +
    +import matplotlib as mpl
    +from matplotlib import pyplot as plt
    +
    +%matplotlib notebook
    +
    +# The Training Data
    +
    +N_train=100
    +
    +sigma_train=1;
    +
    +# Train on integers
    +x=np.linspace(0.05,0.95,N_train)
    +# Draw random noise
    +s = sigma_train*np.random.randn(N_train)
    +
    +#linear
    +y=2*x+s
    +
    +#Tenth Order
    +#y=2*x-10*x**5+15*x**10+s
    +
    +p1=plt.plot(x,y, "o",ms=15, label='Training')
    +
    +#Linear Regression
    +# Create linear regression object
    +clf = linear_model.LinearRegression()
    +
    +# Train the model using the training sets
    +clf.fit(x[:, np.newaxis], y)
    +# The coefficients
    +
    +xplot=np.linspace(0.02,0.98,200)
    +linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')
    +
    +#Polynomial Regression
    +
    +
    +poly3 = PolynomialFeatures(degree=3)
    +X = poly3.fit_transform(x[:,np.newaxis])
    +clf3 = linear_model.LinearRegression()
    +clf3.fit(X,y)
    +
    +
    +Xplot=poly3.fit_transform(xplot[:,np.newaxis])
    +poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')
    +
    +
    +
    +#poly5 = PolynomialFeatures(degree=5)
    +#X = poly5.fit_transform(x[:,np.newaxis])
    +#clf5 = linear_model.LinearRegression()
    +#clf5.fit(X,y)
    +
    +#Xplot=poly5.fit_transform(xplot[:,np.newaxis])
    +#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)
    +
    +poly10 = PolynomialFeatures(degree=10)
    +X = poly10.fit_transform(x[:,np.newaxis])
    +clf10 = linear_model.LinearRegression()
    +clf10.fit(X,y)
    +
    +Xplot=poly10.fit_transform(xplot[:,np.newaxis])
    +poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')
    +
    +axes = plt.gca()
    +axes.set_ylim([-7,7])
    +
    +handles, labels=axes.get_legend_handles_labels()
    +plt.legend(handles,labels, loc='lower center')
    +plt.xlabel("$x$")
    +plt.ylabel("$y$")
    +Title="$N=$"+str(N_train)+", $\sigma=$"+str(sigma_train)
    +plt.title(Title+" (train)")
    +plt.tight_layout()
    +plt.show()
    +
    +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs043.html b/doc/pub/Regression/html/._Regression-bs043.html new file mode 100644 index 000000000..b45774529 --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs043.html @@ -0,0 +1,327 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Generating test data

    +

    + + +

    # Generate Test Data
    +
    +#Number of test data
    +N_test=20
    +
    +sigma_test=sigma_train
    +
    +max_x=1.2
    +x_test=max_x*np.random.random(N_test)
    +# Draw random noise
    +s_test = sigma_test*np.random.randn(N_test)
    +
    +#Linear
    +y_test=2*x_test+s_test
    +#Tenth order
    +#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test
    +
    +#Make design matrices for prediction
    +x_plot=np.linspace(0,max_x, 200)
    +X3 = poly3.fit_transform(x_plot[:,np.newaxis])
    +X10 = poly10.fit_transform(x_plot[:,np.newaxis])
    +
    +%matplotlib notebook
    +
    +fig = plt.figure() 
    +p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')
    +p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')
    +p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')
    +p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')
    +
    +
    +plt.legend(loc=2)
    +plt.xlabel('$x$')
    +plt.ylabel('$y$')
    +plt.legend(loc='best')
    +plt.title(Title+" (pred.)")
    +plt.tight_layout()
    +plt.show()
    +
    +#Linear Filename
    +#filename_test=Title+"pred-linear.pdf"
    +#Tenth Order Filename
    +#filename_test=Title+"pred-o10.pdf"
    +#plt.savefig(filename_test)
    +#plt.ylim((-6,12))
    +
    +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs044.html b/doc/pub/Regression/html/._Regression-bs044.html new file mode 100644 index 000000000..1ad5ddece --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs044.html @@ -0,0 +1,278 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Lasso regression

    + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs045.html b/doc/pub/Regression/html/._Regression-bs045.html new file mode 100644 index 000000000..59fd87d05 --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs045.html @@ -0,0 +1,275 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

     

     

     

    + + + + +

    Logistic regression

    + +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/Regression-bs.html b/doc/pub/Regression/html/Regression-bs.html index 9560a3323..c92c12f8a 100644 --- a/doc/pub/Regression/html/Regression-bs.html +++ b/doc/pub/Regression/html/Regression-bs.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents @@ -222,7 +251,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Aug 24, 2018

    +

    Sep 6, 2018


    @@ -246,7 +275,7 @@ MathJax.Hub.Config({

  • 9
  • 10
  • ...
  • -
  • 38
  • +
  • 46
  • »
  • diff --git a/doc/pub/Regression/html/Regression-reveal.html b/doc/pub/Regression/html/Regression-reveal.html index d5aaa438c..13e0c45e3 100644 --- a/doc/pub/Regression/html/Regression-reveal.html +++ b/doc/pub/Regression/html/Regression-reveal.html @@ -148,7 +148,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

     
    -

    Aug 24, 2018

    +

    Sep 6, 2018


    @@ -182,7 +182,35 @@ A regression model aims at finding a likelihood function \( p(y\vert \hat{x}) \)

    -

    General linear models

    +

    Regression analysis, overarching aims II

    +
    + +

    +Consider an experiment in which \( p \) characteristics of \( n \) samples are +measured. The data from this experiment are denoted \( \mathbf{X} \), with +\( \mathbf{X} \) as above. The matrix \( \mathbf{X} \) is called the design +matrix. Additional information of the samples is available in the +form of \( \mathbf{Y} \) (also as above). The variable \( \mathbf{Y} \) is +generally referred to as the response variable. The aim of +regression analysis is to explain \( \mathbf{Y} \) in terms of +\( \mathbf{X} \) through a functional relationship like \( Y_i = +f(\mathbf{X}_{i,\ast}) \). When no prior knowledge on the form of +\( f(\cdot) \) is available, it is common to assume a linear relationship +between \( \mathbf{X} \) and \( \mathbf{Y} \). This assumption gives rise to +the linear regression model where \( \beta = (\beta_1, \ldots, +\beta_p)^{\top} \) is the regression parameter. The parameter +\( \beta_j \), \( j=1, \ldots, p \), represents the effect size of covariate +\( j \) on the response. That is, for each unit change in covariate \( j \) +(while keeping the other covariates fixed) the observed change in the +response is equal to \( \beta_j \). + + +

    +
    + + +
    +

    General linear models

    @@ -204,7 +232,7 @@ where \( \epsilon_i \) is the error in our approximation.

    -

    Rewriting the fitting procedure as a linear algebra problem

    +

    Rewriting the fitting procedure as a linear algebra problem

    @@ -225,7 +253,7 @@ $$

    -

    Rewriting the fitting procedure as a linear algebra problem, follows

    +

    Rewriting the fitting procedure as a linear algebra problem, follows

    @@ -275,7 +303,7 @@ $$

    -

    Generalizing the fitting procedure as a linear algebra problem

    +

    Generalizing the fitting procedure as a linear algebra problem

    @@ -299,7 +327,7 @@ $$

    -

    Generalizing the fitting procedure as a linear algebra problem

    +

    Generalizing the fitting procedure as a linear algebra problem

    @@ -330,7 +358,7 @@ The left-hand side of this equation forms know. Our error vector \( \hat{\epsilo

    -

    Optimizing our parameters

    +

    Optimizing our parameters

    @@ -353,7 +381,7 @@ $$

    -

    Optimizing our parameters, more details

    +

    Optimizing our parameters, more details

    @@ -382,7 +410,7 @@ $$

    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -430,7 +458,7 @@ $$

    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -461,7 +489,7 @@ $$

    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -494,7 +522,7 @@ meaning that the solution for \( \hat{\beta} \) is the one which minimizes the r

    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -517,7 +545,7 @@ where the matrix \( \hat{\Sigma} \) is a diagonal matrix with \( \sigma_i \) as

    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -548,7 +576,7 @@ where we have defined the matrix \( \hat{A} =\hat{X}/\hat{\Sigma} \) with matrix

    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -577,7 +605,7 @@ $$

    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -613,7 +641,7 @@ $$

    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -642,7 +670,7 @@ $$

    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -698,7 +726,7 @@ This approach (different linear and non-linear regression) suffers often from bo

    -

    Simple regression model

    +

    Simple regression model

    We are now ready to write our first program which aims at solving the above linear regression equations. We start with data we have produced ourselves, in this case normally distributed random numbers along the \( x \)-axis. These numbers define then the value of a function \( y(x)=4+3x+N(0,1) \). Thereafter we order the \( x \) values and employ our linear regression algorithm to set up the best fit. Here we find it useful to use the numpy function \( c\_ \) arrays where arrays are stacked along their last axis after being upgraded to at least two dimensions with ones post-pended to the shape. The following examples help in understanding what happens

    @@ -738,7 +766,7 @@ We see that, as expected, a linear fit gives a seemingly (from the graph) good r

    -

    Simple regression model, now using scikit-learn

    +

    Simple regression model, now using scikit-learn

    We can repeat the above algorithm using scikit-learn as follows @@ -770,7 +798,7 @@ plt.show()

    -

    Simple linear regression model using scikit-learn

    +

    Simple linear regression model using scikit-learn

    We start with perhaps our simplest possible example, using scikit-learn to perform linear regression analysis on a data set produced by us. @@ -841,7 +869,7 @@ plt.show()

    -

    Simple linear regression model

    +

    Simple linear regression model

    This example serves several aims. It allows us to demonstrate several @@ -865,7 +893,7 @@ where \( x \) is defined as before.

    -

    Less noise

    +

    Less noise

    Does the fit look better? Indeed, by @@ -878,7 +906,7 @@ have not discussed a more rigorous approach to the cost function.

    -

    How to study our fits

    +

    How to study our fits

    We need more rigorous criteria in defining whether we have succeeded or @@ -902,7 +930,7 @@ dimensionless.

    -

    Minimizing the cost function

    +

    Minimizing the cost function

    Minimizing the cost function is a central aspect of @@ -923,7 +951,7 @@ the \( \chi^2 \) function becomes smaller.

    -

    Relative error

    +

    Relative error

    There are many ways to define the cost function. A simpler approach is to look at the relative difference between the training data and the predicted data, that is we define @@ -965,7 +993,7 @@ relative error.

    -

    The richness of scikit-learn

    +

    The richness of scikit-learn

    As mentioned above, scikit-learn has an impressive functionality. @@ -1011,7 +1039,7 @@ plt.show()

    -

    Functions in scikit-learn

    +

    Functions in scikit-learn

    The function coef gives us the parameter \( \beta \) of our fit while intercept yields @@ -1030,7 +1058,7 @@ this function as being similar to the \( \chi^2 \) function defined above.

    -

    Other functions in scikit-learn

    +

    Other functions in scikit-learn

    The r2score function computes \( R^2 \), the coefficient of @@ -1058,7 +1086,7 @@ $$

    -

    The mean absolute error and other functions in scikit-learn

    +

    The mean absolute error and other functions in scikit-learn

    Another quantity will meet again in our discussions of regression analysis is @@ -1087,12 +1115,13 @@ years etc.

    -

    Cubic polynomial in scikit-learn

    +

    Cubic polynomial in scikit-learn

    We will discuss in more detail these and other functions in the various lectures. We conclude this part with another example. Instead of -a linear \( x \)-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. +a linear \( x \)-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. +Add description of the various python commands.

    @@ -1129,84 +1158,12 @@ plt.show() print (error(y))

    -Similarly, using R, we can perform similar studies. -(more details on R will be inserted later). +Using R, we can perform similar studies.

    -

    Simple regression model with gradient descent

    -Add info about the equations, play around with different learning rates -

    - - -

    # Importing various packages
    -from math import exp, sqrt
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    -
    -x = 2*np.random.rand(100,1)
    -y = 4+3*x+np.random.randn(100,1)
    -
    -xb = np.c_[np.ones((100,1)), x]
    -theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    -print(theta_linreg)
    -theta = np.random.randn(2,1)
    -
    -eta = 0.1
    -Niterations = 1000
    -m = 100
    -
    -for iter in range(Niterations):
    -    gradients = 2.0/m*xb.T.dot(xb.dot(theta)-y)
    -    theta -= eta*gradients
    -
    -print(theta)
    -xnew = np.array([[0],[2]])
    -xbnew = np.c_[np.ones((2,1)), xnew]
    -ypredict = xbnew.dot(theta)
    -ypredict2 = xbnew.dot(theta_linreg)
    -plt.plot(xnew, ypredict, "r-")
    -plt.plot(xnew, ypredict2, "b-")
    -plt.plot(x, y ,'ro')
    -plt.axis([0,2.0,0, 15.0])
    -plt.xlabel(r'$x$')
    -plt.ylabel(r'$y$')
    -plt.title(r'Random numbers ')
    -plt.show()
    -
    -
    - - -
    -

    Simple regression model with stochastic gradient descent

    -Add info about the equations, play around with different learning rates -

    - - -

    # Importing various packages
    -from math import exp, sqrt
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    -from sklearn.linear_model import SGDRegressor
    -
    -x = 2*np.random.rand(100,1)
    -y = 4+3*x+np.random.randn(100,1)
    -
    -xb = np.c_[np.ones((100,1)), x]
    -theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    -print(theta_linreg)
    -sgdreg = SGDRegressor(n_iter = 50, penalty=None, eta0=0.1)
    -sgdreg.fit(x,y.ravel())
    -print(sgdreg.intercept_, sgdreg.coef_)
    -
    -
    - - -
    -

    Polynomial Regression

    +

    Polynomial Regression

    @@ -1238,7 +1195,94 @@ plt.show()

    -

    Ridge and Lasso Regression

    +

    Linking the regression analysis with a statistical interpretation

    + +

    +Before we proceed, and to link with our discussions of Bayesian statistics to come, it is useful the derive the standard regression analysis equations using a statistical interpretation. This allows us also to derive quantities like the variance and other expectation values in a rather straightforward way. + +

    +It is assumed that \( \varepsilon_i +\sim \mathcal{N}(0, \sigma^2) \) and the \( \varepsilon_{i} \) are +independent, i.e.: +

     
    +$$ +\begin{align*} +\mbox{Cov}(\varepsilon_{i_1}, +\varepsilon_{i_2}) & = \left\{ \begin{array}{lcc} \sigma^2 & \mbox{if} +& i_1 = i_2, \\ 0 & \mbox{if} & i_1 \not= i_2. \end{array} \right. +\end{align*} +$$ +

     
    + +The randomness of \( \varepsilon_i \) implies that +\( \mathbf{Y}_i \) is also a random variable. In particular, +\( \mathbf{Y}_i \) is normally distributed, because \( \varepsilon_i \sim +\mathcal{N}(0, \sigma^2) \) and \( \mathbf{X}_{i,\ast} \, \beta \) is a +non-random scalar. To specify the parameters of the distribution of +\( \mathbf{Y}_i \) we need to calculate its first two moments. +

    + + +
    +

    Expectation value and variance

    + +

    +Its expectation equals: +

     
    +$$ +\begin{align*} +\mathbb{E}(Y_i) & = +\mathbb{E}(\mathbf{X}_{i, \ast} \, \beta) + \mathbb{E}(\varepsilon_i) +\, \, \, = \, \, \, \mathbf{X}_{i, \ast} \, \beta, +\end{align*} +$$ +

     
    + +while +its variance is +

     
    +$$ +\begin{align*} \mbox{Var}(Y_i) & = \mathbb{E} \{ [Y_i +- \mathbb{E}(Y_i)]^2 \} \, \, \, = \, \, \, \mathbb{E} ( Y_i^2 ) - +[\mathbb{E}(Y_i)]^2 \\ & = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, +\beta + \varepsilon_i )^2] - ( \mathbf{X}_{i, \ast} \, \beta)^2 \\ & += \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 \varepsilon_i +\mathbf{X}_{i, \ast} \, \beta + \varepsilon_i^2 ] - ( \mathbf{X}_{i, +\ast} \, \beta)^2 \\ & = ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 +\mathbb{E}(\varepsilon_i) \mathbf{X}_{i, \ast} \, \beta + +\mathbb{E}(\varepsilon_i^2 ) - ( \mathbf{X}_{i, \ast} \, \beta)^2 +\\ & = \mathbb{E}(\varepsilon_i^2 ) \, \, \, = \, \, \, +\mbox{Var}(\varepsilon_i) \, \, \, = \, \, \, \sigma^2. +\end{align*} +$$ +

     
    + +Hence, \( Y_i \sim \mathcal{N}( \mathbf{X}_{i, \ast} \, \beta, \sigma^2) \). +

    + + +
    +

    The singular value decompostion

    +
    + +

    +A general +\( m\times n \) matrix \( \hat{A} \) can be written in terms of a diagonal +matrix \( \hat{D} \) of dimensionality \( n\times n \) and two orthognal +matrices \( \hat{U} \) and \( \hat{V} \), where the first has dimensionality +\( m \times m \) and the last dimensionality \( n\times n \). +We have then +

     
    +$$ +\hat{A} = \hat{U}\hat{D}\hat{V}^T +$$ +

     
    +

    +
    + + +
    +

    Code examples for Ridge and Lasso Regression

    @@ -1320,37 +1364,403 @@ plt.show()

    -

    The singular value decompostion

    -
    - -

    -How can we use the singular value decomposition to find the parameters \( \beta_j \)? More details will come. We first note that a general \( m\times n \) matrix \( \hat{A} \) can be written in terms of a diagonal matrix \( \hat{\Sigma} \) of dimensionality \( n\times n \) and two orthognal matrices \( \hat{U} \) and \( \hat{V} \), where the first has dimensionality \( m \times n \) and the last dimensionality \( n\times n \). We have then -

     
    -$$ -\hat{A} = \hat{U}\hat{\Sigma}\hat{V} -$$ -

     
    -

    +

    From standard regression to Ridge regressions

    -Add codes and discuss this in connection with lasso and ridge, show example where the standard inversion of a matrix fails and where SVD comes to rescue +One of the typical problems we encounter with linear regression, in particular +when the matrix \( \hat{X} \) (our so-called design matrix) is high-dimensional, +are problems with near singular or singular matrices. The column vectors of \( \hat{X} \) +may be linearly dependent, normally referred to as super-collinearity. +This means that the matrix may be rank deficient and it is basically impossible to +to model the data using linear regression. As an example, consider the matrix +

     
    +$$ +\begin{align*} +\mathbf{X} & = \left[ +\begin{array}{rrr} +1 & -1 & 2 +\\ +1 & 0 & 1 +\\ +1 & 2 & -1 +\\ +1 & 1 & 0 +\end{array} \right] +\end{align*} +$$ +

     
    + +

    +The columns of \( \hat{X} \) are linearly dependent. We se this easily since the +the first column is the row-wise sum of the other two columns. The rank (more correct, +the column rank) of a matrix is the dimension of the space spanned by the +column vectors. Hence, the rank of \( \mathbf{X} \) is equal to the number +of linearly independent columns. In this particular case the matrix has rank 2. + +

    +Super-collinearity of an \( (n \times p) \)-dimensional design matrix \( \mathbf{X} \) implies +that the inverse of the matrix \( \hat{X}^T\hat{x} \) (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this +

     
    +$$ +\begin{align*} +\hat{X} & = \left[ +\begin{array}{rr} +1 & -1 +\\ +1 & -1 +\end{array} \right]. +\end{align*} +$$ +

     
    + +We see easily that \( \mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0 \). Hence, \( \mathbf{X} \) is singular and its inverse is undefined. +This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigenvalue which is zero.

    -

    Lasso and Ridge regression

    +

    Fixing the singularity

    -Discuss the mathematics here +If our design matrix \( \hat{X} \) which enters the linear regression problem +

     
    +$$ +\begin{align} +\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, +\tag{1} +\end{align} +$$ +

     
    + +has linearly dependent column vectors, we will not be able to compute the inverse +of \( \hat{X}^T\hat{X} \) and we cannot find the parameters (estimators) \( \beta_i \). +The estimators are only well-defined if \( (\hat{X}^{T}\hat{X})^{-1} \) exits. +This is more likely to happen when the matrix \( \hat{X} \) is high-dimensional. In this case it is likely to encounter a situation where +the regression parameters \( \beta_i \) cannot be estimated. + +

    +The ad hoc approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change +

     
    +$$ +\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, +$$ +

     
    + +where \( \hat{I} \) is the identity matrix.

    -

    Logistic regression

    -Add discussion about classification versus regression, show examples of more than two cases and why regression is not the best approach. Motivate for k-nearest neighbors +

    A second-order polynomial with Ridge and Lasso

    +

    + + +

    import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.linear_model import Ridge
    +from sklearn.metrics import r2_score
    +
    +np.random.seed(4155)
    +
    +n_samples = 100
    +
    +x = np.random.rand(n_samples,1)
    +y = 5*x*x + 0.1*np.random.rand(n_samples,1)
    +
    +# Centering  x and y.
    +x_ = x - np.mean(x)
    +y_ = y - np.mean(y) # beta_0 = mean(y)
    +
    +X = np.c_[np.ones((n_samples,1)), x, x**2]
    +X_ = np.c_[x_, x_**2]
    +
    +
    +### 1.
    +lmb_values = [1e-4, 1e-3, 1e-2, 10, 1e2, 1e4]
    +num_values = len(lmb_values)
    +
    +## Ridge-regression of centered and not centered data
    +beta_ridge = np.zeros((3,num_values))
    +beta_ridge_centered = np.zeros((3,num_values))
    +
    +I3 = np.eye(3)
    +I2 = np.eye(2)
    +
    +for i,lmb in enumerate(lmb_values):
    +    beta_ridge[:,i] = (np.linalg.inv( X.T @ X + lmb*I3) @ X.T @ y).flatten()
    +    beta_ridge_centered[1:,i] = (np.linalg.inv( X_.T @ X_ + lmb*I2) @ X_.T @ y_).flatten()
    +
    +# sett beta_0 = np.mean(y)
    +beta_ridge_centered[0,:] = np.mean(y)
    +
    +## OLS (ordinary least squares) solution 
    +beta_ls = np.linalg.inv( X.T @ X ) @ X.T @ y
    +
    +## Evaluate the models
    +pred_ls = X @ beta_ls
    +pred_ridge =  X @ beta_ridge
    +pred_ridge_centered =  X_ @ beta_ridge_centered[1:] + beta_ridge_centered[0,:]
    +
    +## Plot the results
    +
    +# Sorting
    +sort_ind = np.argsort(x[:,0])
    +
    +x_plot = x[sort_ind,0]
    +x_centered_plot = x_[sort_ind,0]
    +
    +pred_ls_plot = pred_ls[sort_ind,0]
    +pred_ridge_plot = pred_ridge[sort_ind,:]
    +pred_ridge_centered_plot = pred_ridge_centered[sort_ind,:]
    +
    +# Plott not centered
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +
    +plt.title('linear regression on un-centered data')
    +plt.legend()
    +
    +# Plott centered
    +plt.figure()
    +
    +for i in range(num_values):
    +    plt.plot(x_centered_plot,pred_ridge_centered_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x_,y,'ro')
    +
    +plt.title('linear regression on centered data')
    +plt.legend()
    +
    +
    +# 2.
    +
    +pred_ridge_scikit =  np.zeros((n_samples,num_values))
    +for i,lmb in enumerate(lmb_values):
    +    pred_ridge_scikit[:,i] = (Ridge(alpha=lmb,fit_intercept=False).fit(X,y).predict(X)).flatten() # fit_intercept=False fordi bias er allerede i X
    +
    +plt.figure()
    +
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_scikit[sort_ind,i],label='scikit-ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +plt.legend()
    +plt.title('linear regression using scikit')
    +
    +plt.show()
    +
    +### R2-score of the results
    +for i in range(num_values):
    +    print('lambda = %g'%lmb_values[i])
    +    print('r2 for scikit: %g'%r2_score(y,pred_ridge_scikit[:,i]))
    +    print('r2 for own code, not centered: %g'%r2_score(y,pred_ridge[:,i]))
    +    print('r2 for own, centered: %g\n'%r2_score(y,pred_ridge_centered[:,i]))
    +
    +
    + + +
    +

    Fitting vs. predicting when data is in the model class

    -Add examples on classification problems +We start by considering the case +\( f(x)=2x \). + +

    +Then the data is clearly generated by a model that is contained within +all three model classes we are using to make predictions (linear +models, third order polynomials, and tenth order polynomials). + +

    +Run the code for the following cases: + +

      +

    1. For \( f(x)=2x \) , \( Ntrain=10 \) and \( \sigma =0 \) (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when \( x \in [0,1] \) . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?
    2. +

    3. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?
    4. +

    5. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example \( x \in [0,1.2] \) ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?
    6. +

    7. Repeat the above for \( f(x)=2x \) , \( Ntrain=10 \) , and \( \sigma=1 \) . What changes?
    8. +
    +

    + +Repeat the exercises above for \( f(x)=2x \) , \( Ntrain=100 \) , and \( \sigma=1 \) . What changes? +Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well. +

    + + +
    +

    Fitting versus predicting when data is not in the model class

    + +

    +Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider \( f(x)=2x-10x^5+15x^{10} \) . Notice that the for linear and third-order polynomial the true model \( f(x) \) is not contained in model class. + +

      +

    1. Do better fits lead to better predictions?
    2. +

    3. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points \( Ntrain \) and \( \sigma \)?
    4. +
    +

    + +Summarize what you think you learned about the relationship of knowing the true model class and predictive power. +

    + + +
    +

    The code

    + +

    + + +

    import numpy as np
    +import sklearn as sk
    +from sklearn import datasets, linear_model
    +from sklearn.preprocessing import PolynomialFeatures
    +
    +import matplotlib as mpl
    +from matplotlib import pyplot as plt
    +
    +%matplotlib notebook
    +
    +# The Training Data
    +
    +N_train=100
    +
    +sigma_train=1;
    +
    +# Train on integers
    +x=np.linspace(0.05,0.95,N_train)
    +# Draw random noise
    +s = sigma_train*np.random.randn(N_train)
    +
    +#linear
    +y=2*x+s
    +
    +#Tenth Order
    +#y=2*x-10*x**5+15*x**10+s
    +
    +p1=plt.plot(x,y, "o",ms=15, label='Training')
    +
    +#Linear Regression
    +# Create linear regression object
    +clf = linear_model.LinearRegression()
    +
    +# Train the model using the training sets
    +clf.fit(x[:, np.newaxis], y)
    +# The coefficients
    +
    +xplot=np.linspace(0.02,0.98,200)
    +linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')
    +
    +#Polynomial Regression
    +
    +
    +poly3 = PolynomialFeatures(degree=3)
    +X = poly3.fit_transform(x[:,np.newaxis])
    +clf3 = linear_model.LinearRegression()
    +clf3.fit(X,y)
    +
    +
    +Xplot=poly3.fit_transform(xplot[:,np.newaxis])
    +poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')
    +
    +
    +
    +#poly5 = PolynomialFeatures(degree=5)
    +#X = poly5.fit_transform(x[:,np.newaxis])
    +#clf5 = linear_model.LinearRegression()
    +#clf5.fit(X,y)
    +
    +#Xplot=poly5.fit_transform(xplot[:,np.newaxis])
    +#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)
    +
    +poly10 = PolynomialFeatures(degree=10)
    +X = poly10.fit_transform(x[:,np.newaxis])
    +clf10 = linear_model.LinearRegression()
    +clf10.fit(X,y)
    +
    +Xplot=poly10.fit_transform(xplot[:,np.newaxis])
    +poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')
    +
    +axes = plt.gca()
    +axes.set_ylim([-7,7])
    +
    +handles, labels=axes.get_legend_handles_labels()
    +plt.legend(handles,labels, loc='lower center')
    +plt.xlabel("$x$")
    +plt.ylabel("$y$")
    +Title="$N=$"+str(N_train)+", $\sigma=$"+str(sigma_train)
    +plt.title(Title+" (train)")
    +plt.tight_layout()
    +plt.show()
    +
    +
    + + +
    +

    Generating test data

    +

    + + +

    # Generate Test Data
    +
    +#Number of test data
    +N_test=20
    +
    +sigma_test=sigma_train
    +
    +max_x=1.2
    +x_test=max_x*np.random.random(N_test)
    +# Draw random noise
    +s_test = sigma_test*np.random.randn(N_test)
    +
    +#Linear
    +y_test=2*x_test+s_test
    +#Tenth order
    +#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test
    +
    +#Make design matrices for prediction
    +x_plot=np.linspace(0,max_x, 200)
    +X3 = poly3.fit_transform(x_plot[:,np.newaxis])
    +X10 = poly10.fit_transform(x_plot[:,np.newaxis])
    +
    +%matplotlib notebook
    +
    +fig = plt.figure() 
    +p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')
    +p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')
    +p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')
    +p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')
    +
    +
    +plt.legend(loc=2)
    +plt.xlabel('$x$')
    +plt.ylabel('$y$')
    +plt.legend(loc='best')
    +plt.title(Title+" (pred.)")
    +plt.tight_layout()
    +plt.show()
    +
    +#Linear Filename
    +#filename_test=Title+"pred-linear.pdf"
    +#Tenth Order Filename
    +#filename_test=Title+"pred-o10.pdf"
    +#plt.savefig(filename_test)
    +#plt.ylim((-6,12))
    +
    +
    + + +
    +

    Lasso regression

    +
    + + +
    +

    Logistic regression

    diff --git a/doc/pub/Regression/html/Regression-solarized.html b/doc/pub/Regression/html/Regression-solarized.html index 9b2167152..9b2031654 100644 --- a/doc/pub/Regression/html/Regression-solarized.html +++ b/doc/pub/Regression/html/Regression-solarized.html @@ -61,17 +61,14 @@ div { text-align: justify; text-justify: inter-word; } @@ -175,7 +196,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Aug 24, 2018

    +

    Sep 6, 2018












    @@ -205,7 +226,38 @@ A regression model aims at finding a likelihood function \( p(y\vert \hat{x}) \)











    -

    General linear models

    +

    Regression analysis, overarching aims II

    +
    + +

    + +

    +Consider an experiment in which \( p \) characteristics of \( n \) samples are +measured. The data from this experiment are denoted \( \mathbf{X} \), with +\( \mathbf{X} \) as above. The matrix \( \mathbf{X} \) is called the design +matrix. Additional information of the samples is available in the +form of \( \mathbf{Y} \) (also as above). The variable \( \mathbf{Y} \) is +generally referred to as the response variable. The aim of +regression analysis is to explain \( \mathbf{Y} \) in terms of +\( \mathbf{X} \) through a functional relationship like \( Y_i = +f(\mathbf{X}_{i,\ast}) \). When no prior knowledge on the form of +\( f(\cdot) \) is available, it is common to assume a linear relationship +between \( \mathbf{X} \) and \( \mathbf{Y} \). This assumption gives rise to +the linear regression model where \( \beta = (\beta_1, \ldots, +\beta_p)^{\top} \) is the regression parameter. The parameter +\( \beta_j \), \( j=1, \ldots, p \), represents the effect size of covariate +\( j \) on the response. That is, for each unit change in covariate \( j \) +(while keeping the other covariates fixed) the observed change in the +response is equal to \( \beta_j \). + + +

    + + +

    +









    + +

    General linear models

    @@ -226,7 +278,7 @@ where \( \epsilon_i \) is the error in our approximation.











    -

    Rewriting the fitting procedure as a linear algebra problem

    +

    Rewriting the fitting procedure as a linear algebra problem

    @@ -246,7 +298,7 @@ $$











    -

    Rewriting the fitting procedure as a linear algebra problem, follows

    +

    Rewriting the fitting procedure as a linear algebra problem, follows

    @@ -287,7 +339,7 @@ $$











    -

    Generalizing the fitting procedure as a linear algebra problem

    +

    Generalizing the fitting procedure as a linear algebra problem

    @@ -310,7 +362,7 @@ $$











    -

    Generalizing the fitting procedure as a linear algebra problem

    +

    Generalizing the fitting procedure as a linear algebra problem

    @@ -338,7 +390,7 @@ The left-hand side of this equation forms know. Our error vector \( \hat{\epsilo











    -

    Optimizing our parameters

    +

    Optimizing our parameters

    @@ -360,7 +412,7 @@ $$











    -

    Optimizing our parameters, more details

    +

    Optimizing our parameters, more details

    @@ -384,7 +436,7 @@ $$











    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -423,7 +475,7 @@ $$











    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -449,7 +501,7 @@ $$











    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -477,7 +529,7 @@ meaning that the solution for \( \hat{\beta} \) is the one which minimizes the r











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -500,7 +552,7 @@ where the matrix \( \hat{\Sigma} \) is a diagonal matrix with \( \sigma_i \) as











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -528,7 +580,7 @@ where we have defined the matrix \( \hat{A} =\hat{X}/\hat{\Sigma} \) with matrix











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -554,7 +606,7 @@ $$











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -585,7 +637,7 @@ $$











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -609,7 +661,7 @@ $$











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -655,7 +707,7 @@ This approach (different linear and non-linear regression) suffers often from bo











    -

    Simple regression model

    +

    Simple regression model

    We are now ready to write our first program which aims at solving the above linear regression equations. We start with data we have produced ourselves, in this case normally distributed random numbers along the \( x \)-axis. These numbers define then the value of a function \( y(x)=4+3x+N(0,1) \). Thereafter we order the \( x \) values and employ our linear regression algorithm to set up the best fit. Here we find it useful to use the numpy function \( c\_ \) arrays where arrays are stacked along their last axis after being upgraded to at least two dimensions with ones post-pended to the shape. The following examples help in understanding what happens

    @@ -695,7 +747,7 @@ We see that, as expected, a linear fit gives a seemingly (from the graph) good r











    -

    Simple regression model, now using scikit-learn

    +

    Simple regression model, now using scikit-learn

    We can repeat the above algorithm using scikit-learn as follows @@ -726,7 +778,7 @@ plt.show()











    -

    Simple linear regression model using scikit-learn

    +

    Simple linear regression model using scikit-learn

    We start with perhaps our simplest possible example, using scikit-learn to perform linear regression analysis on a data set produced by us. @@ -794,7 +846,7 @@ plt.show()











    -

    Simple linear regression model

    +

    Simple linear regression model

    This example serves several aims. It allows us to demonstrate several @@ -816,7 +868,7 @@ where \( x \) is defined as before.











    -

    Less noise

    +

    Less noise

    Does the fit look better? Indeed, by @@ -829,7 +881,7 @@ have not discussed a more rigorous approach to the cost function.











    -

    How to study our fits

    +

    How to study our fits

    We need more rigorous criteria in defining whether we have succeeded or @@ -851,7 +903,7 @@ dimensionless.











    -

    Minimizing the cost function

    +

    Minimizing the cost function

    Minimizing the cost function is a central aspect of @@ -872,7 +924,7 @@ the \( \chi^2 \) function becomes smaller.











    -

    Relative error

    +

    Relative error

    There are many ways to define the cost function. A simpler approach is to look at the relative difference between the training data and the predicted data, that is we define @@ -912,7 +964,7 @@ relative error.











    -

    The richness of scikit-learn

    +

    The richness of scikit-learn

    As mentioned above, scikit-learn has an impressive functionality. @@ -957,7 +1009,7 @@ plt.show()











    -

    Functions in scikit-learn

    +

    Functions in scikit-learn

    The function coef gives us the parameter \( \beta \) of our fit while intercept yields @@ -974,7 +1026,7 @@ this function as being similar to the \( \chi^2 \) function defined above.











    -

    Other functions in scikit-learn

    +

    Other functions in scikit-learn

    The r2score function computes \( R^2 \), the coefficient of @@ -998,7 +1050,7 @@ $$











    -

    The mean absolute error and other functions in scikit-learn

    +

    The mean absolute error and other functions in scikit-learn

    Another quantity will meet again in our discussions of regression analysis is @@ -1023,12 +1075,13 @@ years etc.











    -

    Cubic polynomial in scikit-learn

    +

    Cubic polynomial in scikit-learn

    We will discuss in more detail these and other functions in the various lectures. We conclude this part with another example. Instead of -a linear \( x \)-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. +a linear \( x \)-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. +Add description of the various python commands.

    @@ -1065,82 +1118,12 @@ plt.show() print (error(y))

    -Similarly, using R, we can perform similar studies. -(more details on R will be inserted later). +Using R, we can perform similar studies.











    -

    Simple regression model with gradient descent

    -Add info about the equations, play around with different learning rates -

    - - -

    # Importing various packages
    -from math import exp, sqrt
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    -
    -x = 2*np.random.rand(100,1)
    -y = 4+3*x+np.random.randn(100,1)
    -
    -xb = np.c_[np.ones((100,1)), x]
    -theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    -print(theta_linreg)
    -theta = np.random.randn(2,1)
    -
    -eta = 0.1
    -Niterations = 1000
    -m = 100
    -
    -for iter in range(Niterations):
    -    gradients = 2.0/m*xb.T.dot(xb.dot(theta)-y)
    -    theta -= eta*gradients
    -
    -print(theta)
    -xnew = np.array([[0],[2]])
    -xbnew = np.c_[np.ones((2,1)), xnew]
    -ypredict = xbnew.dot(theta)
    -ypredict2 = xbnew.dot(theta_linreg)
    -plt.plot(xnew, ypredict, "r-")
    -plt.plot(xnew, ypredict2, "b-")
    -plt.plot(x, y ,'ro')
    -plt.axis([0,2.0,0, 15.0])
    -plt.xlabel(r'$x$')
    -plt.ylabel(r'$y$')
    -plt.title(r'Random numbers ')
    -plt.show()
    -
    -

    -









    - -

    Simple regression model with stochastic gradient descent

    -Add info about the equations, play around with different learning rates -

    - - -

    # Importing various packages
    -from math import exp, sqrt
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    -from sklearn.linear_model import SGDRegressor
    -
    -x = 2*np.random.rand(100,1)
    -y = 4+3*x+np.random.randn(100,1)
    -
    -xb = np.c_[np.ones((100,1)), x]
    -theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    -print(theta_linreg)
    -sgdreg = SGDRegressor(n_iter = 50, penalty=None, eta0=0.1)
    -sgdreg.fit(x,y.ravel())
    -print(sgdreg.intercept_, sgdreg.coef_)
    -
    -

    -









    - -

    Polynomial Regression

    +

    Polynomial Regression

    @@ -1168,10 +1151,92 @@ plt.ylabel(r'$y$') plt.title(r'Random numbers ') plt.show()

    +

    + + +

    Linking the regression analysis with a statistical interpretation

    + +

    +Before we proceed, and to link with our discussions of Bayesian statistics to come, it is useful the derive the standard regression analysis equations using a statistical interpretation. This allows us also to derive quantities like the variance and other expectation values in a rather straightforward way. + +

    +It is assumed that \( \varepsilon_i +\sim \mathcal{N}(0, \sigma^2) \) and the \( \varepsilon_{i} \) are +independent, i.e.: +$$ +\begin{align*} +\mbox{Cov}(\varepsilon_{i_1}, +\varepsilon_{i_2}) & = \left\{ \begin{array}{lcc} \sigma^2 & \mbox{if} +& i_1 = i_2, \\ 0 & \mbox{if} & i_1 \not= i_2. \end{array} \right. +\end{align*} +$$ + +The randomness of \( \varepsilon_i \) implies that +\( \mathbf{Y}_i \) is also a random variable. In particular, +\( \mathbf{Y}_i \) is normally distributed, because \( \varepsilon_i \sim +\mathcal{N}(0, \sigma^2) \) and \( \mathbf{X}_{i,\ast} \, \beta \) is a +non-random scalar. To specify the parameters of the distribution of +\( \mathbf{Y}_i \) we need to calculate its first two moments. +











    -

    Ridge and Lasso Regression

    +

    Expectation value and variance

    + +

    +Its expectation equals: +$$ +\begin{align*} +\mathbb{E}(Y_i) & = +\mathbb{E}(\mathbf{X}_{i, \ast} \, \beta) + \mathbb{E}(\varepsilon_i) +\, \, \, = \, \, \, \mathbf{X}_{i, \ast} \, \beta, +\end{align*} +$$ + +while +its variance is +$$ +\begin{align*} \mbox{Var}(Y_i) & = \mathbb{E} \{ [Y_i +- \mathbb{E}(Y_i)]^2 \} \, \, \, = \, \, \, \mathbb{E} ( Y_i^2 ) - +[\mathbb{E}(Y_i)]^2 \\ & = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, +\beta + \varepsilon_i )^2] - ( \mathbf{X}_{i, \ast} \, \beta)^2 \\ & += \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 \varepsilon_i +\mathbf{X}_{i, \ast} \, \beta + \varepsilon_i^2 ] - ( \mathbf{X}_{i, +\ast} \, \beta)^2 \\ & = ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 +\mathbb{E}(\varepsilon_i) \mathbf{X}_{i, \ast} \, \beta + +\mathbb{E}(\varepsilon_i^2 ) - ( \mathbf{X}_{i, \ast} \, \beta)^2 +\\ & = \mathbb{E}(\varepsilon_i^2 ) \, \, \, = \, \, \, +\mbox{Var}(\varepsilon_i) \, \, \, = \, \, \, \sigma^2. +\end{align*} +$$ + +Hence, \( Y_i \sim \mathcal{N}( \mathbf{X}_{i, \ast} \, \beta, \sigma^2) \). + +

    +









    + +

    The singular value decompostion

    +
    + +

    + +

    +A general +\( m\times n \) matrix \( \hat{A} \) can be written in terms of a diagonal +matrix \( \hat{D} \) of dimensionality \( n\times n \) and two orthognal +matrices \( \hat{U} \) and \( \hat{V} \), where the first has dimensionality +\( m \times m \) and the last dimensionality \( n\times n \). +We have then +$$ +\hat{A} = \hat{U}\hat{D}\hat{V}^T +$$ +

    + + +

    +









    + +

    Code examples for Ridge and Lasso Regression

    @@ -1252,38 +1317,390 @@ plt.show()











    -

    The singular value decompostion

    -
    - -

    -How can we use the singular value decomposition to find the parameters \( \beta_j \)? More details will come. We first note that a general \( m\times n \) matrix \( \hat{A} \) can be written in terms of a diagonal matrix \( \hat{\Sigma} \) of dimensionality \( n\times n \) and two orthognal matrices \( \hat{U} \) and \( \hat{V} \), where the first has dimensionality \( m \times n \) and the last dimensionality \( n\times n \). We have then -$$ -\hat{A} = \hat{U}\hat{\Sigma}\hat{V} -$$ -

    - +

    From standard regression to Ridge regressions

    -Add codes and discuss this in connection with lasso and ridge, show example where the standard inversion of a matrix fails and where SVD comes to rescue +One of the typical problems we encounter with linear regression, in particular +when the matrix \( \hat{X} \) (our so-called design matrix) is high-dimensional, +are problems with near singular or singular matrices. The column vectors of \( \hat{X} \) +may be linearly dependent, normally referred to as super-collinearity. +This means that the matrix may be rank deficient and it is basically impossible to +to model the data using linear regression. As an example, consider the matrix +$$ +\begin{align*} +\mathbf{X} & = \left[ +\begin{array}{rrr} +1 & -1 & 2 +\\ +1 & 0 & 1 +\\ +1 & 2 & -1 +\\ +1 & 1 & 0 +\end{array} \right] +\end{align*} +$$ + +

    +The columns of \( \hat{X} \) are linearly dependent. We se this easily since the +the first column is the row-wise sum of the other two columns. The rank (more correct, +the column rank) of a matrix is the dimension of the space spanned by the +column vectors. Hence, the rank of \( \mathbf{X} \) is equal to the number +of linearly independent columns. In this particular case the matrix has rank 2. + +

    +Super-collinearity of an \( (n \times p) \)-dimensional design matrix \( \mathbf{X} \) implies +that the inverse of the matrix \( \hat{X}^T\hat{x} \) (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this +$$ +\begin{align*} +\hat{X} & = \left[ +\begin{array}{rr} +1 & -1 +\\ +1 & -1 +\end{array} \right]. +\end{align*} +$$ + +We see easily that \( \mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0 \). Hence, \( \mathbf{X} \) is singular and its inverse is undefined. +This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigenvalue which is zero.











    -

    Lasso and Ridge regression

    +

    Fixing the singularity

    -Discuss the mathematics here +If our design matrix \( \hat{X} \) which enters the linear regression problem +$$ +\begin{align} +\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, +\label{_auto1} +\end{align} +$$ + +has linearly dependent column vectors, we will not be able to compute the inverse +of \( \hat{X}^T\hat{X} \) and we cannot find the parameters (estimators) \( \beta_i \). +The estimators are only well-defined if \( (\hat{X}^{T}\hat{X})^{-1} \) exits. +This is more likely to happen when the matrix \( \hat{X} \) is high-dimensional. In this case it is likely to encounter a situation where +the regression parameters \( \beta_i \) cannot be estimated. + +

    +The ad hoc approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change +$$ +\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, +$$ + +where \( \hat{I} \) is the identity matrix.











    -

    Logistic regression

    -Add discussion about classification versus regression, show examples of more than two cases and why regression is not the best approach. Motivate for k-nearest neighbors +

    A second-order polynomial with Ridge and Lasso

    +

    + + +

    import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.linear_model import Ridge
    +from sklearn.metrics import r2_score
    +
    +np.random.seed(4155)
    +
    +n_samples = 100
    +
    +x = np.random.rand(n_samples,1)
    +y = 5*x*x + 0.1*np.random.rand(n_samples,1)
    +
    +# Centering  x and y.
    +x_ = x - np.mean(x)
    +y_ = y - np.mean(y) # beta_0 = mean(y)
    +
    +X = np.c_[np.ones((n_samples,1)), x, x**2]
    +X_ = np.c_[x_, x_**2]
    +
    +
    +### 1.
    +lmb_values = [1e-4, 1e-3, 1e-2, 10, 1e2, 1e4]
    +num_values = len(lmb_values)
    +
    +## Ridge-regression of centered and not centered data
    +beta_ridge = np.zeros((3,num_values))
    +beta_ridge_centered = np.zeros((3,num_values))
    +
    +I3 = np.eye(3)
    +I2 = np.eye(2)
    +
    +for i,lmb in enumerate(lmb_values):
    +    beta_ridge[:,i] = (np.linalg.inv( X.T @ X + lmb*I3) @ X.T @ y).flatten()
    +    beta_ridge_centered[1:,i] = (np.linalg.inv( X_.T @ X_ + lmb*I2) @ X_.T @ y_).flatten()
    +
    +# sett beta_0 = np.mean(y)
    +beta_ridge_centered[0,:] = np.mean(y)
    +
    +## OLS (ordinary least squares) solution 
    +beta_ls = np.linalg.inv( X.T @ X ) @ X.T @ y
    +
    +## Evaluate the models
    +pred_ls = X @ beta_ls
    +pred_ridge =  X @ beta_ridge
    +pred_ridge_centered =  X_ @ beta_ridge_centered[1:] + beta_ridge_centered[0,:]
    +
    +## Plot the results
    +
    +# Sorting
    +sort_ind = np.argsort(x[:,0])
    +
    +x_plot = x[sort_ind,0]
    +x_centered_plot = x_[sort_ind,0]
    +
    +pred_ls_plot = pred_ls[sort_ind,0]
    +pred_ridge_plot = pred_ridge[sort_ind,:]
    +pred_ridge_centered_plot = pred_ridge_centered[sort_ind,:]
    +
    +# Plott not centered
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +
    +plt.title('linear regression on un-centered data')
    +plt.legend()
    +
    +# Plott centered
    +plt.figure()
    +
    +for i in range(num_values):
    +    plt.plot(x_centered_plot,pred_ridge_centered_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x_,y,'ro')
    +
    +plt.title('linear regression on centered data')
    +plt.legend()
    +
    +
    +# 2.
    +
    +pred_ridge_scikit =  np.zeros((n_samples,num_values))
    +for i,lmb in enumerate(lmb_values):
    +    pred_ridge_scikit[:,i] = (Ridge(alpha=lmb,fit_intercept=False).fit(X,y).predict(X)).flatten() # fit_intercept=False fordi bias er allerede i X
    +
    +plt.figure()
    +
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_scikit[sort_ind,i],label='scikit-ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +plt.legend()
    +plt.title('linear regression using scikit')
    +
    +plt.show()
    +
    +### R2-score of the results
    +for i in range(num_values):
    +    print('lambda = %g'%lmb_values[i])
    +    print('r2 for scikit: %g'%r2_score(y,pred_ridge_scikit[:,i]))
    +    print('r2 for own code, not centered: %g'%r2_score(y,pred_ridge[:,i]))
    +    print('r2 for own, centered: %g\n'%r2_score(y,pred_ridge_centered[:,i]))
    +
    +

    +









    + +

    Fitting vs. predicting when data is in the model class

    -Add examples on classification problems +We start by considering the case +\( f(x)=2x \).

    +Then the data is clearly generated by a model that is contained within +all three model classes we are using to make predictions (linear +models, third order polynomials, and tenth order polynomials). + +

    +Run the code for the following cases: + +

      +
    1. For \( f(x)=2x \) , \( Ntrain=10 \) and \( \sigma =0 \) (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when \( x \in [0,1] \) . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?
    2. +
    3. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?
    4. +
    5. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example \( x \in [0,1.2] \) ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?
    6. +
    7. Repeat the above for \( f(x)=2x \) , \( Ntrain=10 \) , and \( \sigma=1 \) . What changes?
    8. +
    + +Repeat the exercises above for \( f(x)=2x \) , \( Ntrain=100 \) , and \( \sigma=1 \) . What changes? +Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well. + +

    +









    + +

    Fitting versus predicting when data is not in the model class

    + +

    +Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider \( f(x)=2x-10x^5+15x^{10} \) . Notice that the for linear and third-order polynomial the true model \( f(x) \) is not contained in model class. + +

      +
    1. Do better fits lead to better predictions?
    2. +
    3. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points \( Ntrain \) and \( \sigma \)?
    4. +
    + +Summarize what you think you learned about the relationship of knowing the true model class and predictive power. + +

    +









    + +

    The code

    + +

    + + +

    import numpy as np
    +import sklearn as sk
    +from sklearn import datasets, linear_model
    +from sklearn.preprocessing import PolynomialFeatures
    +
    +import matplotlib as mpl
    +from matplotlib import pyplot as plt
    +
    +%matplotlib notebook
    +
    +# The Training Data
    +
    +N_train=100
    +
    +sigma_train=1;
    +
    +# Train on integers
    +x=np.linspace(0.05,0.95,N_train)
    +# Draw random noise
    +s = sigma_train*np.random.randn(N_train)
    +
    +#linear
    +y=2*x+s
    +
    +#Tenth Order
    +#y=2*x-10*x**5+15*x**10+s
    +
    +p1=plt.plot(x,y, "o",ms=15, label='Training')
    +
    +#Linear Regression
    +# Create linear regression object
    +clf = linear_model.LinearRegression()
    +
    +# Train the model using the training sets
    +clf.fit(x[:, np.newaxis], y)
    +# The coefficients
    +
    +xplot=np.linspace(0.02,0.98,200)
    +linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')
    +
    +#Polynomial Regression
    +
    +
    +poly3 = PolynomialFeatures(degree=3)
    +X = poly3.fit_transform(x[:,np.newaxis])
    +clf3 = linear_model.LinearRegression()
    +clf3.fit(X,y)
    +
    +
    +Xplot=poly3.fit_transform(xplot[:,np.newaxis])
    +poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')
    +
    +
    +
    +#poly5 = PolynomialFeatures(degree=5)
    +#X = poly5.fit_transform(x[:,np.newaxis])
    +#clf5 = linear_model.LinearRegression()
    +#clf5.fit(X,y)
    +
    +#Xplot=poly5.fit_transform(xplot[:,np.newaxis])
    +#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)
    +
    +poly10 = PolynomialFeatures(degree=10)
    +X = poly10.fit_transform(x[:,np.newaxis])
    +clf10 = linear_model.LinearRegression()
    +clf10.fit(X,y)
    +
    +Xplot=poly10.fit_transform(xplot[:,np.newaxis])
    +poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')
    +
    +axes = plt.gca()
    +axes.set_ylim([-7,7])
    +
    +handles, labels=axes.get_legend_handles_labels()
    +plt.legend(handles,labels, loc='lower center')
    +plt.xlabel("$x$")
    +plt.ylabel("$y$")
    +Title="$N=$"+str(N_train)+", $\sigma=$"+str(sigma_train)
    +plt.title(Title+" (train)")
    +plt.tight_layout()
    +plt.show()
    +
    +

    + + +

    Generating test data

    +

    + + +

    # Generate Test Data
    +
    +#Number of test data
    +N_test=20
    +
    +sigma_test=sigma_train
    +
    +max_x=1.2
    +x_test=max_x*np.random.random(N_test)
    +# Draw random noise
    +s_test = sigma_test*np.random.randn(N_test)
    +
    +#Linear
    +y_test=2*x_test+s_test
    +#Tenth order
    +#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test
    +
    +#Make design matrices for prediction
    +x_plot=np.linspace(0,max_x, 200)
    +X3 = poly3.fit_transform(x_plot[:,np.newaxis])
    +X10 = poly10.fit_transform(x_plot[:,np.newaxis])
    +
    +%matplotlib notebook
    +
    +fig = plt.figure() 
    +p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')
    +p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')
    +p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')
    +p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')
    +
    +
    +plt.legend(loc=2)
    +plt.xlabel('$x$')
    +plt.ylabel('$y$')
    +plt.legend(loc='best')
    +plt.title(Title+" (pred.)")
    +plt.tight_layout()
    +plt.show()
    +
    +#Linear Filename
    +#filename_test=Title+"pred-linear.pdf"
    +#Tenth Order Filename
    +#filename_test=Title+"pred-o10.pdf"
    +#plt.savefig(filename_test)
    +#plt.ylim((-6,12))
    +
    +

    +









    + +

    Lasso regression

    + +

    +









    + +

    Logistic regression

    diff --git a/doc/pub/Regression/html/Regression.html b/doc/pub/Regression/html/Regression.html index 7e1a6bbe5..fd86d2474 100644 --- a/doc/pub/Regression/html/Regression.html +++ b/doc/pub/Regression/html/Regression.html @@ -66,17 +66,14 @@ div { text-align: justify; text-justify: inter-word; } @@ -180,7 +201,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Aug 24, 2018

    +

    Sep 6, 2018












    @@ -210,7 +231,38 @@ A regression model aims at finding a likelihood function \( p(y\vert \hat{x}) \)











    -

    General linear models

    +

    Regression analysis, overarching aims II

    +
    + +

    + +

    +Consider an experiment in which \( p \) characteristics of \( n \) samples are +measured. The data from this experiment are denoted \( \mathbf{X} \), with +\( \mathbf{X} \) as above. The matrix \( \mathbf{X} \) is called the design +matrix. Additional information of the samples is available in the +form of \( \mathbf{Y} \) (also as above). The variable \( \mathbf{Y} \) is +generally referred to as the response variable. The aim of +regression analysis is to explain \( \mathbf{Y} \) in terms of +\( \mathbf{X} \) through a functional relationship like \( Y_i = +f(\mathbf{X}_{i,\ast}) \). When no prior knowledge on the form of +\( f(\cdot) \) is available, it is common to assume a linear relationship +between \( \mathbf{X} \) and \( \mathbf{Y} \). This assumption gives rise to +the linear regression model where \( \beta = (\beta_1, \ldots, +\beta_p)^{\top} \) is the regression parameter. The parameter +\( \beta_j \), \( j=1, \ldots, p \), represents the effect size of covariate +\( j \) on the response. That is, for each unit change in covariate \( j \) +(while keeping the other covariates fixed) the observed change in the +response is equal to \( \beta_j \). + + +

    + + +

    +









    + +

    General linear models

    @@ -231,7 +283,7 @@ where \( \epsilon_i \) is the error in our approximation.











    -

    Rewriting the fitting procedure as a linear algebra problem

    +

    Rewriting the fitting procedure as a linear algebra problem

    @@ -251,7 +303,7 @@ $$











    -

    Rewriting the fitting procedure as a linear algebra problem, follows

    +

    Rewriting the fitting procedure as a linear algebra problem, follows

    @@ -292,7 +344,7 @@ $$











    -

    Generalizing the fitting procedure as a linear algebra problem

    +

    Generalizing the fitting procedure as a linear algebra problem

    @@ -315,7 +367,7 @@ $$











    -

    Generalizing the fitting procedure as a linear algebra problem

    +

    Generalizing the fitting procedure as a linear algebra problem

    @@ -343,7 +395,7 @@ The left-hand side of this equation forms know. Our error vector \( \hat{\epsilo











    -

    Optimizing our parameters

    +

    Optimizing our parameters

    @@ -365,7 +417,7 @@ $$











    -

    Optimizing our parameters, more details

    +

    Optimizing our parameters, more details

    @@ -389,7 +441,7 @@ $$











    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -428,7 +480,7 @@ $$











    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -454,7 +506,7 @@ $$











    -

    Interpretations and optimizing our parameters

    +

    Interpretations and optimizing our parameters

    @@ -482,7 +534,7 @@ meaning that the solution for \( \hat{\beta} \) is the one which minimizes the r











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -505,7 +557,7 @@ where the matrix \( \hat{\Sigma} \) is a diagonal matrix with \( \sigma_i \) as











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -533,7 +585,7 @@ where we have defined the matrix \( \hat{A} =\hat{X}/\hat{\Sigma} \) with matrix











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -559,7 +611,7 @@ $$











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -590,7 +642,7 @@ $$











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -614,7 +666,7 @@ $$











    -

    The \( \chi^2 \) function

    +

    The \( \chi^2 \) function

    @@ -660,7 +712,7 @@ This approach (different linear and non-linear regression) suffers often from bo











    -

    Simple regression model

    +

    Simple regression model

    We are now ready to write our first program which aims at solving the above linear regression equations. We start with data we have produced ourselves, in this case normally distributed random numbers along the \( x \)-axis. These numbers define then the value of a function \( y(x)=4+3x+N(0,1) \). Thereafter we order the \( x \) values and employ our linear regression algorithm to set up the best fit. Here we find it useful to use the numpy function \( c\_ \) arrays where arrays are stacked along their last axis after being upgraded to at least two dimensions with ones post-pended to the shape. The following examples help in understanding what happens

    @@ -700,7 +752,7 @@ We see that, as expected, a linear fit gives a seemingly (from the graph) good r











    -

    Simple regression model, now using scikit-learn

    +

    Simple regression model, now using scikit-learn

    We can repeat the above algorithm using scikit-learn as follows @@ -731,7 +783,7 @@ plt.show()











    -

    Simple linear regression model using scikit-learn

    +

    Simple linear regression model using scikit-learn

    We start with perhaps our simplest possible example, using scikit-learn to perform linear regression analysis on a data set produced by us. @@ -799,7 +851,7 @@ plt.show()











    -

    Simple linear regression model

    +

    Simple linear regression model

    This example serves several aims. It allows us to demonstrate several @@ -821,7 +873,7 @@ where \( x \) is defined as before.











    -

    Less noise

    +

    Less noise

    Does the fit look better? Indeed, by @@ -834,7 +886,7 @@ have not discussed a more rigorous approach to the cost function.











    -

    How to study our fits

    +

    How to study our fits

    We need more rigorous criteria in defining whether we have succeeded or @@ -856,7 +908,7 @@ dimensionless.











    -

    Minimizing the cost function

    +

    Minimizing the cost function

    Minimizing the cost function is a central aspect of @@ -877,7 +929,7 @@ the \( \chi^2 \) function becomes smaller.











    -

    Relative error

    +

    Relative error

    There are many ways to define the cost function. A simpler approach is to look at the relative difference between the training data and the predicted data, that is we define @@ -917,7 +969,7 @@ relative error.











    -

    The richness of scikit-learn

    +

    The richness of scikit-learn

    As mentioned above, scikit-learn has an impressive functionality. @@ -962,7 +1014,7 @@ plt.show()











    -

    Functions in scikit-learn

    +

    Functions in scikit-learn

    The function coef gives us the parameter \( \beta \) of our fit while intercept yields @@ -979,7 +1031,7 @@ this function as being similar to the \( \chi^2 \) function defined above.











    -

    Other functions in scikit-learn

    +

    Other functions in scikit-learn

    The r2score function computes \( R^2 \), the coefficient of @@ -1003,7 +1055,7 @@ $$











    -

    The mean absolute error and other functions in scikit-learn

    +

    The mean absolute error and other functions in scikit-learn

    Another quantity will meet again in our discussions of regression analysis is @@ -1028,12 +1080,13 @@ years etc.











    -

    Cubic polynomial in scikit-learn

    +

    Cubic polynomial in scikit-learn

    We will discuss in more detail these and other functions in the various lectures. We conclude this part with another example. Instead of -a linear \( x \)-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. +a linear \( x \)-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. +Add description of the various python commands.

    @@ -1070,82 +1123,12 @@ plt.show() print (error(y))

    -Similarly, using R, we can perform similar studies. -(more details on R will be inserted later). +Using R, we can perform similar studies.











    -

    Simple regression model with gradient descent

    -Add info about the equations, play around with different learning rates -

    - - -

    # Importing various packages
    -from math import exp, sqrt
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    -
    -x = 2*np.random.rand(100,1)
    -y = 4+3*x+np.random.randn(100,1)
    -
    -xb = np.c_[np.ones((100,1)), x]
    -theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    -print(theta_linreg)
    -theta = np.random.randn(2,1)
    -
    -eta = 0.1
    -Niterations = 1000
    -m = 100
    -
    -for iter in range(Niterations):
    -    gradients = 2.0/m*xb.T.dot(xb.dot(theta)-y)
    -    theta -= eta*gradients
    -
    -print(theta)
    -xnew = np.array([[0],[2]])
    -xbnew = np.c_[np.ones((2,1)), xnew]
    -ypredict = xbnew.dot(theta)
    -ypredict2 = xbnew.dot(theta_linreg)
    -plt.plot(xnew, ypredict, "r-")
    -plt.plot(xnew, ypredict2, "b-")
    -plt.plot(x, y ,'ro')
    -plt.axis([0,2.0,0, 15.0])
    -plt.xlabel(r'$x$')
    -plt.ylabel(r'$y$')
    -plt.title(r'Random numbers ')
    -plt.show()
    -
    -

    -









    - -

    Simple regression model with stochastic gradient descent

    -Add info about the equations, play around with different learning rates -

    - - -

    # Importing various packages
    -from math import exp, sqrt
    -from random import random, seed
    -import numpy as np
    -import matplotlib.pyplot as plt
    -from sklearn.linear_model import SGDRegressor
    -
    -x = 2*np.random.rand(100,1)
    -y = 4+3*x+np.random.randn(100,1)
    -
    -xb = np.c_[np.ones((100,1)), x]
    -theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)
    -print(theta_linreg)
    -sgdreg = SGDRegressor(n_iter = 50, penalty=None, eta0=0.1)
    -sgdreg.fit(x,y.ravel())
    -print(sgdreg.intercept_, sgdreg.coef_)
    -
    -

    -









    - -

    Polynomial Regression

    +

    Polynomial Regression

    @@ -1173,10 +1156,92 @@ plt.ylabel(r plt.title(r'Random numbers ') plt.show()

    +

    + + +

    Linking the regression analysis with a statistical interpretation

    + +

    +Before we proceed, and to link with our discussions of Bayesian statistics to come, it is useful the derive the standard regression analysis equations using a statistical interpretation. This allows us also to derive quantities like the variance and other expectation values in a rather straightforward way. + +

    +It is assumed that \( \varepsilon_i +\sim \mathcal{N}(0, \sigma^2) \) and the \( \varepsilon_{i} \) are +independent, i.e.: +$$ +\begin{align*} +\mbox{Cov}(\varepsilon_{i_1}, +\varepsilon_{i_2}) & = \left\{ \begin{array}{lcc} \sigma^2 & \mbox{if} +& i_1 = i_2, \\ 0 & \mbox{if} & i_1 \not= i_2. \end{array} \right. +\end{align*} +$$ + +The randomness of \( \varepsilon_i \) implies that +\( \mathbf{Y}_i \) is also a random variable. In particular, +\( \mathbf{Y}_i \) is normally distributed, because \( \varepsilon_i \sim +\mathcal{N}(0, \sigma^2) \) and \( \mathbf{X}_{i,\ast} \, \beta \) is a +non-random scalar. To specify the parameters of the distribution of +\( \mathbf{Y}_i \) we need to calculate its first two moments. +











    -

    Ridge and Lasso Regression

    +

    Expectation value and variance

    + +

    +Its expectation equals: +$$ +\begin{align*} +\mathbb{E}(Y_i) & = +\mathbb{E}(\mathbf{X}_{i, \ast} \, \beta) + \mathbb{E}(\varepsilon_i) +\, \, \, = \, \, \, \mathbf{X}_{i, \ast} \, \beta, +\end{align*} +$$ + +while +its variance is +$$ +\begin{align*} \mbox{Var}(Y_i) & = \mathbb{E} \{ [Y_i +- \mathbb{E}(Y_i)]^2 \} \, \, \, = \, \, \, \mathbb{E} ( Y_i^2 ) - +[\mathbb{E}(Y_i)]^2 \\ & = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, +\beta + \varepsilon_i )^2] - ( \mathbf{X}_{i, \ast} \, \beta)^2 \\ & += \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 \varepsilon_i +\mathbf{X}_{i, \ast} \, \beta + \varepsilon_i^2 ] - ( \mathbf{X}_{i, +\ast} \, \beta)^2 \\ & = ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 +\mathbb{E}(\varepsilon_i) \mathbf{X}_{i, \ast} \, \beta + +\mathbb{E}(\varepsilon_i^2 ) - ( \mathbf{X}_{i, \ast} \, \beta)^2 +\\ & = \mathbb{E}(\varepsilon_i^2 ) \, \, \, = \, \, \, +\mbox{Var}(\varepsilon_i) \, \, \, = \, \, \, \sigma^2. +\end{align*} +$$ + +Hence, \( Y_i \sim \mathcal{N}( \mathbf{X}_{i, \ast} \, \beta, \sigma^2) \). + +

    +









    + +

    The singular value decompostion

    +
    + +

    + +

    +A general +\( m\times n \) matrix \( \hat{A} \) can be written in terms of a diagonal +matrix \( \hat{D} \) of dimensionality \( n\times n \) and two orthognal +matrices \( \hat{U} \) and \( \hat{V} \), where the first has dimensionality +\( m \times m \) and the last dimensionality \( n\times n \). +We have then +$$ +\hat{A} = \hat{U}\hat{D}\hat{V}^T +$$ +

    + + +

    +









    + +

    Code examples for Ridge and Lasso Regression

    @@ -1257,38 +1322,390 @@ plt.show()











    -

    The singular value decompostion

    -
    - -

    -How can we use the singular value decomposition to find the parameters \( \beta_j \)? More details will come. We first note that a general \( m\times n \) matrix \( \hat{A} \) can be written in terms of a diagonal matrix \( \hat{\Sigma} \) of dimensionality \( n\times n \) and two orthognal matrices \( \hat{U} \) and \( \hat{V} \), where the first has dimensionality \( m \times n \) and the last dimensionality \( n\times n \). We have then -$$ -\hat{A} = \hat{U}\hat{\Sigma}\hat{V} -$$ -

    - +

    From standard regression to Ridge regressions

    -Add codes and discuss this in connection with lasso and ridge, show example where the standard inversion of a matrix fails and where SVD comes to rescue +One of the typical problems we encounter with linear regression, in particular +when the matrix \( \hat{X} \) (our so-called design matrix) is high-dimensional, +are problems with near singular or singular matrices. The column vectors of \( \hat{X} \) +may be linearly dependent, normally referred to as super-collinearity. +This means that the matrix may be rank deficient and it is basically impossible to +to model the data using linear regression. As an example, consider the matrix +$$ +\begin{align*} +\mathbf{X} & = \left[ +\begin{array}{rrr} +1 & -1 & 2 +\\ +1 & 0 & 1 +\\ +1 & 2 & -1 +\\ +1 & 1 & 0 +\end{array} \right] +\end{align*} +$$ + +

    +The columns of \( \hat{X} \) are linearly dependent. We se this easily since the +the first column is the row-wise sum of the other two columns. The rank (more correct, +the column rank) of a matrix is the dimension of the space spanned by the +column vectors. Hence, the rank of \( \mathbf{X} \) is equal to the number +of linearly independent columns. In this particular case the matrix has rank 2. + +

    +Super-collinearity of an \( (n \times p) \)-dimensional design matrix \( \mathbf{X} \) implies +that the inverse of the matrix \( \hat{X}^T\hat{x} \) (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this +$$ +\begin{align*} +\hat{X} & = \left[ +\begin{array}{rr} +1 & -1 +\\ +1 & -1 +\end{array} \right]. +\end{align*} +$$ + +We see easily that \( \mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0 \). Hence, \( \mathbf{X} \) is singular and its inverse is undefined. +This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigenvalue which is zero.











    -

    Lasso and Ridge regression

    +

    Fixing the singularity

    -Discuss the mathematics here +If our design matrix \( \hat{X} \) which enters the linear regression problem +$$ +\begin{align} +\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, +\label{_auto1} +\end{align} +$$ + +has linearly dependent column vectors, we will not be able to compute the inverse +of \( \hat{X}^T\hat{X} \) and we cannot find the parameters (estimators) \( \beta_i \). +The estimators are only well-defined if \( (\hat{X}^{T}\hat{X})^{-1} \) exits. +This is more likely to happen when the matrix \( \hat{X} \) is high-dimensional. In this case it is likely to encounter a situation where +the regression parameters \( \beta_i \) cannot be estimated. + +

    +The ad hoc approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change +$$ +\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, +$$ + +where \( \hat{I} \) is the identity matrix.











    -

    Logistic regression

    -Add discussion about classification versus regression, show examples of more than two cases and why regression is not the best approach. Motivate for k-nearest neighbors +

    A second-order polynomial with Ridge and Lasso

    +

    + + +

    import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.linear_model import Ridge
    +from sklearn.metrics import r2_score
    +
    +np.random.seed(4155)
    +
    +n_samples = 100
    +
    +x = np.random.rand(n_samples,1)
    +y = 5*x*x + 0.1*np.random.rand(n_samples,1)
    +
    +# Centering  x and y.
    +x_ = x - np.mean(x)
    +y_ = y - np.mean(y) # beta_0 = mean(y)
    +
    +X = np.c_[np.ones((n_samples,1)), x, x**2]
    +X_ = np.c_[x_, x_**2]
    +
    +
    +### 1.
    +lmb_values = [1e-4, 1e-3, 1e-2, 10, 1e2, 1e4]
    +num_values = len(lmb_values)
    +
    +## Ridge-regression of centered and not centered data
    +beta_ridge = np.zeros((3,num_values))
    +beta_ridge_centered = np.zeros((3,num_values))
    +
    +I3 = np.eye(3)
    +I2 = np.eye(2)
    +
    +for i,lmb in enumerate(lmb_values):
    +    beta_ridge[:,i] = (np.linalg.inv( X.T @ X + lmb*I3) @ X.T @ y).flatten()
    +    beta_ridge_centered[1:,i] = (np.linalg.inv( X_.T @ X_ + lmb*I2) @ X_.T @ y_).flatten()
    +
    +# sett beta_0 = np.mean(y)
    +beta_ridge_centered[0,:] = np.mean(y)
    +
    +## OLS (ordinary least squares) solution 
    +beta_ls = np.linalg.inv( X.T @ X ) @ X.T @ y
    +
    +## Evaluate the models
    +pred_ls = X @ beta_ls
    +pred_ridge =  X @ beta_ridge
    +pred_ridge_centered =  X_ @ beta_ridge_centered[1:] + beta_ridge_centered[0,:]
    +
    +## Plot the results
    +
    +# Sorting
    +sort_ind = np.argsort(x[:,0])
    +
    +x_plot = x[sort_ind,0]
    +x_centered_plot = x_[sort_ind,0]
    +
    +pred_ls_plot = pred_ls[sort_ind,0]
    +pred_ridge_plot = pred_ridge[sort_ind,:]
    +pred_ridge_centered_plot = pred_ridge_centered[sort_ind,:]
    +
    +# Plott not centered
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +
    +plt.title('linear regression on un-centered data')
    +plt.legend()
    +
    +# Plott centered
    +plt.figure()
    +
    +for i in range(num_values):
    +    plt.plot(x_centered_plot,pred_ridge_centered_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x_,y,'ro')
    +
    +plt.title('linear regression on centered data')
    +plt.legend()
    +
    +
    +# 2.
    +
    +pred_ridge_scikit =  np.zeros((n_samples,num_values))
    +for i,lmb in enumerate(lmb_values):
    +    pred_ridge_scikit[:,i] = (Ridge(alpha=lmb,fit_intercept=False).fit(X,y).predict(X)).flatten() # fit_intercept=False fordi bias er allerede i X
    +
    +plt.figure()
    +
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_scikit[sort_ind,i],label='scikit-ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +plt.legend()
    +plt.title('linear regression using scikit')
    +
    +plt.show()
    +
    +### R2-score of the results
    +for i in range(num_values):
    +    print('lambda = %g'%lmb_values[i])
    +    print('r2 for scikit: %g'%r2_score(y,pred_ridge_scikit[:,i]))
    +    print('r2 for own code, not centered: %g'%r2_score(y,pred_ridge[:,i]))
    +    print('r2 for own, centered: %g\n'%r2_score(y,pred_ridge_centered[:,i]))
    +
    +

    +









    + +

    Fitting vs. predicting when data is in the model class

    -Add examples on classification problems +We start by considering the case +\( f(x)=2x \).

    +Then the data is clearly generated by a model that is contained within +all three model classes we are using to make predictions (linear +models, third order polynomials, and tenth order polynomials). + +

    +Run the code for the following cases: + +

      +
    1. For \( f(x)=2x \) , \( Ntrain=10 \) and \( \sigma =0 \) (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when \( x \in [0,1] \) . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?
    2. +
    3. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?
    4. +
    5. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example \( x \in [0,1.2] \) ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?
    6. +
    7. Repeat the above for \( f(x)=2x \) , \( Ntrain=10 \) , and \( \sigma=1 \) . What changes?
    8. +
    + +Repeat the exercises above for \( f(x)=2x \) , \( Ntrain=100 \) , and \( \sigma=1 \) . What changes? +Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well. + +

    +









    + +

    Fitting versus predicting when data is not in the model class

    + +

    +Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider \( f(x)=2x-10x^5+15x^{10} \) . Notice that the for linear and third-order polynomial the true model \( f(x) \) is not contained in model class. + +

      +
    1. Do better fits lead to better predictions?
    2. +
    3. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points \( Ntrain \) and \( \sigma \)?
    4. +
    + +Summarize what you think you learned about the relationship of knowing the true model class and predictive power. + +

    +









    + +

    The code

    + +

    + + +

    import numpy as np
    +import sklearn as sk
    +from sklearn import datasets, linear_model
    +from sklearn.preprocessing import PolynomialFeatures
    +
    +import matplotlib as mpl
    +from matplotlib import pyplot as plt
    +
    +%matplotlib notebook
    +
    +# The Training Data
    +
    +N_train=100
    +
    +sigma_train=1;
    +
    +# Train on integers
    +x=np.linspace(0.05,0.95,N_train)
    +# Draw random noise
    +s = sigma_train*np.random.randn(N_train)
    +
    +#linear
    +y=2*x+s
    +
    +#Tenth Order
    +#y=2*x-10*x**5+15*x**10+s
    +
    +p1=plt.plot(x,y, "o",ms=15, label='Training')
    +
    +#Linear Regression
    +# Create linear regression object
    +clf = linear_model.LinearRegression()
    +
    +# Train the model using the training sets
    +clf.fit(x[:, np.newaxis], y)
    +# The coefficients
    +
    +xplot=np.linspace(0.02,0.98,200)
    +linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')
    +
    +#Polynomial Regression
    +
    +
    +poly3 = PolynomialFeatures(degree=3)
    +X = poly3.fit_transform(x[:,np.newaxis])
    +clf3 = linear_model.LinearRegression()
    +clf3.fit(X,y)
    +
    +
    +Xplot=poly3.fit_transform(xplot[:,np.newaxis])
    +poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')
    +
    +
    +
    +#poly5 = PolynomialFeatures(degree=5)
    +#X = poly5.fit_transform(x[:,np.newaxis])
    +#clf5 = linear_model.LinearRegression()
    +#clf5.fit(X,y)
    +
    +#Xplot=poly5.fit_transform(xplot[:,np.newaxis])
    +#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)
    +
    +poly10 = PolynomialFeatures(degree=10)
    +X = poly10.fit_transform(x[:,np.newaxis])
    +clf10 = linear_model.LinearRegression()
    +clf10.fit(X,y)
    +
    +Xplot=poly10.fit_transform(xplot[:,np.newaxis])
    +poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')
    +
    +axes = plt.gca()
    +axes.set_ylim([-7,7])
    +
    +handles, labels=axes.get_legend_handles_labels()
    +plt.legend(handles,labels, loc='lower center')
    +plt.xlabel("$x$")
    +plt.ylabel("$y$")
    +Title="$N=$"+str(N_train)+", $\sigma=$"+str(sigma_train)
    +plt.title(Title+" (train)")
    +plt.tight_layout()
    +plt.show()
    +
    +

    + + +

    Generating test data

    +

    + + +

    # Generate Test Data
    +
    +#Number of test data
    +N_test=20
    +
    +sigma_test=sigma_train
    +
    +max_x=1.2
    +x_test=max_x*np.random.random(N_test)
    +# Draw random noise
    +s_test = sigma_test*np.random.randn(N_test)
    +
    +#Linear
    +y_test=2*x_test+s_test
    +#Tenth order
    +#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test
    +
    +#Make design matrices for prediction
    +x_plot=np.linspace(0,max_x, 200)
    +X3 = poly3.fit_transform(x_plot[:,np.newaxis])
    +X10 = poly10.fit_transform(x_plot[:,np.newaxis])
    +
    +%matplotlib notebook
    +
    +fig = plt.figure() 
    +p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')
    +p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')
    +p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')
    +p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')
    +
    +
    +plt.legend(loc=2)
    +plt.xlabel('$x$')
    +plt.ylabel('$y$')
    +plt.legend(loc='best')
    +plt.title(Title+" (pred.)")
    +plt.tight_layout()
    +plt.show()
    +
    +#Linear Filename
    +#filename_test=Title+"pred-linear.pdf"
    +#Tenth Order Filename
    +#filename_test=Title+"pred-o10.pdf"
    +#plt.savefig(filename_test)
    +#plt.ylim((-6,12))
    +
    +

    +









    + +

    Lasso regression

    + +

    +









    + +

    Logistic regression

    diff --git a/doc/pub/Regression/ipynb/Regression.ipynb b/doc/pub/Regression/ipynb/Regression.ipynb index a4a85095f..af7e36ea4 100644 --- a/doc/pub/Regression/ipynb/Regression.ipynb +++ b/doc/pub/Regression/ipynb/Regression.ipynb @@ -10,7 +10,7 @@ " \n", "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", "\n", - "Date: **Aug 24, 2018**\n", + "Date: **Sep 6, 2018**\n", "\n", "Copyright 1999-2018, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n", "\n", @@ -33,6 +33,28 @@ "\n", "\n", "\n", + "## Regression analysis, overarching aims II\n", + "\n", + "\n", + "Consider an experiment in which $p$ characteristics of $n$ samples are\n", + "measured. The data from this experiment are denoted $\\mathbf{X}$, with\n", + "$\\mathbf{X}$ as above. The matrix $\\mathbf{X}$ is called the *design\n", + "matrix*. Additional information of the samples is available in the\n", + "form of $\\mathbf{Y}$ (also as above). The variable $\\mathbf{Y}$ is\n", + "generally referred to as the *response variable*. The aim of\n", + "regression analysis is to explain $\\mathbf{Y}$ in terms of\n", + "$\\mathbf{X}$ through a functional relationship like $Y_i =\n", + "f(\\mathbf{X}_{i,\\ast})$. When no prior knowledge on the form of\n", + "$f(\\cdot)$ is available, it is common to assume a linear relationship\n", + "between $\\mathbf{X}$ and $\\mathbf{Y}$. This assumption gives rise to\n", + "the *linear regression model* where $\\beta = (\\beta_1, \\ldots,\n", + "\\beta_p)^{\\top}$ is the *regression parameter*. The parameter\n", + "$\\beta_j$, $j=1, \\ldots, p$, represents the effect size of covariate\n", + "$j$ on the response. That is, for each unit change in covariate $j$\n", + "(while keeping the other covariates fixed) the observed change in the\n", + "response is equal to $\\beta_j$.\n", + "\n", + "\n", "\n", "## General linear models\n", "Before we proceed let us study a case from linear algebra where we aim at fitting a set of data $\\hat{y}=[y_0,y_1,\\dots,y_{n-1}]$. We could think of these data as a result of an experiment or a complicated numerical experiment. These data are functions of a series of variables $\\hat{x}=[x_0,x_1,\\dots,x_{n-1}]$, that is $y_i = y(x_i)$ with $i=0,1,2,\\dots,n-1$. The variables $x_i$ could represent physical quantities like time, temperature, position etc. We assume that $y(x)$ is a smooth function. \n", @@ -897,19 +919,10 @@ { "cell_type": "code", "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[1 4]\n", - " [2 5]\n", - " [3 6]]\n", - "[[1 2 3 0 0 4 5 6]]\n" - ] - } - ], + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "import numpy as np\n", "print(np.c_[np.array([1,2,3]), np.array([4,5,6])])\n", @@ -918,20 +931,11 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEWCAYAAAB1xKBvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAHmlJREFUeJzt3XmUZGWd5vHvQxYFZlW1QFUhILVAi/TBbh0wxwUXlKJHGmhpp+0+cAqaTashRw+OuE6do4y2y9hHFGQKKWwQqRwUEWawD3aLoMMoiyaI7MhiJTsUFFuxFLX85o/3hnkziMx8M2O5kZnP55w8FXHvjRu/vATx5Hvf975XEYGZmdl4tqm6ADMzmxocGGZmlsWBYWZmWRwYZmaWxYFhZmZZHBhmZpbFgWFdQ9K7JN1VdR3TgaTFkjZI6qm6Fps+HBjWcZLWSjqofnlE/L+I2LuKmupJOlXSpuJL92lJ10h6e9V15YqI+yNibkRsqboWmz4cGDbjSZo1yqofRMRcYAHwc+CHHX5/s67iwLCuIek9kh4sPV8r6ROSbpb0jKQfSNq+tP4wSTeVWgBvLK37jKR7JT0n6XZJHyitO1bSryR9Q9KTwKlj1RURm4EB4LWSFma+/36Sflu8/w+L2v+p/HtK+rSkR4HzMvb3aUkPFfu7S9KyYvlbJA1KelbSY5JOK5YvlRS1MJK0m6TLJK2XdI+kD5f2faqkiyR9r9j/bZL6sv/D2YzhwLBu9/fAwcAewBuBYwEk7QucC/wjMB84G7hM0nbF6+4F3gW8GvjvwBpJu5b2+1bgPuA1wJfGKkDSbOAfgCeBp8Z7/2L7S4HvAjsBFwIfqNvtLsW6JcCKcfa3N/AR4D9GxDzgfcDaYj+nA6dHxJ8AfwpcNMqv8X3gQWA34IPAlyUdWFr//mKbHYDLgDPHOiY2MzkwrNudEREPR8R64MfAfyiWrwDOjojrI2JLRJwPbATeBhARPyxetzUifgDcDbyltN+HI+JbEbE5Il4c5b3/XtLTwIvAh4EPFq2N8d7/bcCsovZNEXEJ8Ou6fW8FPh8RG4v3H2t/W4DtgH0kbRsRayPi3mI/m4DXSVoQERsi4rr6X0LSIuAdwKcj4qWIuAn4DikEa34ZEZcXfR4XAG8a5ZjYDObAsG73aOnxC8Dc4vES4JTi9M3TxRf7ItJf0Ej6h9LpnaeBPyf1RdQ8kPHeF0XEDqRWyK3Am0vrxnr/3YCHYuTMnvXvty4iXsrZX0TcA3yMdOrscUnfl7Rb8boTgNcDd0r6jaTDGvweuwHrI+K50rIh4LWl5/XHeXv3rVg9B4ZNVQ8AX4qIHUo/vRFxoaQlwDmk0zjziy/9WwGVXp89TXNEPEFqAZxaOq016vsDj5D6O8rvt6h+t7m/T1HD/4qId5KCJYD/USy/OyKOBHYull0saU7dvh8GdpI0r7RsMfBQ7jEwAweGVWdbSduXfib61+w5wImS3qpkjqRDiy/FOaQv1XUAko4jtTAmLSLuAv4d+FTG+19LOo30EUmzJB3OyNNhE/p9JO0t6cCif+Yl0imyrcXvdpSkhRGxFXi62NfWutofAK4BvlIc6zeSWiZrmjkmNvM4MKwql5O++Go/p07kxRExSOpXOJPUEX0PRYd4RNwOfJ30xf0Y8BfAr1pQ8z+TOqh3Huf9Xwb+M+lL+WngKOBfSX0SE/59SP0XXwWeIJ062hn4bLHuYOA2SRtIHeBHjNIncySwlNTauJTUf/KzCf7+NsPJN1Ayaz9J1wPfjojzqq7FbLLcwjBrA0kHSNqlOCV1DGlI8L9VXZdZMzwKwqw99iZdEzGHdL3HByPikWpLMmuOT0mZmVkWn5IyM7MsU+qU1IIFC2Lp0qVVl2FmNqXccMMNT0TEwvG3HNuUCoylS5cyODhYdRlmZlOKpKFW7MenpMzMLIsDw8zMsjgwzMwsiwPDzMyyODDMzCyLA8PMzLI4MMzMLIsDw8zMsjgwzMwsiwPDzMyytD0wJJ0r6XFJtzZYd4qkkLSg3XWYmVlzOtHC+C7pNpIjSFoE/Cfg/g7UYGZmTWp7YETE1cD6Bqu+AXwK8A05zMymgEr6MCQdDjwUEb/L2HaFpEFJg+vWretAdWZm1kjHA0NSL/DfgM/lbB8RqyOiLyL6Fi5sejp3MzObpCpaGH8K7AH8TtJaYHfgRkm7VFCLmZll6vgNlCLiFmDn2vMiNPoi4olO12JmZvk6Maz2QuBaYG9JD0o6od3vaWZmrdf2FkZEHDnO+qXtrsHMzJrnK73NzCyLA8PMzLI4MMzMLIsDw8zMsjgwzMwsiwPDzMyyODDMzCyLA8PMzLI4MMzMLIsDw8zMsjgwzMwsiwPDzMyyODDMzCyLA8PMzLI4MMzMLIsDw8zMsjgwzMwsiwPDzMyyODDMzCyLA8PMzLK0PTAknSvpcUm3lpb9s6Q7Jd0s6VJJO7S7DjMza04nWhjfBQ6uW3YF8OcR8Ubg98BnO1CHmZk1oe2BERFXA+vrlv00IjYXT68Ddm93HWZm1pxu6MM4HvjJaCslrZA0KGlw3bp1HSzLzMzKKg0MSSuBzcDAaNtExOqI6IuIvoULF3auODMzG2FWVW8s6VjgMGBZRERVdZiZWZ5KAkPSwcCngAMi4oUqajAzs4npxLDaC4Frgb0lPSjpBOBMYB5whaSbJH273XWYmVlz2t7CiIgjGyz+l3a/r5mZtVY3jJIyM7MpwIFhZmZZHBhmZpbFgWFmZlkcGGZmlsWBYWZmWRwYZmaWxYFhZmZZHBhmZpbFgWFmZlkcGGZmlsWBYWZmWRwYZmaWxYFhZmZZHBhmZpbFgWFmZlkcGGZmlsWBYWZmWRwYZmaWxYFhZmZZ2h4Yks6V9LikW0vLdpJ0haS7i393bHcdZmbWnE60ML4LHFy37DPAlRGxF3Bl8dzMzFotomW7antgRMTVwPq6xYcD5xePzwf+pt11mJlNSwMDsHQpbLNN+ndgAB5+GNasgeOPT8taZFbL9jQxr4mIR4rHjwKvGW1DSSuAFQCLFy/uQGlmZl1sYABWroT774eddoJnn4VNm9K6oSE4+ujhVsWOO8J735u2bYHKO70jIoBR20wRsToi+iKib+HChR2szMysIo1aDbXlK1akYIiAJ58cDouaCNhhB7jhBli3Dn70o5aVVVUL4zFJu0bEI5J2BR6vqA4zs+7S3w/f/vZwK2FoKIXEXXfBGWfACy+Mv49nnoH99mt5aVW1MC4DjikeHwP8n4rqMDOrzsAALFgAUvqZOxfOOuuVHdUvvABf/GIKghxtOn3fiWG1FwLXAntLelDSCcBXgb+UdDdwUPHczGz66++HWbNSQBx1VDqtVPP886O/ToLddx9//7298KUvNV9nA20/JRURR46yalm739vMrDK1zumhoeFl0uSHuS5enIJgxYqRp6Vmz4Z582D9+uFtli9vrvZRVNWHYWY2/ZRDolE4TDYspJFBUBsl1eaAqOfAMDObjPLw1sWL4XWvg6uuGg6FVl0wJ8GJJw6HwvLlHQuIeg4MM7OJqg1vrZ0aGhoaeeqpGT09aVhsB04xTVTl12GYmXW1RtdErFyZN7x1oubPh/PPhyeegK1bYe3argkLcGCYmQ2rD4f+/pEXyg0NwXHHtbY1cdJJad8RKSi6KCDq+ZSUmc1c/f1w9tnpr/l6Q0MjL6Crqb+yeiJ6elIArVo1+X1UyC0MM5uZ+vvTRXKNwqJmrI7r3t6x9y+NbD1EwObNUzYswIFhZjPV6tWTf+2SJen1S5akYFiyJIVD+fkFF0zpcGjEp6TMbPooXwfR0wNbtqQv79pIow0b4Oqr0/DXLVvy9ll/PUXtSuoKh7dWxS0MM5u6yp3UCxaM7JCuBUKto/r1r0/TfR96KHzrW3n77+1N10CUWw6rV8+4oKhxYJjZ1FEfEMcfP/ZU3zWbNqXtPvlJuOIKePrpdAppLLVwWLUqDW/twmGuneZTUmY2NdRfLFeetC/Hpk3w5S8PP6/1L5RHSc2Zk57P4FAYi1sYZtZdaq0IaXhW16VL4eSTm7tYrtGU36tWpVNXtVFMGzY4LMbgFoaZdY/6mweV+yGa0cYpv2cStzDMrBq5Nw+aiNmz0/QakEZJwYzvqG4lB4aZtV+jKTeOOy7/5kGj2XbbFBC1EUznnpum16hdJBcx4zuqW8mnpMys9QYGUp9Do47poaHUkpiM+fNTS6SCe0GYA8PMWqF8wdw224w93cZk9fbC6ac7ICrkU1Jm1pzacNdax3Q7wsL9EF3BgWFmzWnlvSF6ekb2SaxZ436ILlJpYEj6r5Juk3SrpAslbV9lPWbWQKMbCK1bBxddlKbNmMyQ197edKV1bUQTdP3NgwwUrbrv7ETfWHot8Etgn4h4UdJFwOUR8d3RXtPX1xeDg4OdKtHM6q+uhpGT8c2bl0Yjvfhi/j7LkwFaR0i6ISL6mt1P1aekZgGvkjQL6AUerrges5mlUesB4KWX0oyu/f2vPN0Uke45fe216b7T55wz/r0h5s/36aVpoLIWBoCkk4EvAS8CP42IV3yKJK0AVgAsXrz4zUOtujWi2Uw01nBXSNc17LUX3HsvbNw4+n6kkZ3b400rbpWa8i0MSTsChwN7ALsBcyQdVb9dRKyOiL6I6Fu4cGGnyzSbuhpdLHf88WNP2rdpE9x9d9r2xz+GRYsab1c/L9Py5anl4AvmprUqr8M4CPhDRKwDkHQJsD+wpsKazKau/v409HTLltQC6OlJX94w+v2pG9m8GU47LT1+5plX9mF4XqYZq8o+jPuBt0nqlSRgGXBHhfWYTU0DA6nz+ayzhifrq/2lX5Z7+rnceli+/JW3IvX1EDNWZS2MiLhe0sXAjcBm4LdAEzfZNZuBGo1iakaj1sMMvBWpNVbp1CAR8Xng81XWYDZlPf88fPzjrQsLd1LbOMY9JSXpCklv6kQxZjaGl1+Gq6+GU0+Fd70r3Z/68cfzXz/axXIe7mqZcvowPg18U9J5knZtd0FmM0b9/akXLBh5PcSWLTA4CF/7GrzvfSkgDjgAvvCFdJ3Exz8OO+889nvMnTuy72HVquHpvyPSY4eEZcq+DkPS3wKfAy4BvhYRE7i0szV8pbdNG+P1PfT0pJsB1a6g3mcfWLYMDjwwhcaOO469HylN21G7b7XNaK26DiOrD6MYxXQXcBbwT8CHJX02Ii5otgCzGaM87HU8W7ak1sbAQAqJXXZpvF2tdbBype8RYW03bgtD0q9IF9fdBlwHXA/cCZwMbBcRK9pdZI1bGDZl1F9Rvd12Y1853Uj91dRmk9TJFsYK4PZ4ZbJ8VJKvmzCDka2HRjcQmmhYwCuvpjar2LiBERG3jbH60BbWYjY19fePvOVoK1oFvpraulBTV3pHxH2tKsRsStq0Cc4+u7l9SGl4a/nGQb6a2rqQ7+ltNhFbt8LNN6epv6+8Ml0X0UyL4qSTPJLJpoyq74dh1l0a3R/i979PE/f93d+l6x723RdOOQXuuQeOPjptm0Ma3ranx2FhU45bGGY19dc0DA2lQKiN99h9dzjssDTM9cAD0/Oach9GzezZ6epsSKebTj/dp5lsSnNgmD3xBPziF+lCt0Z3l9tpJ7juOnjd61IroV6tlVAbJdXTk4LHrQebZnxKyqav0W4/+txzcPnl6bTSvvvCwoXpdNOGDY3389RT6S50jcKiZtWq4RsHbd7ssLBpyYFh01Pt9NLQUPoSHxqC446D178+tRgOPRTOPDPdm/qLX4Rrrhn9ugdfD2EG+JSUTUebN8MnPvHK00ubNqXg+OQn07xM++8Pr3rV8Povf9l3lzMbg1sYNnXUTjFJMGtW+rd2qunWW+GMM+Dww9Osr48+2ngfmzalYFi2bGRYgO8uZzaO7Nlqu4Hnkpph6udjyrHnnikMLr00dWbXW7Ik3ffBbAbp6Gy1Zm03mXAomz8/3Tti6dL0/IADfHrJrMV8Ssqq1d+fhqEeddTkwwJg/frhsACfXjJrA7cwrHMGBtJ9G4aGUkjk3BciV6ORTMuXOyDMWqjSFoakHSRdLOlOSXdIenuV9VgL1d9+dN681IoYGkrrWxkWPtVk1hFVtzBOB/4tIj4oaTbQW3E91qxGfRHNnGoaTa2FsmSJ7zBn1iGVBYakVwPvBo4FiIiXgZerqsea1N+fJuhr56g7z8dkVqkqT0ntAawDzpP0W0nfkTSnfiNJKyQNShpct25d56u0kRpdCzF3bpp8r5VhUZvVdckSWLMm7fuJJxwWZhWqMjBmAfsBZ0XEvsDzwGfqN4qI1RHRFxF9Cxcu7HSNVt8Xcfzxr+yHeP751rxXbcrviLTviHTNhEPCrCtUGRgPAg9GxPXF84tJAWJVK7cijj56eD6mJ58cnq67WbWJ/MotCE/aZ9bVKguMiHgUeEDS3sWiZcDtVdUzY9XP6NrfPzxpH7S+T6IWEFu3ugVhNsVUPUrqo8BAMULqPuC4iuuZGcrXQ0jDoTA01PhGQJNV27dHMplNC5UGRkTcBDQ9v4llGG3qjVa1IHp60r62bvUNhMymKU8NMhMMDKR7QbTieohtt03DWyEFA6QWxPnnD3dUuy/CbFpyYEx1o91Vrubhh1PLYtOm/H3W31mu3EF93nlpeGstGNwPYTZjVN2HYc2ov1huaAg+/GH4zW9SQFx1Fdx558T22dsLxxyTbmF6//1pjib3P5gZDoypodZJXf4Ch8ZXVr/4Yroaes4cePe74YQT4LTT4JFHRt+/O6fNLIMDo5s16qgeGkohsM02o3dYS2m679mz0/Ndd019GI1OS3m6DTPL5D6MbtCoH2JgII00atRRvXFjakmMZvHi4bCAFAbnnTfcWQ3p8Zo1nm7DzLL5Fq1VGm2o6/bbpxFIk5lyQ4ILLnAImNkf+RatU12tBVG+hWjNSy+N//r581Mro/x6CU480WFhZm3hU1LtMN5Q18ceg499rHFY5OjtTf0O9bcgveACX/9gZm3jFkarveENcHtpSqzaUNcbb0zXLVx5Jdx22/j7adSCqC0vd1K7NWFmHeIWRiuUZ3e9vcH8iS++mIa2nnMO7LYbfOUrsMsuo+9vtBaEO6nNrEJuYTRrrL6IMgmeegq22y49X7So8evcgjCzLuUWRiONpvwuP1+zBm66Cb7+dfjQh/L6IhYvHg4LSEHgFoSZTSEeVlsz2pTfrbJmjYPAzCrRqmG1bmFAakHU7iwHeWExfz488EBqGYxnn30cFmY25c2swBjtiupGczKNZ/162H33NPdSb+/o2y1bljcqysysy82cTu+DDkpDWmtqczJN9vTT4sXp31rLoX5yQLcozGyamT6BUe6DqKnd+Q1GhkXNxo2Te6/e3uEZYyGFgwPCzKa56REYow1t3bKl+XtUL1kChxzi+0OY2Yw3tQLjllvSKaSenhQGtfs3rFw5+Wk2xpqTydNsmJn9UeXDaiX1AIPAQxFx2Fjb9knxikG1s2fDyy9PvoA1a9K/7oMws2lqOs1WezJwB/Ank3p1M2GxbJmvqDYzy1TpsFpJuwOHAt9pemdjDW096aT009OTnvf0pOc/+1nTb2tmNlNUfR3GN4FPAVtH20DSCkmDkka/xHvJkuFpNspqwbBqVfrZvDkNod282f0TZmYTVFlgSDoMeDwibhhru4hYHRF9o55/qw1xXb4c1q5NgVD7cTCYmbVMlS2MdwDvl7QW+D5woKQ1E9pDrWXh/gczs7arLDAi4rMRsXtELAWOAK6KiKPGfWFtVteI1KJwWJiZdUQ3jJLK9+Y3Q7tmqzUzszF1RWBExC+AX1RchpmZjaHqUVJmZjZFODDMzCyLA8PMzLI4MMzMLIsDw8zMsjgwzMwsiwPDzMyyODDMzCyLA8PMzLI4MMzMLIsDw8zMsjgwzMwsiwPDzMyyODDMzCyLA8PMzLI4MMzMLIsDw8zMsjgwzMwsiwPDzMyyODDMzCxLZYEhaZGkn0u6XdJtkk6uqhYzMxvfrArfezNwSkTcKGkecIOkKyLi9gprMjOzUVTWwoiIRyLixuLxc8AdwGurqsfMzMbWFX0YkpYC+wLXN1i3QtKgpMF169Z1ujQzMytUHhiS5gI/Aj4WEc/Wr4+I1RHRFxF9Cxcu7HyBZmYGVBwYkrYlhcVARFxSZS1mZja2KkdJCfgX4I6IOK2qOszMLE+VLYx3AEcDB0q6qfg5pMJ6zMxsDJUNq42IXwKq6v3NzGxiKu/0NjOzqcGBYWZmWRwYZmaWxYFhZmZZHBhmZpbFgWFmZlkcGGZmlsWBYWZmWRwYZmaWxYFhZmZZHBhmZpbFgWFmZlkcGGZmlsWBYWZmWRwYZmaWxYFhZmZZHBhmZpbFgWFmZlkcGGZmlsWBYWZmWSoNDEkHS7pL0j2SPlNlLWZmNrbKAkNSD/A/gb8C9gGOlLRPVfWYmdnYqmxhvAW4JyLui4iXge8Dh1dYj5mZjWFWhe/9WuCB0vMHgbfWbyRpBbCieLpR0q0dqK1ZC4Anqi4ig+tsnalQI7jOVpsqde7dip1UGRhZImI1sBpA0mBE9FVc0rhcZ2tNhTqnQo3gOlttKtXZiv1UeUrqIWBR6fnuxTIzM+tCVQbGb4C9JO0haTZwBHBZhfWYmdkYKjslFRGbJX0E+HegBzg3Im4b52Wr219ZS7jO1poKdU6FGsF1ttqMqlMR0Yr9mJnZNOcrvc3MLIsDw8zMsnRNYIw3TYik7ST9oFh/vaSlpXWfLZbfJel9Fdb4cUm3S7pZ0pWSlpTWbZF0U/HT1s79jDqPlbSuVM+HSuuOkXR38XNMxXV+o1Tj7yU9XVrXkeMp6VxJj492/Y+SM4rf4WZJ+5XWdfJYjlfn8qK+WyRdI+lNpXVri+U3tWr4ZRN1vkfSM6X/tp8rrevYVEIZdX6yVOOtxedxp2JdR46npEWSfl5859wm6eQG27T28xkRlf+QOr3vBfYEZgO/A/ap26Yf+Hbx+AjgB8XjfYrttwP2KPbTU1GN7wV6i8cn1Wosnm/oomN5LHBmg9fuBNxX/Ltj8XjHquqs2/6jpIERnT6e7wb2A24dZf0hwE8AAW8Dru/0scysc//a+5Om47m+tG4tsKBLjud7gH9t9vPS7jrrtv1r4KpOH09gV2C/4vE84PcN/l9v6eezW1oYOdOEHA6cXzy+GFgmScXy70fExoj4A3BPsb+O1xgRP4+IF4qn15GuLem0ZqZceR9wRUSsj4ingCuAg7ukziOBC9tUy6gi4mpg/RibHA58L5LrgB0k7Upnj+W4dUbENUUdUN1nM+d4jqajUwlNsM6qPpuPRMSNxePngDtIM2iUtfTz2S2B0WiakPpf/I/bRMRm4BlgfuZrO1Vj2QmkZK/ZXtKgpOsk/U0b6qvJrfNviybqxZJqF1B26lhO6L2KU3t7AFeVFnfqeI5ntN+jk8dyouo/mwH8VNINSlPxVO3tkn4n6SeS3lAs68rjKamX9EX7o9Lijh9PpVP0+wLX161q6eez66cGmYokHQX0AQeUFi+JiIck7QlcJemWiLi3mgr5MXBhRGyU9I+kltuBFdWS4wjg4ojYUlrWTcdzypD0XlJgvLO0+J3FsdwZuELSncVf2FW4kfTfdoOkQ4D/DexVUS05/hr4VUSUWyMdPZ6S5pIC62MR8Wy73ge6p4WRM03IH7eRNAt4NfBk5ms7VSOSDgJWAu+PiI215RHxUPHvfcAvSH8NtMO4dUbEk6XavgO8Ofe1nayz5AjqmvwdPJ7jGe336LqpbyS9kfTf+/CIeLK2vHQsHwcupT2ndLNExLMRsaF4fDmwraQFdOHxLIz12Wz78ZS0LSksBiLikgabtPbz2e6OmczOm1mkTpc9GO7QekPdNv+FkZ3eFxWP38DITu/7aE+nd06N+5I65vaqW74jsF3xeAFwN23qsMusc9fS4w8A18VwR9gfinp3LB7vVFWdxXZ/RupEVBXHs3iPpYzeSXsoIzsVf93pY5lZ52JS/97+dcvnAPNKj68BDq6wzl1q/61JX7T3F8c26/PSqTqL9a8m9XPMqeJ4Fsfle8A3x9impZ/Pth3sSfzyh5B6+e8FVhbLvkD6Sx1ge+CHxYf+18CepdeuLF53F/BXFdb4M+Ax4Kbi57Ji+f7ALcWH/BbghIqP5VeA24p6fg78Wem1xxfH+B7guCrrLJ6fCny17nUdO56kvx4fATaRzvOeAJwInFisF+lGYPcWtfRVdCzHq/M7wFOlz+ZgsXzP4jj+rvhMrKy4zo+UPpvXUQq4Rp+XquostjmWNOCm/LqOHU/SacUAbi79dz2knZ9PTw1iZmZZuqUPw8zMupwDw8zMsjgwzMwsiwPDzMyyODDMzCyLA8PMzLI4MMzMLIsDw6wJxf0I/rJ4/E+SvlV1TWbt4skHzZrzeeALxURz+wLvr7ges7bxld5mTZL0f4G5wHsi3ZfAbFryKSmzJkj6C9Kdz152WNh058Awm6TizmUDpLuabZDUtjvqmXUDB4bZJBR3WrsEOCUi7gC+SOrPMJu23IdhZmZZ3MIwM7MsDgwzM8viwDAzsywODDMzy+LAMDOzLA4MMzPL4sAwM7Ms/x/AARw+KHcZ5gAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "%matplotlib inline\n", "\n", @@ -941,7 +945,7 @@ "import matplotlib.pyplot as plt\n", "\n", "x = 2*np.random.rand(100,1)\n", - "y = 4+3*x+0.01*np.random.randn(100,1)\n", + "y = 4+3*x+np.random.randn(100,1)\n", "\n", "xb = np.c_[np.ones((100,1)), x]\n", "beta = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)\n", @@ -975,20 +979,11 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "# Importing various packages\n", "from random import random, seed\n", @@ -997,7 +992,7 @@ "from sklearn.linear_model import LinearRegression\n", "\n", "x = 2*np.random.rand(100,1)\n", - "y = 4+3*x+0.01*np.random.randn(100,1)\n", + "y = 4+3*x+np.random.randn(100,1)\n", "linreg = LinearRegression()\n", "linreg.fit(x,y)\n", "xnew = np.array([[0],[2]])\n", @@ -1068,20 +1063,11 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEWCAYAAABrDZDcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XmcXGWd7/HPLyEBshCyAApJJyAykU0gAYIgIlsISRAuygsn4DAyNig4oyJ4hbljGIwwekdEr4pBuCi04HLVV0JIgJHVCEqCAQMRQSAhLJIdskCW/t0/ntNTnU5Vd1V1naXO+b5fr3p196nlPOf0qef3nGc1d0dERIqrT9oJEBGRdCkQiIgUnAKBiEjBKRCIiBScAoGISMEpEIiIFJwCgXTLzKaZ2b0xffatZvbVBn9mbOktGjP7oJk9m3Y6JH4KBIKZHWdmvzOzdWa22szmm9mRAO7e5u6npp3GrszMzWz/rtuzlN4o0G02s/XReb3PzMamna5qufsj7v53aadD4qdAUHBmthtwF/AdYBiwD3A18E6a6Wo2ZrZThae+7u6DCOf1FeDmhPcv0iMFAjkAwN3vcPdt7r7J3e9196cAzOwCM/ttx4ujkvhnzOw5M3vLzK4xs/dEdxRvmtnPzKx/9NoTzGy5mV1pZivN7CUzm1YpIWY2xcwWmdna6PMOrfVgKqT34ii9a83su2ZmnZ7/pJktMbM1ZnaPmY3u9NwNZvZydFwLzeyDnZ6bbma/MLPbzexN4ILu0uXum4CfAYd1SW93+z/VzJ6N7tS+Z2YPmdk/dTrO+WZ2vZmtAqZ393kWXG9mb0TH8yczOzh67nQzeyb6f75iZl+Mtp9gZss7ped9ZvZgdB6fNrMzOj13a3Ru50Sf83sze081/zNJnwKB/AXYZmY/MrNJZja0ivdMBMYBE4ArgJnAecAo4GDg451e+y5gBKFE/A/ATDPbobrBzA4HbgEuAoYDPwBmmdnO9R5YJ1OAI4FDgXOi9GNmHwGuBP4HsAfwCHBHp/c9Tsi4hwE/AX5uZrt0ev4jwC+A3YG27hJgZgMJ5+X5Ttsq7t/MRkSf/WXC+XgW+ECXjz0aeAHYC5jRw/GcChxPCPxDovOwKnruZuAidx9M+P/dXyb9/YDZwL3AnsBngbYu/8tzCXeTQ6PjnNHdOZHsUCAoOHd/EzgOcOAmYIWZzTKzvbp529fd/U13fxpYDNzr7i+4+zpgLnB4l9f/L3d/x90fAuYQMqGuWoEfuPvvozuTHxGqpyb07ggBuM7d17r7MuABSqXyi4Fr3X2Ju28FvgYc1lGKdvfb3X2Vu2919/8EdgY6Z3yPuvuv3b09KvGX80UzWwu8RTjP53d6rrv9nw487e6/jJ77NvB6l89+1d2/E6VvUw+ftwUYDIwFLHrNa9HnbAEONLPd3H2Nuz9R5jgmAIOic7nZ3e8nVCl2Dvq/cvc/RPtuo8vdj2SXAoEQZQoXuPtIQolwb+Bb3bzlb51+31Tm70Gd/l7j7hs6/b00+vyuRgOXRdUOa6PMc1SF19aqcwa6sVP6RgM3dNrfasAIdy+Y2RejapZ10fNDCHc3HV6uYt//2913B8YQzk3nQNLd/vfu/PkeZodczva67r/i50UZ9/8Bvgu8YWYzLbQPAZxNCDxLo+qnY8ocx97Ay+7e3mnb0iitHSqdZ8k4BQLZjrv/GbiVEBAaYWhULdKhBXi1zOteBma4++6dHgPc/Y4yr22UlwlVIp33uau7/y5qD7iCcPcyNMrM1xEy1g5VT90b3Y38CyGj3rWn/QOvASM73h+1a4zs+rHVHk+Uhm+7+zjgQEIV0eXR9sfd/SOEKp9fE9oyunoVGGVmnfOMFkIDuDQ5BYKCM7OxZnaZmY2M/h5FuN1/rIG7udrM+keZ6xTg52VecxNwsZkdHTVsDjSzyWY2uJvP7W9mu3R69K0xXTcCXzazgwDMbIiZfSx6bjCwFVgB7GRm/wbsVv5jquPu9xEy1NYq9j8HOMTMzrTQI+gSQntLXcdjZkdG57YfsAF4G2iP/i/TzGyIu28B3gTay3z27wml/CvMrJ+ZnQBMBe6s41RIxigQyFuERsffm9kGQgBYDFzWoM9/HVhDyADbgIuju47tuPsC4FOE6os1hMbGC3r47KcJ1S0dj3+sJWHu/ivgP4A7LfT8WQxMip6+B5hHaExfSsg4q6kK6sk3CJnpzt3t391XAh8Dvk5o1D0QWEA33Xp7OJ7dCMF2TXQ8q6K0QGi3eCl6z8XADj273H0zIeOfBKwEvgd8otz/UpqPaWEaiUtUarw9anuQXoiqZJYD09z9gbTTI/miOwKRjDKziWa2e9SF9kpC+0Qjq+xEAEhkNKKZvUSogtgGbHX38UnsV6TJHUMYv9AfeAY4s5tuqiJ1S6RqKAoE46N6TxERyRBVDYmIFFxSdwQvEnorOGH06Mwyr2kl6lY3cODAcWPHNs0kjSIiqVu4cOFKd9+jnvcmFQj2cfdXzGxP4D7gs+7+cKXXjx8/3hcsWBB7ukRE8sLMFtbb/ppI1ZC7vxL9fAP4FXBUEvsVEZGexR4IohGigzt+J8yCuDju/YqISHWS6D66F/CrMFUKOwE/cfd5CexXRESqEHsgcPcXgPfHvR8REamPuo+KiBScAoGISMEpEIiIFJwCgYhIwSkQiIgUnAKBiEjBKRCIiBScAoGISMEpEIiIFJwCgYhIwSkQiIgUnAKBiEjBKRCIiBScAoGISMEpEIiIFJwCgYhIwSkQiIgUnAKBiEjBKRCIiBScAoGISMEpEIiIFJwCgYhIwSkQiIgUnAKBiEjBKRCIiBScAoGISMEpEIiIFJwCgYhIwSkQiIgUnAKBiEjBKRCIiBScAoGISMEpEIiIFJwCgYhIwSkQiIgUXGKBwMz6mtkfzeyupPYpIiI9S/KO4F+AJQnuT0REqpBIIDCzkcBk4IdJ7E9ERKqX1B3Bt4ArgPZKLzCzVjNbYGYLVqxYkVCyREQk9kBgZlOAN9x9YXevc/eZ7j7e3cfvsccecSdLREQiSdwRHAucYWYvAXcCJ5rZ7QnsV0R6o60NxoyBPn3Cz7a2tFMkMYk9ELj7l919pLuPAc4F7nf38+Ler4j0QlsbtLbC0qXgHn62tioY5JTGEYjIjq66CjZu3H7bxo1hu+TOTknuzN0fBB5Mcp8iUodly2rbLk1NdwQisqOWltq2S1NTIBCRHc2YAQMGbL9twICwXXJHgUBEdjRtGsycCaNHg1n4OXNm2C65k2gbgYg0kWnTlPEXhO4IREQKToFARKTgFAhERApOgUBEpOAUCERECk6BQESk4BQIREQKToFARKTgFAhERApOgUBEpOAUCERECk6BQESk4BQIREQKToFARKTgFAhEJNva2mDMGOjTJ/xsa0s7Rbmj9QhEJLva2qC1FTZuDH8vXRr+Bq2V0EC6IxCR7LrqqlIQ6LBxY9guDaNAICLZtWxZbdulLgoEIpJdLS21bZe6KBCISHbNmAEDBmy/bcCAsF0aRoFARLJr2jSYORNGjwaz8HPmTDUUN5h6DYlItk2bpow/ZrojEBEpOAUCEZGCUyAQESk4BQIRkYJTIBBJQ97mz8nb8RSMAoFI0jrmz1m6FNxL8+c0a+aZt+NJU0oB1dw9kR3VYvz48b5gwYK0kyESjzFjQmbZ1ejR8NJLSaem9/J2PGnpOsEehMFzVY6bMLOF7j6+nl0rEIgkrU+fUHLuygza25NPT2/l7XjS0suA2ptAEHvVkJntYmZ/MLMnzexpM7s67n2KZFre5s/J2/GkJcUJ9pJoI3gHONHd3w8cBpxmZhMS2K9INuVt/px6jkeNyztKMaDGHgg8WB/92S96ZK8+SiQpeZs/p9bjUeNyeSkWEBJpIzCzvsBCYH/gu+7+pTKvaQVaAVpaWsYtLVdXJiLNT43LlbW1hUV3li0LdwIzZlRdQGiaxmIz2x34FfBZd19c6XVqLBbJMTUuxyLTjcWdufta4AHgtCT3KyIJqabuX43LmZNEr6E9ojsBzGxX4BTgz3HvV3JOjY3ZU23df94ay3MgiTuCdwMPmNlTwOPAfe5+VwL7lbxSY2M2VbvQfN4ay3NAA8qk+aixMZtU95+qpmkjEGmIFAfeSDdU99+0FAik+SjDySbV/TctBQJpPspwskl1/01Li9dL8+nIWOoceCMx0kLzTUmBQJqTMhyRhlHVkIhIwSkQiIgUnAKBiEjBKRCIiBScAoGISMEpEIiIpCUjkyeq+6iISBo6Jk/smKivY/JESLxrtO4IROqRkZKcNLFqZ2tNgO4IRGqVoZKcNLEMTZ6oOwKRWmWoJCdNLEOTJ/YYCMzsPjN7fxKJEWkKGSrJSRPL0OSJ1dwRfAn4lpn9XzN7d9wJEsm8DJXkYqV2kHhlaLbWHgOBuz/h7h8G7gLmmdlXorWHRYopQyW52Gg50GRMmxZW1WtvDz9TamOqqo3AzAx4Fvg+8FngOTM7P86EiWRWhkpysammHUR3DLlRTRvBfOAV4HpgH+AC4ATgKDObGWfiRDIrIyW52PTUDlKUO4aCBLseF683s4OAZ7zMC81sibu/r9GJ0uL1IikbMyZk7l2NHh0CX0/P50HXbsIQqgAzevcX6+L17v50uSAQmVzPTqXBClJqkQT11A5ShJ5TBeom3KtxBO7+QqMSInUqyi26JKundpAi9JwqQrCLaEBZFtVSwi9QqUUS1l07SBF6ThUh2EUUCLKm1hJ+gUotkiF57TnVuRC2fj3077/983kLdpEeG4vTUOjG4lob4YrQaCeShHKNw/36wW67werV4U5gxozMBrveNBZr0rmsqbWEP2NG+Z4NOSy1iMSqXDXrli0waBCsXJlOmhKiqqGsqbVeMq+36CJxKtcOV+BqVgWCrKmnES7vg5tEGqlSO9ywYeVfn8PG4a4UCLJGJXyReFXqaQf57wlVgQJBFqmELxKfSlU9q1cXthCmxmIRKZaWlvI97VpaQqbfLBn/1q3w6KNw113h0Qu6IxCRYmnmwXDr1sFPfwrnnw977QXHHw/f/Ca8u3dLxeiOQESKpaPEf9VVoZoo4+MDeO65UOKfPRseeSTcCQwfDpMnw9SpcOqpMGRIqM6qkwaUiUhjtbU1TyabRVu3wvz5pcz/2WfD9oMOChn/lCkwYQL07bvd2zI9oMzMRgE/BvYCHJjp7jfEvV8RSUHX0bkdXTNBwaA7a9bAvHkh4587F9auDaOaTzgBLrkkZP777hvb7mO/I4jWOX63uz9hZoOBhcCZ7v5MpffojkAkIY0uvWvKk+o9+2yp1P/b38K2bbDHHqHKZ8qUUOUzeHDVH5fpOwJ3fw14Lfr9LTNbQljprGIgEJEEVFt6ryVYFHh0bo+2bAkZ/uzZIQA891zYfuih8KUvhWqfI4/coconCYm2EZjZGOBh4GB3f7PLc61AK0BLS8u4peVKFSLSONWU3mtdpUt3BNtbtapU5TNvXuj1078/nHhiKPVPmRLOTQP05o4gsUBgZoOAh4AZ7v7L7l6rqiGRBPTpE6ZY6MosDGaE2jP2JlveseHc4c9/LpX6588P53KvvUpVPqecEiaya7BMVw0BmFk/4P8BbT0FARFJSHcDqzrUWtXTbF0zG2Hz5tCtc/bs8HghWrjxsMPgyitDlc/48SHwZlQSvYYMuBlY4u7fjHt/IlKlaqYwryZYdNVMo3PrtXIl3H13KPXfcw+8+SbsvDOcdBJcfnko/Y8alXYqq5bEHcGxwPnAn8xsUbTtSne/O4F9i0gl1ZTetd5F4A5PP13q5fPoo2Hbu94F55wTSv0nnQQDB6ad0rpoQJmIdK+oA8TeeQceeqiU+Xe0iRxxRGlg1xFHpFfl0+X/ssfSpS+ucN+vno/KbqWVZFu5hT0kn7IwG25S19sbb8Ctt8LZZ8OIETBxItx0Exx8MPzgB7B8OSxcCNOnp1vvX2ZNhRaov/uRu2fuMW7cOJcMu/129wED3MMlGB4DBoTteXb77e6jR7ubhZ95P96siPN6a293f/JJ9xkz3CdMCP9bcN9nH/eLLnKfPdt9w4be76dWPV1ro0dvfz7Ax4F7nXlu6pl+uYcCQcaVuQgdwvZGyVqmW9TglwWNvt42bXKfO9f95JPd+/Ytfd6++7pffbX7E0+EAJGWaq61joDVoECgNgKpXTX9z3sji33RNVAqPY243l5/PfTymT0b7rsPNmzY8TVpX2MdqrnWyrxmPLDAva4pSNVGILWr1HWwUWu7VlpK8KqrGvP59ejN1AlqT+mdeq43d1i0CK65Bo4+OszXf+GFoX7/E5+APffc8T1pX2MdqrnWyqyp4FB/KazeW4k4H6oayri4q0nK3PY6hO1pqbd6QlVKvVftOdy40X3OHPeLL3YfObJ0zRx9tPs117gvWlSq8sniNdah2mutS/XpCHjB68xzU8/0yz0UCJpAnHX4SbRB1KreDD2rx5Kl9pdqVErzq6+6z5zpfsYZpf/PwIHuZ53lfsst7q+/Xv7zsvh/6VDntQYscAUCyY2slqLryUCzVvLM6rmtVnu7+8KF7tOnu48bVzqGlhb3Sy5xnzfP/e23e/6crJ+HOq41BQLJn2YstZaTtZJn1tJTjQ0b3GfNcm9tdd9771IgPeYY9699zf2pp+rr5ZOXayyiQCC1y9mXILOyVvLM2h1KJcuXu994o/vkye677BLSOGiQ+9lnu996q/sbb6SdwspS+m4pEEhtspY5pSHJL2uWgm5W7wi2bXP/wx/c/+3f3A8/vJSuffd1/+d/dr/33uqqfNLWqO+WqoYUCGKX1cwgKUUOhFk69vXr3X/9a/cLL3R/17tCWvr0cT/2WPfrrnNfvDjdgV31aMR3K4XGYg0oK6K4B4RlXdEHh6U5idyyZTBnThjYdf/9YWK33XaD004Lk7hNmhTm+GlWjfhu1Xl9NsUKZbVQIIhZ0TPCogfCJLW3w+OPl1bsevLJsP097wkzeE6dCscdF5ZvTFsjAmQjvlt1Xp+9CQQaWVxEZUYl5maO+WpG8cY9Mrro1q+HX/4SPvnJMKJ3wgS49loYMgS+/nVYsiQs3H799WHt3qwEgS6zedLaWvso8EZ8t9K4PuutU4rzoTaCBGSpAbNRqq1bzVI9eV689JL7d77jPnGie//+4ZwOGeJ+7rnubW3uq1alncLuNbLdrLffLQ0o6xQI8phRSbxq+TLr+uqdrVvdf/c79y9/2f3gg0vn+oAD3L/wBfcHHnDfvDntVFYva91qE+41lM02gv328wV/+1u2Zp+U7FPdf7zefBPuvTfU9d99N6xYAX37wgc/WFqx64AD0k5l9Tq3CfTpA9u27fiaJmo3600bQRJrFtfulVdg8+btt3XMDKhAIJXUs9C6dO/FF0sNvQ8+CFu2wNChoXfP1Kmht8/uu6edytp1neq8XBDIS7tZFbIZCLoGgQ7VTPkrxaWF1ntv27awMHvHOr3PPBO2jx0Ln/tcKPV/4AOwUzazjqqVm+ocwh1Oe3ux1mYmq4Ggf//ywUAlO+lOx5e2iAut98a6dXDPPSHjnzsXVq0KGf2HPgSf+lTI/PffP+1UNlalQmV7eyGrEbMZCPbZB8q1ERShZJfmYJ88mDZN56sazz9fKvU//DBs3QrDh8Ppp4eMf+LE0N0zr1SNuJ1sjiMYNiw0DI8eHRr6Ro8uRkNxo/oyi3S1dWvI8C+/HN73Pnjve+Hznw8Frssug9/+Nvz+4x/DOefkOwhAvsfS1KPe7kZxPgo7jiDNOYDUnTJ/Vq92v+MO97//e/ehQ8O11K+f+ymnuN9wg/tf/5p2CtOVs2ue3HUfLeoUE2l1f8ziYvFxyXvV21/+Uurl88gjofF3xAiYPDlU+Zx6apjbR3JHcw3lRVpzABVl7qE8BrwtW2D+/JD5z54dpm4AOOSQkPFPnQpHHRV6w0iuKRA0s84l1GHD4K23tu8xlURGVZSBWHkJeKtXh949d90F8+bB2rWhp92HPxwy/smTw7FKoeRvQFlRdC2hrloF/fqF3hurVydXdVGUHhSVugxmfXyKO/z5z6VePvPnhwC9555w1lkh8z/5ZBg8OO2USpNSIEhTuUEtW7bAoEGwcmVy6SjKQKxmCnibN4c6/o7M/69/Ddvf/3648spQ7XPkkeFuTqSXin0VVTNlcZyyUkKdNq15u+vW8j/MepfBVavgttvg6KNhl11CKf9b34KBA+F73wvXxaJFcM014TUKAtIo9XY3ivORSPfRNKYi7tpdbfjw9LqL5kE9/8MsdRlsbw/LMV53XViesU+f8teDpsiWKqDuo3VIuuGwXI+V/v3DV33LltK2Zu/FkqRmbPzdvBkeeqjUxfPFF8P2ww8Pdf0zZ8Lrr+/4viwfk2SCViirVVtb+QwE4quWKdcesHlz6NOd1SqZtKvOepKVqrWerFgBP/oRfPSjoU//qafCTTfBQQfBjTfC8uXwxBNw9dVhdG85WTsmyZXiNRZ3lMwriavhsNIXefXqZBuGq9X1DqZjugvITqDqrvE3zYFj7rB4canU/9hjYdvee8PHPx5K/ieeuGN7RUfam6VBW/Kj3jqlah/ALcAbwOJq3xNrG0GlaRzirotNc/qIeqSR3lrr7yu1EXz608m3/7z9tvu8ee6XXLL9uRs/3n36dPeFC0ObQE+0jKbUiSwvVQkcDxyRmUBQaUk6iL+hOIkveKMaQ5Neuq/e81PueJMKYq+/7n7zze5nneU+cGDYx667up9xhvtNN7m/8kp9n5ulBm1pGpkOBCF9jMlMIMjzxG6NDDZJn6dG7i+uINbe7r5okfs117gfdVTpc0eOdL/4Yvc5c9w3buzdPkTqlItAALQCC4AFLS0tcZynIM+33o3MTJM+T43MvBt5HjZtChn8pz/tPmpU6bOOOioEhD/+sboqH5GY5SIQdH7EPo4gr7fejS4JJ3meshTEXn01VO2ccUbpcwYOdD/zzFAV9NprtadJJGYKBBJktUG6moDS6DuQWoJYe3tozL366tC427H/lpbQ+Dt3brgzEMkwBQIJsljtVUuakrwD2bDBffZs99ZW9733Lt05TZjgPmOG+5NPqspHmkpvAkHsI4vN7A7gBGAE8DfgK+5+c3fvKdQ01I2WtYVXsjT695VXYM6c0L//N7+BTZvCBH8TJ4ZJ3E4/PczoKdKEtB6BZFeaax20t4cRux0Du554ImwfMyYM6po6FY4/HnbeOd50pClrBQOJjaaYkOyqNCI2rpGyGzbArFnwqU/ByJFhquavfhV23RWuvTaM+H3hBfj2t+GUU/IfBFpbwx2Ze2l0eNamCimyrEzjUm+dUpwPtRHkSBLtFsuWuX/ve+6nn+6+yy5hH4MHu3/sY+4//rH7ihWN21cz6anzQF57zzWLBn83yHIbQT1UNZQzja6eaG+HBQtKVT6LFoXt++1XqvL54AfD7K5F1l213G235W/95mbT4PYztRFI/q1fD/fdFzL+OXPCLJ19+sCxx4aMf8oUGDs2ZHISdJfRQHYa8Yuqwe1nWrNY8mnp0tJSjQ88EKbtHjIETjstZP6TJsGwYWmnMru6W4L0/PPLv0fTXScnQzPNqrFYsmPbNnj00VCNdOihoUR76aWhcffSS+H++8Pc/nfeGaovFAS6190SpJUym2HDstF4WQQZWjpVVUOSrrfegnvvDaX+u+8OGX3fvqGOf8qUUPI/4IC0U5k/WjEvGxrYfqY2AmkuL75YqvJ58MGQ8QwdGqp6pkwJVT9Dh6adyvzrmgmtXw+rVu34ujy1G+R4XIUCQb1yfFFkyrZtYZWujl4+Tz8dto8dWyr1f+ADsJOarFKV5uC/JJS7C8rRHU9vAkHqYwbKPRIZR5DFeXkapdH9w+v5vLVr3X/2M/fzz3cfPjyc3512cj/xRPdvftP9ued6l6Zm0Gz99JOYtDDNc5LVSRkbhKxPOlfrI5FAkNeLorcBrusXtZZlH59/3v36691POilk+uA+bJj7eee533mn+5o1jTzSbGvGgkbcaU77nCS96l7CFAjqkdeLojcBrtwXtdJ5Gj3afcsW94cfdr/8cvexY0vPHXig+xVXuD/ySHhNs6unFNusBY04S+xpn5O09x8zBYJ65PWi6E2Aq3ROKj2GDQs/+/VzP/lk9xtuCHcFeVJvKTYPBY1GB4W0z0nadyQxUyCoR14vit4EuEpf1HKPPn3cP/EJ95//3H3duriPKj31ns9mL2jE8f3IwjlptnabGigQ1OP220uNmBB+z8NF0ZsvcLV3BDvvHCZzK4J6S7HNXtCII9Nu9nOScb0JBMUcWdzRjaxzn+lNm9JLTyN1N5q0O2vWwOTJYTBXZ336wHHHwT77lD7v5psrT1GQN/VOo13v/yErKk010ZspKJr9nORZvREkzkfsdwRZuEVNW3u7+5Il7t/4hvvxx7v37RvOweDBYaF2M/dRo5qjtBbn7X5RS7H6jjQdVDVUo7QbrdKyebP7b37j/rnPue+/f+m4Dz3U/aqr3B97zH3btrRTWZskMuoc1ytXlKUAWMTzXwcFgloVqbSzcqX7bbe5n3OO+267+X/X8U+a5P7d77ovXZp2CnunSP/LpGUhA85SQMq43gSCYk4xkeeh5u6wZElpOoff/S5MD7DXXqXpHE46KSzangd5nxah6Bq8eEueaT2CWnVk9nmZZ2jzZnj44VLm/8ILYfvhh4djnDoVxo0LmWbeZGhOd4lBHI3WsoNiBgIImX6zZvwQpmu+++6Q8d9zT5jOeZddQmn/iitCD6CRI9NOZfy6W3xFmp8CfSJyWETMKXdYvBiuvTbM1LnXXnDBBTB/Ppx7LsyaFbrD3nUXXHRR8wSBtrbeLYSS9S6JvT2+osvQ4i25Vm/jQpyPRAaUNYO333afN8/90kvdx4wpNZaNG+c+fbr7ggWhG2g5WWjo60neGwLzfnxJaYZrOQNQY3GO/O1vocpn9uywcteGDbDrrnDyyaGuf/Jk2Hvv7j+jWRrD894QmPfjk0zRwjRZVc3CN+7w1FOlFbv+8IewbZ99QsY/ZQqceGIIBtVqlgwo7z1+8n58kim9CQRqI4hLR6l86dKQGSxdGv5ua4O334a5c+GSS0Kmfdhh8K//GjKHq6+GJ57V07sAAAAHFElEQVSAl1+G738/3AHUEgSgeXpa1Dt9Q7Oo5fjUliBpqrdOKc5HLtoIKg102nXXUr3xgAHuZ57p/sMfur/2Wvz7TnqQVU91u3mvQ6/2+PJ+HiQRaGRxBnU3pfNnPuM+d677pk3x7DsLGUstmWCeGwKrOb5KgXv48IQTK82sN4FAbQSNtGkT3H9/qOv/4Q/Dou1dVeoX3WjVtE/EqVnaKbKgUlsCwO23Z6uBXzJLjcVpevXV0NB7113wX/8VgsGgQTB2bGgE3ry59Nos9tyJixpKq1cpaIICp1RNjcVJam+HhQth+nQYPz707rnoopDpX3hhGOW7ciU8/jjcckt2BzrFLe8NwY3U3eCorDXwSy7pjqAaGzeG0n5Hyf+110LmfswxpS6eBx0UtknQLGMZsmLEiO0XSuqgOwKpkiadi8Py5aW+/fffH7p8Dh4MEyeGzH/SJNhjj7RTmV15m9gvbjfcoDmTJDUKBB3a22HBglLmv2hR2L7ffqHqZ8oUOP546N8/3XQ2k2af2C9JjQycaXcUkKaTSNWQmZ0G3AD0BX7o7td19/rEqoY2bID77gsZ/5w5YXqHPn3g2GNLc/ePHasqn6xRRleZquQKK9O9hsysL/AX4BRgOfA48HF3f6bSe2INBMuWlUr9DzwA77wDQ4bAaaeFzH/SJBg+PJ59S+8po+ueuu0WVtYDwTHAdHefGP39ZQB3v7bSexoaCNrbw/w9HYu2PPVU2L7//qHEP3UqHHcc9OvXmP1JvJTRdU/ddgsr64Hgo8Bp7v5P0d/nA0e7+6VdXtcKtEZ/HgwsjjVhzWMEsDLtRGTAiBHQPhr2rfSChbAwyQSlqOI1cSgc0g92aMjaApufgj/FnrLk6ftR8nfuPrieN2amsdjdZwIzAcxsQb2RLW90LgIzW7BC5wHQNdGZzkWJmdVdjZLEgLJXgFGd/h4ZbRMRkQxIIhA8DrzXzPY1s/7AucCsBPYrIiJViL1qyN23mtmlwD2E7qO3uPvTPbxtZtzpaiI6F4HOQ4nORYnORUnd5yKTU0yIiEhyNOmciEjBKRCIiBRcaoHAzE4zs2fN7Hkz+59lnt/ZzH4aPf97MxuTfCqTUcW5+IKZPWNmT5nZb8xsdBrpTEJP56LT6842Mzez3HYdrOZcmNk50bXxtJn9JOk0JqWK70iLmT1gZn+Mvienp5HOJJjZLWb2hpmVHWtlwbejc/WUmR3R44fWu7RZbx6ERuO/AvsRBr88CRzY5TWfAW6Mfj8X+Gkaac3IufgwMCD6/dNFPhfR6wYDDwOPAePTTneK18V7gT8CQ6O/90w73Smei5nAp6PfDwReSjvdMZ6P44EjgMUVnj8dmAsYMAH4fU+fmdYdwVHA8+7+grtvBu4EPtLlNR8BfhT9/gvgJLNczv7W47lw9wfcvWNynccIYzHyqJrrAuAa4D+At5NMXMKqORefAr7r7msA3P2NhNOYlGrOhQO7Rb8PAV5NMH2JcveHgdXdvOQjwI89eAzY3cze3d1nphUI9gFe7vT38mhb2de4+1ZgHZDH2eCqORedXUiI9nnU47mIbnNHufucJBOWgmquiwOAA8xsvpk9Fs3ym0fVnIvpwHlmthy4G/hsMknLpFrzlOxMMSE9M7PzgPHAh9JOSxrMrA/wTeCClJOSFTsRqodOINwlPmxmh7j72lRTlY6PA7e6+39GE13eZmYHu7tm2qtCWncE1Uw78d+vMbOdCLd7Zdbya3pVTcFhZicDVwFnuPs7CaUtaT2di8GECQkfNLOXCPWfs3LaYFzNdbEcmOXuW9z9RcJ07+9NKH1JquZcXAj8DMDdHwV2IUxIV0Q1T+uTViCoZtqJWcA/RL9/FLjfo5aQnOnxXJjZ4cAPCEEgr/XA0MO5cPd17j7C3ce4+xhCe8kZ7p6hBa4bpprvyK8JdwOY2QhCVdELSSYyIdWci2XASQBm9j5CIFiRaCqzYxbwiaj30ARgnbu/1t0bUqka8grTTpjZvwML3H0WcDPh9u55QsPIuWmkNW5VnotvAIOAn0ft5cvc/YzUEh2TKs9FIVR5Lu4BTjWzZ4BtwOXunru75irPxWXATWb2eULD8QU5LThiZncQCgAjojaRrwD9ANz9RkIbyenA88BG4B97/MycnisREamSRhaLiBScAoGISMEpEIiIFJwCgYhIwSkQiIgUnAKBiEjBKRCIiBScAoFIFaK57k+Jfv+qmX0n7TSJNIomnROpzleAfzezPYHDgdyN7Jbi0shikSqZ2UOEqT5OcPe30k6PSKOoakikCmZ2CPBuYLOCgOSNAoFID6LVndoIKz+tz/ECMFJQCgQi3TCzAcAvgcvcfQlhmcyvpJsqkcZSG4GISMHpjkBEpOAUCERECk6BQESk4BQIREQKToFARKTgFAhERApOgUBEpOD+PwPBHVsGaYvcAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "# Importing various packages\n", "import numpy as np\n", @@ -1216,27 +1202,18 @@ }, { "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.linear_model import LinearRegression\n", "\n", "x = np.random.rand(100,1)\n", - "y = 5*x+np.random.randn(100,1)\n", + "y = 5*x+0.01*np.random.randn(100,1)\n", "linreg = LinearRegression()\n", "linreg.fit(x,y)\n", "ypredict = linreg.predict(x)\n", @@ -1272,34 +1249,11 @@ }, { "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The intercept alpha: \n", - " [2.00137415]\n", - "Coefficient beta : \n", - " [[4.99698001]]\n", - "Mean squared error: 0.00\n", - "Variance score: 1.00\n", - "Mean squared log error: 0.00\n", - "Mean absolute error: 0.01\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "import numpy as np \n", "import matplotlib.pyplot as plt \n", @@ -1307,7 +1261,7 @@ "from sklearn.metrics import mean_squared_error, r2_score, mean_squared_log_error, mean_absolute_error\n", "\n", "x = np.random.rand(100,1)\n", - "y = 2.0+ 5*x+0.01*np.random.randn(100,1)\n", + "y = 2.0+ 5*x+0.5*np.random.randn(100,1)\n", "linreg = LinearRegression()\n", "linreg.fit(x,y)\n", "ypredict = linreg.predict(x)\n", @@ -1446,32 +1400,17 @@ "\n", "We will discuss in more\n", "detail these and other functions in the various lectures. We conclude this part with another example. Instead of \n", - "a linear $x$-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn." + "a linear $x$-dependence we study now a cubic polynomial and use the polynomial regression analysis tools of scikit-learn. \n", + "Add description of the various python commands." ] }, { "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.004999999999999991\n" - ] - } - ], + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", @@ -1509,110 +1448,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Similarly, using **R**, we can perform similar studies. \n", - "(more details on **R** will be inserted later).\n", + "Using **R**, we can perform similar studies. \n", "\n", "\n", "\n", "\n", "\n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "## Simple regression model with gradient descent\n", - "Add info about the equations, play around with different learning rates" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "# Importing various packages\n", - "from math import exp, sqrt\n", - "from random import random, seed\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "\n", - "x = 2*np.random.rand(100,1)\n", - "y = 4+3*x+np.random.randn(100,1)\n", - "\n", - "xb = np.c_[np.ones((100,1)), x]\n", - "theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)\n", - "print(theta_linreg)\n", - "theta = np.random.randn(2,1)\n", - "\n", - "eta = 0.1\n", - "Niterations = 1000\n", - "m = 100\n", - "\n", - "for iter in range(Niterations):\n", - " gradients = 2.0/m*xb.T.dot(xb.dot(theta)-y)\n", - " theta -= eta*gradients\n", - "\n", - "print(theta)\n", - "xnew = np.array([[0],[2]])\n", - "xbnew = np.c_[np.ones((2,1)), xnew]\n", - "ypredict = xbnew.dot(theta)\n", - "ypredict2 = xbnew.dot(theta_linreg)\n", - "plt.plot(xnew, ypredict, \"r-\")\n", - "plt.plot(xnew, ypredict2, \"b-\")\n", - "plt.plot(x, y ,'ro')\n", - "plt.axis([0,2.0,0, 15.0])\n", - "plt.xlabel(r'$x$')\n", - "plt.ylabel(r'$y$')\n", - "plt.title(r'Random numbers ')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Simple regression model with stochastic gradient descent\n", - "Add info about the equations, play around with different learning rates" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "# Importing various packages\n", - "from math import exp, sqrt\n", - "from random import random, seed\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "from sklearn.linear_model import SGDRegressor\n", - "\n", - "x = 2*np.random.rand(100,1)\n", - "y = 4+3*x+np.random.randn(100,1)\n", - "\n", - "xb = np.c_[np.ones((100,1)), x]\n", - "theta_linreg = np.linalg.inv(xb.T.dot(xb)).dot(xb.T).dot(y)\n", - "print(theta_linreg)\n", - "sgdreg = SGDRegressor(n_iter = 50, penalty=None, eta0=0.1)\n", - "sgdreg.fit(x,y.ravel())\n", - "print(sgdreg.intercept_, sgdreg.coef_)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ "## Polynomial Regression" ] }, { "cell_type": "code", - "execution_count": 10, - "metadata": {}, + "execution_count": 8, + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "# Importing various packages\n", @@ -1644,72 +1495,131 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Ridge and Lasso Regression" + "\n", + "## Linking the regression analysis with a statistical interpretation\n", + "\n", + "Before we proceed, and to link with our discussions of Bayesian statistics to come, it is useful the derive the standard regression analysis equations using a statistical interpretation. This allows us also to derive quantities like the variance and other expectation values in a rather straightforward way. \n", + "\n", + "It is assumed that $\\varepsilon_i\n", + "\\sim \\mathcal{N}(0, \\sigma^2)$ and the $\\varepsilon_{i}$ are\n", + "independent, i.e.:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*} \n", + "\\mbox{Cov}(\\varepsilon_{i_1},\n", + "\\varepsilon_{i_2}) & = \\left\\{ \\begin{array}{lcc} \\sigma^2 & \\mbox{if}\n", + "& i_1 = i_2, \\\\ 0 & \\mbox{if} & i_1 \\not= i_2. \\end{array} \\right.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The randomness of $\\varepsilon_i$ implies that\n", + "$\\mathbf{Y}_i$ is also a random variable. In particular,\n", + "$\\mathbf{Y}_i$ is normally distributed, because $\\varepsilon_i \\sim\n", + "\\mathcal{N}(0, \\sigma^2)$ and $\\mathbf{X}_{i,\\ast} \\, \\beta$ is a\n", + "non-random scalar. To specify the parameters of the distribution of\n", + "$\\mathbf{Y}_i$ we need to calculate its first two moments. \n", + "\n", + "## Expectation value and variance\n", + "\n", + "Its expectation equals:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*} \n", + "\\mathbb{E}(Y_i) & =\n", + "\\mathbb{E}(\\mathbf{X}_{i, \\ast} \\, \\beta) + \\mathbb{E}(\\varepsilon_i)\n", + "\\, \\, \\, = \\, \\, \\, \\mathbf{X}_{i, \\ast} \\, \\beta, \n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "while\n", + "its variance is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*} \\mbox{Var}(Y_i) & = \\mathbb{E} \\{ [Y_i\n", + "- \\mathbb{E}(Y_i)]^2 \\} \\, \\, \\, = \\, \\, \\, \\mathbb{E} ( Y_i^2 ) -\n", + "[\\mathbb{E}(Y_i)]^2 \\\\ & = \\mathbb{E} [ ( \\mathbf{X}_{i, \\ast} \\,\n", + "\\beta + \\varepsilon_i )^2] - ( \\mathbf{X}_{i, \\ast} \\, \\beta)^2 \\\\ &\n", + "= \\mathbb{E} [ ( \\mathbf{X}_{i, \\ast} \\, \\beta)^2 + 2 \\varepsilon_i\n", + "\\mathbf{X}_{i, \\ast} \\, \\beta + \\varepsilon_i^2 ] - ( \\mathbf{X}_{i,\n", + "\\ast} \\, \\beta)^2 \\\\ & = ( \\mathbf{X}_{i, \\ast} \\, \\beta)^2 + 2\n", + "\\mathbb{E}(\\varepsilon_i) \\mathbf{X}_{i, \\ast} \\, \\beta +\n", + "\\mathbb{E}(\\varepsilon_i^2 ) - ( \\mathbf{X}_{i, \\ast} \\, \\beta)^2 \n", + "\\\\ & = \\mathbb{E}(\\varepsilon_i^2 ) \\, \\, \\, = \\, \\, \\,\n", + "\\mbox{Var}(\\varepsilon_i) \\, \\, \\, = \\, \\, \\, \\sigma^2. \n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hence, $Y_i \\sim \\mathcal{N}( \\mathbf{X}_{i, \\ast} \\, \\beta, \\sigma^2)$. \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## The singular value decompostion\n", + "\n", + "\n", + "A general\n", + "$m\\times n$ matrix $\\hat{A}$ can be written in terms of a diagonal\n", + "matrix $\\hat{D}$ of dimensionality $n\\times n$ and two orthognal\n", + "matrices $\\hat{U}$ and $\\hat{V}$, where the first has dimensionality\n", + "$m \\times m$ and the last dimensionality $n\\times n$. \n", + "We have then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{A} = \\hat{U}\\hat{D}\\hat{V}^T\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Code examples for Ridge and Lasso Regression" ] }, { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "X_train: (37, 1)\n", - "y_train: (37,)\n", - "X_test: (13, 1)\n", - "y_test: (13,)\n", - "------------------------------------\n", - "Ordinary Least Squares\n", - "Prediction Shape: (13,)\n", - "Coefficients: \n", - " [0.54090544]\n", - "Mean squared error: 4.92\n", - "Variance score: 0.11\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.7/site-packages/sklearn/linear_model/base.py:509: RuntimeWarning: internal gelsd driver lwork query error, required iwork dimension not returned. This is likely the result of LAPACK bug 0038, fixed in LAPACK 3.2.2 (released July 21, 2010). Falling back to 'gelss' driver.\n", - " linalg.lstsq(X, y)\n" - ] - }, - { - "data": { - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "------------------------------------\n", - "Ridge Regression\n", - "Ridge Coefficient: [0.54089262]\n", - "Ridge Intercept: 4.6076494432587065\n", - "------------------------------------\n", - "Lasso\n", - "Lasso Coefficient: [0.54002825]\n", - "Lasso Intercept: 4.623208095009552\n" - ] - }, - { - "data": { - "text/plain": [ - "
    " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", @@ -1789,8 +1699,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## The singular value decompostion\n", - "How can we use the singular value decomposition to find the parameters $\\beta_j$? More details will come. We first note that a general $m\\times n$ matrix $\\hat{A}$ can be written in terms of a diagonal matrix $\\hat{\\Sigma}$ of dimensionality $n\\times n$ and two orthognal matrices $\\hat{U}$ and $\\hat{V}$, where the first has dimensionality $m \\times n$ and the last dimensionality $n\\times n$. We have then" + "## From standard regression to Ridge regressions\n", + "\n", + "One of the typical problems we encounter with linear regression, in particular \n", + "when the matrix $\\hat{X}$ (our so-called design matrix) is high-dimensional, \n", + "are problems with near singular or singular matrices. The column vectors of $\\hat{X}$ \n", + "may be linearly dependent, normally referred to as super-collinearity. \n", + "This means that the matrix may be rank deficient and it is basically impossible to \n", + "to model the data using linear regression. As an example, consider the matrix" ] }, { @@ -1798,7 +1714,18 @@ "metadata": {}, "source": [ "$$\n", - "\\hat{A} = \\hat{U}\\hat{\\Sigma}\\hat{V}\n", + "\\begin{align*}\n", + "\\mathbf{X} & = \\left[\n", + "\\begin{array}{rrr}\n", + "1 & -1 & 2\n", + "\\\\\n", + "1 & 0 & 1\n", + "\\\\\n", + "1 & 2 & -1\n", + "\\\\\n", + "1 & 1 & 0\n", + "\\end{array} \\right]\n", + "\\end{align*}\n", "$$" ] }, @@ -1806,39 +1733,414 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Add codes and discuss this in connection with lasso and ridge, show example where the standard inversion of a matrix fails and where SVD comes to rescue\n", + "The columns of $\\hat{X}$ are linearly dependent. We se this easily since the \n", + "the first column is the row-wise sum of the other two columns. The rank (more correct,\n", + "the column rank) of a matrix is the dimension of the space spanned by the\n", + "column vectors. Hence, the rank of $\\mathbf{X}$ is equal to the number\n", + "of linearly independent columns. In this particular case the matrix has rank 2.\n", + "\n", + "Super-collinearity of an $(n \\times p)$-dimensional design matrix $\\mathbf{X}$ implies\n", + "that the inverse of the matrix $\\hat{X}^T\\hat{x}$ (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\hat{X} & = \\left[\n", + "\\begin{array}{rr}\n", + "1 & -1\n", + "\\\\\n", + "1 & -1\n", + "\\end{array} \\right].\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see easily that $\\mbox{det}(\\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \\times (-1) - 1 \\times (-1) = 0$. Hence, $\\mathbf{X}$ is singular and its inverse is undefined.\n", + "This is equivalent to saying that the matrix $\\hat{X}$ has at least an eigenvalue which is zero.\n", + "\n", + "## Fixing the singularity\n", + "\n", + "If our design matrix $\\hat{X}$ which enters the linear regression problem" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\hat{\\beta} = (\\hat{X}^{T} \\hat{X})^{-1} \\hat{X}^{T} \\hat{y},\n", + "\\label{_auto1} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "has linearly dependent column vectors, we will not be able to compute the inverse\n", + "of $\\hat{X}^T\\hat{X}$ and we cannot find the parameters (estimators) $\\beta_i$. \n", + "The estimators are only well-defined if $(\\hat{X}^{T}\\hat{X})^{-1}$ exits. \n", + "This is more likely to happen when the matrix $\\hat{X}$ is high-dimensional. In this case it is likely to encounter a situation where \n", + "the regression parameters $\\beta_i$ cannot be estimated.\n", + "\n", + "The *ad hoc* approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\hat{X}^{T} \\hat{X} \\rightarrow \\hat{X}^{T} \\hat{X}+\\lambda \\hat{I},\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\hat{I}$ is the identity matrix.\n", "\n", "\n", - "## Lasso and Ridge regression\n", "\n", - "Discuss the mathematics here\n", + "## A second-order polynomial with Ridge and Lasso" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.linear_model import Ridge\n", + "from sklearn.metrics import r2_score\n", "\n", - "## Logistic regression\n", - "Add discussion about classification versus regression, show examples of more than two cases and why regression is not the best approach. Motivate for k-nearest neighbors\n", + "np.random.seed(4155)\n", "\n", - "Add examples on classification problems" + "n_samples = 100\n", + "\n", + "x = np.random.rand(n_samples,1)\n", + "y = 5*x*x + 0.1*np.random.rand(n_samples,1)\n", + "\n", + "# Centering x and y.\n", + "x_ = x - np.mean(x)\n", + "y_ = y - np.mean(y) # beta_0 = mean(y)\n", + "\n", + "X = np.c_[np.ones((n_samples,1)), x, x**2]\n", + "X_ = np.c_[x_, x_**2]\n", + "\n", + "\n", + "### 1.\n", + "lmb_values = [1e-4, 1e-3, 1e-2, 10, 1e2, 1e4]\n", + "num_values = len(lmb_values)\n", + "\n", + "## Ridge-regression of centered and not centered data\n", + "beta_ridge = np.zeros((3,num_values))\n", + "beta_ridge_centered = np.zeros((3,num_values))\n", + "\n", + "I3 = np.eye(3)\n", + "I2 = np.eye(2)\n", + "\n", + "for i,lmb in enumerate(lmb_values):\n", + " beta_ridge[:,i] = (np.linalg.inv( X.T @ X + lmb*I3) @ X.T @ y).flatten()\n", + " beta_ridge_centered[1:,i] = (np.linalg.inv( X_.T @ X_ + lmb*I2) @ X_.T @ y_).flatten()\n", + "\n", + "# sett beta_0 = np.mean(y)\n", + "beta_ridge_centered[0,:] = np.mean(y)\n", + "\n", + "## OLS (ordinary least squares) solution \n", + "beta_ls = np.linalg.inv( X.T @ X ) @ X.T @ y\n", + "\n", + "## Evaluate the models\n", + "pred_ls = X @ beta_ls\n", + "pred_ridge = X @ beta_ridge\n", + "pred_ridge_centered = X_ @ beta_ridge_centered[1:] + beta_ridge_centered[0,:]\n", + "\n", + "## Plot the results\n", + "\n", + "# Sorting\n", + "sort_ind = np.argsort(x[:,0])\n", + "\n", + "x_plot = x[sort_ind,0]\n", + "x_centered_plot = x_[sort_ind,0]\n", + "\n", + "pred_ls_plot = pred_ls[sort_ind,0]\n", + "pred_ridge_plot = pred_ridge[sort_ind,:]\n", + "pred_ridge_centered_plot = pred_ridge_centered[sort_ind,:]\n", + "\n", + "# Plott not centered\n", + "plt.plot(x_plot,pred_ls_plot,label='ls')\n", + "\n", + "for i in range(num_values):\n", + " plt.plot(x_plot,pred_ridge_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])\n", + "\n", + "plt.plot(x,y,'ro')\n", + "\n", + "plt.title('linear regression on un-centered data')\n", + "plt.legend()\n", + "\n", + "# Plott centered\n", + "plt.figure()\n", + "\n", + "for i in range(num_values):\n", + " plt.plot(x_centered_plot,pred_ridge_centered_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])\n", + "\n", + "plt.plot(x_,y,'ro')\n", + "\n", + "plt.title('linear regression on centered data')\n", + "plt.legend()\n", + "\n", + "\n", + "# 2.\n", + "\n", + "pred_ridge_scikit = np.zeros((n_samples,num_values))\n", + "for i,lmb in enumerate(lmb_values):\n", + " pred_ridge_scikit[:,i] = (Ridge(alpha=lmb,fit_intercept=False).fit(X,y).predict(X)).flatten() # fit_intercept=False fordi bias er allerede i X\n", + "\n", + "plt.figure()\n", + "\n", + "plt.plot(x_plot,pred_ls_plot,label='ls')\n", + "\n", + "for i in range(num_values):\n", + " plt.plot(x_plot,pred_ridge_scikit[sort_ind,i],label='scikit-ridge, lmb=%g'%lmb_values[i])\n", + "\n", + "plt.plot(x,y,'ro')\n", + "plt.legend()\n", + "plt.title('linear regression using scikit')\n", + "\n", + "plt.show()\n", + "\n", + "### R2-score of the results\n", + "for i in range(num_values):\n", + " print('lambda = %g'%lmb_values[i])\n", + " print('r2 for scikit: %g'%r2_score(y,pred_ridge_scikit[:,i]))\n", + " print('r2 for own code, not centered: %g'%r2_score(y,pred_ridge[:,i]))\n", + " print('r2 for own, centered: %g\\n'%r2_score(y,pred_ridge_centered[:,i]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fitting vs. predicting when data is in the model class\n", + "\n", + "We start by considering the case\n", + "$f(x)=2x$.\n", + "\n", + "Then the data is clearly generated by a model that is contained within\n", + "all three model classes we are using to make predictions (linear\n", + "models, third order polynomials, and tenth order polynomials).\n", + "\n", + "Run the code for the following cases:\n", + "\n", + "1. For $f(x)=2x$ , $Ntrain=10$ and $\\sigma =0$ (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when $x \\in [0,1]$ . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?\n", + "\n", + "2. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?\n", + "\n", + "3. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example $x \\in [0,1.2]$ ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?\n", + "\n", + "4. Repeat the above for $f(x)=2x$ , $Ntrain=10$ , and $\\sigma=1$ . What changes?\n", + "\n", + "Repeat the exercises above for $f(x)=2x$ , $Ntrain=100$ , and $\\sigma=1$ . What changes?\n", + "Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well.\n", + "\n", + "\n", + "## Fitting versus predicting when data is not in the model class\n", + "\n", + "Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider $f(x)=2x-10x^5+15x^{10}$ . Notice that the for linear and third-order polynomial the true model $f(x)$ is not contained in model class.\n", + "\n", + "1. Do better fits lead to better predictions?\n", + "\n", + "2. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points $Ntrain$ and $\\sigma$?\n", + "\n", + "Summarize what you think you learned about the relationship of knowing the true model class and predictive power.\n", + "\n", + "## The code" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import sklearn as sk\n", + "from sklearn import datasets, linear_model\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "\n", + "import matplotlib as mpl\n", + "from matplotlib import pyplot as plt\n", + "\n", + "%matplotlib notebook\n", + "\n", + "# The Training Data\n", + "\n", + "N_train=100\n", + "\n", + "sigma_train=1;\n", + "\n", + "# Train on integers\n", + "x=np.linspace(0.05,0.95,N_train)\n", + "# Draw random noise\n", + "s = sigma_train*np.random.randn(N_train)\n", + "\n", + "#linear\n", + "y=2*x+s\n", + "\n", + "#Tenth Order\n", + "#y=2*x-10*x**5+15*x**10+s\n", + "\n", + "p1=plt.plot(x,y, \"o\",ms=15, label='Training')\n", + "\n", + "#Linear Regression\n", + "# Create linear regression object\n", + "clf = linear_model.LinearRegression()\n", + "\n", + "# Train the model using the training sets\n", + "clf.fit(x[:, np.newaxis], y)\n", + "# The coefficients\n", + "\n", + "xplot=np.linspace(0.02,0.98,200)\n", + "linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')\n", + "\n", + "#Polynomial Regression\n", + "\n", + "\n", + "poly3 = PolynomialFeatures(degree=3)\n", + "X = poly3.fit_transform(x[:,np.newaxis])\n", + "clf3 = linear_model.LinearRegression()\n", + "clf3.fit(X,y)\n", + "\n", + "\n", + "Xplot=poly3.fit_transform(xplot[:,np.newaxis])\n", + "poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')\n", + "\n", + "\n", + "\n", + "#poly5 = PolynomialFeatures(degree=5)\n", + "#X = poly5.fit_transform(x[:,np.newaxis])\n", + "#clf5 = linear_model.LinearRegression()\n", + "#clf5.fit(X,y)\n", + "\n", + "#Xplot=poly5.fit_transform(xplot[:,np.newaxis])\n", + "#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)\n", + "\n", + "poly10 = PolynomialFeatures(degree=10)\n", + "X = poly10.fit_transform(x[:,np.newaxis])\n", + "clf10 = linear_model.LinearRegression()\n", + "clf10.fit(X,y)\n", + "\n", + "Xplot=poly10.fit_transform(xplot[:,np.newaxis])\n", + "poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')\n", + "\n", + "axes = plt.gca()\n", + "axes.set_ylim([-7,7])\n", + "\n", + "handles, labels=axes.get_legend_handles_labels()\n", + "plt.legend(handles,labels, loc='lower center')\n", + "plt.xlabel(\"$x$\")\n", + "plt.ylabel(\"$y$\")\n", + "Title=\"$N=$\"+str(N_train)+\", $\\sigma=$\"+str(sigma_train)\n", + "plt.title(Title+\" (train)\")\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Generating test data" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Generate Test Data\n", + "\n", + "#Number of test data\n", + "N_test=20\n", + "\n", + "sigma_test=sigma_train\n", + "\n", + "max_x=1.2\n", + "x_test=max_x*np.random.random(N_test)\n", + "# Draw random noise\n", + "s_test = sigma_test*np.random.randn(N_test)\n", + "\n", + "#Linear\n", + "y_test=2*x_test+s_test\n", + "#Tenth order\n", + "#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test\n", + "\n", + "#Make design matrices for prediction\n", + "x_plot=np.linspace(0,max_x, 200)\n", + "X3 = poly3.fit_transform(x_plot[:,np.newaxis])\n", + "X10 = poly10.fit_transform(x_plot[:,np.newaxis])\n", + "\n", + "%matplotlib notebook\n", + "\n", + "fig = plt.figure() \n", + "p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')\n", + "p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')\n", + "p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')\n", + "p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')\n", + "\n", + "\n", + "plt.legend(loc=2)\n", + "plt.xlabel('$x$')\n", + "plt.ylabel('$y$')\n", + "plt.legend(loc='best')\n", + "plt.title(Title+\" (pred.)\")\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "#Linear Filename\n", + "#filename_test=Title+\"pred-linear.pdf\"\n", + "#Tenth Order Filename\n", + "#filename_test=Title+\"pred-o10.pdf\"\n", + "#plt.savefig(filename_test)\n", + "#plt.ylim((-6,12))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lasso regression\n", + "\n", + "\n", + "## Logistic regression" ] } ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.0" - } - }, + "metadata": {}, "nbformat": 4, "nbformat_minor": 2 } diff --git a/doc/pub/Regression/ipynb/ipynb-Regression-src.tar.gz b/doc/pub/Regression/ipynb/ipynb-Regression-src.tar.gz index 511f8a4c0b45a416add0774da1af965b16159152..11e5676115c2089368680876bdad35a3ef51af6a 100644 GIT binary patch literal 211 zcmb2|=3o&1JRzEa`R)0$Sxkl^ZHd?8j_zzyoY}cc?~1E9>%@BwDT^lmQ!(p&aHlq1 zJxAo1TqxS-C=dJ%!Z0B0{*>O*)-RaY-^kaF1k_u-_*r&WL zJNfiY@`^wE_@y%!pMJbq<$LXilbyVKZ*2RT`r^jEH^uLqb?>(V12XubUdQ0K LVCDh_4F(1Pob+c8 literal 211 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 (GsQ7K#dMdwBKyCG~{wF31M#ye~4dD)bT zybyh_q3)?)bGC^#t1pfAekRDiMf5TRjeL%C)Ne>3G9T+J)Rt^V9WU=NZD=N!TiP5= zqtZfA%9F4bDH|Y2PgDn}O%4EKz^#2)7Mf|7k{{+JHSf}cLGwG;QgdpYr~|ft`8CZ> zY?+K8)Q#0{!N_r`EP#Qb*xBE;j-*Yit9MoXLZeDUFPP-lDLY!1>8GB?CH39DXcCk2 zBF~mwu5T$q)e{^@$P=YlC*pngbvh5$Mz0*Sg(Y3dO6rotdzjggpl)c{pT&FcLMz1{ zisu0OAjZ|h1Q`NTnndhc)x0BFsm9asLtV&jdjvJ}lWB>rR3MfzCRaX{E4od(921Za z8YvKas5s+K#k?$s+E6@MR)Zh0t#yHw7AnmiXk2+Ol&g_yQqzpUD(DO|vOL~JR)K+$ z@f+{IYH^!7^u9(mY~&MnM~-)n<-7>ZjgqRubasI_V8c z5W|f0N>qA&jMt=y{o8W^~tq3O*UEkWnq zY$Xq+ITb9sS$&unD;L*7YGXLFOpnE>ew=smUF27{XahRvvsJJoV~hPDMMgtMqK!|c zi(kPSV?JDl3pPArJ20q7PDP4msMLz1;~Ru~;Q zE52U!*I2uKzE){}pL&;GzkYzFKUD7VGrhbNW=>|V_4IFYWmd4?KLmY%s|;#xmFBa# ziKkzOP6MAjPXD#qAsrf#OtRWSu7>H{^@W29Kg=L(4Bv*}RDWArfn}xQQ(pls!>j`; ztW324oqDSvxwLX{7z-S+#^zi)omp;A8NzVuA7T@OGp7UB%Ajn{ky3~)kKNyuV@LNi zQE<~VVFUMvJKr7pm&Z{AAbxw+s7>E(A)jc!u?csq6|fvo2$COA(2$oPh7Zh6%^x0& z-MfBvT_dz!V-K8FfBbpwCl*LusU$lQe<2gsXgI=Kd2_#-`YcKB8vPG1&6B$M9hwXX z;MGT9QML9qCuIllBCu$Z>avjnNZG!UDvpkBUr8=fR#FuN78wT%$FGR{zet=^SAbQ5 zgY~-vI}Zo1m>4fF4-Y$!7$>)=s01e~fQ?m@mraQD|38BAbHiiOR3I7Y zWMeFtZP$zY6V7uGAxItsV>t~oUCseu_?A7v!SpRcXB{ELYF@mlJkJ;%S`<+(g3BZj zN~5WDdViL5LI>-M`iK#N=(7bn*mZDDc21j4l7Ay)Hj^bsCu}&tkO>%smWQWI z800DWN%@7k##My@jkhsTjA^>06{O>^O&d=bMH%lR=rOADf%K?H&9q*~STI|T+x444!97k#n@nJDn-Bf0C>ixi11ORCe?9@~IUspCTcC+(s* zCq&}bZ7-V~_Z=8PhyIm*W->YLJsmy#ofRJs`AHczI^$^#!-*mN4#=XQDkG+-@~kS# z$}#_j3?&M6f*IqTY1O=DG&et3DaT+;KubEkO1a8U^kz`x_5g)bGxEAO_=O;JaNPO+ zeUT2;-OL4IZB!)S zLF2;%6L%sq;p+REIKjB&(%CB)+clr}gI{X`Q&D=eKr;Mh$85~@nh&cWn8nBLCM<^i zCQgIC`CHiZPeu(pNf;*7UqZWBU1aK z>}IG%1o;~GUQrP2Tr9Be;UI`2amk!yrBElqRNo6#zySNN0-w6i%UO4~uMuv!9H*LT zv%#N2?BBbFuF| z!~3tKSlOrv&>3mK_8mpev7P*(kn&u`pTG~s2%wlgg>yDGRFHjRrOu^7-yqHQbDC1& VC83FsczC$D00>l65=xQ?{{tE6EII%H delta 186431 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 diff --git a/doc/pub/Regression/html/._Regression-bs001.html b/doc/pub/Regression/html/._Regression-bs001.html index f1cdcf478..70cde1f6e 100644 --- a/doc/pub/Regression/html/._Regression-bs001.html +++ b/doc/pub/Regression/html/._Regression-bs001.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -272,7 +300,7 @@ A regression model aims at finding a likelihood function \( p(y\vert \hat{x}) \)
  • 10
  • 11
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs002.html b/doc/pub/Regression/html/._Regression-bs002.html index 523f9d68c..a514bd2ec 100644 --- a/doc/pub/Regression/html/._Regression-bs002.html +++ b/doc/pub/Regression/html/._Regression-bs002.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -279,7 +307,7 @@ response is equal to \( \beta_j \).
  • 11
  • 12
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs003.html b/doc/pub/Regression/html/._Regression-bs003.html index d18ec8f83..572119bce 100644 --- a/doc/pub/Regression/html/._Regression-bs003.html +++ b/doc/pub/Regression/html/._Regression-bs003.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -270,7 +298,7 @@ where \( \epsilon_i \) is the error in our approximation.
  • 12
  • 13
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs004.html b/doc/pub/Regression/html/._Regression-bs004.html index 643f337c1..de10c4d9c 100644 --- a/doc/pub/Regression/html/._Regression-bs004.html +++ b/doc/pub/Regression/html/._Regression-bs004.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -270,7 +298,7 @@ $$
  • 13
  • 14
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs005.html b/doc/pub/Regression/html/._Regression-bs005.html index 79e79e7b3..acae72078 100644 --- a/doc/pub/Regression/html/._Regression-bs005.html +++ b/doc/pub/Regression/html/._Regression-bs005.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -292,7 +320,7 @@ $$
  • 14
  • 15
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs006.html b/doc/pub/Regression/html/._Regression-bs006.html index 0666eaf89..afe7d5b85 100644 --- a/doc/pub/Regression/html/._Regression-bs006.html +++ b/doc/pub/Regression/html/._Regression-bs006.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -275,7 +303,7 @@ $$
  • 15
  • 16
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs007.html b/doc/pub/Regression/html/._Regression-bs007.html index 1cbc6bb56..dc27b195c 100644 --- a/doc/pub/Regression/html/._Regression-bs007.html +++ b/doc/pub/Regression/html/._Regression-bs007.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -281,7 +309,7 @@ The left-hand side of this equation forms know. Our error vector \( \hat{\epsilo
  • 16
  • 17
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs008.html b/doc/pub/Regression/html/._Regression-bs008.html index ebb470521..db6900e0c 100644 --- a/doc/pub/Regression/html/._Regression-bs008.html +++ b/doc/pub/Regression/html/._Regression-bs008.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -276,7 +304,7 @@ $$
  • 17
  • 18
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs009.html b/doc/pub/Regression/html/._Regression-bs009.html index 2c4747519..9bda0b2aa 100644 --- a/doc/pub/Regression/html/._Regression-bs009.html +++ b/doc/pub/Regression/html/._Regression-bs009.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -279,7 +307,7 @@ $$
  • 18
  • 19
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs010.html b/doc/pub/Regression/html/._Regression-bs010.html index 90e7a3478..d7076e786 100644 --- a/doc/pub/Regression/html/._Regression-bs010.html +++ b/doc/pub/Regression/html/._Regression-bs010.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -295,7 +323,7 @@ $$
  • 19
  • 20
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs011.html b/doc/pub/Regression/html/._Regression-bs011.html index 94864f6a6..f40aab856 100644 --- a/doc/pub/Regression/html/._Regression-bs011.html +++ b/doc/pub/Regression/html/._Regression-bs011.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -282,7 +310,7 @@ $$
  • 20
  • 21
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs012.html b/doc/pub/Regression/html/._Regression-bs012.html index dd8c3fbf9..b9a0cb05d 100644 --- a/doc/pub/Regression/html/._Regression-bs012.html +++ b/doc/pub/Regression/html/._Regression-bs012.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -284,7 +312,7 @@ meaning that the solution for \( \hat{\beta} \) is the one which minimizes the r
  • 21
  • 22
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs013.html b/doc/pub/Regression/html/._Regression-bs013.html index 86165977c..b0a6684a9 100644 --- a/doc/pub/Regression/html/._Regression-bs013.html +++ b/doc/pub/Regression/html/._Regression-bs013.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -279,7 +307,7 @@ where the matrix \( \hat{\Sigma} \) is a diagonal matrix with \( \sigma_i \) as
  • 22
  • 23
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs014.html b/doc/pub/Regression/html/._Regression-bs014.html index bbde82e75..2ca7e8568 100644 --- a/doc/pub/Regression/html/._Regression-bs014.html +++ b/doc/pub/Regression/html/._Regression-bs014.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -284,7 +312,7 @@ where we have defined the matrix \( \hat{A} =\hat{X}/\hat{\Sigma} \) with matrix
  • 23
  • 24
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs015.html b/doc/pub/Regression/html/._Regression-bs015.html index 9bb6354df..0d26f1e4c 100644 --- a/doc/pub/Regression/html/._Regression-bs015.html +++ b/doc/pub/Regression/html/._Regression-bs015.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -282,7 +310,7 @@ $$
  • 24
  • 25
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs016.html b/doc/pub/Regression/html/._Regression-bs016.html index b3aeb045a..a53ae1b6b 100644 --- a/doc/pub/Regression/html/._Regression-bs016.html +++ b/doc/pub/Regression/html/._Regression-bs016.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -287,7 +315,7 @@ $$
  • 25
  • 26
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs017.html b/doc/pub/Regression/html/._Regression-bs017.html index a258a9d2c..9eca50aa1 100644 --- a/doc/pub/Regression/html/._Regression-bs017.html +++ b/doc/pub/Regression/html/._Regression-bs017.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -280,7 +308,7 @@ $$
  • 26
  • 27
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs018.html b/doc/pub/Regression/html/._Regression-bs018.html index cc9cfc97e..ea0076b77 100644 --- a/doc/pub/Regression/html/._Regression-bs018.html +++ b/doc/pub/Regression/html/._Regression-bs018.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -302,7 +330,7 @@ This approach (different linear and non-linear regression) suffers often from bo
  • 27
  • 28
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs019.html b/doc/pub/Regression/html/._Regression-bs019.html index 26f66fce1..5e38d1e83 100644 --- a/doc/pub/Regression/html/._Regression-bs019.html +++ b/doc/pub/Regression/html/._Regression-bs019.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -295,7 +323,7 @@ We see that, as expected, a linear fit gives a seemingly (from the graph) good r
  • 28
  • 29
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs020.html b/doc/pub/Regression/html/._Regression-bs020.html index 4cbf19b9e..188ed0aa4 100644 --- a/doc/pub/Regression/html/._Regression-bs020.html +++ b/doc/pub/Regression/html/._Regression-bs020.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -286,7 +314,7 @@ plt.show()
  • 29
  • 30
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs021.html b/doc/pub/Regression/html/._Regression-bs021.html index a768c9fd4..b02ce24d9 100644 --- a/doc/pub/Regression/html/._Regression-bs021.html +++ b/doc/pub/Regression/html/._Regression-bs021.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -323,7 +351,7 @@ plt.show()
  • 30
  • 31
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs022.html b/doc/pub/Regression/html/._Regression-bs022.html index dc088d321..ef3e8f482 100644 --- a/doc/pub/Regression/html/._Regression-bs022.html +++ b/doc/pub/Regression/html/._Regression-bs022.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -277,7 +305,7 @@ where \( x \) is defined as before.
  • 31
  • 32
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs023.html b/doc/pub/Regression/html/._Regression-bs023.html index 193801b1c..e2730e41b 100644 --- a/doc/pub/Regression/html/._Regression-bs023.html +++ b/doc/pub/Regression/html/._Regression-bs023.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -268,7 +296,7 @@ have not discussed a more rigorous approach to the cost function.
  • 32
  • 33
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs024.html b/doc/pub/Regression/html/._Regression-bs024.html index fe69a6e2a..cd61ec01b 100644 --- a/doc/pub/Regression/html/._Regression-bs024.html +++ b/doc/pub/Regression/html/._Regression-bs024.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -277,7 +305,7 @@ dimensionless.
  • 33
  • 34
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs025.html b/doc/pub/Regression/html/._Regression-bs025.html index a1e2a076e..31f5d6002 100644 --- a/doc/pub/Regression/html/._Regression-bs025.html +++ b/doc/pub/Regression/html/._Regression-bs025.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -276,7 +304,7 @@ the \( \chi^2 \) function becomes smaller.
  • 34
  • 35
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs026.html b/doc/pub/Regression/html/._Regression-bs026.html index 2b050bf0f..f72d47d9f 100644 --- a/doc/pub/Regression/html/._Regression-bs026.html +++ b/doc/pub/Regression/html/._Regression-bs026.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -295,7 +323,7 @@ relative error.
  • 35
  • 36
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs027.html b/doc/pub/Regression/html/._Regression-bs027.html index 79b422d69..402165acb 100644 --- a/doc/pub/Regression/html/._Regression-bs027.html +++ b/doc/pub/Regression/html/._Regression-bs027.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -300,7 +328,7 @@ plt.show()
  • 36
  • 37
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs028.html b/doc/pub/Regression/html/._Regression-bs028.html index 79c5f693a..56e72568c 100644 --- a/doc/pub/Regression/html/._Regression-bs028.html +++ b/doc/pub/Regression/html/._Regression-bs028.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -272,7 +300,7 @@ this function as being similar to the \( \chi^2 \) function defined above.
  • 37
  • 38
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs029.html b/doc/pub/Regression/html/._Regression-bs029.html index 33cd41ef8..a17909406 100644 --- a/doc/pub/Regression/html/._Regression-bs029.html +++ b/doc/pub/Regression/html/._Regression-bs029.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -279,7 +307,7 @@ $$
  • 38
  • 39
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs030.html b/doc/pub/Regression/html/._Regression-bs030.html index 69b76d122..c26af9a7b 100644 --- a/doc/pub/Regression/html/._Regression-bs030.html +++ b/doc/pub/Regression/html/._Regression-bs030.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -280,7 +308,7 @@ years etc.
  • 39
  • 40
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs031.html b/doc/pub/Regression/html/._Regression-bs031.html index 3033d8063..ff865ccb9 100644 --- a/doc/pub/Regression/html/._Regression-bs031.html +++ b/doc/pub/Regression/html/._Regression-bs031.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -303,7 +331,7 @@ Using R, we can perform similar studies.
  • 40
  • 41
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs032.html b/doc/pub/Regression/html/._Regression-bs032.html index 0f9b89474..1101eac0f 100644 --- a/doc/pub/Regression/html/._Regression-bs032.html +++ b/doc/pub/Regression/html/._Regression-bs032.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -286,7 +314,7 @@ plt.show()
  • 41
  • 42
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs033.html b/doc/pub/Regression/html/._Regression-bs033.html index d55114e2c..a9b1394ed 100644 --- a/doc/pub/Regression/html/._Regression-bs033.html +++ b/doc/pub/Regression/html/._Regression-bs033.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -282,7 +310,7 @@ non-random scalar. To specify the parameters of the distribution of
  • 42
  • 43
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs034.html b/doc/pub/Regression/html/._Regression-bs034.html index a5c44e236..c5be7672b 100644 --- a/doc/pub/Regression/html/._Regression-bs034.html +++ b/doc/pub/Regression/html/._Regression-bs034.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -289,7 +317,7 @@ Hence, \( Y_i \sim \mathcal{N}( \mathbf{X}_{i, \ast} \, \beta, \sigma^2) \).
  • 43
  • 44
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs035.html b/doc/pub/Regression/html/._Regression-bs035.html index 3902c8b08..7da384969 100644 --- a/doc/pub/Regression/html/._Regression-bs035.html +++ b/doc/pub/Regression/html/._Regression-bs035.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -277,7 +305,7 @@ $$
  • 44
  • 45
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs036.html b/doc/pub/Regression/html/._Regression-bs036.html index a2a01b043..b1e3b9849 100644 --- a/doc/pub/Regression/html/._Regression-bs036.html +++ b/doc/pub/Regression/html/._Regression-bs036.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -232,84 +260,54 @@ MathJax.Hub.Config({ -

    Code examples for Ridge and Lasso Regression

    +

    From standard regression to Ridge regressions

    +One of the typical problems we encounter with linear regression, in particular +when the matrix \( \hat{X} \) (our so-called design matrix) is high-dimensional, +are problems with near singular or singular matrices. The column vectors of \( \hat{X} \) +may be linearly dependent, normally referred to as super-collinearity. +This means that the matrix may be rank deficient and it is basically impossible to +to model the data using linear regression. As an example, consider the matrix +$$ +\begin{align*} +\mathbf{X} & = \left[ +\begin{array}{rrr} +1 & -1 & 2 +\\ +1 & 0 & 1 +\\ +1 & 2 & -1 +\\ +1 & 1 & 0 +\end{array} \right] +\end{align*} +$$ - -

    import matplotlib.pyplot as plt
    -import numpy as np
    -from sklearn import linear_model
    -from sklearn.linear_model import LinearRegression
    -from sklearn.metrics import mean_squared_error, r2_score
    +

    +The columns of \( \hat{X} \) are linearly dependent. We se this easily since the +the first column is the row-wise sum of the other two columns. The rank (more correct, +the column rank) of a matrix is the dimension of the space spanned by the +column vectors. Hence, the rank of \( \mathbf{X} \) is equal to the number +of linearly independent columns. In this particular case the matrix has rank 2. -#creating data with random noise -x=np.arange(50) +

    +Super-collinearity of an \( (n \times p) \)-dimensional design matrix \( \mathbf{X} \) implies +that the inverse of the matrix \( \hat{X}^T\hat{x} \) (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this +$$ +\begin{align*} +\hat{X} & = \left[ +\begin{array}{rr} +1 & -1 +\\ +1 & -1 +\end{array} \right]. +\end{align*} +$$ -delta=np.random.uniform(-2.5,2.5, size=(50)) -np.random.shuffle(delta) -y =0.5*x+5+delta +We see easily that \( \mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0 \). Hence, \( \mathbf{X} \) is singular and its inverse is undefined. +This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigenvalue which is zero. -#arranging data into 2x50 matrix -a=np.array(x) #inputs -b=np.array(y) #outputs - -#Split into training and test -X_train=a[:37, np.newaxis] -X_test=a[37:, np.newaxis] -y_train=b[:37] -y_test=b[37:] - -print ("X_train: ", X_train.shape) -print ("y_train: ", y_train.shape) -print ("X_test: ", X_test.shape) -print ("y_test: ", y_test.shape) - -print ("------------------------------------") - -print ("Ordinary Least Squares") -#Add Ordinary Least Squares fit -reg=LinearRegression() -reg.fit(X_train, y_train) -pred=reg.predict(X_test) -print ("Prediction Shape: ", pred.shape) - -print('Coefficients: \n', reg.coef_) -# The mean squared error -print("Mean squared error: %.2f" - % mean_squared_error(y_test, pred)) -# Explained variance score: 1 is perfect prediction -print('Variance score: %.2f' % r2_score(y_test, pred)) - -#plot -plt.scatter(X_test,y_test,color='green', label="Training Data") -plt.plot(X_test, pred, color='black', label="Fit Line") -plt.legend() -plt.show() - -print ("------------------------------------") - -print ("Ridge Regression") - -ridge=linear_model.RidgeCV(alphas=[0.1,1.0,10.0]) -ridge.fit(X_train,y_train) -print ("Ridge Coefficient: ",ridge.coef_) -print ("Ridge Intercept: ", ridge.intercept_) -#Look into graphing with Ridge fit - -print ("------------------------------------") - -print ("Lasso") -lasso=linear_model.Lasso(alpha=0.1) -lasso.fit(X_train,y_train) -predl=lasso.predict(X_test) -print("Lasso Coefficient: ", lasso.coef_) -print("Lasso Intercept: ", lasso.intercept_) -plt.scatter(X_test,y_test,color='green', label="Training Data") -plt.plot(X_test, predl, color='blue', label="Lasso") -plt.legend() -plt.show() -

    @@ -335,6 +333,8 @@ plt.show()

  • 44
  • 45
  • 46
  • +
  • ...
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs037.html b/doc/pub/Regression/html/._Regression-bs037.html index d7790e7d6..a01473605 100644 --- a/doc/pub/Regression/html/._Regression-bs037.html +++ b/doc/pub/Regression/html/._Regression-bs037.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -232,53 +260,30 @@ MathJax.Hub.Config({ -

    From standard regression to Ridge regressions

    +

    Fixing the singularity

    -One of the typical problems we encounter with linear regression, in particular -when the matrix \( \hat{X} \) (our so-called design matrix) is high-dimensional, -are problems with near singular or singular matrices. The column vectors of \( \hat{X} \) -may be linearly dependent, normally referred to as super-collinearity. -This means that the matrix may be rank deficient and it is basically impossible to -to model the data using linear regression. As an example, consider the matrix +If our design matrix \( \hat{X} \) which enters the linear regression problem $$ -\begin{align*} -\mathbf{X} & = \left[ -\begin{array}{rrr} -1 & -1 & 2 -\\ -1 & 0 & 1 -\\ -1 & 2 & -1 -\\ -1 & 1 & 0 -\end{array} \right] -\end{align*} +\begin{align} +\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, +\tag{1} +\end{align} $$ +has linearly dependent column vectors, we will not be able to compute the inverse +of \( \hat{X}^T\hat{X} \) and we cannot find the parameters (estimators) \( \beta_i \). +The estimators are only well-defined if \( (\hat{X}^{T}\hat{X})^{-1} \) exits. +This is more likely to happen when the matrix \( \hat{X} \) is high-dimensional. In this case it is likely to encounter a situation where +the regression parameters \( \beta_i \) cannot be estimated. +

    -The columns of \( \hat{X} \) are linearly dependent. We se this easily since the -the first column is the row-wise sum of the other two columns. The rank (more correct, -the column rank) of a matrix is the dimension of the space spanned by the -column vectors. Hence, the rank of \( \mathbf{X} \) is equal to the number -of linearly independent columns. In this particular case the matrix has rank 2. - -

    -Super-collinearity of an \( (n \times p) \)-dimensional design matrix \( \mathbf{X} \) implies -that the inverse of the matrix \( \hat{X}^T\hat{x} \) (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this +The ad hoc approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change $$ -\begin{align*} -\hat{X} & = \left[ -\begin{array}{rr} -1 & -1 -\\ -1 & -1 -\end{array} \right]. -\end{align*} +\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, $$ -We see easily that \( \mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0 \). Hence, \( \mathbf{X} \) is singular and its inverse is undefined. -This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigenvalue which is zero. +where \( \hat{I} \) is the identity matrix.

    @@ -304,6 +309,9 @@ This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigen

  • 44
  • 45
  • 46
  • +
  • 47
  • +
  • ...
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs038.html b/doc/pub/Regression/html/._Regression-bs038.html index cca079168..1d99dea3a 100644 --- a/doc/pub/Regression/html/._Regression-bs038.html +++ b/doc/pub/Regression/html/._Regression-bs038.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -232,30 +260,29 @@ MathJax.Hub.Config({ -

    Fixing the singularity

    +

    Fitting vs. predicting when data is in the model class

    -If our design matrix \( \hat{X} \) which enters the linear regression problem -$$ -\begin{align} -\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, -\tag{1} -\end{align} -$$ - -has linearly dependent column vectors, we will not be able to compute the inverse -of \( \hat{X}^T\hat{X} \) and we cannot find the parameters (estimators) \( \beta_i \). -The estimators are only well-defined if \( (\hat{X}^{T}\hat{X})^{-1} \) exits. -This is more likely to happen when the matrix \( \hat{X} \) is high-dimensional. In this case it is likely to encounter a situation where -the regression parameters \( \beta_i \) cannot be estimated. +We start by considering the case +\( f(x)=2x \).

    -The ad hoc approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change -$$ -\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, -$$ +Then the data is clearly generated by a model that is contained within +all three model classes we are using to make predictions (linear +models, third order polynomials, and tenth order polynomials). -where \( \hat{I} \) is the identity matrix. +

    +Run the code for the following cases: + +

      +
    1. For \( f(x)=2x \) , \( Ntrain=10 \) and \( \sigma =0 \) (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when \( x \in [0,1] \) . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?
    2. +
    3. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?
    4. +
    5. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example \( x \in [0,1.2] \) ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?
    6. +
    7. Repeat the above for \( f(x)=2x \) , \( Ntrain=10 \) , and \( \sigma=1 \) . What changes?
    8. +
    + +Repeat the exercises above for \( f(x)=2x \) , \( Ntrain=100 \) , and \( \sigma=1 \) . What changes? +Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well.

    @@ -280,6 +307,10 @@ where \( \hat{I} \) is the identity matrix.

  • 44
  • 45
  • 46
  • +
  • 47
  • +
  • 48
  • +
  • ...
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs039.html b/doc/pub/Regression/html/._Regression-bs039.html index aa8c96dc3..82cb86d33 100644 --- a/doc/pub/Regression/html/._Regression-bs039.html +++ b/doc/pub/Regression/html/._Regression-bs039.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -232,117 +260,18 @@ MathJax.Hub.Config({ -

    A second-order polynomial with Ridge and Lasso

    +

    Fitting versus predicting when data is not in the model class

    +

    +Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider \( f(x)=2x-10x^5+15x^{10} \) . Notice that the for linear and third-order polynomial the true model \( f(x) \) is not contained in model class. - -

    import numpy as np
    -import matplotlib.pyplot as plt
    -from sklearn.linear_model import Ridge
    -from sklearn.metrics import r2_score
    +
      +
    1. Do better fits lead to better predictions?
    2. +
    3. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points \( Ntrain \) and \( \sigma \)?
    4. +
    -np.random.seed(4155) +Summarize what you think you learned about the relationship of knowing the true model class and predictive power. -n_samples = 100 - -x = np.random.rand(n_samples,1) -y = 5*x*x + 0.1*np.random.rand(n_samples,1) - -# Centering x and y. -x_ = x - np.mean(x) -y_ = y - np.mean(y) # beta_0 = mean(y) - -X = np.c_[np.ones((n_samples,1)), x, x**2] -X_ = np.c_[x_, x_**2] - - -### 1. -lmb_values = [1e-4, 1e-3, 1e-2, 10, 1e2, 1e4] -num_values = len(lmb_values) - -## Ridge-regression of centered and not centered data -beta_ridge = np.zeros((3,num_values)) -beta_ridge_centered = np.zeros((3,num_values)) - -I3 = np.eye(3) -I2 = np.eye(2) - -for i,lmb in enumerate(lmb_values): - beta_ridge[:,i] = (np.linalg.inv( X.T @ X + lmb*I3) @ X.T @ y).flatten() - beta_ridge_centered[1:,i] = (np.linalg.inv( X_.T @ X_ + lmb*I2) @ X_.T @ y_).flatten() - -# sett beta_0 = np.mean(y) -beta_ridge_centered[0,:] = np.mean(y) - -## OLS (ordinary least squares) solution -beta_ls = np.linalg.inv( X.T @ X ) @ X.T @ y - -## Evaluate the models -pred_ls = X @ beta_ls -pred_ridge = X @ beta_ridge -pred_ridge_centered = X_ @ beta_ridge_centered[1:] + beta_ridge_centered[0,:] - -## Plot the results - -# Sorting -sort_ind = np.argsort(x[:,0]) - -x_plot = x[sort_ind,0] -x_centered_plot = x_[sort_ind,0] - -pred_ls_plot = pred_ls[sort_ind,0] -pred_ridge_plot = pred_ridge[sort_ind,:] -pred_ridge_centered_plot = pred_ridge_centered[sort_ind,:] - -# Plott not centered -plt.plot(x_plot,pred_ls_plot,label='ls') - -for i in range(num_values): - plt.plot(x_plot,pred_ridge_plot[:,i],label='ridge, lmb=%g'%lmb_values[i]) - -plt.plot(x,y,'ro') - -plt.title('linear regression on un-centered data') -plt.legend() - -# Plott centered -plt.figure() - -for i in range(num_values): - plt.plot(x_centered_plot,pred_ridge_centered_plot[:,i],label='ridge, lmb=%g'%lmb_values[i]) - -plt.plot(x_,y,'ro') - -plt.title('linear regression on centered data') -plt.legend() - - -# 2. - -pred_ridge_scikit = np.zeros((n_samples,num_values)) -for i,lmb in enumerate(lmb_values): - pred_ridge_scikit[:,i] = (Ridge(alpha=lmb,fit_intercept=False).fit(X,y).predict(X)).flatten() # fit_intercept=False fordi bias er allerede i X - -plt.figure() - -plt.plot(x_plot,pred_ls_plot,label='ls') - -for i in range(num_values): - plt.plot(x_plot,pred_ridge_scikit[sort_ind,i],label='scikit-ridge, lmb=%g'%lmb_values[i]) - -plt.plot(x,y,'ro') -plt.legend() -plt.title('linear regression using scikit') - -plt.show() - -### R2-score of the results -for i in range(num_values): - print('lambda = %g'%lmb_values[i]) - print('r2 for scikit: %g'%r2_score(y,pred_ridge_scikit[:,i])) - print('r2 for own code, not centered: %g'%r2_score(y,pred_ridge[:,i])) - print('r2 for own, centered: %g\n'%r2_score(y,pred_ridge_centered[:,i])) -

    @@ -365,6 +294,11 @@ plt.show()

  • 44
  • 45
  • 46
  • +
  • 47
  • +
  • 48
  • +
  • 49
  • +
  • ...
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs040.html b/doc/pub/Regression/html/._Regression-bs040.html index e62c176d7..d42992185 100644 --- a/doc/pub/Regression/html/._Regression-bs040.html +++ b/doc/pub/Regression/html/._Regression-bs040.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -232,30 +260,93 @@ MathJax.Hub.Config({ -

    Fitting vs. predicting when data is in the model class

    +

    An example code without the model assessment part

    -We start by considering the case -\( f(x)=2x \). -

    -Then the data is clearly generated by a model that is contained within -all three model classes we are using to make predictions (linear -models, third order polynomials, and tenth order polynomials). + +

    import numpy as np
    +import sklearn as sk
    +from sklearn import datasets, linear_model
    +from sklearn.preprocessing import PolynomialFeatures
     
    -

    -Run the code for the following cases: +import matplotlib as mpl +from matplotlib import pyplot as plt -

      -
    1. For \( f(x)=2x \) , \( Ntrain=10 \) and \( \sigma =0 \) (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when \( x \in [0,1] \) . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?
    2. -
    3. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?
    4. -
    5. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example \( x \in [0,1.2] \) ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?
    6. -
    7. Repeat the above for \( f(x)=2x \) , \( Ntrain=10 \) , and \( \sigma=1 \) . What changes?
    8. -
    +%matplotlib notebook -Repeat the exercises above for \( f(x)=2x \) , \( Ntrain=100 \) , and \( \sigma=1 \) . What changes? -Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well. +# The Training Data +N_train=100 + +sigma_train=1; + +# Train on integers +x=np.linspace(0.05,0.95,N_train) +# Draw random noise +s = sigma_train*np.random.randn(N_train) + +#linear +y=2*x+s + +#Tenth Order +#y=2*x-10*x**5+15*x**10+s + +p1=plt.plot(x,y, "o",ms=15, label='Training') + +#Linear Regression +# Create linear regression object +clf = linear_model.LinearRegression() + +# Train the model using the training sets +clf.fit(x[:, np.newaxis], y) +# The coefficients + +xplot=np.linspace(0.02,0.98,200) +linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear') + +#Polynomial Regression + + +poly3 = PolynomialFeatures(degree=3) +X = poly3.fit_transform(x[:,np.newaxis]) +clf3 = linear_model.LinearRegression() +clf3.fit(X,y) + + +Xplot=poly3.fit_transform(xplot[:,np.newaxis]) +poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3') + + + +#poly5 = PolynomialFeatures(degree=5) +#X = poly5.fit_transform(x[:,np.newaxis]) +#clf5 = linear_model.LinearRegression() +#clf5.fit(X,y) + +#Xplot=poly5.fit_transform(xplot[:,np.newaxis]) +#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1) + +poly10 = PolynomialFeatures(degree=10) +X = poly10.fit_transform(x[:,np.newaxis]) +clf10 = linear_model.LinearRegression() +clf10.fit(X,y) + +Xplot=poly10.fit_transform(xplot[:,np.newaxis]) +poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10') + +axes = plt.gca() +axes.set_ylim([-7,7]) + +handles, labels=axes.get_legend_handles_labels() +plt.legend(handles,labels, loc='lower center') +plt.xlabel("$x$") +plt.ylabel("$y$") +Title="$N=$"+str(N_train)+", $\sigma=$"+str(sigma_train) +plt.title(Title+" (train)") +plt.tight_layout() +plt.show() +

    @@ -277,6 +368,12 @@ Summarize what you have learned about the relationship between model complexity

  • 44
  • 45
  • 46
  • +
  • 47
  • +
  • 48
  • +
  • 49
  • +
  • 50
  • +
  • ...
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs041.html b/doc/pub/Regression/html/._Regression-bs041.html index 0449005ac..1c8a8d8a9 100644 --- a/doc/pub/Regression/html/._Regression-bs041.html +++ b/doc/pub/Regression/html/._Regression-bs041.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -230,20 +258,51 @@ MathJax.Hub.Config({

     

     

     

    - - -

    Fitting versus predicting when data is not in the model class

    + +

    Generating test data

    -Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider \( f(x)=2x-10x^5+15x^{10} \) . Notice that the for linear and third-order polynomial the true model \( f(x) \) is not contained in model class. -

      -
    1. Do better fits lead to better predictions?
    2. -
    3. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points \( Ntrain \) and \( \sigma \)?
    4. -
    + +
    # Generate Test Data
     
    -Summarize what you think you learned about the relationship of knowing the true model class and predictive power.
    +#Number of test data
    +N_test=20
     
    +sigma_test=sigma_train
    +
    +max_x=1.2
    +x_test=max_x*np.random.random(N_test)
    +# Draw random noise
    +s_test = sigma_test*np.random.randn(N_test)
    +
    +#Linear
    +y_test=2*x_test+s_test
    +#Tenth order
    +#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test
    +
    +#Make design matrices for prediction
    +x_plot=np.linspace(0,max_x, 200)
    +X3 = poly3.fit_transform(x_plot[:,np.newaxis])
    +X10 = poly10.fit_transform(x_plot[:,np.newaxis])
    +
    +%matplotlib notebook
    +
    +fig = plt.figure() 
    +p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')
    +p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')
    +p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')
    +p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')
    +
    +
    +plt.legend(loc=2)
    +plt.xlabel('$x$')
    +plt.ylabel('$y$')
    +plt.legend(loc='best')
    +plt.title(Title+" (pred.)")
    +plt.tight_layout()
    +plt.show()
    +

    @@ -264,6 +323,13 @@ Summarize what you think you learned about the relationship of knowing the true

  • 44
  • 45
  • 46
  • +
  • 47
  • +
  • 48
  • +
  • 49
  • +
  • 50
  • +
  • 51
  • +
  • ...
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs042.html b/doc/pub/Regression/html/._Regression-bs042.html index ff3f3130a..ae514c7af 100644 --- a/doc/pub/Regression/html/._Regression-bs042.html +++ b/doc/pub/Regression/html/._Regression-bs042.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -232,93 +260,14 @@ MathJax.Hub.Config({ -

    The code

    +

    How can we effectively evaluate the various models?

    +In Ridge regression and the subsequent discussion of its properties +the bias or penalty parameter is considered known or `given'. In +practice, it is unknown and the user needs to make an informed +decision on its value. How do we do that? Much of the same considerations apply to the Lasso method. - -

    import numpy as np
    -import sklearn as sk
    -from sklearn import datasets, linear_model
    -from sklearn.preprocessing import PolynomialFeatures
    -
    -import matplotlib as mpl
    -from matplotlib import pyplot as plt
    -
    -%matplotlib notebook
    -
    -# The Training Data
    -
    -N_train=100
    -
    -sigma_train=1;
    -
    -# Train on integers
    -x=np.linspace(0.05,0.95,N_train)
    -# Draw random noise
    -s = sigma_train*np.random.randn(N_train)
    -
    -#linear
    -y=2*x+s
    -
    -#Tenth Order
    -#y=2*x-10*x**5+15*x**10+s
    -
    -p1=plt.plot(x,y, "o",ms=15, label='Training')
    -
    -#Linear Regression
    -# Create linear regression object
    -clf = linear_model.LinearRegression()
    -
    -# Train the model using the training sets
    -clf.fit(x[:, np.newaxis], y)
    -# The coefficients
    -
    -xplot=np.linspace(0.02,0.98,200)
    -linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')
    -
    -#Polynomial Regression
    -
    -
    -poly3 = PolynomialFeatures(degree=3)
    -X = poly3.fit_transform(x[:,np.newaxis])
    -clf3 = linear_model.LinearRegression()
    -clf3.fit(X,y)
    -
    -
    -Xplot=poly3.fit_transform(xplot[:,np.newaxis])
    -poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')
    -
    -
    -
    -#poly5 = PolynomialFeatures(degree=5)
    -#X = poly5.fit_transform(x[:,np.newaxis])
    -#clf5 = linear_model.LinearRegression()
    -#clf5.fit(X,y)
    -
    -#Xplot=poly5.fit_transform(xplot[:,np.newaxis])
    -#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)
    -
    -poly10 = PolynomialFeatures(degree=10)
    -X = poly10.fit_transform(x[:,np.newaxis])
    -clf10 = linear_model.LinearRegression()
    -clf10.fit(X,y)
    -
    -Xplot=poly10.fit_transform(xplot[:,np.newaxis])
    -poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')
    -
    -axes = plt.gca()
    -axes.set_ylim([-7,7])
    -
    -handles, labels=axes.get_legend_handles_labels()
    -plt.legend(handles,labels, loc='lower center')
    -plt.xlabel("$x$")
    -plt.ylabel("$y$")
    -Title="$N=$"+str(N_train)+", $\sigma=$"+str(sigma_train)
    -plt.title(Title+" (train)")
    -plt.tight_layout()
    -plt.show()
    -

    @@ -338,6 +287,14 @@ plt.show()

  • 44
  • 45
  • 46
  • +
  • 47
  • +
  • 48
  • +
  • 49
  • +
  • 50
  • +
  • 51
  • +
  • 52
  • +
  • ...
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs043.html b/doc/pub/Regression/html/._Regression-bs043.html index b45774529..656700822 100644 --- a/doc/pub/Regression/html/._Regression-bs043.html +++ b/doc/pub/Regression/html/._Regression-bs043.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -230,57 +258,85 @@ MathJax.Hub.Config({

     

     

     

    - + + +

    Code examples for Ridge and Lasso Regression

    -

    Generating test data

    -

    # Generate Test Data
    +
    import matplotlib.pyplot as plt
    +import numpy as np
    +from sklearn import linear_model
    +from sklearn.linear_model import LinearRegression
    +from sklearn.metrics import mean_squared_error, r2_score
     
    -#Number of test data
    -N_test=20
    +#creating data with random noise
    +x=np.arange(50)
     
    -sigma_test=sigma_train
    +delta=np.random.uniform(-2.5,2.5, size=(50))
    +np.random.shuffle(delta)
    +y =0.5*x+5+delta
     
    -max_x=1.2
    -x_test=max_x*np.random.random(N_test)
    -# Draw random noise
    -s_test = sigma_test*np.random.randn(N_test)
    +#arranging data into 2x50 matrix
    +a=np.array(x) #inputs
    +b=np.array(y) #outputs
     
    -#Linear
    -y_test=2*x_test+s_test
    -#Tenth order
    -#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test
    +#Split into training and test
    +X_train=a[:37, np.newaxis]
    +X_test=a[37:, np.newaxis]
    +y_train=b[:37]
    +y_test=b[37:]
     
    -#Make design matrices for prediction
    -x_plot=np.linspace(0,max_x, 200)
    -X3 = poly3.fit_transform(x_plot[:,np.newaxis])
    -X10 = poly10.fit_transform(x_plot[:,np.newaxis])
    +print ("X_train: ", X_train.shape)
    +print ("y_train: ", y_train.shape)
    +print ("X_test: ", X_test.shape)
    +print ("y_test: ", y_test.shape)
     
    -%matplotlib notebook
    +print ("------------------------------------")
     
    -fig = plt.figure() 
    -p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')
    -p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')
    -p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')
    -p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')
    +print ("Ordinary Least Squares")
    +#Add Ordinary Least Squares fit
    +reg=LinearRegression()
    +reg.fit(X_train, y_train)
    +pred=reg.predict(X_test)
    +print ("Prediction Shape: ", pred.shape)
     
    +print('Coefficients: \n', reg.coef_)
    +# The mean squared error
    +print("Mean squared error: %.2f"
    +      % mean_squared_error(y_test, pred))
    +# Explained variance score: 1 is perfect prediction
    +print('Variance score: %.2f' % r2_score(y_test, pred))
     
    -plt.legend(loc=2)
    -plt.xlabel('$x$')
    -plt.ylabel('$y$')
    -plt.legend(loc='best')
    -plt.title(Title+" (pred.)")
    -plt.tight_layout()
    +#plot
    +plt.scatter(X_test,y_test,color='green', label="Training Data")
    +plt.plot(X_test, pred, color='black', label="Fit Line")
    +plt.legend()
     plt.show()
     
    -#Linear Filename
    -#filename_test=Title+"pred-linear.pdf"
    -#Tenth Order Filename
    -#filename_test=Title+"pred-o10.pdf"
    -#plt.savefig(filename_test)
    -#plt.ylim((-6,12))
    +print ("------------------------------------")
    +
    +print ("Ridge Regression")
    +
    +ridge=linear_model.RidgeCV(alphas=[0.1,1.0,10.0])
    +ridge.fit(X_train,y_train)
    +print ("Ridge Coefficient: ",ridge.coef_)
    +print ("Ridge Intercept: ", ridge.intercept_)
    +#Look into graphing with Ridge fit
    +
    +print ("------------------------------------")
    +
    +print ("Lasso")
    +lasso=linear_model.Lasso(alpha=0.1)
    +lasso.fit(X_train,y_train)
    +predl=lasso.predict(X_test)
    +print("Lasso Coefficient: ", lasso.coef_)
    +print("Lasso Intercept: ", lasso.intercept_)
    +plt.scatter(X_test,y_test,color='green', label="Training Data")
    +plt.plot(X_test, predl, color='blue', label="Lasso")
    +plt.legend()
    +plt.show()
     

    @@ -300,6 +356,15 @@ plt.show()

  • 44
  • 45
  • 46
  • +
  • 47
  • +
  • 48
  • +
  • 49
  • +
  • 50
  • +
  • 51
  • +
  • 52
  • +
  • 53
  • +
  • ...
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs044.html b/doc/pub/Regression/html/._Regression-bs044.html index 1ad5ddece..10e005345 100644 --- a/doc/pub/Regression/html/._Regression-bs044.html +++ b/doc/pub/Regression/html/._Regression-bs044.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -232,8 +260,117 @@ MathJax.Hub.Config({ -

    Lasso regression

    +

    A second-order polynomial with Ridge and Lasso

    +

    + +

    import numpy as np
    +import matplotlib.pyplot as plt
    +from sklearn.linear_model import Ridge
    +from sklearn.metrics import r2_score
    +
    +np.random.seed(4155)
    +
    +n_samples = 100
    +
    +x = np.random.rand(n_samples,1)
    +y = 5*x*x + 0.1*np.random.rand(n_samples,1)
    +
    +# Centering  x and y.
    +x_ = x - np.mean(x)
    +y_ = y - np.mean(y) # beta_0 = mean(y)
    +
    +X = np.c_[np.ones((n_samples,1)), x, x**2]
    +X_ = np.c_[x_, x_**2]
    +
    +
    +### 1.
    +lmb_values = [1e-4, 1e-3, 1e-2, 10, 1e2, 1e4]
    +num_values = len(lmb_values)
    +
    +## Ridge-regression of centered and not centered data
    +beta_ridge = np.zeros((3,num_values))
    +beta_ridge_centered = np.zeros((3,num_values))
    +
    +I3 = np.eye(3)
    +I2 = np.eye(2)
    +
    +for i,lmb in enumerate(lmb_values):
    +    beta_ridge[:,i] = (np.linalg.inv( X.T @ X + lmb*I3) @ X.T @ y).flatten()
    +    beta_ridge_centered[1:,i] = (np.linalg.inv( X_.T @ X_ + lmb*I2) @ X_.T @ y_).flatten()
    +
    +# sett beta_0 = np.mean(y)
    +beta_ridge_centered[0,:] = np.mean(y)
    +
    +## OLS (ordinary least squares) solution 
    +beta_ls = np.linalg.inv( X.T @ X ) @ X.T @ y
    +
    +## Evaluate the models
    +pred_ls = X @ beta_ls
    +pred_ridge =  X @ beta_ridge
    +pred_ridge_centered =  X_ @ beta_ridge_centered[1:] + beta_ridge_centered[0,:]
    +
    +## Plot the results
    +
    +# Sorting
    +sort_ind = np.argsort(x[:,0])
    +
    +x_plot = x[sort_ind,0]
    +x_centered_plot = x_[sort_ind,0]
    +
    +pred_ls_plot = pred_ls[sort_ind,0]
    +pred_ridge_plot = pred_ridge[sort_ind,:]
    +pred_ridge_centered_plot = pred_ridge_centered[sort_ind,:]
    +
    +# Plott not centered
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +
    +plt.title('linear regression on un-centered data')
    +plt.legend()
    +
    +# Plott centered
    +plt.figure()
    +
    +for i in range(num_values):
    +    plt.plot(x_centered_plot,pred_ridge_centered_plot[:,i],label='ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x_,y,'ro')
    +
    +plt.title('linear regression on centered data')
    +plt.legend()
    +
    +
    +# 2.
    +
    +pred_ridge_scikit =  np.zeros((n_samples,num_values))
    +for i,lmb in enumerate(lmb_values):
    +    pred_ridge_scikit[:,i] = (Ridge(alpha=lmb,fit_intercept=False).fit(X,y).predict(X)).flatten() # fit_intercept=False fordi bias er allerede i X
    +
    +plt.figure()
    +
    +plt.plot(x_plot,pred_ls_plot,label='ls')
    +
    +for i in range(num_values):
    +    plt.plot(x_plot,pred_ridge_scikit[sort_ind,i],label='scikit-ridge, lmb=%g'%lmb_values[i])
    +
    +plt.plot(x,y,'ro')
    +plt.legend()
    +plt.title('linear regression using scikit')
    +
    +plt.show()
    +
    +### R2-score of the results
    +for i in range(num_values):
    +    print('lambda = %g'%lmb_values[i])
    +    print('r2 for scikit: %g'%r2_score(y,pred_ridge_scikit[:,i]))
    +    print('r2 for own code, not centered: %g'%r2_score(y,pred_ridge[:,i]))
    +    print('r2 for own, centered: %g\n'%r2_score(y,pred_ridge_centered[:,i]))
    +

    @@ -251,6 +388,14 @@ MathJax.Hub.Config({

  • 44
  • 45
  • 46
  • +
  • 47
  • +
  • 48
  • +
  • 49
  • +
  • 50
  • +
  • 51
  • +
  • 52
  • +
  • 53
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/._Regression-bs045.html b/doc/pub/Regression/html/._Regression-bs045.html index 59fd87d05..d8001720b 100644 --- a/doc/pub/Regression/html/._Regression-bs045.html +++ b/doc/pub/Regression/html/._Regression-bs045.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -232,8 +260,25 @@ MathJax.Hub.Config({ -

    Logistic regression

    +

    Resampling methods

    +
    +
    +

    +Resampling methods are an indispensable tool in modern +statistics. They involve repeatedly drawing samples from a training +set and refitting a model of interest on each sample in order to +obtain additional information about the fitted model. For example, in +order to estimate the variability of a linear regression fit, we can +repeatedly draw different samples from the training data, fit a linear +regression to each new sample, and then examine the extent to which +the resulting fits differ. Such an approach may allow us to obtain +information that would not be available from fitting the model only +once using the original training sample. +

    +
    + +

    diff --git a/doc/pub/Regression/html/Regression-bs.html b/doc/pub/Regression/html/Regression-bs.html index c92c12f8a..bd71ca567 100644 --- a/doc/pub/Regression/html/Regression-bs.html +++ b/doc/pub/Regression/html/Regression-bs.html @@ -110,31 +110,51 @@ Automatically generated HTML file from DocOnce source '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -207,16 +227,24 @@ MathJax.Hub.Config({
  • Linking the regression analysis with a statistical interpretation
  • Expectation value and variance
  • The singular value decompostion
  • -
  • Code examples for Ridge and Lasso Regression
  • -
  • From standard regression to Ridge regressions
  • -
  • Fixing the singularity
  • -
  • A second-order polynomial with Ridge and Lasso
  • -
  • Fitting vs. predicting when data is in the model class
  • -
  • Fitting versus predicting when data is not in the model class
  • -
  • The code
  • -
  • Generating test data
  • -
  • Lasso regression
  • -
  • Logistic regression
  • +
  • From standard regression to Ridge regressions
  • +
  • Fixing the singularity
  • +
  • Fitting vs. predicting when data is in the model class
  • +
  • Fitting versus predicting when data is not in the model class
  • +
  • An example code without the model assessment part
  • +
  • Generating test data
  • +
  • How can we effectively evaluate the various models?
  • +
  • Code examples for Ridge and Lasso Regression
  • +
  • A second-order polynomial with Ridge and Lasso
  • +
  • Resampling methods
  • +
  • Resampling approaches can be computationally expensive
  • +
  • Log-likelihood
  • +
  • Cross-validation
  • +
  • Computationally expensive
  • +
  • Various steps in cross-validation
  • +
  • How to set up the cross-validation for Ridge and/or Lasso
  • +
  • Predicted Residual Error Sum of Squares
  • +
  • Bootstrap
  • @@ -251,7 +279,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Sep 6, 2018

    +

    Sep 7, 2018


    @@ -275,7 +303,7 @@ MathJax.Hub.Config({

  • 9
  • 10
  • ...
  • -
  • 46
  • +
  • 54
  • »
  • diff --git a/doc/pub/Regression/html/Regression-reveal.html b/doc/pub/Regression/html/Regression-reveal.html index 13e0c45e3..ee2d9bcc5 100644 --- a/doc/pub/Regression/html/Regression-reveal.html +++ b/doc/pub/Regression/html/Regression-reveal.html @@ -148,7 +148,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

     
    -

    Sep 6, 2018

    +

    Sep 7, 2018


    @@ -1282,7 +1282,287 @@ $$

    -

    Code examples for Ridge and Lasso Regression

    +

    From standard regression to Ridge regressions

    + +

    +One of the typical problems we encounter with linear regression, in particular +when the matrix \( \hat{X} \) (our so-called design matrix) is high-dimensional, +are problems with near singular or singular matrices. The column vectors of \( \hat{X} \) +may be linearly dependent, normally referred to as super-collinearity. +This means that the matrix may be rank deficient and it is basically impossible to +to model the data using linear regression. As an example, consider the matrix +

     
    +$$ +\begin{align*} +\mathbf{X} & = \left[ +\begin{array}{rrr} +1 & -1 & 2 +\\ +1 & 0 & 1 +\\ +1 & 2 & -1 +\\ +1 & 1 & 0 +\end{array} \right] +\end{align*} +$$ +

     
    + +

    +The columns of \( \hat{X} \) are linearly dependent. We se this easily since the +the first column is the row-wise sum of the other two columns. The rank (more correct, +the column rank) of a matrix is the dimension of the space spanned by the +column vectors. Hence, the rank of \( \mathbf{X} \) is equal to the number +of linearly independent columns. In this particular case the matrix has rank 2. + +

    +Super-collinearity of an \( (n \times p) \)-dimensional design matrix \( \mathbf{X} \) implies +that the inverse of the matrix \( \hat{X}^T\hat{x} \) (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this +

     
    +$$ +\begin{align*} +\hat{X} & = \left[ +\begin{array}{rr} +1 & -1 +\\ +1 & -1 +\end{array} \right]. +\end{align*} +$$ +

     
    + +We see easily that \( \mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0 \). Hence, \( \mathbf{X} \) is singular and its inverse is undefined. +This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigenvalue which is zero. +

    + + +
    +

    Fixing the singularity

    + +

    +If our design matrix \( \hat{X} \) which enters the linear regression problem +

     
    +$$ +\begin{align} +\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, +\tag{1} +\end{align} +$$ +

     
    + +has linearly dependent column vectors, we will not be able to compute the inverse +of \( \hat{X}^T\hat{X} \) and we cannot find the parameters (estimators) \( \beta_i \). +The estimators are only well-defined if \( (\hat{X}^{T}\hat{X})^{-1} \) exits. +This is more likely to happen when the matrix \( \hat{X} \) is high-dimensional. In this case it is likely to encounter a situation where +the regression parameters \( \beta_i \) cannot be estimated. + +

    +The ad hoc approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change +

     
    +$$ +\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, +$$ +

     
    + +where \( \hat{I} \) is the identity matrix. +

    + + +
    +

    Fitting vs. predicting when data is in the model class

    + +

    +We start by considering the case +\( f(x)=2x \). + +

    +Then the data is clearly generated by a model that is contained within +all three model classes we are using to make predictions (linear +models, third order polynomials, and tenth order polynomials). + +

    +Run the code for the following cases: + +

      +

    1. For \( f(x)=2x \) , \( Ntrain=10 \) and \( \sigma =0 \) (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when \( x \in [0,1] \) . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?
    2. +

    3. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?
    4. +

    5. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example \( x \in [0,1.2] \) ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?
    6. +

    7. Repeat the above for \( f(x)=2x \) , \( Ntrain=10 \) , and \( \sigma=1 \) . What changes?
    8. +
    +

    + +Repeat the exercises above for \( f(x)=2x \) , \( Ntrain=100 \) , and \( \sigma=1 \) . What changes? +Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well. +

    + + +
    +

    Fitting versus predicting when data is not in the model class

    + +

    +Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider \( f(x)=2x-10x^5+15x^{10} \) . Notice that the for linear and third-order polynomial the true model \( f(x) \) is not contained in model class. + +

      +

    1. Do better fits lead to better predictions?
    2. +

    3. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points \( Ntrain \) and \( \sigma \)?
    4. +
    +

    + +Summarize what you think you learned about the relationship of knowing the true model class and predictive power. +

    + + +
    +

    An example code without the model assessment part

    + +

    + + +

    import numpy as np
    +import sklearn as sk
    +from sklearn import datasets, linear_model
    +from sklearn.preprocessing import PolynomialFeatures
    +
    +import matplotlib as mpl
    +from matplotlib import pyplot as plt
    +
    +%matplotlib notebook
    +
    +# The Training Data
    +
    +N_train=100
    +
    +sigma_train=1;
    +
    +# Train on integers
    +x=np.linspace(0.05,0.95,N_train)
    +# Draw random noise
    +s = sigma_train*np.random.randn(N_train)
    +
    +#linear
    +y=2*x+s
    +
    +#Tenth Order
    +#y=2*x-10*x**5+15*x**10+s
    +
    +p1=plt.plot(x,y, "o",ms=15, label='Training')
    +
    +#Linear Regression
    +# Create linear regression object
    +clf = linear_model.LinearRegression()
    +
    +# Train the model using the training sets
    +clf.fit(x[:, np.newaxis], y)
    +# The coefficients
    +
    +xplot=np.linspace(0.02,0.98,200)
    +linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')
    +
    +#Polynomial Regression
    +
    +
    +poly3 = PolynomialFeatures(degree=3)
    +X = poly3.fit_transform(x[:,np.newaxis])
    +clf3 = linear_model.LinearRegression()
    +clf3.fit(X,y)
    +
    +
    +Xplot=poly3.fit_transform(xplot[:,np.newaxis])
    +poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')
    +
    +
    +
    +#poly5 = PolynomialFeatures(degree=5)
    +#X = poly5.fit_transform(x[:,np.newaxis])
    +#clf5 = linear_model.LinearRegression()
    +#clf5.fit(X,y)
    +
    +#Xplot=poly5.fit_transform(xplot[:,np.newaxis])
    +#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)
    +
    +poly10 = PolynomialFeatures(degree=10)
    +X = poly10.fit_transform(x[:,np.newaxis])
    +clf10 = linear_model.LinearRegression()
    +clf10.fit(X,y)
    +
    +Xplot=poly10.fit_transform(xplot[:,np.newaxis])
    +poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')
    +
    +axes = plt.gca()
    +axes.set_ylim([-7,7])
    +
    +handles, labels=axes.get_legend_handles_labels()
    +plt.legend(handles,labels, loc='lower center')
    +plt.xlabel("$x$")
    +plt.ylabel("$y$")
    +Title="$N=$"+str(N_train)+", $\sigma=$"+str(sigma_train)
    +plt.title(Title+" (train)")
    +plt.tight_layout()
    +plt.show()
    +
    +
    + + +
    +

    Generating test data

    +

    + + +

    # Generate Test Data
    +
    +#Number of test data
    +N_test=20
    +
    +sigma_test=sigma_train
    +
    +max_x=1.2
    +x_test=max_x*np.random.random(N_test)
    +# Draw random noise
    +s_test = sigma_test*np.random.randn(N_test)
    +
    +#Linear
    +y_test=2*x_test+s_test
    +#Tenth order
    +#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test
    +
    +#Make design matrices for prediction
    +x_plot=np.linspace(0,max_x, 200)
    +X3 = poly3.fit_transform(x_plot[:,np.newaxis])
    +X10 = poly10.fit_transform(x_plot[:,np.newaxis])
    +
    +%matplotlib notebook
    +
    +fig = plt.figure() 
    +p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')
    +p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')
    +p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')
    +p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')
    +
    +
    +plt.legend(loc=2)
    +plt.xlabel('$x$')
    +plt.ylabel('$y$')
    +plt.legend(loc='best')
    +plt.title(Title+" (pred.)")
    +plt.tight_layout()
    +plt.show()
    +
    +
    + + +
    +

    How can we effectively evaluate the various models?

    + +

    +In Ridge regression and the subsequent discussion of its properties +the bias or penalty parameter is considered known or `given'. In +practice, it is unknown and the user needs to make an informed +decision on its value. How do we do that? Much of the same considerations apply to the Lasso method. +

    + + +
    +

    Code examples for Ridge and Lasso Regression

    @@ -1364,94 +1644,7 @@ plt.show()

    -

    From standard regression to Ridge regressions

    - -

    -One of the typical problems we encounter with linear regression, in particular -when the matrix \( \hat{X} \) (our so-called design matrix) is high-dimensional, -are problems with near singular or singular matrices. The column vectors of \( \hat{X} \) -may be linearly dependent, normally referred to as super-collinearity. -This means that the matrix may be rank deficient and it is basically impossible to -to model the data using linear regression. As an example, consider the matrix -

     
    -$$ -\begin{align*} -\mathbf{X} & = \left[ -\begin{array}{rrr} -1 & -1 & 2 -\\ -1 & 0 & 1 -\\ -1 & 2 & -1 -\\ -1 & 1 & 0 -\end{array} \right] -\end{align*} -$$ -

     
    - -

    -The columns of \( \hat{X} \) are linearly dependent. We se this easily since the -the first column is the row-wise sum of the other two columns. The rank (more correct, -the column rank) of a matrix is the dimension of the space spanned by the -column vectors. Hence, the rank of \( \mathbf{X} \) is equal to the number -of linearly independent columns. In this particular case the matrix has rank 2. - -

    -Super-collinearity of an \( (n \times p) \)-dimensional design matrix \( \mathbf{X} \) implies -that the inverse of the matrix \( \hat{X}^T\hat{x} \) (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this -

     
    -$$ -\begin{align*} -\hat{X} & = \left[ -\begin{array}{rr} -1 & -1 -\\ -1 & -1 -\end{array} \right]. -\end{align*} -$$ -

     
    - -We see easily that \( \mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0 \). Hence, \( \mathbf{X} \) is singular and its inverse is undefined. -This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigenvalue which is zero. -

    - - -
    -

    Fixing the singularity

    - -

    -If our design matrix \( \hat{X} \) which enters the linear regression problem -

     
    -$$ -\begin{align} -\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, -\tag{1} -\end{align} -$$ -

     
    - -has linearly dependent column vectors, we will not be able to compute the inverse -of \( \hat{X}^T\hat{X} \) and we cannot find the parameters (estimators) \( \beta_i \). -The estimators are only well-defined if \( (\hat{X}^{T}\hat{X})^{-1} \) exits. -This is more likely to happen when the matrix \( \hat{X} \) is high-dimensional. In this case it is likely to encounter a situation where -the regression parameters \( \beta_i \) cannot be estimated. - -

    -The ad hoc approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change -

     
    -$$ -\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, -$$ -

     
    - -where \( \hat{I} \) is the identity matrix. -

    - - -
    -

    A second-order polynomial with Ridge and Lasso

    +

    A second-order polynomial with Ridge and Lasso

    @@ -1566,201 +1759,233 @@ plt.show()

    -

    Fitting vs. predicting when data is in the model class

    +

    Resampling methods

    +
    + +

    +Resampling methods are an indispensable tool in modern +statistics. They involve repeatedly drawing samples from a training +set and refitting a model of interest on each sample in order to +obtain additional information about the fitted model. For example, in +order to estimate the variability of a linear regression fit, we can +repeatedly draw different samples from the training data, fit a linear +regression to each new sample, and then examine the extent to which +the resulting fits differ. Such an approach may allow us to obtain +information that would not be available from fitting the model only +once using the original training sample. +

    +
    + + +
    +

    Resampling approaches can be computationally expensive

    +
    + +

    +Resampling approaches can be computationally expensive, because they +involve fitting the same statistical method multiple times using +different subsets of the training data. However, due to recent +advances in computing power, the computational requirements of +resampling methods generally are not prohibitive. In this chapter, we +discuss two of the most commonly used resampling methods, +cross-validation and the bootstrap. Both methods are important tools +in the practical application of many statistical learning +procedures. For example, cross-validation can be used to estimate the +test error associated with a given statistical learning method in +order to evaluate its performance, or to select the appropriate level +of flexibility. The process of evaluating a model’s performance is +known as model assessment, whereas the process of selecting the proper +level of flexibility for a model is known as model selection. The +bootstrap is widely used. +

    +
    + + +
    +

    Log-likelihood

    -We start by considering the case -\( f(x)=2x \). +A popular strategy is to choose a penalty parameter that yields a good +but parsimonious model. Information criteria measure the balance +between model fit and model complexity. One possibility is Aikaike's +information criterion (AIC). +The AIC measures model fit by the log-likelihood +and model complexity is measured by the number of parameters used by +the model. The number of model parameters in regular regression simply +corresponds to the number of covariates in the model. Or, by the +degrees of freedom consumed by the model, which is equivalent to the +trace of the hat matrix. For ridge regression it thus seems natural to +define model complexity analogously by the trace of the ridge hat +matrix. This yields the AIC for the linear regression model with ridge +estimates: + +

     
    +$$ +\begin{align*} +\mbox{AIC}(\lambda) & = 2 \, p - 2 \log(\hat{L}) +\\ +& = 2 \, \mbox{tr} [\mathbf{H}(\lambda)] - 2 \log\{L[\hat{\beta}(\lambda), \hat{\sigma}^2(\lambda)]\} +\\ +& = 2 \, \sum_{j=1}^p \frac{d_{jj}^2}{d_{jj}^2 + \lambda} ++ 2 n \, \log[\sqrt{2 \, \pi} \, \hat{\sigma}(\lambda)] + \frac{1}{\hat{\sigma}^2(\lambda)} \sum_{i=1}^n [y_i - \mathbf{X}_{i, \ast} \, \hat{\beta}(\lambda)]^2. +\end{align*} +$$ +

     
    + +The value of \( \lambda \) which minimizes \( \mbox{AIC}(\lambda) \) corresponds to the `optimal' balance of model complexity and overfitting. +

    + + +
    +

    Cross-validation

    -Then the data is clearly generated by a model that is contained within -all three model classes we are using to make predictions (linear -models, third order polynomials, and tenth order polynomials). +Instead of choosing the penalty parameter to balance model fit with +model complexity, cross-validation requires it (i.e. the penalty +parameter) to yield a model with good prediction +performance. Commonly, this performance is evaluated on novel +data. Novel data need not be easy to come by and one has to make do +with the data at hand. The setting of `original' and novel data is +then mimicked by sample splitting: the data set is divided into two +(groups of samples). One of these two data sets, called the training +set, plays the role of `original' data on which the model is +built. The second of these data sets, called the test set, plays the +role of the `novel' data and is used to evaluate the prediction +performance (often operationalized as the log-likelihood or the +prediction error or its square or the R2 score) of the model built on the training data set. This +procedure (model building and prediction evaluation on training and +test set, respectively) is done for a collection of possible penalty +parameter choices. The penalty parameter that yields the model with +the best prediction performance is to be preferred. The thus obtained +performance evaluation depends on the actual split of the data set. To +remove this dependence the data set is split many times into a +training and test set. For each split the model parameters are +estimated for all choices of \( \lambda \) using the training data and +estimated parameters are evaluated on the corresponding test set. The +penalty parameter that on average over the test sets performs best (in +some sense) is then selected. +

    + + +
    +

    Computationally expensive

    -Run the code for the following cases: +The validation set approach is conceptually simple and is easy to implement. But it has two potential drawbacks: + +

      +

    • The validation estimate of the test error rate can be highly variable, depending on precisely which observations are included in the training set and which observations are included in the validation set.
    • +

    • In the validation approach, only a subset of the observations, those that are included in the training set rather than in the validation set are used to fit the model. Since statistical methods tend to perform worse when trained on fewer observations, this suggests that the validation set error rate may tend to overestimate the test error rate for the model fit on the entire data set.
    • +
    +
    + + +
    +

    Various steps in cross-validation

    + +

    +When the repetitive splitting of the data set is done randomly, +samples may accidently end up in a fast majority of the splits in +either training or test set. Such samples may have an unbalanced +influence on either model building or prediction evaluation. To avoid +this \( k \)-fold cross-validation structures the data splitting. The +samples are divided into \( k \) more or less equally sized exhaustive and +mutually exclusive subsets. In turn (at each split) one of these +subsets plays the role of the test set while the union of the +remaining subsets constitutes the training set. Such a splitting +warrants a balanced representation of each sample in both training and +test set over the splits. Still the division into the \( k \) subsets +involves a degree of randomness. This may be fully excluded when +choosing \( k=n \). This particular case is referred to as leave-one-out +cross-validation (LOOCV). +

    + + +
    +

    How to set up the cross-validation for Ridge and/or Lasso

      -

    1. For \( f(x)=2x \) , \( Ntrain=10 \) and \( \sigma =0 \) (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when \( x \in [0,1] \) . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?
    2. -

    3. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?
    4. -

    5. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example \( x \in [0,1.2] \) ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?
    6. -

    7. Repeat the above for \( f(x)=2x \) , \( Ntrain=10 \) , and \( \sigma=1 \) . What changes?
    8. +

    9. Define a range of interest for the penalty parameter.
    10. +

    11. Divide the data set into training and test set comprising samples \( \{1, \ldots, n\} \setminus i \) and \( \{ i \} \), respectively.
    12. +

    13. Fit the linear regression model by means of ridge estimation for each \( \lambda \) in the grid using the training set as
    -

    +

     
    +$$ +\begin{align*} +\hat{\beta}_{-i}(\lambda) & = ( \hat{X}_{-i, \ast}^{\top} +\hat{X}_{-i, \ast} + \lambda \hat{I}_{pp})^{-1} +\hat{X}_{-i, \ast}^{\top} \hat{y}_{-i} +\end{align*} +$$ +

     
    -Repeat the exercises above for \( f(x)=2x \) , \( Ntrain=100 \) , and \( \sigma=1 \) . What changes? -Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well. -

    - - -
    -

    Fitting versus predicting when data is not in the model class

    - -

    -Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider \( f(x)=2x-10x^5+15x^{10} \) . Notice that the for linear and third-order polynomial the true model \( f(x) \) is not contained in model class. +and the corresponding estimate of the error variance \( \hat{\sigma}_{-i}^2(\lambda) \).

      -

    1. Do better fits lead to better predictions?
    2. -

    3. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points \( Ntrain \) and \( \sigma \)?
    4. +

    5. Evaluate the prediction performance of these models on the test set by \( \log\{L[y_i, \hat{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\} \). Or, by the prediction error \( |y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)| \), the relative error, the error squared or the R2 score function.
    6. +

    7. Repeat steps 1) to 3) such that each sample plays the role of the test set once.
    8. +

    9. Average the prediction performances of the test sets at each grid point of the penalty bias/parameter
    -

    +

     
    +$$ +\begin{align*} +\frac{1}{n} \sum_{i = 1}^n \log\{L[Y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}. +\end{align*} +$$ +

     
    -Summarize what you think you learned about the relationship of knowing the true model class and predictive power. +The quantity above is called the cross-validated log-likelihood. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. + +

      +

    1. The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions.
    2. +
    -

    The code

    +

    Predicted Residual Error Sum of Squares

    +
    + +

    +Another approach in the LOOCV scheme is to the use the so-called Predicted Residual Error Sum of Squares (PRESS).

    +We can define the optimal penalty parameter to minimize +

     
    +$$ +\begin{align*} +\lambda_{\mbox{{\tiny opt}}} = \arg \min_{\lambda} \frac{1}{n} \sum_{i=1}^n [y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)]^2. +\end{align*} +$$ +

     
    - -

    import numpy as np
    -import sklearn as sk
    -from sklearn import datasets, linear_model
    -from sklearn.preprocessing import PolynomialFeatures
    -
    -import matplotlib as mpl
    -from matplotlib import pyplot as plt
    -
    -%matplotlib notebook
    -
    -# The Training Data
    -
    -N_train=100
    -
    -sigma_train=1;
    -
    -# Train on integers
    -x=np.linspace(0.05,0.95,N_train)
    -# Draw random noise
    -s = sigma_train*np.random.randn(N_train)
    -
    -#linear
    -y=2*x+s
    -
    -#Tenth Order
    -#y=2*x-10*x**5+15*x**10+s
    -
    -p1=plt.plot(x,y, "o",ms=15, label='Training')
    -
    -#Linear Regression
    -# Create linear regression object
    -clf = linear_model.LinearRegression()
    -
    -# Train the model using the training sets
    -clf.fit(x[:, np.newaxis], y)
    -# The coefficients
    -
    -xplot=np.linspace(0.02,0.98,200)
    -linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')
    -
    -#Polynomial Regression
    -
    -
    -poly3 = PolynomialFeatures(degree=3)
    -X = poly3.fit_transform(x[:,np.newaxis])
    -clf3 = linear_model.LinearRegression()
    -clf3.fit(X,y)
    -
    -
    -Xplot=poly3.fit_transform(xplot[:,np.newaxis])
    -poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')
    -
    -
    -
    -#poly5 = PolynomialFeatures(degree=5)
    -#X = poly5.fit_transform(x[:,np.newaxis])
    -#clf5 = linear_model.LinearRegression()
    -#clf5.fit(X,y)
    -
    -#Xplot=poly5.fit_transform(xplot[:,np.newaxis])
    -#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)
    -
    -poly10 = PolynomialFeatures(degree=10)
    -X = poly10.fit_transform(x[:,np.newaxis])
    -clf10 = linear_model.LinearRegression()
    -clf10.fit(X,y)
    -
    -Xplot=poly10.fit_transform(xplot[:,np.newaxis])
    -poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')
    -
    -axes = plt.gca()
    -axes.set_ylim([-7,7])
    -
    -handles, labels=axes.get_legend_handles_labels()
    -plt.legend(handles,labels, loc='lower center')
    -plt.xlabel("$x$")
    -plt.ylabel("$y$")
    -Title="$N=$"+str(N_train)+", $\sigma=$"+str(sigma_train)
    -plt.title(Title+" (train)")
    -plt.tight_layout()
    -plt.show()
    -
    -
    - - -
    -

    Generating test data

    - - -

    # Generate Test Data
    -
    -#Number of test data
    -N_test=20
    -
    -sigma_test=sigma_train
    -
    -max_x=1.2
    -x_test=max_x*np.random.random(N_test)
    -# Draw random noise
    -s_test = sigma_test*np.random.randn(N_test)
    -
    -#Linear
    -y_test=2*x_test+s_test
    -#Tenth order
    -#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test
    -
    -#Make design matrices for prediction
    -x_plot=np.linspace(0,max_x, 200)
    -X3 = poly3.fit_transform(x_plot[:,np.newaxis])
    -X10 = poly10.fit_transform(x_plot[:,np.newaxis])
    -
    -%matplotlib notebook
    -
    -fig = plt.figure() 
    -p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')
    -p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')
    -p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')
    -p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')
    -
    -
    -plt.legend(loc=2)
    -plt.xlabel('$x$')
    -plt.ylabel('$y$')
    -plt.legend(loc='best')
    -plt.title(Title+" (pred.)")
    -plt.tight_layout()
    -plt.show()
    -
    -#Linear Filename
    -#filename_test=Title+"pred-linear.pdf"
    -#Tenth Order Filename
    -#filename_test=Title+"pred-o10.pdf"
    -#plt.savefig(filename_test)
    -#plt.ylim((-6,12))
    -
    +The LOOCV prediction performance can be +expressed analytically in terms of the known quantities derived from +the design matrix and the parameters \( \beta \). +
    -

    Lasso regression

    -
    +

    Bootstrap

    +
    + +

    +Bootstrapping is a nonparametric approach to statistical inference +that substitutes computation for more traditional distributional +assumptions and asymptotic results. Bootstrapping offers a number of +advantages: +

      +

    1. The bootstrap is quite general, although there are some cases in which it fails.
    2. -
      -

      Logistic regression

      +

    3. Because it does not require distributional assumptions (such as normally distributed errors), the bootstrap can provide more accurate inferences when the data are not well behaved or when the sample size is small.
    4. + +

    5. It is possible to apply the bootstrap to statistics with sampling distributions that are difficult to derive, even asymptotically.
    6. +

    7. It is relatively simple to apply the bootstrap to complex data-collection plans (such as stratified and clustered samples).
    8. +
    +
    diff --git a/doc/pub/Regression/html/Regression-solarized.html b/doc/pub/Regression/html/Regression-solarized.html index 9b2031654..afaf59f99 100644 --- a/doc/pub/Regression/html/Regression-solarized.html +++ b/doc/pub/Regression/html/Regression-solarized.html @@ -130,31 +130,51 @@ div { text-align: justify; text-justify: inter-word; } '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -196,7 +216,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Sep 6, 2018

    +

    Sep 7, 2018












    @@ -1236,7 +1256,275 @@ $$











    -

    Code examples for Ridge and Lasso Regression

    +

    From standard regression to Ridge regressions

    + +

    +One of the typical problems we encounter with linear regression, in particular +when the matrix \( \hat{X} \) (our so-called design matrix) is high-dimensional, +are problems with near singular or singular matrices. The column vectors of \( \hat{X} \) +may be linearly dependent, normally referred to as super-collinearity. +This means that the matrix may be rank deficient and it is basically impossible to +to model the data using linear regression. As an example, consider the matrix +$$ +\begin{align*} +\mathbf{X} & = \left[ +\begin{array}{rrr} +1 & -1 & 2 +\\ +1 & 0 & 1 +\\ +1 & 2 & -1 +\\ +1 & 1 & 0 +\end{array} \right] +\end{align*} +$$ + +

    +The columns of \( \hat{X} \) are linearly dependent. We se this easily since the +the first column is the row-wise sum of the other two columns. The rank (more correct, +the column rank) of a matrix is the dimension of the space spanned by the +column vectors. Hence, the rank of \( \mathbf{X} \) is equal to the number +of linearly independent columns. In this particular case the matrix has rank 2. + +

    +Super-collinearity of an \( (n \times p) \)-dimensional design matrix \( \mathbf{X} \) implies +that the inverse of the matrix \( \hat{X}^T\hat{x} \) (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this +$$ +\begin{align*} +\hat{X} & = \left[ +\begin{array}{rr} +1 & -1 +\\ +1 & -1 +\end{array} \right]. +\end{align*} +$$ + +We see easily that \( \mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0 \). Hence, \( \mathbf{X} \) is singular and its inverse is undefined. +This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigenvalue which is zero. + +

    +









    + +

    Fixing the singularity

    + +

    +If our design matrix \( \hat{X} \) which enters the linear regression problem +$$ +\begin{align} +\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, +\label{_auto1} +\end{align} +$$ + +has linearly dependent column vectors, we will not be able to compute the inverse +of \( \hat{X}^T\hat{X} \) and we cannot find the parameters (estimators) \( \beta_i \). +The estimators are only well-defined if \( (\hat{X}^{T}\hat{X})^{-1} \) exits. +This is more likely to happen when the matrix \( \hat{X} \) is high-dimensional. In this case it is likely to encounter a situation where +the regression parameters \( \beta_i \) cannot be estimated. + +

    +The ad hoc approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change +$$ +\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, +$$ + +where \( \hat{I} \) is the identity matrix. + +

    +









    + +

    Fitting vs. predicting when data is in the model class

    + +

    +We start by considering the case +\( f(x)=2x \). + +

    +Then the data is clearly generated by a model that is contained within +all three model classes we are using to make predictions (linear +models, third order polynomials, and tenth order polynomials). + +

    +Run the code for the following cases: + +

      +
    1. For \( f(x)=2x \) , \( Ntrain=10 \) and \( \sigma =0 \) (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when \( x \in [0,1] \) . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?
    2. +
    3. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?
    4. +
    5. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example \( x \in [0,1.2] \) ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?
    6. +
    7. Repeat the above for \( f(x)=2x \) , \( Ntrain=10 \) , and \( \sigma=1 \) . What changes?
    8. +
    + +Repeat the exercises above for \( f(x)=2x \) , \( Ntrain=100 \) , and \( \sigma=1 \) . What changes? +Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well. + +

    +









    + +

    Fitting versus predicting when data is not in the model class

    + +

    +Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider \( f(x)=2x-10x^5+15x^{10} \) . Notice that the for linear and third-order polynomial the true model \( f(x) \) is not contained in model class. + +

      +
    1. Do better fits lead to better predictions?
    2. +
    3. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points \( Ntrain \) and \( \sigma \)?
    4. +
    + +Summarize what you think you learned about the relationship of knowing the true model class and predictive power. + +

    +









    + +

    An example code without the model assessment part

    + +

    + + +

    import numpy as np
    +import sklearn as sk
    +from sklearn import datasets, linear_model
    +from sklearn.preprocessing import PolynomialFeatures
    +
    +import matplotlib as mpl
    +from matplotlib import pyplot as plt
    +
    +%matplotlib notebook
    +
    +# The Training Data
    +
    +N_train=100
    +
    +sigma_train=1;
    +
    +# Train on integers
    +x=np.linspace(0.05,0.95,N_train)
    +# Draw random noise
    +s = sigma_train*np.random.randn(N_train)
    +
    +#linear
    +y=2*x+s
    +
    +#Tenth Order
    +#y=2*x-10*x**5+15*x**10+s
    +
    +p1=plt.plot(x,y, "o",ms=15, label='Training')
    +
    +#Linear Regression
    +# Create linear regression object
    +clf = linear_model.LinearRegression()
    +
    +# Train the model using the training sets
    +clf.fit(x[:, np.newaxis], y)
    +# The coefficients
    +
    +xplot=np.linspace(0.02,0.98,200)
    +linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')
    +
    +#Polynomial Regression
    +
    +
    +poly3 = PolynomialFeatures(degree=3)
    +X = poly3.fit_transform(x[:,np.newaxis])
    +clf3 = linear_model.LinearRegression()
    +clf3.fit(X,y)
    +
    +
    +Xplot=poly3.fit_transform(xplot[:,np.newaxis])
    +poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')
    +
    +
    +
    +#poly5 = PolynomialFeatures(degree=5)
    +#X = poly5.fit_transform(x[:,np.newaxis])
    +#clf5 = linear_model.LinearRegression()
    +#clf5.fit(X,y)
    +
    +#Xplot=poly5.fit_transform(xplot[:,np.newaxis])
    +#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)
    +
    +poly10 = PolynomialFeatures(degree=10)
    +X = poly10.fit_transform(x[:,np.newaxis])
    +clf10 = linear_model.LinearRegression()
    +clf10.fit(X,y)
    +
    +Xplot=poly10.fit_transform(xplot[:,np.newaxis])
    +poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')
    +
    +axes = plt.gca()
    +axes.set_ylim([-7,7])
    +
    +handles, labels=axes.get_legend_handles_labels()
    +plt.legend(handles,labels, loc='lower center')
    +plt.xlabel("$x$")
    +plt.ylabel("$y$")
    +Title="$N=$"+str(N_train)+", $\sigma=$"+str(sigma_train)
    +plt.title(Title+" (train)")
    +plt.tight_layout()
    +plt.show()
    +
    +

    + + +

    Generating test data

    +

    + + +

    # Generate Test Data
    +
    +#Number of test data
    +N_test=20
    +
    +sigma_test=sigma_train
    +
    +max_x=1.2
    +x_test=max_x*np.random.random(N_test)
    +# Draw random noise
    +s_test = sigma_test*np.random.randn(N_test)
    +
    +#Linear
    +y_test=2*x_test+s_test
    +#Tenth order
    +#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test
    +
    +#Make design matrices for prediction
    +x_plot=np.linspace(0,max_x, 200)
    +X3 = poly3.fit_transform(x_plot[:,np.newaxis])
    +X10 = poly10.fit_transform(x_plot[:,np.newaxis])
    +
    +%matplotlib notebook
    +
    +fig = plt.figure() 
    +p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')
    +p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')
    +p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')
    +p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')
    +
    +
    +plt.legend(loc=2)
    +plt.xlabel('$x$')
    +plt.ylabel('$y$')
    +plt.legend(loc='best')
    +plt.title(Title+" (pred.)")
    +plt.tight_layout()
    +plt.show()
    +
    +

    +









    + +

    How can we effectively evaluate the various models?

    + +

    +In Ridge regression and the subsequent discussion of its properties +the bias or penalty parameter is considered known or `given'. In +practice, it is unknown and the user needs to make an informed +decision on its value. How do we do that? Much of the same considerations apply to the Lasso method. + +

    +









    + +

    Code examples for Ridge and Lasso Regression

    @@ -1317,86 +1605,7 @@ plt.show()











    -

    From standard regression to Ridge regressions

    - -

    -One of the typical problems we encounter with linear regression, in particular -when the matrix \( \hat{X} \) (our so-called design matrix) is high-dimensional, -are problems with near singular or singular matrices. The column vectors of \( \hat{X} \) -may be linearly dependent, normally referred to as super-collinearity. -This means that the matrix may be rank deficient and it is basically impossible to -to model the data using linear regression. As an example, consider the matrix -$$ -\begin{align*} -\mathbf{X} & = \left[ -\begin{array}{rrr} -1 & -1 & 2 -\\ -1 & 0 & 1 -\\ -1 & 2 & -1 -\\ -1 & 1 & 0 -\end{array} \right] -\end{align*} -$$ - -

    -The columns of \( \hat{X} \) are linearly dependent. We se this easily since the -the first column is the row-wise sum of the other two columns. The rank (more correct, -the column rank) of a matrix is the dimension of the space spanned by the -column vectors. Hence, the rank of \( \mathbf{X} \) is equal to the number -of linearly independent columns. In this particular case the matrix has rank 2. - -

    -Super-collinearity of an \( (n \times p) \)-dimensional design matrix \( \mathbf{X} \) implies -that the inverse of the matrix \( \hat{X}^T\hat{x} \) (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this -$$ -\begin{align*} -\hat{X} & = \left[ -\begin{array}{rr} -1 & -1 -\\ -1 & -1 -\end{array} \right]. -\end{align*} -$$ - -We see easily that \( \mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0 \). Hence, \( \mathbf{X} \) is singular and its inverse is undefined. -This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigenvalue which is zero. - -

    -









    - -

    Fixing the singularity

    - -

    -If our design matrix \( \hat{X} \) which enters the linear regression problem -$$ -\begin{align} -\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, -\label{_auto1} -\end{align} -$$ - -has linearly dependent column vectors, we will not be able to compute the inverse -of \( \hat{X}^T\hat{X} \) and we cannot find the parameters (estimators) \( \beta_i \). -The estimators are only well-defined if \( (\hat{X}^{T}\hat{X})^{-1} \) exits. -This is more likely to happen when the matrix \( \hat{X} \) is high-dimensional. In this case it is likely to encounter a situation where -the regression parameters \( \beta_i \) cannot be estimated. - -

    -The ad hoc approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change -$$ -\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, -$$ - -where \( \hat{I} \) is the identity matrix. - -

    -









    - -

    A second-order polynomial with Ridge and Lasso

    +

    A second-order polynomial with Ridge and Lasso

    @@ -1510,197 +1719,227 @@ plt.show()











    -

    Fitting vs. predicting when data is in the model class

    - +

    Resampling methods

    +
    +

    -We start by considering the case -\( f(x)=2x \). +Resampling methods are an indispensable tool in modern +statistics. They involve repeatedly drawing samples from a training +set and refitting a model of interest on each sample in order to +obtain additional information about the fitted model. For example, in +order to estimate the variability of a linear regression fit, we can +repeatedly draw different samples from the training data, fit a linear +regression to each new sample, and then examine the extent to which +the resulting fits differ. Such an approach may allow us to obtain +information that would not be available from fitting the model only +once using the original training sample. +

    -

    -Then the data is clearly generated by a model that is contained within -all three model classes we are using to make predictions (linear -models, third order polynomials, and tenth order polynomials). - -

    -Run the code for the following cases: - -

      -
    1. For \( f(x)=2x \) , \( Ntrain=10 \) and \( \sigma =0 \) (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when \( x \in [0,1] \) . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?
    2. -
    3. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?
    4. -
    5. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example \( x \in [0,1.2] \) ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?
    6. -
    7. Repeat the above for \( f(x)=2x \) , \( Ntrain=10 \) , and \( \sigma=1 \) . What changes?
    8. -
    - -Repeat the exercises above for \( f(x)=2x \) , \( Ntrain=100 \) , and \( \sigma=1 \) . What changes? -Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well.











    -

    Fitting versus predicting when data is not in the model class

    - +

    Resampling approaches can be computationally expensive

    +
    +

    -Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider \( f(x)=2x-10x^5+15x^{10} \) . Notice that the for linear and third-order polynomial the true model \( f(x) \) is not contained in model class. +Resampling approaches can be computationally expensive, because they +involve fitting the same statistical method multiple times using +different subsets of the training data. However, due to recent +advances in computing power, the computational requirements of +resampling methods generally are not prohibitive. In this chapter, we +discuss two of the most commonly used resampling methods, +cross-validation and the bootstrap. Both methods are important tools +in the practical application of many statistical learning +procedures. For example, cross-validation can be used to estimate the +test error associated with a given statistical learning method in +order to evaluate its performance, or to select the appropriate level +of flexibility. The process of evaluating a model’s performance is +known as model assessment, whereas the process of selecting the proper +level of flexibility for a model is known as model selection. The +bootstrap is widely used. +

    -
      -
    1. Do better fits lead to better predictions?
    2. -
    3. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points \( Ntrain \) and \( \sigma \)?
    4. -
    - -Summarize what you think you learned about the relationship of knowing the true model class and predictive power.











    -

    The code

    +

    Log-likelihood

    +A popular strategy is to choose a penalty parameter that yields a good +but parsimonious model. Information criteria measure the balance +between model fit and model complexity. One possibility is Aikaike's +information criterion (AIC). +The AIC measures model fit by the log-likelihood +and model complexity is measured by the number of parameters used by +the model. The number of model parameters in regular regression simply +corresponds to the number of covariates in the model. Or, by the +degrees of freedom consumed by the model, which is equivalent to the +trace of the hat matrix. For ridge regression it thus seems natural to +define model complexity analogously by the trace of the ridge hat +matrix. This yields the AIC for the linear regression model with ridge +estimates: - -

    import numpy as np
    -import sklearn as sk
    -from sklearn import datasets, linear_model
    -from sklearn.preprocessing import PolynomialFeatures
    +$$
    +\begin{align*}
    +\mbox{AIC}(\lambda) & =  2 \, p - 2 \log(\hat{L})
    +\\
    +& =  2 \, \mbox{tr} [\mathbf{H}(\lambda)] - 2 \log\{L[\hat{\beta}(\lambda), \hat{\sigma}^2(\lambda)]\}
    +\\
    +& =  2 \, \sum_{j=1}^p \frac{d_{jj}^2}{d_{jj}^2 + \lambda}
    ++ 2 n \, \log[\sqrt{2 \, \pi} \, \hat{\sigma}(\lambda)] +  \frac{1}{\hat{\sigma}^2(\lambda)} \sum_{i=1}^n [y_i - \mathbf{X}_{i, \ast} \, \hat{\beta}(\lambda)]^2.
    +\end{align*}
    +$$
     
    -import matplotlib as mpl
    -from matplotlib import pyplot as plt
    +The value of \( \lambda \) which minimizes \( \mbox{AIC}(\lambda) \) corresponds to the `optimal' balance of model complexity and overfitting.
     
    -%matplotlib notebook
    -
    -# The Training Data
    -
    -N_train=100
    -
    -sigma_train=1;
    -
    -# Train on integers
    -x=np.linspace(0.05,0.95,N_train)
    -# Draw random noise
    -s = sigma_train*np.random.randn(N_train)
    -
    -#linear
    -y=2*x+s
    -
    -#Tenth Order
    -#y=2*x-10*x**5+15*x**10+s
    -
    -p1=plt.plot(x,y, "o",ms=15, label='Training')
    -
    -#Linear Regression
    -# Create linear regression object
    -clf = linear_model.LinearRegression()
    -
    -# Train the model using the training sets
    -clf.fit(x[:, np.newaxis], y)
    -# The coefficients
    -
    -xplot=np.linspace(0.02,0.98,200)
    -linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')
    -
    -#Polynomial Regression
    -
    -
    -poly3 = PolynomialFeatures(degree=3)
    -X = poly3.fit_transform(x[:,np.newaxis])
    -clf3 = linear_model.LinearRegression()
    -clf3.fit(X,y)
    -
    -
    -Xplot=poly3.fit_transform(xplot[:,np.newaxis])
    -poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')
    -
    -
    -
    -#poly5 = PolynomialFeatures(degree=5)
    -#X = poly5.fit_transform(x[:,np.newaxis])
    -#clf5 = linear_model.LinearRegression()
    -#clf5.fit(X,y)
    -
    -#Xplot=poly5.fit_transform(xplot[:,np.newaxis])
    -#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)
    -
    -poly10 = PolynomialFeatures(degree=10)
    -X = poly10.fit_transform(x[:,np.newaxis])
    -clf10 = linear_model.LinearRegression()
    -clf10.fit(X,y)
    -
    -Xplot=poly10.fit_transform(xplot[:,np.newaxis])
    -poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')
    -
    -axes = plt.gca()
    -axes.set_ylim([-7,7])
    -
    -handles, labels=axes.get_legend_handles_labels()
    -plt.legend(handles,labels, loc='lower center')
    -plt.xlabel("$x$")
    -plt.ylabel("$y$")
    -Title="$N=$"+str(N_train)+", $\sigma=$"+str(sigma_train)
    -plt.title(Title+" (train)")
    -plt.tight_layout()
    -plt.show()
    -

    -

    Generating test data

    +

    Cross-validation

    +

    - - -

    # Generate Test Data
    -
    -#Number of test data
    -N_test=20
    -
    -sigma_test=sigma_train
    -
    -max_x=1.2
    -x_test=max_x*np.random.random(N_test)
    -# Draw random noise
    -s_test = sigma_test*np.random.randn(N_test)
    -
    -#Linear
    -y_test=2*x_test+s_test
    -#Tenth order
    -#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test
    -
    -#Make design matrices for prediction
    -x_plot=np.linspace(0,max_x, 200)
    -X3 = poly3.fit_transform(x_plot[:,np.newaxis])
    -X10 = poly10.fit_transform(x_plot[:,np.newaxis])
    -
    -%matplotlib notebook
    -
    -fig = plt.figure() 
    -p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')
    -p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')
    -p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')
    -p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')
    -
    -
    -plt.legend(loc=2)
    -plt.xlabel('$x$')
    -plt.ylabel('$y$')
    -plt.legend(loc='best')
    -plt.title(Title+" (pred.)")
    -plt.tight_layout()
    -plt.show()
    -
    -#Linear Filename
    -#filename_test=Title+"pred-linear.pdf"
    -#Tenth Order Filename
    -#filename_test=Title+"pred-o10.pdf"
    -#plt.savefig(filename_test)
    -#plt.ylim((-6,12))
    -
    -

    -









    - -

    Lasso regression

    +Instead of choosing the penalty parameter to balance model fit with +model complexity, cross-validation requires it (i.e. the penalty +parameter) to yield a model with good prediction +performance. Commonly, this performance is evaluated on novel +data. Novel data need not be easy to come by and one has to make do +with the data at hand. The setting of `original' and novel data is +then mimicked by sample splitting: the data set is divided into two +(groups of samples). One of these two data sets, called the training +set, plays the role of `original' data on which the model is +built. The second of these data sets, called the test set, plays the +role of the `novel' data and is used to evaluate the prediction +performance (often operationalized as the log-likelihood or the +prediction error or its square or the R2 score) of the model built on the training data set. This +procedure (model building and prediction evaluation on training and +test set, respectively) is done for a collection of possible penalty +parameter choices. The penalty parameter that yields the model with +the best prediction performance is to be preferred. The thus obtained +performance evaluation depends on the actual split of the data set. To +remove this dependence the data set is split many times into a +training and test set. For each split the model parameters are +estimated for all choices of \( \lambda \) using the training data and +estimated parameters are evaluated on the corresponding test set. The +penalty parameter that on average over the test sets performs best (in +some sense) is then selected.











    -

    Logistic regression

    +

    Computationally expensive

    + +

    +The validation set approach is conceptually simple and is easy to implement. But it has two potential drawbacks: + +

      +
    • The validation estimate of the test error rate can be highly variable, depending on precisely which observations are included in the training set and which observations are included in the validation set.
    • +
    • In the validation approach, only a subset of the observations, those that are included in the training set rather than in the validation set are used to fit the model. Since statistical methods tend to perform worse when trained on fewer observations, this suggests that the validation set error rate may tend to overestimate the test error rate for the model fit on the entire data set.
    • +
    + + + +

    Various steps in cross-validation

    + +

    +When the repetitive splitting of the data set is done randomly, +samples may accidently end up in a fast majority of the splits in +either training or test set. Such samples may have an unbalanced +influence on either model building or prediction evaluation. To avoid +this \( k \)-fold cross-validation structures the data splitting. The +samples are divided into \( k \) more or less equally sized exhaustive and +mutually exclusive subsets. In turn (at each split) one of these +subsets plays the role of the test set while the union of the +remaining subsets constitutes the training set. Such a splitting +warrants a balanced representation of each sample in both training and +test set over the splits. Still the division into the \( k \) subsets +involves a degree of randomness. This may be fully excluded when +choosing \( k=n \). This particular case is referred to as leave-one-out +cross-validation (LOOCV). + +

    + + +

    How to set up the cross-validation for Ridge and/or Lasso

    + +
      +
    1. Define a range of interest for the penalty parameter.
    2. +
    3. Divide the data set into training and test set comprising samples \( \{1, \ldots, n\} \setminus i \) and \( \{ i \} \), respectively.
    4. +
    5. Fit the linear regression model by means of ridge estimation for each \( \lambda \) in the grid using the training set as
    6. +
    + +$$ +\begin{align*} +\hat{\beta}_{-i}(\lambda) & = ( \hat{X}_{-i, \ast}^{\top} +\hat{X}_{-i, \ast} + \lambda \hat{I}_{pp})^{-1} +\hat{X}_{-i, \ast}^{\top} \hat{y}_{-i} +\end{align*} +$$ + +and the corresponding estimate of the error variance \( \hat{\sigma}_{-i}^2(\lambda) \). + +
      +
    1. Evaluate the prediction performance of these models on the test set by \( \log\{L[y_i, \hat{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\} \). Or, by the prediction error \( |y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)| \), the relative error, the error squared or the R2 score function.
    2. +
    3. Repeat steps 1) to 3) such that each sample plays the role of the test set once.
    4. +
    5. Average the prediction performances of the test sets at each grid point of the penalty bias/parameter
    6. +
    + +$$ +\begin{align*} +\frac{1}{n} \sum_{i = 1}^n \log\{L[Y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}. +\end{align*} +$$ + +The quantity above is called the cross-validated log-likelihood. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. + +
      +
    1. The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions.
    2. +
    + +









    + +

    Predicted Residual Error Sum of Squares

    +
    + +

    +Another approach in the LOOCV scheme is to the use the so-called Predicted Residual Error Sum of Squares (PRESS). + +

    +We can define the optimal penalty parameter to minimize +$$ +\begin{align*} +\lambda_{\mbox{{\tiny opt}}} = \arg \min_{\lambda} \frac{1}{n} \sum_{i=1}^n [y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)]^2. +\end{align*} +$$ + +

    +The LOOCV prediction performance can be +expressed analytically in terms of the known quantities derived from +the design matrix and the parameters \( \beta \). +

    + + +

    +









    + +

    Bootstrap

    +
    + +

    +Bootstrapping is a nonparametric approach to statistical inference +that substitutes computation for more traditional distributional +assumptions and asymptotic results. Bootstrapping offers a number of +advantages: + +

      +
    1. The bootstrap is quite general, although there are some cases in which it fails.
    2. +
    3. Because it does not require distributional assumptions (such as normally distributed errors), the bootstrap can provide more accurate inferences when the data are not well behaved or when the sample size is small.
    4. +
    5. It is possible to apply the bootstrap to statistics with sampling distributions that are difficult to derive, even asymptotically.
    6. +
    7. It is relatively simple to apply the bootstrap to complex data-collection plans (such as stratified and clustered samples).
    8. +
    +
    + diff --git a/doc/pub/Regression/html/Regression.html b/doc/pub/Regression/html/Regression.html index fd86d2474..366f94425 100644 --- a/doc/pub/Regression/html/Regression.html +++ b/doc/pub/Regression/html/Regression.html @@ -135,31 +135,51 @@ div { text-align: justify; text-justify: inter-word; } '___sec32'), ('Expectation value and variance', 2, None, '___sec33'), ('The singular value decompostion', 2, None, '___sec34'), - ('Code examples for Ridge and Lasso Regression', - 2, - None, - '___sec35'), ('From standard regression to Ridge regressions', 2, None, - '___sec36'), - ('Fixing the singularity', 2, None, '___sec37'), - ('A second-order polynomial with Ridge and Lasso', - 2, - None, - '___sec38'), + '___sec35'), + ('Fixing the singularity', 2, None, '___sec36'), ('Fitting vs. predicting when data is in the model class', 2, None, - '___sec39'), + '___sec37'), ('Fitting versus predicting when data is not in the model class', 2, None, - '___sec40'), - ('The code', 2, None, '___sec41'), - ('Generating test data', 2, None, '___sec42'), - ('Lasso regression', 2, None, '___sec43'), - ('Logistic regression', 2, None, '___sec44')]} + '___sec38'), + ('An example code without the model assessment part', + 2, + None, + '___sec39'), + ('Generating test data', 2, None, '___sec40'), + ('How can we effectively evaluate the various models?', + 2, + None, + '___sec41'), + ('Code examples for Ridge and Lasso Regression', + 2, + None, + '___sec42'), + ('A second-order polynomial with Ridge and Lasso', + 2, + None, + '___sec43'), + ('Resampling methods', 2, None, '___sec44'), + ('Resampling approaches can be computationally expensive', + 2, + None, + '___sec45'), + ('Log-likelihood', 2, None, '___sec46'), + ('Cross-validation', 2, None, '___sec47'), + ('Computationally expensive', 2, None, '___sec48'), + ('Various steps in cross-validation', 2, None, '___sec49'), + ('How to set up the cross-validation for Ridge and/or Lasso', + 2, + None, + '___sec50'), + ('Predicted Residual Error Sum of Squares', 2, None, '___sec51'), + ('Bootstrap', 2, None, '___sec52')]} end of tocinfo --> @@ -201,7 +221,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Sep 6, 2018

    +

    Sep 7, 2018












    @@ -1241,7 +1261,275 @@ $$











    -

    Code examples for Ridge and Lasso Regression

    +

    From standard regression to Ridge regressions

    + +

    +One of the typical problems we encounter with linear regression, in particular +when the matrix \( \hat{X} \) (our so-called design matrix) is high-dimensional, +are problems with near singular or singular matrices. The column vectors of \( \hat{X} \) +may be linearly dependent, normally referred to as super-collinearity. +This means that the matrix may be rank deficient and it is basically impossible to +to model the data using linear regression. As an example, consider the matrix +$$ +\begin{align*} +\mathbf{X} & = \left[ +\begin{array}{rrr} +1 & -1 & 2 +\\ +1 & 0 & 1 +\\ +1 & 2 & -1 +\\ +1 & 1 & 0 +\end{array} \right] +\end{align*} +$$ + +

    +The columns of \( \hat{X} \) are linearly dependent. We se this easily since the +the first column is the row-wise sum of the other two columns. The rank (more correct, +the column rank) of a matrix is the dimension of the space spanned by the +column vectors. Hence, the rank of \( \mathbf{X} \) is equal to the number +of linearly independent columns. In this particular case the matrix has rank 2. + +

    +Super-collinearity of an \( (n \times p) \)-dimensional design matrix \( \mathbf{X} \) implies +that the inverse of the matrix \( \hat{X}^T\hat{x} \) (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this +$$ +\begin{align*} +\hat{X} & = \left[ +\begin{array}{rr} +1 & -1 +\\ +1 & -1 +\end{array} \right]. +\end{align*} +$$ + +We see easily that \( \mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0 \). Hence, \( \mathbf{X} \) is singular and its inverse is undefined. +This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigenvalue which is zero. + +

    +









    + +

    Fixing the singularity

    + +

    +If our design matrix \( \hat{X} \) which enters the linear regression problem +$$ +\begin{align} +\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, +\label{_auto1} +\end{align} +$$ + +has linearly dependent column vectors, we will not be able to compute the inverse +of \( \hat{X}^T\hat{X} \) and we cannot find the parameters (estimators) \( \beta_i \). +The estimators are only well-defined if \( (\hat{X}^{T}\hat{X})^{-1} \) exits. +This is more likely to happen when the matrix \( \hat{X} \) is high-dimensional. In this case it is likely to encounter a situation where +the regression parameters \( \beta_i \) cannot be estimated. + +

    +The ad hoc approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change +$$ +\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, +$$ + +where \( \hat{I} \) is the identity matrix. + +

    +









    + +

    Fitting vs. predicting when data is in the model class

    + +

    +We start by considering the case +\( f(x)=2x \). + +

    +Then the data is clearly generated by a model that is contained within +all three model classes we are using to make predictions (linear +models, third order polynomials, and tenth order polynomials). + +

    +Run the code for the following cases: + +

      +
    1. For \( f(x)=2x \) , \( Ntrain=10 \) and \( \sigma =0 \) (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when \( x \in [0,1] \) . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?
    2. +
    3. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?
    4. +
    5. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example \( x \in [0,1.2] \) ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?
    6. +
    7. Repeat the above for \( f(x)=2x \) , \( Ntrain=10 \) , and \( \sigma=1 \) . What changes?
    8. +
    + +Repeat the exercises above for \( f(x)=2x \) , \( Ntrain=100 \) , and \( \sigma=1 \) . What changes? +Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well. + +

    +









    + +

    Fitting versus predicting when data is not in the model class

    + +

    +Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider \( f(x)=2x-10x^5+15x^{10} \) . Notice that the for linear and third-order polynomial the true model \( f(x) \) is not contained in model class. + +

      +
    1. Do better fits lead to better predictions?
    2. +
    3. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points \( Ntrain \) and \( \sigma \)?
    4. +
    + +Summarize what you think you learned about the relationship of knowing the true model class and predictive power. + +

    +









    + +

    An example code without the model assessment part

    + +

    + + +

    import numpy as np
    +import sklearn as sk
    +from sklearn import datasets, linear_model
    +from sklearn.preprocessing import PolynomialFeatures
    +
    +import matplotlib as mpl
    +from matplotlib import pyplot as plt
    +
    +%matplotlib notebook
    +
    +# The Training Data
    +
    +N_train=100
    +
    +sigma_train=1;
    +
    +# Train on integers
    +x=np.linspace(0.05,0.95,N_train)
    +# Draw random noise
    +s = sigma_train*np.random.randn(N_train)
    +
    +#linear
    +y=2*x+s
    +
    +#Tenth Order
    +#y=2*x-10*x**5+15*x**10+s
    +
    +p1=plt.plot(x,y, "o",ms=15, label='Training')
    +
    +#Linear Regression
    +# Create linear regression object
    +clf = linear_model.LinearRegression()
    +
    +# Train the model using the training sets
    +clf.fit(x[:, np.newaxis], y)
    +# The coefficients
    +
    +xplot=np.linspace(0.02,0.98,200)
    +linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')
    +
    +#Polynomial Regression
    +
    +
    +poly3 = PolynomialFeatures(degree=3)
    +X = poly3.fit_transform(x[:,np.newaxis])
    +clf3 = linear_model.LinearRegression()
    +clf3.fit(X,y)
    +
    +
    +Xplot=poly3.fit_transform(xplot[:,np.newaxis])
    +poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')
    +
    +
    +
    +#poly5 = PolynomialFeatures(degree=5)
    +#X = poly5.fit_transform(x[:,np.newaxis])
    +#clf5 = linear_model.LinearRegression()
    +#clf5.fit(X,y)
    +
    +#Xplot=poly5.fit_transform(xplot[:,np.newaxis])
    +#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)
    +
    +poly10 = PolynomialFeatures(degree=10)
    +X = poly10.fit_transform(x[:,np.newaxis])
    +clf10 = linear_model.LinearRegression()
    +clf10.fit(X,y)
    +
    +Xplot=poly10.fit_transform(xplot[:,np.newaxis])
    +poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')
    +
    +axes = plt.gca()
    +axes.set_ylim([-7,7])
    +
    +handles, labels=axes.get_legend_handles_labels()
    +plt.legend(handles,labels, loc='lower center')
    +plt.xlabel("$x$")
    +plt.ylabel("$y$")
    +Title="$N=$"+str(N_train)+", $\sigma=$"+str(sigma_train)
    +plt.title(Title+" (train)")
    +plt.tight_layout()
    +plt.show()
    +
    +

    + + +

    Generating test data

    +

    + + +

    # Generate Test Data
    +
    +#Number of test data
    +N_test=20
    +
    +sigma_test=sigma_train
    +
    +max_x=1.2
    +x_test=max_x*np.random.random(N_test)
    +# Draw random noise
    +s_test = sigma_test*np.random.randn(N_test)
    +
    +#Linear
    +y_test=2*x_test+s_test
    +#Tenth order
    +#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test
    +
    +#Make design matrices for prediction
    +x_plot=np.linspace(0,max_x, 200)
    +X3 = poly3.fit_transform(x_plot[:,np.newaxis])
    +X10 = poly10.fit_transform(x_plot[:,np.newaxis])
    +
    +%matplotlib notebook
    +
    +fig = plt.figure() 
    +p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')
    +p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')
    +p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')
    +p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')
    +
    +
    +plt.legend(loc=2)
    +plt.xlabel('$x$')
    +plt.ylabel('$y$')
    +plt.legend(loc='best')
    +plt.title(Title+" (pred.)")
    +plt.tight_layout()
    +plt.show()
    +
    +

    +









    + +

    How can we effectively evaluate the various models?

    + +

    +In Ridge regression and the subsequent discussion of its properties +the bias or penalty parameter is considered known or `given'. In +practice, it is unknown and the user needs to make an informed +decision on its value. How do we do that? Much of the same considerations apply to the Lasso method. + +

    +









    + +

    Code examples for Ridge and Lasso Regression

    @@ -1322,86 +1610,7 @@ plt.show()











    -

    From standard regression to Ridge regressions

    - -

    -One of the typical problems we encounter with linear regression, in particular -when the matrix \( \hat{X} \) (our so-called design matrix) is high-dimensional, -are problems with near singular or singular matrices. The column vectors of \( \hat{X} \) -may be linearly dependent, normally referred to as super-collinearity. -This means that the matrix may be rank deficient and it is basically impossible to -to model the data using linear regression. As an example, consider the matrix -$$ -\begin{align*} -\mathbf{X} & = \left[ -\begin{array}{rrr} -1 & -1 & 2 -\\ -1 & 0 & 1 -\\ -1 & 2 & -1 -\\ -1 & 1 & 0 -\end{array} \right] -\end{align*} -$$ - -

    -The columns of \( \hat{X} \) are linearly dependent. We se this easily since the -the first column is the row-wise sum of the other two columns. The rank (more correct, -the column rank) of a matrix is the dimension of the space spanned by the -column vectors. Hence, the rank of \( \mathbf{X} \) is equal to the number -of linearly independent columns. In this particular case the matrix has rank 2. - -

    -Super-collinearity of an \( (n \times p) \)-dimensional design matrix \( \mathbf{X} \) implies -that the inverse of the matrix \( \hat{X}^T\hat{x} \) (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this -$$ -\begin{align*} -\hat{X} & = \left[ -\begin{array}{rr} -1 & -1 -\\ -1 & -1 -\end{array} \right]. -\end{align*} -$$ - -We see easily that \( \mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0 \). Hence, \( \mathbf{X} \) is singular and its inverse is undefined. -This is equivalent to saying that the matrix \( \hat{X} \) has at least an eigenvalue which is zero. - -

    -









    - -

    Fixing the singularity

    - -

    -If our design matrix \( \hat{X} \) which enters the linear regression problem -$$ -\begin{align} -\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, -\label{_auto1} -\end{align} -$$ - -has linearly dependent column vectors, we will not be able to compute the inverse -of \( \hat{X}^T\hat{X} \) and we cannot find the parameters (estimators) \( \beta_i \). -The estimators are only well-defined if \( (\hat{X}^{T}\hat{X})^{-1} \) exits. -This is more likely to happen when the matrix \( \hat{X} \) is high-dimensional. In this case it is likely to encounter a situation where -the regression parameters \( \beta_i \) cannot be estimated. - -

    -The ad hoc approach which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change -$$ -\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, -$$ - -where \( \hat{I} \) is the identity matrix. - -

    -









    - -

    A second-order polynomial with Ridge and Lasso

    +

    A second-order polynomial with Ridge and Lasso

    @@ -1515,197 +1724,227 @@ plt.show()











    -

    Fitting vs. predicting when data is in the model class

    - +

    Resampling methods

    +
    +

    -We start by considering the case -\( f(x)=2x \). +Resampling methods are an indispensable tool in modern +statistics. They involve repeatedly drawing samples from a training +set and refitting a model of interest on each sample in order to +obtain additional information about the fitted model. For example, in +order to estimate the variability of a linear regression fit, we can +repeatedly draw different samples from the training data, fit a linear +regression to each new sample, and then examine the extent to which +the resulting fits differ. Such an approach may allow us to obtain +information that would not be available from fitting the model only +once using the original training sample. +

    -

    -Then the data is clearly generated by a model that is contained within -all three model classes we are using to make predictions (linear -models, third order polynomials, and tenth order polynomials). - -

    -Run the code for the following cases: - -

      -
    1. For \( f(x)=2x \) , \( Ntrain=10 \) and \( \sigma =0 \) (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when \( x \in [0,1] \) . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?
    2. -
    3. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?
    4. -
    5. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example \( x \in [0,1.2] \) ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?
    6. -
    7. Repeat the above for \( f(x)=2x \) , \( Ntrain=10 \) , and \( \sigma=1 \) . What changes?
    8. -
    - -Repeat the exercises above for \( f(x)=2x \) , \( Ntrain=100 \) , and \( \sigma=1 \) . What changes? -Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well.











    -

    Fitting versus predicting when data is not in the model class

    - +

    Resampling approaches can be computationally expensive

    +
    +

    -Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider \( f(x)=2x-10x^5+15x^{10} \) . Notice that the for linear and third-order polynomial the true model \( f(x) \) is not contained in model class. +Resampling approaches can be computationally expensive, because they +involve fitting the same statistical method multiple times using +different subsets of the training data. However, due to recent +advances in computing power, the computational requirements of +resampling methods generally are not prohibitive. In this chapter, we +discuss two of the most commonly used resampling methods, +cross-validation and the bootstrap. Both methods are important tools +in the practical application of many statistical learning +procedures. For example, cross-validation can be used to estimate the +test error associated with a given statistical learning method in +order to evaluate its performance, or to select the appropriate level +of flexibility. The process of evaluating a model’s performance is +known as model assessment, whereas the process of selecting the proper +level of flexibility for a model is known as model selection. The +bootstrap is widely used. +

    -
      -
    1. Do better fits lead to better predictions?
    2. -
    3. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points \( Ntrain \) and \( \sigma \)?
    4. -
    - -Summarize what you think you learned about the relationship of knowing the true model class and predictive power.











    -

    The code

    +

    Log-likelihood

    +A popular strategy is to choose a penalty parameter that yields a good +but parsimonious model. Information criteria measure the balance +between model fit and model complexity. One possibility is Aikaike's +information criterion (AIC). +The AIC measures model fit by the log-likelihood +and model complexity is measured by the number of parameters used by +the model. The number of model parameters in regular regression simply +corresponds to the number of covariates in the model. Or, by the +degrees of freedom consumed by the model, which is equivalent to the +trace of the hat matrix. For ridge regression it thus seems natural to +define model complexity analogously by the trace of the ridge hat +matrix. This yields the AIC for the linear regression model with ridge +estimates: - -

    import numpy as np
    -import sklearn as sk
    -from sklearn import datasets, linear_model
    -from sklearn.preprocessing import PolynomialFeatures
    +$$
    +\begin{align*}
    +\mbox{AIC}(\lambda) & =  2 \, p - 2 \log(\hat{L})
    +\\
    +& =  2 \, \mbox{tr} [\mathbf{H}(\lambda)] - 2 \log\{L[\hat{\beta}(\lambda), \hat{\sigma}^2(\lambda)]\}
    +\\
    +& =  2 \, \sum_{j=1}^p \frac{d_{jj}^2}{d_{jj}^2 + \lambda}
    ++ 2 n \, \log[\sqrt{2 \, \pi} \, \hat{\sigma}(\lambda)] +  \frac{1}{\hat{\sigma}^2(\lambda)} \sum_{i=1}^n [y_i - \mathbf{X}_{i, \ast} \, \hat{\beta}(\lambda)]^2.
    +\end{align*}
    +$$
     
    -import matplotlib as mpl
    -from matplotlib import pyplot as plt
    +The value of \( \lambda \) which minimizes \( \mbox{AIC}(\lambda) \) corresponds to the `optimal' balance of model complexity and overfitting.
     
    -%matplotlib notebook
    -
    -# The Training Data
    -
    -N_train=100
    -
    -sigma_train=1;
    -
    -# Train on integers
    -x=np.linspace(0.05,0.95,N_train)
    -# Draw random noise
    -s = sigma_train*np.random.randn(N_train)
    -
    -#linear
    -y=2*x+s
    -
    -#Tenth Order
    -#y=2*x-10*x**5+15*x**10+s
    -
    -p1=plt.plot(x,y, "o",ms=15, label='Training')
    -
    -#Linear Regression
    -# Create linear regression object
    -clf = linear_model.LinearRegression()
    -
    -# Train the model using the training sets
    -clf.fit(x[:, np.newaxis], y)
    -# The coefficients
    -
    -xplot=np.linspace(0.02,0.98,200)
    -linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')
    -
    -#Polynomial Regression
    -
    -
    -poly3 = PolynomialFeatures(degree=3)
    -X = poly3.fit_transform(x[:,np.newaxis])
    -clf3 = linear_model.LinearRegression()
    -clf3.fit(X,y)
    -
    -
    -Xplot=poly3.fit_transform(xplot[:,np.newaxis])
    -poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')
    -
    -
    -
    -#poly5 = PolynomialFeatures(degree=5)
    -#X = poly5.fit_transform(x[:,np.newaxis])
    -#clf5 = linear_model.LinearRegression()
    -#clf5.fit(X,y)
    -
    -#Xplot=poly5.fit_transform(xplot[:,np.newaxis])
    -#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)
    -
    -poly10 = PolynomialFeatures(degree=10)
    -X = poly10.fit_transform(x[:,np.newaxis])
    -clf10 = linear_model.LinearRegression()
    -clf10.fit(X,y)
    -
    -Xplot=poly10.fit_transform(xplot[:,np.newaxis])
    -poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')
    -
    -axes = plt.gca()
    -axes.set_ylim([-7,7])
    -
    -handles, labels=axes.get_legend_handles_labels()
    -plt.legend(handles,labels, loc='lower center')
    -plt.xlabel("$x$")
    -plt.ylabel("$y$")
    -Title="$N=$"+str(N_train)+", $\sigma=$"+str(sigma_train)
    -plt.title(Title+" (train)")
    -plt.tight_layout()
    -plt.show()
    -

    -

    Generating test data

    +

    Cross-validation

    +

    - - -

    # Generate Test Data
    -
    -#Number of test data
    -N_test=20
    -
    -sigma_test=sigma_train
    -
    -max_x=1.2
    -x_test=max_x*np.random.random(N_test)
    -# Draw random noise
    -s_test = sigma_test*np.random.randn(N_test)
    -
    -#Linear
    -y_test=2*x_test+s_test
    -#Tenth order
    -#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test
    -
    -#Make design matrices for prediction
    -x_plot=np.linspace(0,max_x, 200)
    -X3 = poly3.fit_transform(x_plot[:,np.newaxis])
    -X10 = poly10.fit_transform(x_plot[:,np.newaxis])
    -
    -%matplotlib notebook
    -
    -fig = plt.figure() 
    -p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')
    -p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')
    -p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')
    -p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')
    -
    -
    -plt.legend(loc=2)
    -plt.xlabel('$x$')
    -plt.ylabel('$y$')
    -plt.legend(loc='best')
    -plt.title(Title+" (pred.)")
    -plt.tight_layout()
    -plt.show()
    -
    -#Linear Filename
    -#filename_test=Title+"pred-linear.pdf"
    -#Tenth Order Filename
    -#filename_test=Title+"pred-o10.pdf"
    -#plt.savefig(filename_test)
    -#plt.ylim((-6,12))
    -
    -

    -









    - -

    Lasso regression

    +Instead of choosing the penalty parameter to balance model fit with +model complexity, cross-validation requires it (i.e. the penalty +parameter) to yield a model with good prediction +performance. Commonly, this performance is evaluated on novel +data. Novel data need not be easy to come by and one has to make do +with the data at hand. The setting of `original' and novel data is +then mimicked by sample splitting: the data set is divided into two +(groups of samples). One of these two data sets, called the training +set, plays the role of `original' data on which the model is +built. The second of these data sets, called the test set, plays the +role of the `novel' data and is used to evaluate the prediction +performance (often operationalized as the log-likelihood or the +prediction error or its square or the R2 score) of the model built on the training data set. This +procedure (model building and prediction evaluation on training and +test set, respectively) is done for a collection of possible penalty +parameter choices. The penalty parameter that yields the model with +the best prediction performance is to be preferred. The thus obtained +performance evaluation depends on the actual split of the data set. To +remove this dependence the data set is split many times into a +training and test set. For each split the model parameters are +estimated for all choices of \( \lambda \) using the training data and +estimated parameters are evaluated on the corresponding test set. The +penalty parameter that on average over the test sets performs best (in +some sense) is then selected.











    -

    Logistic regression

    +

    Computationally expensive

    + +

    +The validation set approach is conceptually simple and is easy to implement. But it has two potential drawbacks: + +

      +
    • The validation estimate of the test error rate can be highly variable, depending on precisely which observations are included in the training set and which observations are included in the validation set.
    • +
    • In the validation approach, only a subset of the observations, those that are included in the training set rather than in the validation set are used to fit the model. Since statistical methods tend to perform worse when trained on fewer observations, this suggests that the validation set error rate may tend to overestimate the test error rate for the model fit on the entire data set.
    • +
    + + + +

    Various steps in cross-validation

    + +

    +When the repetitive splitting of the data set is done randomly, +samples may accidently end up in a fast majority of the splits in +either training or test set. Such samples may have an unbalanced +influence on either model building or prediction evaluation. To avoid +this \( k \)-fold cross-validation structures the data splitting. The +samples are divided into \( k \) more or less equally sized exhaustive and +mutually exclusive subsets. In turn (at each split) one of these +subsets plays the role of the test set while the union of the +remaining subsets constitutes the training set. Such a splitting +warrants a balanced representation of each sample in both training and +test set over the splits. Still the division into the \( k \) subsets +involves a degree of randomness. This may be fully excluded when +choosing \( k=n \). This particular case is referred to as leave-one-out +cross-validation (LOOCV). + +

    + + +

    How to set up the cross-validation for Ridge and/or Lasso

    + +
      +
    1. Define a range of interest for the penalty parameter.
    2. +
    3. Divide the data set into training and test set comprising samples \( \{1, \ldots, n\} \setminus i \) and \( \{ i \} \), respectively.
    4. +
    5. Fit the linear regression model by means of ridge estimation for each \( \lambda \) in the grid using the training set as
    6. +
    + +$$ +\begin{align*} +\hat{\beta}_{-i}(\lambda) & = ( \hat{X}_{-i, \ast}^{\top} +\hat{X}_{-i, \ast} + \lambda \hat{I}_{pp})^{-1} +\hat{X}_{-i, \ast}^{\top} \hat{y}_{-i} +\end{align*} +$$ + +and the corresponding estimate of the error variance \( \hat{\sigma}_{-i}^2(\lambda) \). + +
      +
    1. Evaluate the prediction performance of these models on the test set by \( \log\{L[y_i, \hat{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\} \). Or, by the prediction error \( |y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)| \), the relative error, the error squared or the R2 score function.
    2. +
    3. Repeat steps 1) to 3) such that each sample plays the role of the test set once.
    4. +
    5. Average the prediction performances of the test sets at each grid point of the penalty bias/parameter
    6. +
    + +$$ +\begin{align*} +\frac{1}{n} \sum_{i = 1}^n \log\{L[Y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}. +\end{align*} +$$ + +The quantity above is called the cross-validated log-likelihood. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. + +
      +
    1. The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions.
    2. +
    + +









    + +

    Predicted Residual Error Sum of Squares

    +
    + +

    +Another approach in the LOOCV scheme is to the use the so-called Predicted Residual Error Sum of Squares (PRESS). + +

    +We can define the optimal penalty parameter to minimize +$$ +\begin{align*} +\lambda_{\mbox{{\tiny opt}}} = \arg \min_{\lambda} \frac{1}{n} \sum_{i=1}^n [y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)]^2. +\end{align*} +$$ + +

    +The LOOCV prediction performance can be +expressed analytically in terms of the known quantities derived from +the design matrix and the parameters \( \beta \). +

    + + +

    +









    + +

    Bootstrap

    +
    + +

    +Bootstrapping is a nonparametric approach to statistical inference +that substitutes computation for more traditional distributional +assumptions and asymptotic results. Bootstrapping offers a number of +advantages: + +

      +
    1. The bootstrap is quite general, although there are some cases in which it fails.
    2. +
    3. Because it does not require distributional assumptions (such as normally distributed errors), the bootstrap can provide more accurate inferences when the data are not well behaved or when the sample size is small.
    4. +
    5. It is possible to apply the bootstrap to statistics with sampling distributions that are difficult to derive, even asymptotically.
    6. +
    7. It is relatively simple to apply the bootstrap to complex data-collection plans (such as stratified and clustered samples).
    8. +
    +
    + diff --git a/doc/pub/Regression/ipynb/Regression.ipynb b/doc/pub/Regression/ipynb/Regression.ipynb index af7e36ea4..e36087719 100644 --- a/doc/pub/Regression/ipynb/Regression.ipynb +++ b/doc/pub/Regression/ipynb/Regression.ipynb @@ -10,7 +10,7 @@ " \n", "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", "\n", - "Date: **Sep 6, 2018**\n", + "Date: **Sep 7, 2018**\n", "\n", "Copyright 1999-2018, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n", "\n", @@ -1606,95 +1606,6 @@ "$$" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Code examples for Ridge and Lasso Regression" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "from sklearn import linear_model\n", - "from sklearn.linear_model import LinearRegression\n", - "from sklearn.metrics import mean_squared_error, r2_score\n", - "\n", - "#creating data with random noise\n", - "x=np.arange(50)\n", - "\n", - "delta=np.random.uniform(-2.5,2.5, size=(50))\n", - "np.random.shuffle(delta)\n", - "y =0.5*x+5+delta\n", - "\n", - "#arranging data into 2x50 matrix\n", - "a=np.array(x) #inputs\n", - "b=np.array(y) #outputs\n", - "\n", - "#Split into training and test\n", - "X_train=a[:37, np.newaxis]\n", - "X_test=a[37:, np.newaxis]\n", - "y_train=b[:37]\n", - "y_test=b[37:]\n", - "\n", - "print (\"X_train: \", X_train.shape)\n", - "print (\"y_train: \", y_train.shape)\n", - "print (\"X_test: \", X_test.shape)\n", - "print (\"y_test: \", y_test.shape)\n", - "\n", - "print (\"------------------------------------\")\n", - "\n", - "print (\"Ordinary Least Squares\")\n", - "#Add Ordinary Least Squares fit\n", - "reg=LinearRegression()\n", - "reg.fit(X_train, y_train)\n", - "pred=reg.predict(X_test)\n", - "print (\"Prediction Shape: \", pred.shape)\n", - "\n", - "print('Coefficients: \\n', reg.coef_)\n", - "# The mean squared error\n", - "print(\"Mean squared error: %.2f\"\n", - " % mean_squared_error(y_test, pred))\n", - "# Explained variance score: 1 is perfect prediction\n", - "print('Variance score: %.2f' % r2_score(y_test, pred))\n", - "\n", - "#plot\n", - "plt.scatter(X_test,y_test,color='green', label=\"Training Data\")\n", - "plt.plot(X_test, pred, color='black', label=\"Fit Line\")\n", - "plt.legend()\n", - "plt.show()\n", - "\n", - "print (\"------------------------------------\")\n", - "\n", - "print (\"Ridge Regression\")\n", - "\n", - "ridge=linear_model.RidgeCV(alphas=[0.1,1.0,10.0])\n", - "ridge.fit(X_train,y_train)\n", - "print (\"Ridge Coefficient: \",ridge.coef_)\n", - "print (\"Ridge Intercept: \", ridge.intercept_)\n", - "#Look into graphing with Ridge fit\n", - "\n", - "print (\"------------------------------------\")\n", - "\n", - "print (\"Lasso\")\n", - "lasso=linear_model.Lasso(alpha=0.1)\n", - "lasso.fit(X_train,y_train)\n", - "predl=lasso.predict(X_test)\n", - "print(\"Lasso Coefficient: \", lasso.coef_)\n", - "print(\"Lasso Intercept: \", lasso.intercept_)\n", - "plt.scatter(X_test,y_test,color='green', label=\"Training Data\")\n", - "plt.plot(X_test, predl, color='blue', label=\"Lasso\")\n", - "plt.legend()\n", - "plt.show()" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -1816,7 +1727,141 @@ "\n", "\n", "\n", - "## A second-order polynomial with Ridge and Lasso" + "\n", + "\n", + "## Fitting vs. predicting when data is in the model class\n", + "\n", + "We start by considering the case\n", + "$f(x)=2x$.\n", + "\n", + "Then the data is clearly generated by a model that is contained within\n", + "all three model classes we are using to make predictions (linear\n", + "models, third order polynomials, and tenth order polynomials).\n", + "\n", + "Run the code for the following cases:\n", + "\n", + "1. For $f(x)=2x$ , $Ntrain=10$ and $\\sigma =0$ (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when $x \\in [0,1]$ . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?\n", + "\n", + "2. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?\n", + "\n", + "3. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example $x \\in [0,1.2]$ ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?\n", + "\n", + "4. Repeat the above for $f(x)=2x$ , $Ntrain=10$ , and $\\sigma=1$ . What changes?\n", + "\n", + "Repeat the exercises above for $f(x)=2x$ , $Ntrain=100$ , and $\\sigma=1$ . What changes?\n", + "Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well.\n", + "\n", + "\n", + "## Fitting versus predicting when data is not in the model class\n", + "\n", + "Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider $f(x)=2x-10x^5+15x^{10}$ . Notice that the for linear and third-order polynomial the true model $f(x)$ is not contained in model class.\n", + "\n", + "1. Do better fits lead to better predictions?\n", + "\n", + "2. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points $Ntrain$ and $\\sigma$?\n", + "\n", + "Summarize what you think you learned about the relationship of knowing the true model class and predictive power.\n", + "\n", + "## An example code without the model assessment part" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import sklearn as sk\n", + "from sklearn import datasets, linear_model\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "\n", + "import matplotlib as mpl\n", + "from matplotlib import pyplot as plt\n", + "\n", + "%matplotlib notebook\n", + "\n", + "# The Training Data\n", + "\n", + "N_train=100\n", + "\n", + "sigma_train=1;\n", + "\n", + "# Train on integers\n", + "x=np.linspace(0.05,0.95,N_train)\n", + "# Draw random noise\n", + "s = sigma_train*np.random.randn(N_train)\n", + "\n", + "#linear\n", + "y=2*x+s\n", + "\n", + "#Tenth Order\n", + "#y=2*x-10*x**5+15*x**10+s\n", + "\n", + "p1=plt.plot(x,y, \"o\",ms=15, label='Training')\n", + "\n", + "#Linear Regression\n", + "# Create linear regression object\n", + "clf = linear_model.LinearRegression()\n", + "\n", + "# Train the model using the training sets\n", + "clf.fit(x[:, np.newaxis], y)\n", + "# The coefficients\n", + "\n", + "xplot=np.linspace(0.02,0.98,200)\n", + "linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')\n", + "\n", + "#Polynomial Regression\n", + "\n", + "\n", + "poly3 = PolynomialFeatures(degree=3)\n", + "X = poly3.fit_transform(x[:,np.newaxis])\n", + "clf3 = linear_model.LinearRegression()\n", + "clf3.fit(X,y)\n", + "\n", + "\n", + "Xplot=poly3.fit_transform(xplot[:,np.newaxis])\n", + "poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')\n", + "\n", + "\n", + "\n", + "#poly5 = PolynomialFeatures(degree=5)\n", + "#X = poly5.fit_transform(x[:,np.newaxis])\n", + "#clf5 = linear_model.LinearRegression()\n", + "#clf5.fit(X,y)\n", + "\n", + "#Xplot=poly5.fit_transform(xplot[:,np.newaxis])\n", + "#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)\n", + "\n", + "poly10 = PolynomialFeatures(degree=10)\n", + "X = poly10.fit_transform(x[:,np.newaxis])\n", + "clf10 = linear_model.LinearRegression()\n", + "clf10.fit(X,y)\n", + "\n", + "Xplot=poly10.fit_transform(xplot[:,np.newaxis])\n", + "poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')\n", + "\n", + "axes = plt.gca()\n", + "axes.set_ylim([-7,7])\n", + "\n", + "handles, labels=axes.get_legend_handles_labels()\n", + "plt.legend(handles,labels, loc='lower center')\n", + "plt.xlabel(\"$x$\")\n", + "plt.ylabel(\"$y$\")\n", + "Title=\"$N=$\"+str(N_train)+\", $\\sigma=$\"+str(sigma_train)\n", + "plt.title(Title+\" (train)\")\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Generating test data" ] }, { @@ -1826,6 +1871,157 @@ "collapsed": false }, "outputs": [], + "source": [ + "# Generate Test Data\n", + "\n", + "#Number of test data\n", + "N_test=20\n", + "\n", + "sigma_test=sigma_train\n", + "\n", + "max_x=1.2\n", + "x_test=max_x*np.random.random(N_test)\n", + "# Draw random noise\n", + "s_test = sigma_test*np.random.randn(N_test)\n", + "\n", + "#Linear\n", + "y_test=2*x_test+s_test\n", + "#Tenth order\n", + "#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test\n", + "\n", + "#Make design matrices for prediction\n", + "x_plot=np.linspace(0,max_x, 200)\n", + "X3 = poly3.fit_transform(x_plot[:,np.newaxis])\n", + "X10 = poly10.fit_transform(x_plot[:,np.newaxis])\n", + "\n", + "%matplotlib notebook\n", + "\n", + "fig = plt.figure() \n", + "p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')\n", + "p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')\n", + "p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')\n", + "p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')\n", + "\n", + "\n", + "plt.legend(loc=2)\n", + "plt.xlabel('$x$')\n", + "plt.ylabel('$y$')\n", + "plt.legend(loc='best')\n", + "plt.title(Title+\" (pred.)\")\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How can we effectively evaluate the various models?\n", + "\n", + "In Ridge regression and the subsequent discussion of its properties\n", + "the bias or penalty parameter is considered known or `given'. In\n", + "practice, it is unknown and the user needs to make an informed\n", + "decision on its value. How do we do that? Much of the same considerations apply to the Lasso method. \n", + "\n", + "## Code examples for Ridge and Lasso Regression" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from sklearn import linear_model\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.metrics import mean_squared_error, r2_score\n", + "\n", + "#creating data with random noise\n", + "x=np.arange(50)\n", + "\n", + "delta=np.random.uniform(-2.5,2.5, size=(50))\n", + "np.random.shuffle(delta)\n", + "y =0.5*x+5+delta\n", + "\n", + "#arranging data into 2x50 matrix\n", + "a=np.array(x) #inputs\n", + "b=np.array(y) #outputs\n", + "\n", + "#Split into training and test\n", + "X_train=a[:37, np.newaxis]\n", + "X_test=a[37:, np.newaxis]\n", + "y_train=b[:37]\n", + "y_test=b[37:]\n", + "\n", + "print (\"X_train: \", X_train.shape)\n", + "print (\"y_train: \", y_train.shape)\n", + "print (\"X_test: \", X_test.shape)\n", + "print (\"y_test: \", y_test.shape)\n", + "\n", + "print (\"------------------------------------\")\n", + "\n", + "print (\"Ordinary Least Squares\")\n", + "#Add Ordinary Least Squares fit\n", + "reg=LinearRegression()\n", + "reg.fit(X_train, y_train)\n", + "pred=reg.predict(X_test)\n", + "print (\"Prediction Shape: \", pred.shape)\n", + "\n", + "print('Coefficients: \\n', reg.coef_)\n", + "# The mean squared error\n", + "print(\"Mean squared error: %.2f\"\n", + " % mean_squared_error(y_test, pred))\n", + "# Explained variance score: 1 is perfect prediction\n", + "print('Variance score: %.2f' % r2_score(y_test, pred))\n", + "\n", + "#plot\n", + "plt.scatter(X_test,y_test,color='green', label=\"Training Data\")\n", + "plt.plot(X_test, pred, color='black', label=\"Fit Line\")\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "print (\"------------------------------------\")\n", + "\n", + "print (\"Ridge Regression\")\n", + "\n", + "ridge=linear_model.RidgeCV(alphas=[0.1,1.0,10.0])\n", + "ridge.fit(X_train,y_train)\n", + "print (\"Ridge Coefficient: \",ridge.coef_)\n", + "print (\"Ridge Intercept: \", ridge.intercept_)\n", + "#Look into graphing with Ridge fit\n", + "\n", + "print (\"------------------------------------\")\n", + "\n", + "print (\"Lasso\")\n", + "lasso=linear_model.Lasso(alpha=0.1)\n", + "lasso.fit(X_train,y_train)\n", + "predl=lasso.predict(X_test)\n", + "print(\"Lasso Coefficient: \", lasso.coef_)\n", + "print(\"Lasso Intercept: \", lasso.intercept_)\n", + "plt.scatter(X_test,y_test,color='green', label=\"Training Data\")\n", + "plt.plot(X_test, predl, color='blue', label=\"Lasso\")\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## A second-order polynomial with Ridge and Lasso" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", @@ -1939,204 +2135,229 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Fitting vs. predicting when data is in the model class\n", - "\n", - "We start by considering the case\n", - "$f(x)=2x$.\n", - "\n", - "Then the data is clearly generated by a model that is contained within\n", - "all three model classes we are using to make predictions (linear\n", - "models, third order polynomials, and tenth order polynomials).\n", - "\n", - "Run the code for the following cases:\n", - "\n", - "1. For $f(x)=2x$ , $Ntrain=10$ and $\\sigma =0$ (noiseless case), train the three classes of models (linear, third-order polynomial, and tenth order polynomial) for a training set when $x \\in [0,1]$ . Make graphs comparing fits for different order of polynomials. Which model fits the data the best?\n", - "\n", - "2. Do you think that the data that has the least error on the training set will also make the best predictions? Why or why not? Can you try to discuss and formalize your intuition? What can go right and what can go wrong?\n", - "\n", - "3. Check your answer by seeing how well your fits predict newly generated test data (including on data outside the range you fit on, for example $x \\in [0,1.2]$ ) using the code below. How well do you do on points in the range of x where you trained the model? How about points outside the original training data set?\n", - "\n", - "4. Repeat the above for $f(x)=2x$ , $Ntrain=10$ , and $\\sigma=1$ . What changes?\n", - "\n", - "Repeat the exercises above for $f(x)=2x$ , $Ntrain=100$ , and $\\sigma=1$ . What changes?\n", - "Summarize what you have learned about the relationship between model complexity (number of parameters), goodness of fit on training data, and the ability to predict well.\n", - "\n", - "\n", - "## Fitting versus predicting when data is not in the model class\n", - "\n", - "Thus far, we have considered the case where the data is generated using a model contained in the model class. Now consider $f(x)=2x-10x^5+15x^{10}$ . Notice that the for linear and third-order polynomial the true model $f(x)$ is not contained in model class.\n", - "\n", - "1. Do better fits lead to better predictions?\n", - "\n", - "2. What is the relationship between the true model for generating the data and the model class that has the most predictive power? How is this related to the model complexity? How does this depend on the number of data points $Ntrain$ and $\\sigma$?\n", - "\n", - "Summarize what you think you learned about the relationship of knowing the true model class and predictive power.\n", - "\n", - "## The code" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "import sklearn as sk\n", - "from sklearn import datasets, linear_model\n", - "from sklearn.preprocessing import PolynomialFeatures\n", - "\n", - "import matplotlib as mpl\n", - "from matplotlib import pyplot as plt\n", - "\n", - "%matplotlib notebook\n", - "\n", - "# The Training Data\n", - "\n", - "N_train=100\n", - "\n", - "sigma_train=1;\n", - "\n", - "# Train on integers\n", - "x=np.linspace(0.05,0.95,N_train)\n", - "# Draw random noise\n", - "s = sigma_train*np.random.randn(N_train)\n", - "\n", - "#linear\n", - "y=2*x+s\n", - "\n", - "#Tenth Order\n", - "#y=2*x-10*x**5+15*x**10+s\n", - "\n", - "p1=plt.plot(x,y, \"o\",ms=15, label='Training')\n", - "\n", - "#Linear Regression\n", - "# Create linear regression object\n", - "clf = linear_model.LinearRegression()\n", - "\n", - "# Train the model using the training sets\n", - "clf.fit(x[:, np.newaxis], y)\n", - "# The coefficients\n", - "\n", - "xplot=np.linspace(0.02,0.98,200)\n", - "linear_plot=plt.plot(xplot, clf.predict(xplot[:, np.newaxis]),label='Linear')\n", - "\n", - "#Polynomial Regression\n", - "\n", - "\n", - "poly3 = PolynomialFeatures(degree=3)\n", - "X = poly3.fit_transform(x[:,np.newaxis])\n", - "clf3 = linear_model.LinearRegression()\n", - "clf3.fit(X,y)\n", - "\n", - "\n", - "Xplot=poly3.fit_transform(xplot[:,np.newaxis])\n", - "poly3_plot=plt.plot(xplot, clf3.predict(Xplot), label='Poly 3')\n", + "## Resampling methods\n", + "Resampling methods are an indispensable tool in modern\n", + "statistics. They involve repeatedly drawing samples from a training\n", + "set and refitting a model of interest on each sample in order to\n", + "obtain additional information about the fitted model. For example, in\n", + "order to estimate the variability of a linear regression fit, we can\n", + "repeatedly draw different samples from the training data, fit a linear\n", + "regression to each new sample, and then examine the extent to which\n", + "the resulting fits differ. Such an approach may allow us to obtain\n", + "information that would not be available from fitting the model only\n", + "once using the original training sample.\n", "\n", "\n", "\n", - "#poly5 = PolynomialFeatures(degree=5)\n", - "#X = poly5.fit_transform(x[:,np.newaxis])\n", - "#clf5 = linear_model.LinearRegression()\n", - "#clf5.fit(X,y)\n", + "## Resampling approaches can be computationally expensive\n", + "Resampling approaches can be computationally expensive, because they\n", + "involve fitting the same statistical method multiple times using\n", + "different subsets of the training data. However, due to recent\n", + "advances in computing power, the computational requirements of\n", + "resampling methods generally are not prohibitive. In this chapter, we\n", + "discuss two of the most commonly used resampling methods,\n", + "cross-validation and the bootstrap. Both methods are important tools\n", + "in the practical application of many statistical learning\n", + "procedures. For example, cross-validation can be used to estimate the\n", + "test error associated with a given statistical learning method in\n", + "order to evaluate its performance, or to select the appropriate level\n", + "of flexibility. The process of evaluating a model’s performance is\n", + "known as model assessment, whereas the process of selecting the proper\n", + "level of flexibility for a model is known as model selection. The\n", + "bootstrap is widely used.\n", "\n", - "#Xplot=poly5.fit_transform(xplot[:,np.newaxis])\n", - "#plt.plot(xplot, clf5.predict(Xplot), 'r--',linewidth=1)\n", "\n", - "poly10 = PolynomialFeatures(degree=10)\n", - "X = poly10.fit_transform(x[:,np.newaxis])\n", - "clf10 = linear_model.LinearRegression()\n", - "clf10.fit(X,y)\n", "\n", - "Xplot=poly10.fit_transform(xplot[:,np.newaxis])\n", - "poly10_plot=plt.plot(xplot, clf10.predict(Xplot), label='Poly 10')\n", "\n", - "axes = plt.gca()\n", - "axes.set_ylim([-7,7])\n", + "## Log-likelihood\n", "\n", - "handles, labels=axes.get_legend_handles_labels()\n", - "plt.legend(handles,labels, loc='lower center')\n", - "plt.xlabel(\"$x$\")\n", - "plt.ylabel(\"$y$\")\n", - "Title=\"$N=$\"+str(N_train)+\", $\\sigma=$\"+str(sigma_train)\n", - "plt.title(Title+\" (train)\")\n", - "plt.tight_layout()\n", - "plt.show()" + "A popular strategy is to choose a penalty parameter that yields a good\n", + "but parsimonious model. Information criteria measure the balance\n", + "between model fit and model complexity. One possibility is Aikaike's\n", + "information criterion (AIC).\n", + "The AIC measures model fit by the log-likelihood\n", + "and model complexity is measured by the number of parameters used by\n", + "the model. The number of model parameters in regular regression simply\n", + "corresponds to the number of covariates in the model. Or, by the\n", + "degrees of freedom consumed by the model, which is equivalent to the\n", + "trace of the hat matrix. For ridge regression it thus seems natural to\n", + "define model complexity analogously by the trace of the ridge hat\n", + "matrix. This yields the AIC for the linear regression model with ridge\n", + "estimates:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "$$\n", + "\\begin{align*}\n", + "\\mbox{AIC}(\\lambda) & = 2 \\, p - 2 \\log(\\hat{L})\n", + "\\\\\n", + "& = 2 \\, \\mbox{tr} [\\mathbf{H}(\\lambda)] - 2 \\log\\{L[\\hat{\\beta}(\\lambda), \\hat{\\sigma}^2(\\lambda)]\\}\n", + "\\\\\n", + "& = 2 \\, \\sum_{j=1}^p \\frac{d_{jj}^2}{d_{jj}^2 + \\lambda}\n", + "+ 2 n \\, \\log[\\sqrt{2 \\, \\pi} \\, \\hat{\\sigma}(\\lambda)] + \\frac{1}{\\hat{\\sigma}^2(\\lambda)} \\sum_{i=1}^n [y_i - \\mathbf{X}_{i, \\ast} \\, \\hat{\\beta}(\\lambda)]^2.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The value of $\\lambda$ which minimizes $\\mbox{AIC}(\\lambda)$ corresponds to the `optimal' balance of model complexity and overfitting.\n", + "\n", + "\n", "\n", - "## Generating test data" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Generate Test Data\n", + "## Cross-validation\n", "\n", - "#Number of test data\n", - "N_test=20\n", - "\n", - "sigma_test=sigma_train\n", - "\n", - "max_x=1.2\n", - "x_test=max_x*np.random.random(N_test)\n", - "# Draw random noise\n", - "s_test = sigma_test*np.random.randn(N_test)\n", - "\n", - "#Linear\n", - "y_test=2*x_test+s_test\n", - "#Tenth order\n", - "#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test\n", - "\n", - "#Make design matrices for prediction\n", - "x_plot=np.linspace(0,max_x, 200)\n", - "X3 = poly3.fit_transform(x_plot[:,np.newaxis])\n", - "X10 = poly10.fit_transform(x_plot[:,np.newaxis])\n", - "\n", - "%matplotlib notebook\n", - "\n", - "fig = plt.figure() \n", - "p1=plt.plot(x_test,y_test.transpose(), 'o', ms=12, label='data')\n", - "p2=plt.plot(x_plot,clf.predict(x_plot[:,np.newaxis]), label='linear')\n", - "p3=plt.plot(x_plot,clf3.predict(X3), label='3rd order')\n", - "p10=plt.plot(x_plot,clf10.predict(X10), label='10th order')\n", + "Instead of choosing the penalty parameter to balance model fit with\n", + "model complexity, cross-validation requires it (i.e. the penalty\n", + "parameter) to yield a model with good prediction\n", + "performance. Commonly, this performance is evaluated on novel\n", + "data. Novel data need not be easy to come by and one has to make do\n", + "with the data at hand. The setting of `original' and novel data is\n", + "then mimicked by sample splitting: the data set is divided into two\n", + "(groups of samples). One of these two data sets, called the *training\n", + "set*, plays the role of `original' data on which the model is\n", + "built. The second of these data sets, called the *test set*, plays the\n", + "role of the `novel' data and is used to evaluate the prediction\n", + "performance (often operationalized as the log-likelihood or the\n", + "prediction error or its square or the R2 score) of the model built on the training data set. This\n", + "procedure (model building and prediction evaluation on training and\n", + "test set, respectively) is done for a collection of possible penalty\n", + "parameter choices. The penalty parameter that yields the model with\n", + "the best prediction performance is to be preferred. The thus obtained\n", + "performance evaluation depends on the actual split of the data set. To\n", + "remove this dependence the data set is split many times into a\n", + "training and test set. For each split the model parameters are\n", + "estimated for all choices of $\\lambda$ using the training data and\n", + "estimated parameters are evaluated on the corresponding test set. The\n", + "penalty parameter that on average over the test sets performs best (in\n", + "some sense) is then selected.\n", "\n", "\n", - "plt.legend(loc=2)\n", - "plt.xlabel('$x$')\n", - "plt.ylabel('$y$')\n", - "plt.legend(loc='best')\n", - "plt.title(Title+\" (pred.)\")\n", - "plt.tight_layout()\n", - "plt.show()\n", + "## Computationally expensive\n", "\n", - "#Linear Filename\n", - "#filename_test=Title+\"pred-linear.pdf\"\n", - "#Tenth Order Filename\n", - "#filename_test=Title+\"pred-o10.pdf\"\n", - "#plt.savefig(filename_test)\n", - "#plt.ylim((-6,12))" + "The validation set approach is conceptually simple and is easy to implement. But it has two potential drawbacks:\n", + "\n", + "* The validation estimate of the test error rate can be highly variable, depending on precisely which observations are included in the training set and which observations are included in the validation set.\n", + "\n", + "* In the validation approach, only a subset of the observations, those that are included in the training set rather than in the validation set are used to fit the model. Since statistical methods tend to perform worse when trained on fewer observations, this suggests that the validation set error rate may tend to overestimate the test error rate for the model fit on the entire data set.\n", + "\n", + "\n", + "## Various steps in cross-validation\n", + "\n", + "When the repetitive splitting of the data set is done randomly,\n", + "samples may accidently end up in a fast majority of the splits in\n", + "either training or test set. Such samples may have an unbalanced\n", + "influence on either model building or prediction evaluation. To avoid\n", + "this $k$-fold cross-validation structures the data splitting. The\n", + "samples are divided into $k$ more or less equally sized exhaustive and\n", + "mutually exclusive subsets. In turn (at each split) one of these\n", + "subsets plays the role of the test set while the union of the\n", + "remaining subsets constitutes the training set. Such a splitting\n", + "warrants a balanced representation of each sample in both training and\n", + "test set over the splits. Still the division into the $k$ subsets\n", + "involves a degree of randomness. This may be fully excluded when\n", + "choosing $k=n$. This particular case is referred to as leave-one-out\n", + "cross-validation (LOOCV). \n", + "\n", + "\n", + "## How to set up the cross-validation for Ridge and/or Lasso\n", + "\n", + "1. Define a range of interest for the penalty parameter.\n", + "\n", + "2. Divide the data set into training and test set comprising samples $\\{1, \\ldots, n\\} \\setminus i$ and $\\{ i \\}$, respectively.\n", + "\n", + "3. Fit the linear regression model by means of ridge estimation for each $\\lambda$ in the grid using the training set as" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Lasso regression\n", + "$$\n", + "\\begin{align*}\n", + "\\hat{\\beta}_{-i}(\\lambda) & = ( \\hat{X}_{-i, \\ast}^{\\top}\n", + "\\hat{X}_{-i, \\ast} + \\lambda \\hat{I}_{pp})^{-1}\n", + "\\hat{X}_{-i, \\ast}^{\\top} \\hat{y}_{-i}\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and the corresponding estimate of the error variance $\\hat{\\sigma}_{-i}^2(\\lambda)$.\n", + "\n", + "1. Evaluate the prediction performance of these models on the test set by $\\log\\{L[y_i, \\hat{X}_{i, \\ast}; \\hat{\\beta}_{-i}(\\lambda), \\hat{\\sigma}_{-i}^2(\\lambda)]\\}$. Or, by the prediction error $|y_i - \\hat{X}_{i, \\ast} \\hat{\\beta}_{-i}(\\lambda)|$, the relative error, the error squared or the R2 score function.\n", + "\n", + "2. Repeat steps 1) to 3) such that each sample plays the role of the test set once.\n", + "\n", + "3. Average the prediction performances of the test sets at each grid point of the penalty bias/parameter" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\frac{1}{n} \\sum_{i = 1}^n \\log\\{L[Y_i, \\mathbf{X}_{i, \\ast}; \\hat{\\beta}_{-i}(\\lambda), \\hat{\\sigma}_{-i}^2(\\lambda)]\\}.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The quantity above is called the *cross-validated log-likelihood*. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data.\n", + "\n", + "1. The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions.\n", + "\n", + "## Predicted Residual Error Sum of Squares\n", + "Another approach in the LOOCV scheme is to the use the so-called Predicted Residual Error Sum of Squares (PRESS). \n", + "\n", + "We can define the optimal penalty parameter to minimize" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\\lambda_{\\mbox{{\\tiny opt}}} = \\arg \\min_{\\lambda} \\frac{1}{n} \\sum_{i=1}^n [y_i - \\hat{X}_{i, \\ast} \\hat{\\beta}_{-i}(\\lambda)]^2.\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The LOOCV prediction performance can be\n", + "expressed analytically in terms of the known quantities derived from\n", + "the design matrix and the parameters $\\beta$.\n", "\n", "\n", - "## Logistic regression" + "\n", + "## Bootstrap\n", + "Bootstrapping is a nonparametric approach to statistical inference\n", + "that substitutes computation for more traditional distributional\n", + "assumptions and asymptotic results. Bootstrapping offers a number of\n", + "advantages: \n", + "1. The bootstrap is quite general, although there are some cases in which it fails. \n", + "\n", + "2. Because it does not require distributional assumptions (such as normally distributed errors), the bootstrap can provide more accurate inferences when the data are not well behaved or when the sample size is small. \n", + "\n", + "3. It is possible to apply the bootstrap to statistics with sampling distributions that are difficult to derive, even asymptotically. \n", + "\n", + "4. It is relatively simple to apply the bootstrap to complex data-collection plans (such as stratified and clustered samples)." ] } ], diff --git a/doc/pub/Regression/ipynb/ipynb-Regression-src.tar.gz b/doc/pub/Regression/ipynb/ipynb-Regression-src.tar.gz index 11e5676115c2089368680876bdad35a3ef51af6a..39e17ea5b7a69d4723e727ac0958db4b5e9f976c 100644 GIT binary patch literal 210 zcmb2|=3rp>I5C=m`R)0GSxklk#|qEe9kn@V^m%@BwDT^lmQ!(p&aHlq1 zJxAo1TqxS-C=dJ%!Z0B0{*>O*)-RaY-^kaF1k_u-_*r&WL zJNfiY@`^wE_@y%!pMJbq<$LXilbyVKZ*2RT`r^jEH^uLqb?>(V12XubUdQ0K LVCDh_4F(1Pob+c8 diff --git a/doc/pub/Regression/pdf/Regression-beamer-handouts2x3.pdf b/doc/pub/Regression/pdf/Regression-beamer-handouts2x3.pdf index c60178739d22d3a6650605fac1740a2ca066ae99..89eb8b91d088762b8c09f6225e98de2bd506a523 100644 GIT binary patch delta 167286 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

    e=N*VV@w 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

    WbA$QEx&E^(ro zYqG)ehq=5EQn%|WP3feO6@MqkSpd&d8q5uA7vX?lJ;+oEV3^TA%qV;gx9q~FMMjY~>-LJ{s-O;mYPJ543Z!Cry(%ke}6?KOdUscWtF!@#AkfPU7OAeGDDv z4_T}`TId7^3n7({T&uOd7BYNQm9`|k?Xxu+nlv-+r}MLx=}Ei`;=Uos9wr*;*yRHy zbsu_hJ^1g34u2vjG5b2i*L~Vw&rJ5##(!S1`|W8HY4h8Vqg4exEcv)e78+0B;<$2b z`NvFcVvr-H*3d&PJLtAEmCvu;54Ho;~Llv51hT5RTQ zXAnc5kj{Zk@>S?nBpyWH)$|LqW!jhC-IC#RUvp!NSJ{RVqQDRK97EY`UsCf3%#FSx z35m1zJVBlmHk!meNlSS*P+&)~T~|b+NP;rY*JGSr*&Y7R*@JH84SKr@mNy)(#~<7o zbszCyB!3Hm%+JCLU!q*RY4DV4=v8D?d9V3pDU2ACxM`~E zIQ)8YK=*`y?4|c}oTaYH(`bX?VX!G*jvy35lsY+lU>2KZyz4^enEOZhh+-s*POkQz zBtq`of|6@iQubD_h6d(;s1!=*fpfLP1@O2Dg)N1A3d2 z68PS8%zL@i=2u1H2C(f33U=c8n56Pjd1n2bx^IP8S0^}No-;#D|5i=2-YM1RDeSSk z9_kiT72rn|fU)KkJkMznqvvS!O1v!Tc7H7iYwufe!W6NB*({JBv}}zPbyUXpK9!}? znOR;}GGFjq!_cCZsRg6&EV$ilbR++OEknA#!!6Si&3ay=(H@sjw&9UcUU#6e@F>Zs zFtezB=M!~KymU4bX*_5ZBy*DGqeN1uaH&gNDa*^OB@8DNPfn}E3}qK0vBn;ERDS_G zygB0|67O(mYEyt0kFEF>;5T*~cj}EORt3y7NuC(ws}lxVQZ@1zW0gBMTL%?qDzaD)$64jl!31%Yi31OF|9>qg;4`{1&m%y;l1qen7+CHp-%0DBP27~I2>jBlXDh0mpC{kZX8##03-V~m#XIr>Fj{pJZd^Vah!IoyK4{^Sj zH78}Zc<$+$B-_;1^&Nd!9MQV;IGoYOP@UB7;5FFxdS$0LY`RKxQ4gXVD9q;UtdKKh zT$!4c=q2qvT&D`ZAeiAd?tk;BxUZi2*kuYw=THZ9$1(5UXeKK-NI4ShyXcb4)z|Y zUrPmSFSbNxv(j=o7>@1-(q`XGwO9hgO@lz&h$3f2K+9bpf&6 z^KQYfh>rwc5r0X{PNLS$wi#;zl~Uo@BS0Kl;C!UbK%36(S&;Y<> z8{rl7<7|YXFp}t+VKW?b$k_p9i`YcxK+x&^P0$4(j3b-P#n)CTR7bQ$&u}LdS8EI$ zE7~$8Kh4q;@fSjvd@B@AnYTy!%6XEvPtW%-n8|0o@_&Xg&yUH|!*nvL}mVtX`2J0XkPWI zC8oaJaa|50vEPdFF4g|qWQHATyixl!jYNE_V)7Ub2c8;r===}*rSD#jmetX;{F<3U82hZdB;fGXv=CRoZ2t?ug&Rd=Y`XatWorx1j2+-w9 z3xABsqx|&jh`)0e<3c zLo`up!3j@sH*{v}(V*v5k5sm*3f>Sk=!Ec>L-4hs<0!V0(QYmi)jXD$qEy3z#w&RI zj%(w2{bl%~s8EkpJq){g>V&VzA*f!0Q-4XZYL?Xvfo(Y9_H8mCl>|2Q+Te&b?nz&= zQB6cK@g(P*$+n`X9TH3)@B=7&y8r&X<`%0AZljSE>PGtg5l{hBUoB$WfF;jl{-fRP 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 b3UhQ}a&&ldWo8OAF)%SVFbX9lMNdWwZ%VLZ delta 150320 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 Xa&&ldWo8O9I5;*oGYTaoMNdWwvr%-+ diff --git a/doc/pub/Regression/pdf/Regression-beamer.pdf b/doc/pub/Regression/pdf/Regression-beamer.pdf index 84cdc8a34d0c8d641d4c06978ac31a3641377139..3645fa90a330611fb9d38ebf750a7c9921029e29 100644 GIT binary patch delta 163432 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%0DiH#94g!ABb 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%0D?! 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%0A2tfv76jQtf)6 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 delta 149061 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

    ub@D@#FxhGKnJP3%4MG!ML8(@Z~Io#0i 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

    B3X07Y;ANnyOUTh-G@j2i5kvQln^JUu^ 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%0DhI4Y}ivvLlam+iFN|H6XlMJmYi50 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Ȣ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 delta 164947 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 ?i);Z38ZG;u+)s6AEBYb^}E> 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 >P}JX}zDf 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 n$. The resulting $(n \times p)$-dimensional data matrix $\mathbf{X}$: -\begin{align*} -\mathbf{X} & = -\left( -X_{\ast,1} \, | \, \ldots \, | \, X_{\ast,p} -\right) -\, \, \, = \, \, \, -\left( -\begin{array}{c} -X_{1,\ast} \\ \vdots \\ X_{n,\ast} -\end{array} \right) -\, \, \, = \, \, \, -\left( -\begin{array}{ccc} -X_{1,1} & \ldots & X_{1,p} -\\ -\vdots & \ddots & \vdots -\\ -X_{n,1} & \ldots & X_{n,p} -\end{array} \right) -\end{align*} -from such a study contains a larger number of covariates than samples. When $p > n$ the data matrix $\mathbf{X}$ is said to be *high-dimensional*. - -In this chapter we adopt the traditional statistical notation of the -data matrix. An alternative notation would be $\mathbf{X}^{\top}$ -(rather than $\mathbf{X}$), which is employed in the field of -(statistical) bioinformatics. In $\mathbf{X}^{\top}$ the rows comprise -the samples rather than the covariates. The case for the -bioinformatics notation stems from practical arguments. A spreadsheet -is designed to have more rows than columns. In case $p > n$ the -traditional notation yields a spreadsheet with more columns than -rows. When $p > 10000$ the conventional display is impractical. In -this chapter we stick to the conventional statistical notation of the -data matrix as all mathematical expressions involving $\mathbf{X}$ are -then in line with those of standard textbooks on regression. - -The information contained in $\mathbf{X}$ is often used to explain a -particular property of the samples involved. In applications in -molecular biology $\mathbf{X}$ may contain microRNA expression data -from which the expression levels of a gene are to be described. When -the gene's expression levels are denoted by $\mathbf{Y} = (Y_{1}, -\ldots, Y_n)^{\top}$, the aim is to find the linear relation $Y_i = -\mathbf{X}_{i, \ast} \beta$ from the data at hand by means of -regression analysis. Regression is however frustrated by the -high-dimensionality of $\mathbf{X}$ (illustrated in Section -ref{sect.ridgeRegression} and at the end of Section -ref{sect.constrainedEstimation}). These notes discuss how regression -may be modified to accommodate the high-dimensionality of -$\mathbf{X}$. First, however, `standard' linear regression is -recaputilated. - - -======= Linear regression ======= - -Consider an experiment in which $p$ characteristics of $n$ samples are -measured. The data from this experiment are denoted $\mathbf{X}$, with -$\mathbf{X}$ as above. The matrix $\mathbf{X}$ is called the *design -matrix*. Additional information of the samples is available in the -form of $\mathbf{Y}$ (also as above). The variable $\mathbf{Y}$ is -generally referred to as the *response variable*. The aim of -regression analysis is to explain $\mathbf{Y}$ in terms of -$\mathbf{X}$ through a functional relationship like $Y_i = -f(\mathbf{X}_{i,\ast})$. When no prior knowledge on the form of -$f(\cdot)$ is available, it is common to assume a linear relationship -between $\mathbf{X}$ and $\mathbf{Y}$. This assumption gives rise to -the *linear regression model*: - - -!bt -\begin{align} -Y_{i} & = \mathbf{X}_{i,\ast} \, \beta + \varepsilon_i label{form.linRegressionModel} -\\ -\nonumber -& = \beta_1 \, X_{i,1} + \ldots + \beta_{p} \, X_{i, p} + \varepsilon_i. -\end{align} -!et - -In model (ref{form.linRegressionModel}) $\beta = (\beta_1, \ldots, -\beta_p)^{\top}$ is the *regression parameter*. The parameter -$\beta_j$, $j=1, \ldots, p$, represents the effect size of covariate -$j$ on the response. That is, for each unit change in covariate $j$ -(while keeping the other covariates fixed) the observed change in the -response is equal to $\beta_j$. The second summand on the right-hand -side of the model, $\varepsilon_i$, is referred to as the error. It -represents the part of the response not explained by the functional -part $\mathbf{X}_{i,\ast} \, \beta$ of the model -(ref{form.linRegressionModel}). In contrast to the functional part, -which is considered to be systematic (i.e. non-random), the error is -assumed to be random. Consequently, $Y_{i_1,\ast}$ need not equal -$Y_{i_2,\ast}$ for $i_1 \not= i_2$, even if $\mathbf{X}_{i_1,\ast}= -\mathbf{X}_{i_2,\ast}$. To complete the formulation of model -(ref{form.linRegressionModel}) we need to specify the probability -distribution of $\varepsilon_i$. It is assumed that $\varepsilon_i -\sim \mathcal{N}(0, \sigma^2)$ and the $\varepsilon_{i}$ are -independent, i.e.: \begin{align*} \mbox{Cov}(\varepsilon_{i_1}, -\varepsilon_{i_2}) & = \left\{ \begin{array}{lcc} \sigma^2 & \mbox{if} -& i_1 = i_2, \\ 0 & \mbox{if} & i_1 \not= i_2. \end{array} \right. -\end{align*} The randomness of $\varepsilon_i$ implies that -$\mathbf{Y}_i$ is also a random variable. In particular, -$\mathbf{Y}_i$ is normally distributed, because $\varepsilon_i \sim -\mathcal{N}(0, \sigma^2)$ and $\mathbf{X}_{i,\ast} \, \beta$ is a -non-random scalar. To specify the parameters of the distribution of -$\mathbf{Y}_i$ we need to calculate its first two moments. Its -expectation equals: \begin{align*} \mathbb{E}(Y_i) & = -\mathbb{E}(\mathbf{X}_{i, \ast} \, \beta) + \mathbb{E}(\varepsilon_i) -\, \, \, = \, \, \, \mathbf{X}_{i, \ast} \, \beta, \end{align*} while -its variance is: \begin{align*} \mbox{Var}(Y_i) & = \mathbb{E} \{ [Y_i -- \mathbb{E}(Y_i)]^2 \} \, \, \, = \, \, \, \mathbb{E} ( Y_i^2 ) - -[\mathbb{E}(Y_i)]^2 # \\ # & = \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, -\beta + \varepsilon_i )^2] - ( \mathbf{X}_{i, \ast} \, \beta)^2 \\ & -= \mathbb{E} [ ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 \varepsilon_i -\mathbf{X}_{i, \ast} \, \beta + \varepsilon_i^2 ] - ( \mathbf{X}_{i, -\ast} \, \beta)^2 \\ # & = ( \mathbf{X}_{i, \ast} \, \beta)^2 + 2 -\mathbb{E}(\varepsilon_i) \mathbf{X}_{i, \ast} \, \beta + -\mathbb{E}(\varepsilon_i^2 ) - ( \mathbf{X}_{i, \ast} \, \beta)^2 # -\\ & = \mathbb{E}(\varepsilon_i^2 ) \, \, \, = \, \, \, -\mbox{Var}(\varepsilon_i) \, \, \, = \, \, \, \sigma^2. \end{align*} -Hence, $Y_i \sim \mathcal{N}( \mathbf{X}_{i, \ast} \, \beta, -\sigma^2)$. This formulation (in terms of the normal distribution) is -equivalent to the formulation of model (ref{form.linRegressionModel}), -as both capture the assumptions involved: the linearity of the -functional part and the normality of the error. - -Model (ref{form.linRegressionModel}) is often written in a more condensed matrix form: - - -!bt -\begin{align} -\mathbf{Y} & = \mathbf{X} \, \beta + \vvarepsilon, label{form.linRegressionModelinMatrix} -\end{align} -!et -where $\vvarepsilon = (\varepsilon_1, \varepsilon_2, \ldots, \varepsilon_n)^{\top}$ and distributed as $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_{p}, \sigma^2 \mathbf{I}_{nn})$. As above model (ref{form.linRegressionModelinMatrix}) can be expressed as a multivariate normal distribution: $\mathbf{Y} \sim \mathcal{N}(\mathbf{X} \, \beta, \sigma^2 \mathbf{I}_{nn})$. - -Model (ref{form.linRegressionModelinMatrix}) is a so-called -hierarchical model. This terminology emphasizes that $\mathbf{X}$ and -$\mathbf{Y}$ are not on a par, they play different roles in the -model. The former is used to explain the latter. In model -(ref{form.linRegressionModel}) $\mathbf{X}$ is referred as the -*explanatory* or *independent* variable, while the variable -$\mathbf{Y}$ is generally referred to as the *response* or *dependent* -variable. - -The covariates, the columns of $\mathbf{X}$, may themselves be -random. To apply the linear model they are temporarily assumed -fixed. The linear regression model is then to be interpreted as -$\mathbf{Y} \, | \, \mathbf{X} \sim \mathcal{N}(\mathbf{X} \, \beta, -\sigma^2 \mathbf{I}_{nn})$ - - -The linear regression model (ref{form.linRegressionModel}) involves the unknown parameters: $\beta$ and $\sigma^2$, which need to be learned from the data. The parameters of the regression model, $\beta$ and $\sigma^2$ are estimated by means of likelihood maximization. Recall that $Y_i \sim \mathcal{N}( \mathbf{X}_{i,\ast} \, \beta, \sigma^2)$ with corresponding density: $ f_{Y_i}(y_i) = (2 \, \pi \, \sigma^2)^{-1/2} \, \exp[ - (y_i - \mathbf{X}_{i\ast} \, \beta)^2 / 2 \sigma^2 ]$. The likelihood thus is: - - -!bt -\begin{align*} -L(\mathbf{Y}, \mathbf{X}; \beta, \sigma^2) & = -# f_{\mathbf{Y}}(\mathbf{y}) \, \, \, = \, \, \, \prod_{i=1}^n f_{Y_i}(y_i) \, \, \, = \, \, \, -\prod_{i=1}^n \frac{1}{\sqrt{2 \, \pi} \, \sigma} \, \exp[ - (Y_i - \mathbf{X}_{i, \ast} \, \beta)^2 / 2 \sigma^2 ], -\end{align*} -!et - -in which the independence of the observations has been used. Because -of the concavity of the logarithm, the maximization of the likelihood -coincides with the maximum of the logarithm of the likelihood (called -the log-likelihood). Hence, to obtain maximum likelihood (ML) -estimates of the parameter it is equivalent to find the maximum of the -log-likelihood. The log-likelihood is: - -!bt -\begin{align*} -\mathcal{L}(\mathbf{Y}, \mathbf{X}; \beta, \sigma^2) & = -\log[ L(\mathbf{Y}, \mathbf{X}; \beta, \sigma^2) ] -\, \, \, = \, \, \, % \log \Big[ \prod_{i=1}^n f_{Y_i}(y_i) \Big] -# \, \, \, = \, \, \, \sum_{i=1}^n \log[ f_{Y_i}(y_i) ] -# \\ -# & = \sum_{i=1}^n [ -\log(\sqrt{2 \, \pi} \, \sigma) - (y_i - \mathbf{X}_{i\ast} \, \beta)^2 / 2 \sigma^2 ] -# \\ -# & = --n \, \log(\sqrt{2 \, \pi} \, \sigma) - \frac{1}{ 2 \sigma^2} \sum_{i=1}^n (y_i - \mathbf{X}_{i, \ast} \, \beta)^2. -\end{align*} -After noting that $\sum_{i=1}^n (Y_i - \mathbf{X}_{i, \ast} \, \beta)^2 = \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2 \, \, \, = \, \, \, (\mathbf{Y} - \mathbf{X} \, \beta)^{\top} \, (\mathbf{Y} - \mathbf{X} \, \beta)$, the log-likelihood can be written as: -\begin{align*} -\mathcal{L}(\mathbf{Y}, \mathbf{X}; \beta, \sigma^2) & = -n \, \log(\sqrt{2 \, \pi} \, \sigma) - \frac{1}{ 2 \sigma^2} \, \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2. -\end{align*} -!et - -In order to find the maximum of the log-likelihood, take its derivate with respect to $\beta$: -!bt -\begin{align*} -\frac{\partial }{\partial \, \beta} \mathcal{L}(\mathbf{Y}, \mathbf{X}; \beta, \sigma^2) & = - \frac{1}{ 2 \sigma^2} \, \frac{\partial }{\partial \, \beta} \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2 \, \, \, = \, \, \, \frac{1}{\sigma^2} \, \mathbf{X}^{\top} (\mathbf{Y} - \mathbf{X} \, \beta). -\end{align*} -!et - -Equate this derivative to zero gives the estimating equation for $\beta$: - -!bt -\begin{align} label{form.normalEquation} -\mathbf{X}^{\top} \mathbf{X} \, \beta & = \mathbf{X}^{\top} \mathbf{Y}. -\end{align} -!et - -Equation (ref{form.normalEquation}) is called to the *normal equation*. Pre-multiplication of both sides of the normal equation by $(\mathbf{X}^{\top} \mathbf{X})^{-1}$ now yields the ML estimator of the regression parameter: $\hat{\beta} = (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y}$, in which it is assumed that $(\mathbf{X}^{\top} \mathbf{X})^{-1}$ is well-defined. - -Along the same lines one obtains the ML estimator of the residual variance. Take the partial derivative of the log-likelihood with respect to $\sigma^2$: - -!bt -\begin{align*} -\frac{\partial }{\partial \, \sigma} \mathcal{L}(\mathbf{Y}, \mathbf{X}; \beta, \sigma^2) & = - \frac{n}{\sigma} + \frac{1}{\sigma^3} \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2. -\end{align*} -!et - - -Equate the right-hand side to zero and solve for $\sigma^2$ to find -$\hat{\sigma}^2 = \tfrac{1}{n} \| \mathbf{Y} - \mathbf{X} \, \beta -\|^2_2$. In this expression $\beta$ is unknown and the ML estimate of -$\beta$ is plugged-in. \\ \\ With explicit expressions of the ML -estimators at hand, we can study their properties. The expectation of -the ML estimator of the regression parameter $\beta$ is: - -!bt -\begin{align*} -\mathbb{E}(\hat{\beta}) & = \mathbb{E}[ -(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y}] -\, \, \, = \, \, \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, -\mathbf{X}^{\top} \mathbb{E}[ \mathbf{Y}] # \\ \, \, \, = \, \, \, -(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{X} \, -\beta \, \, \, \, \, = \, \, \, \beta. -\end{align*} -!et - -Hence, the ML -estimator of the regression coefficients is unbiased. - -The variance of the ML estimator of $\beta$ is: - -!bt -\begin{align*} -\mbox{Var}(\hat{\beta}) & = \mathbb{E} \{ [\hat{\beta} - \mathbb{E}(\hat{\beta})] [\hat{\beta} - \mathbb{E}(\hat{\beta})]^{\top} \} -\\ -& = \mathbb{E} \{ [(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y} - \beta] \, [(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y} - \beta]^{\top} \} -\\ -# & = \mathbb{E} \{ [(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y}] \, [(\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y}]^{\top} \} - \beta \, \beta^{\top} -# \\ -# & = \mathbb{E} \{ (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y} \, \mathbf{Y}^{\top} \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \} - \beta \, \beta^{\top} -# \\ -& = (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \, \mathbb{E} \{ \mathbf{Y} \, \mathbf{Y}^{\top} \} \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} - \beta \, \beta^{\top} -\\ -& = (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \, \{ \mathbf{X} \, \beta \, \beta^{\top} \, \mathbf{X}^{\top} + \SSigma \} \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} - \beta \, \beta^{\top} -# \\ -# & = (\mathbf{X}^T \mathbf{X})^{-1} \, \mathbf{X}^T \, \mathbf{X} \, \beta \, \beta^T \, \mathbf{X}^T \, \mathbf{X} \, (\mathbf{X}^T % \mathbf{X})^{-1} -# \\ -# & & + \, \, \sigma^2 \, (\mathbf{X}^T \mathbf{X})^{-1} \, \mathbf{X}^T \, \mathbf{X} \, (\mathbf{X}^T \mathbf{X})^{-1} - \beta \beta^T -\\ -& = \beta \, \beta^{\top} + \sigma^2 \, (\mathbf{X}^{\top} \mathbf{X})^{-1} - \beta \, \beta^{\top} -\, \, \, = \, \, \, \sigma^2 \, (\mathbf{X}^{\top} \mathbf{X})^{-1}, -\end{align*} -!et - -in which we have used that $\mathbb{E} (\mathbf{Y} \mathbf{Y}^{\top}) -= \mathbf{X} \, \beta \, \beta^{\top} \, \mathbf{X}^{\top} + \sigma^2 -\, \mathbf{I}_{nn}$. From $\mbox{Var}(\hat{\beta}) = \sigma^2 \, -(\mathbf{X}^{\top} \mathbf{X})^{-1}$, one obtains an estimate of the -variance of the estimate of the $j$-th regression coefficient: -$\hat{\sigma}^2 (\hat{\beta}_j ) = \hat{\sigma}^2 \sqrt{ -[(\mathbf{X}^{\top} \mathbf{X})^{-1}]_{jj} }$. This may be used to -construct a confidence interval for the estimates or test the -hypothesis $H_0: \beta_j = 0$. In the latter $\hat{\sigma}^2$ should -not be the maximum likelihood estimator, as it is biased. It is then -to be replaced by the residual sum-of-squares divided by $n-p$ rather -than $n$. - - -The prediction of $Y_i$, denoted $\widehat{Y}_i$, is the expected -value of $Y_i$ according the linear regression model (with its -parameters replaced by their estimates). The prediction of $Y_i$ thus -equals $\mathbb{E}(Y_i; \hat{\beta}, \hat{\sigma}^2) = \mathbf{X}_{i, -\ast} \hat{\beta}$. In matrix notation the prediction is: - -!bt -\begin{align*} -\widehat{\mathbf{Y}} & = \mathbf{X} \, \hat{\beta} \, \, \, = \, \, \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} \, \, \, := \, \, \, \mathbf{H} \mathbf{Y}, -\end{align*} -!et - -where $\mathbf{H}$ is the *hat matrix*, as it `puts the hat' on -$\mathbf{Y}$. Note that the hat matrix is a projection matrix, -i.e. $\mathbf{H}^2 = \mathbf{H}$ for - -!bt -\begin{align*} -\mathbf{H}^2 & = \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \, \, \, = \, \, \, \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top}. -\end{align*} -!et - -Thus, the prediction $\widehat{\mathbf{Y}}$ is an orthogonal -projection of $\mathbf{Y}$ onto the space spanned by the columns of -$\mathbf{X}$. - -With $\widehat{\beta}$ available, an estimate of the errors -$\hat{\varepsilon}_i$, dubbed the *residuals* are obtained via: - -!bt -\begin{align*} -\hat{\vvarepsilon} & = \mathbf{Y} - \widehat{\mathbf{Y}} \, \, \, = \, \, \, \mathbf{Y} - \mathbf{X} \, \hat{\beta} \, \, \, = \, \, \, \mathbf{Y} - \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} \, \, \, = \, \, \, [ \mathbf{I} - \mathbf{X} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} ] \, \mathbf{Y}. -\end{align*} -!et - -Thus, the residuals are a projection of $\mathbf{Y}$ onto the -orthogonal complement of the space spanned by the columns of -$\mathbf{X}$. The residuals are to be used in diagnostics, -e.g. checking of the normality assumption by means of a normal -probability plot. - - - -======= Ridge regression ======= - -When the design matrix is high-dimensional, the covariates (the -columns of $\mathbf{X}$) are super-collinear. Recall *collinearity* in -regression analysis refers to the event of two (or multiple) -covariates being highly linearly related. Consequently, the subspace -spanned by collinear covariates may not be (or close to not being) of -full rank. When the subspace (onto which $\mathbf{Y}$ is projected) -is (close to) rank deficient, it is (almost) impossible to separate -the contribution of the individual covariates. The uncertainty with -respect to the covariate responsible for the variation explained in -$\mathbf{Y}$ is often reflected in the fit of the linear regression -model to data by a large error of the estimates of the regression -parameters corresponding to the collinear covariates. - - -Consider the design matrix: - -!bt -\begin{align*} -\mathbf{X} & = \left( -\begin{array}{rrr} -1 & -1 & 2 -\\ -1 & 0 & 1 -\\ -1 & 2 & -1 -\\ -1 & 1 & 0 -\end{array} \right) -\end{align*} -!et - -The columns of $\mathbf{X}$ are linearly dependent: the first column -is the row-wise sum of the other two columns. The rank (more correct, -the column rank) of a matrix is the dimension of space spanned by the -column vectors. Hence, the rank of $\mathbf{X}$ is equal to the number -of linearly independent columns: $\mbox{rank}(\mathbf{X}) = 2$. - - - - -Super-collinearity of an $(n \times p)$-dimensional design matrix $\mathbf{X}$ implies[^footnote1][^footnote1]: If the (column) rank of $\mathbf{X$ is smaller than $p$, there exists a non-trivial $\mathbf{v} \in \mathbb{R}^p$ such that $\mathbf{X} \mathbf{v} = \mathbf{0}_{p}$. Multiplication of this inequality by $\mathbf{X}^{\top}$ yields $\mathbf{X}^{\top} \mathbf{X} \mathbf{v} = \mathbf{0}_{p}$. As $\mathbf{v} \not= \mathbf{0}_{p}$, this implies that $\mathbf{X}^{\top} \mathbf{X}$ is not invertible.} that the rank of the $(p \times p)$-dimensional matrix $\mathbf{X}^{\top} \mathbf{X}$ is smaller than $p$, and, consequently, it is singular. A square matrix that does not have an inverse is called *singular*. A matrix $\mathbf{A}$ is singular if and only if its determinant is zero: $\mbox{det}(\mathbf{A}) = 0$. - - - -Consider the matrix $\mathbf{A}$ given by: -!bt -\begin{align*} -\mathbf{A} & = \left( -\begin{array}{rr} -1 & 2 -\\ -2 & 4 -\end{array} \right) -\end{align*} -!et -Clearly, $\mbox{det}(\mathbf{A}) = a_{11} a_{22} - a_{12} a_{21} = 1 \times 4 - 2 \times 2 = 0$. Hence, $\mathbf{A}$ is singular and its inverse is undefined. - -As $\mbox{det}(\mathbf{A})$ is equal to the product of the eigenvalues -$\nu_j$ of $\mathbf{A}$, the matrix $\mathbf{A}$ is singular if one -(or more) of the eigenvalues of $\mathbf{A}$ is zero. To see this, -consider the spectral decomposition of $\mathbf{A}$: - -!bt -\begin{align*} -\mathbf{A} & = \sum_{j=1}^p \nu_j \, \mathbf{v}_j \, \mathbf{v}_j^{\top}, -\end{align*} -!et -where $\mathbf{v}_j$ is the eigenvector corresponding to $\nu_j$. The inverse of $\mathbf{A}$ is then: -!bt -\begin{align*} -\mathbf{A}^{-1} & = \sum_{j=1}^p \nu_j^{-1} \, \mathbf{v}_j \, \mathbf{v}_j^{\top}. -\end{align*} -!et - -The right-hand side is undefined if $\nu_j =0$ for any $j$. - - -Matrix $\mathbf{A}$ has eigenvalues $\nu_1 =5$ and $\nu_2=0$. According to the spectral decomposition, the inverse of $\mathbf{A}$ is: -!bt -\begin{align*} -\mathbf{A}^{-1} & = \frac{1}{5} \, \mathbf{v}_1 \, \mathbf{v}_1^{\top} + \frac{1}{0} \, \mathbf{v}_2 \, \mathbf{v}_2^{\top}. -\end{align*} -!et - -This expression is undefined as we divide by zero in the second summand on the right-hand side. - - - -In summary, the columns of a high-dimensional design matrix -$\mathbf{X}$ are linearly dependent and this super-collinearity causes -$\mathbf{X}^{\top} \mathbf{X}$ to be singular. Now recall the ML -estimator of the parameter of the linear regression model: - -!bt -\begin{align} -\hat{\beta} & = (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}. -\end{align} -!et - - -This estimator is only well-defined if $(\mathbf{X}^{\top} -\mathbf{X})^{-1}$ exits. Hence, when $\mathbf{X}$ is high-dimensional -the regression parameter $\beta$ cannot be estimated. - - -Above only the practical consequence of high-dimensionality is presented: the expression $( \mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}$ cannot be evaluated numerically. But the problem arising from the high-dimensionality of the data is more fundamental. To appreciate this, consider the normal equations: - -!bt -\begin{align*} -\mathbf{X}^{\top} \mathbf{X} \beta & = \mathbf{X}^{\top} \mathbf{Y}. -\end{align*} -!et - -The matrix $\mathbf{X}^{\top} \mathbf{X}$ is of rank $n$, while $\beta$ is a vector of length $p$. Hence, while there are $p$ unknowns, the system of linear equations from which these are to be solved effectively comprises $n$ degrees of freedom. If $p > n$, the vector $\beta$ cannot uniquely be determined from this system of equations. To make this more specific let $U$ be the $n$-dimensional space spanned by the columns of $\mathbf{X}$ and the $p-n$-dimensional space $V$ be orthogonal complement of $U$, i.e. $V = U^{\perp}$. Then, $\mathbf{X} \mathbf{v} = \mathbf{0}_{p}$ for all $\mathbf{v} \in V$. So, $V$ is the non-trivial null space of $\mathbf{X}$. Consequently, as $\mathbf{X}^{\top} \mathbf{X} \mathbf{v} = -\mathbf{X}^{\top} \mathbf{0}_{p} = \mathbf{0}_{n}$, the solution of the normal equations is: - -!bt -\begin{align*} -\hat{\beta} & = ( \mathbf{X}^{\top} \mathbf{X})^{-} \mathbf{X}^{\top} \mathbf{Y} + \mathbf{v} \qquad \mbox{for all } \mathbf{v} \in V, -\end{align*} -!et - -where $\mathbf{A}^{-}$ denotes the Moore-Penrose inverse of the matrix $\mathbf{A}$, which is defined as: - -!bt -\begin{align*} -\mathbf{A}^{-} & = \sum_{j=1}^p \nu_j^{-1} \, I_{\{ \nu_j \not= 0 \} } \, \mathbf{v}_j \, \mathbf{v}_j^{\top}. -\end{align*} -!et - -The solution of the normal equations is thus only determined up to an -element from a non-trivial space $V$, and there is no unique estimator -of the regression parameter. - -To obtain an estimate of the regression parameter $\beta$ when -$\mathbf{X}$ is (close to) super-collinearity, cite{Hoer1970} proposed -an ad-hoc fix to resolve the (almost) singularity of -$\mathbf{X}^{\top} \mathbf{X}$. Simply replace $\mathbf{X}^{\top} -\mathbf{X}$ by $\mathbf{X}^{\top} \mathbf{X} + \lambda -\mathbf{I}_{pp}$ with $\lambda \in [0, \infty)$. The scalar $\lambda$ -is a tuning parameter, henceforth called the *penalty parameter*. - - - -Recall the super-collinear design matrix $\mathbf{X}$ of Example ref{example.supercollinearity}. Then, for (say) $\lambda = 1$: -!bt -\begin{align*} -\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} & = \left( -\begin{array}{rrr} -5 & 2 & 2 -\\ -2 & 7 & -4 -\\ -2 & -4 & 7 -\end{array} \right). -\end{align*} -!et -The eigenvalues of this matrix are 11, 7, and 1. Hence, $\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}$ has no zero eigenvalue and its inverse is well-defined. - -With the ad-hoc fix for the singularity of $\mathbf{X}^{\top} \mathbf{X}$, cite{Hoer1970} proceed to define the *ridge regression estimator*: - - -!bt -\begin{align} label{form.ridgeRegressionEstimator} -\hat{\beta}(\lambda) & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}, -\end{align} -!et - -for $\lambda \in [0, \infty)$. Clearly, this is - for $\lambda$ -strictly positive - a well-defined estimator, even if $\mathbf{X}$ is -high-dimensional. However, each choice of $\lambda$ leads to a -different ridge regression estimate. The set of all ridge regression -estimates $\{ \hat{\beta}(\lambda) \, : \, \lambda \in [0, \infty) \}$ -is called the *solution* or *regularization path* of the ridge -estimator. - - - - -Recall the super-collinear design matrix $\mathbf{X}$ of Example ref{example.supercollinearity}. Suppose that the corresponding response vector is $\mathbf{Y} = (1.3, -0.5, 2.6, 0.9)^{\top}$. -The ridge regression estimates for, e.g. $\lambda = 1, 2$, and $10$ are then: -\begin{align*} -\hat{\beta}(1) & = (0.614, 0.548, 0.066)^{\top}, -\\ -\hat{\beta}(2) & = (0.537, 0.490, 0.048)^{\top}, -\\ -\hat{\beta}(10) & = (0.269, 0.267, 0.002)^{\top}. -\end{align*} -The full solution path of the ridge estimator is plotted in Figure ref{fig.ridgeSolPathPlusVar}. - - -Having obtained an estimate of the regression parameter $\beta$, one can define the fit $\widehat{\mathbf{Y}}$. It is defined analogous to the standard case: - -!bt -\begin{align*} -\widehat{\mathbf{Y}}(\lambda) & = \mathbf{X} \hat{\beta}(\lambda) -\, \, \, = \, \, \, \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} -\, \, \, := \, \, \, \mathbf{H}(\lambda) \mathbf{Y}. -\end{align*} -!et - -Previously, when using the ML estimator, the fit could be understood as a projection of $\mathbf{Y}$ onto the subspace spanned by the columns of $\mathbf{X}$. The fit $\widehat{\mathbf{Y}}(\lambda)$ corresponding to the ridge estimator is not a projection of $\mathbf{Y}$ onto $\mathbf{X}$ (confer Exercise ref{question.ridgeResidualsProjection} $\!$a). Consequently, the `ridge residuals' $\mathbf{Y} - \widehat{\mathbf{Y}}(\lambda)$ are not orthogonal to the fit $\widehat{\mathbf{Y}}(\lambda)$ (confer Exercise ref{question.ridgeResidualsProjection} $\!$b). - - -======= Eigenvalue shrinkage ======= - -The effect of the ridge penalty may also studied from the perspective of singular values. Let the singular value decomposition of the $(n \times p)$-dimensional design matrix $\mathbf{X}$ be: - -!bt -\begin{align*} -\mathbf{X} & = \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top}, -\end{align*} -!et - -where $\mathbf{D}_x$ an $(n \times n)$-dimensional diagonal matrix -with the singular values, $\mathbf{U}_x$ an $(n \times n)$-dimensional -matrix with columns containing the left singular vectors (denoted -$\mathbf{u}_i$), and $\mathbf{V}_x$ a $(p \times n)$-dimensional -matrix with columns containing the right singular vectors (denoted -$\mathbf{v}_i$). The columns of $\mathbf{U}_x$ and $\mathbf{V}_x$ are -orthogonal: $\mathbf{U}_x^{\top} \mathbf{U}_x = \mathbf{I}_{nn} = -\mathbf{V}_x^{\top} \mathbf{V}_x$. - -The OLS estimator can then be rewritten in terms of the SVD-matrices as: - - -\begin{align*} -\hat{\beta} & = (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} -\\ -& = (\mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} -\\ -& = (\mathbf{V}_x \mathbf{D}_x^2 \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} -\\ -& = \mathbf{V}_x \mathbf{D}_x^{-2} \mathbf{V}_x^{\top} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} -\\ -& = \mathbf{V}_x \mathbf{D}_x^{-2} \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y}, -\end{align*} -where $\mathbf{D}_x^{-2} \mathbf{D}_x$ is not simplified further to emphasize the effect of the ridge penalty. Similarly, the ridge estimator can be rewritten in terms of the SVD-matrices as: -\begin{align*} -\hat{\beta} & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} -\\ -& = (\mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} -\\ -& = (\mathbf{V}_x \mathbf{D}_x^2 \mathbf{V}_x^{\top} + \lambda \mathbf{V}_x \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} -\\ -& = \mathbf{V}_x (\mathbf{D}_x^{2} + \lambda \mathbf{I}_{nn})^{-1} \mathbf{V}_x^{\top} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y} -\\ -& = \mathbf{V}_x (\mathbf{D}_x^{2} + \lambda \mathbf{I}_{nn})^{-1} \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y}. -\end{align*} -Combining the two results and writing $(\mathbf{D}_x)_{jj} = d_{x,jj}$ we have: -\begin{align*} -d_{x,jj}^{-1} & \geq & \frac{d_{x,jj}}{d_{x,jj}^2 + \lambda} \qquad \mbox{ for all } \lambda > 0. -\end{align*} -Thus, the ridge penalty shrinks the singular values. -\\ -\\ -Return to the problem of the super-collinearity of $\mathbf{X}$ in the high-dimensional setting ($p > n$). The super-collinearity implies the singularity of $\mathbf{X}^{\top} \mathbf{X}$ and prevents the calculation of the OLS estimator of the regression coefficients. However, $\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}$ is non-singular, with inverse: -\begin{align*} -(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} & = \sum_{j=1}^p (d_{x,jj}^2 + \lambda)^{-1} \mathbf{v}_j \mathbf{v}_j^{\top}. -\end{align*} -The right-hand side is well-defined for $\lambda > 0$. - - -===== Principal components regression ===== - -Principal component regression is a close relative to ridge regression that can also be applied in a high-dimensional context. Principal components regression explains the response not by the covariates themselves but by linear combinations of the covariates as defined by the principal components of $\mathbf{X}$. Let $\mathbf{U} \mathbf{D} \mathbf{V}^{\top}$ be the singular value decomposition of $\mathbf{X}$. The $i$-th principal component of $\mathbf{X}$ is then $\mathbf{X} \mathbf{v}_i$, henceforth denoted $\mathbf{z}_i$. Let $\mathbf{Z}_k$ be the matrix of the first $k$ principal components, i.e. $\mathbf{Z}_k = \mathbf{X} \mathbf{V}_k$ where $\mathbf{V}_k$ contains the first $k$ right singular vectors as columns. Principal components regression then amounts to regressing the response $\mathbf{Y}$ onto $\mathbf{Z}_{k}$, that is, it fits the model $\mathbf{Y} = \mathbf{Z}_k \ggamma + \vvarepsilon$. The least squares estimator of $\ggamma$ then is (with some abuse of notation): -\begin{align*} -\hat{\ggamma} & = (\mathbf{Z}_k^{\top} \mathbf{Z}_k)^{-1} \mathbf{Z}_k^{\top} \mathbf{Y} \, \, \, = \, \, \, (\mathbf{V}_k^{\top} \mathbf{X}^{\top} \mathbf{X} \mathbf{V}_k)^{-1} \mathbf{V}_k^{\top} \mathbf{X}^{\top} \mathbf{Y} -\\ -& = (\mathbf{V}_k^{\top} \mathbf{V} \mathbf{D} \mathbf{U}^{\top} \mathbf{U} \mathbf{D} \mathbf{V}^{\top} \mathbf{V}_k)^{-1} \mathbf{V}_k^{\top} \mathbf{V} \mathbf{D} \mathbf{U}^{\top} \mathbf{Y} -\\ -& = (\mathbf{I}_{kn} \mathbf{D}^2 \mathbf{I}_{nk})^{-1} \mathbf{I}_{kn} \mathbf{D} \mathbf{U}^{\top} \mathbf{Y} -\\ -& = \mathbf{D}_k^{-2} \widetilde{\mathbf{D}}_k \mathbf{U}^{\top} \mathbf{Y} \, \, \, = \, \, \ \widetilde{\mathbf{D}}_k^{-1} \mathbf{U}^{\top} \mathbf{Y}, -\end{align*} -where $\mathbf{D}_k$ and $\widetilde{\mathbf{D}}_k$ are submatrices of $\mathbf{D}$. The matrix $\mathbf{D}_k$ is obtained from $\mathbf{D}$ by removal of the last $n-p$ rows and columsn, while for $\widetilde{\mathbf{D}}_k$ only the last $n-k$ rows are dropped. Similarly, $\mathbf{I}_{kn}$ and $\mathbf{I}_{nk}$ are obtained from $\mathbf{I}_{nn}$ by removal of the last $n-k$ rows and columns, respectively. The principal component regression estimator of $\beta$ then is $\hat{\beta}_{\mbox{{\tiny pcr}}} = \mathbf{V}_k \widetilde{\mathbf{D}}_k^{-1} \mathbf{U}^{\top} \mathbf{Y}$. When $k$ is set equal to the column rank of $\mathbf{X}$, and thus to the rank of $\mathbf{X}^{\top} \mathbf{X}$, the -principal component regression estimator $\hat{\beta}_{\mbox{{\tiny pcr}}} = (\mathbf{X}^{\top} \mathbf{X})^- \mathbf{X}^{\top} \mathbf{Y}$, where $\mathbf{A}^-$ denotes the Moore-Penrose inverse of matrix $\mathbf{A}$. - -The relation between ridge and principal component regression becomes clear when their corresponding estimators are written in terms of the singular value decomposition of $\mathbf{X}$: -\begin{align*} -\hat{\beta}_{\mbox{{\tiny pcr}}} & = \mathbf{V}_x (\mathbf{I}_{nk} \mathbf{D}_x \mathbf{I}_{kn})^{-1} \mathbf{U}_x^{\top} \mathbf{Y}, -\\ -\hat{\beta} (\lambda) & = \mathbf{V}_x (\mathbf{D}_x^2 + \lambda \mathbf{I}_{nn})^{-1} \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{Y}. -\end{align*} -Both operate on the singular values of the design matrix. But where principal component regression thresholds the singular values of $\mathbf{X}$, ridge regression shrinks them (depending on their size). Hence, one applies a discrete map on the singular values while the other a continuous one. - - - - - -======= Moments ======= - -The first two moments of the ridge regression estimator are derived. Next the performance of the ridge regression estimator is studied in terms of the mean squared error, which combines the first two moments. - - -===== Expectation ===== - -The left panel of Figure ref{fig.ridgeSolPathPlusVar} shows ridge estimates of the regression parameters converging to zero as the penalty parameter tends to infinity. This behaviour of the ridge estimator does not depend on the specifics of the data set. To see this study the expectation of the ridge estimator: -\begin{align*} -\mathbb{E} \big[ \hat{\beta}(\lambda) \big] & = \mathbb{E} \big[ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} \big] -\\ -& = \mathbb{E} \big[ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{X}^{\top} \mathbf{Y} \big] -\\ -& = \mathbb{E} \big[ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \hat{\beta} \big] -\\ -& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \mathbb{E} ( \hat{\beta} ) -\\ -& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \beta. -\end{align*} -Clearly, $\mathbb{E} \big[ \hat{\beta}(\lambda) \big] \not= \beta$ for any $\lambda > 0$. Hence, the ridge estimator is biased. - -From the expression above it is clear that the expectation of the ridge estimator vanishes as $\lambda$ tends to infinity: -\begin{align*} -\lim_{\lambda \rightarrow \infty} \mathbb{E} \big[ \hat{\beta}(\lambda) \big] & = \lim_{\lambda \rightarrow \infty} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \beta \, \, \, = \, \, \, \mathbf{0}_{p}. -\end{align*} -Hence, all regression coefficients are shrunken towards zero as the penalty parameter increases. This also holds for $\mathbf{X}$ with $p > n$. Furthermore, this behaviour is not strictly monotone in $\lambda$: $\lambda_{a} > \lambda_b$ does not necessarily imply $|\hat{\beta}_j (\lambda_a) | < |\hat{\beta}_j (\lambda_b) |$. Upon close inspection this can be witnessed from the ridge solution path of $\beta_3$ in Figure ref{fig.ridgeSolPathPlusVar}. - - -\begin{example} *Orthonormal design matrix* label{example.orthoronormalDesign} -\\ -Consider an orthonormal design matrix $\mathbf{X}$, i.e.: -\begin{align*} -\mathbf{X}^{\top} \mathbf{X} & = \mathbf{I}_{pp} \, \, \, = \, \, \, (\mathbf{X}^{\top} \mathbf{X})^{-1}. -\end{align*} -An example of an orthonormal design matrix would be: -\begin{align*} -\mathbf{X} & = \frac{1}{2} \left( -\begin{array}{rr} --1 & -1 -\\ --1 & 1 -\\ -1 & -1 -\\ -1 & 1 -\end{array} \right). -\end{align*} -This design matrix is orthonormal as $\mathbf{X}^{\top} \mathbf{X} = \mathbf{I}_{22}$, which is easily verified: -\begin{align*} -\mathbf{X}^{\top} \mathbf{X} & = \frac{1}{4} -\left( -\begin{array}{rrrr} --1 & -1 & 1 & 1 -\\ --1 & 1 & -1 & 1 -\end{array} \right) -\left( -\begin{array}{rr} --1 & -1 -\\ --1 & 1 -\\ -1 & -1 -\\ -1 & 1 -\end{array} \right) \, \, \, = \, \, \, -\frac{1}{4} -\left( -\begin{array}{rr} -4 & 0 -\\ -0 & 4 -\end{array} \right) \, \, \, = \, \, \, \mathbf{I}_{22}. -\end{align*} -In case of an orthonormal design matrix the relation between the OLS and ridge estimator is: -\begin{align*} -\hat{\beta}(\lambda) & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} -\, \, \, = \, \, \, (\mathbf{I}_{pp} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} -\\ -& = (1 + \lambda)^{-1} \mathbf{I}_{pp} \mathbf{X}^{\top} \mathbf{Y} -\qquad \, \, = \, \, \, (1 + \lambda)^{-1} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} -\\ -& = (1 + \lambda)^{-1} \hat{\beta}. -\end{align*} -Hence, the ridge estimator scales the OLS estimator by a factor. When taking the expectation on both sides, it is evident that the ridge estimator converges to zero as $\lambda \rightarrow \infty$. -\end{example} - - - -===== Variance ===== - -As for the ML estimate of the regression parameter $\beta$ of model (ref{form.linRegressionModelinMatrix}), we derive the second moment of the ridge estimator. Hereto define: -\begin{align*} -\mathbf{W}_{\lambda} & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{X}. -\end{align*} -Using $\mathbf{W}_{\lambda}$ the ridge estimator $\hat{\beta}(\lambda)$ can be expressed as $\mathbf{W}_{\lambda} \hat{\beta}$ for: -\begin{align*} -\mathbf{W}_{\lambda} \hat{\beta} & = \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} -\\ -& = \{ (\mathbf{X}^{\top} \mathbf{X})^{-1} [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ] \}^{-1} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} -\\ -& = [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} -\\ -& = [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{Y} -\\ -& = \hat{\beta}(\lambda). -\end{align*} -The linear operator $\mathbf{W}_{\lambda}$ thus transforms the ML estimator of the regression parameter into the ridge estimator. - -It is now easily seen that: -\begin{align*} -\mbox{Var}[ \hat{\beta}(\lambda) ] & = \mbox{Var}[ \mathbf{W}_{\lambda} \hat{\beta} ] \qquad \qquad \, \, \, \, \, \, = \, \, \, \mathbf{W}_{\lambda} \mbox{Var}[\hat{\beta} ] \mathbf{W}_{\lambda}^{\top} -\\ -& = \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} \, \, \, = \, \, \, \sigma^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{X} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}\}^{\top}, -\end{align*} -in which we have used $\mbox{Var}(\mathbf{A} \mathbf{Y}) = \mathbf{A} \mbox{Var}( \mathbf{Y}) \mathbf{A}^{\top}$ for a non-random matrix $\mathbf{A}$, the fact that $\mathbf{W}_{\lambda}$ is non-random, and $ \mbox{Var}[\hat{\beta} ] = \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1}$. - - -Like the expectation the variance of the ridge estimator vanishes as $\lambda$ tends to infinity: -\begin{align*} -\lim_{\lambda \rightarrow \infty} \mbox{Var} \big[ \hat{\beta}(\lambda) \big] & = \lim_{\lambda \rightarrow \infty} \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} \, \, \, = \, \, \, \mathbf{0}_{pp}. -\end{align*} -Hence, the variance of the ridge regression coefficient estimates decreases towards zero as the penalty parameter becomes large. This is illustrated in the right panel of Figure ref{fig.ridgeSolPathPlusVar} for the data of Example ref{example.supercollinearity}. - - -With an explicit expression of the variance of the ridge estimator at hand, we can compare it to that of the OLS estimator: -\begin{align*} -\mbox{Var}[ \hat{\beta} ] - \mbox{Var}[ \hat{\beta}(\lambda) ] & = \sigma^2 [(\mathbf{X}^{\top} \mathbf{X})^{-1} - \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} ] -\\ -& = \sigma^2 \mathbf{W}_{\lambda} \{ [\mathbf{I} + \lambda (\mathbf{X}^{\top} \mathbf{X})^{-1} ] (\mathbf{X}^{\top} \mathbf{X})^{-1} [\mathbf{I} + \lambda (\mathbf{X}^{\top} \mathbf{X})^{-1} ]^{\top} - (\mathbf{X}^{\top} \mathbf{X})^{-1} \} \mathbf{W}_{\lambda}^{\top} -\\ -& = \sigma^2 \mathbf{W}_{\lambda} [ 2 \, \lambda \, (\mathbf{X}^{\top} \mathbf{X})^{-2} + \lambda^2 (\mathbf{X}^{\top} \mathbf{X})^{-3} ] \mathbf{W}_{\lambda}^{\top} -\\ -& = \sigma^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} [ 2 \, \lambda \, \mathbf{I}_{pp} + \lambda^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} ] \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}\}^{\top}. -\end{align*} -The difference is non-negative definite as each component in the matrix product is non-negative definite. Hence, the variance of the ML estimator exceeds (in the positive definite ordering) that of the ridge estimator: - -!bt - -!bt -\begin{align} label{form.VarInequalityMLandRidge} -\mbox{Var}[ \hat{\beta} ] & \succeq & \mbox{Var}[ \hat{\beta}(\lambda) ], -\end{align} -!et -!et -with the inequality being strict if $\lambda > 0$. In other words, the variance of the ML estimator is larger than that of the ridge estimator (in the sense that their difference is non-negative definite). The variance inequality (ref{form.VarInequalityMLandRidge}) can be interpreted in terms of the stochastic behaviour of the estimator. This is illustrated by the next example. - -# original latex figure with scale=0.45, angle=0 - -FIGURE: [varMLellipses.eps, width=400 frac=1.0] Level sets of the distribution of the ML (left panel) and ridge (right panel) regression estimators.} label{fig.varOLSandRidge -# \afterpage{} - - -\begin{example} *Variance comparison* -\\ -Consider the design matrix: -\begin{align*} -\mathbf{X} & = \left( -\begin{array}{rr} --1 & 2 -\\ -0 & 1 -\\ -2 & -1 -\\ -1 & 0 -\end{array} \right). -\end{align*} -The variances of the ML and ridge (with $\lambda=1$) estimates of the regression coefficients then are: -\begin{align*} -\mbox{Var}(\hat{\beta}) & = \sigma^2 \left( -\begin{array}{rr} -0.3 & 0.2 -\\ -0.2 & 0.3 -\end{array} \right) -\qquad \mbox{and} \qquad -\mbox{Var}[\hat{\beta}(\lambda)] \, \, \, = \, \, \, \sigma^2 \left( -\begin{array}{rr} -0.1524 & 0.0698 -\\ -0.0698 & 0.1524 -\end{array} \right). -\end{align*} -These variances can be used to construct levels sets of the distribution of the estimates. The level sets that contain 50\%, 75\% and 95\% of the distribution of the ML and ridge estimates are plotted in Figure ref{fig.varOLSandRidge}. In line with inequality (ref{form.VarInequalityMLandRidge}) the level sets of the ridge estimate are smaller than that of the ML estimate: it thus varies less. -\end{example} - - - - -\begin{contexample}_ref{example.orthoronormalDesign_} *Orthonormal design matrix (continued)* -\\ -Assume the design matrix $\mathbf{X}$ is orthonormal. Then, $\mbox{Var}[ \hat{\beta} ] = \sigma^2 \mathbf{I}_{pp}$ and -\begin{align*} -\mbox{Var}[ \hat{\beta}(\lambda) ] & = \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} -\, \, \, = \, \, \, \sigma^2 [\mathbf{I}_{pp} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{I}_{pp} \{ [\mathbf{I}_{pp} + \lambda \mathbf{I}_{pp} ]^{-1} \}^{\top} -\, \, \, = \, \, \, \sigma^2 (1 + \lambda )^{-2} \mathbf{I}_{pp} . -\end{align*} -As the penalty parameter $\lambda$ is non-negative the former exceeds the latter. In particular, this expression vanishes as $\lambda \rightarrow \infty$. -\end{contexample} - -# #if FORMAT in ("latex", "pdflatex") -\noindent -# #endif -The full distribution of the ridge regression estimator is now known. The estimator, $\hat{\beta}(\lambda) = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}$ is a linear estimator, linear in $\mathbf{Y}$. As $\mathbf{Y}$ is normally distributed, so is $\hat{\beta}(\lambda)$. Moreover, the normal distribution is fully characterized by its first two moments, which are available. Hence: -\begin{align*} -\hat{\beta}(\lambda) & \sim & \mathcal{N} \big( (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{X} \, \beta, \sigma^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{X} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}\}^{\top} \big). -\end{align*} -Given $\lambda$ and $\beta$, the random behavior of the estimator is thus known. - - - -===== Mean squared error} label{sect:ridgeMSE ===== -Previously, we motivated the ridge estimator as an ad hoc solution to collinearity. An alternative motivation comes from studying the Mean Squared Error (MSE) of the ridge regression estimator: for a suitable choice of $\lambda$ the ridge regression estimator may outperform the ML regression estimator in terms of the MSE. Before we prove this, we first derive the MSE of the ridge estimator and quote some auxiliary results. - -Recall that (in general) for any estimator of a parameter $\theta$: -\begin{align*} -\mbox{MSE}( \hat{\theta} ) & = \mathbb{E} [ ( \hat{\theta} - \theta)^2 ] -\, \, \, = \, \, \, \mbox{Var}( \hat{ \theta} ) + [\mbox{Bias} ( \hat{\theta} )]^2. -\end{align*} -Hence, the MSE is a measure of the quality of the estimator. - -The MSE of the ridge estimator is: - -!bt - -!bt -\begin{align} -\mbox{MSE}[\hat{\beta}(\lambda)] & = \mathbb{E} [ (\mathbf{W}_{\lambda} \, \hat{\beta} - \beta)^{\top} \, (\mathbf{W}_{\lambda} \, \hat{\beta} - \beta) ] \nonumber -\\ -& = \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \hat{\beta} ) - \mathbb{E} ( \beta^{\top} \, \mathbf{W}_{\lambda} \, \hat{\beta}) - \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \beta) + \mathbb{E} ( \beta^{\top} \beta) \nonumber -\\ -& = \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \hat{\beta} ) - \mathbb{E} ( \beta^{\top} \, \mathbf{W}_{\lambda}^{\top} \mathbf{W}_{\lambda} \, \hat{\beta}) - \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \beta) + \mathbb{E} ( \beta^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \beta ) \nonumber -\\ -& & - \mathbb{E} ( \beta^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \beta ) + \mathbb{E} ( \beta^{\top} \, \mathbf{W}_{\lambda}^{\top} \mathbf{W}_{\lambda} \, \hat{\beta}) + \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \beta) \nonumber -\\ -& & - \mathbb{E} ( \beta^{\top} \, \mathbf{W}_{\lambda} \, \hat{\beta}) - \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \, \beta) + \mathbb{E} ( \beta^{\top} \beta) \nonumber -\\ -& = \mathbb{E} [ ( \hat{\beta} - \beta )^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \, (\hat{\beta} - \beta) ] \nonumber -\\ -& & - \beta^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \beta + \beta^{\top} \, \mathbf{W}_{\lambda}^{\top} \mathbf{W}_{\lambda} \, \beta + \beta^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \beta \nonumber -\\ -& & - \beta^{\top} \, \mathbf{W}_{\lambda} \, \beta - \beta^{\top} \mathbf{W}_{\lambda}^{\top} \, \beta + \beta^{\top} \beta \nonumber -\\ -& = \mathbb{E} \big\{ ( \hat{\beta} - \beta )^{\top} \mathbf{W}_{\lambda}^{\top} \, \mathbf{W}_{\lambda} \, (\hat{\beta} - \beta) \big\} + \beta^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \, \beta \nonumber -\\ -& = \sigma^2 \, \mbox{tr}\big\{ \mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{W}_{\lambda}^{\top} \big\} + \beta^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \, \beta. label{form.ridgeMSE} -\end{align} -!et -!et -In the last step we have used $\hat{\beta} \sim \mathcal{N}( \beta, \sigma^2 \, [\mathbf{X}^{\top} \mathbf{X}]^{-1} )$ and the expectation of the quadratic form of a multivariate random variable $\vvarepsilon \sim \mathcal{N}(\mmu_{\varepsilon}, \SSigma_{\varepsilon})$ for some nonrandom symmetric positive definite matrix $\LLambda$ is (cf. \citealt{Math1992}): -\begin{align*} -\mathbb{E} ( \vvarepsilon^{\top} \, \LLambda \, \vvarepsilon) & = \mbox{tr} ( \LLambda \, \SSigma_{\varepsilon}) + \mmu_{\varepsilon}^{\top} \, \LLambda \, \mmu_{\varepsilon}, -\end{align*} -of course replacing $\vvarepsilon$ by $\hat{\beta}$ in this expectation. The first summand in the final derived expression for $\mbox{MSE}[\hat{\beta}(\lambda)]$ is the sum of the variances of the ridge estimator, while the second summand can be thought of the ``squared bias'' of the ridge estimator. In particular, $\lim_{\lambda \rightarrow \infty} \mbox{MSE}[\hat{\beta}(\lambda)] = \beta^{\top} \beta$, which is the squared biased for an estimator that equals zero (as does the ridge estimator in the limit). - - - -\begin{example} *Orthonormal design matrix* -\\ -Assume the design matrix $\mathbf{X}$ is orthonormal. Then, $\mbox{MSE}[ \hat{\beta} ] = p \, \sigma^2$ and -\begin{align*} -\mbox{MSE}[ \hat{\beta}(\lambda) ] & = \frac{p \, \sigma^2}{ (1+ \lambda)^{2}} + \frac{\lambda^2}{ (1+ \lambda)^{2}} \beta^{\top} \beta. -\end{align*} -The latter achieves its minimum at: $\lambda = p \sigma^2 / \beta^{\top} \beta$. -\end{example} - - - -The following theorem and proposition are required for the proof of the main result. - -\begin{theorem} *(Theorem 1 of \citealp{Theo1974*}) label{theo.Theobald1} -\\ -Let $\hat{\ttheta}_1$ and $\hat{\ttheta}_2$ be (different) estimators of $\ttheta$ with second order moments: -\begin{align*} -\mathbf{M}_k & = \mathbb{E} [ (\hat{\ttheta}_k - \ttheta) (\hat{\ttheta}_k - \ttheta)^{\top} ] \qquad \mbox{for } k=1,2, -\end{align*} -and -\begin{align*} -\mbox{MSE}(\hat{\ttheta}_k) & = \mathbb{E} [ (\hat{\ttheta}_k - \ttheta)^{\top} \mathbf{A} (\hat{\ttheta}_k - \ttheta) ] \qquad \mbox{for } k=1,2, -\end{align*} -where $\mathbf{A} \succeq 0$. Then, $\mathbf{M}_1 - \mathbf{M}_2 \succeq 0$ if and only if $\mbox{MSE}(\hat{\ttheta}_1) - \mbox{MSE}(\hat{\ttheta}_2) \geq 0$ for all $\mathbf{A} \succeq 0$. -\end{theorem} - - -\begin{proposition} *(\citealp{Fare1976*}) label{prop.Farebrother} -\\ -Let $\mathbf{A}$ be a $(p \times p)$-dimensional, positive definite matrix, $\mathbf{b}$ be a nonzero $p$ dimensional vector, and $c \in \mathbb{R}_+$. Then, $c \mathbf{A} - \mathbf{b} \mathbf{b}^{\top} \succ 0$ if and only if $\mathbf{b}^{\top} \mathbf{A}^{-1} \mathbf{b} > c$. -\end{proposition} - -We are now ready to proof the main result, formalized as Theorem ref{theo.Theobald2}, that for some $\lambda$ the ridge regression estimator yields a lower MSE than the ML regression estimator. - -\begin{theorem} *(Theorem 2 of \citealp{Theo1974*}) label{theo.Theobald2} -\\ -There exists $\lambda > 0$ such that $\mbox{MSE}[\hat{\beta}(\lambda)] < \mbox{MSE}[\hat{\beta}(0)] = \mbox{MSE}[\hat{\beta}]$. -\end{theorem} - -\begin{proof} -The second order moment matrix of the ridge estimator is: -\begin{align*} -\mathbf{M} (\lambda) & := & \mathbb{E} [ (\hat{\beta}(\lambda) - \beta) (\hat{\beta} (\lambda) - \beta)^{\top} ] -\\ -& = \mathbb{E} \{ \hat{\beta}(\lambda) [\hat{\beta}(\lambda)]^{\top} \} - \mathbb{E} [ \hat{\beta}(\lambda) ] \{ \mathbb{E} [ \hat{\beta}(\lambda) ] \}^{\top} + \mathbb{E} [\hat{\beta} (\lambda) - \beta)] \{ \mathbb{E} [\hat{\beta} (\lambda) - \beta)] \}^{\top} -\\ -& = \mbox{Var}[ \hat{\beta}(\lambda) ] + \mathbb{E} [\hat{\beta} (\lambda) - \beta)] \{ \mathbb{E} [\hat{\beta} (\lambda) - \beta)] \}^{\top}. -\end{align*} -Then: -\begin{align*} -\mathbf{M} ( 0 ) - \mathbf{M}(\lambda) & = \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} - \sigma^2 \mathbf{W}_{\lambda} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} ] -\\ -& & - (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \beta \beta^{\top} (\mathbf{W}_{\lambda} -\mathbf{I}_{pp})^{\top} -\\ -& = \sigma^2 \mathbf{W}_{\lambda} [ 2 \, \lambda \, (\mathbf{X}^{\top} \mathbf{X})^{-2} + \lambda^2 (\mathbf{X}^{\top} \mathbf{X})^{-3} ] \mathbf{W}_{\lambda}^{\top} -\\ -& & - \lambda^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \beta \beta^{\top} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top} -\\ -& = \sigma^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} [ 2 \, \lambda \, \mathbf{I}_{pp} + \lambda^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} ] \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top} -\\ -& & - \lambda^2 [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \beta \beta^{\top} \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top} -\\ -& = \lambda [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} [ 2 \, \sigma^2 \, \mathbf{I}_{pp} + \lambda \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} - \lambda \beta \beta^{\top} ] \{ [ \mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}]^{-1} \}^{\top}. -\end{align*} -This is positive definite if and only if $ 2 \, \sigma^2 \, \mathbf{I}_{pp} + \lambda \sigma^2 (\mathbf{X}^{\top} \mathbf{X})^{-1} - \lambda \beta \beta^{\top} \succ 0$. Hereto it suffices to show that $2 \, \sigma^2 \, \mathbf{I}_{pp} - \lambda \beta \beta^{\top} \succ 0$. By Proposition ref{prop.Farebrother} this holds for $\lambda$ such that $2 \sigma^2 (\beta^{\top} \beta)^{-1} > \lambda$. For these $\lambda$, we thus have $\mathbf{M} ( 0 ) - \mathbf{M}(\lambda)$. Application of Theorem ref{theo.Theobald1} now concludes the proof. -\end{proof} -This result of cite{Theo1974} is generalized by cite{Fare1976} to the class of design matrices $\mathbf{X}$ with $\mbox{rank}(\mathbf{X}) < p$. -\\ -\\ -Theorem ref{theo.Theobald2} can be used to illustrate that the ridge regression estimator strikes a balance between the bias and variance. This is illustrated in the left panel of Figure ref{fig.MSEridge}. For small $\lambda$, the variance of the ridge estimator dominates the MSE. This may be understood when realizing that in this domain of $\lambda$ the ridge estimator is close to the unbiased ML regression estimator. For large $\lambda$, the variance vanishes and the bias dominates the MSE. For small enough values of $\lambda$, the decrease in variance of the ridge regression estimator exceeds the increase in its bias. As the MSE is the sum of these two, the MSE first decreases as $\lambda$ moves away from zero. In particular, as $\lambda = 0$ corresponds to the ML regression estimator, the ridge regression estimator yields a lower MSE for these values of $\lambda$. In the right panel of Figure ref{fig.MSEridge} $\mbox{MSE}[ \hat{\beta}(\lambda)] < \mbox{MSE}[ \hat{\beta}(0)]$ for $\lambda < 7$ (roughly) and the ridge estimator outperforms the ML estimator. -# original latex figure with scale=0.45, angle=0 - -FIGURE: [MSE_ridge.eps, width=400 frac=1.0] Left panel: mean squared error, and its `bias' and `variance' parts, of the ridge regression estimator (for artificial data). Right panel: mean squared error of the ridge and ML estimator of the regression coefficient vector (for the same artificial data).} label{fig.MSEridge -# \afterpage{} -\\ -\\ -# #if FORMAT in ("latex", "pdflatex") -\noindent -# #endif -Besides another motivation behind the ridge regression estimator, the use of Theorem ref{theo.Theobald2} is limited. The optimal choice of $\lambda$ depends on the quantities $\beta$ and $\sigma^2$. These are unknown in practice. Then, the penalty parameter is chosen in a data-driven fashion by means of cross-validation (see Section ref{subsect.crossvalidation}). -\\ -\\ -\begin{remark} \mbox{ } -\\ -Theorem ref{theo.Theobald2} can also be used to conclude on the biasedness of the ridge regression estimator. The Gauss-Markov theorem \citep{Rao1973} states (under some assumptions) that the ML regression estimator is the best linear unbiased estimator (BLUE) with the smallest MSE. As the ridge regression estimator is a linear estimator and outperforms (in terms of MSE) this ML estimator, it must be biased (for it would otherwise refute the Gauss-Markov theorem). -\end{remark} - - - - -======= Constrained estimation} label{sect.constrainedEstimation ======= -The ad-hoc fix of cite{Hoer1970} to super-collinearity of the design matrix (and, consequently the singularity of the matrix $\mathbf{X}^{\top} \mathbf{X}$) has been motivated post-hoc. -The ridge estimator minimizes the *ridge loss function*, which is defined as: - -!bt - -!bt -\begin{align} -\mathcal{L}_{\mbox{{\footnotesize ridge}}}(\beta; \lambda) & = \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2 + \lambda \| \beta \|^2_2 -\, \, \, = \, \, \, \sum_{i=1}^n (Y_i - \mathbf{X}_{i\ast} \, \beta)^2 + \lambda \sum_{j=1}^p \beta_j^2. label{form.ridgeLossFunction} -\end{align} -!et -!et -This loss function is the traditional sum-of-squares augmented with a *penalty*. The particular form of the penalty, $\lambda \| \beta \|^2_2$ is referred to as the *ridge penalty* and $\lambda$ as the *penalty parameter*. For $\lambda=0$, minimization of the ridge loss function yields the ML estimator. For any $\lambda > 0$, the ridge penalty contributes to the loss function, affecting its minimum and its location. The minimum of the sum-of-squares is well-known. The minimum of the ridge penalty is attained at $\beta = \mathbf{0}_{p}$ whenever $\lambda > 0$. The $\beta$ that minimizes $\mathcal{L}_{\mbox{{\footnotesize ridge}}}(\beta; \lambda)$ then balances the sum-of-squares and the penalty. The effect of the penalty in this balancing act is to shrink the regression coefficients towards zero, its minimum. In particular, the larger $\lambda$, the larger the contribution of the penalty to the loss function, the stronger the tendency to shrink non-zero regression coefficients to zero (and decrease the contribution of the penalty to the loss function). This motivates the name `penalty' as non-zero elements of $\beta$ increase (or penalize) the loss function. - - -To verify that the ridge estimator indeed minimizes the ridge loss function, proceed as usual. Take the derivative with respect to $\beta$: -\begin{align*} -\frac{\partial}{\partial \beta} \mathcal{L}_{\mbox{{\footnotesize ridge}}}(\beta; \lambda) & = -2 \, \mathbf{X}^{\top} (\mathbf{Y} - \mathbf{X} \beta) + 2 \, \lambda \, \mathbf{I}_{pp} \, \beta \, \, \, = \, \, \, -2 \, \mathbf{X}^{\top} \mathbf{Y} + 2 \, ( \mathbf{X}^{\top} \mathbf{X} + \lambda \, \mathbf{I}_{pp}) \beta. -\end{align*} -Equate the derivative to zero and solve for $\beta$. This yields the ridge regression estimator. - -The ridge estimator is thus a stationary point of the ridge loss function. A stationary point corresponds to a minimum if the Hessian matrix with second order partial derivatives is positive definite. The Hessian of the ridge loss function is -\begin{align*} -\frac{\partial^2}{\partial \beta \, \partial \beta^{\top}} \mathcal{L}_{\mbox{{\footnotesize ridge}}}(\beta; \lambda) & = 2 \, ( \mathbf{X}^{\top} \mathbf{X} + \lambda \, \mathbf{I}_{pp}). -\end{align*} -This Hessian is the sum of the semi-positive definite matrix $\mathbf{X}^{\top} \mathbf{X}$ and the positive definite matrix $\lambda \, \mathbf{I}_{pp}$. Lemma 14.2.4 of cite{Harv2008} then states that the sum of these matrices is itself a positive definite matrix. Hence, the Hessian is positive definite and the ridge loss function has a stationary point at the ridge estimator, which is a minimum. - -The ridge regression estimator minimizes the ridge loss function. It rests to verify that it is a global minimum. To this end we introduce the concept of a convex function. As a prerequisite, a set $\mathcal{S} \subset \mathbb{R}^p$ is called *convex* if for all $\beta_1, \beta_2 \in \mathcal{S}$ their weighted average $\beta_{\theta} = (1 - \theta) \beta_1 + \theta \beta_2$ for all $\theta \in [0, 1]$ is itself an element of $\mathcal{S}$, thus $\beta_{\theta} \in \mathcal{S}$. If for all $\theta \in (0, 1)$, the weighted average $\beta_{\theta}$ is inside $\mathcal{S}$ and not on its boundary, the set is called *strict convex*. Examples of (strict) convex and nonconvex sets are depicted in Figure ref{fig.ridgeAsConstrainedEst}. A function $f(\cdot)$ is *(strict) convex* if the set $\{ y \, : \, y \geq f(\beta) \mbox{ for all } \beta \in \mathcal{S} \mbox{ for any convex } \mathcal{S} \}$, called the epigraph of $f(\cdot)$, is (strict) convex. Examples of (strict) convex and nonconvex functions are depicted in Figure ref{fig.ridgeAsConstrainedEst}. The ridge loss function is the sum of two parabola's: one at least convex and the other a strict convex function in $\beta$. The sum of convex and strict convex function is itself strict convex (confer Lemma 9.4.2 of \citealt{Flet2008}). The ridge loss function is thus strict convex. Theorem 9.4.1 of \citealt{Flet2008} then warrants, by the strict convexity of the ridge loss function, that the ridge estimator is a global minimum. -\\ -\\ -From the ridge loss function the limiting behavior of the variance of the ridge regression estimator can be understood. The ridge penalty with its minimum $\beta = \mathbf{0}_{p}$ does not involve data and, consequently, the variance of its minimum equals zero. With the ridge regression being a compromise between the ML estimator and the minimum of the penalty, so is its variance a compromise of their variances. As $\lambda$ tends to infinity, the ridge estimator and its variance converge to the minimum and the variance of the minimum, respectively. Hence, in the limit (large $\lambda$) the variance of the ridge regression estimator vanishes. Understandably, as the penalty now fully dominates the loss function and, consequently, it does no longer involve data (i.e. randomness). -# original latex figure with scale=0.38, angle=0 - -FIGURE: [convexSets.eps, width=400 frac=1.0] Top panels show examples of convex (left) and nonconvex (right) sets. Middle panels show examples of convex (left) and nonconvex (right) functions. The left bottom panel illustrates the ridge estimation as a constrained estimation problem. The ellipses represent the contours of the ML loss function, with the blue dot at the center the ML estimate. The circle is the ridge parameter constraint. The red dot is the ridge estimate. It is at the intersection of the ridge constraint and the smallest contour with a non-empty intersection with the constraint. The right bottom panel shows the data corresponding to Example ref{exam.overfitting}. The grey line represents the `true' relationship, while the black line the fitted one. } label{fig.ridgeAsConstrainedEst -\afterpage{} -\\ -\\ -Above it has been shown that the ridge estimator can be defined as: - -!bt - -!bt -\begin{align} label{form.ridgeEstViaPenEst} -\hat{\beta}(\lambda) & = \arg \min_{\beta} \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2 + \lambda \| \beta \|^2_2. -\end{align} -!et -!et -This minimization problem can be reformulated into the following constrained optimization problem (illustrated in Figure ref{fig.ridgeAsConstrainedEst}): - -!bt - -!bt -\begin{align} label{form.constrEstProblemRidge} -\hat{\beta}(\lambda) & = \arg \min_{\| \beta \|_2^2 \leq c} \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2, -\end{align} -!et -!et -for some suitable $c > 0$. The constrained optimization problem (ref{form.constrEstProblemRidge}) can be solved by means of the Karush-Kuhn-Tucker (KKT) multiplier method, which minimizes a function subject to inequality constraints. The KKT multiplier method states that, under some regularity conditions (all met here), there exists a constant $\nu \geq 0$, called the *multiplier*, such that the solution $\hat{\beta}(\nu)$ of the constrained minimization problem (ref{form.constrEstProblemRidge}) satisfies the so-called KKT conditions. The first KKT condition (referred to as the stationarity condition) demands that the gradient (with respect to $\beta$) of the Lagrangian associated with the minimization problem equals zero at the solution $\hat{\beta}(\nu)$. The Lagrangian for problem (ref{form.constrEstProblemRidge}) is: -\begin{align*} -\| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2 + \nu ( \| \beta \|^2_2 - c). -\end{align*} -The second KKT condition (the complementarity condition) requires that $\nu (\| \hat{\beta}(\nu) \|_2^2 - c) = 0$. If $\nu = \lambda$ and $c = \| \hat{\beta}(\lambda) \|_2^2$, the ridge estimator $\beta (\lambda)$ satisfies both KKT conditions. Hence, both problems have the same solution when $c = \| \hat{\beta}(\lambda) \|_2^2$. -\\ -\\ -The relevance of viewing the ridge regression estimator as the solution to a constrained estimation problem becomes obvious when considering a typical threat to high-dimensional data analysis: overfitting. *Overfitting* refers to the phenomenon of modelling the noise rather than the signal. In case the true model is parsimonious (few covariates driving the response) and data on many covariates are available, it is likely that a linear combination of all covariates yields a higher likelihood than a combination of the few that are actually related to the response. As only the few covariates related to the response contain the signal, the model involving all covariates then cannot but explain more than the signal alone: it also models the error. Hence, it overfits the data. In high-dimensional settings overfitting is a real threat. The number of explanatory variables exceeds the number of observations. It is thus possible to form a linear combination of the covariates that perfectly explains the response, including the noise. - -Large estimates of regression coefficients are often an indication of overfitting. Augmentation of the estimation procedure with a constraint on the regression coefficients is a simple remedy to large parameter estimates. As a consequence it decreases the probability of overfitting. Overfitting is illustrated in the next example. - - -\begin{example} *(Overfitting)* label{exam.overfitting} -\\ -Consider an artificial data set comprising of ten observations on a response $Y_i$ and nine covariates $X_{i,j}$. All covariate data are sampled from the standard normal distribution: $X_{i,j} \sim \mathcal{N}(0, 1)$. The response is generated by $Y_i = X_{i,1} + \varepsilon_i$ with $\varepsilon_{i} \sim \mathcal{N}(0, 1/4)$. Hence, only the first covariate contributes to the response. - -The regression model $Y_i = \sum_{j=1}^9 X_{i,j} \beta_j+ \varepsilon_i$ is fitted to the artificial data using `R`. This yields the regression parameter estimates: -\begin{align*} -\hat{\beta}^{\top} & = (0.048, -2.386, -5.528, 6.243, -4.819, 0.760, -3.345, -4.748, 2.136). -\end{align*} -As $\beta^{\top} = (1, 0, \ldots, 0)$, many regression coefficient are clearly over-estimated. - -The fitted values $\widehat{Y}_i = \mathbf{X}_i \hat{\beta}$ are plotted against the values of the first covariates in the right bottom panel of Figure ref{fig.ridgeAsConstrainedEst}. As a reference the line $x=y$ is added, which represents the `true' model. The fitted model follows the `true' relationship. But it also captures the deviations from this line that represent the errors. -\end{example} - - - -======= Bayesian regression} label{sect:Bayes ======= -Ridge regression has a close connection to Bayesian linear regression. Bayesian linear regression assumes the parameters $\beta$ and $\sigma^2$ to be the random variables, while at the same time considering $\mathbf{X}$ and $\mathbf{Y}$ as fixed. Within the regression context, the conjugate priors of $\beta$ and $\sigma^2$ are: -\begin{align*} -\beta \, | \, \sigma^2 \sim \mathcal{N}(\mathbf{0}_p, \sigma^2 \lambda^{-1} \mathbf{I}_{pp}) \qquad \mbox{and} \qquad \sigma^2 \sim \mathcal{IG}(\alpha_0, \beta_0), -\end{align*} -where $\mathcal{IG}$ denotes the inverse Gamma distribution with shape parameter $\alpha_0$ and scale parameter $\beta_0$. The penalty parameter can be interpreted as the precision of the prior, determining how informative the prior should be. A smaller penalty (i.e. precision) corresponds to a wider prior, and a larger penalty to a more informative, concentrated prior (Figure ref{fig.ridgePriorOfBeta}). -# original latex figure with scale=0.45, angle=0 - -FIGURE: [ridgePriorOfBeta.eps, width=400 frac=1.0] Conjugate prior of the regression parameter $\beta$ for various choices of $\lambda$, the penalty parameters c.q. precision.} label{fig.ridgePriorOfBeta - -Under the assumption of the conjugate priors above, the joint posterior distribution of $\beta$ and $\sigma^2$ is then: -\begin{align*} -f_{\beta, \sigma^2} (\beta, \sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) & = f_Y (\mathbf{Y} \, | \, \mathbf{X}, \beta, \sigma^2) \, f_{\beta}(\beta | \sigma^2) \, f_{\sigma}(\sigma^2) -\\ -& \propto & \sigma^{-n} \exp \Big[ - \frac{1}{2\sigma^2} ( \mathbf{Y} - \mathbf{X} \beta)^{\top} ( \mathbf{Y} - \mathbf{X} \beta) \Big] -\\ -& & \times \, \, \sigma^{-p} \exp \Big[ - \frac{1}{2\sigma^2} \lambda \beta^{\top} \beta \Big] \, \times \, \, [\sigma^2]^{-\alpha_0-1} \exp \Big[ - \frac{\beta_0}{2\sigma^2} \Big]. -\end{align*} -As -\begin{align*} -& & \hspace{-1.5cm} ( \mathbf{Y} - \mathbf{X} \beta)^{\top} ( \mathbf{Y} - \mathbf{X} \beta) + \lambda \beta^{\top} \beta -\\ -& = \mathbf{Y}^{\top} \mathbf{Y} - -\beta^{\top} \mathbf{X}^{\top} \mathbf{Y} - \mathbf{Y}^{\top} \mathbf{X} \beta + \beta^{\top} \mathbf{X}^{\top} \mathbf{X} \beta + \lambda \beta^{\top} \beta -\\ -& = \mathbf{Y}^{\top} \mathbf{Y} - \beta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} -\\ -& & - \, \mathbf{Y}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \beta + \beta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \beta -\\ -& = \mathbf{Y}^{\top} \mathbf{Y} - \beta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) -\hat{\beta} (\lambda) -\\ -& & - \, [ \hat{\beta} (\lambda) ]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \beta + \beta^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \beta -\\ -& = \mathbf{Y}^{\top} \mathbf{Y} - \mathbf{Y}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} -\\ -& & + \, \big[ \beta - \hat{\beta}(\lambda) \big]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \big[ \beta - \hat{\beta}(\lambda) \big], -\end{align*} -the posterior distribution can be rewritten to: -\begin{align*} -f_{\beta, \sigma^2} (\beta, \sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) -& \propto & g_{\beta} (\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) \, -g_{\sigma^2} (\sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) -\end{align*} -with -\begin{align*} -g_{\beta} (\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) -& \propto & \exp \Big\{ - \frac{1}{2\sigma^2} \big[ \beta - \hat{\beta}(\lambda) \big]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) \big[ \beta - \hat{\beta}(\lambda) \big] \Big\}. -\end{align*} -Then, clearly the conditional posterior mean of $\beta$ is $\mathbb{E}(\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) = \hat{\beta}(\lambda)$. Hence, the ridge regression estimator can be viewed as the Bayesian posterior mean estimator of $\beta$ when imposing a Gaussian prior on the regression parameter. - -With little extra work we may also obtain the conditional posterior of $\sigma^2$ from the joint posterior distribution: -\begin{align*} -f_{\sigma^2} (\sigma^2 \, | \, \beta, \mathbf{Y}, \mathbf{X}) & \propto & (\sigma^2)^{-[(n+p)/2 + \alpha_0 + 1]} -\exp [ - \frac{1}{2\sigma^2} ( \| \mathbf{Y} - \mathbf{X} \beta \|_2^2 + -\lambda \| \beta \|_2^2 + \beta_0) ], -\end{align*} -in which one can recognize the shape of an inverse gamma distribution. -\\ -\\ -A Bayesian estimator of a parameter $\ttheta$ is the estimator that minimizes the Bayes risk over a prior distribution of the parameter $\ttheta$. The Bayes risk is defined as $\int_{\ttheta} \mathbb{E} [(\hat{\ttheta} - \ttheta)^{\top} (\hat{\ttheta} - \ttheta)] \pi_{\ttheta}(\ttheta; \aalpha) d\ttheta$, where $\pi_{\ttheta}(\ttheta; \aalpha)$ is the prior distribution of $\ttheta$ with hyperparameter $\aalpha$. It is thus a weighted average of the Mean Squared Error, with weights specified through the prior. The Bayes risk is minimized by the mean posterior $\mathbb{E}_{\ttheta}(\ttheta \, | \, \mbox{data})$ (cf., e.g., \citealp{Bijm2017}). The Bayesian estimator of $\ttheta$ thus yields the smallest possible expected MSE, under the assumption of the employed prior. - -The Bayes risk of the ridge estimator over the normal prior $\beta \sim \mathcal{N}(\mathbf{0}_p, \sigma^2 \lambda^{-1} \mathbf{I}_{pp})$ is: -\begin{align*} -\mathbb{E}_{\beta} \{\mbox{MSE}[\hat{\beta}(\lambda)] -\, | \, \sigma^2, \mathbf{Y}, \mathbf{X} \} & = \sigma^2 \, \mbox{tr}\big\{ \mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{W}_{\lambda}^{\top} \big\} + \mathbb{E}_{\beta} [ \beta^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp}) \, \beta] -\\ -& = \sigma^2 \, \big\{ \mbox{tr} \big[ \mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \, \mathbf{W}_{\lambda}^{\top} \big] + -\lambda^{-1} \mbox{tr} [(\mathbf{W}_{\lambda} - \mathbf{I}_{pp})^{\top} (\mathbf{W}_{\lambda} - \mathbf{I}_{pp})] \big\} -\\ -& = \sigma^2 \sum_{j=1}^p (d_{jj}^2 + \lambda)^{-1}, -\end{align*} -in which we have used *i)* the previously derived explicit expression (ref{form.ridgeMSE}) of the ridge estimator's MSE, *ii)* the expectation of the quadratic form of a multivariate random variable \citep{Math1992}, *iii)* the singular value decomposition of $\mathbf{X}$ with singular values $d_{jj}$, and *iv)* the fact that the trace of a square matrix equals the sum of its eigenvalues. As the ridge estimator coincides with the posterior mean, this is the minimal achievable MSE under a zero-centered normal prior with an uncorrelated and equivariant covariance matrix. - -Above the Bayes risk of the ridge estimator factorizes with respect to $\sigma^2$ and $\lambda$. Hence, the larger the hyperparameter $\lambda$ the lower the Bayes risk of the ridge estimator. In particular, its Bayes risk converges to zero as $\lambda \rightarrow \infty$. This can be understood as follows. The limit corresponds to an infinite precision of the prior, thus reducing the variance contribution to the MSE. Moreover, as the ridge estimator shrinks towards zero and the prior distribution of $\beta$ has a zero mean, the bias too vanishes as $\lambda \rightarrow \infty$. - -The calculation of the Bayes risk above relates the Bayesian and frequentist statements on the MSE of the ridge estimator. For the latter revisit Theorem ref{theo.Theobald2} of Section ref{sect:ridgeMSE}, which states the existence of a $\lambda$ such that the resulting ridge estimator has a superior MSE over that of the ML estimator. This result made no assumption on (the distribution of) $\beta$. In fact, it can be viewed as a statement of the MSE conditional on $\beta$. The Bayesian result integrates out the uncertainty - specified by the prior - in $\beta$ from the (frequentist's) conditional MSE to arrive at the unconditional MSE. - - - -# The Bayesian result states that the ridge regression estimator minimizes the weighted MSE (over a normal prior on the parameter $\beta$). It thus integrates out the uncertainty in $\beta$ from the (frequentist's) conditional MSE to arrive at the unconditional MSE. - -======= Degrees of freedom ======= - -The degrees of freedom consumed by ridge regression is calculated. The degrees of freedom may be used in combination with an information criterion to decide on the value of the penalty parameter. Recall from ordinary regression that: -\begin{align*} -\widehat{\mathbf{Y}} & = \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} \, \, \, = \, \, \, \mathbf{H} \mathbf{Y}, -\end{align*} -where $\mathbf{H}$ is the hat matrix. The degrees of freedom used in the regression is then equal to $\mbox{tr}(\mathbf{H})$, the trace of $\mathbf{H}$. In particular, if $ \mathbf{X}$ is of full rank, i.e. $\mbox{rank}(\mathbf{X}) = p$, then $\mbox{tr}(\mathbf{H}) = p$. - -By analogy, the ridge-version of the hat matrix is: -\begin{align*} -\mathbf{H}(\lambda) & = \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top}. -\end{align*} -Continuing this analogy, the degrees of freedom of ridge regression is given by the trace of the ridge hat matrix $\mathbf{H}(\lambda)$: -\begin{align*} -\mbox{tr}[ \mathbf{H}(\lambda)] & = \mbox{tr}[ \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} ] \, \, \, = \, \, \, \sum_{j=1}^p \frac{d_{jj}^2}{d_{jj}^2 + \lambda}. -\end{align*} -The degrees of freedom consumed by ridge regression is monotone decreasing in $\lambda$. In particular: -\begin{align*} -\lim_{\lambda \rightarrow \infty} \mbox{tr}[ \mathbf{H}(\lambda)] & = 0. -\end{align*} -That is, in the limit no information from $\mathbf{X}$ is used. Indeed, $\beta$ is forced to equal $\mathbf{0}_{p}$ which is not derived from data. - - - -======= Efficient calculation ======= - -In the high-dimensional setting the number of covariates $p$ is large compared to the number of samples $n$. In a microarray experiment $p = 40000$ and $n= 100$ is not uncommon. To perform ridge regression in this context, the following expression needs to be evaluated numerically: -\begin{align*} -(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}. -\end{align*} -For $p=40000$ this requires the inversion of a $40000 \times 40000$ dimensional matrix. This is not feasible on most desktop computers. However, there is a workaround. - -Revisit the singular value decomposition of $\mathbf{X} = \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top}$ and write $\mathbf{R}_x = \mathbf{U}_x \mathbf{D}_x$. As both $\mathbf{U}_x$ and $\mathbf{D}_x$ are $(n \times n)$-dimensional matrices, so is $\mathbf{R}_x$. Consequently, $\mathbf{X}$ is now decomposed as $\mathbf{X} = \mathbf{R}_x \mathbf{V}_x^{\top}$. The ridge estimator can be rewritten in terms of $\mathbf{R}_x$ and $\mathbf{V}_x$: -\begin{align*} -\hat{\beta}(\lambda) & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} -\\ -& = (\mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{R}_x \mathbf{V}_x^{\top} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{Y} -\\ -& = (\mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{R}_x \mathbf{V}_x^{\top} + \lambda \mathbf{V}_x \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{Y} -\\ -& = \mathbf{V}_x (\mathbf{R}_x^{\top} \mathbf{R}_x + \lambda \mathbf{I}_{nn})^{-1} \mathbf{V}_x^{\top} \mathbf{V}_x \mathbf{R}_x^{\top} \mathbf{Y} -\\ -& = \mathbf{V}_x (\mathbf{R}_x^{\top} \mathbf{R}_x + \lambda \mathbf{I}_{nn})^{-1} \mathbf{R}_x^{\top} \mathbf{Y}. -\end{align*} -Hence, the reformulated ridge estimator involves the inversion of an $(n \times n)$-dimensional matrix. With $n= 100$ this is feasible on most standard computers. - -cite{Hast2004} point out that the number of computation operations reduces from $\mathcal{O}(p^3)$ to $\mathcal{O}(p n^2)$. In addition, they point out that this computational short-cut can be used in combination with other loss functions, for instance that of standard generalized linear models. -\\ -\\ -Avoidance of the inversion of the $(p \times p)$-dimensional matrix may be achieved in an other way. Hereto one needs the Woodbury identity. Let $\mathbf{A}$, $\mathbf{U}$ and $\mathbf{V}$ be $(p \times p)$-, $(p \times n)$- and $(n \times p)$-dimensional matrices, respectively. -The (simplified form of the) Woodbury identity then is: -\begin{align*} -(\mathbf{A} + \mathbf{U} \mathbf{V})^{-1} & = \mathbf{A}^{-1} - \mathbf{A}^{-1} \mathbf{U} (\mathbf{I}_{nn} + \mathbf{V} \mathbf{A}^{-1} \mathbf{U})^{-1} \mathbf{V} \mathbf{A}^{-1}. -\end{align*} -Application of the Woodbury identity to the matrix inverse in the ridge estimator of the regression parameter gives: -\begin{align*} -(\lambda \mathbf{I}_{pp} + \mathbf{X}^{\top} \mathbf{X})^{-1} & = \lambda^{-1} \mathbf{I}_{pp} - \lambda^{-2} \mathbf{X}^{\top} (\mathbf{I}_{nn} + \lambda^{-1} \mathbf{X} \mathbf{X}^{\top})^{-1} \mathbf{X}. -\end{align*} -This gives: -\begin{align*} -(\lambda \mathbf{I}_{pp} + \mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} & = \lambda^{-1} \mathbf{X}^{\top} \mathbf{Y} - \lambda^{-2} \mathbf{X}^{\top} (\mathbf{I}_{nn} + \lambda^{-1} \mathbf{X} \mathbf{X}^{\top})^{-1} \mathbf{X} \mathbf{X}^{\top} \mathbf{Y} -\\ -& = \lambda^{-1} \mathbf{X}^{\top} \left[ \mathbf{Y} - \lambda^{-1} \mathbf{X}^{\top} (\mathbf{I}_{nn} + \lambda^{-1} \mathbf{X} \mathbf{X}^{\top})^{-1} \mathbf{X} \mathbf{Y} \right]. -\end{align*} -The inversion of the $(p \times p)$-dimensional matrix $\lambda \mathbf{I}_{pp} + \mathbf{X}^{\top} \mathbf{X}$ is thus replaced by that of the $(n \times n)$-dimensional matrix $\mathbf{I}_{nn} + \lambda^{-1} \mathbf{X} \mathbf{X}^{\top}$. In addition, this expression of the ridge regression estimator avoids the singular value decomposition of $\mathbf{X}$, which may in some cases introduce additional numerical errors (e.g. at the level of machine precision). - - - -======= Choice of the penalty parameter ======= - -Throughout the introduction of ridge regression and the subsequent discussion of its properties the penalty parameter is considered known or `given'. In practice, it is unknown and the user needs to make an informed decision on its value. Several strategies to facilitate such a decision are presented. - -===== Information criterion ===== - -A popular strategy is to choose a penalty parameter that yields a good but parsimonious model. Information criteria measure the balance between model fit and model complexity. Here we present the Aikaike's information criterion (AIC), but many other criteria have been presented in the literature (e.g. \citealp{Akai1974}, \citealp{Schw1978}). The AIC measures model fit by the log-likelihood and model complexity is measured by the number of parameters used by the model. The number of model parameters in regular regression simply corresponds to the number of covariates in the model. Or, by the degrees of freedom consumed by the model, which is equivalent to the trace of the hat matrix. For ridge regression it thus seems natural to define model complexity -analogously by the trace of the ridge hat matrix. This yields the AIC for the linear regression model with ridge estimates: -\begin{align*} -\mbox{AIC}(\lambda) & = 2 \, p - 2 \log(\hat{L}) -\\ -& = 2 \, \mbox{tr} [\mathbf{H}(\lambda)] - 2 \log\{L[\hat{\beta}(\lambda), \hat{\sigma}^2(\lambda)]\} -\\ -& = 2 \, \sum_{j=1}^p \frac{d_{jj}^2}{d_{jj}^2 + \lambda} -+ 2 n \, \log[\sqrt{2 \, \pi} \, \hat{\sigma}(\lambda)] + \frac{1}{\hat{\sigma}^2(\lambda)} \sum_{i=1}^n [y_i - \mathbf{X}_{i, \ast} \, \hat{\beta}(\lambda)]^2. -\end{align*} -The value of $\lambda$ which minimizes $\mbox{AIC}(\lambda)$ corresponds to the `optimal' balance of model complexity and overfitting. - -Information criteria guide the decision process when having to decide among various different models. Different models use different sets of explanatory variables to explain the behaviour of the response variable. In that sense, the use of information criteria for the deciding on the ridge penalty parameter may be considered inappropriate: ridge regression uses the same set of explanatory variables irrespective of the value of the penalty parameter. Moreover, often ridge regression is employed to predict a response and not to provide an insightful explanatory model. The latter need not yield the best predictions. Finally, empirically we observe that the AIC often does not show an optimum *inside* the domain of the ridge penalty parameter. Henceforth, we refrain from the use of the AIC (or any of its relatives) in determining the optimal ridge penalty parameter. - - -===== Cross-validation} label{subsect.crossvalidation ===== -Instead of choosing the penalty parameter to balance model fit with model complexity, cross-validation requires it (i.e. the penalty parameter) to yield a model with good prediction performance. Commonly, this performance is evaluated on novel data. Novel data need not be easy to come by and one has to make do with the data at hand. The setting of `original' and novel data is then mimicked by sample splitting: the data set is divided into two (groups of samples). One of these two data sets, called the *training set*, plays the role of `original' data on which the model is built. The second of these data sets, called the *test set*, plays the role of the `novel' data and is used to evaluate the prediction performance (often operationalized as the log-likelihood or the prediction error) of the model built on the training data set. This procedure (model building and prediction evaluation on training and test set, respectively) is done for a collection of possible penalty parameter choices. The penalty parameter that yields the model with the best prediction performance is to be preferred. The thus obtained performance evaluation depends on the actual split of the data set. To remove this dependence the data set is split many times into a training and test set. For each split the model parameters are estimated for all choices of $\lambda$ using the training data and estimated parameters are evaluated on the corresponding test set. The penalty parameter that on average over the test sets performs best (in some sense) is then selected. - -When the repetitive splitting of the data set is done randomly, samples may accidently end up in a fast majority of the splits in either training or test set. Such samples may have an unbalanced influence on either model building or prediction evaluation. To avoid this $k$-fold cross-validation structures the data splitting. The samples are divided into $k$ more or less equally sized exhaustive and mutually exclusive subsets. In turn (at each split) one of these subsets plays the role of the test set while the union of the remaining subsets constitutes the training set. Such a splitting warrants a balanced representation of each sample in both training and test set over the splits. Still the division into the $k$ subsets involves a degree of randomness. This may be fully excluded when choosing $k=n$. This particular case is referred to as leave-one-out cross-validation (LOOCV). For illustration purposes the LOOCV procedure is detailed fully below: -\begin{compactitem} -\item[0)] Define a range of interest for the penalty parameter. - -\item[1)] Divide the data set into training and test set comprising samples $\{1, \ldots, n\} \setminus i$ and $\{ i \}$, respectively. - -\item[2)] Fit the linear regression model by means of ridge estimation for each $\lambda$ in the grid using the training set. This yields: -\begin{align*} -\hat{\beta}_{-i}(\lambda) & = ( \mathbf{X}_{-i, \ast}^{\top} -\mathbf{X}_{-i, \ast} + \lambda \mathbf{I}_{pp})^{-1} -\mathbf{X}_{-i, \ast}^{\top} \mathbf{Y}_{-i} -\end{align*} -and the corresponding estimate of the error variance $\hat{\sigma}_{-i}^2(\lambda)$. - -\item[3)] Evaluate the prediction performance of these models on the test set by $\log\{L[Y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}$. Or, by the prediction error $|Y_i - \mathbf{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)|$, possibly squared. - -\item[4)] Repeat steps 1) to 3) such that each sample plays the role of the test set once. - -\item[5)] Average the prediction performances of the test sets at each grid point of the penalty parameter: -\begin{align*} -\frac{1}{n} \sum_{i = 1}^n \log\{L[Y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}. -\end{align*} -The quantity above is called the *cross-validated log-likelihood*. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. - -\item[6)] The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. -\end{compactitem} -The procedure is straightforwardly adopted to $k$-fold cross-validation, a different criterion, and different estimators. - -In the LOOCV procedure above resampling can be avoided when the prediction performance is measured by Allen's PRESS (Predicted Residual Error Sum of Squares) statistic \citep{Alle1974}. For then, the LOOCV prediction performance can be expressed analytically in terms of the known quantities derived from the design matrix and response (as pointed out but not detailed in \citealt{Golu1979}). Define the optimal penalty parameter to minimize Allen's PRESS statistic: -\begin{align*} -\lambda_{\mbox{{\tiny opt}}} = \arg \min_{\lambda} \frac{1}{n} \sum_{i=1}^n [Y_i - \mathbf{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)]^2. -\end{align*} -To derive an analytic expression for the right-hand side first -rewrite $(\mathbf{X}_{- i, \ast}^{\top} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1}$ by means of the Woodbury identity as: -\begin{align*} -(\mathbf{X}_{- i, \ast}^{\top} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1} & = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp} - \mathbf{X}_{i, \ast}^{\top} \mathbf{X}_{i, \ast})^{-1} -\\ -& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} -+ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} -\mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top}]^{-1} -\\ -& & \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} -\\ -& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} -+ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} -\mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} -\end{align*} -with $\mathbf{H}_{ii}(\lambda) = \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top}$. -Furthermore, $\mathbf{X}_{-i}^{\top} \mathbf{Y}_{-i} = \mathbf{X}^{\top} \mathbf{Y} - \mathbf{X}_{i, \ast}^{\top} Y_i$. Substitute both in the leave-one-out ridge regression estimator and manipulate: -\begin{align*} -\hat{\beta}_{- i}(\lambda) & = (\mathbf{X}_{- i, \ast}^{\top} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{- i, \ast}^{\top} \mathbf{Y}_{- i} -\\ -& = \{(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} -+ (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} -\mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1}\} -\\ -& & \times (\mathbf{X}^{\top} \mathbf{Y} - \mathbf{X}_{i, \ast}^{\top} Y_i ) -\\ -& = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y} - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} Y_i -\\ -& & + (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} -\mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii} (\lambda)]^{-1} \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} -\mathbf{X}^{\top} \mathbf{Y} -\\ -& & - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} -\mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} -\mathbf{X}_{i, \ast}^{\top} Y_i -\\ -& = \hat{\beta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ 1 - \mathbf{H}_{ii}(\lambda)] Y_i -\\ -& & + (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) -\\ -& & - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{H}_{ii} (\lambda) Y_i -\\ -& = \hat{\beta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \{ [ 1 - \mathbf{H}_{ii}(\lambda)] Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) + \mathbf{H}_{ii}(\lambda) Y_i \} -\\ -& = \hat{\beta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) ]. -\end{align*} -The latter enables the reformulation of the prediction error as: -\begin{align*} -Y_i - \mathbf{X}_{i, \ast} \hat{\beta}_{-i}(\lambda) & = Y_i - \mathbf{X}_{i, \ast} \{ \hat{\beta}(\lambda) - (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda)] \} -\\ -& = Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) + \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) ] -\\ -& = Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) + \mathbf{H}_{ii} (\lambda)[ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast} \hat{\beta}(\lambda) ] -\\ -& = [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - \mathbf{X}_{i, \ast}^{\top} \hat{\beta}(\lambda) ], -\end{align*} -which in turn results in the re-expression of Allen's PRESS statistic: -\begin{align*} -\lambda_{\mbox{{\tiny opt}}} & = \arg \min_{\lambda} \frac{1}{n} \sum_{i=1}^n [Y_i - \mathbf{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)]^2 -\, \, \, = \, \, \, \arg \min_{\lambda} \tfrac{1}{n} \| \mathbf{B}(\lambda) [\mathbf{I}_{nn} - \mathbf{H}(\lambda)] \mathbf{Y} \|_ F^2, -\end{align*} -where $\mathbf{B}(\lambda)$ is diagonal with $[\mathbf{B}(\lambda)]_{ii} = [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1}$. Hence, the prediction performance for a given $\lambda$ can be assessed directly from the ridge hat matrix and the response vector without the recalculation of the $n$ leave-one-out ridge estimators. Computationally, this is a considerable gain. - - - -======= Simulations ======= - -Simulations are presented that illustrate properties of the ridge estimator not discussed explicitly in the previous sections of this chapter. - -===== Role of the variance of the covariates} label{ridge:covariateVariances ===== -In many applications of high-dimensional data the covariates are standardized prior to the execution of the ridge regression. Before we discuss whether this is appropriate, we first illustrate the effect of ridge penalization on covariates with distinct variances using simulated data. - -The simulation involves one response to be (ridge) regressed on fifty covariates. Data (with $n=1000$) for the covariates, denoted $\mathbf{X}$, are drawn from a multivariate normal distribution: $\mathbf{X} \sim \mathcal{N}(\mathbf{0}_{50}, \mathbf{\Sigma})$ with $\mathbf{\Sigma}$ diagonal and $(\mathbf{\Sigma})_{jj} = j / 10$. From this the response is generated through $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$ with $\beta = \mathbf{1}_{50}$ and $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_{50}, \mathbf{I}_{50 \times 50})$. - -With the simulated data at hand the ridge regression estimates of $\beta$ are evaluated for a large grid of the penalty parameter $\lambda$. The resulting ridge regularization paths of the regression coefficients are plotted (Figure ref{fig.effectOfRidge_effectOfVariances}). All paths start ($\lambda=0$) close to one and vanish as $\lambda \rightarrow \infty$. However, ridge regularization paths of regression coefficients corresponding to covariates with a large variance dominate those with a low variance. - - -# original latex figure with scale=0.45, angle=0 - -FIGURE: [covariatesWithDifferentVariance.eps, width=400 frac=1.0] Top panel: Ridge regularization paths for coefficients of the 50 uncorrelated covariates with distinct variances. Color and line type indicated the grouping of the covariates by their variance. Bottom panels: Graphical illustration of the effect of a covariate's variance on the ridge estimator. The grey circle depicts the ridge parameter constraint. The dashed black ellipsoids are the level sets of the least squares loss function. The red dot is the ridge regression estimate. Left and right panels represent the cases with equal and unequal, respectively, variances of the covariates.} label{fig.effectOfRidge_effectOfVariances - - - - - -Ridge regression's preference of covariates with a large variance can intuitively be understood as follows. First note that the ridge regression estimator now can be written as: -\begin{align*} -\beta (\lambda) & = [ \mbox{Var}(\mathbf{X}) + \lambda \mathbf{I}_{50 \times 50}]^{-1} \mbox{Cov}(\mathbf{X}, \mathbf{Y}) -\\ -& = ( \SSigma + \lambda \mathbf{I}_{50 \times 50})^{-1} \SSigma [ \mbox{Var}(\mathbf{X}) ]^{-1} \mbox{Cov}(\mathbf{X}, \mathbf{Y}) -\\ -& = ( \SSigma + \lambda \mathbf{I}_{50 \times 50})^{-1} \SSigma \beta. -\end{align*} -Plug in the employed parametrization of $\mathbf{\Sigma}$, which gives: -\begin{align*} -[\beta (\lambda)]_j & = \frac{j}{j + 50 \lambda} \, (\beta)_j. -\end{align*} -Hence, the larger the covariate's variance (corresponding to the larger $j$), the larger its ridge regression coefficient estimate. Ridge regression thus prefers (among a set of covariates with comparable effect sizes) those with larger variances. - - - -The reformulation of ridge penalized estimation as a constrained estimation problem offers a geometrical interpretation of this phenomenon. Let $p=2$ and the design matrix $\mathbf{X}$ be orthogonal, while both covariates contribute equally to the response. Contrast the cases with $\mbox{Var}(X_1) \approx \mbox{Var}(X_2)$ and $\mbox{Var}(X_1) \gg \mbox{Var}(X_2)$. The level sets of the least squares loss function associated with the former case are circular, while that of the latter are strongly ellipsoidal (see Figure ref{fig.effectOfRidge_effectOfVariances}). The diameters along the principal axes (that - due to the orthogonality of $\mathbf{X}$ - are parallel to that of the $\beta_1$- and $\beta_2$-axes) of both circle and ellipsoid are reciprocals of the variance of the covariates. When the variances of both covariates are equal, the level sets of the loss function expand equally fast along both axis. With the two covariates having the same regression coefficient, the point of these level sets closest to the parameter constraint is to be found on the line $\beta_1 = \beta_2$ (Figure ref{fig.effectOfRidge_effectOfVariances}, left panel). Consequently, the ridge regression estimate satisfies $\hat{\beta}_1 (\lambda) \approx \hat{\beta}_2(\lambda)$. With unequal variances between the covariates, the ellipsoidal level sets of the loss function have diameters of rather different sizes. In particular, along the $\beta_1$-axis it is narrow (as $\mbox{Var}(X_1)$ is large), and - vice versa - wide along the $\beta_2$-axis. Consequently, the point of these level sets closest to the circular parameter constraint will be closer to the $\beta_1$- than to the $\beta_2$-axis (Figure ref{fig.effectOfRidge_effectOfVariances}, left panel). For the ridge estimates of the regression parameter this implies $0 \ll \hat{\beta}_1 (\lambda) < 1$ and $0 < \hat{\beta}_2 (\lambda) \ll 1$. Hence, the covariate with a larger variance yields the larger ridge regression estimate. - - -Should one thus standardize the covariates prior to ridge regression analysis? When dealing with gene expression data from microarrays, the data have been subjected to a series of pre-processing steps (e.g. quality control, background correction, within- and between-normalization). The purpose of these steps is to make the expression levels of genes comparable both within and between hybridizations. The preprocessing should thus be considered an inherent part of the measurement. As such it is to be done independently of whatever down-stream analysis is to follow and further tinkering with the data is preferably to be avoided (as it may mess up the `comparable-ness' of the expression levels as achieved by the preprocessing). For other data types different considerations may apply. - -Among the considerations to decide on standardization of the covariates, one should also include the fact that ridge estimates prior and posterior to scaling do not simply differ by a factor. To see this assume that the covariates have been centered. Scaling of the covariates amounts to post-multiplication of the design matrix by a $(p \times p)$-dimensional diagonal matrix $\mathbf{A}$ with the reciprocals of the covariates' scale estimates on its diagonal \citep{Sard2008}. Hence, the ridge estimator (for the rescaled data) is then given by: -\begin{align*} -\min_{\beta} \| \mathbf{Y} - \mathbf{X} \mathbf{A} \beta \|_2^2 + \lambda \| \beta \|_ 2^2. -\end{align*} -Apply the change-of-variable $\ggamma = \mathbf{A} \beta$ and obtain: -\begin{align*} -\min_{\ggamma} \| \mathbf{Y} - \mathbf{X} \gamma \|_2^2 + \lambda \| \mathbf{A}^{-1} \ggamma \|_ 2^2 & = \min_{\beta} \| \mathbf{Y} - \mathbf{X} \gamma \|_2^2 + \sum_{j=1}^p \lambda [(\mathbf{A})_{jj}]^{-2} \gamma_j^2. -\end{align*} -Effectively, the scaling is equivalent to covariate-wise penalization. The `scaled' ridge estimator may then be derived along the same lines as before in Section ref{sect.constrainedEstimation}: -\begin{align*} -\hat{\beta}^{\mbox{{\tiny (scaled)}}} (\lambda) & = \mathbf{A}^{-1} \hat{\ggamma} (\lambda) -\, \, \, = \, \, \, \mathbf{A}^{-1} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{A}^{-2})^{-1} \mathbf{X}^{\top} \mathbf{Y}. -\end{align*} -In general, this is unequal to the ridge estimator without the rescaling of the columns of the design matrix. Moreover, it should be clear that $\hat{\beta}^{\mbox{{\tiny (scaled)}}} (\lambda) \not= \mathbf{A} \hat{\beta}(\lambda)$. - -===== Ridge regression and collinearity} label{sect:collinearCovariates ===== -Initially, ridge regression was motivated as an ad-hoc fix of (super)-collinear covariates in order to obtain a well-defined estimator. We now study the effect of this ad-hoc fix on the regression coefficient estimates of collinear covariates. In particular, their ridge regularization paths are contrasted to those of `non-collinear' covariates. - -To this end, we consider a simulation in which one response is regressed on 50 covariates. The data of these covariates, stored in a design matrix denoted $\mathbf{X}$, are sampled from a multivariate normal distribution, with mean zero and a $5 \times 5$ blocked covariance matrix: -\begin{align*} -\mathbf{\Sigma} & = \left( -\begin{array}{ccccc} -\mathbf{\Sigma}_{11} & \mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} -& \mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} -\\ -\mathbf{0}_{10 \times 10} & \mathbf{\Sigma}_{22} & \mathbf{0}_{10 \times 10} -& \mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} -\\ -\mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} -& \mathbf{\Sigma}_{33} & \mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} -\\ -\mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} -& \mathbf{0}_{10 \times 10} & \mathbf{\Sigma}_{44} & \mathbf{0}_{10 \times 10} -\\ -\mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} -& \mathbf{0}_{10 \times 10} & \mathbf{0}_{10 \times 10} & \mathbf{\Sigma}_{55} -\end{array} -\right) -\end{align*} -with -\begin{align*} -\mathbf{\Sigma}_{kk} & = \frac{k-1}{5} \, \mathbf{1}_{10 \times 10} + \frac{6-k}{5} \, \mathbf{I}_{10 \times 10}. -\end{align*} -The data of the response variable $\mathbf{Y}$ are then obtained through: $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$, with $\vvarepsilon \sim \mathcal{N}( \mathbf{0}_{n}, \mathbf{I}_{nn})$ and $\beta = \mathbf{1}_{50}$. Hence, all covariates contribute equally to the response. Would the columns of $\mathbf{X}$ be orthogonal, little difference in the ridge estimates of the regression coefficients is expected. - -The results of this simulation study with sample size $n=1000$ are presented in Figure ref{fig.ridgeEstimates_correlatedCovariates}. All 50 regularization paths start close to one as $\lambda$ is small and converge to zero as $\lambda \rightarrow \infty$. But the paths of covariates of the same block of the covariance matrix $\mathbf{\Sigma}$ quickly group, with those corresponding to a block with larger off-diagonal elements above those with smaller ones. Thus, ridge regression prefers (i.e. shrinks less) coefficient estimates of strongly positively correlated covariates. - -# original latex figure with scale=0.45, angle=0 - -FIGURE: [correlatedCovariates.eps, width=400 frac=1.0] Left panel: Ridge regularization paths for coefficients of the 50 covariates, with various degree of collinearity but equal variance. Color and line type correspond to the five blocks of the covariate matrix $\mathbf{\Sigma}$. Right panel: Graphical illustration of the effect of the collinearity among covariates on the ridge estimator. The solid and dotted grey circles depict the ridge parameter constraint for the collinear and orthogonal cases, respectively. The dashed black ellipsoids are the level sets of the sum-of-squares squares loss function. The red dot and violet diamond are the ridge regression for the positive collinear and orthogonal case, respectively.} label{fig.ridgeEstimates_correlatedCovariates -# \afterpage{} - - - -Intuitive understanding of the observed behaviour may be obtained from the $p=2$ case. Let $U$, $V$ and $\varepsilon$ be independent random variables with zero mean. Define $X_1 = U + V$, $X_2 = U - V$, and $Y = \beta_1 X_1 + \beta_2 X_2 + \varepsilon$ with $\beta_1$ and $\beta_2$ constants. Hence, $\mathbb{E}(Y) = 0$. Then: -\begin{align*} -# Y & = \beta_1 X_1 + \beta_2 X_2 + \varepsilon -# \\ -# & = \beta_1 (U + V) + \beta_2 (U - V) + \varepsilon -# \\ -Y & = (\beta_1 + \beta_2) U + (\beta_1 - \beta_2) V + \varepsilon -\\ -& = \gamma_u U + \gamma_v V + \varepsilon -\end{align*} -and $\mbox{Cor}(X_{1}, X_{2}) = [\mbox{Var}(U) - \mbox{Var}(V)] / [ \mbox{Var}(U) + \mbox{Var}(V) ]$. -# \begin{align*} -# \mbox{Cor}(X_{1}, X_{2}) -# & = \frac{ \mbox{Cov}(X_{1}, X_{2}) }{ \sqrt{\mbox{Var}(X_{1})} \sqrt{\mbox{Var}(X_{2})} } -# \\ -# & = \frac{ \mbox{Cov}(U + V, U - V) }{ \sqrt{\mbox{Var}(U + V)} \sqrt{\mbox{Var}(U - V)} } -# \\ -# & = -# \frac{ \mbox{Var}(U) - \mbox{Var}(V) }{ \mbox{Var}(U) + \mbox{Var}(V) }. -# \end{align*} -The random variables $X_1$ and $X_2$ are strongly positively correlated if $\mbox{Var}(U) \gg \mbox{Var}(V)$. - -The ridge regression estimator associated with regression of $Y$ on $U$ and $V$ is: -\begin{align*} -\ggamma(\lambda) & = \left( -\begin{array}{rr} -\mbox{Var}(U) + \lambda & 0 -\\ -0 & \mbox{Var}(V) + \lambda -\end{array} -\right)^{-1} -\left( -\begin{array}{r} -\mbox{Cov}(U, Y) -\\ -\mbox{Cov}(V, Y) -\end{array} -\right). -\end{align*} -For large enough $\lambda$ -\begin{align*} -\ggamma(\lambda) -# & & \frac{1}{\lambda} \left( \begin{array}{rr} \mbox{Var}(U) & 0 \\ 0 \mbox{Var}(V) \end{array} \right) \left( \begin{array}{rr} \mbox{Var}(U) & 0 -# \\ -# 0 & \mbox{Var}(V) -# \end{array} -# \right)^{-1} -# \left( -# \begin{array}{r} -# \mbox{Cov}(U, Y) -# \\ -# \mbox{Cov}(V, Y) -# \end{array} -# \right) -# \\ -& \approx \frac{1}{\lambda} -\left( -\begin{array}{rr} -\mbox{Var}(U) & 0 -\\ -0 & \mbox{Var}(V) -\end{array} -\right) -\left( -\begin{array}{r} -\beta_1 + \beta_2 -\\ -\beta_1 - \beta_2 -\end{array} -\right). -\end{align*} -When $\mbox{Var}(U) \gg \mbox{Var}(V)$ and $\beta_1 \approx \beta_2$, the ridge estimate of $\gamma_v$ vanishes for large $\lambda$. Hence, ridge regression prefers positively covariates with similar effect sizes. - - -This phenomenon too can be explained geometrically. For the illustration consider ridge estimation with $\lambda=1$ of the linear model $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$ with $\beta = (3, 3)^{\top}$, $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_2, \mathbf{I}_{22})$ and the columns of $\mathbf{X}$ strongly and positively collinear. The level sets of the sum-of-squares loss, $\| \mathbf{Y} - \mathbf{X} \beta \|_2^2$, are plotted in the right panel of Figure ref{fig.ridgeEstimates_correlatedCovariates}. Recall that the ridge estimate is found by looking for the smallest loss level set that hits the ridge contraint. The sought-for estimate is then the point of intersection between this level set and the constraint, and - for the case at hand - is on the $x=y$-line. This is no different from the case with orthogonal $\mathbf{X}$ columns. Yet their estimates differ, even though the same $\lambda$ is applied. The difference is to due to fact that the radius of the ridge constraint depends on $\lambda$, $\mathbf{X}$ and $\mathbf{Y}$. This is immediate from the fact that the radius of the constraint equals $\| \hat{\beta}(\lambda) \|_2^2$ (see Section ref{sect.constrainedEstimation}). To study the effect of $\mathbf{X}$ on the radius, we remove its dependence on $\mathbf{Y}$ by considering its expectation, which is: -\begin{align*} -\mathbb{E}[ \| \hat{\beta}(\lambda) \|_2^2 ] & = \mathbb{E} \{ [(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \hat{\beta}]^{\top} \, (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} (\mathbf{X}^{\top} \mathbf{X}) \, \hat{\beta} \} \nonumber % \, \, \, = \, \, \, \mathbb{E} ( \hat{\beta}^{\top} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, \hat{\beta} ) \nonumber -\\ -# & = \mathbb{E} [ \mathbf{Y}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{W}_{\lambda}^{\top} \,\mathbf{W}_{\lambda} \, (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} ] \nonumber -# \\ -# & = \mathbb{E} [ \mathbf{Y}^{\top} \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} (\mathbf{X}^{\top} \mathbf{X}) (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp}) (\mathbf{X}^{\top} \mathbf{X})(\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} ] \nonumber -# \\ -& = \mathbb{E} [ \mathbf{Y}^{\top} \mathbf{X} -(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-2} \mathbf{X}^{\top} \mathbf{Y} ] \nonumber -\\ -& = \sigma^2 \, \mbox{tr}\big\{ \mathbf{X} -(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-2} \mathbf{X}^{\top} \big\} + \beta^{\top} \mathbf{X}^{ \top} \mathbf{X} -(\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-2} \mathbf{X}^{\top} \, \mathbf{X} \beta. % label{form.expectationPenalty} -\end{align*} -In the last step we have used $\mathbf{Y} \sim \mathcal{N}( \mathbf{X} \beta, \sigma^2 \mathbf{I}_{pp})$ and the expectation of the quadratic form of a multivariate random variable $\vvarepsilon \sim \mathcal{N}(\mmu_{\varepsilon}, \SSigma_{\varepsilon})$ is $\mathbb{E} ( \vvarepsilon^{\top} \, \LLambda \, \vvarepsilon) = \mbox{tr} ( \LLambda \, \SSigma_{\varepsilon}) + \mmu_{\varepsilon}^{\top} \, \LLambda \, \mmu_{\varepsilon}$ (cf. \citealp{Math1992}). The expression for the expectation of the radius of the ridge constraint can now be evaluated for the orthogonal $\mathbf{X}$ and the strongly, positively collinear $\mathbf{X}$. It turns out that the latter is larger than the former. This results in a larger ridge constraint. For the larger ridge constraint there is a smaller level set that hits it first. The point of intersection, still on the $x=y$-line, is now thus closer to $\beta$ and further from the origin (cf. right panel of Figure ref{fig.ridgeEstimates_correlatedCovariates}). The resulting estimate is thus larger than that from the orthogonal case. - -The above needs some attenuation. Among others it depends on: *i)* the number of covariates in each block, *ii)* the size of the effects, i.e. regression coefficients of each covariate, and -*iii)* the degree of collinearity. Possibly, there are more factors influencing the behaviour of the ridge estimator presented in this subsection. - -This behaviour of ridge regression is to be understood when using (say) gene expression data to predict a certain clinical outcome. Genes work in concert to fulfil a certain function in the cell. Consequently, one expects their expression levels to be correlated. Indeed, gene expression studies exhibit many co-expressed genes, that is, genes with correlating transcript levels. - - - - -======= Illustration} label{sect.ridgeRegressionDataIllustration ======= -The application of ridge regression to actual data aims to illustrate its use in practice. - -===== MCM7 expression regulation by microRNAs ===== - -Recently, a new class of RNA was discovered, referred to as microRNA. MicroRNAs are non-coding, single stranded RNAs of approximately 22 nucleotides. Like mRNAs, microRNAs are encoded in and transcribed from the DNA. MicroRNAs play an important role in the regulatory mechanism of the cell. MicroRNAs down-regulate gene expression by either of two post-transcriptional mechanisms: mRNA cleavage or transcriptional repression. This depends on the degree of complementarity between the microRNA and the target. Perfect or nearly perfect complementarity of the mRNA to the microRNA will lead to cleavage and degradation of the target mRNA. Imperfect complementarity will repress the productive translation and reduction in protein levels without affecting the mRNA levels. -A single microRNA can bind to and regulate many different mRNA targets. Conversely, several microRNAs can bind to and cooperatively control a single mRNA target (\citealp{Bart2004}; \citealp{Esqu2006}; \citealp{Kim2006}). - -In this illustration we wish to confirm the regulation of mRNA expression by microRNAs in an independent data set. We cherry pick an arbitrary finding from literature reported in cite{Ambs2008}, which focusses on the microRNA regulation of the MCM7 gene in prostate cancer. The MCM7 gene is involved in DNA replication \citep{Tye1999}, a cellular process often derailed in cancer. Furthermore, MCM7 interacts with the tumor-suppressor gene RB1 \citep{Ster1998}. Several studies indeed confirm the involvement of MCM7 in prostate cancer \citep{Padm2004}. And recently, it has been reported that in prostate cancer MCM7 may be regulated by microRNAs \citep{Ambs2008}. - -We here assess whether the MCM7 down-regulation by microRNAs can be observed in a data set other than the one upon which the microRNA-regulation of MCM7 claim has been based. To this end we download from the Gene Expression Omnibus (GEO) a prostate cancer data set (presented by \citealp{Wang2009GeneNetworks}). This data set (with GEO identifier: GSE20161) has both mRNA and microRNA profiles for all samples available. The preprocessed (as detailed in \citealp{Wang2009GeneNetworks}) data are downloaded and require only minor further manipulations to suit our purpose. These manipulations comprise *i)* averaging of duplicated profiles of several samples, *ii)* gene- and mir-wise zero-centering of the expression data, *iii)* averaging the expression levels of the probes that interrogate MCM7. Eventually, this leaves 90 profiles each comprising of 735 microRNA expression measurements. - - - -\lstinputlisting{prostate_ridgeAnalysis.r} - - -With this prostate data set at hand we now investigate whether MCM7 is regulated by microRNAs. Hereto we fit a linear regression model regressing the expression levels of MCM7 onto those of the microRNAs. As the number of microRNAs exceeds the number of samples, ordinary least squares fails and we resort to the ridge estimator of the regression coefficients. First, an informed choice of the penalty parameter is made through maximization of the LOOCV log-likelihood, resulting in $\lambda_{\mbox{{\tiny opt}}} = 1812.826$. Having decided on the value of the to-be-employed penalty parameter, the ridge regression estimator can now readily be evaluated. The thus fitted model allows for the evaluation of microRNA-regulation of MCM7. E.g., by the proportion of variation of the MCM7 expression levels by the microRNAs as expressed in coefficient of determination: $R^2 = 0.4492$. Alternatively, but closely related, observed expression levels may be related to the linear predictor of the MCM7 expression levels: $\hat{\mathbf{Y}}(\lambda_{\mbox{{\tiny opt}}}) = \mathbf{X} \hat{\beta} (\lambda_{\mbox{{\tiny opt}}})$. The Spearman correlation of response and predictor equals 0.6295. A visual inspection is provided by the left panel of Figure ref{fig.RidgeProstateExample}. Note the difference in scale of the $x$- and $y$-axes. This is due to the fact that the regression coefficients have been estimated in penalized fashion, consequently shrinking estimates of the regression coefficients towards zero leading to small estimates and in turn compressing the range of the linear prediction. The above suggests there is indeed association between the microRNA expression levels and those of MCM7. - - - -# original latex figure with scale=0.45, angle=0 - -FIGURE: [prostate_ridgeFit.eps, width=400 frac=1.0] Left panel: Observed vs. (ridge) fitted MCM7 expression values. Right panel: Histogram of the ridge regression coefficient estimates.} label{fig.RidgeProstateExample - - -The overall aim of this illustration was to assess whether microRNA-regulation of MCM7 could also be observed in this prostate cancer data set. In this endeavour the dogma (stating this regulation should be negative) has nowhere been used. A first simple assessment of the validity of this dogma studies the signs of the estimated regression coefficients. The ridge regression estimate has 394 out of the 735 microRNA probes with a negative coefficient. Hence, a small majority has a sign in line with the `microRNA $\downarrow$ mRNA' dogma. When, in addition, taking the size of these coefficients into account (Figure ref{fig.RidgeProstateExample}, right panel), the negative regression coefficient estimates do not substantially differ from their positive counterparts (as can be witnessed from their almost symmetrical distribution around zero). Hence, the value of the `microRNA $\downarrow$ mRNA' dogma is not confirmed by this ridge regression analysis of the MCM7-regulation by microRNAs. Nor is it refuted. - - -The implementation of ridge regression in the {\tt penalized}-package offers the possibility to fully obey the dogma on negative regulation of mRNA expression by microRNAs. This requires all regression coefficients to be negative. Incorporation of the requirement into the ridge estimation augments the constrained estimation problem with an additional constraint: -\begin{align*} % label{form.constrEstProblemRidge} -\hat{\beta}(\lambda) & = \arg \min_{\| \beta \|_2^2 \leq c (\lambda) \atop \beta_j \leq 0 \, \mbox{{\tiny for all $j$}}} \| \mathbf{Y} - \mathbf{X} \, \beta \|^2_2. -\end{align*} -With the additional non-positivity constraint on the parameters, there is no explicit solution for the estimator. The ridge estimate of the regression parameters is then found by numerical optimization using e.g. the Newton-Raphson algorithm or a gradient descent approach. The next listing gives the R-code for ridge estimation with the non-positivity constraint of the linear regression model. - -\lstinputlisting{prostate_ridgeAnalysisWithConstraint.r} - -The linear regression model linking MCM7 expression to that of the microRNAs is fitted by ridge regression while simultaneously obeying the `negative regulation of mRNA by microRNA'-dogma to the prostate cancer data. In the resulting model 401 out of 735 microRNA probes have a nonzero (and negative) coefficient. There is a large overlap in microRNAs with a negative coefficient between those from this and the previous fit. The models are also compared in terms of their fit to the data. The Spearman rank correlation coefficient between response and predictor for the model without positive regression coefficients equals 0.679 and its coefficient of determination 0.524 (confer the left panel of ref{fig.RidgeProstateExample_constrainedAnalysis} for a visualization). This is a slight improvement upon the unconstrained ridge estimated model. The improvement may be small but it should be kept in mind that the number of parameters used by both models is 401 (for the model without positive regression coefficients) vs. 735. Hence, with close to half the number of parameters the dogma-obeying model gives a somewhat better description of the data. This may suggest that there is some value in the dogma as inclusion of this prior information leads to a more parsimonious model without any loss in fit. - - - -# original latex figure with scale=0.45, angle=0 - -FIGURE: [prostate_ridgeFitConstrained.eps, width=400 frac=1.0] Left panel: Observed vs. (ridge) fitted MCM7 expression values (with the non-positive constraint on the parameters in place). Right panel: Histogram of the ridge regression coefficient estimates (from the non-positivity constrained analysis).} label{fig.RidgeProstateExample_constrainedAnalysis - - - -The dogma-obeying model selects 401 microRNAs that aid in the explanation of the variation in the gene expression levels of MCM7. There is an active field of research, called *target prediction*, trying to identify which microRNAs target the mRNA of which genes. Within {\tt R} there is a collection of packages that provide the target prediction of known microRNAs. The packages differ on the method (e.g. experimental or sequence comparison) that has been used to arrive at the prediction. These target predictions may be used to evaluate the value of the found 401 microRNAs. Ideally, there would be a substantial amount of overlap. The {\tt R}-script that loads the target predictions and does the comparison is below. - -\lstinputlisting{prostate_link2predictionTools.r} - - -|-----------------------------------------------------------------| -| # #if FORMAT in ("latex", "pdflatex") -\vspace{-7pt} -# #endif | | | -|---------r--------------------r--------------------r-------------| -| # #if FORMAT in ("latex", "pdflatex") -\vspace{3pt} -# #endif | $\hat{\beta}_j = 0$ | $\hat{\beta}_j < 0$ | -| # #if FORMAT in ("latex", "pdflatex") -\vspace{-4pt} -# #endif | | | -| microRNA not target | 323 | 390 | -| microRNA target | 11 | 11 | -| # #if FORMAT in ("latex", "pdflatex") -\vspace{-9pt} -# #endif | | | -|-----------------------------------------------------------------| - - -\caption{Cross-tabulation of the microRNAs being a potential target of MCM7 vs. the value of its regression coefficient in the dogma-obeying model.} label{table.mir2mcm7prediction} - - -With knowledge available on each microRNA whether it is predicted (by at least one target prediction package) to be a potential target of MCM7, it may be cross-tabulated against its corresponding regression coefficient estimate in the dogma-obeying model being equal to zero or not. Table ref{table.mir2mcm7prediction} contains the result. Somewhat superfluous considering the data, we may test whether the targets of MCM7 are overrepresented in the group of strictly negatively estimated regression coefficients. The corresponding chi-squared test (with Yates' continuity correction) yields the test statistic $\chi^2 = 0.0478$ with a $p$-value equal to 0.827. Hence, there is no enrichment among the 401 microRNAS of those that have been predicted to target MCM7. This may seem worrisome. However, the microRNAs have been selected for their predictive power of the expression levels of MCM7. Variable selection has not been a criterion (although the sign constraint implies selection). Moreover, criticism on the value of the microRNA target prediction has been accumulating in recent years. - - -======= Conclusion ======= - -We discussed ridge regression as a modification of linear regression to overcome the empirical non-identifiability of the latter when confronted with high-dimensional data. The means to this end was the addition of a (ridge) penalty to the sum-of-squares loss function of the linear regression model, which turned out to be equivalent to constraining the parameter domain. This warranted the identification of the regression coefficients, but came at the cost of introducing bias in the estimates. Several properties of ridge regression like moments, MSE, and its Bayesian interpretation have been reviewed. Finally, its behaviour and use have been illustrated in simulation and omics data. - - -======= Exercises ======= -\begin{question}[^footnote2][^footnote2]: This exercise is freely rendered from cite{Drap1998} \mbox{ } -\\ -Find the ridge regression solution for the data below for a general value of $\lambda$ and for the straight line model $Y = \beta_0 + \beta_1 X + \varepsilon$ (only apply the ridge penalty to the slope parameter, not to the intercept). Show that when $\lambda$ is chosen as 0.4, the ridge solution fit is $\hat{Y} = 40 + 1.75 X$. Data: $\mathbf{X}^{\top} = (X_1, X_2, \ldots, X_{8})^{\top} = (-2, -1, -1, -1, 0, 1, 2, 2)^{\top}$, and $\mathbf{Y}^{\top} = (Y_1, Y_2, \ldots, Y_{8})^{\top} = (35, 40, 36, 38, 40, 43, 45, 43)^{\top}$. -\end{question} - -\begin{question}[^footnote3][^footnote3]: This exercise is freely rendered from cite{Hast2009, but can be found in many other places. The original source is unknown to the author.} label{question:ridgeAugmentation} \mbox{ } -\\ -Show that the ridge regression estimates can be obtained by ordinary least squares regression on an augmented data set. We augment the centered matrix $\mathbf{X}$ with $p$ additional row $\sqrt{\lambda} \mathbf{I}$, and augment $\mathbf{y}$ with $p$ zeros. -\end{question} - -\begin{question} label{question.ridgeResidualsProjection} \mbox{ } -\\ -The coefficients $\beta$ of a linear regression model, $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$, are estimated by $\hat{\beta} = (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}$. The associated fitted values then given by $\widehat{\mathbf{Y}} = \mathbf{X} \, \hat{\beta} = \mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y} = \mathbf{H} \mathbf{Y}$, where $\mathbf{H} =\mathbf{X} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top}$ referred to as the hat matrix. The matrix $\mathbf{P}$ is a projection matrix and satisfies $\mathbf{H} = \mathbf{H}^ 2$. Hence, linear regression projects the response $\mathbf{Y}$ onto the vector space spanned by the columns of $\mathbf{Y}$. Consequently, the residuals $\hat{\vvarepsilon}$ and $\hat{\mathbf{Y}}$ are orthogonal. Now consider the ridge estimator of the regression coefficients: $\hat{\beta}(\lambda) = (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top} \mathbf{Y}$. Let $\hat{\mathbf{Y}}(\lambda) = \mathbf{X} \hat{\beta}(\lambda)$ be the vector of associated fitted values. - -\begin{compactitem} -\item[*a)*] Show that the matrix $\mathbf{H}(\lambda) = \mathbf{X} (\mathbf{X}^{\top} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}^{\top}$, associated with ridge regression, is not a projection matrix (for any $\lambda > 0$). - -\item[*b)*] Show that the `ridge fit' $\widehat{\mathbf{Y}}(\lambda)$ is not orthogonal to the associated `ridge residuals' $\hat{\vvarepsilon}(\lambda)$ (for any $\lambda > 0$). - -\item[*c)*] Derive the distribution of the `ridge residuals'. -\end{compactitem} -\end{question} - - -\begin{question} label{question.MSEofLinearPredictor} \mbox{ } -\\ -Recall that there exists $\lambda > 0$ such that $MSE(\hat{\beta}) > MSE[\hat{\beta}(\lambda)]$. Verify that this carries over to the linear predictor. That is, there exists a $\lambda > 0$ such that$MSE(\widehat{\mathbf{Y}}) = MSE(\mathbf{X} \hat{\beta}) > MSE[\mathbf{X}\hat{\beta}(\lambda)]$. -\end{question} - -\begin{question} \mbox{ } -\\ -Consider a 3-gene pathway. Expression levels of these three genes have been measured in an observational study involving hundred individuals. In order to assess how the expression levels of gene A are affect by that of genes B and C, a medical researcher fits the -\begin{align*} -Y_{i}^{(A)} &= \beta_b Y_{i}^{(B)} + \beta_c Y_{i}^{(C)} + -\varepsilon_{i}, -\end{align*} -with $\varepsilon_i \sim \mathcal{N}(0, \sigma^2)$. This model fitted by means of ridge regression, but with a separate penalty parameter, $\lambda_{2,b}$ and $\lambda_{2,c}$, for the two regression coefficient, $\beta_b$ and $\beta_c$, respectively. - -\begin{compactitem} -\item[*a)*] Write down the ridge penalized loss function employed by the researcher. - -\item[*b)*] Does a different choice of penalty parameter for the second regression coefficient affect the estimation of the first regression coefficient? Motivate your answer. - -\item[*c)*] The researcher decides that the second covariate $Y_i^{(C)}$ is irrelevant. Instead of removing the covariate from model, the researcher decides to set $\lambda_{2,c} = -\infty$. Show that this results in the same ridge estimate for $\beta_b$ as when fitting (again by means of ridge regression) the model without the second covariate. -\end{compactitem} -\end{question} - -\begin{question} \mbox{ } -\\ -The expression levels of the $j$-the gene are explained by a linear regression model in terms of those of all other genes. Consider the following two ridge regression estimators of the regression parameter of this model, defined as: -\begin{align*} -\arg \max_\beta \sum_{i=1}^n (Y_{i,j} - \mathbf{Y}_{i,\setminus j} \beta_j)^2 + \lambda \| \beta_j \|_ 2^2 -\quad -\mbox{and} \quad -\arg \max_\beta \sum_{i=1}^n (Y_{i,j} - \mathbf{Y}_{i,\setminus j} \beta_j)^2 + n \lambda \| \beta_j \|_ 2^2. -\end{align*} -Which do you prefer? Motivate. -\end{question} - - - - -========= Generalizing ridge regression ========= label{chap:genRidge} -# ======= Generalized ridge regression ======= - -The expos\'{e} on ridge regression may be generalized in many ways. Among others different generalized linear models may be considered (confer Section ref{sect.ridgeLogistic}). In this section we stick to the linear regression model $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$ with the usual assumptions, but fit it in weighted fashion and generalize the common, spherical penalty. The loss function corresponding to this scenario is: - -!bt - -!bt -\begin{align} label{form:generalizedRidgeLoss} -(\mathbf{Y} - \mathbf{X} \beta)^{\top} \mathbf{W} (\mathbf{Y} - \mathbf{X} \beta) + (\beta - \beta_0)^{\top} \mathbf{\Delta} -(\beta - \beta_0), -\end{align} -!et -!et -which comprises a weighted least squares criterion and a generalized ridge penalty. In this $\mathbf{W}$ is a $(n \times n)$-dimensional, diagonal matrix with $(\mathbf{W})_{ii} \in [0,1]$ representing the weight of the $i$-th observation. The penalty is now a quadratic form with penalty parameter $\mathbf{\Delta}$, a $(p \times p)$-dimensional, positive definite, symmetric matrix. When $\mathbf{\Delta} = \lambda \mathbf{I}_{pp}$, one regains the spherical penalty of `regular ridge regression'. This penalty shrinks each element of the regression parameter $\beta$ equally along the unit vectors $\mathbf{e}_j$. Generalizing $\mathbf{\Delta}$ to the class of symmetric, positive definite matrices $\mathcal{S}_{++}$ allows for *i)* different penalization per regression parameter, and *ii)* joint (or correlated) shrinkage among the elements of $\beta$. The penalty parameter $\mathbf{\Delta}$ determines the speed and direction of shrinkage. The $p$-dimensional column vector $\beta_0$ is a user-specified, non-random target towards which $\beta$ is shrunken as the penalty parameter increases. When recasting generalized ridge estimation as a constrained estimation problem, the implications of the penalty may be visualized (Figure ref{fig:generalizedRidgeIllustration}, left panel). The generalized ridge penalty is a quadratic form centered around $\beta_0$. In Figure ref{fig:generalizedRidgeIllustration} the parameter constraint clearly is ellipsoidal (and not spherical). Moreover, the center of this ellipsoid is not at zero. - -# original latex figure with scale=0.40, angle=0 - -FIGURE: [generalizedRidgeIllustration_penalty.eps, width=400 frac=1.0] Left panel: the contours of the likelihood (grey solid ellipsoids) and the parameter constraint implied by the generalized penalty (black dashed ellipsoid. Right panel: generalized (fat coloured lines) and `regular' (thin coloured lines) regularization paths of four regression coefficients. The dotted grey (straight) lines indicated the targets towards the generalized ridge penalty shrinks regression coefficient estimates.} label{fig:generalizedRidgeIllustration - - -The addition of the generalized ridge penalty to the sum-of-squares ensures the existence of a unique regression estimator in the face of super-collinearity. The generalized penalty is a non-degenerated quadratic form in $\beta$ due to the positive definiteness of the matrix $\mathbf{\Delta}$. As it is non-degenerate, it is strictly convex. Consequently, the generalized ridge regression loss function (ref{form:generalizedRidgeLoss}), being the sum of a convex and strictly convex function, is also strictly convex. This warrants the existence of a unique global minimum and, thereby, a unique estimator. - - -Like for the `regular' ridge loss function (ref{form.ridgeLossFunction}), there is an explicit expression for the optimum of the generalized ridge loss function (ref{form:generalizedRidgeLoss}). To see this, obtain the estimating equation of $\beta$ through equating its derivative with respect to $\beta$ to zero: -\begin{align*} -2 \mathbf{X}^{\top} \mathbf{W} \mathbf{Y} - 2 \mathbf{X}^{\top} \mathbf{W} \mathbf{X} \beta - 2 \mathbf{\Delta} \beta + 2 \mathbf{\Delta} \beta_0 & = \mathbf{0}_{p}. -\end{align*} -This is solved by: - -!bt - -!bt -\begin{align} -\hat{\beta}(\mathbf{\Delta}) & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} (\mathbf{X}^{\top} \mathbf{W} \mathbf{Y} + \mathbf{\Delta} \beta_0). -\end{align} -!et -!et -Clearly, this reduces to the `regular' ridge estimator by setting $\mathbf{W} = \mathbf{I}_{nn}$, $\beta_0 = \mathbf{0}_{p}$, and $\mathbf{\Delta} = \lambda \mathbf{I}_{pp}$. The effects of the generalized ridge penalty on the estimates can be seen in the regularization paths of the estimates. Figure ref{fig:generalizedRidgeIllustration} (right panel) contains an example of the regularization paths for coefficients of a linear regression model with four explanatory variables. Most striking is the limiting behaviour of the estimates of $\beta_3$ and $\beta_4$ for large values of the penalty parameter $\lambda$: they convergence to a non-zero value (as was specified by a nonzero $\beta_0$). More subtle is the (temporary) convergence of the regularization paths of the estimates of $\beta_2$ and $\beta_3$. That of $\beta_2$ is pulled away from zero (its true value and approximately its unpenalized estimate) towards the estimate of $\beta_3$. In the regularization path of $\beta_3$ this can be observed in a delayed convergence to its nonzero target value (for comparison consider that of $\beta_4$). For reference the corresponding regularization paths of the `regular' ridge estimates (as thinner lines of the same colour) are included in Figure ref{fig:generalizedRidgeIllustration}. - - - -\begin{example} *Fused ridge estimation* label{example.gRidge2orthonormalDesign} -\\ -An example of a generalized ridge penalty is the *fused ridge penalty*. Consider the standard linear model $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$. The fused ridge estimator of $\beta$ then minimizes: - -!bt - -!bt -\begin{align} label{form:fusedRidgeLoss} -\| \mathbf{Y} - \mathbf{X} \beta \|_2^2 + \lambda \sum_{j=2}^p \| \beta_{j} - \beta_{j-1} \|_2^2. -\end{align} -!et -!et -The penalty in the loss function above can be written as a generalized ridge penalty: -\begin{align*} -\lambda \sum_{j=2}^p \| \beta_{j} - \beta_{j-1} \|_2^2 & = \beta^{\top} -\left( -\begin{array}{rrrrrr} -\lambda & -\lambda & 0 & \ldots & \ldots & 0 -# #if FORMAT in ("latex", "pdflatex") -\vspace{-4pt} -# #endif -\\ --\lambda & 2 \lambda & -\lambda & \ddots & & \vdots -# #if FORMAT in ("latex", "pdflatex") -\vspace{-4pt} -# #endif -\\ -0 & -\lambda & 2 \lambda & \ddots & \ddots & \vdots -# #if FORMAT in ("latex", "pdflatex") -\vspace{-4pt} -# #endif -\\ -\vdots & \ddots & \ddots & \ddots & \ddots & 0 -# #if FORMAT in ("latex", "pdflatex") -\vspace{-4pt} -# #endif -\\ -\vdots & & \ddots & \ddots & \ddots & -\lambda -# # #if FORMAT in ("latex", "pdflatex") -\vspace{-4pt} -# #endif -\\ -0 & \ldots & \ldots & 0 & -\lambda & \lambda -\end{array}\right) -\beta. -\end{align*} -The matrix $\mathbf{\Delta}$ employed above is semi-positive definite and therefore the loss function (ref{form:fusedRidgeLoss}) is not strictly convex. Hence, often a regular ridge penalty $\| \beta \|_2^2$ is added (with its own penalty parameter). - -To illustrate the effect of the fused ridge penalty on the estimation of the linear regression model $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$, let $\beta_j = \phi_{0,1}(z_j)$ with $z_j =-30 + \tfrac{6}{50} j$ for $j=1, \ldots, 500$. Sample the elements of the design matrix $\mathbf{X}$ and those of the error vector $\vvarepsilon$ from the standard normal distribution, then form the response $\mathbf{Y}$ from the linear model. The regression parameter is estimated through fused ridge loss minimization with $\lambda=1000$. The estimate is shown in Figure ref{fig:fusedRidgeIllustration} (red line). For reference the figure includes the true $\beta$ (black line) and the `regular ridge' estimate with $\lambda=1$ (blue line). Clearly, the fused ridge estimate yields a nice smooth vector of $\beta$ estimates -\end{example} - -# original latex figure with scale=0.40, angle=0 - -FIGURE: [fusedRidgeIllustration_simulation.eps, width=400 frac=1.0] Left panel: illustration of the fused ridge estimator (in simulation). The true parameter $\beta$ and its ridge and fused ridge estimates against their spatial order. Right panel: Ridge vs. fused ridge estimates of the DNA copy effect on KRAS expression levels. The dashed, grey vertical bar indicates the location of the KRAS gene. } label{fig:fusedRidgeIllustration - - - - -======= Moments ======= - -The expectation and variance of $\hat{\beta}(\mathbf{\Delta})$ are obtained through application of the same matrix algebra and expectation and covariance rules used in the derivation of their counterparts of the `regular' ridge regression estimator. This leads to: -\begin{align*} -\mathbb{E}[\hat{\beta}(\mathbf{\Delta})] & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} \beta + \mathbf{\Delta} \beta_0), -\\ -\mbox{Var}[\hat{\beta}(\mathbf{\Delta})] & = \sigma^2 (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} \mathbf{X}^{\top} \mathbf{W}^2 \mathbf{X} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1}. -\end{align*} -From these expressions similar limiting behaviour as for the `regular' ridge regression case can be deduced. To this end let $\mathbf{V}_{\delta} \mathbf{D}_{\delta} \mathbf{V}_{\delta}^{\top}$ be the eigendecomposition of $\mathbf{\Delta}$ and $d_{\delta,j} = (\mathbf{D}_{\delta})_{jj}$. Furthermore, define (with some abuse of notation) $\lim_{\mathbf{\Delta} \rightarrow \infty}$ as the limit of all $d_{\delta,j}$ simultaneously tending to infinity. Then, $\lim_{\mathbf{\Delta} \rightarrow \infty} \mathbb{E}[\hat{\beta}(\mathbf{\Delta})] = \beta_0$ and $\lim_{\mathbf{\Delta} \rightarrow \infty} \mbox{Var}[\hat{\beta}(\mathbf{\Delta})] = \mathbf{0}_{pp}$. - - -\begin{example} \mbox{ } label{example.gRidge2orthonormalDesign} -\\ -Let $\mathbf{X}$ be an $(n \times p)$-dimensional, orthonormal design matrix. Contrast the regular and generalized ridge regression estimator, the latter with $\mathbf{W} = \mathbf{I}_{pp}$, $\beta_0 = \mathbf{0}_p$ and $\mathbf{\Delta} = \lambda \mathbf{R}$ where $\mathbf{R} = (1-\rho) \mathbf{I}_{pp} + \rho \mathbf{1}_{pp}$ for $\rho \in (-(p-1)^{-1}, 1)$. For $\rho =0$ the two estimators coincide. The variance of the generalized ridge regression estimator then is $\mbox{Var}[ \hat{\beta}(\mathbf{\Delta})] = (\mathbf{I}_{pp} + \mathbf{\Delta})^{-2}$. The efficiency of this estimator, measured by its generalized variance, is: -\begin{align*} -\det \{ \mbox{Var}[ \hat{\beta}(\mathbf{\Delta})] \} & = \{ [1 + \lambda + (p-1) \rho] (1 + \lambda-\rho)^{p-1} \}^{-2}. -\end{align*} -This efficiency attains its minimum at $\rho = 0$. In the present case, the regular ridge regression estimator is thus more efficient than its generalized counterpart. -\end{example} - - -\begin{example} *(MSE with perfect target)* -\\ -Set $\beta_0 = \beta$, i.e. the target is equal to the true value of the regression parameter. Then: -\begin{align*} -\mathbb{E}[\hat{\beta}(\Delta)] & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \Delta)^{-1} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} \beta + \Delta \beta) \, \, \, = \, \, \, \beta. -\end{align*} -Hence, irrespective of the choice of $\Delta$, the generalized ridge is then unbiased. Thus: -\begin{align*} -\mbox{MSE}[\hat{\beta}(\Delta)] & = \mbox{tr} \{ -\mbox{Var}[\hat{\beta}(\Delta)] \} -\\ -& = \mbox{tr}[ \sigma^{2} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1} \mathbf{X}^{\top} \mathbf{W}^2 \mathbf{X} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-1}] -\\ -& = \sigma^2 \mbox{tr}[ \mathbf{X}^{\top} \mathbf{W}^2 \mathbf{X} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \mathbf{\Delta})^{-2}]. -\end{align*} -When $\mathbf{\Delta} = \lambda \mathbf{I}_{pp}$, this MSE is smaller than that of the ML regression estimator, irrespective of the choice of $\lambda$. -\end{example} - - -======= The Bayesian connection} label{sect:genRidgeBayes ======= -This generalized ridge estimator can, like the regular ridge estimator, be viewed as a Bayesian estimator. It requires to replace the conjugate prior on $\beta$ by a more general normal law, $\beta \sim \mathcal{N}(\beta_0, \sigma^2 \mathbf{\Delta}^{-1})$, but retains the gamma prior on $\sigma^2$. The joint posterior distribution of $\beta$ and $\sigma^2$ is then obtained analogously (the details are left as Exercise ref{question.generalizedRidgeAndBayes}) to Section ref{sect:Bayes}: -\begin{align*} -f_{\beta, \sigma^2} (\beta, \sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) & = f_Y (\mathbf{Y} \, | \, \mathbf{X}, \beta, \sigma^2) \, f_{\beta}(\beta | \sigma^2) \, f_{\sigma}(\sigma^2) -\\ -& \propto & g_{\beta} (\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) \, -g_{\sigma^2} (\sigma^2 \, | \, \mathbf{Y}, \mathbf{X}) -\end{align*} -with -\begin{align*} -g_{\beta} (\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) -& \propto & \exp \Big\{ - \frac{1}{2\sigma^2} \big[ \beta - \hat{\beta}(\mathbf{\Delta}) \big]^{\top} (\mathbf{X}^{\top} \mathbf{X} + \mathbf{\Delta}) \big[ \beta - \hat{\beta}(\mathbf{\Delta}) \big] \Big\}. -\end{align*} -This implies $\mathbb{E}(\beta \, | \, \sigma^2, \mathbf{Y}, \mathbf{X}) = \hat{\beta}(\mathbf{\Delta})$. Hence, the generalized ridge regression estimator too can be viewed as the Bayesian posterior mean estimator of $\beta$ when imposing a multivariate Gaussian prior on the regression parameter. - - - - - -======= Application ======= - -An illustration involving omics data can be found in the explanation of a gene's expression levels in terms of its DNA copy number. The latter is simply the number of gene copies encoded in the DNA. For instance, for most genes on the autosomal chromosomes the DNA copy number is two, as there is a single gene copy on each chromosome and autosomal chromosomes come in pairs. Alternatively, in males the copy number is one for genes that map to the X or Y chromosome, while in females it is zero for genes on the Y chromosome. In cancer the DNA replication process has often been compromised leading to a (partially) reshuffled and aberrated DNA. Consequently, the cancer cell may exhibit gene copy numbers well over a hundred for classic oncogenes. A faulted replication process does - of course - not nicely follow the boundaries of gene encoding regions. This causes contiguous genes to commonly share aberrated copy numbers. With genes being transcribed from the DNA and a higher DNA copy number implying an enlarged availability of the gene's template, the latter is expected to lead to elevated expression levels. Intuitively, one expects this effect to be localized (a so-called *cis*-effect), but some suggest that aberrations elsewhere in the DNA may directly affect the expression levels of distant genes (referred to as a *trans*-effect). - -The *cis*- and *trans*-effects of DNA copy aberrations on the expression levels of the KRAS oncogene in colorectal cancer are investigated. Data of both molecular levels from the TCGA (The Cancer Genome Atlas) repository are downloaded \citep{TCGA2012colon}. The gene expression data are limited to that of KRAS, while for the DNA copy number data only that of chromosome 12, which harbors KRAS, is retained. This leaves genomic profiles of 195 samples comprising 927 aberrations. Both molecular data types are zero centered feature-wise. Moreover, the data are limited to ten - conveniently chosen? - samples. The KRAS expression levels are explained by the DNA copy number aberrations through the linear regression model. The model is fitted by means of ridge regression, with $\lambda \mathbf{\Delta}$ and $\mathbf{\Delta} = \mathbf{I}_{pp}$ and a single-banded $\mathbf{\Delta}$ with unit diagonal and the elements of the first off-diagonal equal to the arbitrary value of $-0.4$. The latter choice appeals to the spatial structure of the genome and encourages similar regression estimates for contiguous DNA copy numbers. The penalty parameter is chosen by means of leave-one-out cross-validation using the squared error loss. - -\lstinputlisting{fusedRidge_KRASexample.r} - -The right panel of Figure ref{fig:fusedRidgeIllustration} shows the ridge regression estimate with both choices of $\mathbf{\Delta}$ and optimal penalty parameters plotted against the chromosomal order. The location of KRAS is indicated by a vertical dashed bar. The ordinary ridge regression estimates show a minor peak at the location of KRAS but is otherwise more or less flat. In the generalized ridge estimates the peak at KRAS is emphasized. Moreover, the region close to KRAS exhibits clearly elevated estimates, suggesting co-abberated DNA. For the remainder the generalized ridge estimates portray a flat surface, with the exception of a single downward spike away from KRAS. Such negative effects are biologically nonsensible (more gene templates leading to reduced expression levels?). On the whole the generalized ridge estimates point towards the *cis*-effect as the dominant genomic regulation mechanism of KRAS expression. The isolated spike may suggest the presence of a *trans*-effect, but its sign is biological nonsensible and the spike is fully absent in the ordinary ridge estimates. This leads us to ignore the possibility of a genomic *trans*-effect on KRAS expression levels in colorectal cancer. - -The sample selection demands justification. It yields a clear illustrate-able difference between the ordinary and ridge estimates. When all samples are left in, the *cis*-effect is clearly present, discernable from both estimates that yield a virtually similar profile. - - -======= Generalized ridge regression ======= - -What is generally referred to as `generalized ridge regression' (cf. \citealp{Hoer1970, Hemm1975}) is the particular case of loss function (ref{form:generalizedRidgeLoss}) in which $\mathbf{W} = \mathbf{I}_{nn}$, $\beta_0 = \mathbf{0}_{p}$, and $\mathbf{\Delta} = \mathbf{V}_{x} \mathbf{\Lambda} \mathbf{V}_x^{\top}$, where $\mathbf{V}_x$ is obtained from the singular value decomposition of $\mathbf{X}$ (i.e., $\mathbf{X} = \mathbf{U}_{x} \mathbf{D}_x \mathbf{V}_x^{\top}$ with its constituents endowed with the usual interpretation) and $\mathbf{\Lambda}$ a positive definite diagonal matrix. This gives the estimator: -\begin{align*} -\hat{\beta}(\mathbf{\Lambda}) & = (\mathbf{X}^{\top} \mathbf{X} + \mathbf{\Delta})^{-1} \mathbf{X}^{\top} \mathbf{Y} -\\ -& = (\mathbf{V}_x \mathbf{D}_x \mathbf{U}_x^{\top} \mathbf{U}_x \mathbf{D}_x \mathbf{V}_x^{\top} + \mathbf{V}_x \mathbf{\Lambda} \mathbf{V}_x^{\top})^{-1} \mathbf{V}_x \mathbf{D}_x \mathbf{U}_x \mathbf{Y} -\\ -& = \mathbf{V}_x (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1} \mathbf{D}_x \mathbf{U}_x \mathbf{Y}. -\end{align*} -From this last expression it becomes clear how this estimator generalizes the `regular ridge estimator'. The latter shrinks all eigenvalues, irrespectively of their size, in the same manner through a common penalty parameter. The `generalized ridge estimator', through differing penalty parameters (i.e. the diagonal elements of $\mathbf{\Lambda}$), shrinks them individually. - -The generalized ridge estimator coincides with the Bayesian linear regression estimator with the normal prior $\mathcal{N}[\mathbf{0}_p, (\mathbf{V}_x \mathbf{\Lambda} \mathbf{V}_x^{\top})^{-1}]$ on the regression parameter $\beta$ (and preserving the inverse gamma prior on the error variance). Assume $\mathbf{X}$ to be of full column rank and choose $\mathbf{\Lambda} = g^{-1} \mathbf{D}_x^2$ with $g$ a positive scalar. The prior on $\beta$ then - assuming $(\mathbf{X}^{\top} \mathbf{X})^{-1}$ exits - reduces to Zellner's $g$-prior: $\beta \sim \mathcal{N}[\mathbf{0}_p, g (\mathbf{X}^{\top} \mathbf{X})^{-1}]$ \citep{Zell1986}. The corresponding estimator of the regression coefficient is: $\hat{\beta}(g) = g (1+g)^{-1} (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}$, which is proportional to the unpenalized ordinary least squares estimator of $\beta$. - -For convenience of notation in the analysis of the generalized ridge estimator the linear regression model is usually rewritten as: -\begin{align*} -\mathbf{Y} & = \mathbf{X} \beta + \vvarepsilon \, \, \, = \, \, \, -\mathbf{X} \mathbf{V}_x \mathbf{V}_x^{\top} \beta + \vvarepsilon \, \, \, = \, \, \, \tilde{\mathbf{X}} \aalpha + \vvarepsilon, -\end{align*} -with $\tilde{\mathbf{X}} = \mathbf{X} \mathbf{V}_x = \mathbf{U}_x -\mathbf{D}_x$ (and thus $\tilde{\mathbf{X}}^{\top} \tilde{\mathbf{X}} = \mathbf{D}_x^ 2$) and $\aalpha = \mathbf{V}_x^{\top} \beta$ with loss function $(\mathbf{Y} - \tilde{\mathbf{X}} \aalpha)^{\top} (\mathbf{Y} - \tilde{\mathbf{X}} \aalpha) + \aalpha^{\top} \mathbf{\Lambda} \aalpha$. In the notation above the generalized ridge estimator is then: -\begin{align*} -\hat{\aalpha}(\mathbf{\Lambda}) & = (\tilde{\mathbf{X}}^{\top} \tilde{\mathbf{X}} + \mathbf{\Lambda})^ {-1} \tilde{\mathbf{X}}^{\top} \mathbf{Y} = (\mathbf{D}_x^ 2 + \mathbf{\Lambda})^{-1} \tilde{\mathbf{X}}^{\top} \mathbf{Y}, -\end{align*} -from which one obtains $\hat{\beta}(\mathbf{\Lambda}) = \mathbf{V}_x \hat{\aalpha}(\mathbf{\Lambda})$. Using $\mathbb{E}[\hat{\aalpha}(\mathbf{\Lambda})] = (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1} \mathbf{D}_x^2 \aalpha$ and $\mbox{Var}[\hat{\aalpha}(\mathbf{\Lambda})] = \sigma^2 (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1} \mathbf{D}_x^2 (\mathbf{D}_x^2 + \mathbf{\Lambda})^{-1}$, the MSE for the generalized ridge estimator can be written as: -\begin{align*} -\mbox{MSE}[\hat{\aalpha}(\mathbf{\Lambda})] & = \sum_{j=1}^p ( \sigma^2 d_{x,j}^2 + \alpha_j^2 \lambda_{j}^2 ) (d_{x,j}^2 + \lambda_{j} )^{-2}, -\end{align*} -where $d_{x,j} = (\mathbf{D}_x)_{jj}$ and $\lambda_j = (\mathbf{\Lambda})_{jj}$. Having $\aalpha$ and $\sigma^ 2$ available, it is easily seen (equate the derivative w.r.t. $\lambda_j$ to zero and solve) that the MSE of $\hat{\aalpha}(\mathbf{\Lambda})$ is minimized by $\lambda_j = \sigma^2 / \alpha_j^2$ for all $j$. With $\aalpha$ and $\sigma^2$ unknown, cite{Hoer1970} suggest an iterative procedure to estimate the $\lambda_j$'s. Initiate the procedure with the OLS estimates of $\aalpha$ and $\sigma^2$, followed by sequentially updating the $\lambda_j$'s and -the estimates of $\aalpha$ and $\sigma^2$. An analytic expression of the limit of this procedure exists (\citealp{Hemm1975}). This limit, however, still depends on the observed $\mathbf{Y}$ and as such it does not necessarily yield the minimal attainable value of the MSE. This limit may nonetheless still yield a potential gain in MSE. This is investigated in cite{Lawl1981}. Under a variety of cases it seems to indeed outperform the OLS estimator, but there are exceptions. - -======= Conclusion ======= - -To conclude: a note of caution. The generalized ridge penalty is extremely flexible. It can incorporate any prior knowledge on the parameter values (through specification of $\beta_0$) and the relations among these parameters (via $\mathbf{\Delta}$). While a pilot study or literature may provide a suggestion for $\beta_0$, it is less obvious how to choose an informative $\mathbf{\Delta}$ (although a spatial structure is a nice exception). In general, exact knowledge on the parameters should not be incorporated implicitly via the penalty (read: prior) but preferably be used explicitly in the model - the likelihood - itself. Though this may be the viewpoint of a prudent frequentist and a subjective Bayesian might disagree. - - -======= Exercises ======= -\begin{question} \mbox{ } -\\ -Consider the linear regression model $Y_i = \beta_1 X_{i,1} + \beta_2 X_{i,2} + \varepsilon_i$ for $i=1, \ldots, n$. -Suppose estimates of the regression parameters $(\beta_1, \beta_2)$ of this model are obtained through the minimization of the sum-of-squares augmented with a ridge-type penalty: -\begin{align*} -\Big[ \sum_{i=1}^n (Y_i - \beta_1 X_{i,1} - \beta_2 X_{i,2})^2 \Big] + \lambda (\beta_1^2 + \beta_2^2 + 2 \nu \beta_1 \beta_2), -\end{align*} -with penalty parameters $\lambda \in \mathbb{R}_{> 0}$ and $\nu \in (-1, 1)$. - -\begin{compactitem} -\item[*a)*] Sketch (for both $\nu=0$ and $\nu=0.9$) the shape of the parameter constraint induced by the penalty above and describe in words the qualitative difference between both shapes. - -\item[*b)*] When $\nu = -1$ and $\lambda \rightarrow \infty$ the estimates of $\beta_1$ and $\beta_2$ (resulting from minimization of the penalized loss function above) converge towards each other: -$\lim_{\lambda \rightarrow \infty} \hat{\beta}_1(\lambda, -1) = \lim_{\lambda \rightarrow \infty} \hat{\beta}_2(\lambda, -1)$. Motivated by this observation a data scientists incorporates the equality constraint $\beta_1 = \beta = \beta_2$ explicitly into the model, and s/he estimates the `joint regression parameter' $\beta$ through the minimization (with respect to $\beta$) of: -\begin{align*} -\Big[ \sum_{i=1}^n (Y_i - \beta X_{i,1} - \beta X_{i,2})^2 \Big] + \delta \beta^2, -\end{align*} -with penalty parameter $\delta \in \mathbb{R}_{> 0}$. The data scientist is surprised to find that resulting estimate $\hat{\beta}(\delta)$ does not have the same limiting (in the penalty parameter) behavior as the $\hat{\beta}_1(\lambda, -1)$, i.e. $\lim_{\delta \rightarrow \infty} \hat{\beta} (\delta) \not= \lim_{\lambda \rightarrow \infty} \hat{\beta}_1(\lambda, -1)$. Explain the misconception of the data scientist. - -\item[*c)*] Assume that *i)* $n \gg 2$, *ii)* the unpenalized estimates $(\hat{\beta}_1(0, 0), \hat{\beta}_2(0, 0))$ equal $(-2,2)$, and *iii)* that the two covariates $X_1$ and $X_2$ are zero-centered, have equal variance, and are strongly negatively correlated. Consider $(\hat{\beta}_1(\lambda, \nu), \hat{\beta}_2(\lambda, \nu))$ for both $\nu=-0.9$ and $\nu=0.9$. For which value of $\nu$ do you expect the sum of the absolute value of the estimates to be largest? *Hint:* Distinguish between small and large values of $\lambda$ and think geometrically! -\end{compactitem} -\end{question} - -\begin{question} label{question.generalizedRidgeAndBayes} \mbox{ } -\\ -Consider the linear regression model $\mathbf{Y} = \mathbf{X} \beta + \vvarepsilon$ with $\vvarepsilon \sim \mathcal{N}(\mathbf{0}_p, \sigma^2 \mathbf{I}_{pp})$. Assume $\beta \sim \mathcal{N}(\beta_0, \sigma^2 \mathbf{\Delta}^{-1})$ with $\beta_0 \in \mathbb{R}^p$ and $\mathbf{\Delta} \succ 0$ and a gamma prior on the error variance. Verify (i.e., work out the details of the derivation) that the posterior mean coincides with the generalized ridge estimator defined as: -\begin{align*} -\hat{\beta} & = (\mathbf{X}^{\top} \mathbf{X} + \mathbf{\Delta})^{-1} (\mathbf{X}^{\top} \mathbf{Y} + \mathbf{\Delta} \beta_0). -\end{align*} -\end{question} - - - -\begin{question} label{question.ridgeAR1penalty} \mbox{ } -\\ -The ridge penalty may be interpreted as a multivariate normal prior on the regression coefficients: $\beta \sim \mathcal{N}(\mathbf{0}, \lambda^{-1} \mathbf{I}_{pp})$. Different priors may be considered. In case the covariates are spatially related in some sense (e.g. genomically), it may of interest to assume a first-order autoregressive prior: $\beta \sim \mathcal{N}(\mathbf{0}, \lambda^{-1} \SSigma_A)$, in which $\SSigma_A$ is a $p \times p$-correlation matrix with $(\SSigma_A)_{j_1, j_2} = \rho^{ | j_1 - j_2 | } $ for some correlation coefficient $\rho \in [0, 1)$. Hence, -\begin{align*} -\SSigma_A \, \, \, = \, \, \, -\left( -\begin{array}{cccc} -1 & \rho & \ldots & \rho^{p-1} -\\ -\rho & 1 & \ldots & \rho^{p-2} -\\ -\vdots & \vdots & \ddots & \vdots -\\ -\rho^{p-1} & \rho^{p-2} & \ldots & 1 -\end{array} -\right). -\end{align*} - -\begin{compactitem} -\item[*a)*] The penalized loss function associated with this AR(1) prior is: -\begin{align*} -\mathcal{L}(\beta; \lambda, \SSigma_A) & = \| \mathbf{Y} - \mathbf{X} \beta \|_2^2 + \lambda \beta^{\top} \SSigma_A^{-1} \beta. -\end{align*} -Find the minimizer of this loss function. - -\item[*b)*] What is the effect of $\rho$ on the ridge estimates? Contrast this to the effect of $\lambda$. Illustrate this on (simulated) data. - -\item[*c)*] Instead of an AR(1) prior assume a prior with a uniform correlation between the elements of $\beta$. That is, replace $\SSigma_A$ by $\SSigma_U$, given by: -\begin{align*} -\SSigma_U \, \, \, = \, \, \, \left( -\begin{array}{ccc} -1 & \rho & \rho -\\ -\rho & 1 & \rho -\\ -\rho & \rho & 1 -\end{array} -\right) -\end{align*} -\\ -Investigate (again on data) the effect of changing from the AR(1) to the uniform prior on the ridge regression estimates. -\end{compactitem} -\end{question} - - - - -========= Ridge logistic regression ========= label{sect.ridgeLogistic} -# ======= Ridge logistic regression ======= - -Ridge penalized estimation is not limited to the standard linear regression model, but may be used to estimate (virtually) any model. Here we illustrate how it may be used to fit the logistic regression model. To this end we first recap this model and the (unpenalized) maximum likelihood estimation of its parameters. After which the model is estimated by means of ridge penalized maximum likelihood, which will turn out to be a relatively straightforward modification of unpenalized estimation. - -======= Logistic regression ======= - -The logistic regression model explains a binary response variable (through some transformation) by a linear combination of a set of covariates (as in the linear regression model). Denote this response of the $i$-th sample by $Y_i$ with $Y_i \in \{ 0, 1 \}$ for $i=1, \ldots, n$. The $n$-dimensional column vector $\mathbf{Y}$ stacks these $n$ responses. For each sample information on the $p$ explanatory variables $X_{i,1}, \ldots, X_{i,p}$ is available. In row vector form this information is denoted $\mathbf{X}_{i,\ast} = (X_{i,1}, \ldots, X_{i,p})$. Or, in short, $\mathbf{X}_i$ when the context tolerates no confusion. The $(n \times p)$-dimensional matrix $\mathbf{X}$ aggregates these vectors, such that $\mathbf{X}_i$ is the $i$-th row vector. - -The binary response cannot be modelled as in the linear model like $Y_i = \mathbf{X}_i \beta + \varepsilon_i$. With each element of $\mathbf{X}_i$ and $\beta$ assuming a value in $\mathbb{R}$, the linear predictor is not restricted to the domain of the response. This is resolved by modeling $p_i = P(Y_i = 1)$ instead. Still the linear predictor may exceed the domain of the response ($p_i \in [0,1]$). Hence, a transformation is applied to map $p_i$ to $\mathbb{R}$, the range of the linear predictor. -# original latex figure with scale=0.40, angle=0 - -FIGURE: [logistic_effectOfBeta0.eps, width=400 frac=1.0] Top row, left panel: the response curve for various choices of the intercept $\beta_0$. Top row, right panel: the response curve for various choices of the regression coefficent $\beta_1$. Bottom row, left panel: the responce curve for various choices of the link function. Bottom panel, right panel: observations, fits and their deviations. } label{fig.logisticRidge_modelAndFitIllustration -The transformation associated with the logistic regression model is the logarithm of the odds, with the odds defined as: $\mbox{*odds*} = P(\mbox{succes}) / P(\mbox{failure}) = p_i/ (1-p_i)$. The logistic model is then written as $\log[ p_i / (1-p_i)] = \mathbf{X}_i \beta$ for all $i$. Or, expressed in terms of the response: -\begin{align*} -p_i & = P(Y_i = 1) \, \, \, = \, \, \, g^{-1}(\mathbf{X}_i; \beta) \, \, \, = \, \, \,\frac{\exp(\mathbf{X}_i \beta) }{1 + \exp(\mathbf{X}_i \beta) }. -\end{align*} -The function $g(\cdot; \cdot)$ is called the *link function*. It links the response to the explanatory variables. The one above is called the logistic link function. Or short, logit. The regression parameters have tangible interpretations. When the first covariate represents the intercept, i.e. $X_{i,j} = 1$ for all $i$, then $\beta_1$ determines where the link function equals a half when all other covariates fail to contribute to the linear predictor (i.e. where $P (Y_i = 1 \, | \, \mathbf{X}_{i}) = 0.5$ when $\mathbf{X}_{i} \beta = \beta_1$). This is illustrated in the top-left panel of Figure ref{fig.logisticRidge_modelAndFitIllustration} for various choices of the intercept. On the other hand, the regression parameters are directly related to the odds ratio: $\mbox{*odds ratio*} = \mbox{odds}(X_{i,j}+1) / \mbox{odds}(X_{i,j}) = \exp(\beta_j)$. Hence, the effect of a unit change in the $j$-th covariate on the odds ratio is $\exp(\beta_j)$ (see Figure ref{fig.logisticRidge_modelAndFitIllustration}, top-right panel). Other link functions (depicted in Figure ref{fig.logisticRidge_modelAndFitIllustration}, bottom-left panel) are common, e.g. the *probit*: $p_i = \Phi_{0,1}(\mathbf{X}_i \beta)$; the *cloglog*: $p_i = \frac{1}{\pi} \arctan(\mathbf{X}_i \beta) + \frac{1}{2}$; the *Cauchit*: $p_i = \exp[ - \exp(\mathbf{X}_i \beta)]$. All these link function are invertible. Irrespective of the choice of the link function, the binary data are thus modelled as $Y_i \sim \mathcal{B}[g^{-1}(\mathbf{X}_i; \beta), 1]$. That is, as a single draw from the Binomial distribution with success probability $g^{-1}(\mathbf{X}_i; \beta)$. - - -Let us now estimate the parameter of the logistic regression model by means of the maximum likelihood method. The likelihood of the experiment is then: -\begin{align*} -L(\mathbf{Y} \, | \, \mathbf{X}; \beta) & = \prod_{i=1}^n \big[ P(Y_i = 1 \, | \, \mathbf{X}_i) \big]^{Y_i} \big[ P(Y_i = 0 \, | \, \mathbf{X}_i) \big]^{1-Y_i}. -\end{align*} -After taking the logarithm and some ready algebra, the log-likelihood is found to be: -\begin{align*} -\mathcal{L}(\mathbf{Y} \, | \, \mathbf{X}; \beta) & = \sum_{i=1}^n \big\{ Y_i \mathbf{X}_i \beta - \log [ 1 + \exp(\mathbf{X}_i \beta) ] \big\}. -\end{align*} -Differentiate the log-likelihood with respect to $\beta$, equate it zero, and obtain the estimating equation for $\beta$: - -!bt - -!bt -\begin{align} label{form:logisticRidge_estimatingEquationOfBeta} -\frac{\partial \mathcal{L}}{\partial \beta } & = \sum_{i=1}^n \Big[ Y_i - \frac{\exp(\mathbf{X}_i \beta)}{ 1 + \exp(\mathbf{X}_i \beta)} \Big] \mathbf{X}_i^{\top} \, \, \, = \, \, \, \mathbf{0}_p. -\end{align} -!et -!et -The ML estimate of $\beta$ strikes a (weighted by the $\mathbf{X}_i$) balance between observation and model. Put differently (and illustrated in the bottom-right panel of Figure ref{fig.logisticRidge_modelAndFitIllustration}), a curve is fit through data by minimizing the distance between them: at the ML estimate of $\beta$ a weighted average of their deviations is zero. - -The maximum likelihood estimate of $\beta$ is evaluated by solving Equation (ref{form:logisticRidge_estimatingEquationOfBeta}) with respect to $\beta$ by means of the Newton-Raphson algorithm. The Newton-Raphson algorithm iteratively finds the zeros of a smooth enough function $f(\cdot)$. Let $x_0$ denote an initial guess of the zero. Then, approximate $f(\cdot)$ around $x_0$ by means of a first order Taylor series: $f(x) \approx x_0 + (x - x_0) \, (d f / d x) |_{x=x_0}$. Solve this for $x$ and obtain: $x = x_0 - [ (d f / d x) |_{x=x_0} ]^{-1} f(x_0)$. Let $x_1$ be the solution for $x$, use this as the new guess and repeat the above until convergence. When the function $f(\cdot)$ has multiple arguments, is vector-valued and denoted by $\vec{\mathbf{f}}$, and the Taylor approximation becomes: $\vec{\mathbf{f}}(\mathbf{x}) \approx \mathbf{x}_0 + J \vec{\mathbf{f}} \big|_{\mathbf{x}=\mathbf{x}_0} (\mathbf{x} - \mathbf{x}_0)$ with -\begin{align*} -J \vec{\mathbf{f}} = \left( -\begin{array}{llll} -\frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \ldots & \frac{\partial f_1}{\partial x_p} -\\ -\frac{\partial f_1}{\partial x_1} & \frac{\partial f_2}{\partial x_2} & \ldots & \frac{\partial f_2}{\partial x_p} -\\ -\vdots & \vdots & \ddots & \vdots -\\ -\frac{\partial f_q}{\partial x_1} & \frac{\partial f_q}{\partial x_2} & \ldots & \frac{\partial f_q}{\partial x_p} -\end{array} -\right), -\end{align*} -the Jacobi matrix. An update of $x_0$ is now readily constructed by solving (the approximation for) $\vec{\mathbf{f}}(\mathbf{x}) = \mathbf{0}$ for $\mathbf{x}$. - -When applied here to the maximum likelihood estimation of the regression parameter $\beta$ of the logistic regression model, the Newton-Raphson update is: -\begin{align*} -\hat{\beta}^{\mbox{{\scriptsize new}}} & = \hat{\beta}^{\mbox{{\scriptsize old}}} - \Big( \frac{\partial^2 \mathcal{L}}{\partial \beta \partial \beta^{\top}} \Big)^{-1} \Big|_{\beta = \hat{\beta}^{\mbox{{\tiny old}}} } \, \, \frac{\partial \mathcal{L}}{\partial \beta } \Big|_{\beta = \hat{\beta}^{\mbox{{\tiny old}}} } -\end{align*} -where the Hessian of the log-likelihood equals: -\begin{align*} -\frac{\partial^2 \mathcal{L}}{\partial \beta \partial \beta^{\top}} & = - \sum_{i=1}^n \frac{\exp(\mathbf{X}_i \beta)}{ [1 + \exp(\mathbf{X}_i \beta)]^2} \mathbf{X}_i^{\top} \mathbf{X}_i. -\end{align*} -Iterative application of this updating formula converges to the ML estimate of $\beta$. - -The Newton-Raphson algorithm is often reformulated as an iteratively re-weighted least squares algorithm. Hereto, first write the gradient and Hessian in matrix notation: -\begin{align*} -\frac{\partial \mathcal{L}}{\partial \beta } \, \, \, = \, \, \, \mathbf{X}^{\top} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta)] -& \mbox{ and } & -\frac{\partial^2 \mathcal{L}}{\partial \beta \partial \beta^{\top}} \, \, \, = \, \, \, - \mathbf{X}^{\top} \mathbf{W} \mathbf{X}, -\end{align*} -where $\vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta) = [g^{-1}( \mathbf{X}_{1, \ast}; \beta), \ldots, g^{-1}( \mathbf{X}_{n, \ast}; \beta)]^{\top}$ with $g^{-1}(\cdot; \cdot) = \exp(\cdot; \cdot) / [1 + \exp(\cdot; \cdot)]$ and $\mathbf{W}$ diagonal with $(\mathbf{W})_{ii} = \exp(\mathbf{X}_i \hat{\beta}^{\mbox{{\scriptsize old}}} ) [ 1 + \exp(\mathbf{X}_i \hat{\beta}^{\mbox{{\scriptsize old}}} ) ]^{-2}$. The updating formula of the estimate then becomes: -\begin{align*} -\hat{\beta}^{\mbox{{\scriptsize new}}} & = \hat{\beta}^{\mbox{{\scriptsize old}}} + (\mathbf{X}^{\top} \mathbf{W} \mathbf{X})^{-1} \mathbf{X}^{\top} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] -\\ -& = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{W} \{ \mathbf{X} \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] \} -\\ -& = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{Z}, -\end{align*} -where $\mathbf{Z} = \{ \mathbf{X} \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] \}$. The Newton-Raphson update is thus the solution to the following weighted least squares problem: -\begin{align*} -\hat{\beta}^{\mbox{{\scriptsize new}}} & = \arg \min_{\beta} (\mathbf{Z} - \mathbf{X} \beta)^{\top} \mathbf{W} (\mathbf{Z} - \mathbf{X} \beta). -\end{align*} -Effectively, at each iteration the *adjusted response* $\mathbf{Z}$ is regressed on the covariates that comprise $\mathbf{X}$. For more on logistic regression confer the monograph of cite{Hosm2013}. - - -======= Ridge estimation ======= - -High-dimensionally, the linear predictor $\mathbf{X} \beta$ may be uniquely defined, but the maximum likelihood estimate of the logistic regression parameter is not. Assume $p > n$ and an estimate $\hat{\beta}$ available. Due to the high-dimensionality, the null space of $\mathbf{X}$ is non-trivial. Hence, let $\ggamma \in \mbox{null}(\mbox{span}(\mathbf{X}))$. Then: $\mathbf{X} \hat{\beta} = \mathbf{X} \hat{\beta} + \mathbf{X} \ggamma = \mathbf{X} (\hat{\beta} + \ggamma)$. As the null space is a $p-n$-dimensional subspace, $\ggamma$ need not equal zero. Hence, an infinite number of estimates of the logistic regression parameter exists that yield the same log-likelihood. Augmentation of the loss function with a ridge penalty resolves the matter, as their sum is strictly concave in $\beta$ (not convex as a maximum rather than a minimum is sought here) and thereby has a unique maximum. - -# original latex figure with scale=0.40, angle=0 - -FIGURE: [logisticPenLL2ridgePenalty.eps, width=400 frac=1.0] Top row, left panel: contour plot of the penalized log-likelihood of a logistic regression model with the ridge constraint (red line). Top row, right panel: the regularization paths of the ridge estimator of the logistic regression parameter. Bottom row, left panel: variance of the ridge estimator of the logistic regression parameter against the logarithm of the penalty parameter. Bottom panel, right panel: the predicted success probability versus the linear predictor for various choices of the penalty parameter. } label{fig.logisticRidge_effectOfPenalization -\mbox{ } - - -Ridge maximum likelihood estimates of the logistic model parameters are found by the maximization of the ridge penalized loglikelihood (cf. \citealt{Scha1984,LeCe1992}): -\begin{align*} -\mathcal{L}^{\mbox{{\tiny pen}}}(\mathbf{Y}, \mathbf{X}; \beta, \lambda) & = \mathcal{L} (\mathbf{Y}, \mathbf{X}; \beta) - \tfrac{1}{2} \lambda \| \beta \|_2^2 -\\ -& = \sum_{i=1}^n \big\{ Y_i \mathbf{X}_i \beta - \log [ 1 + \exp(\mathbf{X}_i \beta) ] \big\} - \tfrac{1}{2} \lambda \beta^{\top} \beta, -\end{align*} -where the second summand is the ridge penalty (the sum of the square of the elements of $\beta$) with $\lambda$ the penalty parameter. Note that as in Section ref{sect.constrainedEstimation} maximization of this penalized loss function can be reformulated as a constrained estimation problem. This is illustrated by the top left panel of Figure ref{fig.logisticRidge_effectOfPenalization}, which depicts the contours (black lines) of the log-likelihood and the spherical domain of the parameter (red line). The optimization of the above loss function proceeds, due to the differentiability of the penalty, fully analogous to the unpenalized case and uses the Newton-Raphson algorithm for solving the (penalized) estimating equation. Hence, the unpenalized ML estimation procedure is modified straightforwardly by replacing gradient and Hessian by their `penalized' counterparts: -\begin{align*} -\frac{\partial \mathcal{L}^{\mbox{{\tiny pen}}}}{\partial \beta } \, \, \, = \, \, \, \frac{\partial \mathcal{L}}{\partial \beta } - \lambda \beta & \mbox{ and } & \frac{\partial^2 \mathcal{L}^{\mbox{{\tiny pen}}}}{\partial \beta \partial \beta^{\top}} \, \, \, = \, \, \, \frac{\partial^2 \mathcal{L}}{\partial \beta \partial \beta^{\top}} - \lambda \mathbf{I}_{pp}. -\end{align*} -With these at hand, the Newton-Raphson algorithm is (again) reformulated as an iteratively re-weighted least squares algorithm with the updating step changes accordingly to: -\begin{align*} -\hat{\beta}^{\mbox{{\scriptsize new}}} & = \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{V}^{-1} \{ \mathbf{X}^{\top} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}}) ] - \lambda \beta^{\mbox{{\scriptsize old}}} \} -\\ -& = \mathbf{V}^{-1} \mathbf{V} \hat{\beta}^{\mbox{{\scriptsize old}}} - \lambda \mathbf{V}^{-1} \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{V}^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] -\\ -& = \mathbf{V}^{-1} \mathbf{X}^{\top} \mathbf{W} \{ \mathbf{X} \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbf{Y} - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] \} -\\ -& = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{Z}, -\end{align*} -where $\mathbf{V} = \mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp}$ and $\mathbf{W}$ and $\mathbf{Z}$ as before. Hence, use this to update the estimate of $\beta$ until convergence, which yields the desired ridge ML estimate. - -Obviously, the ridge estimate of the logistic regression parameter tends to zero as $\lambda \rightarrow \infty$. Now consider a linear predictor with an intercept that is left unpenalized. When $\lambda$ tends to infinity, all regression coefficients but the intercept vanish. The intercept is left to model the success probability. Hence, in this case $\lim_{\lambda \rightarrow \infty} \hat{\beta}_0 (\lambda) = \log [ \tfrac{1}{n} \sum_{i=1}^n Y_i / \tfrac{1}{n} \sum_{i=1}^n (1-Y_i)]$. - - -# original latex figure with scale=0.40, angle=0 - -FIGURE: [logisticRidge_effectOnPrediction_lambda0.eps, width=400 frac=1.0] The realized design as scatter plot ($X_1$ vs $X_2$ overlayed by the success (\textcolor{red}{RED}) and failure regions (\textcolor{green}{GREEN}) for various choices of the penalty parameter: $\lambda = 0$ (top row, left panel), $\lambda = 10$ (top row, right panel) $\lambda = 40$ (bottom row, left panel), $\lambda = 100$ (bottom row, right panel).} label{fig.logisticRidge_effectOnPrediction - - - -The effect of the ridge penalty on parameter estimates propagates to the predictor $\hat{p}_i$. The linear predictor of the linear regression model involving the ridge estimator $\mathbf{X}_i \hat{\beta}(\lambda)$ shrinks towards a common value for each $i$, leading to a scale difference between observation and predictor (as seen before in Section ref{sect.ridgeRegressionDataIllustration}). This behaviour transfers to the ridge logistic regression predictor, as is illustrated on simulated data. The dimension and sample size of these data are $p=2$ and $n=200$, respectively. The covariate data are drawn from the standard normal, while that of the response is sampled from a Bernoulli distribution with success probability $P(Y_i=1) = \exp(2 X_{i,1} - 2 X_{i,2}) / [ 1 + \exp(2 X_{i,1} - 2 X_{i,2})]$. The logistic regression model is estimated from these data by means of ridge penalized likelihood maximization with various choices of the penalty parameter. The bottom right plot in Figure ref{fig.logisticRidge_effectOfPenalization} shows the predicted success probability versus the linear predictor for various choices of the penalty parameter. Larger values of the penalty parameter $\lambda$ flatten the slope of this curve. Consequently, for larger $\lambda$ more excessive values of the covariates are needed to achieve the same predicted success probability as those obtained with smaller $\lambda$ at more moderate covariate values. The implications for the resulting classification may become clearer when studying the effect of the penalty parameter on the `failure' and `success regions' respectively defined by: -\\ -\indent $\{(x_1, x_2) : P({\color{green}{\mathbf{Y=0}}} \, | \, X_1=x_1, X_2=x_2, \hat{\beta}(\lambda)) > 0.75 \}$, -\\ -\indent $\{(x_1, x_2) : P({\color{red}{\mathbf{Y=1}}} \, | \, X_1=x_1, X_2=x_2, \hat{\beta}(\lambda)) > 0.75 \}$. -\\ -This separates the design space in a light red (`failure') and light green (`success') domain. The white bar between them is the domain where samples cannot be classified with high enough certainty. As $\lambda$ grows, so does the white area that separates the failure and success regions. Hence, as stronger penalization shrinks the logistic regression parameter estimate towards zero, it produces a predictor that is less outspoken in its class assignments. - - - - -======= Moments ======= - -The $1^{\mbox{{\tiny st}}}$ and $2^{\mbox{{\tiny nd}}}$ order moment of the ridge ML parameter of the logistic model may be approximated by the final update of the Newton-Raphson estimate. Assume the one-to-last update $\hat{\beta}^{\mbox{{\scriptsize old}}}$ to be non-random and proceed as for the ridge estimator of the linear regression model parameter to arrive at: -# \begin{align*} -# & & \hat{\beta}^{\mbox{{\scriptsize new}}} = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + 2 \lambda \mathbf{I}_{p \times p} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbf{z} -# \end{align*} -\begin{align*} -\mathbb{E} \big( \hat{\beta}^{\mbox{{\scriptsize new}}} \big) & = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \mathbb{E}( \mathbf{Z}), -\\ -\mbox{Var} \big( \hat{\beta}^{\mbox{{\scriptsize new}}} \big) & = [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1} \mathbf{X}^{\top} \mathbf{W} \big[ \mbox{Var} ( \mathbf{Z} ) \big] \mathbf{W} \mathbf{X} [\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp} ]^{-1}, -\end{align*} -with -\begin{align*} -\mathbb{E}(\mathbf{Z}) & = \{ \mathbf{X} \hat{\beta}^{\mbox{{\scriptsize old}}} + \mathbf{W}^{-1} [\mathbb{E}(\mathbf{Y}) - \vec{\mathbf{g}}^{-1}( \mathbf{X}; \beta^{\mbox{{\scriptsize old}}})] \}, -\\ -\mbox{Var}(\mathbf{Z}) & = \mathbf{W}^{-1} \mbox{Var}(\mathbf{Y}) \mathbf{W}^{-1} = \mathbf{W}^{-1}, -\end{align*} -where the identity $\mbox{Var}(\mathbf{Y}) = \mathbf{W}$ follows from the variance of a Binomial distributed random variable. From these expressions similar properties as for the ridge ML estimate of the regression parameter of the linear model may be deduced. For instance, the ridge ML estimate of the logistic regression parameter converges to zero as the penalty parameter tends to infinity (confer the top right panel of Figure ref{fig.logisticRidge_effectOfPenalization}). Similarly, their variances vanish as $\lambda \rightarrow \infty$ (illustrated in the bottom left panel of Figure ref{fig.logisticRidge_effectOfPenalization}). - -======= The Bayesian connection ======= - -All penalized estimators can be formulated as Bayesian estimators, including the ridge logistic estimator. In particular, ridge estimators correspond to Bayesian estimators with a multivariate normal prior on the regression coefficients. Thus, assume $\beta \sim \mathcal{N}(\mathbf{0}_p, \mathbf{\Delta}^{-1})$. The posterior distribution of $\beta$ then is: -\begin{align*} -f_{\beta}(\beta \, | \, \mathbf{Y}, \mathbf{X}) & \propto & \Big\{ \prod_{i=1}^n \big[ P(Y_i = 1 \, | \, \mathbf{X}_i) \big]^{Y_i} \big[ P(Y_i = 0 \, | \, \mathbf{X}_i) \big]^{1-Y_i} \Big\} \exp( - \tfrac{1}{2} \beta \mathbf{\Delta} \beta). -\end{align*} -This does not coincide with any standard distribution. But, under appropriate conditions, the posterior distribution is asymptotically normal. This invites a (multivariate) normal approximation to the posterior distribution above. The Laplace's method provides (cf. \citealp{Bish2006}). - -# original latex figure with scale=0.40, angle=0 - -FIGURE: [logisticRidge_laplace2posterior.eps, width=400 frac=1.0] Right panel: Laplace approximation to the posterior density of the Bayesian logistic regression parameter.} label{fig.logisticRidge_MSEandLaplace2posterior - -Laplace's method *i)* centers the normal approximation at the mode of the posterior, and *ii)* chooses the covariance to match the curvature of the posterior at the mode. The posterior mode is the location of the maximum of the posterior distribution. The location of this maximum coincides with that of the logarithm of the posterior. The latter is the log-likelihood augmented with a ridge penalty. Hence, the posterior mode, which is taken as the mean of the approximating Gaussian, coincides -with the ridge logistic estimator. For the covariance of the approximating Gaussian, the logarithm of the posterior is approximated by a second order Taylor series around the posterior mode and limited to second order terms: -\begin{align*} -\log[f_{\beta}(\beta \, | \, \mathbf{Y}, \mathbf{X})] & \propto & -\left. \log[f_{\beta}(\beta \, | \, \mathbf{Y}, \mathbf{X})] -\right|_{\beta = \hat{\beta}_{\mbox{{\tiny MAP}}}} -\\ -& & + \tfrac{1}{2} (\beta - \hat{\beta}_{\mbox{{\tiny MAP}}})^{\top} \left. \frac{\partial^2}{\partial \beta \partial \beta^{\top}} -\log[f_{\beta}(\beta \, | \, \mathbf{Y}, \mathbf{X})] - \right|_{\beta = \hat{\beta}_{\mbox{{\tiny MAP}}}} (\beta - \hat{\beta}_{\mbox{{\tiny MAP}}})^{\top}, -\end{align*} -in which the first order term cancels as the derivative of $f_{\beta}(\beta \, | \, \mathbf{Y}, \mathbf{X})$ with respect to $\beta$ vanishes at the posterior mode - its maximum. Take the exponential of this approximation and match its arguments to that of a multivariate Gaussian $\exp[-\tfrac{1}{2} (\beta - \mmu_{\beta})^{\top} \mathbf{\Sigma}_{\beta}^{-1} (\beta - \mmu_{\beta})]$. The covariance of the sought Gaussian approximation is thus the inverse of the Hessian of the negative penalized log-likelihood. Put together the posterior is approximated by: -\begin{align*} -\beta \, | \, \mathbf{Y}, \mathbf{X} \sim \mathcal{N} \Big( \hat{\beta}_{\mbox{{\tiny MAP}}}, \Big\{ \mathbf{\Delta} + \sum_{i=1}^n \frac{\exp(\mathbf{X}_i \beta)}{ [1+ \exp(\mathbf{X}_i \beta) ]^2 } \mathbf{X}_i \mathbf{X}_i^{\top} \Big\}^{-1} \Big). -\end{align*} -The Gaussian approximation is convenient but need not be good. Fortunately, the Bernstein-Von Mises Theorem \citep{VdVa2000} tells it is very accurate when the model is regular, the prior smooth, and the sample size sufficiently large. The quality of the approximation for an artificial example data set is shown in Figure ref{fig.logisticRidge_MSEandLaplace2posterior}. - -======= Penalty parameter selection ======= - -As before the penalty parameter may be chosen through $K$-fold cross-validation. For the $K=n$ case cite{Meij2013} describe a computationally efficient approximation of the leave-one-out cross-validated loglikelihood. It is based on the exact evaluation of the LOOCV loss, discussed in Section ref{subsect.crossvalidation}, that avoided resampling. The approach of cite{Meij2013} hinges upon the first-order Taylor expansion of the left-out penalized loglikelihood of the left-out estimate $\hat{\beta}_{-i} (\lambda)$ around $\hat{\beta} (\lambda)$, which yields an approximation of the former: -\begin{align*} -\hat{\beta}_{-i} (\lambda) & \approx \hat{\beta} (\lambda) - -\left( \left. \frac{\partial^2 \mathcal{L}_{-i}^{\mbox{{\tiny pen}}}}{\partial \beta \partial \beta^{\top}} \right|_{\beta = \hat{\beta}(\lambda)} \right)^{-1} \left. \frac{\partial \mathcal{L}_{-i}^{\mbox{{\tiny pen}}}}{\partial \beta } \right|_{\beta = \hat{\beta}(\lambda)} -\\ -& = \hat{\beta} (\lambda) + (\mathbf{X}_{- i, \ast}^{\top} \mathbf{W}_{-i, -i} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1} \{ \mathbf{X}_{- i, \ast}^{\top} [\mathbf{Y}_{-i} - \vec{\mathbf{g}}^{-1}(\mathbf{X}_{-i, \ast}; \hat{\beta}(\lambda))] - \lambda \hat{\beta}(\lambda) \}. -\end{align*} -This approximation involves the inverse of a $p \times p$ dimensional matrix, which amounts to the evaluation of $n$ such inverses for the LOOCV loss. As in Section ref{subsect.crossvalidation} this may be avoided. Rewrite both the gradient and the Hessian of the left-out loglikelihood in the approximation of the preceding display: -\begin{align*} -\mathbf{X}_{-i, \ast}^{\top} \{ \mathbf{Y}_{-i} - \vec{\mathbf{g}}^{-1}(\mathbf{X}_{-i, \ast}; \hat{\beta}(\lambda)]\} - \lambda \hat{\beta}(\lambda) -& = \mathbf{X}^{\top} \{ \mathbf{Y} - \vec{\mathbf{g}}^{-1}[\mathbf{X}; \hat{\beta}(\lambda)]\} - \lambda \hat{\beta}(\lambda) -- \mathbf{X}_{i, \ast}^{\top} \{Y_{i} - g^{-1}[\mathbf{X}_{i, \ast}; \hat{\beta}(\lambda)]\} -\\ -& = - \mathbf{X}_{i, \ast}^{\top} \{Y_{i} - g^{-1}[\mathbf{X}_{i, \ast}; \hat{\beta}(\lambda)]\} -\end{align*} -and -\begin{align*} -(\mathbf{X}_{- i, \ast}^{\top} \mathbf{W}_{-i, -i} \mathbf{X}_{- i, \ast} + \lambda \mathbf{I}_{pp})^{-1} & = (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} + \mathbf{W}_{ii} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} -\\ -& & \qquad \qquad \qquad \qquad \qquad \quad [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} \mathbf{X}_{i, \ast} (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1}, -\end{align*} -where the Woodbury identity has been used and now $\mathbf{H}_{ii}(\lambda) = \mathbf{W}_{ii} \mathbf{X}_{i, \ast}(\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top}$. Substitute both in the approximation of the left-out ridge logistic regression estimator and manipulate as in Section ref{subsect.crossvalidation} to obtain: -\begin{align*} -\hat{\beta}_{- i}(\lambda) & \approx \hat{\beta}(\lambda) - (\mathbf{X}^{\top} \mathbf{W} \mathbf{X} + \lambda \mathbf{I}_{pp})^{-1} \mathbf{X}_{i, \ast}^{\top} [ 1 - \mathbf{H}_{ii}(\lambda)]^{-1} [ Y_i - g^{-1}(\mathbf{X}_{i, \ast}; \hat{\beta}(\lambda)) ]. -\end{align*} -Hence, the leave-one-out cross-validated loglikelihood $\sum_{i=1}^n \mathcal{L} [Y_i \, | \, \mathbf{X}_{i, \ast}, \hat{\beta}_{-i}(\lambda)]$ can now be evaluated by means of a single inverse of a $p \times p$ dimensional matrix and some matrix multiplications. For the performance of this approximation in terms of accuracy and speed confer cite{Meij2013}. - - - - - - From 4291b46bcbc11e4fa29c31a278725a853770a0de Mon Sep 17 00:00:00 2001 From: mhjensen Date: Fri, 7 Sep 2018 05:40:44 +0200 Subject: [PATCH 10/12] update on html slides for regression --- .../Regression/html/._Regression-bs046.html | 333 +++++++++++++++++ .../Regression/html/._Regression-bs047.html | 339 ++++++++++++++++++ .../Regression/html/._Regression-bs048.html | 336 +++++++++++++++++ .../Regression/html/._Regression-bs049.html | 316 ++++++++++++++++ .../Regression/html/._Regression-bs050.html | 324 +++++++++++++++++ .../Regression/html/._Regression-bs051.html | 338 +++++++++++++++++ .../Regression/html/._Regression-bs052.html | 326 +++++++++++++++++ .../Regression/html/._Regression-bs053.html | 320 +++++++++++++++++ .../Regression/html/Regression-reveal.html | 8 +- .../Regression/html/Regression-solarized.html | 8 +- doc/pub/Regression/html/Regression.html | 8 +- doc/pub/Regression/ipynb/Regression.ipynb | 10 +- .../ipynb/ipynb-Regression-src.tar.gz | Bin 210 -> 211 bytes .../pdf/Regression-beamer-handouts2x3.pdf | Bin 411149 -> 411066 bytes doc/pub/Regression/pdf/Regression-beamer.pdf | Bin 366764 -> 366730 bytes doc/pub/Regression/pdf/Regression-minted.pdf | Bin 405955 -> 405967 bytes doc/src/Regression/Regression.do.txt | 10 +- 17 files changed, 2648 insertions(+), 28 deletions(-) create mode 100644 doc/pub/Regression/html/._Regression-bs046.html create mode 100644 doc/pub/Regression/html/._Regression-bs047.html create mode 100644 doc/pub/Regression/html/._Regression-bs048.html create mode 100644 doc/pub/Regression/html/._Regression-bs049.html create mode 100644 doc/pub/Regression/html/._Regression-bs050.html create mode 100644 doc/pub/Regression/html/._Regression-bs051.html create mode 100644 doc/pub/Regression/html/._Regression-bs052.html create mode 100644 doc/pub/Regression/html/._Regression-bs053.html diff --git a/doc/pub/Regression/html/._Regression-bs046.html b/doc/pub/Regression/html/._Regression-bs046.html new file mode 100644 index 000000000..e12f107dc --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs046.html @@ -0,0 +1,333 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + +

    +
    + +
    + +

     

     

     

    + + + + +

    Resampling approaches can be computationally expensive

    +
    +
    +

    +Resampling approaches can be computationally expensive, because they +involve fitting the same statistical method multiple times using +different subsets of the training data. However, due to recent +advances in computing power, the computational requirements of +resampling methods generally are not prohibitive. In this chapter, we +discuss two of the most commonly used resampling methods, +cross-validation and the bootstrap. Both methods are important tools +in the practical application of many statistical learning +procedures. For example, cross-validation can be used to estimate the +test error associated with a given statistical learning method in +order to evaluate its performance, or to select the appropriate level +of flexibility. The process of evaluating a model’s performance is +known as model assessment, whereas the process of selecting the proper +level of flexibility for a model is known as model selection. The +bootstrap is widely used. +

    +
    + + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs047.html b/doc/pub/Regression/html/._Regression-bs047.html new file mode 100644 index 000000000..81367fb0f --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs047.html @@ -0,0 +1,339 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +

     

     

     

    + + + + +

    Log-likelihood

    + +

    +A popular strategy is to choose a penalty parameter that yields a good +but parsimonious model. Information criteria measure the balance +between model fit and model complexity. One possibility is Aikaike's +information criterion (AIC). +The AIC measures model fit by the log-likelihood +and model complexity is measured by the number of parameters used by +the model. The number of model parameters in regular regression simply +corresponds to the number of covariates in the model. Or, by the +degrees of freedom consumed by the model, which is equivalent to the +trace of the hat matrix. For ridge regression it thus seems natural to +define model complexity analogously by the trace of the ridge hat +matrix. This yields the AIC for the linear regression model with ridge +estimates: + +$$ +\begin{align*} +\mbox{AIC}(\lambda) & = 2 \, p - 2 \log(\hat{L}) +\\ +& = 2 \, \mbox{tr} [\mathbf{H}(\lambda)] - 2 \log\{L[\hat{\beta}(\lambda), \hat{\sigma}^2(\lambda)]\} +\\ +& = 2 \, \sum_{j=1}^p \frac{d_{jj}^2}{d_{jj}^2 + \lambda} ++ 2 n \, \log[\sqrt{2 \, \pi} \, \hat{\sigma}(\lambda)] + \frac{1}{\hat{\sigma}^2(\lambda)} \sum_{i=1}^n [y_i - \mathbf{X}_{i, \ast} \, \hat{\beta}(\lambda)]^2. +\end{align*} +$$ + +The value of \( \lambda \) which minimizes \( \mbox{AIC}(\lambda) \) corresponds to the `optimal' balance of model complexity and overfitting. + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs048.html b/doc/pub/Regression/html/._Regression-bs048.html new file mode 100644 index 000000000..cacd2337a --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs048.html @@ -0,0 +1,336 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +

     

     

     

    + + + + +

    Cross-validation

    + +

    +Instead of choosing the penalty parameter to balance model fit with +model complexity, cross-validation requires it (i.e. the penalty +parameter) to yield a model with good prediction +performance. Commonly, this performance is evaluated on novel +data. Novel data need not be easy to come by and one has to make do +with the data at hand. The setting of `original' and novel data is +then mimicked by sample splitting: the data set is divided into two +(groups of samples). One of these two data sets, called the training +set, plays the role of `original' data on which the model is +built. The second of these data sets, called the test set, plays the +role of the `novel' data and is used to evaluate the prediction +performance (often operationalized as the log-likelihood or the +prediction error or its square or the R2 score) of the model built on the training data set. This +procedure (model building and prediction evaluation on training and +test set, respectively) is done for a collection of possible penalty +parameter choices. The penalty parameter that yields the model with +the best prediction performance is to be preferred. The thus obtained +performance evaluation depends on the actual split of the data set. To +remove this dependence the data set is split many times into a +training and test set. For each split the model parameters are +estimated for all choices of \( \lambda \) using the training data and +estimated parameters are evaluated on the corresponding test set. The +penalty parameter that on average over the test sets performs best (in +some sense) is then selected. + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs049.html b/doc/pub/Regression/html/._Regression-bs049.html new file mode 100644 index 000000000..1cde9b0fe --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs049.html @@ -0,0 +1,316 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +

     

     

     

    + + + + +

    Computationally expensive

    + +

    +The validation set approach is conceptually simple and is easy to implement. But it has two potential drawbacks: + +

      +
    • The validation estimate of the test error rate can be highly variable, depending on precisely which observations are included in the training set and which observations are included in the validation set.
    • +
    • In the validation approach, only a subset of the observations, those that are included in the training set rather than in the validation set are used to fit the model. Since statistical methods tend to perform worse when trained on fewer observations, this suggests that the validation set error rate may tend to overestimate the test error rate for the model fit on the entire data set.
    • +
    + +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs050.html b/doc/pub/Regression/html/._Regression-bs050.html new file mode 100644 index 000000000..150bbb796 --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs050.html @@ -0,0 +1,324 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +

     

     

     

    + + + + +

    Various steps in cross-validation

    + +

    +When the repetitive splitting of the data set is done randomly, +samples may accidently end up in a fast majority of the splits in +either training or test set. Such samples may have an unbalanced +influence on either model building or prediction evaluation. To avoid +this \( k \)-fold cross-validation structures the data splitting. The +samples are divided into \( k \) more or less equally sized exhaustive and +mutually exclusive subsets. In turn (at each split) one of these +subsets plays the role of the test set while the union of the +remaining subsets constitutes the training set. Such a splitting +warrants a balanced representation of each sample in both training and +test set over the splits. Still the division into the \( k \) subsets +involves a degree of randomness. This may be fully excluded when +choosing \( k=n \). This particular case is referred to as leave-one-out +cross-validation (LOOCV). + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs051.html b/doc/pub/Regression/html/._Regression-bs051.html new file mode 100644 index 000000000..7542dbe4a --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs051.html @@ -0,0 +1,338 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +

     

     

     

    + + + + +

    How to set up the cross-validation for Ridge and/or Lasso

    + +
      +
    1. Define a range of interest for the penalty parameter.
    2. +
    3. Divide the data set into training and test set comprising samples \( \{1, \ldots, n\} \setminus i \) and \( \{ i \} \), respectively.
    4. +
    5. Fit the linear regression model by means of ridge estimation for each \( \lambda \) in the grid using the training set, and the corresponding estimate of the error variance \( \hat{\sigma}_{-i}^2(\lambda) \), as
    6. +
    + +$$ +\begin{align*} +\hat{\beta}_{-i}(\lambda) & = ( \hat{X}_{-i, \ast}^{\top} +\hat{X}_{-i, \ast} + \lambda \hat{I}_{pp})^{-1} +\hat{X}_{-i, \ast}^{\top} \hat{y}_{-i} +\end{align*} +$$ + + +
      +
    1. Evaluate the prediction performance of these models on the test set by \( \log\{L[y_i, \hat{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\} \). Or, by the prediction error \( |y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)| \), the relative error, the error squared or the R2 score function.
    2. +
    3. Repeat steps 1) to 3) such that each sample plays the role of the test set once.
    4. +
    5. Average the prediction performances of the test sets at each grid point of the penalty bias/parameter by computing the cross-validated log-likelihood. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as
    6. +
    + +$$ +\begin{align*} +\frac{1}{n} \sum_{i = 1}^n \log\{L[y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}. +\end{align*} +$$ + + +
      +
    1. The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions.
    2. +
    + +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs052.html b/doc/pub/Regression/html/._Regression-bs052.html new file mode 100644 index 000000000..daaad1808 --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs052.html @@ -0,0 +1,326 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +

     

     

     

    + + + + +

    Predicted Residual Error Sum of Squares

    +
    +
    +

    +Another approach in the LOOCV scheme is to the use the so-called Predicted Residual Error Sum of Squares (PRESS). + +

    +We can define the optimal penalty parameter to minimize +$$ +\begin{align*} +\lambda_{\mbox{{\tiny opt}}} = \arg \min_{\lambda} \frac{1}{n} \sum_{i=1}^n [y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)]^2. +\end{align*} +$$ + +

    +The LOOCV prediction performance can be +expressed analytically in terms of the known quantities derived from +the design matrix and the parameters \( \beta \). +

    +
    + + +

    +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/._Regression-bs053.html b/doc/pub/Regression/html/._Regression-bs053.html new file mode 100644 index 000000000..ad25d53b8 --- /dev/null +++ b/doc/pub/Regression/html/._Regression-bs053.html @@ -0,0 +1,320 @@ + + + + + + + +Data Analysis and Machine Learning: Linear Regression and more Advanced Regression Analysis + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +

     

     

     

    + + + + +

    Bootstrap

    +
    +
    +

    +Bootstrapping is a nonparametric approach to statistical inference +that substitutes computation for more traditional distributional +assumptions and asymptotic results. Bootstrapping offers a number of +advantages: + +

      +
    1. The bootstrap is quite general, although there are some cases in which it fails.
    2. +
    3. Because it does not require distributional assumptions (such as normally distributed errors), the bootstrap can provide more accurate inferences when the data are not well behaved or when the sample size is small.
    4. +
    5. It is possible to apply the bootstrap to statistics with sampling distributions that are difficult to derive, even asymptotically.
    6. +
    7. It is relatively simple to apply the bootstrap to complex data-collection plans (such as stratified and clustered samples).
    8. +
    +
    +
    + + +

    + +

    + + +
    + + + + + + + +
    + +
    + + + + + + diff --git a/doc/pub/Regression/html/Regression-reveal.html b/doc/pub/Regression/html/Regression-reveal.html index ee2d9bcc5..63a356a89 100644 --- a/doc/pub/Regression/html/Regression-reveal.html +++ b/doc/pub/Regression/html/Regression-reveal.html @@ -1907,7 +1907,7 @@ cross-validation (LOOCV).

    1. Define a range of interest for the penalty parameter.
    2. Divide the data set into training and test set comprising samples \( \{1, \ldots, n\} \setminus i \) and \( \{ i \} \), respectively.
    3. -

    4. Fit the linear regression model by means of ridge estimation for each \( \lambda \) in the grid using the training set as
    5. +

    6. Fit the linear regression model by means of ridge estimation for each \( \lambda \) in the grid using the training set, and the corresponding estimate of the error variance \( \hat{\sigma}_{-i}^2(\lambda) \), as

     
    $$ @@ -1919,22 +1919,20 @@ $$ $$

     
    -and the corresponding estimate of the error variance \( \hat{\sigma}_{-i}^2(\lambda) \).

    1. Evaluate the prediction performance of these models on the test set by \( \log\{L[y_i, \hat{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\} \). Or, by the prediction error \( |y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)| \), the relative error, the error squared or the R2 score function.
    2. Repeat steps 1) to 3) such that each sample plays the role of the test set once.
    3. -

    4. Average the prediction performances of the test sets at each grid point of the penalty bias/parameter
    5. +

    6. Average the prediction performances of the test sets at each grid point of the penalty bias/parameter by computing the cross-validated log-likelihood. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as

     
    $$ \begin{align*} -\frac{1}{n} \sum_{i = 1}^n \log\{L[Y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}. +\frac{1}{n} \sum_{i = 1}^n \log\{L[y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}. \end{align*} $$

     
    -The quantity above is called the cross-validated log-likelihood. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data.

    1. The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions.
    2. diff --git a/doc/pub/Regression/html/Regression-solarized.html b/doc/pub/Regression/html/Regression-solarized.html index afaf59f99..88feb089c 100644 --- a/doc/pub/Regression/html/Regression-solarized.html +++ b/doc/pub/Regression/html/Regression-solarized.html @@ -1866,7 +1866,7 @@ cross-validation (LOOCV).
      1. Define a range of interest for the penalty parameter.
      2. Divide the data set into training and test set comprising samples \( \{1, \ldots, n\} \setminus i \) and \( \{ i \} \), respectively.
      3. -
      4. Fit the linear regression model by means of ridge estimation for each \( \lambda \) in the grid using the training set as
      5. +
      6. Fit the linear regression model by means of ridge estimation for each \( \lambda \) in the grid using the training set, and the corresponding estimate of the error variance \( \hat{\sigma}_{-i}^2(\lambda) \), as
      $$ @@ -1877,21 +1877,19 @@ $$ \end{align*} $$ -and the corresponding estimate of the error variance \( \hat{\sigma}_{-i}^2(\lambda) \).
      1. Evaluate the prediction performance of these models on the test set by \( \log\{L[y_i, \hat{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\} \). Or, by the prediction error \( |y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)| \), the relative error, the error squared or the R2 score function.
      2. Repeat steps 1) to 3) such that each sample plays the role of the test set once.
      3. -
      4. Average the prediction performances of the test sets at each grid point of the penalty bias/parameter
      5. +
      6. Average the prediction performances of the test sets at each grid point of the penalty bias/parameter by computing the cross-validated log-likelihood. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as
      $$ \begin{align*} -\frac{1}{n} \sum_{i = 1}^n \log\{L[Y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}. +\frac{1}{n} \sum_{i = 1}^n \log\{L[y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}. \end{align*} $$ -The quantity above is called the cross-validated log-likelihood. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data.
      1. The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions.
      2. diff --git a/doc/pub/Regression/html/Regression.html b/doc/pub/Regression/html/Regression.html index 366f94425..a53c0e587 100644 --- a/doc/pub/Regression/html/Regression.html +++ b/doc/pub/Regression/html/Regression.html @@ -1871,7 +1871,7 @@ cross-validation (LOOCV).
        1. Define a range of interest for the penalty parameter.
        2. Divide the data set into training and test set comprising samples \( \{1, \ldots, n\} \setminus i \) and \( \{ i \} \), respectively.
        3. -
        4. Fit the linear regression model by means of ridge estimation for each \( \lambda \) in the grid using the training set as
        5. +
        6. Fit the linear regression model by means of ridge estimation for each \( \lambda \) in the grid using the training set, and the corresponding estimate of the error variance \( \hat{\sigma}_{-i}^2(\lambda) \), as
        $$ @@ -1882,21 +1882,19 @@ $$ \end{align*} $$ -and the corresponding estimate of the error variance \( \hat{\sigma}_{-i}^2(\lambda) \).
        1. Evaluate the prediction performance of these models on the test set by \( \log\{L[y_i, \hat{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\} \). Or, by the prediction error \( |y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)| \), the relative error, the error squared or the R2 score function.
        2. Repeat steps 1) to 3) such that each sample plays the role of the test set once.
        3. -
        4. Average the prediction performances of the test sets at each grid point of the penalty bias/parameter
        5. +
        6. Average the prediction performances of the test sets at each grid point of the penalty bias/parameter by computing the cross-validated log-likelihood. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as
        $$ \begin{align*} -\frac{1}{n} \sum_{i = 1}^n \log\{L[Y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}. +\frac{1}{n} \sum_{i = 1}^n \log\{L[y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}. \end{align*} $$ -The quantity above is called the cross-validated log-likelihood. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data.
        1. The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions.
        2. diff --git a/doc/pub/Regression/ipynb/Regression.ipynb b/doc/pub/Regression/ipynb/Regression.ipynb index e36087719..09033bf6f 100644 --- a/doc/pub/Regression/ipynb/Regression.ipynb +++ b/doc/pub/Regression/ipynb/Regression.ipynb @@ -2271,7 +2271,7 @@ "\n", "2. Divide the data set into training and test set comprising samples $\\{1, \\ldots, n\\} \\setminus i$ and $\\{ i \\}$, respectively.\n", "\n", - "3. Fit the linear regression model by means of ridge estimation for each $\\lambda$ in the grid using the training set as" + "3. Fit the linear regression model by means of ridge estimation for each $\\lambda$ in the grid using the training set, and the corresponding estimate of the error variance $\\hat{\\sigma}_{-i}^2(\\lambda)$, as" ] }, { @@ -2291,13 +2291,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "and the corresponding estimate of the error variance $\\hat{\\sigma}_{-i}^2(\\lambda)$.\n", - "\n", "1. Evaluate the prediction performance of these models on the test set by $\\log\\{L[y_i, \\hat{X}_{i, \\ast}; \\hat{\\beta}_{-i}(\\lambda), \\hat{\\sigma}_{-i}^2(\\lambda)]\\}$. Or, by the prediction error $|y_i - \\hat{X}_{i, \\ast} \\hat{\\beta}_{-i}(\\lambda)|$, the relative error, the error squared or the R2 score function.\n", "\n", "2. Repeat steps 1) to 3) such that each sample plays the role of the test set once.\n", "\n", - "3. Average the prediction performances of the test sets at each grid point of the penalty bias/parameter" + "3. Average the prediction performances of the test sets at each grid point of the penalty bias/parameter by computing the *cross-validated log-likelihood*. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as" ] }, { @@ -2306,7 +2304,7 @@ "source": [ "$$\n", "\\begin{align*}\n", - "\\frac{1}{n} \\sum_{i = 1}^n \\log\\{L[Y_i, \\mathbf{X}_{i, \\ast}; \\hat{\\beta}_{-i}(\\lambda), \\hat{\\sigma}_{-i}^2(\\lambda)]\\}.\n", + "\\frac{1}{n} \\sum_{i = 1}^n \\log\\{L[y_i, \\mathbf{X}_{i, \\ast}; \\hat{\\beta}_{-i}(\\lambda), \\hat{\\sigma}_{-i}^2(\\lambda)]\\}.\n", "\\end{align*}\n", "$$" ] @@ -2315,8 +2313,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The quantity above is called the *cross-validated log-likelihood*. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data.\n", - "\n", "1. The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions.\n", "\n", "## Predicted Residual Error Sum of Squares\n", diff --git a/doc/pub/Regression/ipynb/ipynb-Regression-src.tar.gz b/doc/pub/Regression/ipynb/ipynb-Regression-src.tar.gz index 39e17ea5b7a69d4723e727ac0958db4b5e9f976c..c0e43e8017395b8a747bd43e4e15c180a6fcb7ef 100644 GIT binary patch literal 211 zcmb2|=3tQiJTaPq`R)0$Sxkl^ZHd?8j_zzyOkT8(dsjiAz(+PE;kiF1-%x2P{@%y+ zcGX=^&D!~Ak1NVQoOAV0?l-&jr?&FMxoMgjy1lcU+atfy?flP$a#w@0b9?4pbIT6= zYY@g9xIX&jX;tyrzd~>A<-XaPUtOEK`|rc~&ow{ItUt2rYoyrebz2NQI*#Th*_=4_ zcGBsa#{+&Ai<@0?ng0I#q&vrts;iroB+WiHeP43_;o`2{DgHa9{(W;~Kn5TD?=Y;( L>zvJ?!N33j*}P>4 literal 210 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 LJp`hC2~GbW;cYCE delta 4183 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 z zFxrG9w%1{qihmZnPiYzP)kK5q+8n{xgl+KK78}2-U@$yZrqGld!m#<=mV^)Cu&lB; zq>z5Q^z6C~*#j+K8xy41OOq9zRR6ibd6OYheX@^erKpFR=d)^AYY4-Nt2T9H*v;Q8 zHQ%~NHX}MGpG%@LW_E5x~jV_pCF1Fi2gtijd2bYgYd?L{F4PgAy$h-Dn39$Y@<%JpP8k2NiV5`a zu}i^uabDS~kr4Uz3j!=j5@P6pu*2~kyUp&+;PXFk(PK}`mLw_B`^$|@Y9=VXaI_Fy zE;FZVJcAUOQNUxu8+Z}7l=KS_KkNu^K#&U{<>XRA1!-oKu@tITEl~@@XiB9af4=m! zG)PYe!8aHCXW$}!sz@iHelC8h7)hfzvRgk`2g9%yuHBSYq78K#zQQ!F(NEx_NPG2B zS;2pHNE~!8uZ{GL7`ka2Z(VhF@Cd3(x@aD1G|Gt91fes|u|INf0bC)4)WvaQ0wCNu zItwG41nUNH0825Ih2>Vfwa!Yor`c-$Ss3QG)$+5Gi77!{Y_7y;7p+At*K=9*8nl@tD+wpE{TF2ux@qG6Ijon>Crng4mj+5 x$5bbQIY+f{Fn4uxu`sp&pE;V@pt`!5y103{SXiR6b8&KjK&Z5|lFCx3{|ATU=OO?A delta 7700 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 LL`^NFB8~Kah~2a! diff --git a/doc/pub/Regression/pdf/Regression-minted.pdf b/doc/pub/Regression/pdf/Regression-minted.pdf index 3ec432215101e30048038cc065f8d5cce6cef5ea..25211c9378d6c274be4463f534ca705a533c2f67 100644 GIT binary patch delta 6385 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 delta 6356 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 Date: Fri, 7 Sep 2018 05:45:51 +0200 Subject: [PATCH 11/12] update on html slides for regression --- .../Regression/html/._Regression-bs051.html | 14 +++++++------- .../Regression/html/Regression-reveal.html | 14 +++++++------- .../Regression/html/Regression-solarized.html | 14 +++++++------- doc/pub/Regression/html/Regression.html | 14 +++++++------- doc/pub/Regression/ipynb/Regression.ipynb | 14 +++++++------- .../ipynb/ipynb-Regression-src.tar.gz | Bin 211 -> 210 bytes .../pdf/Regression-beamer-handouts2x3.pdf | Bin 411066 -> 410824 bytes doc/pub/Regression/pdf/Regression-beamer.pdf | Bin 366730 -> 366730 bytes doc/pub/Regression/pdf/Regression-minted.pdf | Bin 405967 -> 405910 bytes doc/src/Regression/Regression.do.txt | 14 +++++++------- 10 files changed, 42 insertions(+), 42 deletions(-) diff --git a/doc/pub/Regression/html/._Regression-bs051.html b/doc/pub/Regression/html/._Regression-bs051.html index 7542dbe4a..26b39e68a 100644 --- a/doc/pub/Regression/html/._Regression-bs051.html +++ b/doc/pub/Regression/html/._Regression-bs051.html @@ -262,11 +262,11 @@ MathJax.Hub.Config({

          How to set up the cross-validation for Ridge and/or Lasso

          -
            +
            • Define a range of interest for the penalty parameter.
            • Divide the data set into training and test set comprising samples \( \{1, \ldots, n\} \setminus i \) and \( \{ i \} \), respectively.
            • Fit the linear regression model by means of ridge estimation for each \( \lambda \) in the grid using the training set, and the corresponding estimate of the error variance \( \hat{\sigma}_{-i}^2(\lambda) \), as
            • -
          + $$ \begin{align*} @@ -277,11 +277,11 @@ $$ $$ -
            +
            • Evaluate the prediction performance of these models on the test set by \( \log\{L[y_i, \hat{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\} \). Or, by the prediction error \( |y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)| \), the relative error, the error squared or the R2 score function.
            • -
            • Repeat steps 1) to 3) such that each sample plays the role of the test set once.
            • +
            • Repeat the first three steps such that each sample plays the role of the test set once.
            • Average the prediction performances of the test sets at each grid point of the penalty bias/parameter by computing the cross-validated log-likelihood. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as
            • -
          + $$ \begin{align*} @@ -290,9 +290,9 @@ $$ $$ -
            +
            • The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions.
            • -
          +

          diff --git a/doc/pub/Regression/html/Regression-reveal.html b/doc/pub/Regression/html/Regression-reveal.html index 63a356a89..df03e6c5f 100644 --- a/doc/pub/Regression/html/Regression-reveal.html +++ b/doc/pub/Regression/html/Regression-reveal.html @@ -1904,11 +1904,11 @@ cross-validation (LOOCV).

          How to set up the cross-validation for Ridge and/or Lasso

          -
            +

            • Define a range of interest for the penalty parameter.
            • Divide the data set into training and test set comprising samples \( \{1, \ldots, n\} \setminus i \) and \( \{ i \} \), respectively.
            • Fit the linear regression model by means of ridge estimation for each \( \lambda \) in the grid using the training set, and the corresponding estimate of the error variance \( \hat{\sigma}_{-i}^2(\lambda) \), as
            • -
          +

           
          $$ \begin{align*} @@ -1920,11 +1920,11 @@ $$

           
          -

            +

            • Evaluate the prediction performance of these models on the test set by \( \log\{L[y_i, \hat{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\} \). Or, by the prediction error \( |y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)| \), the relative error, the error squared or the R2 score function.
            • -

            • Repeat steps 1) to 3) such that each sample plays the role of the test set once.
            • +

            • Repeat the first three steps such that each sample plays the role of the test set once.
            • Average the prediction performances of the test sets at each grid point of the penalty bias/parameter by computing the cross-validated log-likelihood. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as
            • -
          +

           
          $$ \begin{align*} @@ -1934,9 +1934,9 @@ $$

           
          -

            +

            • The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions.
            • -
          +
          diff --git a/doc/pub/Regression/html/Regression-solarized.html b/doc/pub/Regression/html/Regression-solarized.html index 88feb089c..575b33a94 100644 --- a/doc/pub/Regression/html/Regression-solarized.html +++ b/doc/pub/Regression/html/Regression-solarized.html @@ -1863,11 +1863,11 @@ cross-validation (LOOCV).

          How to set up the cross-validation for Ridge and/or Lasso

          -
            +
            • Define a range of interest for the penalty parameter.
            • Divide the data set into training and test set comprising samples \( \{1, \ldots, n\} \setminus i \) and \( \{ i \} \), respectively.
            • Fit the linear regression model by means of ridge estimation for each \( \lambda \) in the grid using the training set, and the corresponding estimate of the error variance \( \hat{\sigma}_{-i}^2(\lambda) \), as
            • -
          + $$ \begin{align*} @@ -1878,11 +1878,11 @@ $$ $$ -
            +
            • Evaluate the prediction performance of these models on the test set by \( \log\{L[y_i, \hat{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\} \). Or, by the prediction error \( |y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)| \), the relative error, the error squared or the R2 score function.
            • -
            • Repeat steps 1) to 3) such that each sample plays the role of the test set once.
            • +
            • Repeat the first three steps such that each sample plays the role of the test set once.
            • Average the prediction performances of the test sets at each grid point of the penalty bias/parameter by computing the cross-validated log-likelihood. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as
            • -
          + $$ \begin{align*} @@ -1891,9 +1891,9 @@ $$ $$ -
            +
            • The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions.
            • -
          +









          diff --git a/doc/pub/Regression/html/Regression.html b/doc/pub/Regression/html/Regression.html index a53c0e587..a6ee19e22 100644 --- a/doc/pub/Regression/html/Regression.html +++ b/doc/pub/Regression/html/Regression.html @@ -1868,11 +1868,11 @@ cross-validation (LOOCV).

          How to set up the cross-validation for Ridge and/or Lasso

          -
            +
            • Define a range of interest for the penalty parameter.
            • Divide the data set into training and test set comprising samples \( \{1, \ldots, n\} \setminus i \) and \( \{ i \} \), respectively.
            • Fit the linear regression model by means of ridge estimation for each \( \lambda \) in the grid using the training set, and the corresponding estimate of the error variance \( \hat{\sigma}_{-i}^2(\lambda) \), as
            • -
          + $$ \begin{align*} @@ -1883,11 +1883,11 @@ $$ $$ -
            +
            • Evaluate the prediction performance of these models on the test set by \( \log\{L[y_i, \hat{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\} \). Or, by the prediction error \( |y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)| \), the relative error, the error squared or the R2 score function.
            • -
            • Repeat steps 1) to 3) such that each sample plays the role of the test set once.
            • +
            • Repeat the first three steps such that each sample plays the role of the test set once.
            • Average the prediction performances of the test sets at each grid point of the penalty bias/parameter by computing the cross-validated log-likelihood. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as
            • -
          + $$ \begin{align*} @@ -1896,9 +1896,9 @@ $$ $$ -
            +
            • The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions.
            • -
          +









          diff --git a/doc/pub/Regression/ipynb/Regression.ipynb b/doc/pub/Regression/ipynb/Regression.ipynb index 09033bf6f..f86beff59 100644 --- a/doc/pub/Regression/ipynb/Regression.ipynb +++ b/doc/pub/Regression/ipynb/Regression.ipynb @@ -2267,11 +2267,11 @@ "\n", "## How to set up the cross-validation for Ridge and/or Lasso\n", "\n", - "1. Define a range of interest for the penalty parameter.\n", + "* Define a range of interest for the penalty parameter.\n", "\n", - "2. Divide the data set into training and test set comprising samples $\\{1, \\ldots, n\\} \\setminus i$ and $\\{ i \\}$, respectively.\n", + "* Divide the data set into training and test set comprising samples $\\{1, \\ldots, n\\} \\setminus i$ and $\\{ i \\}$, respectively.\n", "\n", - "3. Fit the linear regression model by means of ridge estimation for each $\\lambda$ in the grid using the training set, and the corresponding estimate of the error variance $\\hat{\\sigma}_{-i}^2(\\lambda)$, as" + "* Fit the linear regression model by means of ridge estimation for each $\\lambda$ in the grid using the training set, and the corresponding estimate of the error variance $\\hat{\\sigma}_{-i}^2(\\lambda)$, as" ] }, { @@ -2291,11 +2291,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "1. Evaluate the prediction performance of these models on the test set by $\\log\\{L[y_i, \\hat{X}_{i, \\ast}; \\hat{\\beta}_{-i}(\\lambda), \\hat{\\sigma}_{-i}^2(\\lambda)]\\}$. Or, by the prediction error $|y_i - \\hat{X}_{i, \\ast} \\hat{\\beta}_{-i}(\\lambda)|$, the relative error, the error squared or the R2 score function.\n", + "* Evaluate the prediction performance of these models on the test set by $\\log\\{L[y_i, \\hat{X}_{i, \\ast}; \\hat{\\beta}_{-i}(\\lambda), \\hat{\\sigma}_{-i}^2(\\lambda)]\\}$. Or, by the prediction error $|y_i - \\hat{X}_{i, \\ast} \\hat{\\beta}_{-i}(\\lambda)|$, the relative error, the error squared or the R2 score function.\n", "\n", - "2. Repeat steps 1) to 3) such that each sample plays the role of the test set once.\n", + "* Repeat the first three steps such that each sample plays the role of the test set once.\n", "\n", - "3. Average the prediction performances of the test sets at each grid point of the penalty bias/parameter by computing the *cross-validated log-likelihood*. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as" + "* Average the prediction performances of the test sets at each grid point of the penalty bias/parameter by computing the *cross-validated log-likelihood*. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as" ] }, { @@ -2313,7 +2313,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "1. The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions.\n", + "* The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions.\n", "\n", "## Predicted Residual Error Sum of Squares\n", "Another approach in the LOOCV scheme is to the use the so-called Predicted Residual Error Sum of Squares (PRESS). \n", diff --git a/doc/pub/Regression/ipynb/ipynb-Regression-src.tar.gz b/doc/pub/Regression/ipynb/ipynb-Regression-src.tar.gz index c0e43e8017395b8a747bd43e4e15c180a6fcb7ef..0e95f5af2e78df29a7855f94bdf152a582fa3064 100644 GIT binary patch literal 210 zcmV;@04@I?iwFQx^pRTt1MSbvY63A7hGExU#kqnZlbPzepo=aFBHln`q7#3TF^S;Z zea8{nRlAc?`aYYFLq5Ve>*ed>eOcsNo;;0GYF5{B&-v_SOr;<5sMMvDRaMv3T$fsl z8i$Ff=dJYRnzD(*D(%7gWc|0jp|;!o@XzBE`OH6J)4C*Yt3J2Eix1guLpaLX?xRh~ z1z)(X_giU#P4{Ps_HuR6it)Xerg3@bnA5b2VIR#o71Q572mk;800000000000091p M4@u{R-vB580OmJqm;e9( literal 211 zcmb2|=3tQiJTaPq`R)0$Sxkl^ZHd?8j_zzyOkT8(dsjiAz(+PE;kiF1-%x2P{@%y+ zcGX=^&D!~Ak1NVQoOAV0?l-&jr?&FMxoMgjy1lcU+atfy?flP$a#w@0b9?4pbIT6= zYY@g9xIX&jX;tyrzd~>A<-XaPUtOEK`|rc~&ow{ItUt2rYoyrebz2NQI*#Th*_=4_ zcGBsa#{+&Ai<@0?ng0I#q&vrts;iroB+WiHeP43_;o`2{DgHa9{(W;~Kn5TD?=Y;( L>zvJ?!N33j*}P>4 diff --git a/doc/pub/Regression/pdf/Regression-beamer-handouts2x3.pdf b/doc/pub/Regression/pdf/Regression-beamer-handouts2x3.pdf index 38f2d7194d35b23c628a9d056172fe9d8aad0330..406466c7a3e31aad39ba8e4739c1e1e8894afd27 100644 GIT binary patch delta 8690 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%0Aon;tlY~GmchKL<90J4iqqGuRxApHc*kU_p$yDQ3 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 G_5T4rZW*Eg delta 8470 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 EDN4mf!vFvP diff --git a/doc/pub/Regression/pdf/Regression-minted.pdf b/doc/pub/Regression/pdf/Regression-minted.pdf index 25211c9378d6c274be4463f534ca705a533c2f67..84c286073f16565308b7e9eda9cf3a0c0fd434ec 100644 GIT binary patch delta 11787 zcmajEb8u!sx4s?Qwrx8TXOfxNwrwX*Y}?kvexfJF#F|WO+tzQ+d*1W?`_-ylweGIH zuU=KVtE=x`GkbXHdw30A?+`qkDauiFfJGhqgtd0`&z@d!QuF)C$SbvA#@P&c-w3P@ znwU1xWQge6jY>=1Z(})TZ)bv35lwUp298ahGQGhAas0Uwezg zDMzsusmUro()IN%Q(cSG#!~-;I%nxKH}k$2uHjd_RIKFMW?kugZ7m4`oV$i$0i-s7 z#^cqV0zfW(zGk(B_C>bGUV$Dkuh(ml$uY5Wm8l?f2UmS-=8((L@~SR?XxZ;JccF%= z%w)WgPKI8Rry|@*)dyt@M@@0F$mc#Dw0qr${?!qn>(tnI=4v$e<-R!LJS4Sg@K$8O zX-c!TsK0Ub9(hD6^KM`a^@zd+c!)jBv1!d=&)eDwsjB|V-7TkZVSb69qxx)l+YQ1h z`Dy|o@ z?D@&V;cCt|#shSbO=7LSsd>hH4p4teKl{~`sM`NyAT637^vKGVznQlU2zDyk^Q7xB zRf)MyX44p96@m;=5dheHrG72!TxF52Q{h>LE9tJ$@U1ob{|?VHCVNJS>%E*y#O*pP;g0cf z=j9X&~ zJ~tVx_@?y&*SB_>J6G>N=ij)x)L|F=N$e%yD5Lsin$+`jT3XRGyRbwTd;2 z;4JMM$W7CVE>N>2L$U_0TkTs9Rjp*M0guNS7m2 z*167MQL`C^AN4PO?PC|z89JX}v43Qy(c06mGz^^)j%V^lZc%I+jDC+CtvNL0N1Qbl z`N;mY%il865bC3LK{UYML153xW$yrXedmNv>U}|Q8_ei}*hiZJ)Ju$?@Fua(O_6R` z-E93}^~&u4Ix?2%yIDkP=$yk72&@WrMMLq^5Vx+*2YR)zAK)x)`XDwQ|j^EW{{y}eLE26;38AG((b6eq4qcRCEQAIlU$R{SWlkDEO1 z;vKFv)nffPQg)PIvT*So`8v7V(=i4qtDj&BsHX`gLR5dmg-xLLj-(oV=L(^zVgahu zw zSLdz#y^l>&;y~n%?pIA50pH#_@sNZP(isQRBxc=S84kENj zf)OPHCrD~*mba+rtLN7%t%T;5syGRN{=;==br&eOB_mPd`Dq>hOiM@1AdGp}aBPu$ zaQQq$n)l~%^HM$?Z02HW%5U*quRa^~5+%T^r<)Z6Oec1U{5v(oVl0Z+4J@N*qKj!5 z>aV8N=QrmRCF2w}JZ>b(w0QX%%rsiV95HzWf7Yc+-N#!++FEq2VcR7{j1lS8M$rjBT?9(kxT-Pl`FGJEJlCVdf`?Q zQPEljr!5S&L#tUiW_$PcbT=bLxDqzA@+TXyDW+bVmSMNIrrA#~tF$q(oC2Z~0*q4C z3kF~R8&9F57%MyC(I+DLb&z>H6B3 zu&HCyofSwzjKOH$N;0lgK^T>?&`gr_W`?omw9%Tbk5S_>Zm71I+wvIe_*GYso^Trb z{AIslf2dMYSU?kI%9e0L!_nxR{hZ4V^mFY?updNNizGx_HQnKRd8oAjq)A~C+jCEF z>P+1?2m}1`4LewfT5lAV!j8Be{_sZ-N%UT_mt`{CV}%x+I3GAa`T2B~jLt21?I=k0 zV9~n3%wZ}f)cYmWPD+@fI{Fu|^hx7Iazw%+d$^^FZT~GJf;HZ@(D!%vI|U$yK$vlA zx`qzZo$n7UQ}lzkAQ$ffm|EIxYr7dOq4A}jke_x zb0j3S?1B2a$Ol2g;3(XoGp5_S!xI^R*9gF0-vJ-}1a`;()8_hIDg-Z~dElK?tB$u8 zx%69nXpG?<+cWR5(kl`NIKJU!3@>ZS94wm{&E<%6aDjn-Pk_Dt%HHVC&)m5T)UTET zLew-o-S@WxX)#Zft_J6GW)jnZ=$E9XbyeEwoW&$H%#3rgd)dj!@i{ zBF?BR9Ny0$l+0$L3Opg-8i6No8S58WD19*ZKR@6HT*(!rG|cCK}oy{o9!6 z%3KeB?X8j{ydBu*$>uWtE*viDsS4O!bu93k1R6f5Rd?x|F7)M*;=9Oi)V`U~6e?Y> z%+EFQS$9Snyj$w7X1`;G+rxeJB+Q>@`_Nem+98-6c3iGLlzKLYBDseA+i>-l{6_ZM zwG{{@$s3;NTP60@s@55~GxzqJ1<-s8qXdms)&s<$4-%V@o$oozDG1PFP}smnY;a1e3}-}e22_4F1Xek72TM0AGEQzDj{lsB zFLd=C^?>O9OZDvu%m`Z(SEzk(XrrwQ6xNV}bh`urN(ZgA8tH1<)_H&}SBrMvj@2}O zP+Lmj@4@K!{w9VT@&qbP<9GxI-|d^-Zx^x1F3l$K zmlGw}wfzYLB85fCb7EPXKp=CtJ8h>49|`ecjMXyTHigSx>$04u*crgr_?k2JRGwO>dLeUn3|(%()Lm=;Y-Thw=$De*`|#g^|{ z?1+q*ra*!)wFmZ;EJ{?PI)nn|{op1TWG-h!yzY=p2Sx?ei1G{!WIkX3{A|IbVq$`L zLnCDwEQ+7#6Z}bXy}dHL(e-`sesOqZcyVuHF9jRPDEyz^xOsRuJteY8S`z621w22$ zKKnqsCOLBnxAXOqTy7GV!(OMUU*7i((EM$GAe4hvtv4K3x_gC|Fw8g+Z)S0I1~wfL zXy3tSxZ}fIpK)ZImV*Px*T(e}oTp&Rc{v)?X370;hUe}#7Kg|779Xy$ID5W~GJ6a` zAd-CIA_R}Dp05)ZDb;R0;(p1arRuvgUN|U@<&u-R)2ZPEP1&aR&PCDA9LbL+Er&=9E+6t2O~t$~V&mb1Ue!$Vtu|HlCgsVKg;k&{_9U*lC@XD26mEiWyU3Ru9(( zWh`NCwE!9pbSJ2^j#IMPi0(mnSY-6u8WxG42~whtw?A>uh0SiF?Er5))AhM@ZNwg? zYf3DFpsAf$0>`zIJVxK)xBUu?rSA8$Jr3im1+D70QVl@wzcawMc6)6%Hj!oMuAth| z5dCZLpxW~&y6NY}a7EiisibXH$gWr7Y7O5?^=e(S#Tno+(Ej;mWJUhMMrfIjG;wv& z-#XdZbUmZ?0@GtS&TXI7=ut6Rv8FkPWjk%an8j&?*`ptM#j}F*Ev!VW$|eIo;&ilS zw8J+nuN6?Dc#<(``{q_IVqu@x_qGlc44m=4E-GyBz{PS$r^}7w6*Hc4QL>xhS;8ig zb@fe=2n|y1R&`%QS!zOiFUuHaa!I#&sTp1R! zAQV|jKJ#xn)>>h1t~E6W?zhFK0oMWAPI-5vVE{0o>&Q0rX%L*##0(y<*;Ys(XaFd6 z3>qkp9|<=fV3*)yO&wlXEE^b!??0R&ecg%(&q5k>d$}DxSeyVLDe`_OJZXOM3u_De zcwOPE3(F73TL11|Zgbw3>LTW}0@oa$AxlaACZ$2QN#Xbac=L;&as2x+wfn`Y@gNh0 z4-l*&h0G_%k<5~2-W|`j;O!Jn^-SoQ%fA9$o0{eBZro-6ozxI-RxGjS68NRQdUF0t zvj5Ul9?n!t#Kqi9Z58;VC)OR6Iox!uOrvgmDIu6LM1O(kfb!;1xCQIP6x{w+{;3@G zMA;f$SBH^x>fB^`q)D0d%7=5la6qN;7eJ{Ns7y$QAews0CUeDDT}t$GUDrUo7JJRM z8P&d9#@%<_VBra*-@NFSlYxvII`7GKTZfTYD_;ecsAAjTyYwKD+?m*?S;a9$q?Kqa z{|oC|0}a1(cs2U;J$oNOC;j0~S?z(2nWb?pp2Lx$HkT2$pk%K~K8pjQ?wsfj1&}+0 zUEL`Ax=ZylY8wleyx`e?K#9}7j6=TJ%Id&mrHX(+&&T>hqt&QYHx}#E0^=jpEv#}f z{gz@^>A)dT?NrUbm7-Mc2-~gBkK0c^v$%*qZY<|OI76&w$9Bac-C4HL;*}>cv zM`5r>s}!rzzac*mYSlF)Mt3asmeRLTEn2XS(m`qB9Jg6pEgpvtZE&}oC_%Z{KYv&H zOhkPfwWr9WXq2aV?{xoxK?SZ}2a3Ld-Y8~xNrQzC%)5Y>7NS#0&IBqcO#s4dJ(`z9 zi_v7LtwU##MGZoWX&-VO1gBy~&QsHsY{^L0EWMkde}tVM)xG8L=Uu;VI@Br08 zreCDaHB;k=tBaSPLIwTk60>o{=L?lENtUE!motA=Nr|^ZZ0#F8{@yl5$JN?8TtKe= zx{gojJRy@?(yN+wE_Pdr!2uwYr4fV1BcULT=nK<`@u2pWO=gxFnDFI@o;DM6$%qmOcPBg^irdk)$wGee9;oA8Qs^*O$?JGy665yHvyTWueoQQb<~}^npQ@~K?&Kby zKbft^a_(@KFlK&G`A{>3CH-|44s3bIxEE;#Gl3-_t23yjJN`#!E{s_R9Kfl)tqIdK!eRJCUO1$1wh(y2)x> z_`b?@*b-#JAxABaEDsQ{xWt&Hx6Kp!v{QaOBUr@LGf^(?bS>tWtu-^Mi#%fMkSw5) z1vv~clM5bxLvw$l0NhJsuy*FMGwH7UF#6%t*iXg-O=Gwoz!kF3Dp}2>P0%S5U;13N z;uOP?Tz--ZQIGqOExXTUOW)$l;NVJDy$i1crD3lr-{Rhjk_MR8m>V>8>#jrijq!}B zF-Nz<8Cf8)BO@_Am0*BM|Cfhfw25PB+Y=hTUo)VG0e$PIsM$Q;w#YTQ%7jm=`Au1! z*jQ&2Sn>B}b{3p~*V#7kQtQY~9mK2H&}Ks6~Px%X^HTvU@} z>NnAMTkW`eb~V5Q-Bjy%zh$|YLPT6joY_XxCp*kFVlv9FpOu5TafiIAcPrxvE%Vup z17kKGw!*7*SM1|+sQ>OR(=cu1Q+0FV(c{R$lLtjR#vLnkO$O}vl8`oc=DcB_x9asR^Cgw1}E2NL!3^^h@fmz}l zQW-FR#;X`?$KvapsJ5}tM7dXjHME)I9TGI$f%-Nh3>xSz9O=G=KMFW@b;@eA zg=npHK+|VXLsg-=WV1qWtw=`Sy5m!KXuD=wr@1EJT2)3S5$Px-4ABYJxZEeP8P}LC ziUp^f>t_MVfi$plifc6Ri`wy-223T>AnW|XX_dLEV%F~rkMw4QgC;_A8j+fwUIfu*W~a*vlCDAzbb z)3Ie(=nmxb%(Cvdozkiu%GmEj1b^!w?C{>Ts4;+_GG7UZ|DKOAOX+U9IPG56n5fZx zwXOw(RrTack6jadze2W4q8?XQXEU*g?7YCJRww)9+%N!>Ldw0%)s5H}YtX`?Ee{1+F@8Ryfh$AcCF9Fl?UxpE zjSsn7qN-fJ=&*1|jIlmQ&dW}^2dK_xClmqXOJ>7^kWcSXR5m5-J0N@8(X`<+wf`FP zxTL^-SJ82Cn0Ov}?o*%C8d(>P%7nY7C>@tFvOA#YPmrD%j(Q9E-Do=T1!bdb&EU;> z%BL%#jDD(zOLZ(Lj6w4uNU)@I?LvS>*BOVMstY1>c#LjY`)woquv)e zXXYK}Jbn*B4p;;L9uD_U?{8msfAqe7P2AZ2d4Jg1qeU%v-^p<#)$jiH4R|;WifKMV z;}Z;cv4CUnRt)HMrcLEqcTW3C;d*z?8r?B{y`6#wj0Q>WTD_h=-<~a=OlV%D5jS1N z*DBptob5F)q_EBy=GVfwatZesfIb0)UuNE1AF~AHlwt9jqnhvi{a5An6(WjTa$5=s z<)r1b3pZ{Yd3xOe{zAe98VfNe!zcGHKHQ+!liS5pKY_eY{tsJ$90SFpg<&^-{o5sK z%WB*uozCLV6Bl=PpBul|CpT_TR$ax}mw}v!f@4KNKz*~HQ*=_t{!;Jv7gDGOJhsjM zct@TLB{^tpAX@;qoIL~&Uxu+F8ob5lNwFZKe9h~ETa!lYBJ46pW1TWYB zswP2*WNZlDe~$Bi5W30`#nBMF|3P2^G1ehYzyB`+6Np9ysV4A$3@-ynH+2ZU|1hwC z5G{}jRuFvuVPF9*h@d1bAo%{v=naON6#Q=)z``CVMXdj0KrTRaBSLcU|F@9EO(;wF zfAYT+)nlkP(|?i=_^&WL=agV|44^Lvx?lPKK3778`GkYuPE)P#r6MLXf8H3?*CY5kgl!kLOa3dreRUS1ph*s zd#iABGbeKxj#WoXnUcrzcB#WDH7`a)*vG?>KQ({SKA$z2tHsJtviZqe$>W%=o8v=o1+#ov3JmE~lWR$e$Z_f#YN|Q8fk_qg zTKs!3ojgmnB01S;QoX*g-N1|#t|{&ycojc9QA?&E><%(~%|J{6s+3UcWP0S30bV(= z?JTB{Jn%vx^gb}5RL*roH#m4D%w)zssPlcDL8xnh91N-po@Jnf=0GU~#I`sUAA}PX z#t21&INDNlHIYxwK13`$d6Q)C7aV%|gsZ$I*atXMIYJ(DtDo0)^tXy9S)9{#T zcUC_(FXukION8Q~HiV{(R56wwINbD(YM(PZOG_YQW&-2(4=OgqC4xFF2u*xdScrC0 zCvhi$4_mMpX9y!0?R5*33oTV-c%OTiMgvRYm?Vu8j+O)sn@*pqToch~KY>aq9Zo~I zS~e*hm3X;RVK60r2iT;OWP`3Bj+Hq=m?W9&k3ckdKDu(M;$4~S0rw=EGVE{Qwv||i zxNMlJ+5;$|Mqa}&{iFb**)!6G4t>LE)nYRc~#Ar<9#H_Ld88G z^jpcy3B7O$>oGs5(D7K;N4EZ$8&m{+G5764F+7FcFJ2lNR6-4^c)G4HhI|zz4Ui)p zXRkfR6)2??D902iTX4~kzdY7_byuD~LmMa6;PnV%8Fkf)q>jiqFk)x2IKvOW6WQX#iPkd zT?F4gRU&E9-`}}EJb1ZiO@Z~*S_=iA94CJ!;3~t%dl^z~6H?)6lwCo|(nFA(r$_rP zy+FY1E5C)$?2D@Nn6w#Ojy-q+d8%7qgQ(USVN>R^;2p+r+=FkmUD&6KTIdBJTqOMG zyY;~d_;dm>vR!MdO}sRNsssS;xf+$>i(vV-YUrtKg+lTkMepy64-pG@i7q{1E`OC! zG(1I8s~w1;PzEn<^xK|x_gALIq#8hOcbC~yVlvGYQ)S(*u1g9+<84TVU@h?)mrYN5 z)t01NAU%Ov=4h&Z?qF@H>S%}Tn?A>boxgYAUuu!l7d>?=73y=vx#Iz6ovJ1TySD3q_R&1Q$&0fbR8kQh-#@yKaLP<{&``-b1Z7IS z-QT$g^>v9dYNyNvweOBt6&*#0xO3J_PN>W*8~EduoA^avCUO8jySPc>au>x*T(FOE zEKCmJ-qKAMp5iVLqtc6UMm`i5R}or~NpQdoU(FtsqnpsH`!$ z4q{(U%V^PZVB-hC6I-^W;0yUY-5=h^9q}vh|bMuW*il^40(eV788^mIdUE4CtX~uZaHA+0ogv1qGS)QjVb5piAybbsPCCZ zi!I+;GZidTuKpfkHLvWGu5E;n|E+zDUSSw+)^zx7!p8(4x57)O6qWhDh)48l#a>f= zat%wI0hw~XEL)?ot1zw&zpA~i?yu!!5XV5qz!&64s~g~Pck+17B@|@e$mmr~6eFeQ zoNVDo3fs_MJj3pj1qk|c1-|>Yv+mVgI7_E|jncc7~N^Z_FEcwY8`UislK8(e>9aDg?)f z@}`{&wwno(+_J7wa++lW8(EQtR^=!-P3@!1?qjZ&p%;bp=ZiPR(JMp#=(ZPHw08+6 zCY|Wa04Awi&kna0S#*JlqX~{cLx;CWbFd2hmP$wf!xCW*vbB8T#JYTV!wX$mhbO)q zqyI}2P2lmQ&bz6e1uKvBOB9oN#5>j27`-s4v(v}zKxa5|393hiEtNR6c3eBm4i zwwEK-F-p@8yNwwqNa>yguy5`)ZhNQ7w>w-3tEU-q<8Wf_RQC|>8lxajCCJ}2QKHB@ zWAF)h+C6;^rY82r;bR%Y^vj`?nFdwG{AuD0J*_&15evcjWEVz!Y8+t|CVZmxT=W8) zP8u9!MEXFB`tZm(EHeszH1Ucfelv?ccI}isIY(c}4kK+8>q5ZY$}@-;BJB&vBf*@iNkwPY;6`lFyU;{r{SZJNYfo{| zEq#%3l${n|L18kaJfPC-Nv%C4ubyqY;Q_#Y9#-RS@#2_UtFRy6Or9Qn&$DSN7v22R zL4IVYs*Q?xXd8V3Lav8NhlE?&nSiEv?i}|&Ll%3#HRcbjG#mUGuFmNvhz>G@Gt>aI z1CgnI4nT;EHT`7_9G#oeQY9aKZKnrdmZwuY53DqOc91#cE+8yUrglXcX(7;v^9)9f z6Ueiz2D#XU##!N~PABx)6yl|%mS9PgJA`GLO=4fi!R@uhB31N|?Z$*DVX=>vs6MB< zg|iyaM;iq1K5Jz)zeuL?F)bj9)Pw^{IU;$Im~(Q`SaOI472Rf$YF&u25Hg0)s0W9_ ztS+H15}CosnRd=hQ<<}Hs8pV_eaf!FDKij+I_cx9H5}Q>Q?(nJ5=Bk& z=!iL8pVbim7`&Z??2>Xp?>I2`UXg(vb6p+H3{J<3Spe_pt-$VSa;!UrePL)&-TGc&v*W_c?#ffYal=79saARx4>2`B1nclMO6n`hz` z>FnJAH(rFSh??iaAkheiU>iUD9bt6qrypiRo#rk(+Xh5BOkX=}>=op4_!0?v8&_Oo zqk`R!D@a|>AmQ+IU?KaVsVTrGOuo|J=!~UMdYJ>;bg+QRYgQ$p&5U%m^DLFU#f_88 z5LvAg)oP=408i&kvJ9b+nxq9}Wo7A4E}jmQ!L-J;c47T3u<(kf9m9!EQgNGjAvG_+ zIf;hb^1sQfP&O`kKet|n6dqSFbYl50|0jd2|&$QbRDNK;Hir92n zAT#t^XO|@;HQF0RjrJ|@5fQ!phk(q#9$*k~xGWq5iV3C2WaR~KbG2CN`vL$l@Na{~K)nx`_FHhUxe%j`&+87W+#B=lM11SmU5@@Gv=3@<;yi1vPt< z#iElL;yM-zm}SFcC(Z020gOFrow2r~Pa^yD2T5tHWdN#+g?~*#jkXJaB_x&#O_m6$ zOL=fUmTxdOry1q4e7szR0jel4VoSO#pJ}w_`*2c@+%uq=oHwhN;=6;($rBlGM?wlD zuMqr5-|Dlc)S1&x)r2x}AJ;dMKGCS%&k^vjdsK8bIsjv!=$n1!{J0%qVn7p7GYKkF z{>yjhqvW^U;ELpS@Vll2j8{_1aqV?j-;CNIHkG;zCM`a^rC?wu{1MfHmj%_YFz`&5 z$E7o<&Qw6GU=Uu}u0mg_juj+P|2A@Bko00Ol3o>FQ&N9BYNcAOLZQm&nkc%1ZWov| zTRS0pbWd&Ft0Gu|z$OfXs42Q;9$g4~0o{tVtwLXFd0ry=cQ!9bvu)0pAULibXVUAe zR)L@yrbAV*0_|>Oa94{BlOVR>{*6fJ>#Sivglzz)V-e)HI~;-Se~HA;?3R39A4Wkj z%48!qUaOWsb_{Dh#hQ!x_JZd=>S(?gPv*HlZLyJ(nnO~w=U}a=IZ7qEHha=bL#B(# z$N2;WJ*QG8Qnm>)HIbf>F;NcOl1!h=4u255(;DR%_ti(f*CcA<$ApL*sN2HqtG8N+ z#sk!ViDcPE_b}TdN25awR2rjL3{*UECmJJPqiDuD=!mJ($>%foOM`zE2j(^!T5rr6 zQ?1O}%wbyKQB0NzvZnUpY>_aM|7zWT$O3c!mxRYf#caWbBX6?v2QQJPv8o@ccrgN; zH)e*+e0hzTM!@Odghn&pCDz@ONzcaa zIXZi$m8qwOE}tN?UMa;oJc6f1@ZG4kogvRU#_7Jn#D4_s;+*kDZ;tqngex?wYJck1 z;(%=R*KG8CRvF3`yNXYBU_#=CXDg*BUf+FLVK7z^1eGR+5cnv( zgE&@z{br_p=Vb)KLV|2#!Rj)lZH;G*Ufti~n5yVluI*9Q&^4hLTF}@^hZ@cjN9lt$ zT9CHJ#CD-SfSuGA3*7Y)HkCohN{H^WNIB~|PiL`HN~p+%z6(+gAvnNz+SMh5&JUki z8^V@BjpOhO2Y*!e5tL>4u0lwGB1Dfn=GA!sqOb!ct@|p;GUA(&$eWFrCIHOEfiq@x zeKa^*C^lh!HAWkwcQXjnoid41RMpB zy2}hF!C=H8DJkrC2!GTuzbJu)iMlHzLE-*SgkqIB%xoREaFDhCZxmKnI{CV5zA+R< z$LxQ=)YDdN7+ALa@Dcl;Fm9Z?xX`Sf_fIsK)!}Lf)h|MPKm$pq912`sYoL!=+X4e> zH!gH@G-O$Svp<(0CL;jy{S!^y+CLO*Nl&0p!saPQ$v|2PS69&XQu z>+14R6&6)o%wMb@?+U7a7vz6t-wFwDmC$c3%ox}(T$k1{}9$SsQQKU?`Pk$bQQrq_8Bb0`hv*WnBN+_qdYqnsUv6oHSM7lE2u JN>Li&{{gpfW(NQO delta 11881 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 diff --git a/doc/src/Regression/Regression.do.txt b/doc/src/Regression/Regression.do.txt index 605835410..914eed14e 100644 --- a/doc/src/Regression/Regression.do.txt +++ b/doc/src/Regression/Regression.do.txt @@ -1539,11 +1539,11 @@ cross-validation (LOOCV). !split ===== How to set up the cross-validation for Ridge and/or Lasso ===== -o Define a range of interest for the penalty parameter. +* Define a range of interest for the penalty parameter. -o Divide the data set into training and test set comprising samples $\{1, \ldots, n\} \setminus i$ and $\{ i \}$, respectively. +* Divide the data set into training and test set comprising samples $\{1, \ldots, n\} \setminus i$ and $\{ i \}$, respectively. -o Fit the linear regression model by means of ridge estimation for each $\lambda$ in the grid using the training set, and the corresponding estimate of the error variance $\hat{\sigma}_{-i}^2(\lambda)$, as +* Fit the linear regression model by means of ridge estimation for each $\lambda$ in the grid using the training set, and the corresponding estimate of the error variance $\hat{\sigma}_{-i}^2(\lambda)$, as !bt \begin{align*} \hat{\beta}_{-i}(\lambda) & = ( \hat{X}_{-i, \ast}^{\top} @@ -1552,18 +1552,18 @@ o Fit the linear regression model by means of ridge estimation for each $\lambd \end{align*} !et -o Evaluate the prediction performance of these models on the test set by $\log\{L[y_i, \hat{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}$. Or, by the prediction error $|y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)|$, the relative error, the error squared or the R2 score function. +* Evaluate the prediction performance of these models on the test set by $\log\{L[y_i, \hat{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}$. Or, by the prediction error $|y_i - \hat{X}_{i, \ast} \hat{\beta}_{-i}(\lambda)|$, the relative error, the error squared or the R2 score function. -o Repeat steps 1) to 3) such that each sample plays the role of the test set once. +* Repeat the first three steps such that each sample plays the role of the test set once. -o Average the prediction performances of the test sets at each grid point of the penalty bias/parameter by computing the *cross-validated log-likelihood*. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as +* Average the prediction performances of the test sets at each grid point of the penalty bias/parameter by computing the *cross-validated log-likelihood*. It is an estimate of the prediction performance of the model corresponding to this value of the penalty parameter on novel data. It is defined as !bt \begin{align*} \frac{1}{n} \sum_{i = 1}^n \log\{L[y_i, \mathbf{X}_{i, \ast}; \hat{\beta}_{-i}(\lambda), \hat{\sigma}_{-i}^2(\lambda)]\}. \end{align*} !et -o The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions. +* The value of the penalty parameter that maximizes the cross-validated log-likelihood is the value of choice. Or we can use the MSE or the R2 score functions. !split ===== Predicted Residual Error Sum of Squares ===== From 02d6db36970b6d35b1c77d75c50f73d7bcefe80c Mon Sep 17 00:00:00 2001 From: mhjensen Date: Tue, 11 Sep 2018 11:04:28 +0200 Subject: [PATCH 12/12] Updating project 1 --- .../gaussian/autocorrelation.eps | 4926 --------- .../gaussian/autocorrelation.png | Bin 22990 -> 0 bytes .../gaussian/blocking.eps | 1608 --- .../gaussian/blocking.png | Bin 38346 -> 0 bytes .../gaussian/data.eps | 8886 ----------------- .../gaussian/data.png | Bin 32999 -> 0 bytes .../gaussian/hist.eps | 1784 ---- .../gaussian/hist.png | Bin 26785 -> 0 bytes doc/pub/Regression/ipynb/Regression.ipynb | 3325 +++++- .../Projects/2018/Project1/Project1.do.txt | 11 +- doc/src/Regression/Regression.do.txt | 324 +- 11 files changed, 3609 insertions(+), 17255 deletions(-) delete mode 100644 doc/Programs/ResamplingAnalysisScripts/gaussian/autocorrelation.eps delete mode 100644 doc/Programs/ResamplingAnalysisScripts/gaussian/autocorrelation.png delete mode 100644 doc/Programs/ResamplingAnalysisScripts/gaussian/blocking.eps delete mode 100644 doc/Programs/ResamplingAnalysisScripts/gaussian/blocking.png delete mode 100644 doc/Programs/ResamplingAnalysisScripts/gaussian/data.eps delete mode 100644 doc/Programs/ResamplingAnalysisScripts/gaussian/data.png delete mode 100644 doc/Programs/ResamplingAnalysisScripts/gaussian/hist.eps delete mode 100644 doc/Programs/ResamplingAnalysisScripts/gaussian/hist.png diff --git a/doc/Programs/ResamplingAnalysisScripts/gaussian/autocorrelation.eps b/doc/Programs/ResamplingAnalysisScripts/gaussian/autocorrelation.eps deleted file mode 100644 index d8c6a2f60..000000000 --- a/doc/Programs/ResamplingAnalysisScripts/gaussian/autocorrelation.eps +++ /dev/null @@ -1,4926 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Title: gaussian/autocorrelation.eps -%%Creator: matplotlib version 2.0.0, http://matplotlib.org/ -%%CreationDate: Wed Oct 4 14:08:30 2017 -%%Orientation: portrait -%%BoundingBox: 75 223 536 568 -%%EndComments -%%BeginProlog -/mpldict 9 dict def -mpldict begin -/m { moveto } bind def -/l { lineto } bind def -/r { rlineto } bind def -/c { curveto } bind def -/cl { closepath } bind def -/box { -m -1 index 0 r -0 exch r -neg 0 r -cl -} bind def -/clipbox { -box -clip -newpath -} bind def -%!PS-Adobe-3.0 Resource-Font -%%Title: DejaVu Serif -%%Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. DejaVu changes are in public domain -%%Creator: Converted from TrueType to type 3 by PPR -25 dict begin -/_d{bind def}bind def -/_m{moveto}_d -/_l{lineto}_d -/_cl{closepath eofill}_d -/_c{curveto}_d -/_sc{7 -1 roll{setcachedevice}{pop pop pop pop pop pop}ifelse}_d -/_e{exec}_d -/FontName /DejaVuSerif def -/PaintType 0 def -/FontMatrix[.001 0 0 .001 0 0]def -/FontBBox[-770 -347 2105 1109]def -/FontType 3 def -/Encoding [ /space /A /F /L /a /c /e /g /i /l /n /o /r /t /u ] def -/FontInfo 10 dict dup begin -/FamilyName (DejaVu Serif) def -/FullName (DejaVu Serif) def -/Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. DejaVu changes are in public domain ) def -/Weight (Book) def -/Version (Version 2.35) def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -130 def -/UnderlineThickness 90 def -end readonly def -/CharStrings 15 dict dup begin -/space{318 0 0 0 0 0 _sc -}_d -/A{722 0 -5 0 732 729 _sc -200 264 _m -468 264 _l -334 611 _l -200 264 _l --5 0 _m --5 52 _l -58 52 _l -318 729 _l -400 729 _l -660 52 _l -732 52 _l -732 0 _l -467 0 _l -467 52 _l -548 52 _l -487 212 _l -180 212 _l -119 52 _l -199 52 _l -199 0 _l --5 0 _l -_cl}_d -/F{694 0 55 0 652 729 _sc -55 0 _m -55 52 _l -148 52 _l -148 677 _l -55 677 _l -55 729 _l -652 729 _l -652 567 _l -592 567 _l -592 669 _l -247 669 _l -247 425 _l -496 425 _l -496 516 _l -556 516 _l -556 274 _l -496 274 _l -496 365 _l -247 365 _l -247 52 _l -364 52 _l -364 0 _l -55 0 _l -_cl}_d -/L{664 0 55 0 640 729 _sc -55 0 _m -55 52 _l -148 52 _l -148 677 _l -55 677 _l -55 729 _l -340 729 _l -340 677 _l -247 677 _l -247 60 _l -580 60 _l -580 182 _l -640 182 _l -640 0 _l -55 0 _l -_cl}_d -/a{{596 0 50 -13 568 533 _sc -398 163 _m -398 273 _l -282 273 _l -237 273 204 263 182 244 _c -160 224 150 195 150 156 _c -150 120 161 91 183 70 _c -205 48 235 38 273 38 _c -310 38 340 49 363 72 _c -386 95 398 125 398 163 _c -488 324 _m -488 52 _l -568 52 _l -568 0 _l -398 0 _l -398 56 _l -378 32 355 14 329 3 _c -303 -7 272 -13 238 -13 _c -180 -13 134 2 100 32 _c -}_e{66 62 50 104 50 156 _c -50 209 69 250 108 280 _c -146 310 201 325 272 325 _c -398 325 _l -398 361 _l -398 400 386 430 362 452 _c -338 474 304 485 261 485 _c -225 485 197 476 176 460 _c -154 444 141 420 136 388 _c -90 388 _l -90 493 _l -121 506 151 516 181 523 _c -210 529 239 533 267 533 _c -339 533 393 515 431 479 _c -469 443 488 392 488 324 _c -_cl}_e}_d -/c{{560 0 50 -13 514 533 _sc -514 156 _m -501 100 477 58 441 30 _c -405 1 358 -13 301 -13 _c -225 -13 165 11 119 61 _c -73 111 50 177 50 260 _c -50 342 73 408 119 458 _c -165 508 225 533 301 533 _c -333 533 366 529 399 521 _c -431 513 464 502 497 487 _c -497 354 _l -445 354 _l -438 399 423 432 400 453 _c -377 474 344 485 302 485 _c -253 485 216 466 192 428 _c -}_e{167 390 155 334 155 260 _c -155 184 167 128 192 90 _c -216 52 253 34 302 34 _c -340 34 371 44 394 64 _c -417 84 433 115 442 156 _c -514 156 _l -_cl}_e}_d -/e{{592 0 50 -13 542 533 _sc -542 250 _m -155 250 _l -155 246 _l -155 176 168 123 194 87 _c -220 51 259 34 311 34 _c -350 34 382 44 408 65 _c -433 85 451 116 461 157 _c -533 157 _l -519 100 492 57 454 29 _c -415 1 364 -13 302 -13 _c -226 -13 165 11 119 61 _c -73 111 50 177 50 260 _c -50 342 72 408 118 458 _c -163 508 222 533 296 533 _c -374 533 435 508 477 460 _c -}_e{519 412 540 342 542 250 _c -436 302 _m -434 362 421 408 397 439 _c -373 469 340 485 296 485 _c -254 485 222 469 198 438 _c -174 407 160 362 155 302 _c -436 302 _l -_cl}_e}_d -/g{{640 0 50 -221 611 533 _sc -525 467 _m -525 11 _l -525 -63 504 -120 463 -160 _c -422 -200 364 -221 288 -221 _c -254 -221 221 -218 190 -212 _c -158 -206 128 -196 100 -184 _c -100 -75 _l -147 -75 _l -153 -109 166 -133 188 -149 _c -210 -165 241 -173 282 -173 _c -334 -173 373 -158 398 -128 _c -422 -98 435 -51 435 11 _c -435 81 _l -417 48 395 24 368 9 _c -340 -5 307 -13 267 -13 _c -203 -13 150 12 110 62 _c -}_e{70 112 50 178 50 260 _c -50 341 70 407 110 457 _c -150 507 203 533 267 533 _c -307 533 340 525 368 510 _c -395 494 417 470 435 438 _c -435 519 _l -611 519 _l -611 467 _l -525 467 _l -435 285 _m -435 347 423 394 399 427 _c -375 460 340 477 295 477 _c -249 477 214 458 190 422 _c -166 386 155 332 155 260 _c -155 188 166 133 190 97 _c -214 60 249 42 295 42 _c -}_e{340 42 375 58 399 91 _c -423 123 435 171 435 234 _c -435 285 _l -_cl}_e}_d -/i{320 0 36 0 297 736 _sc -97 680 _m -97 695 102 708 113 719 _c -124 730 137 736 153 736 _c -167 736 180 730 191 719 _c -202 708 208 695 208 680 _c -208 664 202 651 192 641 _c -181 630 168 625 153 625 _c -137 625 124 630 113 641 _c -102 651 97 664 97 680 _c -212 52 _m -297 52 _l -297 0 _l -36 0 _l -36 52 _l -122 52 _l -122 467 _l -36 467 _l -36 519 _l -212 519 _l -212 52 _l -_cl}_d -/l{320 0 29 0 290 760 _sc -205 52 _m -290 52 _l -290 0 _l -29 0 _l -29 52 _l -115 52 _l -115 708 _l -29 708 _l -29 760 _l -205 760 _l -205 52 _l -_cl}_d -/n{{644 0 36 0 616 533 _sc -41 0 _m -41 52 _l -122 52 _l -122 467 _l -36 467 _l -36 519 _l -212 519 _l -212 427 _l -228 461 250 488 276 506 _c -302 524 333 533 369 533 _c -426 533 468 516 495 484 _c -522 451 536 400 536 330 _c -536 52 _l -616 52 _l -616 0 _l -368 0 _l -368 52 _l -446 52 _l -446 302 _l -446 365 438 408 422 432 _c -406 456 379 468 340 468 _c -}_e{298 468 266 452 244 422 _c -222 391 212 347 212 289 _c -212 52 _l -290 52 _l -290 0 _l -41 0 _l -_cl}_e}_d -/o{602 0 50 -13 552 533 _sc -301 34 _m -349 34 385 53 410 91 _c -434 129 447 185 447 260 _c -447 334 434 390 410 428 _c -385 466 349 485 301 485 _c -253 485 216 466 192 428 _c -167 390 155 334 155 260 _c -155 185 167 129 192 91 _c -216 53 253 34 301 34 _c -301 -13 _m -225 -13 165 11 119 61 _c -73 111 50 177 50 260 _c -50 342 72 408 118 458 _c -164 508 225 533 301 533 _c -377 533 437 508 483 458 _c -529 408 552 342 552 260 _c -552 177 529 111 483 61 _c -437 11 377 -13 301 -13 _c -_cl}_d -/r{478 0 36 0 478 533 _sc -478 520 _m -478 390 _l -426 390 _l -424 416 417 435 405 448 _c -392 460 373 467 349 467 _c -305 467 271 451 247 421 _c -223 390 212 346 212 289 _c -212 52 _l -316 52 _l -316 0 _l -41 0 _l -41 52 _l -122 52 _l -122 468 _l -36 468 _l -36 519 _l -212 519 _l -212 427 _l -229 463 251 489 279 507 _c -307 524 341 533 381 533 _c -395 533 411 531 427 529 _c -443 527 460 524 478 520 _c -_cl}_d -/t{402 0 29 -13 394 680 _sc -108 467 _m -29 467 _l -29 519 _l -108 519 _l -108 680 _l -198 680 _l -198 519 _l -367 519 _l -367 467 _l -198 467 _l -198 137 _l -198 93 202 64 211 52 _c -219 40 235 34 258 34 _c -281 34 298 41 309 55 _c -319 69 325 91 326 122 _c -394 122 _l -391 74 378 40 355 19 _c -332 -2 297 -13 250 -13 _c -198 -13 161 -1 140 21 _c -118 43 108 82 108 137 _c -108 467 _l -_cl}_d -/u{{644 0 27 -13 607 519 _sc -354 519 _m -522 519 _l -522 52 _l -607 52 _l -607 0 _l -432 0 _l -432 92 _l -415 57 393 31 367 13 _c -341 -4 310 -13 276 -13 _c -218 -13 175 3 148 35 _c -121 67 108 119 108 189 _c -108 467 _l -27 467 _l -27 519 _l -198 519 _l -198 217 _l -198 153 205 110 221 87 _c -237 63 264 52 304 52 _c -346 52 377 67 399 98 _c -421 128 432 173 432 231 _c -}_e{432 467 _l -354 467 _l -354 519 _l -_cl}_e}_d -end readonly def - -/BuildGlyph - {exch begin - CharStrings exch - 2 copy known not{pop /.notdef}if - true 3 1 roll get exec - end}_d - -/BuildChar { - 1 index /Encoding get exch get - 1 index /BuildGlyph get exec -}_d - -FontName currentdict end definefont pop -%!PS-Adobe-3.0 Resource-Font -%%Title: DejaVu Sans -%%Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. DejaVu changes are in public domain -%%Creator: Converted from TrueType to type 3 by PPR -25 dict begin -/_d{bind def}bind def -/_m{moveto}_d -/_l{lineto}_d -/_cl{closepath eofill}_d -/_c{curveto}_d -/_sc{7 -1 roll{setcachedevice}{pop pop pop pop pop pop}ifelse}_d -/_e{exec}_d -/FontName /DejaVuSans def -/PaintType 0 def -/FontMatrix[.001 0 0 .001 0 0]def -/FontBBox[-1021 -463 1793 1232]def -/FontType 3 def -/Encoding [ /period /zero /one /two /three /four /five /seven /minus ] def -/FontInfo 10 dict dup begin -/FamilyName (DejaVu Sans) def -/FullName (DejaVu Sans) def -/Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. DejaVu changes are in public domain ) def -/Weight (Book) def -/Version (Version 2.35) def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -130 def -/UnderlineThickness 90 def -end readonly def -/CharStrings 9 dict dup begin -/period{318 0 107 0 210 124 _sc -107 124 _m -210 124 _l -210 0 _l -107 0 _l -107 124 _l -_cl}_d -/zero{636 0 66 -13 570 742 _sc -318 664 _m -267 664 229 639 203 589 _c -177 539 165 464 165 364 _c -165 264 177 189 203 139 _c -229 89 267 64 318 64 _c -369 64 407 89 433 139 _c -458 189 471 264 471 364 _c -471 464 458 539 433 589 _c -407 639 369 664 318 664 _c -318 742 _m -399 742 461 709 505 645 _c -548 580 570 486 570 364 _c -570 241 548 147 505 83 _c -461 19 399 -13 318 -13 _c -236 -13 173 19 130 83 _c -87 147 66 241 66 364 _c -66 486 87 580 130 645 _c -173 709 236 742 318 742 _c -_cl}_d -/one{636 0 110 0 544 729 _sc -124 83 _m -285 83 _l -285 639 _l -110 604 _l -110 694 _l -284 729 _l -383 729 _l -383 83 _l -544 83 _l -544 0 _l -124 0 _l -124 83 _l -_cl}_d -/two{{636 0 73 0 536 742 _sc -192 83 _m -536 83 _l -536 0 _l -73 0 _l -73 83 _l -110 121 161 173 226 239 _c -290 304 331 346 348 365 _c -380 400 402 430 414 455 _c -426 479 433 504 433 528 _c -433 566 419 598 392 622 _c -365 646 330 659 286 659 _c -255 659 222 653 188 643 _c -154 632 117 616 78 594 _c -78 694 _l -118 710 155 722 189 730 _c -223 738 255 742 284 742 _c -}_e{359 742 419 723 464 685 _c -509 647 532 597 532 534 _c -532 504 526 475 515 449 _c -504 422 484 390 454 354 _c -446 344 420 317 376 272 _c -332 227 271 164 192 83 _c -_cl}_e}_d -/three{{636 0 76 -13 556 742 _sc -406 393 _m -453 383 490 362 516 330 _c -542 298 556 258 556 212 _c -556 140 531 84 482 45 _c -432 6 362 -13 271 -13 _c -240 -13 208 -10 176 -4 _c -144 1 110 10 76 22 _c -76 117 _l -103 101 133 89 166 81 _c -198 73 232 69 268 69 _c -330 69 377 81 409 105 _c -441 129 458 165 458 212 _c -458 254 443 288 413 312 _c -383 336 341 349 287 349 _c -}_e{202 349 _l -202 430 _l -291 430 _l -339 430 376 439 402 459 _c -428 478 441 506 441 543 _c -441 580 427 609 401 629 _c -374 649 336 659 287 659 _c -260 659 231 656 200 650 _c -169 644 135 635 98 623 _c -98 711 _l -135 721 170 729 203 734 _c -235 739 266 742 296 742 _c -370 742 429 725 473 691 _c -517 657 539 611 539 553 _c -539 513 527 479 504 451 _c -481 423 448 403 406 393 _c -_cl}_e}_d -/four{636 0 49 0 580 729 _sc -378 643 _m -129 254 _l -378 254 _l -378 643 _l -352 729 _m -476 729 _l -476 254 _l -580 254 _l -580 172 _l -476 172 _l -476 0 _l -378 0 _l -378 172 _l -49 172 _l -49 267 _l -352 729 _l -_cl}_d -/five{{636 0 77 -13 549 729 _sc -108 729 _m -495 729 _l -495 646 _l -198 646 _l -198 467 _l -212 472 227 476 241 478 _c -255 480 270 482 284 482 _c -365 482 429 459 477 415 _c -525 370 549 310 549 234 _c -549 155 524 94 475 51 _c -426 8 357 -13 269 -13 _c -238 -13 207 -10 175 -6 _c -143 -1 111 6 77 17 _c -77 116 _l -106 100 136 88 168 80 _c -199 72 232 69 267 69 _c -}_e{323 69 368 83 401 113 _c -433 143 450 183 450 234 _c -450 284 433 324 401 354 _c -368 384 323 399 267 399 _c -241 399 214 396 188 390 _c -162 384 135 375 108 363 _c -108 729 _l -_cl}_e}_d -/seven{636 0 82 0 551 729 _sc -82 729 _m -551 729 _l -551 687 _l -286 0 _l -183 0 _l -432 646 _l -82 646 _l -82 729 _l -_cl}_d -/minus{838 0 106 272 732 355 _sc -106 355 _m -732 355 _l -732 272 _l -106 272 _l -106 355 _l -_cl}_d -end readonly def - -/BuildGlyph - {exch begin - CharStrings exch - 2 copy known not{pop /.notdef}if - true 3 1 roll get exec - end}_d - -/BuildChar { - 1 index /Encoding get exch get - 1 index /BuildGlyph get exec -}_d - -FontName currentdict end definefont pop -end -%%EndProlog -mpldict begin -75.6 223.2 translate -460.8 345.6 0 0 clipbox -gsave -0 0 m -460.8 0 l -460.8 345.6 l -0 345.6 l -cl -1.000 setgray -fill -grestore -gsave -57.6 38.016 m -414.72 38.016 l -414.72 304.128 l -57.6 304.128 l -cl -1.000 setgray -fill -grestore -0.800 setlinewidth -1 setlinejoin -0 setlinecap -[] 0 setdash -0.000 setgray -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 38.016 o -grestore -/DejaVuSans findfont -10.000 scalefont -setfont -gsave -54.420313 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -129.024 38.016 o -grestore -gsave -116.305250 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /one glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /zero glyphshow -19.086914 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -200.448 38.016 o -grestore -gsave -187.729250 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /two glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /zero glyphshow -19.086914 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -271.872 38.016 o -grestore -gsave -259.153250 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /three glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /zero glyphshow -19.086914 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -343.296 38.016 o -grestore -gsave -330.577250 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /four glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /zero glyphshow -19.086914 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -414.72 38.016 o -grestore -gsave -402.001250 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /five glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /zero glyphshow -19.086914 0.000000 m /zero glyphshow -grestore -/DejaVuSerif findfont -10.000 scalefont -setfont -gsave -226.652187 9.891000 translate -0.000000 rotate -0.000000 0.000000 m /L glyphshow -6.640625 0.000000 m /a glyphshow -12.602539 0.000000 m /g glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 38.016 o -grestore -/DejaVuSans findfont -10.000 scalefont -setfont -gsave -19.959375 34.219125 translate -0.000000 rotate -0.000000 0.000000 m /minus glyphshow -8.378906 0.000000 m /one glyphshow -14.741211 0.000000 m /period glyphshow -17.919922 0.000000 m /zero glyphshow -24.282227 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 71.28 o -grestore -gsave -19.959375 67.483125 translate -0.000000 rotate -0.000000 0.000000 m /minus glyphshow -8.378906 0.000000 m /zero glyphshow -14.741211 0.000000 m /period glyphshow -17.919922 0.000000 m /seven glyphshow -24.282227 0.000000 m /five glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 104.544 o -grestore -gsave -19.959375 100.747125 translate -0.000000 rotate -0.000000 0.000000 m /minus glyphshow -8.378906 0.000000 m /zero glyphshow -14.741211 0.000000 m /period glyphshow -17.919922 0.000000 m /five glyphshow -24.282227 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 137.808 o -grestore -gsave -19.959375 134.011125 translate -0.000000 rotate -0.000000 0.000000 m /minus glyphshow -8.378906 0.000000 m /zero glyphshow -14.741211 0.000000 m /period glyphshow -17.919922 0.000000 m /two glyphshow -24.282227 0.000000 m /five glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 171.072 o -grestore -gsave -28.334375 167.275125 translate -0.000000 rotate -0.000000 0.000000 m /zero glyphshow -6.362305 0.000000 m /period glyphshow -9.541016 0.000000 m /zero glyphshow -15.903320 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 204.336 o -grestore -gsave -28.334375 200.539125 translate -0.000000 rotate -0.000000 0.000000 m /zero glyphshow -6.362305 0.000000 m /period glyphshow -9.541016 0.000000 m /two glyphshow -15.903320 0.000000 m /five glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 237.6 o -grestore -gsave -28.334375 233.803125 translate -0.000000 rotate -0.000000 0.000000 m /zero glyphshow -6.362305 0.000000 m /period glyphshow -9.541016 0.000000 m /five glyphshow -15.903320 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 270.864 o -grestore -gsave -28.334375 267.067125 translate -0.000000 rotate -0.000000 0.000000 m /zero glyphshow -6.362305 0.000000 m /period glyphshow -9.541016 0.000000 m /seven glyphshow -15.903320 0.000000 m /five glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 304.128 o -grestore -gsave -28.334375 300.331125 translate -0.000000 rotate -0.000000 0.000000 m /one glyphshow -6.362305 0.000000 m /period glyphshow -9.541016 0.000000 m /zero glyphshow -15.903320 0.000000 m /zero glyphshow -grestore -/DejaVuSerif findfont -10.000 scalefont -setfont -gsave -13.881250 107.111062 translate -90.000000 rotate -0.000000 0.000000 m /A glyphshow -7.221680 0.000000 m /u glyphshow -13.662109 0.000000 m /t glyphshow -17.680664 0.000000 m /o glyphshow -23.701172 0.000000 m /c glyphshow -29.301758 0.000000 m /o glyphshow -35.322266 0.000000 m /r glyphshow -40.102539 0.000000 m /r glyphshow -44.882812 0.000000 m /e glyphshow -50.800781 0.000000 m /l glyphshow -53.999023 0.000000 m /a glyphshow -59.960938 0.000000 m /t glyphshow -63.979492 0.000000 m /i glyphshow -67.177734 0.000000 m /o glyphshow -73.198242 0.000000 m /n glyphshow -79.638672 0.000000 m /space glyphshow -82.817383 0.000000 m /F glyphshow -89.755859 0.000000 m /u glyphshow -96.196289 0.000000 m /n glyphshow -102.636719 0.000000 m /c glyphshow -108.237305 0.000000 m /t glyphshow -112.255859 0.000000 m /i glyphshow -115.454102 0.000000 m /o glyphshow -121.474609 0.000000 m /n glyphshow -grestore -1.500 setlinewidth -2 setlinecap -1.000 0.000 0.000 setrgbcolor -gsave -357.1 266.1 57.6 38.02 clipbox -57.671424 172.079256 m -57.742848 168.528343 l -57.742848 168.528343 l -57.742848 168.528343 l -57.95712 170.981956 l -58.028544 171.311412 l -58.099968 172.883608 l -58.171392 170.558531 l -58.242816 171.959861 l -58.31424 171.361885 l -58.457088 172.137266 l -58.528512 169.191122 l -58.67136 171.371921 l -58.742784 169.753687 l -58.814208 172.379102 l -59.02848 169.403776 l -59.099904 168.496007 l -59.242752 173.991025 l -59.3856 169.283743 l -59.457024 170.553846 l -59.528448 168.745337 l -59.599872 169.05851 l -59.671296 172.854522 l -59.74272 172.058187 l -59.885568 172.074935 l -60.028416 172.637945 l -60.09984 169.737442 l -60.314112 174.332272 l -60.385536 169.591055 l -60.45696 172.089635 l -60.528384 172.756756 l -60.599808 168.711379 l -60.671232 172.978234 l -60.742656 171.083946 l -60.81408 172.228767 l -60.956928 171.295081 l -61.028352 171.879525 l -61.1712 170.752313 l -61.242624 172.644704 l -61.314048 171.553417 l -61.385472 173.827358 l -61.456896 173.198246 l -61.52832 168.371674 l -61.599744 169.472294 l -61.671168 171.468707 l -61.742592 171.100646 l -61.814016 170.804129 l -61.88544 171.236016 l -61.956864 169.971134 l -62.028288 170.4769 l -62.099712 173.073812 l -62.24256 169.813544 l -62.313984 170.330041 l -62.385408 172.149227 l -62.456832 170.412916 l -62.528256 170.425347 l -62.59968 174.301124 l -62.671104 169.919256 l -62.742528 171.210543 l -62.885376 170.961855 l -62.9568 172.029533 l -63.028224 170.22633 l -63.099648 171.133229 l -63.242496 169.825641 l -63.31392 173.664307 l -63.385344 172.752342 l -63.456768 172.879721 l -63.528192 172.633847 l -63.813888 170.548831 l -63.885312 171.528103 l -63.956736 174.58169 l -64.02816 172.130167 l -64.099584 172.719288 l -64.171008 171.369118 l -64.242432 172.827223 l -64.313856 172.168308 l -64.38528 170.574975 l -64.456704 174.825245 l -64.528128 169.876537 l -64.599552 172.160368 l -64.7424 169.247282 l -64.813824 172.388815 l -64.885248 170.644973 l -65.09952 169.823145 l -65.170944 172.508236 l -65.242368 169.781511 l -65.313792 170.806035 l -65.385216 170.738557 l -65.45664 171.361051 l -65.528064 170.176798 l -65.670912 172.360225 l -65.81376 170.34384 l -65.956608 170.574865 l -66.028032 171.411106 l -66.099456 170.9067 l -66.17088 171.751756 l -66.242304 169.542232 l -66.313728 169.641448 l -66.528 171.954623 l -66.670848 169.737306 l -66.742272 172.010244 l -66.813696 169.341406 l -66.88512 170.676385 l -66.956544 170.981521 l -67.027968 169.809652 l -67.099392 170.407345 l -67.24224 173.737111 l -67.313664 170.390879 l -67.385088 170.594788 l -67.527936 169.469891 l -67.670784 171.653915 l -67.742208 169.871075 l -67.813632 171.949469 l -67.885056 171.761403 l -68.027904 171.793176 l -68.099328 174.54536 l -68.170752 169.395885 l -68.242176 170.357969 l -68.3136 172.632848 l -68.385024 171.318318 l -68.456448 172.764158 l -68.599296 168.354109 l -68.742144 171.228605 l -68.813568 169.942325 l -68.884992 172.164432 l -68.956416 172.099071 l -69.099264 170.441649 l -69.170688 167.685674 l -69.242112 173.113052 l -69.313536 170.485463 l -69.38496 170.820077 l -69.456384 173.177017 l -69.599232 169.326799 l -69.670656 170.039575 l -69.74208 172.950455 l -69.813504 171.872581 l -69.884928 169.404631 l -70.027776 172.354508 l -70.0992 169.291227 l -70.170624 170.609349 l -70.384896 173.484159 l -70.45632 169.943723 l -70.527744 173.358408 l -70.670592 169.588874 l -70.81344 170.977045 l -70.884864 169.973218 l -70.956288 172.405825 l -71.027712 171.642297 l -71.099136 173.132092 l -71.17056 171.808163 l -71.241984 171.955069 l -71.313408 172.775459 l -71.384832 171.961964 l -71.456256 168.313336 l -71.52768 169.025272 l -71.813376 172.587308 l -72.027648 169.815774 l -72.099072 170.001215 l -72.170496 173.341203 l -72.313344 169.796367 l -72.384768 170.175005 l -72.456192 169.708158 l -72.527616 172.173711 l -72.59904 169.615573 l -72.741888 173.314369 l -72.813312 171.280713 l -72.884736 172.408311 l -73.099008 169.482027 l -73.170432 170.096505 l -73.241856 169.628811 l -73.31328 170.449031 l -73.384704 169.170547 l -73.527552 172.321894 l -73.598976 171.502384 l -73.6704 171.90352 l -73.741824 173.078191 l -73.813248 172.192791 l -73.884672 173.163458 l -74.02752 169.910855 l -74.098944 170.185654 l -74.241792 172.731387 l -74.456064 169.612582 l -74.527488 173.416589 l -74.598912 171.53642 l -74.670336 170.402272 l -74.74176 170.704177 l -74.813184 171.289083 l -74.884608 170.734182 l -74.956032 168.9314 l -75.027456 171.866591 l -75.09888 170.495051 l -75.170304 171.329243 l -75.241728 170.683454 l -75.313152 172.736866 l -75.384576 170.608635 l -75.456 171.798579 l -75.598848 168.398342 l -75.670272 173.335094 l -75.741696 168.967976 l -75.81312 170.605501 l -75.884544 172.001664 l -75.955968 169.346044 l -76.027392 174.037628 l -76.098816 172.088398 l -76.17024 170.722843 l -76.313088 173.595513 l -76.455936 171.340651 l -76.52736 171.299223 l -76.598784 171.059731 l -76.741632 172.441759 l -76.813056 172.213739 l -76.88448 169.757566 l -77.027328 172.360245 l -77.098752 170.080636 l -77.170176 171.263026 l -77.384448 168.782329 l -77.527296 172.772377 l -77.59872 171.142981 l -77.670144 171.093103 l -77.812992 168.596629 l -77.95584 172.432251 l -78.027264 169.82506 l -78.098688 171.737797 l -78.170112 169.012773 l -78.241536 169.631399 l -78.31296 169.570408 l -78.384384 172.147732 l -78.455808 169.977239 l -78.527232 170.737063 l -78.598656 171.440479 l -78.67008 171.155303 l -78.884352 169.804136 l -79.0272 172.158725 l -79.098624 170.048467 l -79.170048 171.105677 l -79.241472 169.728342 l -79.38432 172.744786 l -79.455744 170.009287 l -79.527168 172.518939 l -79.74144 169.413437 l -79.955712 174.103294 l -80.169984 169.084777 l -80.241408 169.616081 l -80.384256 173.15243 l -80.527104 167.631449 l -80.598528 171.868945 l -80.669952 170.044079 l -80.741376 170.38322 l -80.8128 168.152692 l -80.884224 172.044095 l -80.955648 169.215234 l -81.027072 171.813999 l -81.098496 170.833899 l -81.16992 171.437966 l -81.241344 168.82683 l -81.384192 170.839508 l -81.455616 169.646045 l -81.52704 170.478757 l -81.669888 173.775301 l -81.812736 171.443967 l -81.88416 168.632874 l -82.027008 171.239964 l -82.098432 170.976777 l -82.169856 169.75662 l -82.24128 170.689144 l -82.312704 169.666089 l -82.384128 169.964228 l -82.455552 171.937225 l -82.526976 171.836653 l -82.5984 168.51739 l -82.741248 172.286296 l -82.812672 171.608988 l -82.884096 175.203415 l -82.95552 170.151773 l -83.026944 171.685921 l -83.098368 170.370563 l -83.31264 173.225428 l -83.455488 169.868971 l -83.598336 169.970615 l -83.812608 172.479413 l -83.955456 169.6471 l -84.098304 173.122863 l -84.241152 170.760737 l -84.312576 170.314401 l -84.384 173.859803 l -84.598272 169.351077 l -84.74112 172.635905 l -84.812544 169.779358 l -84.883968 172.809644 l -84.955392 171.131452 l -85.026816 169.602858 l -85.09824 171.718285 l -85.169664 170.64558 l -85.526784 168.717471 l -85.669632 171.563719 l -85.741056 170.736531 l -85.81248 171.630305 l -85.883904 168.219009 l -85.955328 173.464245 l -86.026752 170.890262 l -86.098176 169.40958 l -86.1696 171.008486 l -86.241024 169.002592 l -86.312448 172.729691 l -86.383872 170.810425 l -86.455296 172.563215 l -86.52672 171.903685 l -86.598144 171.854743 l -86.740992 171.18866 l -86.812416 169.836848 l -86.88384 171.799189 l -86.955264 171.342998 l -87.026688 168.827283 l -87.098112 169.583322 l -87.24096 171.147693 l -87.312384 170.857192 l -87.383808 171.100039 l -87.455232 172.131787 l -87.59808 169.699772 l -87.740928 169.712382 l -87.883776 172.619025 l -87.9552 172.225561 l -88.026624 171.783861 l -88.098048 172.128384 l -88.169472 170.236537 l -88.240896 171.736565 l -88.31232 170.444389 l -88.383744 172.098916 l -88.455168 171.504917 l -88.598016 169.136613 l -88.66944 171.04587 l -88.812288 169.531234 l -88.883712 169.740285 l -88.955136 168.064386 l -89.169408 170.573261 l -89.240832 169.248951 l -89.312256 171.668893 l -89.38368 169.846904 l -89.597952 175.908425 l -89.669376 170.87253 l -89.7408 171.055271 l -89.812224 173.572563 l -89.955072 169.949164 l -90.09792 172.721357 l -90.169344 169.034335 l -90.240768 170.138182 l -90.312192 173.921055 l -90.383616 171.241283 l -90.45504 172.017273 l -90.526464 172.111242 l -90.597888 171.706401 l -90.669312 169.818858 l -90.740736 171.450564 l -90.81216 169.747596 l -90.883584 170.057996 l -90.955008 169.871299 l -91.026432 167.41817 l -91.097856 171.736407 l -91.16928 170.278211 l -91.240704 172.616623 l -91.312128 169.39123 l -91.383552 171.88465 l -91.5264 169.430758 l -91.597824 169.967803 l -91.669248 169.006754 l -91.740672 170.959257 l -91.812096 169.106915 l -91.954944 170.944182 l -92.026368 170.049304 l -92.097792 171.921044 l -92.169216 171.050767 l -92.24064 169.84738 l -92.312064 172.484864 l -92.383488 171.484513 l -92.526336 169.563312 l -92.59776 169.882725 l -92.669184 171.915769 l -92.740608 170.890409 l -92.883456 173.105263 l -93.097728 169.140044 l -93.383424 172.943372 l -93.526272 169.285542 l -93.597696 172.26296 l -93.66912 167.733609 l -93.740544 169.930966 l -93.811968 171.651734 l -93.954816 169.24476 l -94.02624 172.206898 l -94.097664 169.272337 l -94.240512 172.706439 l -94.38336 168.967223 l -94.454784 171.779373 l -94.526208 170.852284 l -94.597632 171.198643 l -94.669056 169.979399 l -94.74048 171.206386 l -94.811904 170.338002 l -95.026176 172.055192 l -95.169024 170.26858 l -95.240448 172.364183 l -95.383296 168.475509 l -95.597568 171.4112 l -95.668992 169.412489 l -95.740416 169.981898 l -95.81184 172.237982 l -95.883264 169.509873 l -95.954688 172.39477 l -96.026112 170.80091 l -96.240384 173.74321 l -96.311808 168.578931 l -96.383232 169.155779 l -96.52608 173.437364 l -96.597504 171.095734 l -96.668928 172.694055 l -96.740352 168.863286 l -96.811776 170.505184 l -96.8832 172.683266 l -97.026048 169.064311 l -97.097472 171.524375 l -97.168896 171.086287 l -97.24032 169.863262 l -97.383168 172.232164 l -97.454592 171.43939 l -97.526016 168.788812 l -97.668864 171.792814 l -97.740288 171.321664 l -97.883136 169.518748 l -98.025984 172.003688 l -98.097408 171.998027 l -98.168832 170.818864 l -98.240256 171.240642 l -98.383104 172.805168 l -98.6688 167.436818 l -98.811648 171.116492 l -98.954496 169.627564 l -99.02592 171.880531 l -99.097344 170.096301 l -99.240192 172.761066 l -99.454464 169.870033 l -99.525888 171.46381 l -99.597312 171.455159 l -99.74016 170.161384 l -99.811584 172.081611 l -99.883008 172.041942 l -99.954432 167.87069 l -100.025856 173.230276 l -100.09728 171.528343 l -100.168704 168.676108 l -100.311552 174.154068 l -100.382976 172.599874 l -100.4544 172.318112 l -100.525824 168.028544 l -100.668672 172.167074 l -100.81152 170.436767 l -100.882944 170.55139 l -100.954368 174.081847 l -101.097216 169.691204 l -101.16864 170.291589 l -101.240064 172.435855 l -101.382912 170.448799 l -101.454336 171.679919 l -101.52576 169.340065 l -101.668608 172.128595 l -101.740032 170.054401 l -101.811456 170.73282 l -101.88288 171.85347 l -101.954304 170.677607 l -102.025728 172.665298 l -102.168576 169.170373 l -102.24 170.254722 l -102.311424 169.230596 l -102.454272 172.67946 l -102.525696 169.086239 l -102.59712 175.041172 l -102.668544 172.473636 l -102.739968 168.539019 l -102.811392 172.218502 l -102.882816 171.809219 l -102.95424 172.859422 l -103.025664 171.277149 l -103.097088 171.374544 l -103.168512 171.716499 l -103.31136 169.82398 l -103.382784 172.802224 l -103.454208 171.799158 l -103.525632 171.898465 l -103.597056 169.881525 l -103.66848 170.006357 l -103.739904 170.18235 l -103.811328 169.781154 l -103.882752 172.117107 l -103.954176 168.89346 l -104.097024 173.709122 l -104.168448 171.293129 l -104.239872 171.878018 l -104.311296 171.682799 l -104.454144 169.287253 l -104.525568 171.989844 l -104.596992 170.675433 l -104.73984 172.022131 l -104.811264 171.333103 l -104.954112 169.218639 l -105.025536 171.617695 l -105.09696 170.285967 l -105.239808 170.790544 l -105.311232 168.40817 l -105.45408 173.009954 l -105.525504 170.767514 l -105.596928 170.060076 l -105.739776 172.158775 l -105.8112 168.166048 l -105.882624 170.506826 l -105.954048 168.466032 l -106.025472 170.434095 l -106.096896 169.291295 l -106.239744 172.094405 l -106.311168 170.836631 l -106.382592 172.218637 l -106.454016 171.438275 l -106.52544 167.147412 l -106.739712 175.143059 l -106.88256 170.931206 l -106.953984 172.007546 l -107.096832 169.819703 l -107.168256 171.05725 l -107.23968 169.765839 l -107.382528 175.000482 l -107.453952 167.607933 l -107.525376 169.278951 l -107.5968 173.033289 l -107.739648 167.863706 l -107.811072 171.554084 l -107.882496 170.765248 l -108.025344 171.231843 l -108.096768 170.536134 l -108.168192 168.421626 l -108.382464 174.025566 l -108.525312 169.055089 l -108.596736 171.889137 l -108.66816 170.654655 l -108.811008 173.086204 l -108.953856 170.567405 l -109.02528 171.846112 l -109.096704 169.846136 l -109.168128 171.376899 l -109.239552 170.249677 l -109.310976 173.353199 l -109.525248 167.698244 l -109.596672 171.157448 l -109.668096 170.91912 l -109.73952 169.237102 l -109.882368 173.099218 l -109.953792 170.394485 l -110.025216 172.735127 l -110.168064 169.989534 l -110.239488 171.460417 l -110.310912 171.456936 l -110.382336 171.359229 l -110.45376 171.761719 l -110.596608 168.44817 l -110.739456 170.865282 l -110.81088 169.93975 l -110.882304 169.287323 l -110.953728 172.191318 l -111.025152 171.568276 l -111.096576 170.422756 l -111.168 173.49184 l -111.310848 169.078322 l -111.453696 173.850103 l -111.52512 168.59428 l -111.596544 169.510671 l -111.667968 171.847201 l -111.739392 170.531534 l -111.810816 171.581421 l -111.88224 169.980676 l -111.953664 171.858744 l -112.025088 170.027143 l -112.096512 171.568669 l -112.167936 168.604653 l -112.23936 171.635321 l -112.310784 170.965805 l -112.382208 169.893474 l -112.525056 173.097419 l -112.667904 170.017921 l -112.739328 171.121635 l -112.810752 170.666515 l -112.882176 168.844955 l -113.025024 170.611841 l -113.096448 170.274631 l -113.239296 168.039801 l -113.31072 172.432317 l -113.382144 169.939673 l -113.453568 171.73409 l -113.524992 170.140431 l -113.66784 171.862975 l -113.810688 168.049105 l -113.953536 170.647028 l -114.02496 170.972914 l -114.096384 170.665064 l -114.167808 171.268613 l -114.310656 169.490754 l -114.38208 169.580257 l -114.524928 172.800649 l -114.667776 170.24132 l -114.953472 171.810526 l -115.09632 170.243839 l -115.167744 170.609007 l -115.310592 173.456357 l -115.524864 169.376498 l -115.739136 171.480281 l -115.81056 171.130406 l -115.881984 166.593297 l -115.953408 168.172318 l -116.096256 172.479613 l -116.239104 171.020692 l -116.310528 171.379704 l -116.453376 168.339812 l -116.5248 172.708108 l -116.596224 171.09515 l -116.667648 171.827586 l -116.739072 169.917766 l -116.88192 173.469073 l -116.953344 170.04408 l -117.024768 170.582285 l -117.096192 170.118137 l -117.167616 171.956795 l -117.23904 171.835214 l -117.310464 169.932646 l -117.381888 169.959453 l -117.453312 169.378156 l -117.524736 171.830145 l -117.59616 171.711173 l -117.667584 171.480213 l -117.881856 168.683653 l -118.024704 170.573601 l -118.096128 169.241985 l -118.238976 170.969467 l -118.3104 170.297608 l -118.381824 168.185771 l -118.453248 170.737654 l -118.524672 170.614791 l -118.66752 172.797346 l -118.738944 169.678194 l -118.810368 170.881808 l -118.881792 171.272915 l -119.096064 170.404128 l -119.167488 169.357226 l -119.238912 173.018312 l -119.310336 172.309251 l -119.38176 173.172192 l -119.453184 172.570145 l -119.596032 167.629069 l -119.667456 173.437817 l -119.73888 170.510771 l -119.810304 169.645551 l -119.953152 170.639026 l -120.024576 166.97743 l -120.096 171.16586 l -120.167424 171.074669 l -120.238848 170.561545 l -120.381696 171.734324 l -120.524544 170.020697 l -120.595968 172.209855 l -120.738816 170.155711 l -120.81024 171.682475 l -120.881664 171.52186 l -121.024512 170.477114 l -121.095936 171.620079 l -121.238784 170.051905 l -121.310208 173.970403 l -121.453056 168.652887 l -121.52448 172.275369 l -121.595904 170.611602 l -121.667328 168.220129 l -121.810176 174.27555 l -121.8816 169.476635 l -121.953024 171.621908 l -122.024448 171.230211 l -122.167296 172.203513 l -122.310144 169.176465 l -122.381568 171.407532 l -122.452992 169.309664 l -122.59584 173.073145 l -122.667264 172.590417 l -122.810112 170.129585 l -122.881536 170.280453 l -122.95296 172.438203 l -123.095808 168.407093 l -123.31008 174.580305 l -123.452928 168.339004 l -123.524352 169.525206 l -123.595776 172.600036 l -123.6672 169.823229 l -123.738624 171.341455 l -123.810048 169.632963 l -123.881472 171.047382 l -123.952896 169.148229 l -124.167168 171.837404 l -124.310016 167.575988 l -124.452864 173.432927 l -124.524288 171.547436 l -124.595712 172.491326 l -124.667136 172.761579 l -124.73856 168.483763 l -124.809984 170.710073 l -124.952832 173.456462 l -125.024256 170.791113 l -125.09568 171.865198 l -125.167104 171.781372 l -125.238528 170.373889 l -125.309952 171.138587 l -125.381376 175.341341 l -125.4528 168.504264 l -125.524224 169.564958 l -125.667072 172.881847 l -125.738496 172.36587 l -125.881344 167.450659 l -126.095616 173.557116 l -126.16704 170.998664 l -126.238464 171.397736 l -126.309888 172.63178 l -126.381312 169.31119 l -126.595584 173.795056 l -126.667008 170.042491 l -126.738432 172.04587 l -126.809856 168.80809 l -126.88128 170.547823 l -126.952704 175.874872 l -127.024128 170.869046 l -127.095552 173.14024 l -127.2384 169.452737 l -127.309824 170.183691 l -127.381248 172.258974 l -127.452672 169.494957 l -127.666944 174.385282 l -127.738368 170.873613 l -127.809792 172.961575 l -127.881216 171.911248 l -128.024064 169.06338 l -128.095488 174.464527 l -128.166912 170.648245 l -128.238336 172.487796 l -128.452608 171.003069 l -128.524032 170.800471 l -128.595456 171.701308 l -128.66688 169.997942 l -128.738304 174.482019 l -128.809728 171.000267 l -128.881152 172.29151 l -128.952576 169.743488 l -129.024 172.30387 l -129.095424 172.253251 l -129.238272 173.512253 l -129.309696 170.020331 l -129.38112 170.809361 l -129.452544 171.71674 l -129.523968 170.96994 l -129.595392 173.209206 l -129.73824 170.718202 l -129.809664 171.53246 l -129.881088 171.195284 l -129.952512 169.640011 l -130.023936 172.028296 l -130.238208 169.890181 l -130.381056 174.454457 l -130.523904 168.681 l -130.8096 172.124175 l -130.881024 171.006219 l -130.952448 172.993922 l -131.023872 172.002667 l -131.095296 172.305753 l -131.16672 174.995389 l -131.309568 170.68601 l -131.380992 171.077412 l -131.452416 175.282996 l -131.595264 171.859589 l -131.666688 173.250245 l -131.809536 170.207889 l -131.88096 170.602312 l -131.952384 171.50726 l -132.023808 171.246921 l -132.095232 170.437707 l -132.166656 171.518365 l -132.23808 170.31038 l -132.309504 172.722039 l -132.523776 168.963817 l -132.5952 169.500084 l -132.666624 172.09505 l -132.738048 168.691085 l -132.809472 170.581984 l -132.880896 172.78442 l -133.095168 169.654144 l -133.166592 169.630869 l -133.30944 172.109015 l -133.380864 171.352272 l -133.452288 171.660779 l -133.523712 170.657268 l -133.595136 172.329235 l -133.66656 170.965607 l -133.809408 174.201438 l -133.952256 170.101961 l -134.095104 172.763159 l -134.166528 172.712778 l -134.237952 172.041637 l -134.309376 169.28509 l -134.3808 169.915589 l -134.595072 172.776387 l -134.666496 168.044123 l -134.73792 172.952962 l -134.809344 170.979507 l -134.880768 169.617761 l -134.952192 173.846358 l -135.023616 168.3911 l -135.09504 172.15132 l -135.166464 170.384614 l -135.237888 170.585802 l -135.309312 173.101862 l -135.380736 172.115795 l -135.45216 170.121336 l -135.523584 173.916555 l -135.595008 168.876038 l -135.666432 169.99835 l -135.737856 172.220525 l -135.80928 170.220897 l -135.880704 170.893885 l -136.023552 169.493182 l -136.094976 172.120293 l -136.1664 169.160975 l -136.237824 169.907477 l -136.452096 172.842308 l -136.52352 170.120188 l -136.594944 170.733779 l -136.666368 169.638358 l -136.737792 170.653307 l -136.809216 169.219754 l -136.952064 173.260319 l -137.023488 172.493646 l -137.166336 170.425557 l -137.23776 172.556436 l -137.380608 170.8987 l -137.452032 173.299288 l -137.523456 171.299329 l -137.59488 171.525675 l -137.666304 172.233279 l -137.737728 170.156322 l -137.809152 172.548297 l -137.880576 170.905145 l -137.952 173.126065 l -138.023424 170.826425 l -138.094848 171.795121 l -138.166272 169.984785 l -138.237696 172.47314 l -138.30912 168.12248 l -138.380544 170.375708 l -138.451968 170.655179 l -138.523392 169.892299 l -138.594816 175.294578 l -138.66624 172.379966 l -138.737664 172.10664 l -138.809088 173.394479 l -138.880512 168.599409 l -138.951936 169.050409 l -139.094784 171.433048 l -139.166208 169.531331 l -139.237632 171.291696 l -139.309056 170.537258 l -139.38048 170.115334 l -139.451904 168.396651 l -139.594752 172.767588 l -139.666176 171.121336 l -139.809024 174.137025 l -139.951872 171.193679 l -140.09472 171.633365 l -140.166144 170.516992 l -140.308992 173.440982 l -140.380416 166.892568 l -140.45184 173.055782 l -140.523264 171.347019 l -140.737536 170.818282 l -140.80896 173.918576 l -140.951808 168.785719 l -141.023232 173.259471 l -141.094656 172.279852 l -141.16608 170.528387 l -141.237504 172.90538 l -141.308928 172.868388 l -141.380352 170.336282 l -141.451776 172.667244 l -141.5232 168.427929 l -141.666048 172.285943 l -141.737472 170.210407 l -141.88032 173.627018 l -141.951744 170.845062 l -142.023168 171.561901 l -142.166016 169.773775 l -142.23744 172.043344 l -142.308864 168.518535 l -142.380288 169.770305 l -142.451712 173.61862 l -142.523136 171.737519 l -142.665984 169.317302 l -142.808832 170.901514 l -142.95168 171.576352 l -143.023104 168.861833 l -143.094528 171.53577 l -143.165952 169.610479 l -143.3088 173.556673 l -143.451648 169.977651 l -143.523072 170.212506 l -143.594496 170.154645 l -143.66592 172.064042 l -143.737344 169.546725 l -143.808768 173.109934 l -143.880192 172.26042 l -144.02304 170.320644 l -144.094464 172.03814 l -144.237312 168.077787 l -144.308736 172.344383 l -144.38016 171.699473 l -144.451584 171.702555 l -144.594432 172.313992 l -144.808704 170.118358 l -144.880128 168.150579 l -145.022976 171.77433 l -145.0944 169.95756 l -145.165824 172.54632 l -145.237248 170.885289 l -145.308672 174.098766 l -145.380096 170.669952 l -145.45152 171.869376 l -145.522944 172.172015 l -145.594368 170.353507 l -145.665792 173.042829 l -145.737216 172.688924 l -145.80864 170.236829 l -145.880064 171.311346 l -145.951488 173.355489 l -146.022912 172.671592 l -146.308608 168.599314 l -146.380032 170.675861 l -146.451456 169.634667 l -146.52288 168.609884 l -146.594304 170.722195 l -146.665728 169.137102 l -146.737152 172.110081 l -146.808576 171.046412 l -146.88 170.996735 l -146.951424 169.927619 l -147.022848 171.561469 l -147.094272 169.093573 l -147.308544 171.737523 l -147.379968 170.051044 l -147.451392 171.626283 l -147.59424 170.386223 l -147.665664 170.804133 l -147.737088 172.38044 l -147.95136 169.132704 l -148.094208 174.713453 l -148.30848 168.537953 l -148.451328 173.637547 l -148.6656 168.462756 l -148.737024 172.036088 l -148.808448 169.253921 l -148.879872 171.132585 l -148.951296 170.527171 l -149.02272 170.784729 l -149.094144 172.156999 l -149.165568 169.879467 l -149.236992 171.207839 l -149.308416 170.448266 l -149.451264 171.406387 l -149.594112 168.75843 l -149.808384 172.103093 l -149.951232 168.774936 l -150.09408 172.754662 l -150.165504 170.406991 l -150.236928 172.704686 l -150.308352 168.881715 l -150.379776 170.380525 l -150.4512 169.892986 l -150.522624 174.735763 l -150.594048 171.766266 l -150.665472 173.129229 l -150.736896 172.390654 l -150.80832 168.557928 l -150.879744 170.799317 l -150.951168 169.928893 l -151.022592 171.032776 l -151.094016 170.829026 l -151.16544 168.835757 l -151.379712 174.831141 l -151.52256 171.297911 l -151.593984 170.89532 l -151.665408 172.21462 l -151.736832 169.921059 l -151.951104 173.925091 l -152.093952 169.848192 l -152.2368 173.691288 l -152.308224 170.82881 l -152.379648 171.083967 l -152.451072 171.319473 l -152.522496 169.8935 l -152.59392 169.898987 l -152.665344 169.567727 l -152.879616 172.300734 l -153.093888 169.044308 l -153.165312 172.632726 l -153.236736 170.886732 l -153.30816 169.816368 l -153.379584 170.63072 l -153.451008 173.244924 l -153.522432 169.832666 l -153.593856 170.059076 l -153.808128 172.603136 l -153.879552 170.053021 l -153.950976 171.226955 l -154.0224 170.168148 l -154.165248 173.420164 l -154.308096 169.738656 l -154.37952 169.441009 l -154.450944 168.432162 l -154.593792 173.926918 l -154.665216 172.67439 l -154.73664 171.808664 l -154.808064 168.599103 l -154.879488 171.946319 l -154.950912 170.725312 l -155.022336 173.382803 l -155.09376 171.484501 l -155.165184 172.432561 l -155.236608 171.897654 l -155.308032 168.963812 l -155.379456 169.918883 l -155.522304 173.459366 l -155.665152 171.120548 l -155.736576 172.432195 l -155.808 168.863 l -155.879424 171.080744 l -155.950848 169.27837 l -156.022272 173.695406 l -156.093696 171.304493 l -156.16512 170.091275 l -156.236544 170.268568 l -156.307968 169.750481 l -156.379392 172.645931 l -156.450816 169.710832 l -156.52224 173.243913 l -156.593664 169.658186 l -156.665088 170.596673 l -156.736512 172.091029 l -156.807936 170.343766 l -156.87936 170.816142 l -156.950784 171.660361 l -157.165056 168.442915 l -157.307904 171.625243 l -157.379328 169.632795 l -157.450752 169.763351 l -157.5936 172.418803 l -157.665024 169.738397 l -157.736448 170.8732 l -157.807872 173.907828 l -158.022144 169.780364 l -158.093568 171.848536 l -158.164992 171.387193 l -158.30784 169.604821 l -158.379264 171.986663 l -158.450688 171.819386 l -158.66496 167.543745 l -158.879232 171.883864 l -159.02208 172.671521 l -159.236352 166.980508 l -159.450624 172.945373 l -159.522048 171.248496 l -159.593472 171.911621 l -159.73632 170.523493 l -159.807744 173.083127 l -159.950592 169.554519 l -160.022016 172.227393 l -160.09344 169.373601 l -160.164864 170.625525 l -160.236288 171.156611 l -160.307712 169.539576 l -160.379136 172.418116 l -160.45056 170.034121 l -160.521984 170.818374 l -160.593408 172.215959 l -160.80768 169.503007 l -160.879104 169.958412 l -160.950528 169.250679 l -161.021952 173.961336 l -161.093376 171.565673 l -161.1648 169.354984 l -161.236224 172.64288 l -161.307648 171.322456 l -161.379072 171.856508 l -161.450496 170.111779 l -161.52192 170.462218 l -161.593344 173.28364 l -161.807616 168.743547 l -161.87904 171.892909 l -161.950464 169.662347 l -162.021888 170.370261 l -162.093312 171.394569 l -162.164736 171.020972 l -162.23616 171.550601 l -162.450432 168.436046 l -162.521856 172.817988 l -162.59328 170.46839 l -162.664704 170.651349 l -162.807552 172.518491 l -162.9504 168.884617 l -163.021824 169.354355 l -163.093248 169.191431 l -163.164672 169.567362 l -163.236096 168.861558 l -163.30752 172.145327 l -163.378944 170.9989 l -163.450368 170.441957 l -163.593216 171.114173 l -163.66464 168.70555 l -163.736064 171.919669 l -163.807488 171.493881 l -163.878912 168.777806 l -164.093184 172.045497 l -164.164608 172.003293 l -164.236032 169.60235 l -164.307456 173.348138 l -164.37888 169.740916 l -164.450304 171.373259 l -164.521728 170.523843 l -164.593152 171.394317 l -164.664576 171.330002 l -164.736 170.082296 l -164.807424 174.334349 l -165.021696 169.734546 l -165.164544 172.026069 l -165.235968 170.254798 l -165.307392 171.719531 l -165.378816 171.161427 l -165.45024 171.038018 l -165.521664 169.049575 l -165.664512 171.19038 l -165.735936 171.029891 l -165.80736 170.59564 l -165.878784 171.23869 l -165.950208 169.702862 l -166.021632 172.275101 l -166.093056 168.63612 l -166.307328 173.371628 l -166.378752 171.996995 l -166.450176 172.877052 l -166.5216 169.006128 l -166.593024 172.212474 l -166.664448 171.899297 l -166.807296 170.181695 l -166.87872 173.125731 l -167.021568 170.4418 l -167.092992 172.043277 l -167.164416 169.710707 l -167.23584 171.95766 l -167.307264 169.960921 l -167.378688 170.187032 l -167.521536 172.7132 l -167.59296 170.991062 l -167.664384 172.882498 l -167.735808 171.951442 l -167.807232 173.037141 l -167.878656 170.903538 l -167.95008 172.562499 l -168.235776 167.937332 l -168.378624 172.34686 l -168.450048 173.163092 l -168.66432 169.28737 l -168.735744 169.718477 l -168.807168 170.855743 l -168.878592 169.374713 l -168.950016 171.501968 l -169.092864 169.847389 l -169.235712 171.087773 l -169.307136 169.229292 l -169.37856 170.259921 l -169.449984 172.117889 l -169.521408 171.197563 l -169.592832 167.847124 l -169.807104 172.511431 l -169.878528 173.279995 l -169.949952 167.325592 l -170.021376 172.081428 l -170.0928 171.537715 l -170.164224 170.858809 l -170.235648 168.955562 l -170.378496 172.341537 l -170.44992 171.965966 l -170.521344 170.349919 l -170.592768 170.826989 l -170.735616 171.236142 l -170.80704 170.951573 l -170.878464 173.063027 l -170.949888 172.720977 l -171.092736 171.784662 l -171.16416 171.94249 l -171.235584 171.633039 l -171.307008 173.08485 l -171.449856 169.39496 l -171.52128 174.091557 l -171.592704 172.98689 l -171.8784 170.156174 l -171.949824 171.413585 l -172.021248 170.023239 l -172.164096 174.48504 l -172.23552 170.12641 l -172.306944 171.536281 l -172.449792 169.42467 l -172.521216 170.500133 l -172.59264 170.059696 l -172.664064 169.032606 l -172.806912 171.680079 l -172.878336 171.527421 l -172.94976 172.407744 l -173.021184 171.177199 l -173.092608 171.494166 l -173.164032 170.937866 l -173.30688 172.437437 l -173.378304 172.204193 l -173.449728 170.419743 l -173.521152 172.75205 l -173.664 169.220396 l -173.806848 172.074045 l -173.878272 170.342102 l -174.02112 171.725576 l -174.092544 171.772997 l -174.163968 173.794959 l -174.235392 170.367887 l -174.37824 174.197056 l -174.521088 171.956533 l -174.592512 172.938654 l -174.73536 169.366322 l -174.806784 172.802976 l -174.878208 169.112445 l -174.949632 171.7468 l -175.021056 170.426732 l -175.163904 167.947878 l -175.235328 169.247618 l -175.306752 168.860744 l -175.378176 172.270518 l -175.521024 168.954613 l -175.592448 172.737987 l -175.663872 171.720234 l -175.735296 170.307501 l -175.949568 173.909985 l -176.020992 170.082192 l -176.092416 170.443285 l -176.16384 172.278425 l -176.235264 168.831457 l -176.378112 172.019204 l -176.592384 169.437143 l -176.735232 172.402876 l -176.806656 172.345751 l -176.87808 170.453844 l -176.949504 174.022171 l -177.020928 172.608432 l -177.163776 170.68223 l -177.2352 172.402495 l -177.306624 170.082882 l -177.378048 171.08261 l -177.449472 173.321186 l -177.520896 170.280073 l -177.59232 172.102528 l -177.735168 168.683203 l -177.878016 174.861159 l -178.020864 169.951581 l -178.235136 172.945125 l -178.30656 171.576496 l -178.377984 171.67265 l -178.449408 173.730663 l -178.520832 167.644775 l -178.592256 169.98568 l -178.66368 173.924732 l -178.806528 170.460725 l -178.877952 171.236831 l -179.0208 169.05462 l -179.092224 172.746309 l -179.163648 170.936371 l -179.306496 167.722751 l -179.449344 172.578517 l -179.663616 169.119211 l -179.73504 173.564479 l -179.806464 172.662512 l -179.877888 169.873782 l -179.949312 170.652924 l -180.020736 170.755904 l -180.09216 171.282132 l -180.163584 169.111034 l -180.306432 172.973823 l -180.377856 170.371765 l -180.520704 173.477312 l -180.663552 167.263229 l -180.8064 172.265992 l -181.020672 168.524233 l -181.092096 175.117319 l -181.16352 171.962391 l -181.234944 171.135859 l -181.306368 171.660282 l -181.449216 170.031656 l -181.52064 170.690911 l -181.592064 169.643122 l -181.663488 169.945672 l -181.87776 173.39476 l -181.949184 169.047091 l -182.020608 169.357473 l -182.23488 173.944069 l -182.306304 172.046363 l -182.377728 169.79758 l -182.449152 170.223208 l -182.520576 170.949213 l -182.592 173.493748 l -182.663424 170.063381 l -182.734848 170.361556 l -182.806272 170.248939 l -182.877696 172.218066 l -182.94912 170.586587 l -183.020544 172.240075 l -183.30624 167.920192 l -183.449088 173.140602 l -183.520512 170.255746 l -183.591936 171.553666 l -183.66336 172.182074 l -183.734784 171.509446 l -183.806208 173.452478 l -184.02048 171.318379 l -184.091904 171.137025 l -184.163328 171.49413 l -184.234752 170.53211 l -184.306176 170.849834 l -184.3776 171.016268 l -184.449024 170.072671 l -184.591872 174.38226 l -184.806144 168.549958 l -184.877568 170.981456 l -184.948992 170.402699 l -185.09184 172.340126 l -185.234688 168.199841 l -185.306112 171.837216 l -185.377536 169.737933 l -185.44896 172.144637 l -185.520384 170.862957 l -185.591808 170.600538 l -185.663232 171.673762 l -185.734656 169.692362 l -185.80608 171.616613 l -185.877504 171.0519 l -186.020352 169.693632 l -186.091776 171.97655 l -186.1632 171.253212 l -186.306048 168.849995 l -186.377472 170.733042 l -186.448896 168.991938 l -186.663168 172.536861 l -186.734592 169.463184 l -186.806016 169.859311 l -186.87744 169.702719 l -186.948864 170.318295 l -187.020288 168.389801 l -187.091712 172.693929 l -187.163136 170.344329 l -187.23456 169.917351 l -187.305984 170.622257 l -187.377408 169.481515 l -187.448832 171.213293 l -187.520256 169.553361 l -187.59168 171.966279 l -187.663104 170.742393 l -187.734528 171.063838 l -187.877376 168.169944 l -187.9488 171.969091 l -188.020224 169.584397 l -188.091648 171.624604 l -188.163072 171.540987 l -188.30592 169.835328 l -188.377344 176.129731 l -188.448768 169.809492 l -188.520192 170.883299 l -188.66304 168.849013 l -188.734464 172.051001 l -188.805888 169.883218 l -188.877312 173.456814 l -189.02016 170.868656 l -189.091584 170.83177 l -189.163008 171.959314 l -189.234432 168.274403 l -189.305856 172.106526 l -189.37728 170.392393 l -189.448704 173.006692 l -189.520128 169.316434 l -189.591552 172.286827 l -189.662976 168.995644 l -189.7344 169.581375 l -189.877248 173.182048 l -189.948672 169.487277 l -190.020096 169.985421 l -190.09152 168.616311 l -190.234368 173.121763 l -190.377216 171.172533 l -190.44864 173.107386 l -190.520064 172.113361 l -190.591488 170.837018 l -190.662912 172.126158 l -190.734336 171.425476 l -190.80576 169.909696 l -191.091456 175.448497 l -191.16288 167.580906 l -191.234304 171.792422 l -191.52 169.67983 l -191.591424 171.629577 l -191.662848 169.366674 l -191.734272 170.043269 l -191.87712 172.424458 l -191.948544 171.971255 l -192.091392 168.378636 l -192.23424 171.820596 l -192.305664 170.142105 l -192.377088 171.156387 l -192.59136 169.098338 l -192.734208 171.057738 l -192.805632 169.739519 l -192.877056 169.903689 l -192.94848 172.34322 l -193.091328 170.107271 l -193.162752 171.181202 l -193.3056 170.150719 l -193.377024 170.28605 l -193.448448 171.291057 l -193.519872 171.206608 l -193.591296 169.863117 l -193.734144 170.930782 l -193.805568 169.924894 l -193.876992 170.060508 l -193.948416 173.575634 l -194.01984 170.289132 l -194.091264 174.049141 l -194.162688 170.566027 l -194.234112 171.31787 l -194.305536 171.438122 l -194.448384 169.46044 l -194.519808 172.249726 l -194.591232 168.911425 l -194.662656 172.659285 l -194.73408 171.420824 l -194.805504 170.000837 l -194.876928 170.665985 l -194.948352 170.506359 l -195.019776 171.321088 l -195.0912 170.988123 l -195.162624 171.400881 l -195.234048 170.446603 l -195.305472 172.484874 l -195.376896 171.487316 l -195.519744 170.17313 l -195.662592 172.182266 l -195.734016 170.214581 l -195.80544 170.831169 l -195.876864 169.506699 l -195.948288 170.832595 l -196.019712 169.742313 l -196.16256 171.303138 l -196.233984 169.551164 l -196.305408 172.941208 l -196.376832 170.149663 l -196.448256 170.256772 l -196.51968 172.611274 l -196.591104 170.589216 l -196.662528 171.220253 l -196.733952 171.65244 l -196.805376 173.541971 l -196.8768 172.293828 l -196.948224 168.492966 l -197.019648 170.202763 l -197.091072 169.919487 l -197.162496 174.05935 l -197.23392 173.096335 l -197.376768 171.450009 l -197.448192 171.794912 l -197.519616 167.790689 l -197.59104 171.61162 l -197.662464 167.007782 l -197.733888 172.688844 l -197.805312 170.42521 l -197.876736 170.106736 l -197.94816 168.233943 l -198.162432 172.908796 l -198.233856 175.272118 l -198.376704 169.629146 l -198.448128 172.117099 l -198.519552 170.86952 l -198.590976 172.348908 l -198.6624 169.026068 l -198.805248 172.785667 l -198.876672 168.192851 l -198.948096 170.300782 l -199.01952 169.139459 l -199.233792 171.940573 l -199.305216 167.769994 l -199.448064 171.081804 l -199.519488 171.098344 l -199.590912 170.719737 l -199.805184 172.611371 l -199.876608 172.668649 l -199.948032 170.156347 l -200.019456 171.560465 l -200.162304 169.222908 l -200.305152 172.425116 l -200.376576 169.234316 l -200.448 170.105589 l -200.519424 173.161404 l -200.733696 168.65217 l -200.80512 173.18426 l -200.876544 172.682706 l -200.947968 171.330596 l -201.019392 171.859741 l -201.090816 171.52365 l -201.16224 172.217253 l -201.233664 169.395877 l -201.305088 172.696154 l -201.376512 167.700843 l -201.447936 172.853822 l -201.51936 170.98774 l -201.590784 168.242476 l -201.662208 173.502481 l -201.733632 173.065936 l -201.805056 174.4247 l -201.87648 170.556671 l -201.947904 170.718958 l -202.019328 170.386487 l -202.090752 174.021463 l -202.162176 170.756129 l -202.2336 171.969407 l -202.447872 169.150659 l -202.59072 174.999108 l -202.733568 169.122557 l -202.876416 174.247993 l -202.94784 169.626366 l -203.019264 170.492755 l -203.090688 175.265175 l -203.233536 171.339032 l -203.447808 172.287582 l -203.66208 170.245951 l -203.876352 172.39968 l -204.0192 168.932328 l -204.090624 171.827707 l -204.162048 169.262269 l -204.233472 172.962766 l -204.37632 170.713845 l -204.447744 170.205983 l -204.519168 170.355696 l -204.590592 172.545817 l -204.73344 168.040223 l -204.804864 171.967853 l -204.876288 170.916883 l -204.947712 173.169158 l -205.09056 168.85808 l -205.161984 169.213723 l -205.233408 173.403118 l -205.304832 170.295548 l -205.376256 171.919107 l -205.44768 172.962076 l -205.661952 170.36708 l -205.8048 169.17049 l -205.876224 170.288898 l -205.947648 169.481269 l -206.16192 173.524023 l -206.376192 170.194803 l -206.447616 172.065469 l -206.51904 170.786938 l -206.590464 172.157598 l -206.733312 168.424105 l -206.947584 173.538857 l -207.161856 169.57918 l -207.23328 170.290669 l -207.304704 172.495435 l -207.447552 169.613371 l -207.518976 173.169954 l -207.5904 172.404283 l -207.733248 170.831568 l -207.804672 173.354432 l -207.876096 173.145497 l -208.018944 169.914002 l -208.161792 172.425734 l -208.233216 168.94592 l -208.30464 170.223898 l -208.447488 169.171596 l -208.590336 172.478148 l -208.733184 171.603852 l -208.876032 171.334944 l -208.947456 169.481504 l -209.01888 170.284636 l -209.161728 171.764643 l -209.233152 170.613579 l -209.304576 171.252632 l -209.376 171.377886 l -209.518848 172.423542 l -209.590272 172.058603 l -209.73312 168.287982 l -209.875968 172.917486 l -210.018816 166.474187 l -210.09024 171.392572 l -210.161664 170.741606 l -210.233088 172.839335 l -210.304512 171.984673 l -210.375936 173.251913 l -210.518784 168.218338 l -210.590208 174.039158 l -210.661632 173.599607 l -210.947328 167.332497 l -211.1616 172.974047 l -211.233024 169.855404 l -211.304448 170.194765 l -211.447296 174.165721 l -211.51872 170.218248 l -211.590144 171.825564 l -211.732992 170.495006 l -211.804416 170.658399 l -211.87584 169.896357 l -211.947264 172.453015 l -212.090112 168.509611 l -212.161536 170.619472 l -212.23296 168.355983 l -212.304384 172.503785 l -212.375808 170.820595 l -212.518656 169.481811 l -212.59008 169.676887 l -212.661504 170.882362 l -212.732928 170.465492 l -212.804352 169.777269 l -212.9472 172.778436 l -213.018624 172.65916 l -213.161472 169.920352 l -213.30432 173.688307 l -213.375744 171.64635 l -213.447168 173.003395 l -213.66144 169.658524 l -213.804288 171.937323 l -213.875712 171.413414 l -213.947136 169.1556 l -214.01856 171.129362 l -214.089984 170.651649 l -214.232832 171.845564 l -214.304256 169.907951 l -214.37568 171.961347 l -214.447104 171.248848 l -214.518528 172.687105 l -214.589952 172.603662 l -214.661376 170.054922 l -214.7328 171.436595 l -214.804224 170.097529 l -214.875648 172.1026 l -214.947072 169.061835 l -215.08992 172.653418 l -215.161344 173.195859 l -215.304192 169.637377 l -215.518464 171.907034 l -215.661312 171.091552 l -215.732736 171.919653 l -215.80416 170.987184 l -215.947008 172.74128 l -216.089856 168.801904 l -216.16128 169.692063 l -216.232704 172.978941 l -216.304128 172.379934 l -216.375552 169.80472 l -216.446976 170.591049 l -216.589824 171.748851 l -216.661248 173.983786 l -216.87552 170.327044 l -217.089792 173.33893 l -217.161216 172.535557 l -217.304064 168.570396 l -217.375488 171.991559 l -217.446912 171.281164 l -217.518336 171.388535 l -217.58976 172.265814 l -217.661184 169.891002 l -217.732608 170.075197 l -217.804032 171.461768 l -217.875456 171.409915 l -217.94688 171.608599 l -218.018304 169.959419 l -218.161152 171.513851 l -218.232576 170.624359 l -218.304 170.778731 l -218.375424 171.962826 l -218.518272 168.604939 l -218.589696 172.290119 l -218.66112 169.964985 l -218.732544 172.53775 l -218.803968 171.225642 l -218.946816 168.172402 l -219.161088 172.660843 l -219.232512 171.807607 l -219.303936 167.463038 l -219.518208 174.70008 l -219.661056 168.587875 l -219.803904 172.437972 l -219.946752 169.424413 l -220.018176 172.389006 l -220.0896 171.838568 l -220.232448 169.620784 l -220.303872 171.576183 l -220.44672 168.375093 l -220.518144 168.626241 l -220.660992 173.286937 l -220.80384 171.544614 l -220.875264 172.570213 l -221.018112 168.624889 l -221.089536 169.806941 l -221.232384 174.583843 l -221.375232 169.334221 l -221.446656 173.574401 l -221.51808 170.453216 l -221.589504 171.01311 l -221.660928 170.943151 l -221.732352 171.858051 l -221.803776 169.959567 l -221.8752 172.20144 l -221.946624 171.389067 l -222.018048 171.067501 l -222.089472 168.981449 l -222.160896 169.091072 l -222.303744 171.836231 l -222.375168 169.546365 l -222.518016 173.058282 l -222.732288 168.753903 l -222.875136 172.018759 l -223.017984 167.031014 l -223.089408 171.84039 l -223.160832 171.789085 l -223.30368 172.493201 l -223.446528 171.051839 l -223.589376 174.131875 l -223.6608 169.695213 l -223.732224 171.197113 l -223.803648 172.861848 l -223.875072 172.705919 l -223.946496 173.293211 l -224.01792 173.112815 l -224.089344 170.536774 l -224.160768 170.657465 l -224.303616 173.057034 l -224.37504 169.147428 l -224.446464 170.65584 l -224.517888 172.007395 l -224.589312 171.279515 l -224.73216 169.832653 l -224.803584 173.559749 l -224.875008 171.223216 l -224.946432 171.28942 l -225.017856 170.651994 l -225.08928 170.78561 l -225.160704 168.138008 l -225.232128 169.472456 l -225.303552 169.636608 l -225.374976 172.45296 l -225.4464 171.415221 l -225.589248 172.898149 l -225.660672 170.970253 l -225.732096 171.261822 l -225.80352 170.993478 l -225.946368 172.035394 l -226.089216 169.752042 l -226.16064 173.282532 l -226.232064 172.631188 l -226.303488 173.501342 l -226.374912 171.893546 l -226.446336 166.89719 l -226.51776 171.528006 l -226.589184 170.705613 l -226.660608 170.461123 l -226.732032 172.047549 l -226.803456 171.207588 l -226.87488 171.023356 l -226.946304 173.943342 l -227.017728 173.755051 l -227.232 168.997098 l -227.303424 168.922833 l -227.374848 170.040467 l -227.446272 169.015755 l -227.517696 170.899731 l -227.58912 168.659792 l -227.660544 169.419498 l -227.731968 172.696196 l -227.803392 171.043839 l -227.874816 173.295797 l -227.94624 172.753373 l -228.089088 168.187339 l -228.160512 169.777709 l -228.231936 174.137007 l -228.30336 169.041888 l -228.374784 173.895129 l -228.446208 171.374348 l -228.517632 170.253409 l -228.589056 170.279732 l -228.66048 170.333727 l -228.731904 169.058985 l -228.803328 172.821648 l -228.874752 171.515194 l -228.946176 172.467704 l -229.0176 170.789859 l -229.089024 171.080914 l -229.160448 170.375081 l -229.303296 171.480438 l -229.37472 171.243506 l -229.446144 169.996838 l -229.517568 170.592311 l -229.588992 174.040713 l -229.73184 170.296419 l -229.803264 169.654692 l -229.874688 170.411633 l -229.946112 169.11662 l -230.017536 173.082158 l -230.08896 169.670096 l -230.160384 172.221945 l -230.303232 169.610119 l -230.374656 170.932796 l -230.44608 169.891972 l -230.660352 173.503093 l -230.731776 169.878396 l -230.8032 172.841866 l -230.874624 171.365239 l -230.946048 172.718371 l -231.16032 169.069854 l -231.231744 169.412626 l -231.446016 170.535107 l -231.51744 170.208741 l -231.588864 171.158832 l -231.660288 170.551936 l -231.731712 173.1739 l -231.803136 166.938438 l -231.87456 171.636806 l -231.945984 170.202395 l -232.160256 171.954532 l -232.303104 171.353274 l -232.374528 166.728743 l -232.5888 172.504117 l -232.660224 170.000347 l -232.731648 170.669413 l -232.803072 170.274826 l -233.017344 173.086728 l -233.160192 168.665431 l -233.231616 172.002586 l -233.30304 168.909786 l -233.517312 173.548994 l -233.66016 170.658477 l -233.731584 172.576399 l -233.874432 169.657217 l -233.945856 170.718112 l -234.01728 167.725025 l -234.160128 171.718003 l -234.231552 172.610015 l -234.3744 169.664519 l -234.445824 171.007654 l -234.517248 168.524399 l -234.802944 173.978605 l -234.945792 170.423553 l -235.017216 172.69593 l -235.08864 170.523483 l -235.160064 170.565609 l -235.231488 171.783161 l -235.302912 170.780919 l -235.374336 171.983319 l -235.44576 171.718795 l -235.588608 168.160871 l -235.660032 170.933428 l -235.731456 169.813548 l -235.945728 173.322196 l -236.16 169.027547 l -236.231424 169.839234 l -236.302848 173.930812 l -236.51712 168.574675 l -236.659968 171.458203 l -236.731392 168.373636 l -236.87424 172.910951 l -237.088512 169.735993 l -237.159936 172.326896 l -237.302784 170.655581 l -237.517056 172.852902 l -237.659904 169.818617 l -237.802752 171.797308 l -237.874176 170.311539 l -237.9456 172.132739 l -238.017024 168.392481 l -238.088448 171.952105 l -238.159872 170.88246 l -238.231296 172.729136 l -238.30272 168.242934 l -238.445568 172.50291 l -238.516992 172.508745 l -238.588416 173.440534 l -238.65984 168.701111 l -238.731264 172.127217 l -238.802688 170.741905 l -238.945536 174.254786 l -239.088384 169.751742 l -239.159808 171.437106 l -239.231232 167.26276 l -239.302656 169.372547 l -239.445504 169.902772 l -239.516928 171.889626 l -239.588352 169.164567 l -239.659776 169.769355 l -239.7312 172.526518 l -239.802624 169.848137 l -239.874048 173.143698 l -239.945472 170.39918 l -240.08832 173.645075 l -240.302592 169.593607 l -240.516864 173.266312 l -240.588288 171.443667 l -240.659712 171.834252 l -240.945408 170.383297 l -241.016832 170.900161 l -241.15968 172.562371 l -241.231104 170.984171 l -241.302528 172.172922 l -241.373952 169.856225 l -241.5168 174.132571 l -241.659648 169.490601 l -241.731072 171.469988 l -241.802496 170.240638 l -241.87392 170.738171 l -241.945344 172.739183 l -242.088192 168.231927 l -242.159616 170.786055 l -242.302464 173.415769 l -242.373888 170.148844 l -242.445312 171.559042 l -242.516736 170.16615 l -242.58816 172.968731 l -242.659584 169.963187 l -242.731008 170.743385 l -242.802432 173.088836 l -242.873856 168.576472 l -242.94528 169.386396 l -243.016704 168.442106 l -243.088128 173.54714 l -243.159552 170.496666 l -243.230976 172.155019 l -243.3024 170.992762 l -243.373824 172.973154 l -243.445248 170.899883 l -243.516672 171.036549 l -243.588096 171.845849 l -243.730944 171.067552 l -243.945216 173.648503 l -244.01664 170.723074 l -244.088064 172.513441 l -244.159488 169.582273 l -244.230912 170.761224 l -244.302336 171.311547 l -244.37376 170.635592 l -244.445184 172.244796 l -244.516608 166.80639 l -244.588032 169.235844 l -244.73088 172.339255 l -244.802304 170.107895 l -244.945152 173.881827 l -245.088 170.627269 l -245.159424 170.744853 l -245.302272 172.492123 l -245.44512 170.840339 l -245.516544 171.448459 l -245.587968 169.916452 l -245.659392 173.121167 l -245.80224 168.703784 l -245.873664 173.81648 l -245.945088 173.464663 l -246.373632 169.205601 l -246.445056 168.507618 l -246.587904 172.507742 l -246.659328 169.591941 l -246.730752 170.536751 l -246.802176 172.848975 l -246.8736 171.586559 l -246.945024 169.245699 l -247.016448 171.871105 l -247.087872 171.125603 l -247.302144 173.149985 l -247.373568 169.884678 l -247.444992 170.114929 l -247.659264 172.284019 l -247.730688 171.057647 l -247.802112 172.551108 l -247.873536 170.121282 l -247.94496 174.079043 l -248.087808 170.102992 l -248.159232 170.602269 l -248.230656 169.630506 l -248.30208 172.326825 l -248.373504 171.71593 l -248.516352 170.079924 l -248.6592 171.250753 l -248.730624 173.227662 l -248.802048 171.960094 l -248.873472 172.688574 l -249.01632 169.624517 l -249.087744 169.647219 l -249.159168 173.220827 l -249.230592 167.728722 l -249.302016 169.56489 l -249.444864 171.797542 l -249.516288 169.131521 l -249.659136 172.403682 l -249.801984 170.086743 l -250.016256 173.344312 l -250.08768 168.151179 l -250.159104 169.699269 l -250.301952 174.062652 l -250.516224 169.727045 l -250.730496 172.284979 l -250.80192 169.371369 l -250.873344 171.96845 l -250.944768 171.014794 l -251.016192 172.277346 l -251.15904 171.314406 l -251.230464 171.669952 l -251.301888 170.39409 l -251.373312 170.640211 l -251.444736 170.835798 l -251.51616 169.916857 l -251.659008 171.845409 l -251.801856 168.98455 l -251.944704 173.215612 l -252.016128 170.348482 l -252.087552 172.872089 l -252.158976 169.824533 l -252.2304 170.712566 l -252.301824 170.883608 l -252.373248 173.144455 l -252.444672 166.900449 l -252.516096 172.826084 l -252.58752 171.454531 l -252.658944 173.437942 l -252.730368 169.880298 l -252.801792 171.324652 l -252.873216 171.720714 l -252.94464 171.472199 l -253.016064 172.314419 l -253.087488 174.897521 l -253.158912 173.742937 l -253.230336 170.717541 l -253.30176 172.224099 l -253.444608 170.211765 l -253.65888 174.832306 l -253.801728 168.259668 l -254.087424 174.228756 l -254.230272 170.640787 l -254.301696 170.850456 l -254.37312 171.575619 l -254.515968 170.648987 l -254.587392 170.914819 l -254.658816 172.158791 l -254.73024 171.884359 l -254.801664 169.34174 l -254.873088 170.86964 l -254.944512 167.259564 l -255.015936 171.713839 l -255.08736 170.594981 l -255.158784 171.366038 l -255.230208 174.310538 l -255.44448 170.609877 l -255.587328 173.492788 l -255.658752 169.351194 l -255.730176 171.706233 l -255.8016 171.526181 l -255.873024 167.042166 l -255.944448 173.111571 l -256.015872 172.750686 l -256.087296 169.786999 l -256.15872 172.778034 l -256.230144 168.214006 l -256.301568 169.904162 l -256.444416 172.152074 l -256.51584 168.369784 l -256.658688 173.018514 l -256.730112 170.970953 l -256.801536 172.263917 l -256.944384 170.157118 l -257.015808 171.908283 l -257.087232 171.2975 l -257.158656 171.07471 l -257.23008 168.566951 l -257.301504 171.576689 l -257.372928 171.222968 l -257.444352 172.018437 l -257.515776 168.879476 l -257.5872 170.490869 l -257.658624 168.940326 l -257.872896 171.939642 l -257.94432 167.853101 l -258.015744 169.102008 l -258.087168 171.168751 l -258.158592 167.779771 l -258.30144 172.543454 l -258.372864 168.797807 l -258.444288 171.465931 l -258.515712 171.228396 l -258.587136 169.453171 l -258.65856 171.715496 l -258.801408 169.290826 l -259.01568 174.636521 l -259.158528 171.056896 l -259.229952 173.194533 l -259.301376 171.172435 l -259.3728 171.767315 l -259.587072 168.65591 l -259.658496 172.1503 l -259.72992 170.55936 l -259.872768 172.754492 l -259.944192 171.050014 l -260.015616 171.845301 l -260.08704 170.633277 l -260.158464 171.176305 l -260.229888 170.229458 l -260.44416 172.781776 l -260.587008 167.37239 l -260.658432 172.003747 l -260.729856 169.421951 l -260.80128 170.502867 l -260.872704 168.868519 l -260.944128 173.052652 l -261.015552 171.548999 l -261.086976 171.786923 l -261.229824 168.54421 l -261.301248 173.253587 l -261.372672 170.674645 l -261.444096 169.69291 l -261.51552 172.594495 l -261.586944 171.638842 l -261.658368 171.410231 l -261.729792 169.652223 l -261.801216 169.923083 l -261.87264 172.208052 l -261.944064 171.155289 l -262.015488 167.874696 l -262.086912 173.113374 l -262.158336 170.810589 l -262.22976 170.205072 l -262.301184 172.938729 l -262.444032 169.778162 l -262.515456 170.697992 l -262.58688 170.212311 l -262.658304 170.573357 l -262.729728 172.597257 l -262.944 167.967249 l -263.086848 171.718601 l -263.158272 171.330142 l -263.229696 168.161624 l -263.372544 172.478723 l -263.586816 169.152701 l -263.65824 169.373517 l -263.729664 171.398992 l -263.801088 171.087144 l -264.01536 173.454459 l -264.086784 169.343444 l -264.158208 173.040479 l -264.229632 172.541221 l -264.37248 169.679801 l -264.7296 172.510616 l -264.801024 170.431699 l -265.015296 172.991564 l -265.08672 169.366103 l -265.158144 170.325904 l -265.229568 168.753744 l -265.44384 174.492256 l -265.515264 173.265271 l -265.586688 167.659779 l -265.658112 170.10392 l -265.729536 171.559242 l -265.80096 171.324868 l -265.872384 169.040207 l -265.943808 173.637154 l -266.086656 166.561303 l -266.229504 173.147834 l -266.300928 171.657435 l -266.372352 170.49551 l -266.443776 172.956324 l -266.5152 172.633115 l -266.729472 170.485177 l -266.800896 171.810378 l -266.943744 169.062699 l -267.015168 169.430163 l -267.086592 171.30292 l -267.158016 170.605219 l -267.22944 171.005407 l -267.300864 174.003091 l -267.372288 169.895165 l -267.443712 173.127394 l -267.515136 170.705699 l -267.58656 172.619161 l -267.657984 168.440508 l -267.729408 169.891825 l -267.94368 173.099891 l -268.086528 169.215117 l -268.229376 169.497966 l -268.3008 171.65414 l -268.515072 167.270441 l -268.586496 172.027661 l -268.65792 169.6982 l -268.729344 169.906815 l -268.800768 175.278534 l -268.943616 169.622993 l -269.01504 172.238858 l -269.086464 168.236949 l -269.157888 169.835031 l -269.229312 171.69049 l -269.300736 171.37014 l -269.443584 170.279078 l -269.515008 169.188212 l -269.586432 172.687694 l -269.657856 171.13114 l -269.72928 167.700267 l -269.800704 171.927012 l -269.872128 170.416032 l -269.943552 169.059204 l -270.014976 169.542798 l -270.372096 172.328881 l -270.44352 170.866203 l -270.514944 172.228285 l -270.586368 171.120057 l -270.657792 172.793812 l -270.943488 169.333999 l -271.014912 172.221114 l -271.15776 168.348226 l -271.229184 171.94677 l -271.300608 168.545527 l -271.372032 169.182016 l -271.443456 172.866632 l -271.51488 171.187244 l -271.586304 173.435588 l -271.657728 167.203974 l -271.729152 171.168405 l -271.800576 169.882111 l -271.872 172.381044 l -271.943424 172.353404 l -272.086272 169.665464 l -272.157696 171.763142 l -272.22912 170.808718 l -272.300544 171.343422 l -272.371968 169.031896 l -272.443392 173.893411 l -272.514816 168.184694 l -272.58624 171.726464 l -272.657664 170.193066 l -272.729088 170.962621 l -272.800512 170.201552 l -272.871936 168.076272 l -273.086208 172.912298 l -273.229056 169.900694 l -273.30048 169.480248 l -273.371904 171.803388 l -273.443328 170.497464 l -273.514752 170.853407 l -273.586176 170.991544 l -273.6576 171.902722 l -273.729024 170.808562 l -273.800448 167.276481 l -274.01472 173.649643 l -274.086144 171.281476 l -274.157568 171.395191 l -274.228992 171.619419 l -274.300416 172.392561 l -274.586112 168.315631 l -274.800384 172.707755 l -274.943232 170.126792 l -275.08608 171.610316 l -275.228928 170.633038 l -275.300352 170.87993 l -275.4432 169.34832 l -275.514624 171.77988 l -275.586048 171.526547 l -275.657472 172.617963 l -275.728896 168.442651 l -275.80032 169.784278 l -275.871744 172.219536 l -275.943168 171.603278 l -276.014592 172.473327 l -276.228864 169.754849 l -276.300288 172.16807 l -276.371712 171.671777 l -276.443136 169.786585 l -276.51456 170.086011 l -276.585984 169.213059 l -276.657408 169.955527 l -276.728832 174.431344 l -276.800256 168.604959 l -276.87168 172.367677 l -276.943104 170.313471 l -277.014528 170.462874 l -277.157376 174.159558 l -277.2288 167.385002 l -277.300224 168.224358 l -277.443072 170.623403 l -277.514496 170.019928 l -277.657344 171.832318 l -277.800192 168.352638 l -277.871616 169.004623 l -277.94304 172.711096 l -278.014464 171.20437 l -278.085888 172.307754 l -278.157312 168.638689 l -278.228736 171.747637 l -278.30016 169.278852 l -278.443008 173.918304 l -278.514432 171.279184 l -278.585856 173.770167 l -278.65728 170.835484 l -278.728704 172.901877 l -278.800128 171.923157 l -278.871552 171.543123 l -279.0144 168.543916 l -279.085824 170.621069 l -279.157248 170.51414 l -279.228672 170.716459 l -279.300096 173.456775 l -279.514368 170.584113 l -279.585792 170.249537 l -279.72864 172.44638 l -279.942912 168.265636 l -280.014336 173.921401 l -280.08576 169.360942 l -280.157184 170.646385 l -280.228608 171.273643 l -280.300032 169.840501 l -280.44288 172.0849 l -280.585728 169.027822 l -280.657152 173.689252 l -280.728576 169.733777 l -280.8 173.089783 l -280.871424 171.889752 l -280.942848 168.625244 l -281.014272 170.531572 l -281.085696 170.441796 l -281.15712 170.553818 l -281.228544 169.887915 l -281.299968 172.27569 l -281.371392 170.617986 l -281.51424 171.976179 l -281.585664 172.013485 l -281.657088 172.264101 l -281.728512 169.624039 l -281.799936 170.695318 l -281.87136 171.982095 l -281.942784 171.090153 l -282.014208 171.172891 l -282.085632 171.675124 l -282.157056 169.505475 l -282.22848 174.190883 l -282.299904 172.580051 l -282.371328 169.819948 l -282.442752 172.51234 l -282.514176 171.135254 l -282.5856 171.196383 l -282.657024 170.287945 l -282.728448 171.400678 l -282.799872 170.298278 l -282.871296 171.603084 l -282.94272 171.357702 l -283.014144 168.438312 l -283.085568 169.793674 l -283.228416 174.187637 l -283.29984 170.866895 l -283.371264 171.688301 l -283.442688 169.750171 l -283.514112 173.9996 l -283.65696 168.296771 l -283.728384 167.876383 l -283.942656 174.783754 l -284.01408 168.372173 l -284.085504 171.94807 l -284.156928 168.55392 l -284.228352 171.350186 l -284.299776 168.850091 l -284.3712 169.989641 l -284.514048 171.98508 l -284.72832 169.913068 l -284.799744 170.870986 l -284.871168 173.926186 l -284.942592 172.315486 l -285.156864 170.532576 l -285.228288 170.981198 l -285.299712 170.392313 l -285.371136 170.70024 l -285.513984 171.748753 l -285.585408 171.537735 l -285.656832 174.532152 l -285.728256 169.774735 l -285.79968 172.155077 l -285.942528 169.557254 l -286.013952 172.517396 l -286.085376 171.644892 l -286.228224 168.225785 l -286.371072 172.777731 l -286.442496 172.145125 l -286.51392 169.238588 l -286.585344 172.45396 l -286.656768 169.538373 l -286.728192 169.926969 l -286.799616 170.128531 l -286.87104 171.18463 l -287.013888 169.995798 l -287.085312 170.016063 l -287.156736 170.248112 l -287.299584 173.120018 l -287.442432 170.27823 l -287.513856 173.144202 l -287.58528 171.754748 l -287.728128 172.973576 l -287.799552 168.704981 l -287.870976 169.434885 l -288.013824 172.706113 l -288.085248 169.474064 l -288.156672 170.559032 l -288.370944 172.783157 l -288.442368 169.375246 l -288.513792 169.420035 l -288.585216 172.801329 l -288.65664 168.852508 l -288.728064 172.965575 l -288.799488 171.372206 l -288.870912 172.356502 l -289.01376 168.236224 l -289.085184 172.597676 l -289.156608 168.341585 l -289.299456 172.562866 l -289.442304 166.991501 l -289.656576 173.47325 l -289.728 169.408525 l -289.799424 173.813225 l -289.870848 169.653359 l -289.942272 171.992072 l -290.013696 168.520327 l -290.08512 171.187308 l -290.156544 170.487003 l -290.227968 171.820205 l -290.299392 171.157557 l -290.370816 170.36427 l -290.44224 170.573875 l -290.513664 170.879119 l -290.585088 171.784001 l -290.656512 170.665746 l -290.727936 171.491032 l -290.79936 168.979751 l -290.870784 169.044502 l -290.942208 170.354708 l -291.013632 170.205278 l -291.085056 169.765067 l -291.15648 173.154135 l -291.227904 171.01904 l -291.299328 174.113145 l -291.370752 172.803355 l -291.442176 168.974847 l -291.5136 170.099172 l -291.585024 169.427039 l -291.656448 170.45116 l -291.727872 167.928706 l -291.799296 172.087334 l -291.87072 171.684993 l -291.942144 172.358555 l -292.013568 168.245535 l -292.084992 169.947736 l -292.156416 172.434665 l -292.22784 170.94029 l -292.370688 174.062822 l -292.442112 168.405105 l -292.513536 169.98038 l -292.656384 174.345649 l -292.870656 170.300314 l -292.94208 170.351889 l -293.013504 174.241217 l -293.156352 168.872225 l -293.227776 169.105717 l -293.370624 170.961211 l -293.442048 170.54346 l -293.513472 170.926853 l -293.584896 172.091755 l -293.65632 171.086071 l -293.727744 171.741358 l -293.870592 171.167463 l -293.942016 174.669631 l -294.01344 170.074287 l -294.084864 170.515183 l -294.156288 169.751955 l -294.299136 171.960556 l -294.584832 169.738307 l -294.72768 174.600107 l -294.799104 172.335391 l -294.941952 167.350582 l -295.0848 168.155049 l -295.227648 173.454311 l -295.299072 172.038028 l -295.370496 168.123648 l -295.44192 170.040211 l -295.513344 171.291987 l -295.584768 176.18563 l -295.656192 170.108027 l -295.727616 172.676199 l -295.79904 168.38504 l -295.870464 170.166335 l -295.941888 170.977292 l -296.013312 170.421547 l -296.084736 171.246458 l -296.15616 170.534592 l -296.227584 167.822494 l -296.299008 169.682026 l -296.370432 175.387867 l -296.441856 172.25332 l -296.584704 168.156369 l -296.656128 169.13412 l -296.8704 172.081873 l -296.941824 169.848573 l -297.013248 172.450325 l -297.084672 170.543459 l -297.156096 172.505097 l -297.22752 168.859457 l -297.298944 169.740451 l -297.370368 172.611305 l -297.441792 171.10773 l -297.513216 172.405246 l -297.58464 171.38857 l -297.727488 173.927507 l -297.798912 169.896916 l -297.870336 170.906502 l -297.94176 170.488428 l -298.013184 171.135818 l -298.084608 169.559214 l -298.156032 173.530229 l -298.227456 171.831174 l -298.29888 173.945656 l -298.370304 170.632038 l -298.441728 174.394617 l -298.513152 170.371019 l -298.584576 171.236312 l -298.656 168.639162 l -298.727424 171.736204 l -298.798848 168.184 l -298.870272 169.088513 l -299.01312 170.886353 l -299.084544 174.97827 l -299.227392 169.572384 l -299.298816 169.703336 l -299.441664 173.307395 l -299.513088 171.246841 l -299.584512 172.737489 l -299.655936 169.187862 l -299.798784 172.913237 l -299.870208 169.711801 l -299.941632 170.576047 l -300.013056 171.540065 l -300.08448 174.623875 l -300.155904 173.661177 l -300.370176 167.534124 l -300.513024 174.583691 l -300.655872 169.481611 l -300.79872 173.681472 l -300.870144 166.926233 l -300.941568 168.213318 l -301.012992 173.509251 l -301.15584 169.4897 l -301.227264 171.345331 l -301.370112 167.651127 l -301.655808 172.610899 l -301.727232 170.987477 l -301.798656 173.175682 l -301.87008 168.593463 l -301.941504 169.337161 l -302.2272 172.399543 l -302.298624 173.837515 l -302.512896 168.613868 l -302.58432 171.965596 l -302.655744 169.044266 l -302.727168 170.063986 l -302.798592 168.769945 l -302.870016 171.580953 l -302.94144 168.698403 l -303.012864 169.957344 l -303.084288 168.380495 l -303.29856 172.552806 l -303.369984 168.803614 l -303.441408 170.381553 l -303.512832 170.056627 l -303.584256 168.743552 l -303.727104 171.553488 l -303.798528 168.427684 l -303.869952 172.61994 l -303.941376 171.996004 l -304.0128 173.599966 l -304.084224 173.195214 l -304.227072 169.223282 l -304.298496 172.351492 l -304.36992 171.865791 l -304.441344 173.603362 l -304.512768 170.245262 l -304.584192 171.123465 l -304.655616 171.581974 l -304.72704 169.868885 l -304.941312 173.441812 l -305.08416 170.586683 l -305.155584 171.845438 l -305.227008 170.892889 l -305.298432 171.646287 l -305.369856 169.778962 l -305.512704 174.222603 l -305.655552 167.754203 l -305.726976 172.405469 l -305.7984 170.093843 l -305.869824 170.610851 l -306.084096 168.431121 l -306.226944 173.813214 l -306.584064 168.020679 l -306.655488 171.016835 l -306.726912 169.696393 l -306.86976 173.363631 l -306.941184 172.411344 l -307.012608 168.182268 l -307.084032 171.090719 l -307.155456 170.139611 l -307.298304 170.532959 l -307.369728 172.002215 l -307.441152 170.361142 l -307.584 173.983921 l -307.798272 169.153432 l -307.869696 173.297913 l -307.94112 168.678188 l -308.012544 172.349906 l -308.083968 169.094284 l -308.155392 172.022603 l -308.226816 170.544103 l -308.29824 169.193405 l -308.441088 170.80271 l -308.583936 169.173441 l -308.726784 173.040936 l -308.798208 173.043186 l -308.869632 174.041915 l -308.941056 172.160593 l -309.01248 172.613538 l -309.083904 172.214829 l -309.155328 168.032423 l -309.226752 171.916022 l -309.298176 168.664269 l -309.3696 171.068744 l -309.441024 170.5629 l -309.512448 169.994302 l -309.583872 173.486415 l -309.655296 170.058084 l -309.72672 171.23785 l -309.798144 169.884832 l -310.012416 173.747622 l -310.298112 169.53046 l -310.369536 173.099667 l -310.44096 172.142284 l -310.512384 173.905413 l -310.655232 170.950275 l -310.79808 173.404793 l -310.869504 170.865692 l -310.940928 172.951326 l -311.012352 170.472286 l -311.083776 170.690506 l -311.1552 170.270693 l -311.226624 171.408352 l -311.298048 176.296113 l -311.440896 170.116637 l -311.583744 168.082259 l -311.655168 171.632674 l -311.726592 169.57765 l -311.798016 171.776066 l -311.86944 169.090792 l -311.940864 169.126257 l -312.012288 169.797464 l -312.083712 172.617781 l -312.155136 172.14705 l -312.22656 172.0397 l -312.297984 169.960526 l -312.369408 172.878047 l -312.440832 170.184111 l -312.512256 171.290432 l -312.655104 170.356795 l -312.726528 167.369252 l -312.869376 171.048782 l -312.9408 170.943124 l -313.012224 172.401915 l -313.083648 171.991915 l -313.226496 168.430925 l -313.29792 170.835359 l -313.369344 170.614639 l -313.440768 170.439142 l -313.583616 168.026265 l -313.65504 168.939813 l -313.726464 173.330551 l -313.797888 170.255213 l -313.869312 170.674053 l -314.01216 171.674952 l -314.155008 171.084714 l -314.226432 172.731162 l -314.297856 169.434966 l -314.36928 169.803279 l -314.440704 172.591408 l -314.512128 172.446695 l -314.583552 170.886067 l -314.7264 173.722391 l -314.869248 169.4176 l -314.940672 170.967978 l -315.012096 169.707382 l -315.154944 172.681639 l -315.226368 169.082614 l -315.297792 170.941889 l -315.369216 173.672429 l -315.512064 168.11643 l -315.583488 170.772482 l -315.654912 169.309059 l -315.726336 170.889749 l -315.79776 168.311707 l -315.869184 171.455762 l -315.940608 170.254945 l -316.012032 168.895364 l -316.083456 170.707598 l -316.15488 170.214827 l -316.226304 170.06647 l -316.297728 169.606273 l -316.369152 168.331758 l -316.440576 173.530313 l -316.512 173.099566 l -316.726272 170.266273 l -316.797696 175.34 l -316.86912 170.026692 l -316.940544 170.402826 l -317.011968 170.508844 l -317.083392 172.014796 l -317.154816 170.912219 l -317.22624 171.916953 l -317.297664 169.946873 l -317.369088 170.994126 l -317.440512 171.6944 l -317.511936 169.946743 l -317.654784 172.332608 l -317.726208 170.262553 l -317.797632 172.060289 l -317.869056 171.877421 l -317.94048 171.490049 l -318.011904 171.994264 l -318.154752 168.48351 l -318.226176 171.356857 l -318.2976 169.225844 l -318.369024 172.287991 l -318.440448 170.957857 l -318.511872 173.640785 l -318.583296 173.143966 l -318.726144 170.975066 l -318.797568 171.94629 l -318.868992 170.865871 l -319.01184 173.362548 l -319.154688 171.394825 l -319.226112 172.189642 l -319.297536 168.789197 l -319.36896 171.385739 l -319.511808 168.574586 l -319.583232 167.771855 l -319.72608 171.745426 l -319.797504 168.503548 l -319.868928 169.242617 l -319.940352 170.486619 l -320.0832 175.468853 l -320.297472 169.531673 l -320.368896 173.104157 l -320.44032 171.556811 l -320.511744 168.572359 l -320.583168 173.273238 l -320.654592 170.904727 l -320.726016 170.703542 l -320.79744 169.842228 l -320.868864 172.067421 l -320.940288 170.16617 l -321.15456 174.210616 l -321.225984 169.4764 l -321.297408 171.782213 l -321.368832 170.867994 l -321.583104 172.961212 l -321.725952 169.922667 l -321.797376 172.797553 l -321.8688 168.442231 l -321.940224 169.255809 l -322.011648 168.792433 l -322.083072 169.738576 l -322.154496 172.212693 l -322.297344 170.793213 l -322.440192 172.715283 l -322.511616 168.685035 l -322.58304 170.093977 l -322.654464 169.909435 l -322.725888 172.032111 l -322.797312 169.851059 l -322.868736 171.203454 l -322.94016 170.494581 l -323.011584 170.811037 l -323.154432 173.518968 l -323.368704 170.827234 l -323.440128 173.695201 l -323.511552 170.3112 l -323.582976 172.656623 l -323.797248 168.955274 l -323.940096 175.143058 l -324.082944 169.195924 l -324.154368 172.066865 l -324.225792 168.831659 l -324.297216 172.126831 l -324.36864 171.624162 l -324.440064 173.030836 l -324.654336 170.085441 l -324.797184 173.992121 l -324.940032 170.711783 l -325.011456 173.482625 l -325.154304 169.090035 l -325.297152 171.900302 l -325.368576 170.604301 l -325.44 171.578988 l -325.511424 170.337211 l -325.582848 170.387846 l -325.79712 173.543715 l -325.868544 172.564939 l -325.939968 170.682845 l -326.011392 172.298908 l -326.082816 171.941505 l -326.15424 169.317839 l -326.225664 170.134162 l -326.297088 172.967594 l -326.368512 172.571576 l -326.439936 169.081336 l -326.51136 173.486916 l -326.582784 170.170007 l -326.654208 172.831385 l -326.725632 172.119995 l -327.011328 168.056518 l -327.082752 173.877865 l -327.154176 172.203353 l -327.2256 172.876965 l -327.368448 170.830834 l -327.439872 172.704885 l -327.511296 171.481201 l -327.58272 174.548298 l -327.725568 167.093312 l -327.796992 169.03988 l -327.868416 173.22762 l -327.93984 171.414687 l -328.011264 170.048085 l -328.082688 174.453634 l -328.154112 173.799983 l -328.225536 169.304837 l -328.29696 170.599304 l -328.439808 173.509818 l -328.65408 167.307821 l -328.796928 172.484964 l -328.868352 169.017392 l -329.0112 172.075386 l -329.296896 166.33344 l -329.439744 172.781338 l -329.511168 168.414644 l -329.654016 173.867033 l -329.72544 173.389765 l -329.796864 169.771126 l -329.939712 173.297591 l -330.153984 169.295712 l -330.296832 173.595921 l -330.368256 170.534055 l -330.43968 171.571907 l -330.582528 169.672439 l -330.653952 173.931779 l -330.725376 168.56747 l -330.7968 173.695857 l -330.868224 173.009645 l -330.939648 169.76266 l -331.011072 170.522744 l -331.082496 169.307369 l -331.15392 170.677263 l -331.225344 169.64131 l -331.368192 172.349825 l -331.439616 171.18588 l -331.582464 169.398508 l -331.653888 172.893973 l -331.725312 169.41621 l -331.86816 172.710857 l -332.011008 170.156239 l -332.082432 172.237724 l -332.22528 168.405366 l -332.368128 170.439778 l -332.439552 168.680319 l -332.5824 172.443746 l -332.653824 171.008049 l -332.725248 172.170298 l -332.796672 172.053916 l -332.868096 172.58365 l -333.010944 170.861395 l -333.082368 170.764727 l -333.153792 170.884101 l -333.225216 168.654672 l -333.29664 171.504611 l -333.368064 170.946361 l -333.439488 172.145914 l -333.510912 171.025625 l -333.582336 172.701778 l -333.65376 170.97104 l -333.725184 172.902424 l -333.868032 169.714101 l -334.01088 174.167375 l -334.225152 168.849194 l -334.296576 173.351422 l -334.368 173.285931 l -334.439424 167.241305 l -334.582272 171.630648 l -334.653696 170.187979 l -334.72512 170.405984 l -334.796544 170.72313 l -334.867968 173.917193 l -334.939392 168.645885 l -335.010816 171.947287 l -335.08224 171.315484 l -335.225088 173.970311 l -335.510784 167.936577 l -335.582208 169.299333 l -335.653632 173.391813 l -335.725056 173.267817 l -335.79648 171.993728 l -335.867904 168.571818 l -335.939328 170.167057 l -336.010752 170.642182 l -336.082176 169.672511 l -336.1536 171.809181 l -336.225024 170.865609 l -336.296448 169.473393 l -336.439296 173.498682 l -336.51072 172.486626 l -336.582144 173.283875 l -336.724992 170.108299 l -336.796416 170.133126 l -336.86784 169.58251 l -336.939264 172.28103 l -337.082112 169.956946 l -337.296384 172.195357 l -337.367808 169.843597 l -337.439232 170.933922 l -337.510656 171.516139 l -337.58208 169.348851 l -337.724928 172.391553 l -337.796352 170.283091 l -337.867776 171.192159 l -337.9392 171.119548 l -338.010624 172.402384 l -338.29632 168.433169 l -338.367744 169.368422 l -338.439168 171.974491 l -338.510592 168.041827 l -338.582016 171.393039 l -338.724864 169.082583 l -338.867712 172.535601 l -338.939136 169.807978 l -339.01056 173.095719 l -339.081984 169.332568 l -339.153408 170.658457 l -339.296256 174.330757 l -339.439104 169.226012 l -339.510528 171.687903 l -339.581952 169.390809 l -339.653376 172.668276 l -339.796224 170.48518 l -339.867648 172.742086 l -339.939072 170.311697 l -340.010496 174.391647 l -340.08192 166.252823 l -340.224768 174.666407 l -340.367616 170.16574 l -340.43904 170.654667 l -340.510464 168.894845 l -340.581888 173.712614 l -340.653312 170.198266 l -340.724736 170.332509 l -340.79616 168.639094 l -340.939008 174.388342 l -341.081856 168.947346 l -341.224704 173.192537 l -341.296128 171.621862 l -341.367552 172.835272 l -341.438976 169.379407 l -341.5104 172.375194 l -341.581824 169.466492 l -341.653248 169.886999 l -341.724672 169.908027 l -341.796096 171.308701 l -341.86752 169.456315 l -341.938944 170.817589 l -342.010368 166.859594 l -342.153216 171.339689 l -342.296064 169.195797 l -342.367488 169.433441 l -342.510336 173.668151 l -342.724608 167.807376 l -342.796032 168.976807 l -342.867456 171.889843 l -342.93888 168.789848 l -343.081728 174.04276 l -343.224576 168.706306 l -343.296 172.084363 l -343.367424 170.322408 l -343.438848 168.449012 l -343.510272 172.232737 l -343.581696 170.900746 l -343.65312 167.363948 l -343.724544 170.005458 l -343.795968 168.819798 l -343.867392 169.015575 l -343.938816 168.582545 l -344.01024 174.126309 l -344.081664 170.78341 l -344.153088 174.780721 l -344.295936 169.774474 l -344.36736 171.889232 l -344.438784 171.310921 l -344.581632 170.047562 l -344.653056 170.125424 l -344.72448 170.420451 l -344.795904 173.089646 l -344.867328 168.38379 l -344.938752 169.940352 l -345.010176 175.305354 l -345.153024 171.115244 l -345.295872 171.885139 l -345.43872 167.757397 l -345.510144 170.708333 l -345.581568 170.537102 l -345.652992 168.137138 l -345.724416 173.213965 l -345.938688 168.086686 l -346.010112 173.296087 l -346.081536 172.733971 l -346.15296 174.665983 l -346.295808 167.219488 l -346.438656 170.304391 l -346.51008 168.658631 l -346.724352 173.511859 l -346.8672 171.91559 l -346.938624 173.372459 l -347.010048 173.266397 l -347.081472 172.708929 l -347.152896 173.158045 l -347.22432 171.138929 l -347.295744 172.89622 l -347.367168 170.644641 l -347.510016 173.306427 l -347.724288 169.587892 l -347.867136 171.23083 l -347.93856 167.890026 l -348.009984 170.351569 l -348.081408 169.571403 l -348.152832 171.184517 l -348.29568 169.107489 l -348.367104 172.434938 l -348.438528 168.979841 l -348.509952 170.842908 l -348.581376 171.030941 l -348.6528 169.10822 l -348.795648 173.543363 l -348.867072 172.893834 l -349.00992 168.970893 l -349.081344 169.887095 l -349.152768 173.545301 l -349.295616 169.067047 l -349.36704 172.412915 l -349.438464 169.485713 l -349.509888 173.062297 l -349.581312 171.336571 l -349.652736 173.159135 l -349.72416 170.179754 l -349.795584 172.773405 l -349.867008 172.332213 l -349.938432 172.919467 l -350.08128 169.206051 l -350.224128 172.812857 l -350.295552 169.57242 l -350.366976 169.60669 l -350.4384 168.434675 l -350.581248 173.411075 l -350.652672 170.918075 l -350.724096 174.155338 l -350.866944 170.456063 l -350.938368 170.003675 l -351.009792 171.844877 l -351.15264 169.561222 l -351.224064 172.167537 l -351.295488 171.347607 l -351.366912 168.303845 l -351.438336 172.323852 l -351.50976 170.556475 l -351.581184 172.720894 l -351.795456 170.583193 l -351.86688 171.556712 l -351.938304 170.252124 l -352.009728 173.414581 l -352.081152 170.917555 l -352.152576 172.149233 l -352.295424 169.506141 l -352.366848 169.263983 l -352.438272 175.070598 l -352.58112 170.173604 l -352.652544 171.782631 l -352.723968 168.488998 l -352.795392 173.199143 l -352.866816 172.619089 l -352.93824 171.172413 l -353.081088 173.242499 l -353.152512 171.40582 l -353.223936 171.448584 l -353.29536 173.134952 l -353.509632 167.881245 l -353.65248 174.189921 l -353.795328 170.266708 l -353.866752 172.218145 l -353.938176 168.010014 l -354.081024 172.758115 l -354.152448 172.21686 l -354.223872 169.518348 l -354.295296 172.737675 l -354.36672 171.181963 l -354.509568 170.025803 l -354.652416 170.573168 l -354.72384 169.651965 l -354.866688 172.149387 l -355.009536 167.193997 l -355.152384 171.195637 l -355.223808 169.9145 l -355.295232 170.482406 l -355.366656 173.059291 l -355.43808 172.219675 l -355.509504 170.544404 l -355.652352 172.614063 l -355.723776 171.044154 l -355.7952 171.316089 l -355.866624 170.847713 l -355.938048 171.771475 l -356.009472 169.047512 l -356.080896 172.629509 l -356.15232 170.721132 l -356.223744 168.139975 l -356.295168 170.451889 l -356.366592 168.288574 l -356.50944 171.616841 l -356.580864 171.333116 l -356.652288 171.433459 l -356.723712 168.220697 l -356.86656 171.866561 l -356.937984 172.079574 l -357.009408 170.117209 l -357.080832 170.831887 l -357.152256 172.977191 l -357.295104 171.509213 l -357.366528 172.170876 l -357.437952 171.736437 l -357.5808 173.117415 l -357.795072 169.572023 l -357.93792 175.352158 l -358.009344 173.078172 l -358.080768 172.79015 l -358.223616 170.099552 l -358.29504 171.704832 l -358.509312 167.949839 l -358.795008 173.676662 l -358.866432 168.698669 l -358.937856 170.805863 l -359.00928 172.61241 l -359.080704 169.802512 l -359.152128 170.430349 l -359.223552 175.190916 l -359.3664 170.238451 l -359.437824 171.848046 l -359.509248 168.528294 l -359.580672 173.005779 l -359.652096 170.700506 l -359.72352 171.542579 l -359.866368 170.612263 l -359.937792 166.115516 l -360.08064 172.277931 l -360.223488 169.945172 l -360.366336 175.304667 l -360.580608 169.830342 l -360.652032 170.816436 l -360.723456 170.754856 l -360.79488 171.120394 l -360.866304 172.079797 l -360.937728 170.582617 l -361.009152 170.607003 l -361.080576 170.335564 l -361.152 169.325459 l -361.223424 173.390719 l -361.294848 172.490769 l -361.366272 168.916299 l -361.437696 170.612548 l -361.50912 169.161102 l -361.580544 173.590379 l -361.651968 172.474842 l -361.723392 172.396993 l -361.794816 171.59374 l -361.86624 173.609808 l -361.937664 167.581532 l -362.080512 171.990022 l -362.151936 171.781193 l -362.22336 168.727392 l -362.366208 173.779772 l -362.437632 173.733461 l -362.509056 173.217898 l -362.58048 170.120048 l -362.651904 170.269353 l -362.723328 168.745467 l -362.866176 173.749773 l -363.009024 169.458252 l -363.080448 173.210481 l -363.151872 170.159679 l -363.223296 170.322164 l -363.366144 173.846089 l -363.437568 173.76312 l -363.580416 168.828835 l -363.65184 171.962887 l -363.723264 170.414395 l -363.794688 169.004615 l -363.866112 175.107933 l -363.937536 171.756342 l -364.00896 170.46081 l -364.151808 172.450708 l -364.294656 169.000153 l -364.36608 169.459029 l -364.508928 173.05963 l -364.580352 172.825177 l -364.866048 169.055537 l -364.937472 172.82136 l -365.008896 167.852578 l -365.151744 171.264061 l -365.223168 167.059821 l -365.43744 173.207952 l -365.651712 169.331042 l -365.79456 171.832437 l -365.865984 167.739027 l -366.080256 172.709403 l -366.15168 172.563865 l -366.223104 172.665082 l -366.294528 168.59494 l -366.437376 171.980109 l -366.5088 170.511526 l -366.580224 171.268368 l -366.651648 170.924309 l -366.794496 174.399779 l -366.937344 168.467763 l -367.008768 172.241925 l -367.080192 169.154009 l -367.22304 172.056302 l -367.437312 168.874041 l -367.58016 171.252089 l -367.651584 170.685948 l -367.723008 169.055533 l -367.794432 169.650057 l -367.865856 169.121476 l -368.008704 173.825955 l -368.151552 168.96689 l -368.2944 171.450317 l -368.365824 172.078226 l -368.437248 169.433176 l -368.508672 173.123491 l -368.580096 171.703286 l -368.722944 168.016621 l -368.794368 173.803125 l -368.865792 171.475858 l -369.00864 172.072858 l -369.080064 167.997269 l -369.151488 172.89286 l -369.222912 171.264406 l -369.294336 173.258769 l -369.36576 170.417699 l -369.437184 173.42589 l -369.508608 169.520487 l -369.580032 173.378646 l -369.651456 171.07258 l -369.72288 173.213299 l -369.794304 170.651135 l -369.865728 173.038689 l -370.008576 169.889555 l -370.08 171.989919 l -370.151424 170.972958 l -370.222848 172.794547 l -370.294272 170.91535 l -370.365696 171.58452 l -370.722816 167.619738 l -370.79424 167.427177 l -370.865664 171.300957 l -370.937088 169.920231 l -371.008512 171.930098 l -371.079936 170.766245 l -371.222784 173.793572 l -371.365632 165.761213 l -371.50848 172.502797 l -371.579904 171.878467 l -371.651328 169.545221 l -371.794176 171.28612 l -371.8656 170.788935 l -371.937024 168.45998 l -372.151296 171.808576 l -372.294144 171.86754 l -372.365568 171.449409 l -372.436992 173.306369 l -372.508416 172.285491 l -372.722688 169.336289 l -372.794112 172.12538 l -372.865536 168.578514 l -373.008384 172.086217 l -373.079808 169.76439 l -373.151232 170.127765 l -373.222656 172.872005 l -373.29408 171.918085 l -373.365504 171.420445 l -373.579776 168.532862 l -373.6512 168.813054 l -373.722624 172.247328 l -373.794048 171.418941 l -373.865472 172.193034 l -374.00832 169.569408 l -374.151168 172.669965 l -374.222592 172.176776 l -374.294016 166.951426 l -374.36544 169.647049 l -374.436864 169.51585 l -374.508288 171.302422 l -374.579712 169.482992 l -374.651136 171.527273 l -374.793984 169.294803 l -374.865408 169.405053 l -375.008256 172.648213 l -375.07968 171.466261 l -375.151104 166.915595 l -375.222528 168.175883 l -375.4368 173.944896 l -375.722496 169.372931 l -375.79392 169.932726 l -375.865344 172.177386 l -375.936768 167.997282 l -376.008192 173.814642 l -376.079616 171.418059 l -376.15104 169.551471 l -376.293888 173.997338 l -376.365312 170.394125 l -376.436736 171.009713 l -376.50816 171.240104 l -376.579584 170.048045 l -376.651008 171.12503 l -376.722432 169.337457 l -376.86528 174.142772 l -376.936704 170.29724 l -377.008128 171.944178 l -377.079552 173.769259 l -377.150976 172.612844 l -377.2224 169.383108 l -377.293824 172.549265 l -377.365248 172.015675 l -377.436672 172.797919 l -377.508096 172.261691 l -377.57952 170.668501 l -377.650944 170.858622 l -377.793792 169.275402 l -377.865216 174.923646 l -378.008064 169.376025 l -378.150912 173.989702 l -378.29376 171.43948 l -378.365184 172.09556 l -378.579456 167.635128 l -378.65088 168.431367 l -378.722304 173.264341 l -378.793728 171.848145 l -378.936576 172.64501 l -379.008 169.973981 l -379.079424 170.628869 l -379.150848 172.34132 l -379.222272 171.198798 l -379.293696 172.838565 l -379.36512 169.634167 l -379.436544 172.556774 l -379.507968 170.718718 l -379.579392 170.970007 l -379.72224 176.308607 l -379.793664 170.683719 l -379.865088 173.186042 l -379.936512 168.468501 l -380.007936 172.775229 l -380.07936 172.607966 l -380.150784 173.143692 l -380.293632 170.327614 l -380.365056 170.213238 l -380.43648 171.695769 l -380.507904 169.246764 l -380.722176 172.108189 l -380.865024 168.17979 l -381.079296 172.373307 l -381.293568 165.786106 l -381.436416 173.246703 l -381.50784 169.729624 l -381.579264 170.725849 l -381.722112 172.889472 l -381.86496 170.426578 l -381.936384 171.948474 l -382.007808 170.143886 l -382.079232 171.724566 l -382.150656 170.660581 l -382.22208 171.495491 l -382.293504 170.065206 l -382.436352 172.074644 l -382.507776 167.982444 l -382.5792 169.613159 l -382.650624 173.82349 l -382.722048 172.671814 l -382.93632 170.185962 l -383.079168 173.091892 l -383.222016 169.405279 l -383.29344 169.513498 l -383.436288 173.702972 l -383.507712 169.960519 l -383.579136 170.561127 l -383.65056 172.927531 l -383.864832 166.220809 l -384.00768 170.070583 l -384.150528 172.066144 l -384.293376 167.857591 l -384.3648 172.03183 l -384.436224 170.8812 l -384.507648 172.482802 l -384.579072 171.929968 l -384.650496 168.462574 l -384.72192 173.366011 l -384.793344 171.440807 l -384.936192 169.3151 l -385.007616 171.456738 l -385.07904 169.540427 l -385.150464 170.129779 l -385.221888 170.066065 l -385.293312 172.367766 l -385.507584 168.06934 l -385.650432 171.767887 l -385.721856 170.07174 l -385.79328 173.73899 l -385.936128 169.819644 l -386.007552 172.889635 l -386.078976 169.162461 l -386.1504 173.402992 l -386.221824 170.34911 l -386.293248 172.863899 l -386.436096 167.967604 l -386.50752 174.393677 l -386.578944 169.568461 l -386.650368 170.390814 l -386.721792 171.457763 l -386.793216 168.386214 l -386.86464 171.635888 l -386.936064 168.935893 l -387.007488 170.712572 l -387.150336 165.939747 l -387.293184 171.688481 l -387.364608 171.136129 l -387.436032 171.780302 l -387.507456 175.226326 l -387.57888 170.879054 l -387.650304 171.899 l -387.721728 169.298691 l -387.793152 169.770117 l -387.864576 173.441407 l -388.007424 166.77191 l -388.150272 172.227482 l -388.29312 167.302445 l -388.435968 174.636572 l -388.507392 169.678476 l -388.578816 172.972106 l -388.793088 168.913187 l -388.864512 171.480657 l -388.935936 166.718105 l -389.078784 170.626419 l -389.150208 169.563702 l -389.221632 171.723906 l -389.36448 168.205939 l -389.507328 170.471826 l -389.578752 170.654235 l -389.7216 169.459326 l -389.935872 174.417217 l -390.221568 167.297226 l -390.292992 171.198079 l -390.364416 168.691951 l -390.43584 171.968391 l -390.507264 167.938869 l -390.578688 172.404428 l -390.650112 172.080133 l -390.721536 169.122246 l -390.79296 172.211082 l -390.864384 167.911924 l -390.935808 171.458188 l -391.007232 169.712078 l -391.078656 169.253095 l -391.221504 171.330953 l -391.292928 168.627506 l -391.364352 169.474759 l -391.435776 169.547781 l -391.5072 172.584708 l -391.578624 171.915699 l -391.650048 173.299922 l -391.721472 169.636867 l -391.792896 172.301169 l -391.86432 170.530435 l -391.935744 170.674609 l -392.007168 170.904202 l -392.078592 174.253772 l -392.150016 169.720316 l -392.22144 170.822821 l -392.292864 172.080491 l -392.364288 169.304234 l -392.507136 174.932716 l -392.57856 175.145811 l -392.792832 170.880841 l -392.864256 170.957406 l -392.93568 171.395761 l -393.007104 167.175579 l -393.221376 173.964193 l -393.2928 173.668459 l -393.364224 169.18944 l -393.435648 169.296365 l -393.507072 172.500774 l -393.578496 168.23208 l -393.64992 169.353882 l -393.792768 174.611136 l -393.935616 168.826206 l -394.078464 169.812493 l -394.221312 171.747382 l -394.292736 170.505135 l -394.507008 174.530796 l -394.649856 167.589924 l -394.72128 173.690494 l -394.792704 171.920214 l -394.864128 170.262553 l -394.935552 172.607182 l -395.006976 172.575452 l -395.0784 172.45138 l -395.221248 168.546604 l -395.292672 172.586932 l -395.364096 170.385566 l -395.506944 173.35939 l -395.649792 171.544432 l -395.79264 173.674637 l -396.006912 167.991885 l -396.14976 172.373418 l -396.292608 169.320903 l -396.435456 172.437944 l -396.50688 169.952421 l -396.649728 173.562817 l -396.792576 169.734111 l -396.864 172.042627 l -396.935424 171.86188 l -397.006848 172.101194 l -397.078272 169.207798 l -397.149696 173.888242 l -397.22112 169.851567 l -397.292544 172.823012 l -397.363968 171.219346 l -397.435392 171.222814 l -397.506816 169.283451 l -397.57824 171.312466 l -397.721088 169.566946 l -397.792512 172.94433 l -397.863936 171.719877 l -397.93536 173.492076 l -398.006784 170.620175 l -398.078208 171.380347 l -398.149632 171.650474 l -398.363904 173.160712 l -398.435328 170.446812 l -398.506752 172.473664 l -398.6496 170.464785 l -398.721024 174.443411 l -398.792448 170.587895 l -398.863872 173.908073 l -398.935296 170.093403 l -399.00672 170.891987 l -399.078144 173.266606 l -399.36384 168.763927 l -399.435264 170.198645 l -399.506688 167.001853 l -399.578112 174.373188 l -399.649536 171.961016 l -399.792384 166.960683 l -399.935232 171.644471 l -400.07808 168.252752 l -400.149504 168.265342 l -400.220928 171.179505 l -400.292352 170.405231 l -400.4352 168.341577 l -400.506624 174.01216 l -400.578048 170.440145 l -400.649472 172.613185 l -400.720896 170.700856 l -400.935168 173.79106 l -401.006592 173.46303 l -401.14944 171.1521 l -401.220864 171.958315 l -401.292288 174.481111 l -401.363712 171.507426 l -401.435136 175.677662 l -401.50656 172.08614 l -401.577984 172.685766 l -401.649408 172.264086 l -401.720832 168.207333 l -401.792256 170.158987 l -401.86368 172.594605 l -401.935104 171.769632 l -402.006528 172.278218 l -402.077952 173.938688 l -402.2208 171.34749 l -402.292224 174.734498 l -402.435072 168.584552 l -402.506496 172.234704 l -402.57792 171.722103 l -402.649344 169.965509 l -402.720768 170.847457 l -402.792192 170.975722 l -402.863616 168.208553 l -403.006464 173.272331 l -403.077888 168.140717 l -403.149312 170.619543 l -403.29216 173.383122 l -403.363584 169.908103 l -403.435008 170.614631 l -403.506432 170.570939 l -403.577856 172.360787 l -403.64928 169.714846 l -403.720704 172.017453 l -403.792128 170.567891 l -403.863552 172.589424 l -403.934976 170.419359 l -404.0064 171.243035 l -404.077824 170.188536 l -404.220672 176.348427 l -404.292096 170.84758 l -404.36352 172.700044 l -404.434944 171.801946 l -404.506368 168.53926 l -404.577792 173.83445 l -404.649216 172.952669 l -404.863488 167.912727 l -405.07776 171.82388 l -405.292032 170.734936 l -405.43488 173.427909 l -405.506304 168.711036 l -405.577728 169.465811 l -405.649152 169.699993 l -405.720576 169.485401 l -405.792 170.198672 l -405.863424 169.359451 l -405.934848 173.158397 l -406.006272 169.490312 l -406.14912 173.112483 l -406.220544 170.184464 l -406.291968 171.477132 l -406.363392 169.532542 l -406.434816 169.748322 l -406.50624 169.123101 l -406.720512 171.641764 l -406.86336 173.750545 l -407.006208 170.534689 l -407.077632 172.317937 l -407.149056 172.255016 l -407.22048 168.095079 l -407.291904 170.820669 l -407.363328 169.358667 l -407.434752 171.163343 l -407.506176 176.364463 l -407.649024 170.183248 l -407.720448 169.053229 l -407.791872 172.265996 l -407.863296 169.756078 l -407.93472 170.787954 l -408.006144 171.029236 l -408.077568 169.268128 l -408.148992 172.761519 l -408.220416 169.49366 l -408.29184 170.889682 l -408.434688 172.174953 l -408.506112 171.427408 l -408.577536 168.545212 l -408.720384 173.612265 l -408.791808 166.797128 l -408.863232 168.245471 l -408.934656 166.426025 l -409.00608 171.902738 l -409.077504 171.863713 l -409.148928 171.899427 l -409.220352 173.722687 l -409.3632 171.047 l -409.434624 167.100242 l -409.577472 171.96964 l -409.648896 168.784936 l -409.72032 169.17835 l -409.791744 173.30925 l -409.863168 169.262967 l -409.934592 172.635297 l -410.006016 170.357952 l -410.07744 172.614392 l -410.148864 170.761339 l -410.220288 170.827828 l -410.291712 170.449514 l -410.363136 173.58669 l -410.43456 169.814561 l -410.505984 172.206301 l -410.577408 167.103451 l -410.648832 173.201996 l -410.720256 167.75588 l -410.863104 173.030098 l -410.934528 171.438618 l -411.005952 176.318365 l -411.077376 170.103157 l -411.1488 172.32184 l -411.220224 167.98315 l -411.291648 172.131322 l -411.363072 166.370344 l -411.434496 171.723472 l -411.50592 171.49214 l -411.648768 172.797749 l -411.791616 168.415969 l -411.86304 175.829122 l -411.934464 171.87881 l -412.005888 175.1653 l -412.148736 169.860152 l -412.22016 171.538748 l -412.291584 170.406606 l -412.434432 172.22623 l -412.505856 169.398366 l -412.648704 173.911536 l -412.720128 173.135002 l -412.862976 168.575404 l -412.9344 171.348386 l -413.005824 170.083093 l -413.077248 172.4726 l -413.220096 169.686391 l -413.29152 173.305192 l -413.362944 170.120186 l -413.505792 172.49713 l -413.577216 169.172279 l -413.64864 169.19331 l -413.862912 171.846493 l -413.934336 169.865296 l -414.00576 169.990119 l -414.077184 172.762296 l -414.220032 168.020656 l -414.291456 171.927251 l -414.36288 170.001751 l -414.434304 168.293414 l -414.648576 171.336711 l -414.648576 171.336711 l -stroke -grestore -0.800 setlinewidth -0 setlinejoin -[] 0 setdash -0.000 setgray -gsave -57.6 38.016 m -57.6 304.128 l -stroke -grestore -gsave -414.72 38.016 m -414.72 304.128 l -stroke -grestore -gsave -57.6 38.016 m -414.72 38.016 l -stroke -grestore -gsave -57.6 304.128 m -414.72 304.128 l -stroke -grestore -/DejaVuSerif findfont -12.000 scalefont -setfont -gsave -188.363125 310.128000 translate -0.000000 rotate -0.000000 0.000000 m /A glyphshow -8.666016 0.000000 m /u glyphshow -16.394531 0.000000 m /t glyphshow -21.216797 0.000000 m /o glyphshow -28.441406 0.000000 m /c glyphshow -35.162109 0.000000 m /o glyphshow -42.386719 0.000000 m /r glyphshow -48.123047 0.000000 m /r glyphshow -53.859375 0.000000 m /e glyphshow -60.960938 0.000000 m /l glyphshow -64.798828 0.000000 m /a glyphshow -71.953125 0.000000 m /t glyphshow -76.775391 0.000000 m /i glyphshow -80.613281 0.000000 m /o glyphshow -87.837891 0.000000 m /n glyphshow -grestore - -end -showpage diff --git a/doc/Programs/ResamplingAnalysisScripts/gaussian/autocorrelation.png b/doc/Programs/ResamplingAnalysisScripts/gaussian/autocorrelation.png deleted file mode 100644 index 505bc18fce34c3484cb8e85a48382d9b3cf4737a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22990 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 diff --git a/doc/Programs/ResamplingAnalysisScripts/gaussian/blocking.eps b/doc/Programs/ResamplingAnalysisScripts/gaussian/blocking.eps deleted file mode 100644 index 0bc0e2f0f..000000000 --- a/doc/Programs/ResamplingAnalysisScripts/gaussian/blocking.eps +++ /dev/null @@ -1,1608 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Title: gaussian/blocking.eps -%%Creator: matplotlib version 2.0.0, http://matplotlib.org/ -%%CreationDate: Wed Oct 4 14:08:30 2017 -%%Orientation: portrait -%%BoundingBox: 75 223 536 568 -%%EndComments -%%BeginProlog -/mpldict 9 dict def -mpldict begin -/m { moveto } bind def -/l { lineto } bind def -/r { rlineto } bind def -/c { curveto } bind def -/cl { closepath } bind def -/box { -m -1 index 0 r -0 exch r -neg 0 r -cl -} bind def -/clipbox { -box -clip -newpath -} bind def -%!PS-Adobe-3.0 Resource-Font -%%Title: DejaVu Serif -%%Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. DejaVu changes are in public domain -%%Creator: Converted from TrueType to type 3 by PPR -25 dict begin -/_d{bind def}bind def -/_m{moveto}_d -/_l{lineto}_d -/_cl{closepath eofill}_d -/_c{curveto}_d -/_sc{7 -1 roll{setcachedevice}{pop pop pop pop pop pop}ifelse}_d -/_e{exec}_d -/FontName /DejaVuSerif def -/PaintType 0 def -/FontMatrix[.001 0 0 .001 0 0]def -/FontBBox[-770 -347 2105 1109]def -/FontType 3 def -/Encoding [ /space /B /S /V /a /c /e /g /i /k /l /n /o /r /z ] def -/FontInfo 10 dict dup begin -/FamilyName (DejaVu Serif) def -/FullName (DejaVu Serif) def -/Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. DejaVu changes are in public domain ) def -/Weight (Book) def -/Version (Version 2.35) def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -130 def -/UnderlineThickness 90 def -end readonly def -/CharStrings 15 dict dup begin -/space{318 0 0 0 0 0 _sc -}_d -/B{{735 0 55 0 674 729 _sc -247 52 _m -393 52 _l -451 52 494 64 521 90 _c -548 115 562 155 562 211 _c -562 265 548 305 521 331 _c -494 356 451 369 393 369 _c -247 369 _l -247 52 _l -247 421 _m -371 421 _l -424 421 463 431 488 451 _c -512 471 525 504 525 549 _c -525 593 512 626 488 646 _c -463 666 424 677 371 677 _c -247 677 _l -247 421 _l -55 0 _m -55 52 _l -148 52 _l -148 677 _l -}_e{55 677 _l -55 729 _l -415 729 _l -488 729 543 714 581 684 _c -618 654 637 609 637 549 _c -637 505 624 471 598 445 _c -572 419 535 404 485 398 _c -547 390 594 370 626 338 _c -658 306 674 264 674 211 _c -674 139 651 85 605 51 _c -559 17 488 0 392 0 _c -55 0 _l -_cl}_e}_d -/S{{685 0 84 -13 612 742 _sc -93 35 _m -93 201 _l -149 201 _l -150 145 166 104 197 78 _c -227 51 274 38 336 38 _c -394 38 438 49 468 72 _c -498 95 514 129 514 173 _c -514 208 504 235 486 254 _c -468 272 429 291 370 309 _c -274 338 _l -204 359 154 385 126 417 _c -98 448 84 491 84 547 _c -84 609 106 657 150 691 _c -194 725 255 742 335 742 _c -369 742 406 738 446 731 _c -}_e{486 723 529 713 575 699 _c -575 544 _l -520 544 _l -514 595 497 632 468 655 _c -439 678 395 690 337 690 _c -285 690 246 679 219 658 _c -192 637 179 607 179 567 _c -179 532 189 505 209 485 _c -229 465 272 445 338 426 _c -428 399 _l -494 379 541 353 569 323 _c -597 292 612 251 612 199 _c -612 128 589 75 544 40 _c -498 4 431 -13 342 -13 _c -302 -13 261 -9 219 -1 _c -}_e{177 6 135 18 93 35 _c -_cl}_e}_d -/V{722 0 -9 0 737 729 _sc -175 677 _m -390 117 _l -605 677 _l -523 677 _l -523 729 _l -737 729 _l -737 677 _l -666 677 _l -406 0 _l -322 0 _l -63 677 _l --9 677 _l --9 729 _l -256 729 _l -256 677 _l -175 677 _l -_cl}_d -/a{{596 0 50 -13 568 533 _sc -398 163 _m -398 273 _l -282 273 _l -237 273 204 263 182 244 _c -160 224 150 195 150 156 _c -150 120 161 91 183 70 _c -205 48 235 38 273 38 _c -310 38 340 49 363 72 _c -386 95 398 125 398 163 _c -488 324 _m -488 52 _l -568 52 _l -568 0 _l -398 0 _l -398 56 _l -378 32 355 14 329 3 _c -303 -7 272 -13 238 -13 _c -180 -13 134 2 100 32 _c -}_e{66 62 50 104 50 156 _c -50 209 69 250 108 280 _c -146 310 201 325 272 325 _c -398 325 _l -398 361 _l -398 400 386 430 362 452 _c -338 474 304 485 261 485 _c -225 485 197 476 176 460 _c -154 444 141 420 136 388 _c -90 388 _l -90 493 _l -121 506 151 516 181 523 _c -210 529 239 533 267 533 _c -339 533 393 515 431 479 _c -469 443 488 392 488 324 _c -_cl}_e}_d -/c{{560 0 50 -13 514 533 _sc -514 156 _m -501 100 477 58 441 30 _c -405 1 358 -13 301 -13 _c -225 -13 165 11 119 61 _c -73 111 50 177 50 260 _c -50 342 73 408 119 458 _c -165 508 225 533 301 533 _c -333 533 366 529 399 521 _c -431 513 464 502 497 487 _c -497 354 _l -445 354 _l -438 399 423 432 400 453 _c -377 474 344 485 302 485 _c -253 485 216 466 192 428 _c -}_e{167 390 155 334 155 260 _c -155 184 167 128 192 90 _c -216 52 253 34 302 34 _c -340 34 371 44 394 64 _c -417 84 433 115 442 156 _c -514 156 _l -_cl}_e}_d -/e{{592 0 50 -13 542 533 _sc -542 250 _m -155 250 _l -155 246 _l -155 176 168 123 194 87 _c -220 51 259 34 311 34 _c -350 34 382 44 408 65 _c -433 85 451 116 461 157 _c -533 157 _l -519 100 492 57 454 29 _c -415 1 364 -13 302 -13 _c -226 -13 165 11 119 61 _c -73 111 50 177 50 260 _c -50 342 72 408 118 458 _c -163 508 222 533 296 533 _c -374 533 435 508 477 460 _c -}_e{519 412 540 342 542 250 _c -436 302 _m -434 362 421 408 397 439 _c -373 469 340 485 296 485 _c -254 485 222 469 198 438 _c -174 407 160 362 155 302 _c -436 302 _l -_cl}_e}_d -/g{{640 0 50 -221 611 533 _sc -525 467 _m -525 11 _l -525 -63 504 -120 463 -160 _c -422 -200 364 -221 288 -221 _c -254 -221 221 -218 190 -212 _c -158 -206 128 -196 100 -184 _c -100 -75 _l -147 -75 _l -153 -109 166 -133 188 -149 _c -210 -165 241 -173 282 -173 _c -334 -173 373 -158 398 -128 _c -422 -98 435 -51 435 11 _c -435 81 _l -417 48 395 24 368 9 _c -340 -5 307 -13 267 -13 _c -203 -13 150 12 110 62 _c -}_e{70 112 50 178 50 260 _c -50 341 70 407 110 457 _c -150 507 203 533 267 533 _c -307 533 340 525 368 510 _c -395 494 417 470 435 438 _c -435 519 _l -611 519 _l -611 467 _l -525 467 _l -435 285 _m -435 347 423 394 399 427 _c -375 460 340 477 295 477 _c -249 477 214 458 190 422 _c -166 386 155 332 155 260 _c -155 188 166 133 190 97 _c -214 60 249 42 295 42 _c -}_e{340 42 375 58 399 91 _c -423 123 435 171 435 234 _c -435 285 _l -_cl}_e}_d -/i{320 0 36 0 297 736 _sc -97 680 _m -97 695 102 708 113 719 _c -124 730 137 736 153 736 _c -167 736 180 730 191 719 _c -202 708 208 695 208 680 _c -208 664 202 651 192 641 _c -181 630 168 625 153 625 _c -137 625 124 630 113 641 _c -102 651 97 664 97 680 _c -212 52 _m -297 52 _l -297 0 _l -36 0 _l -36 52 _l -122 52 _l -122 467 _l -36 467 _l -36 519 _l -212 519 _l -212 52 _l -_cl}_d -/k{{606 0 29 0 613 760 _sc -286 0 _m -34 0 _l -34 52 _l -115 52 _l -115 708 _l -29 708 _l -29 760 _l -205 760 _l -205 265 _l -424 467 _l -349 467 _l -349 519 _l -584 519 _l -584 467 _l -495 467 _l -341 324 _l -538 52 _l -613 52 _l -613 0 _l -357 0 _l -357 52 _l -431 52 _l -276 265 _l -205 199 _l -205 52 _l -286 52 _l -286 0 _l -_cl}_e}_d -/l{320 0 29 0 290 760 _sc -205 52 _m -290 52 _l -290 0 _l -29 0 _l -29 52 _l -115 52 _l -115 708 _l -29 708 _l -29 760 _l -205 760 _l -205 52 _l -_cl}_d -/n{{644 0 36 0 616 533 _sc -41 0 _m -41 52 _l -122 52 _l -122 467 _l -36 467 _l -36 519 _l -212 519 _l -212 427 _l -228 461 250 488 276 506 _c -302 524 333 533 369 533 _c -426 533 468 516 495 484 _c -522 451 536 400 536 330 _c -536 52 _l -616 52 _l -616 0 _l -368 0 _l -368 52 _l -446 52 _l -446 302 _l -446 365 438 408 422 432 _c -406 456 379 468 340 468 _c -}_e{298 468 266 452 244 422 _c -222 391 212 347 212 289 _c -212 52 _l -290 52 _l -290 0 _l -41 0 _l -_cl}_e}_d -/o{602 0 50 -13 552 533 _sc -301 34 _m -349 34 385 53 410 91 _c -434 129 447 185 447 260 _c -447 334 434 390 410 428 _c -385 466 349 485 301 485 _c -253 485 216 466 192 428 _c -167 390 155 334 155 260 _c -155 185 167 129 192 91 _c -216 53 253 34 301 34 _c -301 -13 _m -225 -13 165 11 119 61 _c -73 111 50 177 50 260 _c -50 342 72 408 118 458 _c -164 508 225 533 301 533 _c -377 533 437 508 483 458 _c -529 408 552 342 552 260 _c -552 177 529 111 483 61 _c -437 11 377 -13 301 -13 _c -_cl}_d -/r{478 0 36 0 478 533 _sc -478 520 _m -478 390 _l -426 390 _l -424 416 417 435 405 448 _c -392 460 373 467 349 467 _c -305 467 271 451 247 421 _c -223 390 212 346 212 289 _c -212 52 _l -316 52 _l -316 0 _l -41 0 _l -41 52 _l -122 52 _l -122 468 _l -36 468 _l -36 519 _l -212 519 _l -212 427 _l -229 463 251 489 279 507 _c -307 524 341 533 381 533 _c -395 533 411 531 427 529 _c -443 527 460 524 478 520 _c -_cl}_d -/z{527 0 40 0 490 519 _sc -40 0 _m -40 42 _l -365 467 _l -108 467 _l -108 377 _l -56 377 _l -56 519 _l -481 519 _l -481 477 _l -156 52 _l -438 52 _l -438 146 _l -490 146 _l -490 0 _l -40 0 _l -_cl}_d -end readonly def - -/BuildGlyph - {exch begin - CharStrings exch - 2 copy known not{pop /.notdef}if - true 3 1 roll get exec - end}_d - -/BuildChar { - 1 index /Encoding get exch get - 1 index /BuildGlyph get exec -}_d - -FontName currentdict end definefont pop -%!PS-Adobe-3.0 Resource-Font -%%Title: DejaVu Sans -%%Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. DejaVu changes are in public domain -%%Creator: Converted from TrueType to type 3 by PPR -25 dict begin -/_d{bind def}bind def -/_m{moveto}_d -/_l{lineto}_d -/_cl{closepath eofill}_d -/_c{curveto}_d -/_sc{7 -1 roll{setcachedevice}{pop pop pop pop pop pop}ifelse}_d -/_e{exec}_d -/FontName /DejaVuSans def -/PaintType 0 def -/FontMatrix[.001 0 0 .001 0 0]def -/FontBBox[-1021 -463 1793 1232]def -/FontType 3 def -/Encoding [ /period /zero /one /two /three /four /five /seven /e /minus ] def -/FontInfo 10 dict dup begin -/FamilyName (DejaVu Sans) def -/FullName (DejaVu Sans) def -/Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. DejaVu changes are in public domain ) def -/Weight (Book) def -/Version (Version 2.35) def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -130 def -/UnderlineThickness 90 def -end readonly def -/CharStrings 10 dict dup begin -/period{318 0 107 0 210 124 _sc -107 124 _m -210 124 _l -210 0 _l -107 0 _l -107 124 _l -_cl}_d -/zero{636 0 66 -13 570 742 _sc -318 664 _m -267 664 229 639 203 589 _c -177 539 165 464 165 364 _c -165 264 177 189 203 139 _c -229 89 267 64 318 64 _c -369 64 407 89 433 139 _c -458 189 471 264 471 364 _c -471 464 458 539 433 589 _c -407 639 369 664 318 664 _c -318 742 _m -399 742 461 709 505 645 _c -548 580 570 486 570 364 _c -570 241 548 147 505 83 _c -461 19 399 -13 318 -13 _c -236 -13 173 19 130 83 _c -87 147 66 241 66 364 _c -66 486 87 580 130 645 _c -173 709 236 742 318 742 _c -_cl}_d -/one{636 0 110 0 544 729 _sc -124 83 _m -285 83 _l -285 639 _l -110 604 _l -110 694 _l -284 729 _l -383 729 _l -383 83 _l -544 83 _l -544 0 _l -124 0 _l -124 83 _l -_cl}_d -/two{{636 0 73 0 536 742 _sc -192 83 _m -536 83 _l -536 0 _l -73 0 _l -73 83 _l -110 121 161 173 226 239 _c -290 304 331 346 348 365 _c -380 400 402 430 414 455 _c -426 479 433 504 433 528 _c -433 566 419 598 392 622 _c -365 646 330 659 286 659 _c -255 659 222 653 188 643 _c -154 632 117 616 78 594 _c -78 694 _l -118 710 155 722 189 730 _c -223 738 255 742 284 742 _c -}_e{359 742 419 723 464 685 _c -509 647 532 597 532 534 _c -532 504 526 475 515 449 _c -504 422 484 390 454 354 _c -446 344 420 317 376 272 _c -332 227 271 164 192 83 _c -_cl}_e}_d -/three{{636 0 76 -13 556 742 _sc -406 393 _m -453 383 490 362 516 330 _c -542 298 556 258 556 212 _c -556 140 531 84 482 45 _c -432 6 362 -13 271 -13 _c -240 -13 208 -10 176 -4 _c -144 1 110 10 76 22 _c -76 117 _l -103 101 133 89 166 81 _c -198 73 232 69 268 69 _c -330 69 377 81 409 105 _c -441 129 458 165 458 212 _c -458 254 443 288 413 312 _c -383 336 341 349 287 349 _c -}_e{202 349 _l -202 430 _l -291 430 _l -339 430 376 439 402 459 _c -428 478 441 506 441 543 _c -441 580 427 609 401 629 _c -374 649 336 659 287 659 _c -260 659 231 656 200 650 _c -169 644 135 635 98 623 _c -98 711 _l -135 721 170 729 203 734 _c -235 739 266 742 296 742 _c -370 742 429 725 473 691 _c -517 657 539 611 539 553 _c -539 513 527 479 504 451 _c -481 423 448 403 406 393 _c -_cl}_e}_d -/four{636 0 49 0 580 729 _sc -378 643 _m -129 254 _l -378 254 _l -378 643 _l -352 729 _m -476 729 _l -476 254 _l -580 254 _l -580 172 _l -476 172 _l -476 0 _l -378 0 _l -378 172 _l -49 172 _l -49 267 _l -352 729 _l -_cl}_d -/five{{636 0 77 -13 549 729 _sc -108 729 _m -495 729 _l -495 646 _l -198 646 _l -198 467 _l -212 472 227 476 241 478 _c -255 480 270 482 284 482 _c -365 482 429 459 477 415 _c -525 370 549 310 549 234 _c -549 155 524 94 475 51 _c -426 8 357 -13 269 -13 _c -238 -13 207 -10 175 -6 _c -143 -1 111 6 77 17 _c -77 116 _l -106 100 136 88 168 80 _c -199 72 232 69 267 69 _c -}_e{323 69 368 83 401 113 _c -433 143 450 183 450 234 _c -450 284 433 324 401 354 _c -368 384 323 399 267 399 _c -241 399 214 396 188 390 _c -162 384 135 375 108 363 _c -108 729 _l -_cl}_e}_d -/seven{636 0 82 0 551 729 _sc -82 729 _m -551 729 _l -551 687 _l -286 0 _l -183 0 _l -432 646 _l -82 646 _l -82 729 _l -_cl}_d -/e{{615 0 55 -13 562 560 _sc -562 296 _m -562 252 _l -149 252 _l -153 190 171 142 205 110 _c -238 78 284 62 344 62 _c -378 62 412 66 444 74 _c -476 82 509 95 541 113 _c -541 28 _l -509 14 476 3 442 -3 _c -408 -9 373 -13 339 -13 _c -251 -13 182 12 131 62 _c -80 112 55 181 55 268 _c -55 357 79 428 127 481 _c -175 533 241 560 323 560 _c -397 560 455 536 498 489 _c -}_e{540 441 562 377 562 296 _c -472 322 _m -471 371 457 410 431 440 _c -404 469 368 484 324 484 _c -274 484 234 469 204 441 _c -174 413 156 373 152 322 _c -472 322 _l -_cl}_e}_d -/minus{838 0 106 272 732 355 _sc -106 355 _m -732 355 _l -732 272 _l -106 272 _l -106 355 _l -_cl}_d -end readonly def - -/BuildGlyph - {exch begin - CharStrings exch - 2 copy known not{pop /.notdef}if - true 3 1 roll get exec - end}_d - -/BuildChar { - 1 index /Encoding get exch get - 1 index /BuildGlyph get exec -}_d - -FontName currentdict end definefont pop -end -%%EndProlog -mpldict begin -75.6 223.2 translate -460.8 345.6 0 0 clipbox -gsave -0 0 m -460.8 0 l -460.8 345.6 l -0 345.6 l -cl -1.000 setgray -fill -grestore -gsave -57.6 38.016 m -414.72 38.016 l -414.72 304.128 l -57.6 304.128 l -cl -1.000 setgray -fill -grestore -0.800 setlinewidth -1 setlinejoin -0 setlinecap -[] 0 setdash -0.000 setgray -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -73.1808 38.016 o -grestore -/DejaVuSans findfont -10.000 scalefont -setfont -gsave -70.001123 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -138.372 38.016 o -grestore -gsave -128.833424 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /one glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -203.564 38.016 o -grestore -gsave -194.025100 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /two glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -268.756 38.016 o -grestore -gsave -259.216775 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /three glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -333.948 38.016 o -grestore -gsave -324.408451 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /four glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -399.139 38.016 o -grestore -gsave -389.600127 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /five glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /zero glyphshow -grestore -/DejaVuSerif findfont -10.000 scalefont -setfont -gsave -209.824062 9.750375 translate -0.000000 rotate -0.000000 0.000000 m /B glyphshow -7.348633 0.000000 m /l glyphshow -10.546875 0.000000 m /o glyphshow -16.567383 0.000000 m /c glyphshow -22.167969 0.000000 m /k glyphshow -28.227539 0.000000 m /space glyphshow -31.406250 0.000000 m /S glyphshow -38.256836 0.000000 m /i glyphshow -41.455078 0.000000 m /z glyphshow -46.723633 0.000000 m /e glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 53.8899 o -grestore -/DejaVuSans findfont -10.000 scalefont -setfont -gsave -34.693750 50.093052 translate -0.000000 rotate -0.000000 0.000000 m /two glyphshow -6.362305 0.000000 m /period glyphshow -9.541016 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 91.894 o -grestore -gsave -34.693750 88.097124 translate -0.000000 rotate -0.000000 0.000000 m /two glyphshow -6.362305 0.000000 m /period glyphshow -9.541016 0.000000 m /five glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 129.898 o -grestore -gsave -34.693750 126.101195 translate -0.000000 rotate -0.000000 0.000000 m /three glyphshow -6.362305 0.000000 m /period glyphshow -9.541016 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 167.902 o -grestore -gsave -34.693750 164.105267 translate -0.000000 rotate -0.000000 0.000000 m /three glyphshow -6.362305 0.000000 m /period glyphshow -9.541016 0.000000 m /five glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 205.906 o -grestore -gsave -34.693750 202.109338 translate -0.000000 rotate -0.000000 0.000000 m /four glyphshow -6.362305 0.000000 m /period glyphshow -9.541016 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 243.91 o -grestore -gsave -34.693750 240.113410 translate -0.000000 rotate -0.000000 0.000000 m /four glyphshow -6.362305 0.000000 m /period glyphshow -9.541016 0.000000 m /five glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 281.914 o -grestore -gsave -34.693750 278.117481 translate -0.000000 rotate -0.000000 0.000000 m /five glyphshow -6.362305 0.000000 m /period glyphshow -9.541016 0.000000 m /zero glyphshow -grestore -/DejaVuSerif findfont -10.000 scalefont -setfont -gsave -28.615625 148.517312 translate -90.000000 rotate -0.000000 0.000000 m /V glyphshow -7.221680 0.000000 m /a glyphshow -13.183594 0.000000 m /r glyphshow -17.963867 0.000000 m /i glyphshow -21.162109 0.000000 m /a glyphshow -27.124023 0.000000 m /n glyphshow -33.564453 0.000000 m /c glyphshow -39.165039 0.000000 m /e glyphshow -grestore -/DejaVuSans findfont -10.000 scalefont -setfont -gsave -57.600000 307.128000 translate -0.000000 rotate -0.000000 0.000000 m /one glyphshow -6.362305 0.000000 m /e glyphshow -12.514648 0.000000 m /minus glyphshow -20.893555 0.000000 m /seven glyphshow -grestore -1.500 setlinewidth -2 setlinecap -1.000 0.000 0.000 setrgbcolor -gsave -357.1 266.1 57.6 38.02 clipbox -73.832727 93.944205 m -74.484644 95.324468 l -75.136561 89.192869 l -75.788478 93.731325 l -76.440394 95.44619 l -77.092311 82.341398 l -77.744228 89.80873 l -78.396145 94.722445 l -79.048061 89.571046 l -79.699978 89.503496 l -80.351895 95.728753 l -81.003812 85.418122 l -81.655728 85.382937 l -82.307645 85.543156 l -82.959562 99.2118 l -83.611479 93.789607 l -84.263395 95.367482 l -84.915312 89.151541 l -85.567229 96.865893 l -86.219146 87.119052 l -86.871062 95.066835 l -87.522979 95.760316 l -88.174896 99.600912 l -88.826813 86.699455 l -89.478729 79.906353 l -90.130646 91.931104 l -90.782563 95.769395 l -91.43448 88.338357 l -92.086396 96.015609 l -92.738313 91.054578 l -93.39023 65.713666 l -94.042147 82.926132 l -94.694064 82.807407 l -95.34598 94.682929 l -95.997897 100.103269 l -96.649814 81.334153 l -97.301731 77.454501 l -97.953647 90.074297 l -98.605564 90.287865 l -99.257481 80.370901 l -99.909398 86.24649 l -100.561314 73.375769 l -101.213231 102.873878 l -101.865148 95.067008 l -102.517065 79.848176 l -103.168981 101.222308 l -103.820898 102.759355 l -104.472815 103.221127 l -105.124732 90.596203 l -105.776648 83.312541 l -106.428565 84.363377 l -107.080482 98.884306 l -107.732399 97.183937 l -108.384315 92.47132 l -109.036232 114.00045 l -109.688149 106.169574 l -110.991982 100.446399 l -111.643899 88.04727 l -112.295816 91.786364 l -112.947733 91.083758 l -113.59965 102.128056 l -114.251566 103.602444 l -114.903483 92.666347 l -115.5554 94.910897 l -116.207317 106.918588 l -116.859233 92.120271 l -117.51115 100.017282 l -118.163067 100.932674 l -118.814984 83.299151 l -119.4669 90.910453 l -120.118817 103.486472 l -120.770734 128.34158 l -121.422651 102.732671 l -122.074567 91.995475 l -122.726484 106.042467 l -123.378401 115.161863 l -124.030318 102.257925 l -124.682234 99.3582 l -125.334151 108.661522 l -125.986068 89.992706 l -126.637985 114.066213 l -127.289901 94.544954 l -127.941818 91.625361 l -128.593735 137.302917 l -129.245652 106.740775 l -129.897568 96.031308 l -130.549485 116.397629 l -131.201402 112.057178 l -131.853319 108.514608 l -132.505235 107.349644 l -133.157152 126.612196 l -133.809069 99.383941 l -135.112903 116.925918 l -135.764819 93.861331 l -136.416736 100.634901 l -137.068653 90.205011 l -137.72057 101.344341 l -138.372486 103.660667 l -139.024403 90.647424 l -139.67632 92.537263 l -140.328237 122.931726 l -140.980153 135.859386 l -141.63207 132.939365 l -142.283987 126.687367 l -142.935904 82.660531 l -143.58782 113.538359 l -144.239737 134.518472 l -144.891654 132.651298 l -145.543571 105.275986 l -146.195487 125.042631 l -146.847404 105.851078 l -147.499321 105.02983 l -148.151238 148.807173 l -148.803154 121.611984 l -149.455071 112.5284 l -150.106988 92.538744 l -150.758905 131.364104 l -151.410821 120.665971 l -152.062738 111.801933 l -152.714655 142.374552 l -153.366572 108.176995 l -154.018488 96.27447 l -154.670405 116.36174 l -155.974239 136.708165 l -156.626156 114.623583 l -157.278072 110.297144 l -157.929989 125.815931 l -158.581906 119.974039 l -159.233823 98.704789 l -159.885739 151.730679 l -160.537656 114.982507 l -161.189573 133.394731 l -161.84149 156.856563 l -162.493406 109.074364 l -163.145323 135.22184 l -163.79724 120.614715 l -164.449157 113.066031 l -165.101073 134.0806 l -166.404907 105.208312 l -167.056824 119.941101 l -167.70874 144.120485 l -168.360657 128.379991 l -169.012574 146.722458 l -169.664491 128.567705 l -170.316407 125.623636 l -170.968324 136.008912 l -171.620241 135.91417 l -172.272158 130.219308 l -173.575991 149.977127 l -174.227908 107.300758 l -174.879825 133.629607 l -175.531742 150.491281 l -176.183658 140.063588 l -176.835575 117.811588 l -177.487492 109.255639 l -178.139409 135.690803 l -178.791325 115.192353 l -179.443242 125.651386 l -180.095159 172.524276 l -180.747076 193.247013 l -181.398992 120.478766 l -182.050909 156.799194 l -182.702826 130.744592 l -183.354743 127.285881 l -184.006659 159.955104 l -184.658576 125.09348 l -185.310493 136.777218 l -185.96241 173.906657 l -186.614326 135.979126 l -187.266243 138.444529 l -187.91816 157.220638 l -188.570077 152.289302 l -189.221993 155.533293 l -189.87391 137.044426 l -190.525827 145.199956 l -191.177744 109.274338 l -191.82966 116.590076 l -192.481577 160.455784 l -193.785411 124.700098 l -194.437327 113.866002 l -195.089244 144.988164 l -195.741161 146.927324 l -196.393078 120.294571 l -197.044995 121.833029 l -197.696911 148.662177 l -198.348828 144.427513 l -199.000745 167.567528 l -199.652662 125.773759 l -200.304578 150.616222 l -200.956495 147.643298 l -201.608412 150.413289 l -202.260329 137.414114 l -202.912245 144.041281 l -203.564162 156.563375 l -204.216079 144.732713 l -204.867996 89.272606 l -205.519912 82.645751 l -206.823746 159.160447 l -207.475663 138.880916 l -208.127579 83.807611 l -209.431413 147.906447 l -210.08333 175.211393 l -211.387163 120.154732 l -212.03908 104.1426 l -212.690997 123.067456 l -213.342913 163.578286 l -214.646747 122.550878 l -215.298664 130.466324 l -215.950581 147.641053 l -216.602497 147.535074 l -217.254414 154.271288 l -217.906331 132.359972 l -218.558248 151.158693 l -219.210164 155.054544 l -219.862081 150.389098 l -220.513998 183.010359 l -221.165915 164.322328 l -221.817831 134.13716 l -223.121665 171.058706 l -223.773582 167.254679 l -224.425498 158.750398 l -225.077415 145.512253 l -225.729332 151.083677 l -226.381249 177.867022 l -227.033165 115.645528 l -227.685082 130.923455 l -228.336999 132.715879 l -228.988916 131.45514 l -229.640832 134.338189 l -230.292749 113.146563 l -230.944666 117.019467 l -232.248499 152.151566 l -232.900416 136.937762 l -233.552333 132.227614 l -234.20425 134.725116 l -234.856166 146.517148 l -235.508083 108.390731 l -236.16 127.153341 l -236.811917 124.905971 l -237.463834 111.463059 l -238.11575 113.63437 l -239.419584 149.962814 l -240.071501 139.786053 l -240.723417 190.574966 l -241.375334 188.106908 l -242.027251 188.151322 l -243.331084 132.325361 l -243.983001 120.039015 l -244.634918 120.559721 l -245.286835 142.315276 l -245.938751 159.052583 l -246.590668 191.8904 l -247.242585 180.828833 l -248.546418 131.481727 l -249.198335 183.277744 l -249.850252 215.95708 l -250.502169 163.630845 l -251.154085 149.943298 l -251.806002 181.526915 l -252.457919 151.978413 l -253.109836 141.68532 l -253.761752 115.16151 l -254.413669 133.115917 l -255.065586 123.941192 l -255.717503 135.397352 l -256.369419 152.123067 l -257.021336 141.54682 l -257.673253 151.390352 l -258.32517 131.159541 l -258.977087 130.963022 l -259.629003 165.348558 l -260.28092 174.428424 l -260.932837 190.734078 l -261.584754 217.822394 l -262.23667 208.932379 l -262.888587 155.938967 l -263.540504 175.806882 l -264.192421 157.016609 l -264.844337 129.920473 l -265.496254 120.649017 l -266.148171 100.680294 l -266.800088 71.969345 l -267.452004 95.112963 l -268.103921 145.427844 l -268.755838 129.354144 l -269.407755 133.90757 l -270.059671 131.637725 l -270.711588 110.279483 l -271.363505 106.017539 l -272.015422 115.409733 l -272.667338 143.356805 l -273.319255 132.385623 l -273.971172 139.418004 l -274.623089 140.232337 l -275.275005 125.393799 l -275.926922 129.333706 l -276.578839 136.085231 l -277.230756 167.25595 l -277.882673 140.384079 l -278.534589 107.735038 l -279.186506 145.895443 l -279.838423 120.074519 l -280.49034 117.191307 l -281.142256 139.130432 l -281.794173 134.963299 l -282.44609 121.476437 l -283.098007 162.304319 l -283.749923 175.406659 l -284.40184 183.482737 l -285.053757 207.471196 l -285.705674 203.339754 l -286.35759 227.654132 l -287.009507 258.337769 l -287.661424 233.67365 l -288.313341 239.969298 l -288.965257 205.120104 l -289.617174 192.661112 l -290.269091 190.483008 l -290.921008 222.465739 l -291.572924 230.451004 l -292.224841 223.761788 l -293.528675 152.075471 l -294.180591 170.327157 l -294.832508 171.335671 l -295.484425 111.286976 l -296.136342 101.621226 l -296.788258 115.532373 l -297.440175 99.666922 l -298.092092 126.118087 l -298.744009 144.337494 l -299.395926 147.776821 l -300.047842 128.818997 l -302.003593 186.674749 l -302.655509 204.147408 l -303.307426 235.805563 l -303.959343 189.103407 l -304.61126 177.286359 l -305.263176 192.707705 l -305.915093 173.18746 l -306.56701 167.15089 l -307.218927 126.296715 l -307.870843 138.418251 l -309.174677 126.227637 l -309.826594 127.26063 l -310.47851 111.08311 l -311.130427 157.501911 l -311.782344 185.543988 l -312.434261 163.360287 l -313.086177 121.465079 l -313.738094 109.731252 l -314.390011 100.293429 l -315.041928 110.736929 l -315.693844 74.610025 l -316.345761 81.162753 l -316.997678 67.240726 l -317.649595 81.277529 l -318.301512 104.182748 l -318.953428 86.596357 l -319.605345 104.860037 l -320.257262 141.489012 l -320.909179 128.288605 l -321.561095 196.577699 l -322.213012 217.562982 l -322.864929 219.354521 l -323.516846 235.518788 l -324.168762 258.328946 l -324.820679 253.196959 l -325.472596 221.500658 l -326.124513 157.692426 l -326.776429 145.754922 l -327.428346 172.392964 l -328.080263 145.894046 l -328.73218 149.607755 l -329.384096 152.134911 l -330.036013 165.930563 l -330.68793 126.804312 l -331.339847 130.302453 l -331.991763 108.392032 l -332.64368 157.986434 l -333.295597 193.220657 l -333.947514 173.856421 l -334.59943 188.569014 l -335.251347 187.885254 l -335.903264 171.032973 l -336.555181 144.502756 l -337.207097 135.837703 l -337.859014 134.398283 l -338.510931 137.290727 l -339.162848 130.520773 l -339.814765 181.00004 l -340.466681 160.57632 l -341.118598 167.769221 l -341.770515 171.442169 l -342.422432 140.29744 l -343.074348 121.621544 l -343.726265 97.236064 l -344.378182 110.366302 l -345.030099 152.52495 l -345.682015 144.989108 l -346.333932 178.988288 l -346.985849 172.270558 l -347.637766 186.538697 l -348.289682 127.410513 l -348.941599 106.542541 l -349.593516 106.208856 l -350.245433 79.601865 l -350.897349 106.971842 l -351.549266 114.238309 l -352.201183 125.127521 l -352.8531 178.883423 l -353.505016 134.889825 l -354.156933 158.776303 l -354.80885 173.405616 l -355.460767 172.391392 l -356.112683 175.328906 l -356.7646 184.031165 l -357.416517 202.553613 l -358.068434 189.60095 l -358.72035 211.053424 l -359.372267 178.182308 l -360.024184 188.91517 l -360.676101 215.282527 l -361.328018 185.787104 l -361.979934 175.692906 l -362.631851 132.846645 l -363.283768 101.639469 l -364.587601 143.443264 l -365.239518 139.752747 l -365.891435 173.090512 l -366.543352 153.671629 l -367.195268 153.69029 l -368.499102 149.781817 l -369.802935 192.160181 l -370.454852 178.058106 l -371.106769 224.306274 l -372.410602 292.032 l -373.062519 276.362471 l -373.714436 240.657925 l -374.366353 236.610446 l -375.018269 239.439898 l -375.670186 207.866155 l -376.322103 186.37945 l -376.97402 158.161439 l -377.625936 144.326198 l -378.277853 140.15687 l -378.92977 115.887954 l -379.581687 134.358263 l -380.233604 127.596795 l -380.88552 98.955733 l -381.537437 116.969911 l -382.189354 112.509015 l -382.841271 90.320868 l -383.493187 113.688849 l -384.145104 125.10599 l -384.797021 109.621287 l -385.448938 101.599321 l -386.100854 105.965629 l -386.752771 93.792388 l -387.404688 131.603419 l -388.056605 126.82719 l -388.708521 106.608087 l -389.360438 105.606879 l -390.012355 92.387977 l -390.664272 154.065302 l -391.316188 149.79948 l -391.968105 105.169038 l -392.620022 78.617521 l -393.271939 86.467283 l -393.923855 78.641534 l -394.575772 86.270892 l -395.227689 85.501955 l -395.879606 98.307203 l -396.531522 96.715153 l -397.835356 50.112 l -398.487273 55.016894 l -398.487273 55.016894 l -stroke -grestore -0.800 setlinewidth -0 setlinejoin -[] 0 setdash -0.000 setgray -gsave -57.6 38.016 m -57.6 304.128 l -stroke -grestore -gsave -414.72 38.016 m -414.72 304.128 l -stroke -grestore -gsave -57.6 38.016 m -414.72 38.016 l -stroke -grestore -gsave -57.6 304.128 m -414.72 304.128 l -stroke -grestore -/DejaVuSerif findfont -12.000 scalefont -setfont -gsave -209.597500 310.128000 translate -0.000000 rotate -0.000000 0.000000 m /B glyphshow -8.818359 0.000000 m /l glyphshow -12.656250 0.000000 m /o glyphshow -19.880859 0.000000 m /c glyphshow -26.601562 0.000000 m /k glyphshow -33.873047 0.000000 m /i glyphshow -37.710938 0.000000 m /n glyphshow -45.439453 0.000000 m /g glyphshow -grestore - -end -showpage diff --git a/doc/Programs/ResamplingAnalysisScripts/gaussian/blocking.png b/doc/Programs/ResamplingAnalysisScripts/gaussian/blocking.png deleted file mode 100644 index bfdec3e3845773711e798b833c3ad2a464f78d4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38346 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 EACLqN^Z)<= diff --git a/doc/Programs/ResamplingAnalysisScripts/gaussian/data.eps b/doc/Programs/ResamplingAnalysisScripts/gaussian/data.eps deleted file mode 100644 index 2a2827a38..000000000 --- a/doc/Programs/ResamplingAnalysisScripts/gaussian/data.eps +++ /dev/null @@ -1,8886 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Title: gaussian/data.eps -%%Creator: matplotlib version 2.0.0, http://matplotlib.org/ -%%CreationDate: Wed Oct 4 14:08:30 2017 -%%Orientation: portrait -%%BoundingBox: 75 223 536 568 -%%EndComments -%%BeginProlog -/mpldict 9 dict def -mpldict begin -/m { moveto } bind def -/l { lineto } bind def -/r { rlineto } bind def -/c { curveto } bind def -/cl { closepath } bind def -/box { -m -1 index 0 r -0 exch r -neg 0 r -cl -} bind def -/clipbox { -box -clip -newpath -} bind def -%!PS-Adobe-3.0 Resource-Font -%%Title: DejaVu Serif -%%Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. DejaVu changes are in public domain -%%Creator: Converted from TrueType to type 3 by PPR -25 dict begin -/_d{bind def}bind def -/_m{moveto}_d -/_l{lineto}_d -/_cl{closepath eofill}_d -/_c{curveto}_d -/_sc{7 -1 roll{setcachedevice}{pop pop pop pop pop pop}ifelse}_d -/_e{exec}_d -/FontName /DejaVuSerif def -/PaintType 0 def -/FontMatrix[.001 0 0 .001 0 0]def -/FontBBox[-770 -347 2105 1109]def -/FontType 3 def -/Encoding [ /space /C /E /G /H /M /a /e /i /l /n /o /r /s /t /u /v /y ] def -/FontInfo 10 dict dup begin -/FamilyName (DejaVu Serif) def -/FullName (DejaVu Serif) def -/Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. DejaVu changes are in public domain ) def -/Weight (Book) def -/Version (Version 2.35) def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -130 def -/UnderlineThickness 90 def -end readonly def -/CharStrings 18 dict dup begin -/space{318 0 0 0 0 0 _sc -}_d -/C{{765 0 56 -13 705 742 _sc -705 193 _m -683 125 647 73 597 39 _c -546 4 482 -13 405 -13 _c -357 -13 312 -5 272 11 _c -231 27 195 50 164 82 _c -127 118 100 160 82 206 _c -64 252 56 305 56 364 _c -56 477 88 568 154 638 _c -219 707 305 742 413 742 _c -453 742 495 736 540 726 _c -584 716 633 700 685 679 _c -685 511 _l -630 511 _l -618 572 593 617 557 646 _c -}_e{521 675 470 690 405 690 _c -327 690 268 662 228 607 _c -188 551 168 470 168 364 _c -168 257 188 176 228 121 _c -268 65 327 38 405 38 _c -459 38 503 51 539 77 _c -574 103 599 141 615 193 _c -705 193 _l -_cl}_e}_d -/E{730 0 55 0 650 729 _sc -55 0 _m -55 52 _l -148 52 _l -148 677 _l -55 677 _l -55 729 _l -642 729 _l -642 567 _l -582 567 _l -582 669 _l -247 669 _l -247 425 _l -486 425 _l -486 516 _l -546 516 _l -546 274 _l -486 274 _l -486 365 _l -247 365 _l -247 60 _l -590 60 _l -590 162 _l -650 162 _l -650 0 _l -55 0 _l -_cl}_d -/G{{799 0 56 -13 720 742 _sc -640 511 _m -628 572 605 617 569 646 _c -533 675 482 690 418 690 _c -334 690 271 663 230 609 _c -188 555 168 473 168 364 _c -168 256 189 175 232 120 _c -274 65 337 38 420 38 _c -456 38 491 42 525 51 _c -559 60 591 74 621 93 _c -621 281 _l -484 281 _l -484 333 _l -720 333 _l -720 61 _l -676 35 630 17 580 5 _c -530 -7 476 -13 420 -13 _c -}_e{310 -13 221 21 155 89 _c -89 157 56 249 56 364 _c -56 479 89 571 155 639 _c -221 707 311 742 424 742 _c -465 742 508 737 553 727 _c -597 717 645 703 695 684 _c -695 511 _l -640 511 _l -_cl}_e}_d -/H{{872 0 55 0 817 729 _sc -55 0 _m -55 52 _l -148 52 _l -148 677 _l -55 677 _l -55 729 _l -340 729 _l -340 677 _l -247 677 _l -247 425 _l -625 425 _l -625 677 _l -532 677 _l -532 729 _l -817 729 _l -817 677 _l -724 677 _l -724 52 _l -817 52 _l -817 0 _l -532 0 _l -532 52 _l -625 52 _l -625 365 _l -247 365 _l -247 52 _l -340 52 _l -340 0 _l -55 0 _l -_cl}_e}_d -/M{1024 0 50 0 973 729 _sc -55 0 _m -55 52 _l -148 52 _l -148 677 _l -50 677 _l -50 729 _l -262 729 _l -518 210 _l -774 729 _l -973 729 _l -973 677 _l -876 677 _l -876 52 _l -969 52 _l -969 0 _l -684 0 _l -684 52 _l -777 52 _l -777 615 _l -527 107 _l -458 107 _l -208 615 _l -208 52 _l -301 52 _l -301 0 _l -55 0 _l -_cl}_d -/a{{596 0 50 -13 568 533 _sc -398 163 _m -398 273 _l -282 273 _l -237 273 204 263 182 244 _c -160 224 150 195 150 156 _c -150 120 161 91 183 70 _c -205 48 235 38 273 38 _c -310 38 340 49 363 72 _c -386 95 398 125 398 163 _c -488 324 _m -488 52 _l -568 52 _l -568 0 _l -398 0 _l -398 56 _l -378 32 355 14 329 3 _c -303 -7 272 -13 238 -13 _c -180 -13 134 2 100 32 _c -}_e{66 62 50 104 50 156 _c -50 209 69 250 108 280 _c -146 310 201 325 272 325 _c -398 325 _l -398 361 _l -398 400 386 430 362 452 _c -338 474 304 485 261 485 _c -225 485 197 476 176 460 _c -154 444 141 420 136 388 _c -90 388 _l -90 493 _l -121 506 151 516 181 523 _c -210 529 239 533 267 533 _c -339 533 393 515 431 479 _c -469 443 488 392 488 324 _c -_cl}_e}_d -/e{{592 0 50 -13 542 533 _sc -542 250 _m -155 250 _l -155 246 _l -155 176 168 123 194 87 _c -220 51 259 34 311 34 _c -350 34 382 44 408 65 _c -433 85 451 116 461 157 _c -533 157 _l -519 100 492 57 454 29 _c -415 1 364 -13 302 -13 _c -226 -13 165 11 119 61 _c -73 111 50 177 50 260 _c -50 342 72 408 118 458 _c -163 508 222 533 296 533 _c -374 533 435 508 477 460 _c -}_e{519 412 540 342 542 250 _c -436 302 _m -434 362 421 408 397 439 _c -373 469 340 485 296 485 _c -254 485 222 469 198 438 _c -174 407 160 362 155 302 _c -436 302 _l -_cl}_e}_d -/i{320 0 36 0 297 736 _sc -97 680 _m -97 695 102 708 113 719 _c -124 730 137 736 153 736 _c -167 736 180 730 191 719 _c -202 708 208 695 208 680 _c -208 664 202 651 192 641 _c -181 630 168 625 153 625 _c -137 625 124 630 113 641 _c -102 651 97 664 97 680 _c -212 52 _m -297 52 _l -297 0 _l -36 0 _l -36 52 _l -122 52 _l -122 467 _l -36 467 _l -36 519 _l -212 519 _l -212 52 _l -_cl}_d -/l{320 0 29 0 290 760 _sc -205 52 _m -290 52 _l -290 0 _l -29 0 _l -29 52 _l -115 52 _l -115 708 _l -29 708 _l -29 760 _l -205 760 _l -205 52 _l -_cl}_d -/n{{644 0 36 0 616 533 _sc -41 0 _m -41 52 _l -122 52 _l -122 467 _l -36 467 _l -36 519 _l -212 519 _l -212 427 _l -228 461 250 488 276 506 _c -302 524 333 533 369 533 _c -426 533 468 516 495 484 _c -522 451 536 400 536 330 _c -536 52 _l -616 52 _l -616 0 _l -368 0 _l -368 52 _l -446 52 _l -446 302 _l -446 365 438 408 422 432 _c -406 456 379 468 340 468 _c -}_e{298 468 266 452 244 422 _c -222 391 212 347 212 289 _c -212 52 _l -290 52 _l -290 0 _l -41 0 _l -_cl}_e}_d -/o{602 0 50 -13 552 533 _sc -301 34 _m -349 34 385 53 410 91 _c -434 129 447 185 447 260 _c -447 334 434 390 410 428 _c -385 466 349 485 301 485 _c -253 485 216 466 192 428 _c -167 390 155 334 155 260 _c -155 185 167 129 192 91 _c -216 53 253 34 301 34 _c -301 -13 _m -225 -13 165 11 119 61 _c -73 111 50 177 50 260 _c -50 342 72 408 118 458 _c -164 508 225 533 301 533 _c -377 533 437 508 483 458 _c -529 408 552 342 552 260 _c -552 177 529 111 483 61 _c -437 11 377 -13 301 -13 _c -_cl}_d -/r{478 0 36 0 478 533 _sc -478 520 _m -478 390 _l -426 390 _l -424 416 417 435 405 448 _c -392 460 373 467 349 467 _c -305 467 271 451 247 421 _c -223 390 212 346 212 289 _c -212 52 _l -316 52 _l -316 0 _l -41 0 _l -41 52 _l -122 52 _l -122 468 _l -36 468 _l -36 519 _l -212 519 _l -212 427 _l -229 463 251 489 279 507 _c -307 524 341 533 381 533 _c -395 533 411 531 427 529 _c -443 527 460 524 478 520 _c -_cl}_d -/s{{513 0 56 -13 462 533 _sc -56 29 _m -56 150 _l -108 150 _l -109 111 121 82 144 63 _c -167 43 201 34 246 34 _c -286 34 317 41 338 57 _c -359 72 370 94 370 123 _c -370 145 362 164 347 178 _c -331 192 299 207 249 223 _c -184 245 _l -139 259 107 277 87 299 _c -67 320 57 347 57 381 _c -57 428 74 465 109 492 _c -144 519 192 533 254 533 _c -281 533 310 529 340 522 _c -}_e{370 515 402 505 434 491 _c -434 378 _l -382 378 _l -380 411 369 437 347 456 _c -325 475 295 485 257 485 _c -219 485 190 478 171 465 _c -151 451 142 431 142 405 _c -142 383 149 365 164 352 _c -178 339 208 326 252 312 _c -323 290 _l -372 274 407 255 429 232 _c -451 209 462 180 462 144 _c -462 94 443 56 405 28 _c -367 0 316 -13 250 -13 _c -216 -13 184 -9 152 -3 _c -}_e{120 3 88 14 56 29 _c -_cl}_e}_d -/t{402 0 29 -13 394 680 _sc -108 467 _m -29 467 _l -29 519 _l -108 519 _l -108 680 _l -198 680 _l -198 519 _l -367 519 _l -367 467 _l -198 467 _l -198 137 _l -198 93 202 64 211 52 _c -219 40 235 34 258 34 _c -281 34 298 41 309 55 _c -319 69 325 91 326 122 _c -394 122 _l -391 74 378 40 355 19 _c -332 -2 297 -13 250 -13 _c -198 -13 161 -1 140 21 _c -118 43 108 82 108 137 _c -108 467 _l -_cl}_d -/u{{644 0 27 -13 607 519 _sc -354 519 _m -522 519 _l -522 52 _l -607 52 _l -607 0 _l -432 0 _l -432 92 _l -415 57 393 31 367 13 _c -341 -4 310 -13 276 -13 _c -218 -13 175 3 148 35 _c -121 67 108 119 108 189 _c -108 467 _l -27 467 _l -27 519 _l -198 519 _l -198 217 _l -198 153 205 110 221 87 _c -237 63 264 52 304 52 _c -346 52 377 67 399 98 _c -421 128 432 173 432 231 _c -}_e{432 467 _l -354 467 _l -354 519 _l -_cl}_e}_d -/v{565 0 -2 0 562 519 _sc -247 0 _m -56 467 _l --2 467 _l --2 519 _l -236 519 _l -236 467 _l -153 467 _l -299 110 _l -445 467 _l -367 467 _l -367 519 _l -562 519 _l -562 467 _l -504 467 _l -313 0 _l -247 0 _l -_cl}_d -/y{{565 0 -2 -221 562 519 _sc -216 -94 _m -250 -8 _l -56 467 _l --2 467 _l --2 519 _l -236 519 _l -236 467 _l -153 467 _l -299 110 _l -445 467 _l -367 467 _l -367 519 _l -562 519 _l -562 467 _l -504 467 _l -266 -116 _l -250 -156 232 -184 212 -199 _c -192 -213 164 -221 128 -221 _c -112 -221 97 -219 81 -217 _c -65 -214 48 -210 32 -206 _c -32 -107 _l -78 -107 _l -80 -129 85 -144 95 -154 _c -}_e{104 -164 118 -169 138 -169 _c -156 -169 170 -164 181 -154 _c -192 -144 204 -124 216 -94 _c -_cl}_e}_d -end readonly def - -/BuildGlyph - {exch begin - CharStrings exch - 2 copy known not{pop /.notdef}if - true 3 1 roll get exec - end}_d - -/BuildChar { - 1 index /Encoding get exch get - 1 index /BuildGlyph get exec -}_d - -FontName currentdict end definefont pop -%!PS-Adobe-3.0 Resource-Font -%%Title: DejaVu Sans -%%Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. DejaVu changes are in public domain -%%Creator: Converted from TrueType to type 3 by PPR -25 dict begin -/_d{bind def}bind def -/_m{moveto}_d -/_l{lineto}_d -/_cl{closepath eofill}_d -/_c{curveto}_d -/_sc{7 -1 roll{setcachedevice}{pop pop pop pop pop pop}ifelse}_d -/_e{exec}_d -/FontName /DejaVuSans def -/PaintType 0 def -/FontMatrix[.001 0 0 .001 0 0]def -/FontBBox[-1021 -463 1793 1232]def -/FontType 3 def -/Encoding [ /period /zero /one /two /four /six /eight /nine ] def -/FontInfo 10 dict dup begin -/FamilyName (DejaVu Sans) def -/FullName (DejaVu Sans) def -/Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. DejaVu changes are in public domain ) def -/Weight (Book) def -/Version (Version 2.35) def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -130 def -/UnderlineThickness 90 def -end readonly def -/CharStrings 8 dict dup begin -/period{318 0 107 0 210 124 _sc -107 124 _m -210 124 _l -210 0 _l -107 0 _l -107 124 _l -_cl}_d -/zero{636 0 66 -13 570 742 _sc -318 664 _m -267 664 229 639 203 589 _c -177 539 165 464 165 364 _c -165 264 177 189 203 139 _c -229 89 267 64 318 64 _c -369 64 407 89 433 139 _c -458 189 471 264 471 364 _c -471 464 458 539 433 589 _c -407 639 369 664 318 664 _c -318 742 _m -399 742 461 709 505 645 _c -548 580 570 486 570 364 _c -570 241 548 147 505 83 _c -461 19 399 -13 318 -13 _c -236 -13 173 19 130 83 _c -87 147 66 241 66 364 _c -66 486 87 580 130 645 _c -173 709 236 742 318 742 _c -_cl}_d -/one{636 0 110 0 544 729 _sc -124 83 _m -285 83 _l -285 639 _l -110 604 _l -110 694 _l -284 729 _l -383 729 _l -383 83 _l -544 83 _l -544 0 _l -124 0 _l -124 83 _l -_cl}_d -/two{{636 0 73 0 536 742 _sc -192 83 _m -536 83 _l -536 0 _l -73 0 _l -73 83 _l -110 121 161 173 226 239 _c -290 304 331 346 348 365 _c -380 400 402 430 414 455 _c -426 479 433 504 433 528 _c -433 566 419 598 392 622 _c -365 646 330 659 286 659 _c -255 659 222 653 188 643 _c -154 632 117 616 78 594 _c -78 694 _l -118 710 155 722 189 730 _c -223 738 255 742 284 742 _c -}_e{359 742 419 723 464 685 _c -509 647 532 597 532 534 _c -532 504 526 475 515 449 _c -504 422 484 390 454 354 _c -446 344 420 317 376 272 _c -332 227 271 164 192 83 _c -_cl}_e}_d -/four{636 0 49 0 580 729 _sc -378 643 _m -129 254 _l -378 254 _l -378 643 _l -352 729 _m -476 729 _l -476 254 _l -580 254 _l -580 172 _l -476 172 _l -476 0 _l -378 0 _l -378 172 _l -49 172 _l -49 267 _l -352 729 _l -_cl}_d -/six{{636 0 70 -13 573 742 _sc -330 404 _m -286 404 251 388 225 358 _c -199 328 186 286 186 234 _c -186 181 199 139 225 109 _c -251 79 286 64 330 64 _c -374 64 409 79 435 109 _c -461 139 474 181 474 234 _c -474 286 461 328 435 358 _c -409 388 374 404 330 404 _c -526 713 _m -526 623 _l -501 635 476 644 451 650 _c -425 656 400 659 376 659 _c -310 659 260 637 226 593 _c -}_e{192 549 172 482 168 394 _c -187 422 211 444 240 459 _c -269 474 301 482 336 482 _c -409 482 467 459 509 415 _c -551 371 573 310 573 234 _c -573 159 550 99 506 54 _c -462 9 403 -13 330 -13 _c -246 -13 181 19 137 83 _c -92 147 70 241 70 364 _c -70 479 97 571 152 639 _c -206 707 280 742 372 742 _c -396 742 421 739 447 735 _c -472 730 498 723 526 713 _c -_cl}_e}_d -/eight{{636 0 68 -13 568 742 _sc -318 346 _m -271 346 234 333 207 308 _c -180 283 167 249 167 205 _c -167 161 180 126 207 101 _c -234 76 271 64 318 64 _c -364 64 401 76 428 102 _c -455 127 469 161 469 205 _c -469 249 455 283 429 308 _c -402 333 365 346 318 346 _c -219 388 _m -177 398 144 418 120 447 _c -96 476 85 511 85 553 _c -85 611 105 657 147 691 _c -188 725 245 742 318 742 _c -}_e{390 742 447 725 489 691 _c -530 657 551 611 551 553 _c -551 511 539 476 515 447 _c -491 418 459 398 417 388 _c -464 377 501 355 528 323 _c -554 291 568 251 568 205 _c -568 134 546 80 503 43 _c -459 5 398 -13 318 -13 _c -237 -13 175 5 132 43 _c -89 80 68 134 68 205 _c -68 251 81 291 108 323 _c -134 355 171 377 219 388 _c -183 544 _m -183 506 194 476 218 455 _c -}_e{242 434 275 424 318 424 _c -360 424 393 434 417 455 _c -441 476 453 506 453 544 _c -453 582 441 611 417 632 _c -393 653 360 664 318 664 _c -275 664 242 653 218 632 _c -194 611 183 582 183 544 _c -_cl}_e}_d -/nine{{636 0 63 -13 566 742 _sc -110 15 _m -110 105 _l -134 93 159 84 185 78 _c -210 72 235 69 260 69 _c -324 69 374 90 408 134 _c -442 178 462 244 468 334 _c -448 306 424 284 396 269 _c -367 254 335 247 300 247 _c -226 247 168 269 126 313 _c -84 357 63 417 63 494 _c -63 568 85 628 129 674 _c -173 719 232 742 306 742 _c -390 742 455 709 499 645 _c -543 580 566 486 566 364 _c -}_e{566 248 538 157 484 89 _c -429 21 356 -13 264 -13 _c -239 -13 214 -10 189 -6 _c -163 -2 137 5 110 15 _c -306 324 _m -350 324 385 339 411 369 _c -437 399 450 441 450 494 _c -450 546 437 588 411 618 _c -385 648 350 664 306 664 _c -262 664 227 648 201 618 _c -175 588 162 546 162 494 _c -162 441 175 399 201 369 _c -227 339 262 324 306 324 _c -_cl}_e}_d -end readonly def - -/BuildGlyph - {exch begin - CharStrings exch - 2 copy known not{pop /.notdef}if - true 3 1 roll get exec - end}_d - -/BuildChar { - 1 index /Encoding get exch get - 1 index /BuildGlyph get exec -}_d - -FontName currentdict end definefont pop -end -%%EndProlog -mpldict begin -75.6 223.2 translate -460.8 345.6 0 0 clipbox -gsave -0 0 m -460.8 0 l -460.8 345.6 l -0 345.6 l -cl -1.000 setgray -fill -grestore -gsave -57.6 38.016 m -414.72 38.016 l -414.72 304.128 l -57.6 304.128 l -cl -1.000 setgray -fill -grestore -0.800 setlinewidth -1 setlinejoin -0 setlinecap -[] 0 setdash -0.000 setgray -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 38.016 o -grestore -/DejaVuSans findfont -10.000 scalefont -setfont -gsave -54.420313 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -129.024 38.016 o -grestore -gsave -116.305250 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /two glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /zero glyphshow -19.086914 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -200.448 38.016 o -grestore -gsave -187.729250 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /four glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /zero glyphshow -19.086914 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -271.872 38.016 o -grestore -gsave -259.153250 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /six glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /zero glyphshow -19.086914 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -343.296 38.016 o -grestore -gsave -330.577250 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /eight glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /zero glyphshow -19.086914 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m -0 -3.5 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -414.72 38.016 o -grestore -gsave -398.821563 23.422250 translate -0.000000 rotate -0.000000 0.000000 m /one glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /zero glyphshow -19.086914 0.000000 m /zero glyphshow -25.449219 0.000000 m /zero glyphshow -grestore -/DejaVuSerif findfont -10.000 scalefont -setfont -gsave -185.675625 9.750375 translate -0.000000 rotate -0.000000 0.000000 m /M glyphshow -10.239258 0.000000 m /o glyphshow -16.259766 0.000000 m /n glyphshow -22.700195 0.000000 m /t glyphshow -26.718750 0.000000 m /e glyphshow -32.636719 0.000000 m /C glyphshow -40.288086 0.000000 m /a glyphshow -46.250000 0.000000 m /r glyphshow -51.030273 0.000000 m /l glyphshow -54.228516 0.000000 m /o glyphshow -60.249023 0.000000 m /space glyphshow -63.427734 0.000000 m /H glyphshow -72.148438 0.000000 m /i glyphshow -75.346680 0.000000 m /s glyphshow -80.478516 0.000000 m /t glyphshow -84.497070 0.000000 m /o glyphshow -90.517578 0.000000 m /r glyphshow -95.297852 0.000000 m /y glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 65.0548 o -grestore -/DejaVuSans findfont -10.000 scalefont -setfont -gsave -15.615625 61.257972 translate -0.000000 rotate -0.000000 0.000000 m /nine glyphshow -6.362305 0.000000 m /period glyphshow -9.541016 0.000000 m /eight glyphshow -15.903320 0.000000 m /zero glyphshow -22.265625 0.000000 m /zero glyphshow -28.627930 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 117.992 o -grestore -gsave -15.615625 114.195556 translate -0.000000 rotate -0.000000 0.000000 m /nine glyphshow -6.362305 0.000000 m /period glyphshow -9.541016 0.000000 m /nine glyphshow -15.903320 0.000000 m /zero glyphshow -22.265625 0.000000 m /zero glyphshow -28.627930 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 170.93 o -grestore -gsave -9.256250 167.133140 translate -0.000000 rotate -0.000000 0.000000 m /one glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /period glyphshow -15.903320 0.000000 m /zero glyphshow -22.265625 0.000000 m /zero glyphshow -28.627930 0.000000 m /zero glyphshow -34.990234 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 223.868 o -grestore -gsave -9.256250 220.070723 translate -0.000000 rotate -0.000000 0.000000 m /one glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /period glyphshow -15.903320 0.000000 m /one glyphshow -22.265625 0.000000 m /zero glyphshow -28.627930 0.000000 m /zero glyphshow -34.990234 0.000000 m /zero glyphshow -grestore -gsave -/o { -gsave -newpath -translate -0.8 setlinewidth -1 setlinejoin -0 setlinecap -0 0 m --3.5 0 l - -gsave -0.000 setgray -fill -grestore -stroke -grestore -} bind def -57.6 276.805 o -grestore -gsave -9.256250 273.008307 translate -0.000000 rotate -0.000000 0.000000 m /one glyphshow -6.362305 0.000000 m /zero glyphshow -12.724609 0.000000 m /period glyphshow -15.903320 0.000000 m /two glyphshow -22.265625 0.000000 m /zero glyphshow -28.627930 0.000000 m /zero glyphshow -34.990234 0.000000 m /zero glyphshow -grestore -/DejaVuSerif findfont -10.000 scalefont -setfont -gsave -3.178125 88.884500 translate -90.000000 rotate -0.000000 0.000000 m /G glyphshow -7.988281 0.000000 m /a glyphshow -13.950195 0.000000 m /u glyphshow -20.390625 0.000000 m /s glyphshow -25.522461 0.000000 m /s glyphshow -30.654297 0.000000 m /i glyphshow -33.852539 0.000000 m /a glyphshow -39.814453 0.000000 m /n glyphshow -46.254883 0.000000 m /space glyphshow -49.433594 0.000000 m /M glyphshow -59.672852 0.000000 m /o glyphshow -65.693359 0.000000 m /n glyphshow -72.133789 0.000000 m /t glyphshow -76.152344 0.000000 m /e glyphshow -82.070312 0.000000 m /space glyphshow -85.249023 0.000000 m /C glyphshow -92.900391 0.000000 m /a glyphshow -98.862305 0.000000 m /r glyphshow -103.642578 0.000000 m /l glyphshow -106.840820 0.000000 m /o glyphshow -112.861328 0.000000 m /space glyphshow -116.040039 0.000000 m /E glyphshow -123.339844 0.000000 m /v glyphshow -128.989258 0.000000 m /o glyphshow -135.009766 0.000000 m /l glyphshow -138.208008 0.000000 m /u glyphshow -144.648438 0.000000 m /t glyphshow -148.666992 0.000000 m /i glyphshow -151.865234 0.000000 m /o glyphshow -157.885742 0.000000 m /n glyphshow -grestore -1.000 setlinewidth -2 setlinecap -1.000 0.000 0.000 setrgbcolor -gsave -357.1 266.1 57.6 38.02 clipbox -57.6 169.01134 m -57.635712 198.379454 l -57.671424 127.03565 l -57.742848 182.59928 l -57.77856 146.166569 l -57.849984 163.914246 l -57.885696 180.869225 l -57.885696 180.869225 l -57.885696 180.869225 l -57.95712 146.476851 l -57.992832 260.023741 l -57.992832 260.023741 l -57.992832 260.023741 l -58.028544 136.480655 l -58.099968 218.641639 l -58.171392 200.745094 l -58.207104 118.318141 l -58.278528 129.459558 l -58.421376 226.716026 l -58.564224 156.998307 l -58.599936 152.185729 l -58.67136 201.797459 l -58.707072 165.489335 l -58.742784 179.654336 l -58.742784 179.654336 l -58.742784 179.654336 l -58.778496 152.89539 l -58.814208 175.071116 l -58.84992 229.599352 l -58.885632 204.137717 l -58.921344 155.151748 l -58.992768 160.015665 l -59.064192 186.690069 l -59.099904 153.045191 l -59.171328 155.490385 l -59.20704 183.451381 l -59.278464 175.963361 l -59.349888 122.952405 l -59.3856 165.078887 l -59.421312 193.653218 l -59.492736 170.712291 l -59.56416 155.158907 l -59.599872 219.609741 l -59.671296 180.631666 l -59.814144 162.903046 l -59.92128 189.865795 l -59.992704 141.996801 l -60.028416 176.297595 l -60.064128 168.262817 l -60.09984 185.763049 l -60.09984 185.763049 l -60.09984 185.763049 l -60.242688 95.732159 l -60.385536 218.153391 l -60.528384 128.207799 l -60.564096 193.234626 l -60.564096 193.234626 l -60.564096 193.234626 l -60.599808 127.485184 l -60.671232 187.596075 l -60.778368 161.060011 l -60.81408 225.047401 l -60.81408 225.047401 l -60.81408 225.047401 l -60.849792 105.92671 l -60.921216 160.029853 l -60.956928 151.737104 l -60.99264 154.695278 l -61.028352 161.874093 l -61.064064 157.776288 l -61.099776 120.700911 l -61.135488 203.518308 l -61.206912 187.485125 l -61.242624 137.379544 l -61.278336 164.079879 l -61.278336 164.079879 l -61.421184 197.272901 l -61.456896 198.245432 l -61.564032 139.733893 l -61.599744 188.31094 l -61.599744 188.31094 l -61.599744 188.31094 l -61.635456 105.605556 l -61.742592 114.56599 l -61.849728 209.776351 l -61.956864 133.208282 l -62.064 175.104022 l -62.099712 172.211433 l -62.135424 167.001978 l -62.171136 202.540773 l -62.206848 167.618019 l -62.24256 161.148939 l -62.349696 208.396213 l -62.385408 184.149088 l -62.456832 113.826586 l -62.492544 147.879026 l -62.528256 219.474748 l -62.563968 219.263035 l -62.563968 219.263035 l -62.671104 129.239808 l -62.849664 187.086873 l -62.992512 130.014575 l -63.028224 189.192765 l -63.099648 155.89854 l -63.13536 174.820361 l -63.171072 174.207983 l -63.206784 142.440445 l -63.242496 168.843151 l -63.278208 180.136417 l -63.278208 180.136417 l -63.278208 180.136417 l -63.349632 104.146071 l -63.49248 109.975938 l -63.563904 202.286798 l -63.635328 182.841767 l -63.67104 200.946795 l -63.778176 141.452122 l -63.885312 198.677671 l -63.921024 195.536215 l -64.063872 149.292074 l -64.20672 203.237172 l -64.242432 206.846675 l -64.278144 157.038711 l -64.349568 160.184126 l -64.38528 211.497287 l -64.456704 179.794288 l -64.492416 158.833559 l -64.492416 158.833559 l -64.492416 158.833559 l -64.56384 220.959306 l -64.599552 165.204773 l -64.635264 147.072581 l -64.670976 157.777223 l -64.706688 218.465899 l -64.706688 218.465899 l -64.706688 218.465899 l -64.7424 144.993225 l -64.778112 158.415861 l -64.813824 226.842019 l -64.885248 180.87201 l -64.92096 154.891015 l -64.92096 154.891015 l -64.92096 154.891015 l -64.956672 195.200314 l -64.956672 195.200314 l -64.956672 195.200314 l -65.09952 122.373768 l -65.206656 246.820565 l -65.27808 140.241685 l -65.313792 183.608215 l -65.385216 219.019547 l -65.45664 157.09093 l -65.492352 189.756554 l -65.528064 193.055609 l -65.563776 129.501593 l -65.563776 129.501593 l -65.563776 129.501593 l -65.599488 204.855701 l -65.599488 204.855701 l -65.599488 204.855701 l -65.6352 118.186345 l -65.706624 175.584653 l -65.778048 193.891133 l -65.849472 119.978592 l -65.885184 173.27403 l -65.956608 132.807199 l -66.028032 204.907556 l -66.063744 150.58948 l -66.099456 141.367009 l -66.135168 185.245627 l -66.17088 147.608688 l -66.206592 130.090568 l -66.242304 143.914261 l -66.278016 200.814653 l -66.34944 185.575623 l -66.385152 143.960689 l -66.385152 143.960689 l -66.385152 143.960689 l -66.420864 222.673604 l -66.492288 190.439223 l -66.528 196.137997 l -66.599424 151.909871 l -66.670848 168.738671 l -66.70656 187.161307 l -66.70656 187.161307 l -66.70656 187.161307 l -66.742272 157.019563 l -66.777984 223.165676 l -66.777984 223.165676 l -66.777984 223.165676 l -66.813696 141.731622 l -66.88512 151.322283 l -66.956544 209.632316 l -67.027968 204.679151 l -67.135104 112.928237 l -67.206528 190.329472 l -67.277952 177.690898 l -67.313664 173.602552 l -67.456512 111.085017 l -67.492224 208.468734 l -67.563648 162.593854 l -67.635072 170.746109 l -67.706496 155.315588 l -67.742208 170.501253 l -67.77792 205.45083 l -67.849344 204.708521 l -67.885056 148.924079 l -67.885056 148.924079 l -67.885056 148.924079 l -67.920768 218.773417 l -67.920768 218.773417 l -67.920768 218.773417 l -68.027904 127.621982 l -68.099328 198.159917 l -68.13504 175.917613 l -68.170752 120.297873 l -68.170752 120.297873 l -68.170752 120.297873 l -68.242176 197.139089 l -68.3136 187.74347 l -68.349312 127.434218 l -68.349312 127.434218 l -68.349312 127.434218 l -68.456448 197.670149 l -68.49216 185.986013 l -68.527872 224.917819 l -68.527872 224.917819 l -68.527872 224.917819 l -68.635008 162.386207 l -68.706432 200.573511 l -68.742144 196.214345 l -68.777856 163.876912 l -68.777856 163.876912 l -68.777856 163.876912 l -68.84928 230.370759 l -68.884992 135.871547 l -68.956416 176.697342 l -69.099264 141.815311 l -69.134976 175.830363 l -69.134976 175.830363 l -69.134976 175.830363 l -69.170688 127.700636 l -69.170688 127.700636 l -69.170688 127.700636 l -69.2064 191.056536 l -69.2064 191.056536 l -69.2064 191.056536 l -69.242112 126.209044 l -69.277824 133.936259 l -69.313536 202.838206 l -69.313536 202.838206 l -69.313536 202.838206 l -69.349248 107.370753 l -69.420672 139.599318 l -69.456384 201.224633 l -69.527808 174.176577 l -69.56352 160.080329 l -69.599232 208.289683 l -69.670656 181.942155 l -69.706368 188.994638 l -69.74208 131.056579 l -69.813504 160.726487 l -69.849216 196.687745 l -69.849216 196.687745 l -69.849216 196.687745 l -69.884928 126.404349 l -69.956352 132.531489 l -70.027776 178.020993 l -70.063488 175.629304 l -70.0992 137.423371 l -70.0992 137.423371 l -70.0992 137.423371 l -70.134912 186.623613 l -70.206336 163.733466 l -70.242048 147.882831 l -70.242048 147.882831 l -70.242048 147.882831 l -70.384896 192.060404 l -70.420608 187.935031 l -70.45632 181.58881 l -70.527744 143.307588 l -70.563456 160.925966 l -70.63488 172.713634 l -70.670592 201.951923 l -70.670592 201.951923 l -70.670592 201.951923 l -70.742016 138.146535 l -70.777728 201.815367 l -70.920576 146.852391 l -70.956288 148.663133 l -70.992 193.926036 l -71.063424 179.63176 l -71.099136 154.707395 l -71.099136 154.707395 l -71.099136 154.707395 l -71.134848 200.618691 l -71.134848 200.618691 l -71.134848 200.618691 l -71.17056 134.088746 l -71.206272 173.434351 l -71.206272 173.434351 l -71.277696 204.460962 l -71.384832 111.356952 l -71.420544 168.890273 l -71.491968 145.566949 l -71.52768 144.751193 l -71.563392 145.236328 l -71.599104 209.468795 l -71.670528 165.377448 l -71.70624 132.702166 l -71.70624 132.702166 l -71.70624 132.702166 l -71.741952 172.51688 l -71.777664 152.755038 l -71.813376 111.673695 l -71.849088 117.345837 l -71.956224 232.055695 l -71.991936 205.33228 l -72.027648 138.370187 l -72.099072 192.225898 l -72.134784 212.689831 l -72.134784 212.689831 l -72.134784 212.689831 l -72.206208 136.386263 l -72.277632 169.375 l -72.349056 216.275588 l -72.42048 188.903456 l -72.456192 171.486309 l -72.456192 171.486309 l -72.456192 171.486309 l -72.491904 191.039063 l -72.527616 143.25222 l -72.59904 163.419384 l -72.670464 187.343146 l -72.706176 113.236306 l -72.7776 162.104035 l -72.813312 125.408818 l -72.849024 154.407551 l -72.884736 202.415292 l -72.884736 202.415292 l -72.884736 202.415292 l -72.920448 130.123938 l -72.95616 157.433868 l -72.95616 157.433868 l -72.991872 210.024104 l -73.063296 176.63194 l -73.206144 120.69989 l -73.277568 216.05461 l -73.348992 192.132017 l -73.384704 136.886089 l -73.384704 136.886089 l -73.384704 136.886089 l -73.420416 199.968217 l -73.49184 157.076791 l -73.527552 155.602653 l -73.563264 141.280736 l -73.563264 141.280736 l -73.563264 141.280736 l -73.634688 203.942966 l -73.706112 194.351648 l -73.813248 127.564134 l -73.84896 139.466889 l -73.884672 192.200246 l -73.884672 192.200246 l -73.884672 192.200246 l -73.920384 123.107433 l -73.991808 192.167723 l -74.02752 193.882648 l -74.063232 220.333273 l -74.063232 220.333273 l -74.063232 220.333273 l -74.170368 157.310289 l -74.20608 189.095405 l -74.20608 189.095405 l -74.20608 189.095405 l -74.348928 132.967825 l -74.38464 208.8761 l -74.456064 182.195779 l -74.527488 133.759155 l -74.634624 222.823691 l -74.777472 140.734266 l -74.848896 210.947958 l -74.884608 176.667254 l -74.956032 203.404953 l -74.991744 192.157703 l -75.134592 117.304809 l -75.313152 203.558598 l -75.420288 122.315157 l -75.456 150.569494 l -75.491712 169.815202 l -75.563136 168.038683 l -75.598848 126.212614 l -75.670272 141.075811 l -75.705984 180.61048 l -75.705984 180.61048 l -75.705984 180.61048 l -75.741696 133.399456 l -75.741696 133.399456 l -75.741696 133.399456 l -75.81312 198.366073 l -75.884544 195.673165 l -75.955968 158.960852 l -75.99168 192.246792 l -76.027392 247.172882 l -76.027392 247.172882 l -76.027392 247.172882 l -76.17024 149.541453 l -76.205952 199.026555 l -76.277376 186.673121 l -76.313088 153.285435 l -76.313088 153.285435 l -76.313088 153.285435 l -76.3488 211.020705 l -76.420224 198.027064 l -76.455936 199.336263 l -76.491648 147.003445 l -76.598784 148.450125 l -76.670208 223.956964 l -76.70592 206.306431 l -76.813056 135.57626 l -76.955904 238.998477 l -77.027328 127.571458 l -77.098752 134.392224 l -77.2416 170.408056 l -77.348736 129.514147 l -77.384448 214.852631 l -77.455872 171.781121 l -77.491584 169.920728 l -77.527296 196.813844 l -77.563008 186.849877 l -77.59872 137.405817 l -77.670144 184.2552 l -77.705856 178.587076 l -77.741568 179.354005 l -77.77728 198.719221 l -77.812992 183.368331 l -77.884416 124.167174 l -77.920128 182.695317 l -77.95584 193.361652 l -77.991552 141.669738 l -78.027264 161.270226 l -78.027264 161.270226 l -78.098688 204.221561 l -78.1344 165.144332 l -78.277248 128.509904 l -78.420096 227.97979 l -78.562944 124.733938 l -78.705792 198.047205 l -78.741504 155.186614 l -78.812928 155.519363 l -78.884352 223.78799 l -78.920064 219.714893 l -78.955776 133.849599 l -78.955776 133.849599 l -78.955776 133.849599 l -78.991488 224.183767 l -79.062912 173.804107 l -79.098624 151.994796 l -79.098624 151.994796 l -79.098624 151.994796 l -79.241472 204.529411 l -79.38432 143.680525 l -79.420032 187.143684 l -79.420032 187.143684 l -79.420032 187.143684 l -79.455744 128.396168 l -79.491456 139.417879 l -79.527168 200.649657 l -79.598592 173.737879 l -79.634304 190.299564 l -79.634304 190.299564 l -79.634304 190.299564 l -79.74144 160.443437 l -79.777152 196.695146 l -79.777152 196.695146 l -79.777152 196.695146 l -79.812864 150.470346 l -79.884288 185.26842 l -79.92 158.910349 l -79.92 158.910349 l -79.92 158.910349 l -79.955712 197.353344 l -79.991424 190.161784 l -80.062848 127.026812 l -80.09856 163.172907 l -80.134272 160.192004 l -80.169984 140.423828 l -80.205696 199.458958 l -80.241408 163.603126 l -80.27712 123.369451 l -80.348544 132.288785 l -80.419968 185.236325 l -80.45568 170.71172 l -80.491392 138.666211 l -80.491392 138.666211 l -80.491392 138.666211 l -80.562816 208.73582 l -80.598528 185.883859 l -80.669952 134.82212 l -80.705664 233.319642 l -80.777088 147.046025 l -80.8128 191.476043 l -80.848512 169.519404 l -80.884224 94.081756 l -80.955648 138.788679 l -81.062784 202.65031 l -81.098496 153.728117 l -81.098496 153.728117 l -81.098496 153.728117 l -81.134208 235.142393 l -81.205632 172.933466 l -81.241344 173.906334 l -81.277056 192.68803 l -81.277056 192.68803 l -81.277056 192.68803 l -81.312768 153.326657 l -81.312768 153.326657 l -81.312768 153.326657 l -81.34848 205.429613 l -81.384192 201.821713 l -81.419904 132.404352 l -81.491328 182.922509 l -81.52704 183.20721 l -81.562752 211.349794 l -81.598464 197.251632 l -81.741312 157.039287 l -81.812736 208.192374 l -81.848448 151.804052 l -81.919872 155.88896 l -81.955584 192.108266 l -81.955584 192.108266 l -81.955584 192.108266 l -81.991296 141.793451 l -81.991296 141.793451 l -81.991296 141.793451 l -82.098432 214.501895 l -82.205568 129.897376 l -82.24128 159.392627 l -82.276992 216.301585 l -82.276992 216.301585 l -82.276992 216.301585 l -82.312704 143.052264 l -82.384128 164.61103 l -82.41984 166.70798 l -82.526976 123.058869 l -82.5984 222.943491 l -82.669824 169.807694 l -82.741248 130.299312 l -82.77696 158.911043 l -82.848384 179.438895 l -82.884096 219.950377 l -82.884096 219.950377 l -82.884096 219.950377 l -82.919808 135.231537 l -82.991232 149.902009 l -83.026944 155.428976 l -83.062656 205.67711 l -83.13408 158.971027 l -83.169792 175.1846 l -83.205504 140.469837 l -83.205504 140.469837 l -83.205504 140.469837 l -83.241216 178.891393 l -83.276928 166.088532 l -83.31264 126.200426 l -83.348352 140.782879 l -83.419776 173.429033 l -83.455488 125.271832 l -83.4912 162.48786 l -83.4912 162.48786 l -83.526912 177.532067 l -83.562624 142.233908 l -83.562624 142.233908 l -83.562624 142.233908 l -83.705472 201.917109 l -83.812608 146.287308 l -83.84832 165.720742 l -83.884032 231.452013 l -83.955456 169.641441 l -84.02688 235.380116 l -84.062592 155.804741 l -84.134016 199.792827 l -84.169728 197.636733 l -84.20544 179.06644 l -84.20544 179.06644 l -84.20544 179.06644 l -84.241152 197.975989 l -84.276864 135.441554 l -84.348288 144.448566 l -84.384 172.855416 l -84.384 172.855416 l -84.384 172.855416 l -84.419712 142.950632 l -84.419712 142.950632 l -84.419712 142.950632 l -84.455424 188.759247 l -84.526848 183.99826 l -84.56256 151.810364 l -84.56256 151.810364 l -84.56256 151.810364 l -84.705408 220.630276 l -84.812544 152.984419 l -84.848256 190.102088 l -84.883968 168.653205 l -84.955392 186.408518 l -84.991104 200.724249 l -85.026816 161.721776 l -85.026816 161.721776 l -85.026816 161.721776 l -85.09824 203.481828 l -85.133952 177.239976 l -85.169664 159.919562 l -85.169664 159.919562 l -85.169664 159.919562 l -85.312512 188.355256 l -85.383936 179.784945 l -85.419648 185.982826 l -85.45536 190.071737 l -85.491072 159.947816 l -85.491072 159.947816 l -85.491072 159.947816 l -85.526784 196.031827 l -85.63392 195.590987 l -85.741056 138.912808 l -85.848192 192.279094 l -85.919616 118.129256 l -85.955328 160.707988 l -86.026752 166.37107 l -86.062464 209.14189 l -86.098176 177.868802 l -86.133888 130.645737 l -86.1696 131.240274 l -86.205312 198.835265 l -86.276736 144.563327 l -86.34816 139.203725 l -86.383872 204.843108 l -86.455296 156.914317 l -86.491008 120.949543 l -86.491008 120.949543 l -86.491008 120.949543 l -86.562432 215.820858 l -86.598144 139.343329 l -86.633856 113.409391 l -86.633856 113.409391 l -86.633856 113.409391 l -86.812416 216.694113 l -86.955264 147.355296 l -86.990976 148.519574 l -87.026688 197.668521 l -87.098112 175.76977 l -87.133824 153.237241 l -87.133824 153.237241 l -87.133824 153.237241 l -87.24096 214.187971 l -87.276672 137.349184 l -87.348096 198.055639 l -87.383808 178.325489 l -87.41952 197.889308 l -87.455232 201.649297 l -87.490944 167.231113 l -87.562368 188.604225 l -87.59808 205.277413 l -87.669504 119.330379 l -87.740928 224.735222 l -87.77664 123.665051 l -87.919488 221.172946 l -87.9552 188.355234 l -87.990912 114.911035 l -87.990912 114.911035 l -87.990912 114.911035 l -88.13376 238.1768 l -88.205184 124.695913 l -88.276608 166.588266 l -88.348032 153.169814 l -88.419456 155.593911 l -88.562304 210.248511 l -88.598016 151.014744 l -88.66944 196.871727 l -88.740864 159.674293 l -88.812288 171.092017 l -88.848 156.311564 l -88.955136 225.433112 l -89.02656 137.438473 l -89.062272 173.09949 l -89.133696 206.969829 l -89.240832 133.92038 l -89.276544 182.688639 l -89.347968 144.690539 l -89.38368 131.305454 l -89.490816 228.843933 l -89.633664 139.945466 l -89.776512 213.78222 l -89.883648 161.028879 l -89.91936 201.710422 l -89.990784 185.847766 l -90.026496 177.115896 l -90.062208 137.496763 l -90.133632 141.787073 l -90.205056 150.309403 l -90.240768 217.571433 l -90.240768 217.571433 l -90.240768 217.571433 l -90.27648 128.274413 l -90.347904 181.346234 l -90.383616 148.285271 l -90.419328 235.033418 l -90.490752 187.022428 l -90.526464 156.389187 l -90.526464 156.389187 l -90.526464 156.389187 l -90.562176 217.930758 l -90.6336 177.404332 l -90.669312 144.118405 l -90.705024 215.255368 l -90.705024 215.255368 l -90.705024 215.255368 l -90.740736 141.127498 l -90.81216 183.983501 l -90.847872 178.683467 l -90.883584 152.855791 l -90.955008 177.539709 l -91.062144 161.498894 l -91.16928 119.141077 l -91.204992 196.74155 l -91.312128 194.244367 l -91.454976 148.752534 l -91.490688 150.074876 l -91.5264 160.596576 l -91.5264 160.596576 l -91.5264 160.596576 l -91.562112 143.998158 l -91.562112 143.998158 l -91.562112 143.998158 l -91.740672 218.867702 l -91.776384 178.573076 l -91.776384 178.573076 l -91.776384 178.573076 l -91.812096 222.29962 l -91.847808 128.512714 l -91.919232 187.139346 l -91.954944 183.133265 l -91.954944 183.133265 l -91.954944 183.133265 l -91.990656 187.445787 l -92.06208 158.243465 l -92.097792 185.117856 l -92.133504 221.062641 l -92.169216 187.050948 l -92.24064 121.304199 l -92.276352 152.935984 l -92.383488 190.935991 l -92.4192 171.497586 l -92.454912 133.511053 l -92.454912 133.511053 l -92.454912 133.511053 l -92.526336 224.066305 l -92.562048 185.324769 l -92.704896 132.695417 l -92.740608 209.286565 l -92.812032 169.844583 l -92.847744 180.370818 l -92.883456 131.372416 l -92.95488 153.238115 l -92.990592 160.016668 l -93.026304 134.589818 l -93.097728 153.714766 l -93.13344 144.451721 l -93.13344 144.451721 l -93.13344 144.451721 l -93.169152 154.015789 l -93.204864 216.516202 l -93.276288 179.678282 l -93.312 113.449187 l -93.347712 160.672626 l -93.383424 206.606655 l -93.383424 206.606655 l -93.383424 206.606655 l -93.419136 135.77445 l -93.49056 199.445187 l -93.597696 144.320825 l -93.633408 168.976982 l -93.66912 185.174664 l -93.66912 185.174664 l -93.66912 185.174664 l -93.740544 151.702891 l -93.811968 152.455144 l -93.919104 209.051537 l -93.954816 181.109937 l -93.990528 242.764208 l -94.02624 192.688487 l -94.061952 156.692226 l -94.133376 172.517393 l -94.240512 192.695466 l -94.276224 173.843686 l -94.311936 235.929486 l -94.311936 235.929486 l -94.311936 235.929486 l -94.347648 137.976316 l -94.419072 142.090645 l -94.56192 185.815381 l -94.597632 237.697575 l -94.597632 237.697575 l -94.597632 237.697575 l -94.74048 98.017048 l -94.847616 185.772411 l -94.91904 176.31908 l -94.954752 167.133484 l -95.026176 208.823321 l -95.0976 206.71683 l -95.204736 158.972388 l -95.240448 192.674943 l -95.311872 183.011701 l -95.45472 143.200898 l -95.490432 206.183084 l -95.561856 156.622221 l -95.597568 148.350054 l -95.704704 215.077739 l -95.740416 167.716133 l -95.847552 171.894438 l -95.954688 107.363224 l -95.9904 185.739003 l -96.061824 180.143037 l -96.16896 135.981195 l -96.204672 195.971935 l -96.276096 145.722346 l -96.383232 195.604597 l -96.454656 116.513658 l -96.490368 178.846947 l -96.52608 178.271802 l -96.633216 225.174246 l -96.668928 124.938835 l -96.740352 191.690042 l -96.776064 167.512584 l -96.811776 222.63527 l -96.811776 222.63527 l -96.811776 222.63527 l -96.847488 137.200557 l -96.954624 146.062869 l -97.133184 223.598011 l -97.204608 136.988402 l -97.276032 172.407809 l -97.311744 202.877216 l -97.311744 202.877216 l -97.311744 202.877216 l -97.383168 137.285178 l -97.454592 157.997181 l -97.490304 225.866829 l -97.561728 167.777767 l -97.59744 183.861883 l -97.668864 105.618148 l -97.704576 158.637912 l -97.740288 216.992949 l -97.811712 201.579752 l -97.918848 134.792219 l -97.990272 183.752353 l -98.061696 170.44402 l -98.097408 188.321471 l -98.13312 126.782523 l -98.13312 126.782523 l -98.13312 126.782523 l -98.204544 195.470095 l -98.240256 164.287117 l -98.275968 95.923295 l -98.275968 95.923295 l -98.275968 95.923295 l -98.31168 200.983908 l -98.383104 171.822488 l -98.418816 143.770373 l -98.418816 143.770373 l -98.418816 143.770373 l -98.454528 195.333945 l -98.525952 157.923961 l -98.561664 157.97986 l -98.597376 214.936404 l -98.6688 199.846141 l -98.740224 123.3092 l -98.775936 160.423919 l -98.811648 208.558446 l -98.811648 208.558446 l -98.811648 208.558446 l -98.84736 140.306857 l -98.918784 146.80327 l -98.990208 185.081534 l -99.061632 179.697829 l -99.20448 130.783117 l -99.311616 213.460919 l -99.347328 193.478975 l -99.38304 135.979081 l -99.418752 151.177753 l -99.418752 151.177753 l -99.454464 198.406134 l -99.454464 198.406134 l -99.454464 198.406134 l -99.597312 103.252823 l -99.704448 181.963469 l -99.74016 155.39277 l -99.775872 132.910662 l -99.775872 132.910662 l -99.775872 132.910662 l -99.811584 178.877442 l -99.883008 154.112555 l -99.91872 140.566136 l -99.91872 140.566136 l -99.91872 140.566136 l -99.990144 187.218775 l -100.025856 137.53266 l -100.061568 157.717707 l -100.061568 157.717707 l -100.09728 190.874486 l -100.09728 190.874486 l -100.09728 190.874486 l -100.132992 146.599721 l -100.204416 148.14535 l -100.240128 224.526856 l -100.311552 164.760807 l -100.347264 161.670638 l -100.490112 212.475893 l -100.525824 105.785536 l -100.597248 206.861531 l -100.63296 162.384786 l -100.740096 162.984936 l -100.882944 209.738665 l -100.918656 202.741224 l -101.061504 146.497096 l -101.097216 194.614928 l -101.132928 158.236667 l -101.16864 129.545595 l -101.204352 146.900386 l -101.240064 190.015162 l -101.275776 174.592012 l -101.311488 132.885098 l -101.311488 132.885098 l -101.311488 132.885098 l -101.3472 217.241347 l -101.382912 146.542628 l -101.418624 112.728171 l -101.418624 112.728171 l -101.418624 112.728171 l -101.597184 219.27828 l -101.70432 168.31442 l -101.740032 190.451747 l -101.847168 143.425438 l -101.990016 210.450525 l -102.025728 120.13059 l -102.097152 183.817159 l -102.132864 165.457373 l -102.168576 166.422531 l -102.204288 220.317949 l -102.204288 220.317949 l -102.204288 220.317949 l -102.24 117.310852 l -102.311424 203.121758 l -102.347136 177.206458 l -102.347136 177.206458 l -102.347136 177.206458 l -102.382848 214.366673 l -102.382848 214.366673 l -102.382848 214.366673 l -102.41856 141.806483 l -102.489984 148.059473 l -102.59712 181.43672 l -102.632832 139.619352 l -102.668544 147.675218 l -102.77568 203.13107 l -102.811392 198.465108 l -102.847104 129.924453 l -102.918528 168.835054 l -102.95424 192.327459 l -103.025664 172.894979 l -103.097088 160.945631 l -103.204224 236.153284 l -103.239936 172.733391 l -103.31136 184.203546 l -103.347072 222.550672 l -103.382784 205.206468 l -103.418496 160.793239 l -103.418496 160.793239 l -103.418496 160.793239 l -103.454208 207.232151 l -103.48992 191.870334 l -103.561344 128.11904 l -103.597056 189.461661 l -103.632768 202.203583 l -103.66848 196.298771 l -103.704192 121.214134 l -103.739904 176.647585 l -103.775616 220.448438 l -103.811328 188.00225 l -103.811328 188.00225 l -103.882752 168.052715 l -103.918464 201.586839 l -103.918464 201.586839 l -103.918464 201.586839 l -103.954176 136.800263 l -104.0256 194.696371 l -104.061312 193.767046 l -104.132736 136.883618 l -104.168448 168.142829 l -104.20416 182.138302 l -104.239872 171.187349 l -104.275584 150.927185 l -104.275584 150.927185 l -104.275584 150.927185 l -104.311296 185.250096 l -104.311296 185.250096 l -104.311296 185.250096 l -104.38272 140.332977 l -104.418432 191.07496 l -104.489856 154.824213 l -104.525568 184.260268 l -104.525568 184.260268 l -104.525568 184.260268 l -104.56128 150.947255 l -104.56128 150.947255 l -104.56128 150.947255 l -104.632704 193.747821 l -104.775552 138.399565 l -104.846976 204.705837 l -104.9184 196.868749 l -105.025536 143.640004 l -105.061248 219.090096 l -105.132672 164.824297 l -105.168384 163.102158 l -105.239808 125.826276 l -105.382656 205.011766 l -105.418368 139.884413 l -105.418368 139.884413 l -105.418368 139.884413 l -105.45408 207.22807 l -105.525504 192.638412 l -105.561216 136.690894 l -105.561216 136.690894 l -105.561216 136.690894 l -105.596928 204.466703 l -105.668352 196.21626 l -105.775488 118.718136 l -105.8112 155.816905 l -105.846912 149.652253 l -106.025472 243.744342 l -106.096896 105.017863 l -106.16832 150.097083 l -106.204032 125.023197 l -106.204032 125.023197 l -106.204032 125.023197 l -106.239744 164.767443 l -106.239744 164.767443 l -106.239744 164.767443 l -106.275456 123.102962 l -106.275456 123.102962 l -106.275456 123.102962 l -106.311168 208.105768 l -106.382592 167.983091 l -106.454016 141.395688 l -106.489728 198.327719 l -106.561152 182.366363 l -106.596864 176.376048 l -106.632576 202.612747 l -106.632576 202.612747 l -106.632576 202.612747 l -106.739712 157.143171 l -106.846848 207.287954 l -106.918272 132.851027 l -106.989696 151.017043 l -107.06112 148.298138 l -107.132544 196.219659 l -107.275392 115.520215 l -107.382528 184.495371 l -107.41824 182.665096 l -107.453952 159.640706 l -107.453952 159.640706 l -107.453952 159.640706 l -107.525376 205.617758 l -107.561088 153.21096 l -107.632512 179.657571 l -107.668224 190.027431 l -107.703936 135.703491 l -107.703936 135.703491 l -107.703936 135.703491 l -107.739648 201.707326 l -107.811072 146.082599 l -107.846784 153.547492 l -107.882496 190.370627 l -107.95392 173.252381 l -107.989632 167.658136 l -108.025344 182.722303 l -108.061056 140.623714 l -108.061056 140.623714 l -108.061056 140.623714 l -108.096768 212.867758 l -108.096768 212.867758 l -108.096768 212.867758 l -108.13248 138.646229 l -108.203904 142.689667 l -108.239616 173.566496 l -108.31104 154.963379 l -108.382464 182.698251 l -108.453888 174.895759 l -108.4896 171.689228 l -108.525312 138.542637 l -108.596736 145.039943 l -108.632448 177.976788 l -108.632448 177.976788 l -108.632448 177.976788 l -108.703872 100.079227 l -108.703872 100.079227 l -108.703872 100.079227 l -108.739584 178.515138 l -108.811008 122.959516 l -108.882432 213.64851 l -108.953856 190.570171 l -109.096704 141.191864 l -109.132416 148.172207 l -109.132416 148.172207 l -109.132416 148.172207 l -109.168128 140.295821 l -109.20384 189.635421 l -109.20384 189.635421 l -109.20384 189.635421 l -109.239552 134.382444 l -109.310976 149.922275 l -109.346688 176.36299 l -109.346688 176.36299 l -109.346688 176.36299 l -109.3824 136.439175 l -109.418112 151.565366 l -109.453824 199.110109 l -109.453824 199.110109 l -109.453824 199.110109 l -109.489536 111.521984 l -109.596672 119.111528 l -109.632384 165.747002 l -109.703808 156.613786 l -109.775232 146.79622 l -109.953792 197.954466 l -109.989504 168.302503 l -110.060928 193.048638 l -110.132352 204.564231 l -110.203776 133.542043 l -110.2752 136.804098 l -110.382336 190.747626 l -110.418048 155.198002 l -110.418048 155.198002 l -110.418048 155.198002 l -110.45376 190.942893 l -110.489472 185.472171 l -110.489472 185.472171 l -110.63232 151.61705 l -110.668032 153.576472 l -110.703744 136.253299 l -110.775168 142.818942 l -110.918016 204.790123 l -110.98944 137.543833 l -111.025152 165.075078 l -111.060864 192.154427 l -111.060864 192.154427 l -111.060864 192.154427 l -111.096576 140.320327 l -111.096576 140.320327 l -111.096576 140.320327 l -111.132288 208.158351 l -111.132288 208.158351 l -111.132288 208.158351 l -111.239424 134.87994 l -111.310848 218.718686 l -111.34656 125.432374 l -111.417984 186.36179 l -111.489408 126.93193 l -111.52512 173.266363 l -111.560832 146.802829 l -111.560832 146.802829 l -111.560832 146.802829 l -111.596544 197.304914 l -111.596544 197.304914 l -111.596544 197.304914 l -111.70368 137.838733 l -111.739392 195.921936 l -111.775104 150.498882 l -111.775104 150.498882 l -111.810816 135.736426 l -111.810816 135.736426 l -111.810816 135.736426 l -111.846528 163.667994 l -111.846528 163.667994 l -111.846528 163.667994 l -111.88224 130.270281 l -111.88224 130.270281 l -111.88224 130.270281 l -111.917952 191.156108 l -111.989376 163.36744 l -112.025088 165.090067 l -112.0608 137.00043 l -112.096512 207.555676 l -112.167936 158.872839 l -112.203648 186.047559 l -112.23936 176.219105 l -112.275072 135.144677 l -112.275072 135.144677 l -112.275072 135.144677 l -112.382208 196.971882 l -112.525056 115.822828 l -112.560768 163.066859 l -112.632192 156.467084 l -112.667904 154.771303 l -112.703616 145.65923 l -112.739328 218.975693 l -112.77504 164.691602 l -112.810752 130.553573 l -112.810752 130.553573 l -112.810752 130.553573 l -112.9536 204.796587 l -113.025024 140.175941 l -113.060736 158.973952 l -113.167872 209.914292 l -113.275008 118.601019 l -113.31072 164.686226 l -113.346432 228.658725 l -113.346432 228.658725 l -113.346432 228.658725 l -113.453568 149.454463 l -113.66784 232.064228 l -113.774976 150.602246 l -113.810688 185.040356 l -113.8464 182.611754 l -113.882112 107.618446 l -113.953536 117.71805 l -114.096384 194.310816 l -114.167808 144.432208 l -114.20352 148.543041 l -114.239232 193.283518 l -114.310656 158.521782 l -114.453504 186.046373 l -114.489216 137.854543 l -114.524928 166.736253 l -114.56064 198.808456 l -114.632064 188.82444 l -114.667776 125.129452 l -114.7392 166.084162 l -114.810624 185.603921 l -114.846336 175.232216 l -114.882048 214.418793 l -114.882048 214.418793 l -114.882048 214.418793 l -114.989184 149.997611 l -115.024896 155.791627 l -115.09632 177.477805 l -115.09632 177.477805 l -115.09632 177.477805 l -115.132032 155.47032 l -115.132032 155.47032 l -115.132032 155.47032 l -115.167744 200.992206 l -115.167744 200.992206 l -115.167744 200.992206 l -115.310592 142.56103 l -115.417728 163.583565 l -115.45344 206.685303 l -115.489152 189.607377 l -115.560576 142.020555 l -115.596288 161.538463 l -115.632 166.319682 l -115.667712 155.206098 l -115.703424 159.296177 l -115.739136 206.708951 l -115.739136 206.708951 l -115.739136 206.708951 l -115.774848 146.280282 l -115.846272 172.304161 l -115.881984 184.947649 l -115.98912 134.778086 l -116.131968 200.767394 l -116.16768 158.012607 l -116.239104 167.19592 l -116.310528 199.049087 l -116.34624 151.989457 l -116.34624 151.989457 l -116.34624 151.989457 l -116.381952 207.933995 l -116.453376 191.30183 l -116.489088 155.228119 l -116.489088 155.228119 l -116.489088 155.228119 l -116.5248 223.024197 l -116.596224 191.454307 l -116.667648 178.045036 l -116.70336 199.4457 l -116.739072 147.287944 l -116.810496 163.099092 l -116.846208 189.160056 l -116.846208 189.160056 l -116.846208 189.160056 l -116.88192 136.889639 l -116.953344 188.299939 l -117.024768 143.456089 l -117.06048 152.861442 l -117.096192 197.749683 l -117.167616 182.693003 l -117.274752 129.396927 l -117.381888 175.806542 l -117.4176 167.710848 l -117.489024 171.980008 l -117.524736 130.911405 l -117.59616 157.559204 l -117.631872 194.285108 l -117.703296 171.214601 l -117.77472 217.301028 l -117.846144 133.226519 l -117.881856 199.993068 l -118.024704 133.051182 l -118.167552 184.239777 l -118.203264 176.456264 l -118.238976 226.097752 l -118.238976 226.097752 l -118.238976 226.097752 l -118.346112 151.103415 l -118.453248 217.273703 l -118.524672 141.344464 l -118.560384 192.377202 l -118.596096 227.225704 l -118.596096 227.225704 l -118.596096 227.225704 l -118.631808 154.489041 l -118.738944 161.625679 l -118.774656 151.016392 l -118.84608 188.787995 l -118.917504 181.66078 l -119.060352 137.838226 l -119.096064 134.021924 l -119.2032 192.792239 l -119.238912 187.749007 l -119.274624 183.531896 l -119.310336 124.632007 l -119.38176 175.897656 l -119.417472 175.319958 l -119.453184 212.774758 l -119.453184 212.774758 l -119.453184 212.774758 l -119.488896 157.080233 l -119.56032 165.248321 l -119.596032 168.586595 l -119.631744 188.005846 l -119.667456 187.803438 l -119.703168 149.554827 l -119.774592 161.370161 l -119.810304 185.721551 l -119.881728 172.493962 l -119.91744 133.267976 l -119.988864 165.192787 l -120.024576 157.085336 l -120.060288 188.162888 l -120.131712 160.453081 l -120.167424 145.327842 l -120.203136 219.6594 l -120.27456 157.095918 l -120.310272 186.474664 l -120.310272 186.474664 l -120.310272 186.474664 l -120.345984 126.167688 l -120.417408 178.684544 l -120.45312 179.115856 l -120.488832 159.845696 l -120.488832 159.845696 l -120.488832 159.845696 l -120.524544 179.42857 l -120.560256 161.187931 l -120.595968 148.592428 l -120.63168 199.826154 l -120.703104 164.505856 l -120.738816 185.529417 l -120.738816 185.529417 l -120.738816 185.529417 l -120.774528 157.472426 l -120.774528 157.472426 l -120.774528 157.472426 l -120.81024 203.604273 l -120.81024 203.604273 l -120.81024 203.604273 l -120.881664 143.026399 l -120.917376 155.742638 l -120.953088 217.337822 l -120.953088 217.337822 l -120.953088 217.337822 l -120.9888 137.695328 l -121.060224 161.232388 l -121.095936 148.204309 l -121.095936 148.204309 l -121.095936 148.204309 l -121.131648 165.585354 l -121.131648 165.585354 l -121.131648 165.585354 l -121.16736 140.406834 l -121.203072 210.140147 l -121.274496 172.544822 l -121.310208 170.734128 l -121.34592 147.332532 l -121.453056 207.891063 l -121.595904 151.03565 l -121.738752 212.670063 l -121.8816 150.228329 l -121.917312 222.16067 l -121.988736 193.841714 l -122.131584 160.534768 l -122.167296 188.241745 l -122.203008 182.989494 l -122.23872 156.618636 l -122.23872 156.618636 l -122.23872 156.618636 l -122.274432 202.965961 l -122.274432 202.965961 l -122.274432 202.965961 l -122.310144 117.431443 l -122.381568 160.044013 l -122.452992 206.410492 l -122.488704 108.834397 l -122.560128 197.059111 l -122.631552 163.281794 l -122.667264 181.16353 l -122.702976 196.016339 l -122.845824 140.128507 l -122.881536 215.53106 l -122.95296 168.961858 l -123.024384 220.916521 l -123.060096 204.27071 l -123.095808 163.975301 l -123.095808 163.975301 l -123.095808 163.975301 l -123.13152 206.16342 l -123.13152 206.16342 l -123.13152 206.16342 l -123.202944 134.620412 l -123.238656 158.75794 l -123.31008 188.959631 l -123.31008 188.959631 l -123.31008 188.959631 l -123.345792 158.64851 l -123.345792 158.64851 l -123.345792 158.64851 l -123.381504 199.585004 l -123.417216 162.35976 l -123.452928 152.380976 l -123.524352 154.551238 l -123.738624 203.963146 l -123.774336 138.883611 l -123.774336 138.883611 l -123.774336 138.883611 l -123.810048 207.067464 l -123.881472 189.783305 l -123.952896 205.794513 l -123.988608 144.488373 l -124.060032 180.344806 l -124.095744 190.025604 l -124.131456 180.466649 l -124.167168 147.62881 l -124.167168 147.62881 l -124.167168 147.62881 l -124.20288 211.031739 l -124.274304 164.701453 l -124.310016 196.737206 l -124.310016 196.737206 l -124.310016 196.737206 l -124.417152 141.196687 l -124.488576 225.835734 l -124.524288 181.143368 l -124.667136 134.555418 l -124.809984 231.49722 l -124.845696 198.877477 l -124.881408 211.445722 l -124.952832 132.788495 l -124.988544 220.119551 l -125.059968 198.922037 l -125.09568 115.77425 l -125.167104 166.473447 l -125.202816 167.442881 l -125.238528 186.258199 l -125.238528 186.258199 l -125.238528 186.258199 l -125.27424 167.165712 l -125.27424 167.165712 l -125.27424 167.165712 l -125.309952 187.345631 l -125.345664 168.627858 l -125.381376 136.495301 l -125.381376 136.495301 l -125.381376 136.495301 l -125.4528 193.065128 l -125.488512 186.458938 l -125.595648 141.081681 l -125.667072 182.275725 l -125.702784 177.308337 l -125.774208 170.477321 l -125.80992 198.172959 l -125.80992 198.172959 l -125.80992 198.172959 l -125.917056 143.65049 l -126.024192 203.908286 l -126.059904 201.692502 l -126.095616 141.778933 l -126.131328 180.151163 l -126.131328 180.151163 l -126.16704 203.32038 l -126.16704 203.32038 l -126.16704 203.32038 l -126.274176 159.368086 l -126.309888 194.934829 l -126.381312 177.492392 l -126.417024 148.122063 l -126.452736 172.683057 l -126.488448 200.623118 l -126.52416 179.232649 l -126.559872 152.996038 l -126.559872 152.996038 l -126.559872 152.996038 l -126.595584 207.633105 l -126.70272 206.321569 l -126.738432 134.776309 l -126.809856 185.649377 l -126.845568 187.675063 l -126.88128 210.238153 l -126.88128 210.238153 l -126.88128 210.238153 l -127.024128 124.659111 l -127.05984 167.163216 l -127.131264 148.434522 l -127.166976 151.134858 l -127.202688 125.136308 l -127.2384 126.208798 l -127.274112 188.285397 l -127.345536 186.931536 l -127.381248 162.658815 l -127.381248 162.658815 l -127.381248 162.658815 l -127.488384 227.518793 l -127.59552 137.402723 l -127.631232 174.504367 l -127.666944 146.001568 l -127.666944 146.001568 l -127.666944 146.001568 l -127.702656 192.876119 l -127.77408 182.736281 l -127.809792 183.096853 l -127.881216 199.584867 l -127.916928 199.115174 l -127.988352 182.563038 l -128.059776 156.328584 l -128.095488 187.237361 l -128.1312 178.490014 l -128.238336 135.825462 l -128.274048 182.686048 l -128.30976 161.512659 l -128.30976 161.512659 l -128.345472 134.344123 l -128.381184 148.064849 l -128.416896 192.198168 l -128.416896 192.198168 l -128.416896 192.198168 l -128.452608 128.9723 l -128.452608 128.9723 l -128.452608 128.9723 l -128.48832 246.63408 l -128.559744 151.635558 l -128.595456 158.596475 l -128.631168 127.927408 l -128.631168 127.927408 l -128.631168 127.927408 l -128.738304 189.406325 l -128.774016 167.679541 l -128.774016 167.679541 l -128.774016 167.679541 l -128.881152 213.685946 l -128.952576 131.117533 l -129.024 134.162266 l -129.095424 211.67365 l -129.131136 199.052269 l -129.166848 164.544274 l -129.238272 177.436451 l -129.273984 172.558538 l -129.309696 141.527756 l -129.38112 161.67431 l -129.416832 158.232195 l -129.452544 182.985865 l -129.452544 182.985865 l -129.452544 182.985865 l -129.488256 145.880842 l -129.523968 178.423844 l -129.55968 189.924791 l -129.55968 189.924791 l -129.55968 189.924791 l -129.702528 160.142098 l -129.73824 192.491937 l -129.773952 92.45722 l -129.809664 158.098289 l -129.845376 214.421916 l -129.9168 178.10233 l -129.952512 161.480594 l -129.952512 161.480594 l -129.952512 161.480594 l -129.988224 191.024772 l -130.059648 189.935477 l -130.09536 159.766068 l -130.202496 162.558028 l -130.238208 194.996668 l -130.238208 194.996668 l -130.238208 194.996668 l -130.381056 155.742101 l -130.416768 208.261433 l -130.416768 208.261433 l -130.416768 208.261433 l -130.523904 133.59199 l -130.666752 185.409556 l -130.738176 170.227105 l -130.881024 219.732358 l -130.916736 171.605227 l -130.98816 204.936069 l -131.095296 161.632267 l -131.16672 162.509746 l -131.238144 187.264558 l -131.380992 147.776604 l -131.416704 173.441478 l -131.488128 157.751189 l -131.52384 159.463239 l -131.559552 158.512919 l -131.630976 226.032309 l -131.666688 172.959549 l -131.738112 127.293495 l -131.773824 147.084883 l -131.916672 198.522282 l -131.988096 139.023399 l -132.05952 159.961735 l -132.095232 166.651748 l -132.130944 215.233671 l -132.166656 174.491515 l -132.202368 148.29372 l -132.23808 222.306321 l -132.309504 178.956345 l -132.345216 182.902652 l -132.488064 148.309986 l -132.523776 213.026739 l -132.5952 149.383451 l -132.630912 154.918636 l -132.666624 223.134407 l -132.702336 168.694157 l -132.809472 136.089539 l -132.916608 203.377931 l -132.95232 134.154584 l -133.023744 156.951089 l -133.095168 191.369713 l -133.13088 119.776768 l -133.202304 160.866339 l -133.380864 194.526155 l -133.416576 138.562061 l -133.488 170.837692 l -133.523712 178.029441 l -133.559424 214.717703 l -133.559424 214.717703 l -133.559424 214.717703 l -133.66656 141.273009 l -133.809408 220.191841 l -133.84512 166.533114 l -133.880832 197.328048 l -133.916544 236.883873 l -133.916544 236.883873 l -133.916544 236.883873 l -134.02368 156.090847 l -134.059392 171.991411 l -134.095104 174.707799 l -134.130816 147.463776 l -134.130816 147.463776 l -134.130816 147.463776 l -134.166528 203.667422 l -134.166528 203.667422 l -134.166528 203.667422 l -134.20224 127.845229 l -134.273664 170.380269 l -134.309376 226.783827 l -134.3808 186.683807 l -134.416512 140.012599 l -134.487936 150.942068 l -134.523648 151.753145 l -134.55936 191.010645 l -134.630784 168.240523 l -134.702208 123.897572 l -134.809344 219.156342 l -134.952192 140.82525 l -135.023616 195.626607 l -135.09504 184.439629 l -135.166464 205.024487 l -135.309312 122.774813 l -135.345024 178.392212 l -135.416448 149.206137 l -135.45216 156.755286 l -135.487872 207.408594 l -135.523584 157.926542 l -135.595008 116.049995 l -135.666432 237.764398 l -135.702144 235.370368 l -135.773568 133.923975 l -135.844992 153.371245 l -135.880704 172.068399 l -135.916416 118.336148 l -135.916416 118.336148 l -135.916416 118.336148 l -136.023552 222.447134 l -136.059264 206.374503 l -136.094976 193.531364 l -136.130688 110.454374 l -136.130688 110.454374 l -136.130688 110.454374 l -136.1664 200.339475 l -136.237824 162.082237 l -136.273536 140.299142 l -136.273536 140.299142 l -136.273536 140.299142 l -136.34496 185.854665 l -136.416384 173.878702 l -136.487808 181.531041 l -136.52352 161.171699 l -136.52352 161.171699 l -136.52352 161.171699 l -136.594944 211.233943 l -136.630656 174.539245 l -136.666368 166.955445 l -136.70208 188.065081 l -136.70208 188.065081 l -136.70208 188.065081 l -136.737792 147.077231 l -136.773504 240.883959 l -136.844928 161.56393 l -136.952064 207.847787 l -136.987776 187.105678 l -137.023488 172.737043 l -137.023488 172.737043 l -137.023488 172.737043 l -137.0592 196.035272 l -137.130624 189.445157 l -137.166336 186.227798 l -137.202048 151.588459 l -137.202048 151.588459 l -137.202048 151.588459 l -137.309184 224.212377 l -137.344896 198.535414 l -137.380608 161.8912 l -137.452032 168.94853 l -137.487744 184.152151 l -137.487744 184.152151 l -137.487744 184.152151 l -137.559168 143.157156 l -137.59488 168.501442 l -137.630592 227.292069 l -137.702016 184.919931 l -137.737728 121.038539 l -137.809152 163.747112 l -137.916288 185.379799 l -137.987712 128.737027 l -138.094848 248.423678 l -138.13056 205.849672 l -138.166272 146.270156 l -138.237696 150.638771 l -138.416256 203.847792 l -138.451968 202.845173 l -138.48768 180.157915 l -138.559104 181.597133 l -138.630528 209.45784 l -138.701952 202.465944 l -138.773376 138.831322 l -138.773376 138.831322 l -138.773376 138.831322 l -138.809088 206.189822 l -138.880512 150.317718 l -138.916224 152.550546 l -138.951936 212.376243 l -138.951936 212.376243 l -138.951936 212.376243 l -138.987648 152.368871 l -139.094784 154.84698 l -139.130496 225.679353 l -139.20192 194.311182 l -139.237632 189.391128 l -139.273344 191.834593 l -139.309056 143.678538 l -139.38048 158.235449 l -139.416192 207.333645 l -139.416192 207.333645 l -139.416192 207.333645 l -139.451904 132.906602 l -139.523328 171.924467 l -139.55904 208.100429 l -139.55904 208.100429 l -139.55904 208.100429 l -139.666176 132.049683 l -139.701888 202.928004 l -139.773312 172.572374 l -139.809024 185.371579 l -139.844736 140.688892 l -139.880448 147.482997 l -139.91616 209.51776 l -139.987584 164.21549 l -140.023296 189.039725 l -140.059008 168.439769 l -140.09472 127.733927 l -140.130432 127.942788 l -140.166144 189.106399 l -140.237568 168.065056 l -140.27328 117.999009 l -140.27328 117.999009 l -140.27328 117.999009 l -140.416128 208.868489 l -140.523264 135.544077 l -140.558976 183.148924 l -140.6304 161.799693 l -140.666112 104.453019 l -140.666112 104.453019 l -140.666112 104.453019 l -140.701824 205.811379 l -140.773248 154.76503 l -140.80896 159.418568 l -140.844672 194.809236 l -140.844672 194.809236 l -140.844672 194.809236 l -140.880384 154.785391 l -140.951808 188.423828 l -140.98752 208.276944 l -141.023232 130.290569 l -141.094656 156.058835 l -141.130368 146.207941 l -141.16608 204.140472 l -141.201792 185.26133 l -141.237504 118.600527 l -141.308928 155.879548 l -141.380352 183.289648 l -141.416064 161.256474 l -141.487488 232.331999 l -141.5232 194.451095 l -141.558912 193.187106 l -141.666048 135.591399 l -141.70176 168.482273 l -141.773184 140.25439 l -141.808896 148.056613 l -141.808896 148.056613 l -141.808896 148.056613 l -141.844608 138.576773 l -141.88032 198.825807 l -141.88032 198.825807 l -141.88032 198.825807 l -141.916032 138.527734 l -141.916032 138.527734 l -141.916032 138.527734 l -141.951744 210.869558 l -142.023168 148.641018 l -142.05888 172.787731 l -142.05888 172.787731 l -142.05888 172.787731 l -142.130304 129.944061 l -142.130304 129.944061 l -142.130304 129.944061 l -142.166016 173.871283 l -142.201728 171.579011 l -142.23744 114.335601 l -142.273152 169.654868 l -142.308864 188.842088 l -142.344576 132.906847 l -142.416 172.862489 l -142.451712 156.736135 l -142.451712 156.736135 l -142.451712 156.736135 l -142.558848 203.157172 l -142.665984 117.207384 l -142.701696 172.040356 l -142.77312 221.762363 l -142.808832 211.284662 l -142.844544 169.834062 l -142.844544 169.834062 l -142.844544 169.834062 l -142.880256 230.450537 l -142.95168 205.129064 l -142.987392 144.161406 l -143.058816 166.462036 l -143.094528 156.98612 l -143.13024 166.186435 l -143.165952 168.538262 l -143.237376 144.798932 l -143.273088 164.894518 l -143.380224 180.900493 l -143.415936 124.849439 l -143.48736 137.300971 l -143.66592 213.245539 l -143.773056 132.896383 l -143.808768 207.937417 l -143.880192 149.499773 l -143.915904 166.366312 l -143.951616 85.565228 l -143.987328 144.903091 l -144.02304 227.181599 l -144.094464 193.836269 l -144.2016 148.043907 l -144.273024 155.094891 l -144.344448 195.028375 l -144.38016 184.513139 l -144.451584 150.433429 l -144.487296 167.131792 l -144.523008 193.573945 l -144.523008 193.573945 l -144.523008 193.573945 l -144.55872 149.493166 l -144.594432 175.403226 l -144.630144 204.200109 l -144.665856 137.621938 l -144.73728 160.154108 l -144.808704 178.576925 l -144.91584 134.359491 l -144.951552 194.604094 l -145.022976 154.148077 l -145.0944 206.204783 l -145.130112 169.01614 l -145.165824 157.135237 l -145.201536 221.177084 l -145.201536 221.177084 l -145.201536 221.177084 l -145.237248 156.05639 l -145.344384 158.191856 l -145.380096 149.564241 l -145.415808 191.251196 l -145.487232 172.429464 l -145.558656 129.40727 l -145.594368 189.125762 l -145.665792 137.016049 l -145.772928 190.878449 l -145.80864 182.966348 l -145.844352 117.878798 l -145.915776 125.430746 l -146.022912 249.324948 l -146.058624 110.973573 l -146.130048 174.110563 l -146.16576 220.862252 l -146.16576 220.862252 l -146.16576 220.862252 l -146.237184 131.645089 l -146.272896 147.876051 l -146.380032 195.086164 l -146.415744 82.714308 l -146.487168 150.008498 l -146.630016 189.983843 l -146.665728 123.243037 l -146.70144 170.573302 l -146.70144 170.573302 l -146.737152 194.287059 l -146.772864 187.583684 l -146.915712 94.50736 l -147.022848 197.871902 l -147.05856 183.403246 l -147.094272 139.112151 l -147.094272 139.112151 l -147.094272 139.112151 l -147.129984 195.902883 l -147.23712 190.437058 l -147.344256 146.488212 l -147.451392 220.485675 l -147.522816 156.917033 l -147.522816 156.917033 l -147.522816 156.917033 l -147.558528 223.797201 l -147.59424 186.097356 l -147.629952 68.835651 l -147.629952 68.835651 l -147.629952 68.835651 l -147.665664 190.292036 l -147.737088 189.812733 l -147.7728 125.527631 l -147.808512 165.365059 l -147.879936 201.688727 l -147.879936 201.688727 l -147.879936 201.688727 l -147.95136 140.197832 l -147.95136 140.197832 l -147.95136 140.197832 l -147.987072 205.079757 l -148.058496 155.495435 l -148.094208 130.87606 l -148.12992 190.732858 l -148.201344 159.912202 l -148.237056 173.507693 l -148.237056 173.507693 l -148.237056 173.507693 l -148.272768 154.905469 l -148.30848 161.329856 l -148.379904 198.81206 l -148.415616 171.352252 l -148.451328 172.913853 l -148.48704 220.271973 l -148.48704 220.271973 l -148.48704 220.271973 l -148.558464 131.4464 l -148.594176 163.968217 l -148.701312 210.422963 l -148.84416 143.131371 l -148.879872 224.017951 l -148.915584 198.194791 l -148.951296 117.030669 l -149.02272 160.915876 l -149.058432 139.283942 l -149.094144 143.772106 l -149.165568 189.362796 l -149.20128 135.976094 l -149.272704 174.469016 l -149.308416 184.185499 l -149.37984 144.599681 l -149.37984 144.599681 l -149.37984 144.599681 l -149.486976 194.133239 l -149.522688 148.286943 l -149.5584 175.013883 l -149.594112 200.567064 l -149.629824 175.772181 l -149.665536 114.225012 l -149.701248 151.940875 l -149.73696 197.393319 l -149.772672 155.119825 l -149.844096 121.963994 l -149.879808 219.325578 l -149.951232 194.610478 l -150.022656 211.693715 l -150.058368 209.488867 l -150.09408 195.251873 l -150.129792 105.503856 l -150.201216 180.052991 l -150.27264 156.645763 l -150.344064 224.259724 l -150.415488 212.243937 l -150.558336 150.956317 l -150.594048 183.18604 l -150.665472 153.53342 l -150.701184 176.308237 l -150.736896 174.976813 l -150.772608 107.459534 l -150.772608 107.459534 l -150.772608 107.459534 l -150.879744 223.599091 l -150.915456 214.128126 l -151.094016 161.205182 l -151.16544 175.542896 l -151.236864 189.126033 l -151.272576 121.025983 l -151.308288 146.998506 l -151.344 217.737573 l -151.415424 147.254818 l -151.451136 173.986323 l -151.52256 162.97227 l -151.558272 130.819148 l -151.593984 151.783012 l -151.70112 208.678773 l -151.736832 180.388958 l -151.772544 156.512654 l -151.808256 224.099449 l -151.808256 224.099449 l -151.808256 224.099449 l -151.915392 140.992028 l -152.129664 221.428968 l -152.165376 155.789847 l -152.2368 214.06649 l -152.308224 143.60818 l -152.379648 158.995492 l -152.41536 199.574164 l -152.41536 199.574164 l -152.41536 199.574164 l -152.451072 154.981164 l -152.451072 154.981164 l -152.451072 154.981164 l -152.486784 210.138174 l -152.558208 194.578759 l -152.629632 131.186906 l -152.665344 166.134706 l -152.701056 163.83021 l -152.77248 115.407776 l -152.915328 191.367737 l -153.022464 130.502543 l -153.058176 200.146928 l -153.058176 200.146928 l -153.058176 200.146928 l -153.093888 112.85331 l -153.165312 170.886987 l -153.201024 161.042415 l -153.201024 161.042415 l -153.201024 161.042415 l -153.236736 180.205586 l -153.272448 124.386755 l -153.30816 136.945907 l -153.343872 192.662501 l -153.415296 165.007676 l -153.451008 114.809152 l -153.451008 114.809152 l -153.451008 114.809152 l -153.48672 207.365997 l -153.558144 142.826422 l -153.736704 236.197358 l -153.808128 131.221154 l -153.84384 190.744497 l -153.879552 183.585149 l -153.915264 122.677403 l -153.915264 122.677403 l -153.915264 122.677403 l -154.0224 198.422112 l -154.129536 158.647867 l -154.165248 198.599888 l -154.236672 161.615123 l -154.308096 147.924442 l -154.343808 201.073541 l -154.343808 201.073541 l -154.343808 201.073541 l -154.37952 141.957194 l -154.486656 143.535903 l -154.522368 220.431212 l -154.522368 220.431212 l -154.522368 220.431212 l -154.55808 139.20022 l -154.629504 168.774438 l -154.700928 144.77758 l -154.73664 160.438761 l -154.772352 182.372598 l -154.843776 162.527153 l -154.879488 133.551199 l -154.879488 133.551199 l -154.879488 133.551199 l -154.986624 207.581795 l -155.09376 127.647676 l -155.129472 147.008765 l -155.165184 121.56047 l -155.236608 199.396929 l -155.27232 147.806784 l -155.308032 129.811841 l -155.343744 183.108677 l -155.415168 174.741716 l -155.486592 168.328663 l -155.522304 215.362661 l -155.522304 215.362661 l -155.522304 215.362661 l -155.62944 139.820428 l -155.665152 211.979803 l -155.736576 167.319809 l -155.772288 154.404541 l -155.808 225.608681 l -155.843712 178.262996 l -155.879424 136.97256 l -155.879424 136.97256 l -155.879424 136.97256 l -155.915136 178.444567 l -155.98656 177.593414 l -156.022272 96.812794 l -156.093696 164.89247 l -156.129408 137.601288 l -156.16512 196.13893 l -156.236544 155.462567 l -156.307968 208.148686 l -156.379392 184.858232 l -156.415104 157.887226 l -156.415104 157.887226 l -156.415104 157.887226 l -156.450816 192.551027 l -156.450816 192.551027 l -156.450816 192.551027 l -156.486528 119.829626 l -156.557952 160.389324 l -156.593664 175.749063 l -156.629376 164.674474 l -156.665088 149.321778 l -156.7008 192.545329 l -156.772224 181.303655 l -156.807936 147.319148 l -156.87936 156.255672 l -156.915072 156.272927 l -156.950784 212.615758 l -157.022208 187.008984 l -157.05792 200.084856 l -157.05792 200.084856 l -157.05792 200.084856 l -157.23648 107.212727 l -157.343616 191.937907 l -157.379328 180.973751 l -157.450752 176.445953 l -157.557888 226.415921 l -157.5936 150.756042 l -157.665024 170.691068 l -157.736448 191.841673 l -157.77216 136.806839 l -157.843584 145.684314 l -157.915008 191.06177 l -157.95072 189.826582 l -158.022144 144.244165 l -158.093568 158.870593 l -158.12928 157.522778 l -158.200704 227.434682 l -158.236416 142.705483 l -158.30784 163.076933 l -158.343552 204.461351 l -158.343552 204.461351 l -158.343552 204.461351 l -158.379264 159.248965 l -158.450688 179.56721 l -158.557824 167.820853 l -158.700672 200.237067 l -158.772096 158.84804 l -158.807808 171.936182 l -158.84352 217.205691 l -158.914944 183.260028 l -158.950656 207.179649 l -158.950656 207.179649 l -158.950656 207.179649 l -159.057792 137.902398 l -159.093504 160.15529 l -159.164928 129.744565 l -159.20064 184.023827 l -159.307776 177.990773 l -159.343488 176.408338 l -159.3792 191.678978 l -159.414912 185.019951 l -159.522048 133.141918 l -159.55776 209.640979 l -159.629184 154.67006 l -159.700608 188.281762 l -159.73632 128.297502 l -159.73632 128.297502 l -159.73632 128.297502 l -159.772032 214.066492 l -159.843456 168.241783 l -159.879168 184.397176 l -159.879168 184.397176 l -159.879168 184.397176 l -159.91488 158.695623 l -159.986304 180.868225 l -160.022016 203.220044 l -160.022016 203.220044 l -160.022016 203.220044 l -160.057728 172.829819 l -160.057728 172.829819 l -160.057728 172.829819 l -160.09344 213.167062 l -160.09344 213.167062 l -160.09344 213.167062 l -160.129152 138.312129 l -160.129152 138.312129 l -160.129152 138.312129 l -160.164864 215.608443 l -160.164864 215.608443 l -160.164864 215.608443 l -160.200576 108.643376 l -160.272 155.108143 l -160.343424 173.420815 l -160.379136 199.543123 l -160.379136 199.543123 l -160.379136 199.543123 l -160.45056 109.360838 l -160.486272 220.992093 l -160.557696 183.087369 l -160.593408 201.741233 l -160.62912 90.528028 l -160.700544 176.948078 l -160.736256 174.995826 l -160.771968 140.662803 l -160.771968 140.662803 l -160.771968 140.662803 l -160.80768 183.569065 l -160.80768 183.569065 l -160.80768 183.569065 l -160.843392 102.015543 l -160.843392 102.015543 l -160.843392 102.015543 l -160.914816 219.111816 l -160.950528 203.445473 l -161.093376 156.530948 l -161.129088 188.119738 l -161.200512 183.48352 l -161.236224 129.179221 l -161.307648 165.20138 l -161.34336 148.816323 l -161.34336 148.816323 l -161.34336 148.816323 l -161.450496 196.956208 l -161.486208 151.972089 l -161.557632 185.19234 l -161.593344 160.178252 l -161.664768 179.691743 l -161.70048 177.281622 l -161.771904 211.381735 l -161.87904 136.22697 l -162.021888 250.578291 l -162.0576 217.106114 l -162.093312 116.972644 l -162.164736 156.373647 l -162.23616 194.941485 l -162.307584 176.749451 l -162.450432 131.120188 l -162.557568 198.897911 l -162.59328 198.265036 l -162.664704 111.135167 l -162.700416 133.778757 l -162.807552 198.419967 l -162.9504 162.011595 l -162.986112 224.362016 l -162.986112 224.362016 l -162.986112 224.362016 l -163.021824 126.229157 l -163.093248 170.315101 l -163.12896 177.668665 l -163.200384 215.602959 l -163.271808 210.217967 l -163.30752 127.934689 l -163.378944 148.846353 l -163.414656 190.941856 l -163.414656 190.941856 l -163.414656 190.941856 l -163.450368 105.928011 l -163.48608 180.901048 l -163.521792 205.114006 l -163.593216 184.165356 l -163.628928 178.277766 l -163.66464 139.626908 l -163.700352 148.885646 l -163.736064 204.727457 l -163.807488 173.932003 l -163.878912 183.074133 l -163.914624 193.298874 l -164.057472 118.518689 l -164.128896 195.871041 l -164.20032 162.361933 l -164.236032 178.451875 l -164.236032 178.451875 l -164.236032 178.451875 l -164.271744 148.074245 l -164.343168 165.081756 l -164.37888 156.049423 l -164.37888 156.049423 l -164.37888 156.049423 l -164.450304 197.019118 l -164.486016 121.15315 l -164.55744 164.078348 l -164.593152 188.848203 l -164.664576 172.53422 l -164.700288 177.150793 l -164.736 202.944864 l -164.771712 110.281812 l -164.843136 137.873537 l -164.985984 226.786924 l -165.200256 142.569338 l -165.235968 176.776415 l -165.307392 148.850468 l -165.343104 95.860187 l -165.414528 137.042099 l -165.485952 251.720422 l -165.521664 159.624064 l -165.557376 154.839014 l -165.557376 154.839014 l -165.557376 154.839014 l -165.593088 160.449495 l -165.6288 110.375246 l -165.6288 110.375246 l -165.6288 110.375246 l -165.735936 189.903035 l -165.771648 161.652322 l -165.80736 177.094612 l -165.843072 164.109356 l -165.950208 122.459703 l -166.021632 209.473525 l -166.057344 188.424557 l -166.093056 119.252611 l -166.16448 138.929756 l -166.200192 158.771482 l -166.235904 242.192725 l -166.235904 242.192725 l -166.235904 242.192725 l -166.271616 143.979249 l -166.34304 166.786113 l -166.450176 120.054747 l -166.485888 140.923444 l -166.5216 195.060825 l -166.593024 192.008135 l -166.628736 187.929413 l -166.664448 148.363499 l -166.664448 148.363499 l -166.664448 148.363499 l -166.70016 193.070826 l -166.70016 193.070826 l -166.70016 193.070826 l -166.735872 131.109488 l -166.807296 166.636085 l -166.843008 190.666778 l -166.87872 185.936289 l -166.914432 112.091926 l -166.985856 170.485843 l -167.021568 154.335056 l -167.021568 154.335056 l -167.021568 154.335056 l -167.092992 223.325992 l -167.128704 211.556015 l -167.200128 139.664611 l -167.271552 146.171188 l -167.4144 199.032786 l -167.557248 115.144719 l -167.664384 212.154242 l -167.77152 147.688298 l -167.807232 161.707302 l -167.842944 185.433832 l -167.842944 185.433832 l -167.842944 185.433832 l -167.914368 140.80683 l -167.95008 197.512525 l -167.985792 144.864479 l -168.021504 117.560176 l -168.057216 233.480021 l -168.12864 160.020038 l -168.164352 198.697469 l -168.164352 198.697469 l -168.164352 198.697469 l -168.271488 136.346715 l -168.3072 202.827575 l -168.342912 143.141451 l -168.342912 143.141451 l -168.378624 131.986843 l -168.378624 131.986843 l -168.378624 131.986843 l -168.521472 191.111371 l -168.557184 154.293831 l -168.628608 187.73743 l -168.66432 217.985761 l -168.66432 217.985761 l -168.66432 217.985761 l -168.807168 135.226865 l -168.914304 195.876652 l -168.950016 140.893514 l -169.02144 157.654697 l -169.092864 207.499141 l -169.164288 183.272527 l -169.37856 135.085467 l -169.521408 197.592534 l -169.592832 148.630869 l -169.664256 157.648726 l -169.699968 160.130639 l -169.771392 196.111267 l -169.807104 136.718146 l -169.807104 136.718146 l -169.807104 136.718146 l -169.842816 219.590547 l -169.91424 185.638488 l -169.949952 124.688647 l -169.985664 172.310001 l -169.985664 172.310001 l -170.021376 190.569152 l -170.021376 190.569152 l -170.021376 190.569152 l -170.164224 150.448467 l -170.27136 192.501385 l -170.307072 174.555519 l -170.342784 174.995608 l -170.44992 144.736948 l -170.521344 209.381324 l -170.592768 204.853944 l -170.62848 137.646582 l -170.664192 147.562137 l -170.699904 223.011779 l -170.735616 194.946062 l -170.771328 126.344977 l -170.842752 181.528322 l -170.878464 155.574885 l -170.914176 220.049183 l -170.9856 218.146564 l -171.021312 138.371357 l -171.092736 166.401624 l -171.16416 183.761126 l -171.16416 183.761126 l -171.16416 183.761126 l -171.235584 124.588727 l -171.307008 160.773806 l -171.34272 214.093216 l -171.378432 208.608978 l -171.52128 135.806895 l -171.556992 139.692642 l -171.69984 201.855369 l -171.735552 178.071652 l -171.735552 178.071652 l -171.735552 178.071652 l -171.771264 206.221443 l -171.771264 206.221443 l -171.771264 206.221443 l -171.806976 164.247467 l -171.806976 164.247467 l -171.806976 164.247467 l -171.842688 206.525212 l -171.8784 179.753981 l -171.8784 179.753981 l -171.914112 163.128951 l -171.949824 208.956669 l -172.021248 201.965323 l -172.05696 114.330103 l -172.128384 185.771025 l -172.164096 138.072742 l -172.164096 138.072742 l -172.164096 138.072742 l -172.199808 192.122945 l -172.199808 192.122945 l -172.199808 192.122945 l -172.23552 130.633316 l -172.306944 148.927157 l -172.342656 188.122693 l -172.41408 161.580048 l -172.449792 151.710936 l -172.449792 151.710936 l -172.449792 151.710936 l -172.485504 162.544006 l -172.485504 162.544006 l -172.485504 162.544006 l -172.521216 147.806885 l -172.556928 157.309525 l -172.664064 172.459747 l -172.699776 212.955264 l -172.735488 203.461338 l -172.7712 163.666399 l -172.7712 163.666399 l -172.7712 163.666399 l -172.806912 206.296939 l -172.806912 206.296939 l -172.806912 206.296939 l -172.842624 147.087947 l -172.914048 179.17533 l -172.94976 204.732466 l -173.056896 144.62686 l -173.12832 205.499933 l -173.199744 175.170945 l -173.271168 161.725919 l -173.30688 219.261314 l -173.378304 181.871494 l -173.48544 154.632845 l -173.556864 195.269489 l -173.699712 141.432956 l -173.735424 194.899407 l -173.84256 194.235688 l -173.878272 143.645379 l -173.949696 171.114483 l -173.985408 206.155731 l -173.985408 206.155731 l -173.985408 206.155731 l -174.02112 168.521959 l -174.128256 172.42215 l -174.19968 130.068314 l -174.235392 210.139786 l -174.306816 186.336489 l -174.413952 139.270557 l -174.485376 229.42123 l -174.5568 175.161244 l -174.628224 192.031448 l -174.663936 134.478091 l -174.699648 163.792082 l -174.73536 230.185975 l -174.771072 190.296742 l -174.878208 136.302061 l -174.91392 173.118754 l -174.91392 173.118754 l -174.91392 173.118754 l -174.949632 119.08865 l -174.949632 119.08865 l -174.949632 119.08865 l -175.056768 222.604719 l -175.09248 171.185615 l -175.128192 144.015493 l -175.128192 144.015493 l -175.128192 144.015493 l -175.199616 185.582741 l -175.235328 130.92141 l -175.235328 130.92141 l -175.235328 130.92141 l -175.27104 203.238893 l -175.342464 153.949433 l -175.378176 166.751862 l -175.413888 241.675197 l -175.4496 174.607354 l -175.485312 152.714504 l -175.485312 152.714504 l -175.485312 152.714504 l -175.556736 198.984417 l -175.592448 192.20621 l -175.62816 160.071803 l -175.699584 185.598718 l -175.735296 224.067324 l -175.735296 224.067324 l -175.735296 224.067324 l -175.80672 156.754366 l -175.878144 172.601843 l -175.949568 135.891327 l -176.020992 206.108416 l -176.056704 159.968433 l -176.092416 125.781081 l -176.092416 125.781081 l -176.092416 125.781081 l -176.199552 209.979465 l -176.235264 192.123104 l -176.3424 147.279785 l -176.378112 151.073558 l -176.449536 191.031013 l -176.52096 188.819707 l -176.556672 137.751276 l -176.628096 143.857435 l -176.69952 170.680329 l -176.735232 160.306701 l -176.806656 203.392843 l -176.842368 164.863396 l -176.87808 126.701606 l -176.87808 126.701606 l -176.87808 126.701606 l -176.949504 196.637279 l -176.985216 170.489571 l -177.020928 117.411989 l -177.020928 117.411989 l -177.020928 117.411989 l -177.092352 192.381337 l -177.128064 120.579165 l -177.163776 120.885214 l -177.199488 227.48455 l -177.270912 149.528299 l -177.306624 184.55734 l -177.378048 166.900334 l -177.41376 168.715258 l -177.449472 160.033314 l -177.485184 192.869329 l -177.485184 192.869329 l -177.485184 192.869329 l -177.520896 144.151286 l -177.59232 153.592197 l -177.628032 186.711387 l -177.628032 186.711387 l -177.628032 186.711387 l -177.663744 149.236917 l -177.699456 166.642485 l -177.806592 201.166615 l -177.842304 148.901221 l -177.842304 148.901221 l -177.842304 148.901221 l -177.878016 216.447275 l -177.913728 162.605927 l -177.913728 162.605927 l -177.94944 148.214523 l -177.985152 158.663283 l -177.985152 158.663283 l -178.020864 163.783742 l -178.128 231.727992 l -178.163712 167.257003 l -178.270848 173.774386 l -178.30656 169.031431 l -178.342272 200.333859 l -178.413696 170.494671 l -178.449408 121.888074 l -178.449408 121.888074 l -178.449408 121.888074 l -178.592256 263.524885 l -178.735104 140.208773 l -178.806528 167.759722 l -178.84224 212.295396 l -178.877952 192.18075 l -178.913664 105.419897 l -179.0208 106.02006 l -179.19936 205.023362 l -179.449344 123.466422 l -179.55648 226.511538 l -179.663616 216.578842 l -179.699328 219.673693 l -179.877888 122.228574 l -179.9136 189.782829 l -179.985024 183.707645 l -180.020736 164.867586 l -180.09216 178.858878 l -180.127872 178.228939 l -180.199296 183.111976 l -180.235008 196.094511 l -180.235008 196.094511 l -180.235008 196.094511 l -180.306432 147.726113 l -180.342144 206.743063 l -180.413568 203.266808 l -180.484992 132.967 l -180.520704 150.064426 l -180.556416 205.377033 l -180.556416 205.377033 l -180.556416 205.377033 l -180.62784 124.482919 l -180.62784 124.482919 l -180.62784 124.482919 l -180.663552 206.612859 l -180.734976 187.844625 l -180.770688 145.686084 l -180.8064 182.165413 l -180.877824 221.252343 l -181.020672 150.538653 l -181.092096 207.838819 l -181.127808 194.585402 l -181.16352 140.363352 l -181.199232 173.07819 l -181.199232 173.07819 l -181.234944 196.147409 l -181.270656 183.082572 l -181.306368 143.781943 l -181.34208 162.86473 l -181.377792 202.633017 l -181.377792 202.633017 l -181.377792 202.633017 l -181.413504 128.454501 l -181.484928 196.74277 l -181.556352 137.558969 l -181.627776 161.946787 l -181.663488 141.282512 l -181.6992 158.278169 l -181.734912 202.775636 l -181.806336 172.397009 l -181.842048 138.777011 l -181.842048 138.777011 l -181.842048 138.777011 l -181.87776 208.081888 l -181.949184 196.359541 l -182.020608 99.459225 l -182.05632 154.695627 l -182.163456 186.967465 l -182.199168 176.515733 l -182.23488 199.520616 l -182.23488 199.520616 l -182.23488 199.520616 l -182.342016 137.261831 l -182.377728 153.466071 l -182.520576 228.734662 l -182.556288 200.806217 l -182.592 174.925455 l -182.592 174.925455 l -182.592 174.925455 l -182.627712 205.523094 l -182.627712 205.523094 l -182.627712 205.523094 l -182.663424 143.333993 l -182.734848 194.769454 l -182.77056 160.730365 l -182.841984 162.659956 l -182.877696 199.319906 l -182.913408 179.021139 l -182.94912 130.346871 l -182.94912 130.346871 l -182.94912 130.346871 l -182.984832 196.789687 l -183.056256 152.084704 l -183.163392 184.096124 l -183.199104 184.038303 l -183.234816 166.778896 l -183.234816 166.778896 l -183.234816 166.778896 l -183.270528 186.90671 l -183.30624 177.630012 l -183.341952 158.459317 l -183.377664 171.555185 l -183.413376 212.807195 l -183.413376 212.807195 l -183.413376 212.807195 l -183.4848 135.7917 l -183.520512 179.841726 l -183.556224 161.968793 l -183.556224 161.968793 l -183.556224 161.968793 l -183.591936 191.939084 l -183.591936 191.939084 l -183.591936 191.939084 l -183.699072 126.942804 l -183.734784 154.150894 l -183.770496 197.045902 l -183.770496 197.045902 l -183.770496 197.045902 l -183.806208 118.310403 l -183.877632 153.76111 l -183.913344 139.705961 l -183.949056 204.121636 l -184.02048 177.88614 l -184.056192 191.942735 l -184.127616 134.839922 l -184.163328 184.820149 l -184.19904 149.341977 l -184.19904 149.341977 l -184.19904 149.341977 l -184.234752 194.089385 l -184.234752 194.089385 l -184.234752 194.089385 l -184.270464 120.561254 l -184.341888 172.453496 l -184.3776 152.678809 l -184.413312 166.935494 l -184.449024 203.748666 l -184.449024 203.748666 l -184.449024 203.748666 l -184.55616 142.973133 l -184.591872 208.840078 l -184.663296 178.314923 l -184.699008 166.504147 l -184.73472 199.907434 l -184.73472 199.907434 l -184.73472 199.907434 l -184.877568 150.014958 l -184.91328 138.097602 l -184.984704 210.168929 l -185.020416 177.360602 l -185.056128 117.482738 l -185.056128 117.482738 l -185.056128 117.482738 l -185.127552 194.872706 l -185.163264 100.177073 l -185.198976 178.797545 l -185.234688 222.442557 l -185.2704 200.675795 l -185.306112 160.93175 l -185.341824 162.518441 l -185.377536 215.288243 l -185.377536 215.288243 l -185.377536 215.288243 l -185.413248 149.452008 l -185.484672 152.079452 l -185.591808 191.492264 l -185.62752 161.004734 l -185.663232 165.168199 l -185.663232 165.168199 l -185.80608 206.427404 l -185.913216 151.197863 l -186.020352 215.642775 l -186.056064 175.48415 l -186.091776 138.111353 l -186.127488 170.135448 l -186.1632 206.613882 l -186.1632 206.613882 l -186.1632 206.613882 l -186.198912 137.301573 l -186.234624 177.693404 l -186.270336 217.90242 l -186.270336 217.90242 l -186.270336 217.90242 l -186.377472 122.329754 l -186.448896 217.331656 l -186.484608 158.130576 l -186.52032 98.523192 l -186.52032 98.523192 l -186.52032 98.523192 l -186.663168 192.155515 l -186.770304 141.833871 l -186.806016 153.177058 l -186.913152 206.5246 l -186.948864 202.605056 l -187.056 152.580593 l -187.091712 157.30049 l -187.127424 196.590641 l -187.23456 195.831609 l -187.41312 127.439527 l -187.448832 181.291299 l -187.520256 163.044159 l -187.555968 120.53261 l -187.555968 120.53261 l -187.555968 120.53261 l -187.627392 202.975229 l -187.663104 175.629516 l -187.698816 166.905608 l -187.734528 186.959837 l -187.77024 144.145728 l -187.841664 184.03022 l -187.913088 156.453892 l -187.9488 200.073159 l -188.055936 199.361184 l -188.12736 118.816393 l -188.198784 219.016244 l -188.234496 179.624876 l -188.270208 182.475563 l -188.377344 167.564636 l -188.413056 170.714415 l -188.448768 224.706222 l -188.48448 197.899738 l -188.520192 158.640361 l -188.520192 158.640361 l -188.520192 158.640361 l -188.555904 200.929146 l -188.627328 190.965308 l -188.734464 169.209788 l -188.770176 174.988208 l -188.805888 210.885002 l -188.8416 208.162952 l -188.913024 108.70202 l -188.948736 148.738988 l -188.984448 190.670976 l -189.055872 154.875952 l -189.091584 137.483989 l -189.091584 137.483989 l -189.091584 137.483989 l -189.19872 180.829107 l -189.234432 126.602862 l -189.234432 126.602862 l -189.234432 126.602862 l -189.270144 225.613313 l -189.341568 138.780953 l -189.37728 176.841483 l -189.37728 176.841483 l -189.37728 176.841483 l -189.412992 112.190632 l -189.484416 156.673489 l -189.520128 196.541198 l -189.591552 172.145277 l -189.662976 110.479319 l -189.698688 135.131456 l -189.7344 190.239545 l -189.770112 189.666989 l -189.805824 109.559276 l -189.841536 157.588678 l -189.841536 157.588678 l -189.877248 191.73794 l -189.877248 191.73794 l -189.877248 191.73794 l -189.91296 148.019853 l -189.91296 148.019853 l -189.91296 148.019853 l -189.948672 193.27298 l -189.984384 181.696965 l -189.984384 181.696965 l -190.020096 144.635714 l -190.020096 144.635714 l -190.020096 144.635714 l -190.055808 201.29029 l -190.055808 201.29029 l -190.055808 201.29029 l -190.09152 140.495408 l -190.162944 156.144635 l -190.27008 212.175018 l -190.305792 123.803216 l -190.377216 186.245042 l -190.412928 152.869465 l -190.412928 152.869465 l -190.412928 152.869465 l -190.484352 230.72831 l -190.484352 230.72831 l -190.484352 230.72831 l -190.520064 152.337062 l -190.591488 176.489771 l -190.6272 179.214027 l -190.770048 134.923171 l -190.80576 113.233207 l -190.841472 185.437995 l -190.912896 154.330132 l -190.948608 158.589645 l -191.020032 208.635715 l -191.055744 165.13926 l -191.091456 170.053055 l -191.16288 143.051419 l -191.198592 174.134065 l -191.198592 174.134065 l -191.198592 174.134065 l -191.234304 142.761922 l -191.234304 142.761922 l -191.234304 142.761922 l -191.305728 222.435135 l -191.305728 222.435135 l -191.305728 222.435135 l -191.34144 139.640719 l -191.412864 188.156573 l -191.448576 186.219523 l -191.484288 130.008726 l -191.555712 131.19486 l -191.627136 203.096368 l -191.662848 182.440487 l -191.69856 153.556332 l -191.769984 164.410505 l -191.841408 168.722207 l -191.87712 128.16609 l -191.87712 128.16609 l -191.87712 128.16609 l -191.912832 174.621528 l -191.984256 162.085717 l -192.019968 150.402521 l -192.05568 232.589539 l -192.091392 166.40696 l -192.127104 137.274191 l -192.198528 199.202714 l -192.23424 191.040375 l -192.305664 116.337398 l -192.341376 183.314235 l -192.377088 174.472561 l -192.4128 122.909291 l -192.4128 122.909291 l -192.4128 122.909291 l -192.448512 186.890024 l -192.519936 132.093143 l -192.662784 218.969283 l -192.805632 143.718711 l -192.841344 212.79283 l -192.877056 155.27744 l -192.912768 116.074504 l -192.94848 127.105856 l -192.984192 174.32721 l -193.055616 156.046998 l -193.091328 151.122679 l -193.091328 151.122679 l -193.091328 151.122679 l -193.12704 160.338458 l -193.162752 198.809169 l -193.234176 176.785756 l -193.377024 196.176726 l -193.412736 181.651185 l -193.412736 181.651185 l -193.412736 181.651185 l -193.48416 224.048093 l -193.48416 224.048093 l -193.48416 224.048093 l -193.627008 152.582969 l -193.734144 200.766754 l -193.769856 155.789485 l -193.769856 155.789485 l -193.769856 155.789485 l -193.805568 232.961138 l -193.805568 232.961138 l -193.805568 232.961138 l -193.948416 148.468205 l -194.126976 228.226103 l -194.1984 127.602574 l -194.234112 165.116628 l -194.341248 203.759761 l -194.37696 166.360673 l -194.37696 166.360673 l -194.37696 166.360673 l -194.412672 215.936899 l -194.412672 215.936899 l -194.412672 215.936899 l -194.448384 150.638545 l -194.519808 184.419115 l -194.626944 137.382533 l -194.769792 204.539283 l -194.876928 119.809272 l -194.984064 216.569292 l -195.019776 160.612262 l -195.0912 194.311138 l -195.162624 156.600543 l -195.198336 188.004209 l -195.234048 179.22716 l -195.234048 179.22716 l -195.234048 179.22716 l -195.305472 196.40258 l -195.44832 120.512129 l -195.519744 202.568947 l -195.591168 181.883777 l -195.62688 201.173652 l -195.80544 109.647822 l -195.984 205.014217 l -196.16256 142.478264 l -196.269696 207.825845 l -196.34112 148.967337 l -196.376832 179.923817 l -196.448256 224.371065 l -196.483968 156.52822 l -196.555392 180.012631 l -196.591104 192.30276 l -196.626816 182.991686 l -196.662528 148.737985 l -196.662528 148.737985 l -196.662528 148.737985 l -196.69824 198.634838 l -196.69824 198.634838 l -196.69824 198.634838 l -196.733952 140.657821 l -196.769664 141.784401 l -196.805376 230.257834 l -196.805376 230.257834 l -196.805376 230.257834 l -196.841088 134.123816 l -196.912512 187.591056 l -196.948224 200.418303 l -196.983936 142.947105 l -197.019648 172.937562 l -197.019648 172.937562 l -197.05536 203.494736 l -197.05536 203.494736 l -197.05536 203.494736 l -197.198208 150.031841 l -197.305344 234.734612 l -197.41248 146.584041 l -197.448192 158.726098 l -197.483904 153.241781 l -197.519616 181.877916 l -197.555328 155.986686 l -197.59104 137.092491 l -197.59104 137.092491 l -197.59104 137.092491 l -197.626752 160.799928 l -197.626752 160.799928 l -197.626752 160.799928 l -197.662464 126.88364 l -197.733888 133.994989 l -197.805312 207.514231 l -197.841024 199.281479 l -197.876736 124.189019 l -197.912448 173.003983 l -197.983872 214.294244 l -198.12672 117.773716 l -198.198144 190.458343 l -198.233856 142.494591 l -198.269568 137.911978 l -198.30528 163.267286 l -198.30528 163.267286 l -198.30528 163.267286 l -198.340992 135.224712 l -198.376704 220.620494 l -198.448128 175.709586 l -198.48384 146.850014 l -198.519552 224.354039 l -198.590976 177.076639 l -198.626688 160.478923 l -198.6624 202.560481 l -198.698112 189.391586 l -198.733824 136.400201 l -198.733824 136.400201 l -198.733824 136.400201 l -198.769536 207.609451 l -198.769536 207.609451 l -198.769536 207.609451 l -198.805248 110.674173 l -198.876672 197.504742 l -198.912384 197.135742 l -199.090944 149.029812 l -199.162368 209.535202 l -199.19808 188.693408 l -199.305216 129.143961 l -199.340928 162.167624 l -199.37664 173.178151 l -199.37664 173.178151 l -199.37664 173.178151 l -199.412352 151.376963 l -199.483776 157.289646 l -199.626624 219.152904 l -199.73376 152.185636 l -199.769472 156.335392 l -199.805184 153.67143 l -199.840896 203.880858 l -199.91232 175.445611 l -199.948032 161.656122 l -199.983744 199.390621 l -199.983744 199.390621 l -199.983744 199.390621 l -200.09088 144.357871 l -200.126592 149.423935 l -200.233728 203.153085 l -200.376576 97.578669 l -200.483712 238.912176 l -200.555136 203.336635 l -200.662272 125.337466 l -200.697984 143.133537 l -200.733696 218.374145 l -200.80512 175.54826 l -200.840832 130.270622 l -200.840832 130.270622 l -200.840832 130.270622 l -200.912256 211.578804 l -200.947968 117.874211 l -201.019392 144.088468 l -201.055104 155.178243 l -201.090816 208.780519 l -201.090816 208.780519 l -201.090816 208.780519 l -201.126528 131.952865 l -201.197952 173.971514 l -201.305088 138.553061 l -201.3408 156.827145 l -201.412224 226.952588 l -201.51936 97.076698 l -201.590784 187.305827 l -201.626496 128.5861 l -201.662208 123.852161 l -201.769344 192.70787 l -201.805056 173.727541 l -201.912192 145.54927 l -201.947904 164.823462 l -201.947904 164.823462 l -201.947904 164.823462 l -202.05504 115.479874 l -202.090752 198.884569 l -202.162176 176.805226 l -202.197888 164.404203 l -202.197888 164.404203 l -202.197888 164.404203 l -202.305024 191.076899 l -202.340736 143.367045 l -202.340736 143.367045 l -202.340736 143.367045 l -202.447872 230.595916 l -202.519296 153.605388 l -202.555008 187.907369 l -202.59072 181.794868 l -202.626432 223.974099 l -202.662144 192.736427 l -202.697856 159.316056 l -202.76928 160.568989 l -202.804992 195.827139 l -202.912128 193.337096 l -203.019264 139.135813 l -203.054976 165.181142 l -203.090688 162.8371 l -203.197824 231.098756 l -203.30496 144.963057 l -203.340672 198.02618 l -203.376384 150.219924 l -203.376384 150.219924 l -203.447808 135.534969 l -203.519232 195.130066 l -203.519232 195.130066 l -203.519232 195.130066 l -203.554944 132.470925 l -203.626368 166.897923 l -203.66208 154.162965 l -203.697792 188.566799 l -203.733504 167.742805 l -203.769216 129.102985 l -203.804928 165.187822 l -203.876352 173.137566 l -203.912064 149.96455 l -203.912064 149.96455 l -203.912064 149.96455 l -203.947776 180.3671 l -204.054912 179.449671 l -204.126336 166.555534 l -204.162048 185.28482 l -204.19776 129.014873 l -204.19776 129.014873 l -204.19776 129.014873 l -204.233472 190.951936 l -204.304896 129.311173 l -204.447744 171.276554 l -204.483456 172.650254 l -204.519168 181.193244 l -204.519168 181.193244 l -204.519168 181.193244 l -204.55488 167.511907 l -204.590592 216.285125 l -204.590592 216.285125 l -204.590592 216.285125 l -204.73344 138.13861 l -204.840576 207.440334 l -204.876288 233.060837 l -204.876288 233.060837 l -204.876288 233.060837 l -204.947712 132.692242 l -205.019136 154.688877 l -205.054848 195.330774 l -205.09056 99.482675 l -205.09056 99.482675 l -205.09056 99.482675 l -205.161984 215.420351 l -205.197696 157.801811 l -205.233408 162.667132 l -205.26912 159.526943 l -205.304832 116.384388 l -205.304832 116.384388 l -205.304832 116.384388 l -205.340544 205.105712 l -205.411968 195.515209 l -205.44768 162.33783 l -205.44768 162.33783 l -205.44768 162.33783 l -205.590528 197.392156 l -205.661952 158.908338 l -205.733376 212.799399 l -205.733376 212.799399 l -205.733376 212.799399 l -205.769088 156.657549 l -205.8048 156.761318 l -205.8048 156.761318 l -205.840512 215.251476 l -205.840512 215.251476 l -205.840512 215.251476 l -205.911936 55.189967 l -205.947648 178.574306 l -206.019072 230.053486 l -206.054784 201.506906 l -206.197632 146.760205 l -206.269056 208.791247 l -206.304768 137.498106 l -206.376192 178.20574 l -206.411904 151.146077 l -206.447616 175.418888 l -206.447616 175.418888 l -206.483328 178.32491 l -206.51904 144.687598 l -206.590464 158.697507 l -206.626176 183.172179 l -206.661888 112.284371 l -206.769024 119.550485 l -206.804736 191.713188 l -206.87616 143.810548 l -206.911872 109.411229 l -206.911872 109.411229 l -206.911872 109.411229 l -206.947584 177.456737 l -207.019008 144.385171 l -207.05472 130.990895 l -207.05472 130.990895 l -207.05472 130.990895 l -207.126144 197.281397 l -207.197568 160.577936 l -207.23328 109.93327 l -207.268992 220.282351 l -207.376128 217.140147 l -207.447552 127.784128 l -207.518976 169.966385 l -207.554688 145.083961 l -207.5904 159.285518 l -207.626112 218.785388 l -207.697536 174.751246 l -207.733248 155.090006 l -207.76896 157.12836 l -207.76896 157.12836 l -207.804672 175.650569 l -207.804672 175.650569 l -207.804672 175.650569 l -207.876096 131.589226 l -207.911808 147.225144 l -207.983232 197.870633 l -208.018944 154.847218 l -208.054656 96.335206 l -208.090368 149.210203 l -208.197504 203.701211 l -208.233216 155.112217 l -208.340352 158.967924 l -208.376064 129.977949 l -208.447488 147.143306 l -208.4832 210.473018 l -208.554624 171.771676 l -208.66176 214.306997 l -208.768896 121.940883 l -208.876032 201.621621 l -208.983168 128.151068 l -209.01888 244.239885 l -209.054592 218.51563 l -209.054592 218.51563 l -209.090304 124.539969 l -209.161728 185.589381 l -209.233152 168.87444 l -209.268864 180.650829 l -209.304576 194.305248 l -209.340288 151.362942 l -209.411712 186.088341 l -209.447424 211.053794 l -209.447424 211.053794 l -209.447424 211.053794 l -209.518848 139.282465 l -209.590272 144.63919 l -209.625984 254.65672 l -209.697408 207.714619 l -209.73312 208.830681 l -209.840256 125.205453 l -209.875968 186.682928 l -209.875968 186.682928 l -209.875968 186.682928 l -209.91168 118.952925 l -209.91168 118.952925 l -209.91168 118.952925 l -209.947392 205.519028 l -210.018816 169.835298 l -210.054528 139.195013 l -210.09024 151.978757 l -210.125952 215.547993 l -210.197376 166.642799 l -210.233088 193.645726 l -210.233088 193.645726 l -210.233088 193.645726 l -210.2688 156.849321 l -210.340224 163.811438 l -210.375936 178.525816 l -210.44736 91.954371 l -210.483072 178.235032 l -210.518784 211.425018 l -210.554496 129.123993 l -210.554496 129.123993 l -210.554496 129.123993 l -210.590208 217.212763 l -210.661632 174.237408 l -210.697344 122.227722 l -210.697344 122.227722 l -210.697344 122.227722 l -210.733056 227.483268 l -210.80448 165.903821 l -210.840192 180.566768 l -210.840192 180.566768 l -210.840192 180.566768 l -210.875904 152.854233 l -210.875904 152.854233 l -210.875904 152.854233 l -210.911616 202.96028 l -210.911616 202.96028 l -210.911616 202.96028 l -211.018752 148.710996 l -211.054464 151.357051 l -211.1616 186.295224 l -211.233024 144.175188 l -211.268736 219.964332 l -211.34016 163.245022 l -211.375872 149.17528 l -211.411584 211.102712 l -211.483008 163.016929 l -211.554432 182.709703 l -211.732992 87.718183 l -211.768704 203.218602 l -211.840128 133.749256 l -211.87584 134.562543 l -212.018688 224.821672 l -212.0544 222.006596 l -212.125824 155.964975 l -212.197248 168.124632 l -212.304384 127.650443 l -212.340096 145.424118 l -212.482944 214.262312 l -212.554368 177.904971 l -212.59008 141.795152 l -212.59008 141.795152 l -212.59008 141.795152 l -212.625792 205.893705 l -212.697216 165.921368 l -212.732928 162.479466 l -212.804352 203.373252 l -212.840064 169.595111 l -212.911488 157.662724 l -212.9472 198.526767 l -212.982912 162.078139 l -213.018624 144.614925 l -213.054336 161.015174 l -213.090048 207.819623 l -213.161472 204.04836 l -213.30432 139.364249 l -213.375744 215.051574 l -213.411456 167.437761 l -213.447168 173.139883 l -213.447168 173.139883 l -213.447168 173.139883 l -213.518592 154.720355 l -213.554304 169.153407 l -213.590016 171.622889 l -213.625728 154.822237 l -213.625728 154.822237 l -213.625728 154.822237 l -213.66144 172.889323 l -213.697152 127.564509 l -213.768576 158.225923 l -213.84 194.657532 l -213.875712 162.64187 l -213.911424 146.115314 l -213.947136 155.001658 l -213.982848 209.515546 l -214.054272 175.775021 l -214.089984 133.043214 l -214.089984 133.043214 l -214.089984 133.043214 l -214.19712 195.631922 l -214.232832 146.130266 l -214.304256 192.156186 l -214.339968 188.000482 l -214.37568 151.210815 l -214.37568 151.210815 l -214.37568 151.210815 l -214.411392 213.750684 l -214.411392 213.750684 l -214.411392 213.750684 l -214.447104 133.700979 l -214.55424 136.585866 l -214.625664 225.092907 l -214.661376 128.223552 l -214.7328 157.830166 l -214.804224 206.542073 l -214.839936 174.584671 l -214.875648 168.536984 l -214.982784 205.911659 l -215.054208 145.390158 l -215.08992 167.565897 l -215.125632 168.764868 l -215.161344 179.791583 l -215.197056 125.670123 l -215.232768 155.466861 l -215.26848 208.395483 l -215.375616 206.781587 l -215.411328 141.910665 l -215.482752 197.192584 l -215.554176 172.224849 l -215.589888 205.895358 l -215.589888 205.895358 l -215.589888 205.895358 l -215.661312 151.947954 l -215.697024 175.33521 l -215.732736 174.378806 l -215.768448 213.09971 l -215.768448 213.09971 l -215.768448 213.09971 l -215.911296 126.272434 l -215.947008 205.548632 l -216.018432 177.602691 l -216.16128 224.237619 l -216.232704 156.110948 l -216.268416 184.582598 l -216.304128 200.985279 l -216.375552 115.828582 l -216.446976 119.131198 l -216.589824 223.740107 l -216.768384 135.90981 l -216.804096 235.707613 l -216.87552 213.098611 l -216.946944 159.420469 l -217.018368 170.318653 l -217.05408 204.876784 l -217.05408 204.876784 l -217.05408 204.876784 l -217.125504 110.001001 l -217.161216 218.14942 l -217.23264 183.412923 l -217.304064 127.157777 l -217.339776 166.57127 l -217.375488 180.564548 l -217.4112 134.808017 l -217.482624 140.495614 l -217.518336 229.222086 l -217.58976 162.347022 l -217.625472 219.120088 l -217.625472 219.120088 l -217.625472 219.120088 l -217.661184 128.134847 l -217.732608 176.723151 l -217.76832 142.796646 l -217.76832 142.796646 l -217.76832 142.796646 l -217.804032 200.068015 l -217.875456 164.245041 l -217.911168 167.703653 l -217.94688 131.94482 l -217.94688 131.94482 l -217.94688 131.94482 l -218.018304 218.01976 l -218.089728 215.945584 l -218.12544 220.45093 l -218.196864 167.793858 l -218.232576 199.428986 l -218.268288 191.026905 l -218.304 210.695622 l -218.339712 209.172 l -218.48256 144.910067 l -218.553984 230.36772 l -218.589696 138.360625 l -218.696832 144.321544 l -218.732544 125.5982 l -218.732544 125.5982 l -218.732544 125.5982 l -218.911104 209.820539 l -218.946816 144.663223 l -219.01824 160.389185 l -219.053952 160.414143 l -219.089664 173.60243 l -219.125376 161.831995 l -219.161088 130.254204 l -219.232512 204.637211 l -219.232512 204.637211 l -219.232512 204.637211 l -219.268224 123.432312 l -219.339648 177.116456 l -219.37536 191.865826 l -219.411072 179.275118 l -219.411072 179.275118 l -219.446784 176.186692 l -219.482496 222.174727 l -219.482496 222.174727 l -219.482496 222.174727 l -219.518208 136.864627 l -219.589632 178.345803 l -219.625344 195.972277 l -219.661056 186.097058 l -219.696768 142.753687 l -219.768192 144.380986 l -219.91104 209.438613 l -219.946752 172.885002 l -220.053888 168.553896 l -220.0896 182.526638 l -220.0896 182.526638 l -220.0896 182.526638 l -220.125312 164.654195 l -220.125312 164.654195 l -220.125312 164.654195 l -220.232448 203.544029 l -220.26816 165.549461 l -220.26816 165.549461 l -220.26816 165.549461 l -220.303872 221.746034 l -220.303872 221.746034 l -220.303872 221.746034 l -220.339584 124.68026 l -220.411008 130.199363 l -220.44672 191.937317 l -220.44672 191.937317 l -220.44672 191.937317 l -220.482432 128.953134 l -220.553856 168.842832 l -220.660992 211.63871 l -220.696704 190.273404 l -220.768128 107.470495 l -220.80384 168.54766 l -220.839552 198.677187 l -220.839552 198.677187 l -220.839552 198.677187 l -220.875264 149.319035 l -220.875264 149.319035 l -220.875264 149.319035 l -220.910976 208.018181 l -220.9824 201.237737 l -221.089536 150.425342 l -221.125248 158.238867 l -221.16096 187.649846 l -221.16096 187.649846 l -221.16096 187.649846 l -221.196672 141.407928 l -221.196672 141.407928 l -221.196672 141.407928 l -221.232384 204.030334 l -221.303808 164.177804 l -221.33952 173.2763 l -221.375232 217.703043 l -221.410944 212.008712 l -221.410944 212.008712 l -221.482368 132.590353 l -221.51808 154.190432 l -221.553792 183.138514 l -221.625216 164.832185 l -221.660928 146.537649 l -221.69664 216.958104 l -221.768064 157.538134 l -221.839488 223.337817 l -221.8752 171.618488 l -221.910912 157.05795 l -221.910912 157.05795 l -221.910912 157.05795 l -222.05376 190.417112 l -222.089472 181.898774 l -222.125184 203.046324 l -222.125184 203.046324 l -222.125184 203.046324 l -222.196608 163.225962 l -222.23232 182.578979 l -222.268032 192.88866 l -222.268032 192.88866 l -222.268032 192.88866 l -222.303744 182.259172 l -222.303744 182.259172 l -222.303744 182.259172 l -222.339456 201.335318 l -222.339456 201.335318 l -222.339456 201.335318 l -222.41088 150.439524 l -222.446592 150.694604 l -222.482304 202.379537 l -222.553728 153.300259 l -222.625152 140.420258 l -222.732288 207.869935 l -222.768 124.271763 l -222.839424 194.23974 l -222.910848 141.031569 l -222.94656 160.799396 l -222.982272 209.891975 l -222.982272 209.891975 l -222.982272 209.891975 l -223.017984 141.310538 l -223.053696 162.476584 l -223.053696 162.476584 l -223.089408 211.223138 l -223.089408 211.223138 l -223.089408 211.223138 l -223.232256 147.059062 l -223.410816 192.130483 l -223.517952 167.689052 l -223.553664 191.520147 l -223.589376 168.879375 l -223.625088 158.003993 l -223.696512 204.729248 l -223.732224 122.4035 l -223.803648 136.983163 l -223.910784 222.184759 l -224.01792 118.924836 l -224.053632 226.12674 l -224.125056 161.672866 l -224.160768 133.186234 l -224.160768 133.186234 l -224.160768 133.186234 l -224.303616 187.031085 l -224.446464 112.091354 l -224.5536 181.133895 l -224.589312 121.17884 l -224.625024 150.118713 l -224.73216 201.058873 l -224.803584 152.33032 l -224.875008 166.030646 l -225.017856 202.670907 l -225.053568 182.923014 l -225.08928 176.059569 l -225.160704 131.227566 l -225.196416 166.485209 l -225.232128 201.324873 l -225.232128 201.324873 l -225.232128 201.324873 l -225.26784 142.054422 l -225.374976 143.724462 l -225.4464 140.818097 l -225.553536 212.762751 l -225.62496 156.525912 l -225.696384 164.573855 l -225.767808 178.619136 l -225.80352 226.597304 l -225.80352 226.597304 l -225.80352 226.597304 l -225.910656 145.543594 l -225.946368 204.52188 l -226.017792 147.089087 l -226.053504 125.523599 l -226.124928 217.664795 l -226.16064 197.161579 l -226.196352 129.25695 l -226.267776 184.706852 l -226.303488 191.093631 l -226.3392 122.574501 l -226.410624 176.883008 l -226.446336 213.847287 l -226.482048 182.865494 l -226.51776 112.088095 l -226.589184 153.838239 l -226.624896 153.806913 l -226.732032 185.358945 l -226.767744 141.85206 l -226.839168 183.031616 l -226.87488 220.743704 l -226.946304 206.195004 l -227.017728 162.370149 l -227.05344 171.602825 l -227.089152 214.359178 l -227.124864 182.977016 l -227.124864 182.977016 l -227.196288 107.2535 l -227.232 180.515646 l -227.267712 222.069613 l -227.267712 222.069613 l -227.267712 222.069613 l -227.41056 167.123516 l -227.446272 168.854216 l -227.481984 167.820855 l -227.517696 119.243578 l -227.553408 159.727782 l -227.58912 177.808715 l -227.624832 171.4261 l -227.696256 114.857833 l -227.76768 187.723168 l -227.839104 179.619321 l -227.874816 126.920089 l -227.94624 166.063295 l -227.981952 198.564862 l -228.017664 197.930522 l -228.160512 134.779718 l -228.231936 179.273423 l -228.30336 164.522914 l -228.339072 124.518358 l -228.374784 223.547842 l -228.446208 169.854793 l -228.48192 198.12257 l -228.517632 170.943127 l -228.624768 122.163793 l -228.66048 213.685593 l -228.731904 124.3064 l -228.767616 190.386338 l -228.83904 170.937063 l -228.874752 179.93808 l -228.946176 172.924627 l -229.089024 142.365259 l -229.124736 137.459186 l -229.19616 184.914966 l -229.231872 179.356721 l -229.267584 154.736289 l -229.303296 209.855382 l -229.303296 209.855382 l -229.303296 209.855382 l -229.339008 150.322176 l -229.410432 186.094166 l -229.446144 191.446414 l -229.446144 191.446414 l -229.446144 191.446414 l -229.517568 172.541345 l -229.55328 132.098349 l -229.55328 132.098349 l -229.55328 132.098349 l -229.588992 207.876554 l -229.588992 207.876554 l -229.588992 207.876554 l -229.624704 104.255256 l -229.696128 157.468993 l -229.838976 223.804723 l -229.946112 148.36579 l -229.981824 164.186854 l -230.017536 156.283984 l -230.017536 156.283984 l -230.017536 156.283984 l -230.08896 183.291358 l -230.160384 170.295325 l -230.196096 167.161466 l -230.231808 174.029374 l -230.26752 233.700088 l -230.303232 205.743997 l -230.338944 130.562453 l -230.410368 162.923655 l -230.44608 151.389544 l -230.44608 151.389544 l -230.44608 151.389544 l -230.62464 190.475604 l -230.696064 159.97279 l -230.731776 192.690892 l -230.731776 192.690892 l -230.731776 192.690892 l -230.838912 127.10078 l -230.98176 167.293198 l -231.053184 159.574848 l -231.16032 200.951535 l -231.196032 194.321065 l -231.267456 153.667848 l -231.303168 183.9352 l -231.33888 219.005758 l -231.33888 219.005758 l -231.33888 219.005758 l -231.481728 165.984133 l -231.51744 193.494463 l -231.553152 183.220742 l -231.588864 121.161313 l -231.588864 121.161313 l -231.588864 121.161313 l -231.696 207.717149 l -231.767424 121.633229 l -231.803136 169.544788 l -231.87456 110.416171 l -231.910272 120.888812 l -231.945984 219.650165 l -232.017408 187.163319 l -232.05312 149.057089 l -232.088832 170.696517 l -232.124544 208.218905 l -232.160256 186.161394 l -232.195968 161.755495 l -232.195968 161.755495 l -232.195968 161.755495 l -232.267392 212.764591 l -232.374528 129.805159 l -232.41024 131.258685 l -232.445952 123.014243 l -232.481664 123.701255 l -232.624512 181.150018 l -232.731648 144.442263 l -232.803072 184.761218 l -232.838784 155.828905 l -232.874496 154.485653 l -232.910208 131.363976 l -232.981632 149.665487 l -233.017344 181.495586 l -233.017344 181.495586 l -233.017344 181.495586 l -233.088768 106.486268 l -233.12448 135.146216 l -233.160192 204.838796 l -233.231616 177.282764 l -233.267328 174.351692 l -233.30304 146.221632 l -233.338752 170.242673 l -233.410176 226.361493 l -233.553024 118.52802 l -233.588736 126.137396 l -233.624448 211.902224 l -233.695872 193.267071 l -233.767296 109.146655 l -233.803008 163.870473 l -233.83872 183.883427 l -233.83872 183.883427 l -233.83872 183.883427 l -233.910144 119.805633 l -233.945856 173.052005 l -234.052992 225.105202 l -234.124416 106.075597 l -234.19584 181.151488 l -234.231552 206.682757 l -234.302976 183.789943 l -234.3744 101.107022 l -234.481536 223.653144 l -234.624384 159.244407 l -234.660096 156.881245 l -234.802944 203.34863 l -234.981504 136.445396 l -235.017216 201.416352 l -235.08864 169.77492 l -235.124352 169.270518 l -235.160064 143.441969 l -235.195776 165.563291 l -235.231488 172.998407 l -235.2672 142.57423 l -235.302912 166.064615 l -235.410048 203.963862 l -235.44576 180.546273 l -235.517184 150.786268 l -235.552896 167.043564 l -235.588608 192.521822 l -235.660032 173.589411 l -235.695744 173.380958 l -235.767168 114.317737 l -235.80288 162.62446 l -235.874304 214.541127 l -235.910016 165.104084 l -235.945728 181.668923 l -235.98144 176.273436 l -236.017152 161.394264 l -236.017152 161.394264 l -236.017152 161.394264 l -236.124288 196.945525 l -236.16 194.291518 l -236.267136 101.26638 l -236.302848 177.310017 l -236.374272 154.787845 l -236.409984 164.849759 l -236.445696 140.229594 l -236.588544 224.171682 l -236.767104 152.002522 l -236.802816 200.003999 l -236.802816 200.003999 l -236.802816 200.003999 l -236.838528 148.859646 l -236.838528 148.859646 l -236.838528 148.859646 l -236.945664 213.779797 l -236.981376 140.967882 l -237.0528 205.46 l -237.124224 162.168863 l -237.195648 184.393779 l -237.302784 158.407195 l -237.338496 192.827802 l -237.40992 176.91346 l -237.445632 178.784222 l -237.481344 178.600477 l -237.517056 221.893988 l -237.517056 221.893988 l -237.517056 221.893988 l -237.624192 137.848226 l -237.76704 187.812966 l -237.802752 112.353712 l -237.838464 173.142547 l -237.838464 173.142547 l -237.874176 195.48093 l -237.874176 195.48093 l -237.874176 195.48093 l -237.909888 155.263997 l -237.909888 155.263997 l -237.909888 155.263997 l -237.9456 203.211637 l -238.017024 168.945062 l -238.052736 144.89179 l -238.195584 206.649617 l -238.231296 195.056164 l -238.267008 135.454195 l -238.267008 135.454195 l -238.267008 135.454195 l -238.30272 214.886709 l -238.374144 204.161746 l -238.48128 129.347674 l -238.516992 195.509303 l -238.588416 146.703861 l -238.624128 151.806862 l -238.731264 221.630587 l -238.766976 211.100111 l -238.909824 149.180694 l -238.945536 156.259912 l -238.945536 156.259912 l -238.945536 156.259912 l -238.981248 145.996603 l -239.01696 197.705085 l -239.01696 197.705085 l -239.01696 197.705085 l -239.052672 113.311848 l -239.088384 168.893659 l -239.124096 218.927199 l -239.159808 104.596202 l -239.231232 182.381394 l -239.338368 139.79007 l -239.481216 238.89771 l -239.624064 131.960201 l -239.659776 158.506655 l -239.695488 156.156319 l -239.7312 161.881754 l -239.766912 135.347884 l -239.766912 135.347884 l -239.766912 135.347884 l -239.838336 220.437587 l -239.874048 122.899693 l -239.945472 181.564836 l -240.08832 114.249882 l -240.195456 219.097874 l -240.231168 131.504664 l -240.302592 174.854715 l -240.338304 147.139344 l -240.409728 163.601786 l -240.481152 220.995433 l -240.624 152.769309 l -240.731136 189.062338 l -240.766848 151.747056 l -240.80256 185.584431 l -240.838272 203.109872 l -240.909696 137.674914 l -240.945408 169.364091 l -240.98112 233.035852 l -240.98112 233.035852 l -240.98112 233.035852 l -241.016832 136.526988 l -241.088256 150.006077 l -241.123968 187.204345 l -241.123968 187.204345 l -241.123968 187.204345 l -241.195392 132.224124 l -241.231104 142.860736 l -241.302528 227.062729 l -241.409664 213.131839 l -241.445376 131.222481 l -241.481088 170.575549 l -241.5168 243.985885 l -241.5168 243.985885 l -241.5168 243.985885 l -241.552512 153.272568 l -241.623936 171.791892 l -241.659648 194.387931 l -241.659648 194.387931 l -241.659648 194.387931 l -241.69536 166.093104 l -241.731072 181.009456 l -241.766784 201.154867 l -241.838208 184.408374 l -241.87392 169.89042 l -241.87392 169.89042 l -241.87392 169.89042 l -241.909632 190.421482 l -241.909632 190.421482 l -241.909632 190.421482 l -241.945344 165.951642 l -241.981056 188.886945 l -242.016768 193.599928 l -242.159616 118.022974 l -242.302464 199.889983 l -242.338176 131.459407 l -242.373888 146.048375 l -242.4096 210.018974 l -242.445312 154.566035 l -242.481024 99.379781 l -242.516736 223.463026 l -242.58816 150.47145 l -242.659584 204.910204 l -242.695296 201.504084 l -242.802432 162.379224 l -242.94528 220.515293 l -243.088128 132.500971 l -243.12384 198.687632 l -243.159552 150.990197 l -243.159552 150.990197 l -243.195264 129.600066 l -243.266688 143.23135 l -243.3024 152.399189 l -243.338112 199.370526 l -243.373824 199.248473 l -243.409536 134.004307 l -243.48096 180.036281 l -243.516672 182.008641 l -243.552384 151.677952 l -243.552384 151.677952 l -243.552384 151.677952 l -243.588096 186.880073 l -243.65952 159.050084 l -243.730944 149.927608 l -243.766656 164.211172 l -243.766656 164.211172 l -243.766656 164.211172 l -243.802368 138.849878 l -243.802368 138.849878 l -243.802368 138.849878 l -243.873792 240.38587 l -243.945216 197.907279 l -244.01664 165.660451 l -244.052352 182.209029 l -244.088064 212.364217 l -244.088064 212.364217 l -244.088064 212.364217 l -244.123776 171.989578 l -244.1952 177.256134 l -244.230912 181.430697 l -244.266624 204.355409 l -244.302336 147.625495 l -244.37376 163.429176 l -244.445184 173.684833 l -244.480896 232.006837 l -244.480896 232.006837 l -244.480896 232.006837 l -244.588032 133.61564 l -244.695168 172.98683 l -244.73088 143.306965 l -244.73088 143.306965 l -244.73088 143.306965 l -244.873728 207.638832 l -244.90944 158.014416 l -244.980864 166.965102 l -245.016576 219.758636 l -245.088 189.878544 l -245.123712 188.934055 l -245.159424 139.210235 l -245.159424 139.210235 l -245.159424 139.210235 l -245.195136 204.719607 l -245.26656 176.10916 l -245.302272 149.199205 l -245.337984 174.153375 l -245.337984 174.153375 l -245.409408 182.145504 l -245.480832 135.154007 l -245.516544 177.083086 l -245.552256 174.048179 l -245.587968 222.077176 l -245.659392 185.081639 l -245.766528 153.657606 l -245.80224 159.806544 l -245.837952 202.970285 l -245.837952 202.970285 l -245.837952 202.970285 l -245.9808 140.810028 l -246.052224 197.29575 l -246.087936 109.328759 l -246.087936 109.328759 l -246.087936 109.328759 l -246.123648 206.546537 l -246.230784 198.333377 l -246.266496 157.008115 l -246.33792 163.798073 l -246.373632 196.708683 l -246.373632 196.708683 l -246.373632 196.708683 l -246.51648 143.558928 l -246.552192 206.318801 l -246.623616 166.678945 l -246.659328 150.991466 l -246.659328 150.991466 l -246.659328 150.991466 l -246.766464 223.696862 l -246.909312 150.785409 l -246.945024 139.801747 l -246.980736 219.47773 l -247.05216 176.473934 l -247.087872 158.262023 l -247.087872 158.262023 l -247.087872 158.262023 l -247.123584 186.552458 l -247.123584 186.552458 l -247.123584 186.552458 l -247.159296 146.393163 l -247.195008 172.262034 l -247.23072 194.661093 l -247.266432 117.624426 l -247.337856 192.422845 l -247.40928 141.740066 l -247.480704 212.525723 l -247.516416 183.238631 l -247.552128 145.08286 l -247.623552 152.13888 l -247.659264 207.511034 l -247.730688 197.770627 l -247.7664 131.815893 l -247.837824 189.003458 l -247.873536 199.103292 l -247.873536 199.103292 l -247.873536 199.103292 l -247.94496 138.092976 l -247.980672 205.035209 l -248.052096 192.83962 l -248.087808 158.226673 l -248.12352 173.619235 l -248.12352 173.619235 l -248.159232 194.283376 l -248.194944 175.569428 l -248.230656 152.93435 l -248.230656 152.93435 l -248.230656 152.93435 l -248.266368 182.967299 l -248.30208 162.067803 l -248.30208 162.067803 l -248.337792 151.082326 l -248.373504 181.107749 l -248.409216 163.713696 l -248.409216 163.713696 l -248.48064 147.364483 l -248.516352 154.133804 l -248.694912 211.984743 l -248.730624 168.988057 l -248.83776 170.622091 l -248.873472 201.508616 l -248.873472 201.508616 l -248.873472 201.508616 l -248.909184 148.013271 l -248.980608 171.50658 l -249.01632 172.779181 l -249.052032 155.524684 l -249.087744 157.61077 l -249.123456 230.935065 l -249.19488 179.76959 l -249.230592 177.894996 l -249.266304 211.044946 l -249.266304 211.044946 l -249.266304 211.044946 l -249.337728 138.129296 l -249.409152 154.969173 l -249.516288 220.862329 l -249.587712 127.653433 l -249.623424 193.541937 l -249.694848 134.073558 l -249.73056 197.083176 l -249.801984 156.148973 l -249.837696 178.347692 l -249.90912 168.080106 l -249.980544 182.514985 l -250.016256 137.853091 l -250.08768 137.908875 l -250.123392 194.666494 l -250.194816 187.25483 l -250.230528 183.716018 l -250.26624 184.376669 l -250.301952 194.483559 l -250.337664 185.107776 l -250.373376 138.572992 l -250.373376 138.572992 l -250.373376 138.572992 l -250.409088 190.972838 l -250.4448 168.102921 l -250.480512 118.931996 l -250.551936 152.058055 l -250.62336 201.726367 l -250.659072 173.128225 l -250.766208 120.697893 l -250.80192 199.349349 l -250.80192 199.349349 l -250.80192 199.349349 l -250.837632 117.733214 l -250.909056 186.940518 l -250.944768 180.186972 l -250.98048 180.59884 l -251.016192 143.109601 l -251.051904 171.480034 l -251.087616 218.24795 l -251.087616 218.24795 l -251.087616 218.24795 l -251.123328 140.834344 l -251.194752 172.649989 l -251.266176 212.569066 l -251.301888 128.849842 l -251.301888 128.849842 l -251.301888 128.849842 l -251.444736 227.734935 l -251.480448 127.395827 l -251.551872 197.437818 l -251.587584 195.245164 l -251.623296 200.041031 l -251.659008 168.459228 l -251.69472 236.986275 l -251.730432 196.920505 l -251.730432 196.920505 l -251.801856 136.670896 l -251.87328 160.157423 l -251.908992 161.321401 l -251.944704 211.802313 l -251.944704 211.802313 l -251.944704 211.802313 l -252.087552 135.875482 l -252.123264 163.418392 l -252.123264 163.418392 l -252.123264 163.418392 l -252.158976 131.40419 l -252.158976 131.40419 l -252.158976 131.40419 l -252.194688 195.939069 l -252.266112 150.411794 l -252.301824 141.405554 l -252.337536 201.838678 l -252.40896 190.240834 l -252.444672 188.028008 l -252.444672 188.028008 l -252.444672 188.028008 l -252.480384 191.478839 l -252.516096 215.868142 l -252.516096 215.868142 l -252.516096 215.868142 l -252.623232 114.8715 l -252.658944 176.975991 l -252.694656 171.007379 l -252.730368 208.287545 l -252.76608 129.22497 l -252.837504 172.216341 l -252.873216 185.246033 l -252.94464 181.248322 l -252.980352 181.348344 l -253.016064 186.623194 l -253.1232 145.25309 l -253.194624 205.643171 l -253.230336 201.679322 l -253.337472 118.191215 l -253.408896 199.595796 l -253.48032 185.664295 l -253.516032 185.938501 l -253.551744 190.393675 l -253.587456 222.380039 l -253.65888 197.406243 l -253.694592 204.361261 l -253.730304 144.28111 l -253.766016 179.794269 l -253.801728 213.787054 l -253.873152 209.449202 l -253.908864 134.727486 l -253.980288 136.214237 l -254.016 144.425131 l -254.051712 144.117511 l -254.087424 122.302145 l -254.123136 184.281415 l -254.19456 137.131066 l -254.301696 191.331407 l -254.337408 183.232602 l -254.408832 118.830038 l -254.444544 125.880628 l -254.515968 200.95651 l -254.587392 189.253702 l -254.694528 166.305071 l -254.73024 186.239602 l -254.73024 186.239602 l -254.73024 186.239602 l -254.765952 149.669636 l -254.765952 149.669636 l -254.765952 149.669636 l -254.801664 217.948872 l -254.873088 193.545005 l -255.051648 136.862139 l -255.158784 187.701256 l -255.194496 186.426285 l -255.230208 134.47814 l -255.301632 157.158541 l -255.44448 183.200576 l -255.515904 145.069909 l -255.515904 145.069909 l -255.515904 145.069909 l -255.587328 232.090359 l -255.62304 177.032991 l -255.658752 180.498046 l -255.694464 201.81131 l -255.730176 191.749751 l -255.765888 156.869903 l -255.837312 159.555633 l -255.873024 205.888803 l -255.944448 168.93057 l -255.98016 154.026616 l -255.98016 154.026616 l -255.98016 154.026616 l -256.051584 191.644234 l -256.087296 173.303928 l -256.123008 170.619862 l -256.230144 204.242205 l -256.265856 201.567832 l -256.301568 190.245617 l -256.33728 138.644979 l -256.408704 179.582642 l -256.444416 172.199001 l -256.444416 172.199001 l -256.444416 172.199001 l -256.51584 222.05825 l -256.551552 207.055188 l -256.587264 145.478948 l -256.658688 162.326265 l -256.6944 216.141534 l -256.765824 167.862446 l -256.801536 146.102718 l -256.87296 163.237811 l -256.908672 212.118375 l -256.980096 180.425375 l -257.05152 159.39912 l -257.087232 217.762363 l -257.087232 217.762363 l -257.087232 217.762363 l -257.158656 109.822427 l -257.194368 167.75277 l -257.23008 221.981576 l -257.23008 221.981576 l -257.23008 221.981576 l -257.265792 137.905522 l -257.337216 191.90403 l -257.40864 132.731522 l -257.480064 136.468734 l -257.551488 233.444935 l -257.5872 206.072304 l -257.658624 166.69018 l -257.694336 169.140775 l -257.837184 208.296083 l -257.872896 187.787588 l -257.872896 187.787588 l -257.872896 187.787588 l -257.908608 211.449724 l -257.980032 154.964934 l -258.015744 196.883916 l -258.051456 216.630162 l -258.194304 150.740692 l -258.230016 181.753544 l -258.230016 181.753544 l -258.230016 181.753544 l -258.265728 150.521403 l -258.265728 150.521403 l -258.265728 150.521403 l -258.337152 224.559949 l -258.372864 199.494606 l -258.48 93.818044 l -258.515712 159.743808 l -258.551424 160.579483 l -258.65856 174.447766 l -258.694272 97.453679 l -258.729984 174.278732 l -258.765696 207.459895 l -258.801408 180.230674 l -258.83712 136.805806 l -258.83712 136.805806 l -258.83712 136.805806 l -258.908544 216.927654 l -258.944256 193.53217 l -259.01568 111.859769 l -259.051392 122.128896 l -259.087104 209.340838 l -259.158528 172.457565 l -259.19424 193.092192 l -259.19424 193.092192 l -259.19424 193.092192 l -259.229952 164.090967 l -259.301376 181.238036 l -259.408512 196.175191 l -259.479936 162.972944 l -259.55136 176.02805 l -259.587072 186.798424 l -259.587072 186.798424 l -259.587072 186.798424 l -259.658496 135.551155 l -259.694208 173.880356 l -259.72992 220.023943 l -259.72992 220.023943 l -259.72992 220.023943 l -259.837056 134.872821 l -259.872768 157.552764 l -259.90848 215.947793 l -259.979904 191.788918 l -260.051328 135.733518 l -260.051328 135.733518 l -260.051328 135.733518 l -260.122752 219.401114 l -260.158464 145.541591 l -260.229888 210.390024 l -260.2656 188.315401 l -260.301312 137.461551 l -260.372736 176.889244 l -260.408448 166.069942 l -260.408448 166.069942 l -260.408448 166.069942 l -260.515584 195.109801 l -260.587008 174.332808 l -260.62272 205.119668 l -260.62272 205.119668 l -260.62272 205.119668 l -260.765568 131.007605 l -260.872704 197.510068 l -260.908416 188.017026 l -261.015552 136.514634 l -261.051264 171.418917 l -261.122688 200.23449 l -261.1584 157.226482 l -261.194112 169.883972 l -261.194112 169.883972 l -261.229824 202.657912 l -261.301248 189.386144 l -261.33696 184.209146 l -261.372672 127.316912 l -261.408384 173.964892 l -261.444096 212.34823 l -261.444096 212.34823 l -261.444096 212.34823 l -261.586944 130.137684 l -261.658368 174.720462 l -261.69408 113.526535 l -261.765504 170.301479 l -261.801216 152.506985 l -261.836928 207.7894 l -261.908352 152.904981 l -261.944064 169.247437 l -261.944064 169.247437 l -261.944064 169.247437 l -261.979776 146.464995 l -261.979776 146.464995 l -261.979776 146.464995 l -262.0512 185.054716 l -262.122624 178.913671 l -262.158336 181.205878 l -262.22976 148.225364 l -262.265472 219.616157 l -262.336896 203.646001 l -262.515456 147.851256 l -262.658304 212.739761 l -262.694016 152.536117 l -262.801152 158.900391 l -262.836864 131.572635 l -262.836864 131.572635 l -262.836864 131.572635 l -262.908288 199.052458 l -262.979712 186.303073 l -263.086848 132.345423 l -263.158272 213.737769 l -263.265408 179.031661 l -263.336832 162.362282 l -263.372544 132.45153 l -263.372544 132.45153 l -263.372544 132.45153 l -263.408256 172.042378 l -263.443968 170.127557 l -263.47968 127.628585 l -263.515392 165.034583 l -263.551104 216.248732 l -263.551104 216.248732 l -263.551104 216.248732 l -263.693952 126.635233 l -263.765376 191.459312 l -263.8368 182.121474 l -263.908224 151.148544 l -263.943936 160.543156 l -264.01536 256.223896 l -264.086784 215.624258 l -264.19392 132.2753 l -264.265344 222.825685 l -264.336768 215.006811 l -264.479616 133.32126 l -264.586752 215.80245 l -264.622464 154.412156 l -264.693888 181.313481 l -264.765312 156.458197 l -264.836736 168.832878 l -264.90816 191.13537 l -264.943872 171.491683 l -264.979584 169.208328 l -264.979584 169.208328 l -264.979584 169.208328 l -265.015296 173.798474 l -265.051008 144.692105 l -265.122432 214.866311 l -265.158144 203.039986 l -265.193856 155.352225 l -265.300992 156.12275 l -265.372416 165.154603 l -265.408128 160.370843 l -265.44384 191.842857 l -265.44384 191.842857 l -265.44384 191.842857 l -265.515264 124.336984 l -265.586688 151.096978 l -265.6224 193.751394 l -265.693824 170.032689 l -265.80096 134.449558 l -265.872384 232.903947 l -265.908096 183.481457 l -265.943808 137.889227 l -265.943808 137.889227 l -265.943808 137.889227 l -265.97952 217.189607 l -265.97952 217.189607 l -265.97952 217.189607 l -266.015232 125.655727 l -266.050944 180.132512 l -266.050944 180.132512 l -266.086656 224.534991 l -266.086656 224.534991 l -266.086656 224.534991 l -266.229504 139.279098 l -266.265216 205.88758 l -266.33664 174.056127 l -266.372352 182.15685 l -266.408064 147.388088 l -266.479488 177.859615 l -266.5152 206.55938 l -266.5152 206.55938 l -266.5152 206.55938 l -266.550912 169.630818 l -266.550912 169.630818 l -266.550912 169.630818 l -266.586624 206.637536 l -266.586624 206.637536 l -266.586624 206.637536 l -266.622336 133.020693 l -266.69376 168.519161 l -266.729472 166.658101 l -266.765184 182.57583 l -266.765184 182.57583 l -266.765184 182.57583 l -266.800896 158.515902 l -266.800896 158.515902 l -266.800896 158.515902 l -266.836608 188.964555 l -266.836608 188.964555 l -266.836608 188.964555 l -266.979456 133.156971 l -267.015168 175.681519 l -267.015168 175.681519 l -267.015168 175.681519 l -267.05088 130.555554 l -267.122304 165.95092 l -267.22944 193.085059 l -267.408 125.626156 l -267.443712 195.937517 l -267.515136 145.358722 l -267.550848 146.687862 l -267.58656 188.226255 l -267.622272 184.819058 l -267.657984 128.639994 l -267.693696 164.94981 l -267.729408 200.69328 l -267.76512 190.466605 l -267.800832 144.402672 l -267.872256 187.229086 l -267.907968 217.445232 l -267.907968 217.445232 l -267.907968 217.445232 l -268.015104 147.711502 l -268.086528 214.318351 l -268.12224 164.68831 l -268.193664 154.487167 l -268.229376 183.724598 l -268.229376 183.724598 l -268.229376 183.724598 l -268.265088 127.573019 l -268.265088 127.573019 l -268.265088 127.573019 l -268.3008 195.637359 l -268.372224 149.932991 l -268.407936 146.454402 l -268.550784 195.823013 l -268.586496 203.013747 l -268.65792 124.571998 l -268.693632 145.4385 l -268.765056 223.647392 l -268.800768 146.279419 l -268.872192 193.544314 l -268.943616 182.252718 l -268.979328 162.098578 l -268.979328 162.098578 l -268.979328 162.098578 l -269.01504 188.832704 l -269.086464 169.687323 l -269.157888 198.237053 l -269.1936 169.884108 l -269.229312 142.296766 l -269.229312 142.296766 l -269.229312 142.296766 l -269.265024 197.501184 l -269.336448 196.651144 l -269.37216 168.812898 l -269.443584 188.879533 l -269.55072 138.08432 l -269.586432 211.012539 l -269.657856 146.17244 l -269.693568 136.849893 l -269.800704 233.587155 l -269.836416 176.413667 l -269.90784 196.80508 l -269.943552 207.69205 l -269.979264 150.311096 l -270.050688 201.47816 l -270.157824 136.348859 l -270.193536 156.522022 l -270.300672 214.900273 l -270.336384 194.595891 l -270.479232 128.04624 l -270.62208 236.371738 l -270.729216 142.170761 l -270.764928 161.022067 l -270.80064 185.336627 l -270.80064 185.336627 l -270.80064 185.336627 l -270.872064 136.798638 l -270.907776 158.521841 l -271.014912 204.054307 l -271.050624 194.975616 l -271.086336 147.607236 l -271.122048 150.713136 l -271.193472 206.054356 l -271.264896 201.012102 l -271.372032 138.643377 l -271.407744 159.236171 l -271.443456 163.332768 l -271.479168 121.555008 l -271.479168 121.555008 l -271.479168 121.555008 l -271.550592 194.167695 l -271.622016 177.67153 l -271.69344 143.666038 l -271.764864 161.466398 l -271.800576 205.486529 l -271.800576 205.486529 l -271.800576 205.486529 l -271.943424 128.609215 l -272.014848 217.278475 l -272.086272 170.372693 l -272.121984 170.792142 l -272.193408 185.444109 l -272.22912 160.428138 l -272.22912 160.428138 l -272.22912 160.428138 l -272.264832 207.488543 l -272.264832 207.488543 l -272.264832 207.488543 l -272.300544 148.883252 l -272.300544 148.883252 l -272.300544 148.883252 l -272.336256 222.825154 l -272.40768 157.477308 l -272.443392 155.345956 l -272.550528 254.378308 l -272.621952 107.737368 l -272.657664 176.625853 l -272.729088 204.642063 l -272.800512 143.723233 l -272.836224 237.988716 l -272.907648 150.97838 l -272.94336 218.930985 l -273.014784 170.583964 l -273.050496 176.36393 l -273.086208 132.18446 l -273.157632 150.489785 l -273.193344 138.500423 l -273.229056 176.705381 l -273.229056 176.705381 l -273.229056 176.705381 l -273.264768 124.376606 l -273.30048 172.332314 l -273.336192 195.112993 l -273.371904 139.657637 l -273.407616 164.558041 l -273.443328 229.742022 l -273.443328 229.742022 l -273.443328 229.742022 l -273.514752 102.604418 l -273.550464 190.774877 l -273.621888 116.049158 l -273.693312 148.594789 l -273.764736 216.708979 l -273.800448 181.973436 l -273.83616 135.022799 l -273.83616 135.022799 l -273.83616 135.022799 l -273.871872 211.62875 l -273.943296 192.620237 l -274.01472 161.526443 l -274.050432 209.082246 l -274.050432 209.082246 l -274.050432 209.082246 l -274.121856 150.758897 l -274.157568 163.850126 l -274.228992 188.366879 l -274.300416 177.18809 l -274.336128 124.835046 l -274.336128 124.835046 l -274.336128 124.835046 l -274.478976 211.022453 l -274.514688 220.089948 l -274.586112 127.006848 l -274.621824 162.073295 l -274.657536 162.212294 l -274.693248 159.364438 l -274.72896 124.983061 l -274.836096 221.877695 l -274.943232 156.978535 l -275.050368 218.664984 l -275.121792 146.051468 l -275.157504 190.652548 l -275.193216 193.239928 l -275.26464 168.397767 l -275.300352 142.685361 l -275.300352 142.685361 l -275.300352 142.685361 l -275.407488 205.464708 l -275.478912 119.127534 l -275.514624 203.735944 l -275.550336 172.520024 l -275.550336 172.520024 l -275.550336 172.520024 l -275.657472 211.52596 l -275.80032 102.057676 l -275.836032 137.473613 l -275.871744 199.160931 l -275.943168 193.763025 l -275.97888 192.161522 l -276.014592 206.759405 l -276.014592 206.759405 l -276.014592 206.759405 l -276.121728 170.337611 l -276.15744 176.649696 l -276.193152 187.548824 l -276.300288 138.728043 l -276.443136 221.751144 l -276.478848 141.94681 l -276.585984 146.73888 l -276.657408 195.983779 l -276.69312 113.432409 l -276.764544 134.009492 l -276.800256 138.738482 l -276.87168 189.880061 l -276.943104 171.305907 l -277.014528 148.784307 l -277.05024 152.224354 l -277.085952 178.263162 l -277.121664 168.511489 l -277.157376 120.132871 l -277.157376 120.132871 l -277.157376 120.132871 l -277.193088 210.52729 l -277.264512 171.454751 l -277.300224 150.916562 l -277.300224 150.916562 l -277.300224 150.916562 l -277.40736 192.454754 l -277.443072 171.221241 l -277.478784 175.42918 l -277.514496 203.750511 l -277.58592 181.153904 l -277.621632 166.218803 l -277.657344 168.933995 l -277.693056 196.995879 l -277.693056 196.995879 l -277.693056 196.995879 l -277.728768 157.722095 l -277.800192 176.943511 l -277.871616 163.97767 l -277.907328 225.557388 l -277.978752 175.644749 l -278.014464 172.561197 l -278.050176 143.326814 l -278.085888 161.817428 l -278.1216 188.551583 l -278.157312 130.488279 l -278.157312 130.488279 l -278.157312 130.488279 l -278.264448 206.75051 l -278.30016 149.933555 l -278.371584 158.557601 l -278.407296 169.356266 l -278.443008 223.456368 l -278.514432 192.782249 l -278.550144 187.502826 l -278.585856 162.932196 l -278.621568 224.780274 l -278.65728 178.957555 l -278.692992 151.86239 l -278.692992 151.86239 l -278.692992 151.86239 l -278.764416 228.192651 l -278.800128 174.781386 l -278.871552 122.342592 l -278.907264 195.855769 l -278.978688 156.574384 l -279.085824 183.700283 l -279.157248 173.104813 l -279.264384 119.284249 l -279.335808 183.143502 l -279.37152 141.270097 l -279.442944 199.285822 l -279.585792 138.746723 l -279.657216 151.189618 l -279.692928 108.134387 l -279.692928 108.134387 l -279.692928 108.134387 l -279.72864 177.2035 l -279.800064 146.594241 l -279.835776 124.147339 l -279.871488 196.170783 l -279.978624 188.818299 l -280.050048 143.801937 l -280.08576 234.012058 l -280.157184 173.179162 l -280.228608 145.197248 l -280.26432 185.54117 l -280.300032 157.976438 l -280.300032 157.976438 l -280.335744 143.845312 l -280.371456 204.781308 l -280.371456 204.781308 l -280.371456 204.781308 l -280.407168 141.258495 l -280.478592 160.754369 l -280.550016 168.651007 l -280.585728 168.316679 l -280.62144 206.497003 l -280.657152 203.908736 l -280.692864 121.934394 l -280.764288 176.897362 l -280.8 180.121501 l -280.835712 161.119582 l -280.871424 203.103209 l -280.871424 203.103209 l -280.871424 203.103209 l -281.014272 135.072822 l -281.049984 152.885417 l -281.049984 152.885417 l -281.049984 152.885417 l -281.085696 129.641589 l -281.15712 196.468984 l -281.192832 155.193194 l -281.228544 158.241269 l -281.299968 182.946387 l -281.33568 172.718856 l -281.371392 154.804166 l -281.407104 214.656286 l -281.442816 174.15612 l -281.478528 114.648377 l -281.549952 165.734398 l -281.585664 193.124876 l -281.621376 189.607183 l -281.657088 158.108659 l -281.657088 158.108659 l -281.657088 158.108659 l -281.728512 214.118192 l -281.764224 167.645975 l -281.799936 177.400495 l -281.835648 174.677632 l -281.87136 164.407341 l -281.942784 168.338066 l -281.978496 205.605246 l -282.04992 187.697159 l -282.157056 145.930659 l -282.264192 226.074413 l -282.335616 223.718088 l -282.371328 242.02358 l -282.514176 151.910488 l -282.5856 195.949269 l -282.621312 131.511828 l -282.692736 182.407768 l -282.728448 195.986908 l -282.728448 195.986908 l -282.728448 195.986908 l -282.835584 138.201066 l -282.871296 145.582172 l -282.907008 194.132877 l -282.94272 188.394093 l -283.049856 134.80295 l -283.085568 138.874211 l -283.228416 220.832868 l -283.406976 144.32678 l -283.514112 208.69311 l -283.585536 163.837031 l -283.621248 187.296134 l -283.65696 184.212163 l -283.692672 162.683553 l -283.728384 213.063614 l -283.728384 213.063614 l -283.728384 213.063614 l -283.764096 149.323412 l -283.83552 199.03997 l -283.871232 182.727963 l -283.871232 182.727963 l -283.871232 182.727963 l -283.942656 215.863424 l -284.01408 146.672966 l -284.049792 188.592358 l -284.085504 212.288528 l -284.085504 212.288528 l -284.085504 212.288528 l -284.121216 172.301724 l -284.121216 172.301724 l -284.121216 172.301724 l -284.156928 214.212637 l -284.228352 199.720025 l -284.335488 146.640466 l -284.3712 181.16739 l -284.406912 192.873505 l -284.54976 119.738007 l -284.585472 200.752854 l -284.656896 175.96596 l -284.72832 152.794012 l -284.764032 169.737536 l -284.799744 232.068373 l -284.799744 232.068373 l -284.799744 232.068373 l -284.871168 127.399211 l -284.942592 137.761227 l -285.121152 187.740918 l -285.156864 174.326695 l -285.192576 223.97462 l -285.264 202.703856 l -285.335424 173.070942 l -285.406848 176.204213 l -285.44256 181.365603 l -285.513984 135.904899 l -285.549696 165.820014 l -285.585408 187.156236 l -285.585408 187.156236 l -285.585408 187.156236 l -285.728256 152.337477 l -285.79968 209.066693 l -285.835392 190.289763 l -285.871104 114.251881 l -285.942528 164.414369 l -285.97824 127.072961 l -285.97824 127.072961 l -285.97824 127.072961 l -286.013952 180.320063 l -286.085376 180.204186 l -286.1568 156.994064 l -286.192512 178.614014 l -286.228224 180.470962 l -286.299648 120.207945 l -286.299648 120.207945 l -286.299648 120.207945 l -286.406784 225.160382 l -286.51392 155.619676 l -286.549632 185.178918 l -286.549632 185.178918 l -286.549632 185.178918 l -286.585344 137.570375 l -286.585344 137.570375 l -286.585344 137.570375 l -286.656768 194.698683 l -286.69248 188.677205 l -286.87104 149.200357 l -286.906752 161.977697 l -286.942464 194.155388 l -287.013888 192.348855 l -287.0496 188.479392 l -287.085312 206.775743 l -287.085312 206.775743 l -287.085312 206.775743 l -287.192448 134.681836 l -287.22816 171.724972 l -287.263872 166.924122 l -287.299584 180.726732 l -287.335296 128.77001 l -287.40672 167.804662 l -287.442432 153.709328 l -287.513856 216.596427 l -287.549568 177.644021 l -287.728128 125.506459 l -287.76384 188.705232 l -287.799552 160.357598 l -287.799552 160.357598 l -287.870976 120.602345 l -287.906688 135.854893 l -288.013824 182.185591 l -288.049536 146.858417 l -288.12096 157.307102 l -288.192384 215.320408 l -288.228096 184.145496 l -288.263808 133.961144 l -288.263808 133.961144 l -288.263808 133.961144 l -288.406656 201.406295 l -288.442368 196.637745 l -288.513792 136.750619 l -288.549504 194.055291 l -288.585216 203.55447 l -288.65664 124.03314 l -288.728064 129.201298 l -288.870912 188.479508 l -288.942336 148.499025 l -288.978048 198.393249 l -289.049472 172.052362 l -289.085184 141.27535 l -289.120896 165.644833 l -289.156608 195.833687 l -289.156608 195.833687 l -289.156608 195.833687 l -289.263744 146.654915 l -289.406592 205.6582 l -289.585152 119.27748 l -289.692288 213.277196 l -289.763712 182.707832 l -289.799424 146.017062 l -289.799424 146.017062 l -289.799424 146.017062 l -289.870848 200.206823 l -289.90656 187.414967 l -290.049408 91.789045 l -290.120832 224.128334 l -290.156544 156.707169 l -290.192256 153.608451 l -290.192256 153.608451 l -290.192256 153.608451 l -290.227968 157.604563 l -290.26368 123.430536 l -290.299392 142.953001 l -290.335104 175.589644 l -290.370816 157.155083 l -290.406528 119.859536 l -290.44224 200.40442 l -290.513664 173.076239 l -290.585088 210.631468 l -290.585088 210.631468 l -290.585088 210.631468 l -290.692224 99.812826 l -290.835072 214.582685 l -290.870784 210.858829 l -290.906496 132.857014 l -290.942208 168.549242 l -290.942208 168.549242 l -290.97792 215.127355 l -290.97792 215.127355 l -290.97792 215.127355 l -291.049344 137.030151 l -291.120768 166.791309 l -291.15648 175.221575 l -291.192192 217.010134 l -291.227904 179.083175 l -291.33504 114.753869 l -291.477888 187.991129 l -291.549312 212.639777 l -291.620736 148.693538 l -291.69216 163.327382 l -291.763584 249.822968 l -291.906432 54.523734 l -292.013568 212.442102 l -292.04928 139.418768 l -292.04928 139.418768 l -292.04928 139.418768 l -292.084992 239.209368 l -292.156416 174.74891 l -292.22784 158.521041 l -292.263552 178.049033 l -292.334976 162.463129 l -292.370688 159.757174 l -292.442112 184.445106 l -292.58496 117.196226 l -292.834944 219.688153 l -292.870656 150.156193 l -292.94208 167.89371 l -292.977792 218.855319 l -292.977792 218.855319 l -292.977792 218.855319 l -293.12064 108.913214 l -293.227776 192.108357 l -293.263488 139.260763 l -293.263488 139.260763 l -293.263488 139.260763 l -293.2992 212.006922 l -293.370624 168.994314 l -293.442048 196.979827 l -293.513472 119.79666 l -293.549184 184.277652 l -293.65632 151.752089 l -293.692032 175.397582 l -293.763456 215.290363 l -293.763456 215.290363 l -293.763456 215.290363 l -293.83488 123.696254 l -293.906304 157.553973 l -293.942016 201.285177 l -294.01344 169.038482 l -294.049152 166.546818 l -294.120576 124.364757 l -294.156288 202.957078 l -294.227712 134.240499 l -294.37056 179.060951 l -294.406272 152.326421 l -294.406272 152.326421 l -294.406272 152.326421 l -294.441984 188.15613 l -294.477696 163.616656 l -294.477696 163.616656 l -294.513408 148.561163 l -294.513408 148.561163 l -294.513408 148.561163 l -294.584832 243.376161 l -294.620544 167.564011 l -294.656256 164.404474 l -294.691968 175.108999 l -294.72768 115.26244 l -294.72768 115.26244 l -294.72768 115.26244 l -294.763392 197.072907 l -294.834816 177.062293 l -294.870528 136.356713 l -294.870528 136.356713 l -294.870528 136.356713 l -294.90624 216.003879 l -294.977664 170.301679 l -295.013376 173.348516 l -295.120512 213.419995 l -295.227648 157.333622 l -295.26336 186.325688 l -295.299072 164.391134 l -295.334784 126.996596 l -295.334784 126.996596 l -295.334784 126.996596 l -295.370496 191.066846 l -295.44192 134.582885 l -295.549056 174.969908 l -295.584768 130.820009 l -295.584768 130.820009 l -295.584768 130.820009 l -295.62048 191.351726 l -295.727616 191.294678 l -295.870464 86.549572 l -295.9776 220.532712 l -296.013312 167.916302 l -296.049024 181.714074 l -296.049024 181.714074 l -296.049024 181.714074 l -296.120448 138.699915 l -296.191872 219.968716 l -296.227584 181.795174 l -296.263296 145.912072 l -296.263296 145.912072 l -296.263296 145.912072 l -296.370432 208.844807 l -296.406144 162.569914 l -296.51328 164.605942 l -296.548992 173.036271 l -296.584704 141.751539 l -296.620416 166.1792 l -296.727552 196.697453 l -296.763264 189.231145 l -296.798976 191.942099 l -296.834688 190.766829 l -296.8704 184.756511 l -296.941824 229.039381 l -297.04896 128.356142 l -297.191808 199.781353 l -297.298944 106.783537 l -297.441792 193.747751 l -297.513216 135.071325 l -297.656064 217.11605 l -297.691776 176.079819 l -297.727488 181.928951 l -297.7632 248.590014 l -297.834624 192.736479 l -297.870336 130.833441 l -297.94176 161.650343 l -297.977472 219.270586 l -298.013184 161.708232 l -298.048896 124.53499 l -298.048896 124.53499 l -298.048896 124.53499 l -298.156032 179.250853 l -298.191744 179.009726 l -298.227456 197.951277 l -298.227456 197.951277 l -298.227456 197.951277 l -298.29888 146.796735 l -298.334592 205.945896 l -298.406016 181.894269 l -298.441728 171.605053 l -298.584576 207.095108 l -298.620288 195.417457 l -298.620288 195.417457 l -298.620288 195.417457 l -298.656 208.960932 l -298.691712 134.96722 l -298.763136 162.166267 l -298.798848 152.896396 l -298.83456 155.927553 l -298.870272 170.532084 l -298.941696 167.442099 l -299.01312 116.410798 l -299.048832 197.776199 l -299.120256 162.286078 l -299.155968 152.801244 l -299.155968 152.801244 l -299.155968 152.801244 l -299.263104 185.888995 l -299.298816 150.679129 l -299.334528 165.290763 l -299.37024 216.222685 l -299.441664 184.972683 l -299.477376 152.741608 l -299.5488 160.034938 l -299.584512 165.444859 l -299.620224 222.816885 l -299.691648 200.034655 l -299.798784 149.760654 l -299.90592 179.853435 l -299.941632 129.773334 l -299.941632 129.773334 l -299.941632 129.773334 l -299.977344 184.195286 l -300.08448 180.775014 l -300.120192 183.516122 l -300.155904 212.242313 l -300.155904 212.242313 l -300.155904 212.242313 l -300.26304 147.020384 l -300.298752 156.728535 l -300.334464 171.074589 l -300.405888 170.124886 l -300.4416 144.218058 l -300.513024 145.737593 l -300.62016 183.92882 l -300.727296 133.812877 l -300.763008 142.225476 l -300.79872 179.370623 l -300.79872 179.370623 l -300.79872 179.370623 l -300.834432 133.04759 l -300.834432 133.04759 l -300.834432 133.04759 l -300.905856 202.900597 l -300.941568 146.597864 l -301.012992 178.650553 l -301.048704 141.33054 l -301.048704 141.33054 l -301.048704 141.33054 l -301.120128 188.325542 l -301.15584 178.488781 l -301.191552 168.461522 l -301.227264 196.654983 l -301.262976 182.841642 l -301.298688 142.328621 l -301.370112 152.387691 l -301.477248 195.109639 l -301.548672 171.094683 l -301.584384 171.90569 l -301.620096 181.287206 l -301.69152 133.477468 l -301.727232 174.702317 l -301.762944 176.776885 l -301.905792 137.418509 l -302.012928 169.21503 l -302.04864 124.82147 l -302.120064 150.471163 l -302.262912 119.883855 l -302.298624 130.052726 l -302.40576 215.030545 l -302.548608 141.320732 l -302.58432 186.757948 l -302.655744 176.6865 l -302.727168 161.289637 l -302.798592 161.472342 l -302.834304 179.973728 l -302.834304 179.973728 l -302.834304 179.973728 l -302.905728 130.855449 l -302.94144 194.123728 l -302.94144 194.123728 l -302.94144 194.123728 l -302.977152 123.07167 l -302.977152 123.07167 l -302.977152 123.07167 l -303.012864 199.479069 l -303.084288 197.679215 l -303.12 149.528928 l -303.191424 168.729022 l -303.227136 185.385921 l -303.262848 184.29567 l -303.29856 140.153218 l -303.369984 147.562211 l -303.405696 150.340108 l -303.548544 201.994101 l -303.584256 135.019429 l -303.65568 189.682158 l -303.83424 155.411205 l -303.905664 187.340285 l -303.941376 142.091767 l -304.0128 177.667621 l -304.048512 181.231926 l -304.084224 244.185716 l -304.084224 244.185716 l -304.084224 244.185716 l -304.19136 128.087408 l -304.227072 140.972494 l -304.298496 202.634472 l -304.334208 184.411848 l -304.36992 144.782216 l -304.441344 174.262459 l -304.477056 207.161782 l -304.512768 127.947322 l -304.512768 127.947322 l -304.512768 127.947322 l -304.54848 221.2505 l -304.619904 149.99339 l -304.655616 153.097436 l -304.691328 169.562974 l -304.72704 166.601758 l -304.72704 166.601758 l -304.762752 151.922906 l -304.762752 151.922906 l -304.762752 151.922906 l -304.798464 167.446806 l -304.798464 167.446806 l -304.798464 167.446806 l -304.834176 137.179977 l -304.834176 137.179977 l -304.834176 137.179977 l -304.869888 200.7812 l -304.869888 200.7812 l -304.869888 200.7812 l -304.9056 115.681612 l -304.977024 155.885692 l -305.012736 198.067871 l -305.08416 161.242041 l -305.119872 154.261374 l -305.155584 102.745774 l -305.191296 213.711501 l -305.26272 173.270114 l -305.298432 151.92872 l -305.334144 161.430931 l -305.369856 185.089508 l -305.369856 185.089508 l -305.369856 185.089508 l -305.405568 156.577952 l -305.405568 156.577952 l -305.405568 156.577952 l -305.512704 217.478673 l -305.584128 129.995692 l -305.655552 139.557669 l -305.726976 206.477634 l -305.726976 206.477634 l -305.726976 206.477634 l -305.762688 139.247918 l -305.834112 153.840169 l -305.941248 211.076286 l -305.97696 139.399199 l -306.012672 181.33772 l -306.012672 181.33772 l -306.048384 216.724264 l -306.048384 216.724264 l -306.048384 216.724264 l -306.119808 162.042535 l -306.15552 180.66938 l -306.191232 194.528873 l -306.226944 190.504544 l -306.298368 163.645681 l -306.33408 173.447273 l -306.369792 209.245476 l -306.441216 204.807236 l -306.548352 140.067621 l -306.584064 231.879447 l -306.655488 151.355079 l -306.6912 151.423618 l -306.762624 189.114236 l -306.834048 187.452892 l -306.905472 222.360303 l -306.941184 207.633593 l -307.084032 138.243618 l -307.155456 196.392377 l -307.191168 122.956897 l -307.191168 122.956897 l -307.191168 122.956897 l -307.22688 219.871582 l -307.298304 157.964274 l -307.334016 150.73986 l -307.369728 200.565179 l -307.40544 166.375054 l -307.40544 166.375054 l -307.476864 131.111066 l -307.548288 136.66335 l -307.619712 181.809648 l -307.655424 178.947067 l -307.691136 150.179768 l -307.691136 150.179768 l -307.691136 150.179768 l -307.726848 184.744859 l -307.726848 184.744859 l -307.726848 184.744859 l -307.76256 142.984536 l -307.76256 142.984536 l -307.76256 142.984536 l -307.833984 195.365731 l -307.869696 165.235277 l -307.94112 146.995882 l -307.976832 174.49472 l -308.012544 158.025209 l -308.048256 127.050709 l -308.048256 127.050709 l -308.048256 127.050709 l -308.11968 202.936089 l -308.191104 183.401214 l -308.226816 219.370501 l -308.262528 129.916631 l -308.333952 199.512044 l -308.369664 210.729223 l -308.405376 133.586291 l -308.4768 180.338336 l -308.512512 182.65995 l -308.548224 197.835686 l -308.548224 197.835686 l -308.548224 197.835686 l -308.65536 148.611838 l -308.691072 150.857358 l -308.726784 181.467318 l -308.798208 179.354366 l -308.905344 133.49685 l -308.941056 203.770692 l -309.01248 182.26487 l -309.119616 127.376318 l -309.155328 185.17608 l -309.226752 150.093619 l -309.262464 154.486536 l -309.298176 201.514875 l -309.3696 193.34983 l -309.512448 157.231915 l -309.54816 191.442713 l -309.619584 185.048073 l -309.655296 181.001621 l -309.691008 145.774184 l -309.72672 243.561299 l -309.798144 181.044167 l -309.833856 199.13037 l -309.869568 147.668896 l -309.869568 147.668896 l -309.869568 147.668896 l -309.90528 213.484911 l -309.976704 184.112392 l -310.012416 188.971236 l -310.08384 158.597812 l -310.08384 158.597812 l -310.08384 158.597812 l -310.119552 190.164402 l -310.119552 190.164402 l -310.119552 190.164402 l -310.190976 151.289401 l -310.226688 185.808326 l -310.2624 197.208279 l -310.298112 117.606147 l -310.369536 189.449354 l -310.405248 224.452764 l -310.44096 149.066598 l -310.512384 184.684859 l -310.548096 183.096627 l -310.655232 115.434251 l -310.79808 200.672346 l -310.869504 160.263328 l -310.905216 185.143085 l -310.940928 219.526815 l -310.97664 219.026553 l -311.119488 138.654546 l -311.226624 232.667334 l -311.369472 113.861111 l -311.440896 200.373841 l -311.476608 193.475845 l -311.583744 140.955891 l -311.619456 194.38103 l -311.655168 174.166482 l -311.69088 117.112202 l -311.69088 117.112202 l -311.69088 117.112202 l -311.798016 198.258292 l -311.940864 121.909616 l -311.976576 138.713399 l -312.012288 217.586157 l -312.083712 169.501893 l -312.119424 198.437487 l -312.190848 170.382877 l -312.22656 126.230641 l -312.22656 126.230641 l -312.22656 126.230641 l -312.262272 182.15893 l -312.333696 169.640429 l -312.369408 168.739349 l -312.40512 117.062092 l -312.40512 117.062092 l -312.40512 117.062092 l -312.440832 184.970722 l -312.547968 184.728576 l -312.58368 188.439115 l -312.690816 152.631873 l -312.76224 202.881573 l -312.797952 198.347919 l -312.833664 110.232342 l -312.905088 185.785968 l -313.047936 160.718705 l -313.155072 187.197735 l -313.226496 122.541688 l -313.262208 162.207637 l -313.405056 207.795764 l -313.47648 199.954438 l -313.512192 135.217847 l -313.583616 176.89174 l -313.619328 142.559656 l -313.619328 142.559656 l -313.619328 142.559656 l -313.762176 235.776448 l -313.8336 159.841257 l -313.869312 187.154814 l -313.905024 227.087165 l -313.905024 227.087165 l -313.905024 227.087165 l -314.01216 121.337971 l -314.047872 135.719024 l -314.155008 204.532622 l -314.19072 111.282337 l -314.262144 191.116728 l -314.333568 128.133953 l -314.36928 170.442757 l -314.404992 202.77981 l -314.404992 202.77981 l -314.404992 202.77981 l -314.440704 163.79645 l -314.440704 163.79645 l -314.440704 163.79645 l -314.476416 213.060395 l -314.476416 213.060395 l -314.476416 213.060395 l -314.512128 151.539405 l -314.512128 151.539405 l -314.512128 151.539405 l -314.54784 242.937505 l -314.619264 174.284 l -314.654976 201.672354 l -314.654976 201.672354 l -314.654976 201.672354 l -314.762112 158.715468 l -314.797824 164.751173 l -314.833536 156.140835 l -314.90496 202.727227 l -314.940672 115.483406 l -315.012096 174.080117 l -315.047808 171.833906 l -315.154944 136.330646 l -315.226368 191.285563 l -315.26208 185.199885 l -315.297792 155.968734 l -315.369216 156.053595 l -315.404928 178.653725 l -315.476352 161.111447 l -315.512064 134.446532 l -315.512064 134.446532 l -315.512064 134.446532 l -315.583488 192.804366 l -315.654912 187.713738 l -315.762048 112.548191 l -315.833472 136.296218 l -315.97632 210.935372 l -316.012032 183.617821 l -316.047744 183.68537 l -316.190592 129.239708 l -316.226304 141.683121 l -316.262016 226.347941 l -316.262016 226.347941 l -316.262016 226.347941 l -316.297728 112.89641 l -316.369152 174.344835 l -316.404864 167.639997 l -316.440576 208.895792 l -316.440576 208.895792 l -316.440576 208.895792 l -316.476288 150.601506 l -316.547712 158.808891 l -316.583424 192.403135 l -316.654848 170.971189 l -316.69056 128.456142 l -316.69056 128.456142 l -316.69056 128.456142 l -316.761984 189.074909 l -316.797696 167.186114 l -316.833408 155.142442 l -316.940544 258.477911 l -316.976256 193.138836 l -317.04768 127.505164 l -317.119104 130.696301 l -317.154816 162.496401 l -317.22624 154.444662 l -317.261952 147.741892 l -317.369088 186.66973 l -317.511936 126.917203 l -317.547648 189.698394 l -317.619072 159.65103 l -317.654784 147.086009 l -317.690496 190.362262 l -317.76192 169.058456 l -317.904768 216.717166 l -318.047616 147.22088 l -318.190464 195.161362 l -318.226176 120.548803 l -318.333312 124.79219 l -318.583296 204.855588 l -318.65472 159.07651 l -318.726144 169.746026 l -318.761856 190.749293 l -318.797568 184.609801 l -318.83328 156.057559 l -318.904704 175.046681 l -318.940416 174.892209 l -318.976128 241.858476 l -319.047552 207.415309 l -319.118976 129.059216 l -319.154688 146.49127 l -319.1904 180.678409 l -319.1904 180.678409 l -319.1904 180.678409 l -319.226112 133.019846 l -319.261824 155.855834 l -319.333248 229.502126 l -319.36896 159.191285 l -319.404672 113.965384 l -319.404672 113.965384 l -319.404672 113.965384 l -319.476096 223.368319 l -319.511808 170.359463 l -319.54752 194.141403 l -319.54752 194.141403 l -319.54752 194.141403 l -319.654656 104.442953 l -319.72608 190.715205 l -319.761792 155.013674 l -319.833216 160.02815 l -319.90464 214.001778 l -319.940352 180.390555 l -320.011776 158.891084 l -320.047488 171.72704 l -320.118912 196.255164 l -320.154624 154.599114 l -320.190336 176.941957 l -320.26176 241.818911 l -320.26176 241.818911 l -320.26176 241.818911 l -320.404608 129.705605 l -320.547456 208.11208 l -320.690304 155.122491 l -320.79744 216.724171 l -320.833152 129.694175 l -320.904576 130.840623 l -321.047424 202.757142 l -321.118848 133.844678 l -321.15456 183.331349 l -321.190272 190.114261 l -321.261696 143.384003 l -321.297408 206.945007 l -321.368832 166.851208 l -321.404544 148.343504 l -321.404544 148.343504 l -321.404544 148.343504 l -321.440256 177.849076 l -321.51168 150.900026 l -321.547392 159.783812 l -321.618816 157.340951 l -321.654528 158.36499 l -321.69024 202.249829 l -321.761664 181.43322 l -321.797376 155.20291 l -321.8688 176.995033 l -321.904512 169.430649 l -321.904512 169.430649 l -321.904512 169.430649 l -321.975936 216.25519 l -322.04736 180.535293 l -322.083072 146.4942 l -322.154496 159.609832 l -322.190208 208.89816 l -322.22592 104.264573 l -322.297344 132.664084 l -322.40448 183.728821 l -322.440192 136.315899 l -322.440192 136.315899 l -322.440192 136.315899 l -322.475904 202.503697 l -322.511616 156.900416 l -322.511616 156.900416 l -322.547328 131.270823 l -322.58304 191.094854 l -322.654464 148.179241 l -322.690176 142.883166 l -322.725888 172.633363 l -322.725888 172.633363 l -322.725888 172.633363 l -322.7616 135.307704 l -322.7616 135.307704 l -322.7616 135.307704 l -322.833024 236.138381 l -322.868736 171.116054 l -322.904448 160.559888 l -322.94016 200.243515 l -323.011584 186.61372 l -323.083008 112.005492 l -323.11872 197.848764 l -323.190144 163.690775 l -323.225856 141.767003 l -323.261568 230.224061 l -323.332992 179.701524 l -323.368704 190.229327 l -323.47584 131.98797 l -323.582976 195.200116 l -323.618688 187.387485 l -323.6544 132.95357 l -323.725824 142.769072 l -323.83296 221.650766 l -323.904384 129.231562 l -323.940096 200.009242 l -324.047232 136.149927 l -324.154368 159.314477 l -324.225792 201.933601 l -324.261504 134.596036 l -324.332928 164.651073 l -324.36864 223.323058 l -324.36864 223.323058 l -324.36864 223.323058 l -324.404352 126.818279 l -324.475776 149.514997 l -324.618624 220.265853 l -324.761472 170.938702 l -324.797184 172.854393 l -324.832896 151.283669 l -324.832896 151.283669 l -324.832896 151.283669 l -324.868608 192.907826 l -324.90432 165.502299 l -324.90432 165.502299 l -325.047168 146.390247 l -325.08288 150.62803 l -325.118592 240.343351 l -325.190016 157.339244 l -325.297152 177.547345 l -325.332864 174.63479 l -325.368576 132.282407 l -325.404288 134.086615 l -325.511424 219.2849 l -325.547136 110.76002 l -325.61856 158.184225 l -325.654272 192.449478 l -325.654272 192.449478 l -325.654272 192.449478 l -325.689984 147.372268 l -325.725696 168.353818 l -325.761408 202.547809 l -325.761408 202.547809 l -325.761408 202.547809 l -325.79712 148.415456 l -325.79712 148.415456 l -325.79712 148.415456 l -325.904256 222.195956 l -325.939968 210.113843 l -326.047104 119.753052 l -326.082816 140.708729 l -326.189952 199.015174 l -326.261376 167.692251 l -326.297088 171.402741 l -326.3328 132.757708 l -326.3328 132.757708 l -326.3328 132.757708 l -326.404224 179.678754 l -326.439936 153.493465 l -326.475648 150.307095 l -326.618496 176.972801 l -326.654208 174.584755 l -326.725632 144.452093 l -326.761344 189.293447 l -326.761344 189.293447 l -326.761344 189.293447 l -326.797056 130.153358 l -326.86848 174.425206 l -326.904192 182.196269 l -326.939904 164.985775 l -326.975616 204.332639 l -327.011328 176.886721 l -327.011328 176.886721 l -327.154176 163.275019 l -327.297024 218.518852 l -327.40416 148.74941 l -327.511296 203.390155 l -327.618432 136.673499 l -327.654144 174.136783 l -327.689856 140.123735 l -327.725568 126.650819 l -327.832704 252.503068 l -327.904128 127.832205 l -327.93984 153.804549 l -328.011264 247.32022 l -328.046976 186.083837 l -328.082688 179.914402 l -328.1184 242.318097 l -328.1184 242.318097 l -328.1184 242.318097 l -328.225536 143.14795 l -328.332672 188.821194 l -328.404096 156.785928 l -328.439808 237.677807 l -328.511232 168.002456 l -328.546944 119.867416 l -328.546944 119.867416 l -328.546944 119.867416 l -328.582656 196.603907 l -328.65408 175.089603 l -328.761216 134.29845 l -328.796928 232.894212 l -328.868352 193.097193 l -328.975488 128.865289 l -329.082624 196.326912 l -329.154048 137.956888 l -329.18976 200.237469 l -329.261184 145.511426 l -329.296896 143.746703 l -329.332608 122.452218 l -329.36832 132.361115 l -329.475456 178.625507 l -329.511168 134.885629 l -329.54688 170.817229 l -329.72544 214.43713 l -329.868288 147.879498 l -329.975424 223.936248 l -330.011136 186.581748 l -330.046848 112.016241 l -330.118272 152.548311 l -330.153984 217.517416 l -330.225408 200.183397 l -330.296832 142.056235 l -330.368256 218.031903 l -330.403968 153.281234 l -330.43968 187.494644 l -330.511104 172.99984 l -330.546816 148.647945 l -330.582528 157.522098 l -330.725376 207.778623 l -330.7968 97.666142 l -330.832512 193.14242 l -330.868224 180.103579 l -330.868224 180.103579 l -330.868224 180.103579 l -330.903936 195.823348 l -330.903936 195.823348 l -330.903936 195.823348 l -330.97536 169.14906 l -331.011072 190.15646 l -331.046784 220.266068 l -331.046784 220.266068 l -331.046784 220.266068 l -331.118208 142.959304 l -331.189632 147.244642 l -331.225344 240.078563 l -331.296768 160.502362 l -331.33248 170.885062 l -331.33248 170.885062 l -331.33248 170.885062 l -331.368192 152.569124 l -331.368192 152.569124 l -331.368192 152.569124 l -331.403904 185.143527 l -331.475328 158.02922 l -331.51104 145.691178 l -331.546752 215.684002 l -331.618176 192.388981 l -331.653888 188.079109 l -331.6896 166.763945 l -331.6896 166.763945 l -331.6896 166.763945 l -331.725312 201.257898 l -331.796736 172.998585 l -331.832448 179.158426 l -331.86816 126.100432 l -331.86816 126.100432 l -331.86816 126.100432 l -331.903872 206.521601 l -331.975296 149.762492 l -332.011008 156.413474 l -332.04672 209.781209 l -332.04672 209.781209 l -332.04672 209.781209 l -332.082432 147.943521 l -332.153856 187.11693 l -332.189568 209.399278 l -332.260992 200.110593 l -332.368128 118.873751 l -332.40384 147.517039 l -332.510976 218.009079 l -332.546688 185.00778 l -332.689536 111.46011 l -332.76096 206.337207 l -332.796672 181.892454 l -332.832384 162.071815 l -332.868096 236.403966 l -332.868096 236.403966 l -332.868096 236.403966 l -332.903808 159.619065 l -332.975232 199.918965 l -333.046656 125.499802 l -333.11808 160.636742 l -333.153792 180.689008 l -333.189504 130.834965 l -333.189504 130.834965 l -333.189504 130.834965 l -333.225216 193.705826 l -333.29664 164.078904 l -333.368064 198.273165 l -333.439488 187.442484 l -333.4752 199.4426 l -333.546624 142.931296 l -333.582336 235.613385 l -333.65376 165.074934 l -333.689472 152.612752 l -333.725184 211.330383 l -333.725184 211.330383 l -333.725184 211.330383 l -333.760896 96.944845 l -333.83232 169.375327 l -333.868032 204.34088 l -333.903744 198.736139 l -333.975168 139.799084 l -334.01088 193.251672 l -334.082304 123.184311 l -334.118016 185.492343 l -334.18944 204.37664 l -334.260864 130.451757 l -334.296576 174.732061 l -334.332288 198.002569 l -334.368 146.801477 l -334.439424 169.944062 l -334.475136 169.384322 l -334.510848 175.259383 l -334.510848 175.259383 l -334.510848 175.259383 l -334.72512 119.722061 l -334.867968 200.656711 l -334.939392 166.423193 l -334.975104 218.659467 l -335.046528 168.806218 l -335.117952 191.237921 l -335.153664 210.692462 l -335.153664 210.692462 l -335.153664 210.692462 l -335.296512 156.422292 l -335.367936 191.810438 l -335.475072 190.652027 l -335.510784 143.422557 l -335.582208 150.243916 l -335.61792 156.334999 l -335.653632 205.859616 l -335.689344 173.633993 l -335.689344 173.633993 l -335.760768 149.724992 l -335.832192 156.872692 l -335.903616 181.391945 l -335.939328 141.910803 l -335.939328 141.910803 l -335.939328 141.910803 l -335.97504 181.573524 l -335.97504 181.573524 l -335.97504 181.573524 l -336.010752 135.759236 l -336.010752 135.759236 l -336.010752 135.759236 l -336.082176 201.329784 l -336.117888 156.991946 l -336.225024 190.898401 l -336.260736 171.516438 l -336.260736 171.516438 l -336.260736 171.516438 l -336.33216 200.596925 l -336.367872 176.58358 l -336.439296 151.590892 l -336.475008 160.853182 l -336.582144 197.806714 l -336.617856 131.657655 l -336.68928 179.388322 l -336.724992 200.119627 l -336.86784 136.586633 l -336.903552 166.083937 l -336.974976 152.882252 l -337.010688 149.298696 l -337.082112 213.805869 l -337.22496 131.21183 l -337.332096 158.184735 l -337.367808 132.969855 l -337.40352 189.305649 l -337.40352 189.305649 l -337.40352 189.305649 l -337.439232 101.073204 l -337.510656 168.974072 l -337.546368 168.196192 l -337.58208 164.102208 l -337.617792 127.185268 l -337.653504 161.579769 l -337.689216 184.492929 l -337.76064 171.619134 l -337.796352 180.360559 l -337.832064 153.926994 l -337.832064 153.926994 l -337.832064 153.926994 l -337.867776 189.817908 l -337.867776 189.817908 l -337.867776 189.817908 l -337.903488 137.61103 l -337.974912 165.742987 l -338.010624 211.163082 l -338.010624 211.163082 l -338.010624 211.163082 l -338.046336 145.69879 l -338.11776 175.544457 l -338.189184 202.542525 l -338.224896 144.254043 l -338.29632 199.332666 l -338.332032 209.145724 l -338.367744 200.373394 l -338.403456 149.571411 l -338.403456 149.571411 l -338.403456 149.571411 l -338.439168 219.385431 l -338.510592 177.400432 l -338.582016 126.748889 l -338.582016 126.748889 l -338.582016 126.748889 l -338.617728 178.45477 l -338.689152 146.487043 l -338.760576 110.539504 l -338.903424 218.875099 l -339.046272 167.599267 l -339.081984 160.421771 l -339.117696 183.985508 l -339.117696 183.985508 l -339.117696 183.985508 l -339.153408 152.737485 l -339.18912 174.122285 l -339.260544 234.748741 l -339.296256 207.999824 l -339.474816 128.687179 l -339.689088 194.881105 l -339.831936 160.398651 l -339.867648 179.299372 l -339.867648 179.299372 l -339.867648 179.299372 l -339.939072 121.405756 l -340.08192 192.678002 l -340.153344 127.364441 l -340.189056 159.575568 l -340.26048 203.396649 l -340.296192 170.612636 l -340.331904 170.032428 l -340.367616 129.317972 l -340.403328 167.968178 l -340.43904 194.74911 l -340.43904 194.74911 l -340.43904 194.74911 l -340.474752 153.87986 l -340.546176 159.537672 l -340.6176 198.424691 l -340.689024 195.312304 l -340.724736 133.750323 l -340.79616 149.73029 l -340.831872 235.88999 l -340.903296 188.720271 l -340.939008 177.301182 l -340.939008 177.301182 l -340.939008 177.301182 l -340.97472 188.863665 l -341.010432 188.7514 l -341.046144 138.265807 l -341.117568 162.257033 l -341.15328 169.384863 l -341.188992 206.721373 l -341.188992 206.721373 l -341.188992 206.721373 l -341.296128 114.122714 l -341.33184 147.089509 l -341.367552 181.387479 l -341.403264 179.310764 l -341.438976 132.296003 l -341.474688 165.293953 l -341.474688 165.293953 l -341.5104 179.455566 l -341.5104 179.455566 l -341.5104 179.455566 l -341.546112 154.007349 l -341.581824 219.195172 l -341.653248 167.318612 l -341.68896 208.019036 l -341.68896 208.019036 l -341.68896 208.019036 l -341.796096 155.98348 l -341.86752 225.176409 l -341.938944 181.754567 l -341.974656 112.268763 l -342.04608 138.315155 l -342.117504 195.793404 l -342.153216 168.379558 l -342.188928 151.600373 l -342.260352 165.362584 l -342.296064 178.248427 l -342.331776 173.716785 l -342.367488 108.913444 l -342.367488 108.913444 l -342.367488 108.913444 l -342.4032 237.840019 l -342.474624 167.961231 l -342.510336 158.091096 l -342.546048 162.338151 l -342.58176 176.918795 l -342.58176 176.918795 l -342.58176 176.918795 l -342.688896 131.827325 l -342.76032 170.723098 l -342.796032 145.364419 l -342.974592 186.784605 l -343.010304 138.848903 l -343.010304 138.848903 l -343.010304 138.848903 l -343.081728 214.931812 l -343.11744 181.301308 l -343.153152 170.634775 l -343.188864 176.780568 l -343.260288 188.837255 l -343.331712 115.402389 l -343.367424 235.274207 l -343.438848 143.505596 l -343.581696 200.466341 l -343.617408 165.757335 l -343.617408 165.757335 l -343.617408 165.757335 l -343.65312 200.784493 l -343.65312 200.784493 l -343.65312 200.784493 l -343.795968 145.35388 l -343.83168 206.749669 l -343.867392 187.593594 l -343.903104 134.627387 l -343.974528 164.515929 l -344.01024 156.422717 l -344.01024 156.422717 l -344.01024 156.422717 l -344.045952 168.972782 l -344.081664 120.799563 l -344.153088 139.622796 l -344.260224 195.488446 l -344.295936 193.707511 l -344.331648 148.040185 l -344.403072 170.982666 l -344.438784 192.864527 l -344.510208 105.637137 l -344.54592 167.323317 l -344.581632 188.3988 l -344.653056 130.700553 l -344.688768 163.512046 l -344.72448 160.991504 l -344.795904 235.410461 l -344.831616 162.833931 l -344.867328 164.30749 l -344.938752 209.668833 l -344.974464 177.123046 l -345.010176 157.544084 l -345.045888 166.137844 l -345.188736 205.703522 l -345.224448 193.699444 l -345.26016 140.654756 l -345.26016 140.654756 l -345.26016 140.654756 l -345.295872 198.584696 l -345.367296 165.989067 l -345.403008 164.607483 l -345.43872 168.629014 l -345.474432 156.329561 l -345.581568 192.525451 l -345.61728 180.773321 l -345.61728 180.773321 l -345.61728 180.773321 l -345.652992 205.305671 l -345.760128 122.258448 l -345.831552 204.363859 l -345.902976 199.297381 l -345.938688 198.448523 l -345.9744 134.805517 l -346.045824 197.45696 l -346.117248 92.589983 l -346.188672 222.620925 l -346.224384 169.465172 l -346.260096 139.123378 l -346.295808 227.970115 l -346.367232 174.03446 l -346.438656 137.47823 l -346.474368 172.680832 l -346.545792 195.89423 l -346.652928 146.230984 l -346.760064 209.344424 l -346.795776 206.510517 l -346.8672 144.17526 l -346.938624 163.057658 l -346.974336 143.37773 l -346.974336 143.37773 l -346.974336 143.37773 l -347.04576 197.067482 l -347.081472 166.804161 l -347.117184 131.720569 l -347.117184 131.720569 l -347.117184 131.720569 l -347.260032 198.061476 l -347.40288 158.996152 l -347.438592 191.745572 l -347.438592 191.745572 l -347.438592 191.745572 l -347.474304 150.538692 l -347.474304 150.538692 l -347.474304 150.538692 l -347.545728 199.794152 l -347.545728 199.794152 l -347.545728 199.794152 l -347.58144 149.981319 l -347.652864 171.47258 l -347.688576 188.027388 l -347.795712 138.287908 l -347.93856 183.653882 l -347.974272 197.288847 l -348.009984 142.311901 l -348.081408 185.290925 l -348.11712 209.102508 l -348.152832 152.218849 l -348.224256 206.715064 l -348.331392 152.744993 l -348.367104 169.902647 l -348.402816 151.479056 l -348.438528 168.070126 l -348.47424 186.288153 l -348.509952 185.787987 l -348.617088 119.51709 l -348.724224 223.067974 l -348.759936 163.510829 l -348.83136 200.867262 l -349.00992 140.422585 l -349.045632 199.304047 l -349.117056 183.810767 l -349.152768 190.662006 l -349.18848 184.767598 l -349.259904 156.413183 l -349.295616 205.884915 l -349.331328 158.811142 l -349.36704 137.539715 l -349.36704 137.539715 l -349.36704 137.539715 l -349.474176 204.605563 l -349.509888 169.130848 l -349.5456 139.766907 l -349.5456 139.766907 l -349.5456 139.766907 l -349.581312 191.763793 l -349.581312 191.763793 l -349.581312 191.763793 l -349.617024 105.081559 l -349.652736 184.49891 l -349.688448 210.909342 l -349.688448 210.909342 l -349.688448 210.909342 l -349.759872 139.370349 l -349.795584 177.667111 l -349.831296 199.254569 l -349.867008 184.580182 l -349.938432 135.023076 l -349.974144 166.902373 l -350.009856 201.646836 l -350.08128 195.20033 l -350.152704 124.948879 l -350.188416 169.731886 l -350.224128 198.616753 l -350.25984 176.939482 l -350.295552 162.060949 l -350.331264 233.893375 l -350.366976 190.877118 l -350.402688 134.082788 l -350.474112 140.584834 l -350.581248 197.664158 l -350.61696 171.039904 l -350.688384 181.128581 l -350.724096 174.164456 l -350.759808 142.193003 l -350.79552 166.197534 l -350.79552 166.197534 l -350.902656 186.949658 l -350.938368 178.012186 l -350.97408 173.213717 l -351.009792 151.705854 l -351.081216 161.081834 l -351.116928 188.941652 l -351.15264 183.535719 l -351.15264 183.535719 l -351.188352 160.172677 l -351.188352 160.172677 l -351.188352 160.172677 l -351.224064 192.533553 l -351.224064 192.533553 l -351.224064 192.533553 l -351.259776 134.782126 l -351.366912 138.579925 l -351.438336 203.790794 l -351.50976 187.857315 l -351.545472 189.020129 l -351.652608 127.941283 l -351.68832 182.896735 l -351.759744 135.475159 l -351.795456 137.990117 l -351.86688 197.788607 l -351.902592 170.707554 l -351.938304 158.908738 l -351.938304 158.908738 l -351.938304 158.908738 l -351.974016 183.465544 l -351.974016 183.465544 l -351.974016 183.465544 l -352.009728 155.924248 l -352.04544 160.333099 l -352.081152 216.961871 l -352.081152 216.961871 l -352.081152 216.961871 l -352.116864 140.402139 l -352.224 146.092953 l -352.259712 179.943572 l -352.259712 179.943572 l -352.259712 179.943572 l -352.295424 130.965616 l -352.331136 163.243155 l -352.40256 233.040546 l -352.473984 223.690251 l -352.545408 137.764238 l -352.58112 165.530393 l -352.616832 223.966603 l -352.652544 181.665271 l -352.688256 109.523009 l -352.723968 166.601556 l -352.723968 166.601556 l -352.75968 182.790352 l -352.75968 182.790352 l -352.75968 182.790352 l -352.795392 164.295374 l -352.831104 204.249093 l -352.831104 204.249093 l -352.831104 204.249093 l -352.866816 154.136117 l -352.93824 156.429566 l -353.045376 204.562909 l -353.1168 151.504911 l -353.188224 171.087689 l -353.223936 186.772244 l -353.259648 181.826026 l -353.29536 132.702909 l -353.366784 178.292965 l -353.402496 159.26393 l -353.438208 207.390588 l -353.438208 207.390588 l -353.438208 207.390588 l -353.509632 137.640513 l -353.581056 156.513683 l -353.616768 162.484797 l -353.65248 140.974651 l -353.65248 140.974651 l -353.65248 140.974651 l -353.795328 205.469742 l -353.83104 146.398637 l -353.902464 190.770753 l -353.973888 159.763603 l -354.0096 119.103807 l -354.0096 119.103807 l -354.0096 119.103807 l -354.152448 185.314886 l -354.18816 165.072234 l -354.223872 184.520062 l -354.259584 204.433559 l -354.295296 190.008756 l -354.36672 174.509908 l -354.473856 240.85373 l -354.54528 140.261351 l -354.580992 200.208389 l -354.616704 201.900287 l -354.652416 237.381302 l -354.652416 237.381302 l -354.652416 237.381302 l -354.795264 163.106826 l -354.866688 169.651288 l -354.9024 191.791091 l -354.938112 124.775122 l -354.938112 124.775122 l -354.938112 124.775122 l -354.973824 212.408452 l -355.045248 170.686574 l -355.116672 190.477463 l -355.152384 134.22739 l -355.188096 141.122628 l -355.223808 200.862173 l -355.295232 170.546592 l -355.330944 193.330454 l -355.366656 139.91217 l -355.43808 146.448132 l -355.473792 200.056989 l -355.545216 184.368083 l -355.580928 143.164879 l -355.580928 143.164879 l -355.580928 143.164879 l -355.61664 211.320415 l -355.688064 209.629592 l -355.723776 163.419384 l -355.7952 166.251532 l -355.830912 173.392742 l -355.866624 148.04106 l -355.902336 169.576344 l -355.902336 169.576344 l -355.938048 173.515382 l -355.938048 173.515382 l -355.938048 173.515382 l -355.97376 168.243224 l -356.080896 195.686283 l -356.15232 168.754293 l -356.188032 186.154427 l -356.223744 142.184499 l -356.259456 180.854809 l -356.295168 221.272323 l -356.295168 221.272323 l -356.295168 221.272323 l -356.33088 179.857639 l -356.402304 189.925654 l -356.438016 200.441063 l -356.545152 160.629044 l -356.688 210.80028 l -356.723712 165.00718 l -356.759424 179.035221 l -356.759424 179.035221 l -356.830848 213.42745 l -356.830848 213.42745 l -356.830848 213.42745 l -356.973696 125.478878 l -357.080832 212.049964 l -357.116544 196.617064 l -357.152256 187.185929 l -357.187968 121.723587 l -357.259392 135.807376 l -357.295104 187.946685 l -357.366528 161.891854 l -357.5808 224.753146 l -357.723648 131.411052 l -357.75936 203.552943 l -357.830784 194.200211 l -357.902208 121.359739 l -357.93792 210.183366 l -358.009344 193.803326 l -358.045056 126.80248 l -358.080768 155.330036 l -358.11648 204.093376 l -358.152192 161.377785 l -358.152192 161.377785 l -358.223616 137.275764 l -358.259328 174.682122 l -358.366464 172.668822 l -358.402176 186.009804 l -358.437888 149.795171 l -358.509312 178.235147 l -358.545024 173.112061 l -358.580736 149.952471 l -358.580736 149.952471 l -358.580736 149.952471 l -358.616448 187.399109 l -358.616448 187.399109 l -358.616448 187.399109 l -358.65216 128.876064 l -358.65216 128.876064 l -358.65216 128.876064 l -358.687872 195.677318 l -358.759296 136.201218 l -358.795008 142.374481 l -358.83072 213.010696 l -358.902144 154.600718 l -358.937856 148.901503 l -358.973568 190.399856 l -358.973568 190.399856 l -358.973568 190.399856 l -359.00928 128.027215 l -359.080704 157.937268 l -359.116416 198.231182 l -359.18784 187.394717 l -359.259264 102.630491 l -359.330688 119.56082 l -359.3664 176.853882 l -359.437824 161.707427 l -359.473536 162.263506 l -359.509248 149.0619 l -359.54496 161.124467 l -359.616384 202.350028 l -359.652096 192.78915 l -359.794944 146.537705 l -359.937792 180.337216 l -359.973504 186.827382 l -360.009216 216.902573 l -360.009216 216.902573 l -360.009216 216.902573 l -360.152064 131.686195 l -360.294912 225.507334 l -360.330624 146.676575 l -360.402048 168.888343 l -360.43776 211.21629 l -360.43776 211.21629 l -360.43776 211.21629 l -360.580608 128.118498 l -360.61632 139.117773 l -360.652032 196.970414 l -360.723456 169.636862 l -360.759168 145.384007 l -360.79488 216.409213 l -360.866304 174.655973 l -360.902016 182.667002 l -360.97344 151.28528 l -361.044864 165.171955 l -361.080576 203.017659 l -361.152 168.013097 l -361.187712 172.539776 l -361.187712 172.539776 l -361.187712 172.539776 l -361.366272 130.304011 l -361.437696 225.256993 l -361.544832 216.894241 l -361.616256 149.94685 l -361.723392 172.777923 l -361.759104 200.784653 l -361.759104 200.784653 l -361.759104 200.784653 l -361.794816 151.549082 l -361.86624 199.328816 l -362.009088 157.396336 l -362.0448 147.753266 l -362.116224 200.316285 l -362.187648 185.812123 l -362.22336 145.935047 l -362.22336 145.935047 l -362.22336 145.935047 l -362.259072 197.196281 l -362.294784 155.38613 l -362.294784 155.38613 l -362.366208 125.409172 l -362.509056 217.162976 l -362.616192 134.740293 l -362.723328 223.103744 l -362.75904 133.482031 l -362.830464 190.826518 l -362.901888 140.822719 l -362.9376 171.516125 l -362.973312 177.83463 l -363.044736 143.565509 l -363.080448 162.624162 l -363.187584 206.94169 l -363.223296 183.639834 l -363.330432 125.813359 l -363.47328 194.489754 l -363.580416 141.717132 l -363.723264 183.02325 l -363.794688 141.797592 l -363.8304 178.342803 l -363.866112 223.628377 l -363.901824 215.618147 l -364.00896 164.443117 l -364.044672 182.40062 l -364.044672 182.40062 l -364.044672 182.40062 l -364.080384 162.361498 l -364.151808 173.09815 l -364.18752 195.702161 l -364.223232 137.483723 l -364.294656 140.547851 l -364.36608 163.755284 l -364.401792 132.859504 l -364.401792 132.859504 l -364.401792 132.859504 l -364.508928 208.656864 l -364.54464 103.85222 l -364.616064 162.581006 l -364.651776 191.835803 l -364.651776 191.835803 l -364.651776 191.835803 l -364.687488 133.804444 l -364.758912 177.923502 l -364.794624 179.224784 l -364.866048 141.244524 l -364.973184 154.216138 l -365.08032 184.54063 l -365.116032 179.337338 l -365.187456 207.716433 l -365.223168 203.986858 l -365.25888 151.420613 l -365.294592 163.787798 l -365.330304 224.966865 l -365.401728 207.318995 l -365.580288 133.479412 l -365.723136 210.685249 l -365.865984 149.76647 l -365.901696 150.859963 l -365.97312 212.457966 l -366.044544 210.318932 l -366.15168 126.342925 l -366.187392 141.871224 l -366.223104 149.108768 l -366.365952 207.101915 l -366.544512 110.216915 l -366.580224 188.288316 l -366.651648 167.722003 l -366.68736 172.320329 l -366.723072 201.512409 l -366.723072 201.512409 l -366.723072 201.512409 l -366.758784 147.085346 l -366.830208 148.436308 l -366.86592 195.854797 l -366.937344 177.280142 l -366.973056 183.054518 l -367.008768 164.604404 l -367.008768 164.604404 l -367.008768 164.604404 l -367.04448 183.742605 l -367.04448 183.742605 l -367.04448 183.742605 l -367.080192 150.717572 l -367.115904 252.425447 l -367.115904 252.425447 l -367.115904 252.425447 l -367.22304 113.46497 l -367.258752 211.868225 l -367.330176 154.534522 l -367.365888 171.320055 l -367.437312 169.63173 l -367.473024 158.524963 l -367.508736 187.67654 l -367.544448 174.953455 l -367.58016 123.733685 l -367.615872 152.123336 l -367.651584 217.279717 l -367.723008 180.117739 l -367.75872 178.428473 l -367.865856 131.314382 l -367.901568 139.929405 l -367.93728 211.649379 l -367.972992 183.241646 l -367.972992 183.241646 l -368.008704 134.065192 l -368.008704 134.065192 l -368.008704 134.065192 l -368.080128 218.745314 l -368.11584 159.282707 l -368.187264 151.616391 l -368.330112 204.133653 l -368.47296 128.892741 l -368.580096 206.023554 l -368.65152 130.297904 l -368.722944 153.906482 l -368.758656 194.66603 l -368.758656 194.66603 l -368.758656 194.66603 l -368.794368 113.415491 l -368.794368 113.415491 l -368.794368 113.415491 l -368.901504 219.1168 l -369.044352 131.612072 l -369.080064 181.145533 l -369.080064 181.145533 l -369.080064 181.145533 l -369.115776 115.665035 l -369.1872 166.491393 l -369.258624 120.908468 l -369.36576 195.824666 l -369.401472 136.22313 l -369.472896 154.841 l -369.615744 197.905614 l -369.72288 114.88087 l -369.865728 217.715628 l -369.90144 179.883106 l -369.972864 203.204915 l -370.008576 207.70739 l -370.044288 150.700982 l -370.115712 156.358183 l -370.187136 227.829958 l -370.25856 196.720814 l -370.294272 162.84367 l -370.365696 166.809071 l -370.401408 189.58243 l -370.401408 189.58243 l -370.401408 189.58243 l -370.472832 146.594833 l -370.508544 171.713358 l -370.544256 192.221834 l -370.651392 129.236424 l -370.687104 149.98471 l -370.865664 184.689839 l -370.901376 150.353118 l -370.937088 166.31303 l -370.9728 198.85019 l -371.008512 126.498227 l -371.044224 167.078599 l -371.044224 167.078599 l -371.15136 224.866047 l -371.258496 138.513999 l -371.32992 153.71725 l -371.365632 186.661974 l -371.401344 178.156045 l -371.50848 137.115879 l -371.544192 194.171003 l -371.615616 154.465539 l -371.68704 163.315795 l -371.722752 124.861743 l -371.722752 124.861743 l -371.722752 124.861743 l -371.8656 211.38373 l -371.937024 150.522844 l -372.008448 184.462964 l -372.115584 156.521811 l -372.151296 169.993678 l -372.187008 176.56341 l -372.22272 159.965948 l -372.258432 171.119751 l -372.294144 212.508173 l -372.329856 202.569714 l -372.472704 122.002579 l -372.651264 214.728144 l -372.7584 148.176757 l -372.794112 172.167913 l -372.829824 171.711887 l -372.901248 141.533428 l -372.93696 191.466513 l -372.972672 182.239823 l -373.008384 135.16801 l -373.008384 135.16801 l -373.008384 135.16801 l -373.044096 204.263056 l -373.11552 192.112732 l -373.258368 140.459412 l -373.329792 197.186444 l -373.436928 92.950725 l -373.544064 202.228633 l -373.579776 196.4268 l -373.686912 132.444083 l -373.722624 146.186834 l -373.758336 218.097572 l -373.82976 149.69347 l -373.865472 153.594853 l -373.901184 223.534113 l -373.901184 223.534113 l -373.901184 223.534113 l -374.00832 111.398676 l -374.079744 177.54628 l -374.151168 155.027755 l -374.222592 184.588182 l -374.222592 184.588182 l -374.222592 184.588182 l -374.36544 141.388223 l -374.436864 188.889974 l -374.472576 146.595367 l -374.508288 121.255351 l -374.508288 121.255351 l -374.508288 121.255351 l -374.686848 205.690517 l -374.72256 138.152912 l -374.793984 144.250696 l -374.90112 197.868111 l -374.936832 145.11616 l -375.008256 162.797987 l -375.043968 160.137159 l -375.07968 219.721606 l -375.115392 169.791744 l -375.151104 143.474748 l -375.222528 162.806639 l -375.25824 162.100026 l -375.293952 187.923481 l -375.401088 117.020127 l -375.61536 202.913637 l -375.686784 151.431691 l -375.758208 152.928577 l -375.79392 146.100597 l -375.901056 230.560182 l -376.043904 132.732534 l -376.15104 189.127765 l -376.186752 126.880981 l -376.258176 165.671063 l -376.293888 205.985352 l -376.365312 171.083187 l -376.401024 157.098582 l -376.472448 158.780723 l -376.50816 164.400217 l -376.543872 105.074372 l -376.543872 105.074372 l -376.543872 105.074372 l -376.579584 186.704428 l -376.651008 184.65005 l -376.758144 143.868351 l -376.900992 227.845015 l -376.936704 146.356788 l -377.008128 146.764607 l -377.04384 208.832659 l -377.079552 177.443624 l -377.115264 90.404989 l -377.150976 129.833477 l -377.150976 129.833477 l -377.186688 180.320145 l -377.258112 166.091751 l -377.293824 170.927101 l -377.329536 155.133706 l -377.365248 164.514375 l -377.365248 164.514375 l -377.40096 172.147243 l -377.436672 129.919963 l -377.472384 221.923896 l -377.543808 195.187499 l -377.615232 151.044324 l -377.650944 180.486151 l -377.829504 127.067482 l -377.900928 203.902059 l -377.972352 203.074942 l -378.1152 148.247763 l -378.186624 238.418637 l -378.222336 162.07919 l -378.258048 115.33921 l -378.258048 115.33921 l -378.258048 115.33921 l -378.400896 204.100057 l -378.508032 136.760218 l -378.543744 174.323849 l -378.543744 174.323849 l -378.543744 174.323849 l -378.579456 132.759111 l -378.65088 144.95099 l -378.686592 148.861445 l -378.722304 198.760618 l -378.793728 164.678024 l -378.82944 158.226191 l -378.865152 129.295066 l -378.900864 141.160132 l -378.936576 190.78534 l -379.008 174.589103 l -379.043712 139.955492 l -379.043712 139.955492 l -379.043712 139.955492 l -379.079424 192.646806 l -379.150848 179.545455 l -379.257984 159.634461 l -379.436544 206.210038 l -379.579392 166.004937 l -379.72224 105.274397 l -379.829376 212.266429 l -379.865088 208.832173 l -379.936512 129.035407 l -380.007936 145.529094 l -380.150784 183.828002 l -380.222208 134.370408 l -380.293632 138.474403 l -380.400768 183.922399 l -380.472192 139.803739 l -380.507904 151.877815 l -380.579328 185.292945 l -380.61504 172.195324 l -380.650752 146.322028 l -380.686464 226.998211 l -380.722176 176.476166 l -380.757888 135.416472 l -380.757888 135.416472 l -380.757888 135.416472 l -380.7936 180.872817 l -380.7936 180.872817 l -380.7936 180.872817 l -380.829312 120.493854 l -380.900736 174.999097 l -380.936448 195.871988 l -380.97216 148.121901 l -381.043584 185.317989 l -381.15072 152.880135 l -381.32928 221.425272 l -381.436416 145.856451 l -381.472128 196.780256 l -381.543552 196.59288 l -381.614976 152.061741 l -381.650688 206.993641 l -381.722112 206.952129 l -381.757824 105.579892 l -381.829248 178.795676 l -381.900672 124.951042 l -381.972096 215.830627 l -382.007808 154.982379 l -382.04352 203.672602 l -382.114944 193.905743 l -382.22208 136.214922 l -382.329216 228.442008 l -382.40064 127.603075 l -382.472064 161.559551 l -382.507776 175.747862 l -382.507776 175.747862 l -382.507776 175.747862 l -382.543488 161.222483 l -382.543488 161.222483 l -382.543488 161.222483 l -382.614912 201.768652 l -382.686336 143.955319 l -382.722048 171.005564 l -382.75776 181.380777 l -382.793472 139.437231 l -382.864896 171.657034 l -382.93632 205.161885 l -382.972032 178.612019 l -383.007744 172.711557 l -383.007744 172.711557 l -383.007744 172.711557 l -383.11488 186.472005 l -383.150592 181.253253 l -383.222016 188.132416 l -383.257728 206.265979 l -383.29344 117.355972 l -383.364864 188.209284 l -383.400576 180.812165 l -383.436288 145.246479 l -383.472 171.640523 l -383.543424 199.763936 l -383.579136 149.647051 l -383.686272 155.221525 l -383.721984 145.162418 l -383.757696 167.086111 l -383.793408 155.619553 l -383.864832 112.612385 l -383.900544 125.55162 l -384.043392 205.889847 l -384.18624 102.312182 l -384.221952 231.841184 l -384.293376 177.169463 l -384.329088 186.541881 l -384.329088 186.541881 l -384.329088 186.541881 l -384.54336 129.562217 l -384.72192 181.159195 l -384.793344 136.530005 l -384.829056 149.659468 l -384.936192 171.494294 l -384.971904 144.554127 l -384.971904 144.554127 l -384.971904 144.554127 l -385.043328 201.328069 l -385.07904 184.176011 l -385.114752 166.420751 l -385.114752 166.420751 l -385.114752 166.420751 l -385.150464 194.719436 l -385.150464 194.719436 l -385.150464 194.719436 l -385.221888 128.015212 l -385.293312 139.212637 l -385.329024 194.862751 l -385.329024 194.862751 l -385.329024 194.862751 l -385.364736 134.913662 l -385.43616 161.414873 l -385.471872 154.963539 l -385.61472 214.489217 l -385.650432 161.911676 l -385.721856 167.140348 l -385.79328 248.387981 l -385.936128 140.151162 l -385.97184 110.557991 l -386.078976 203.623125 l -386.114688 189.146975 l -386.1504 144.062997 l -386.221824 181.21721 l -386.257536 179.798191 l -386.293248 212.289934 l -386.293248 212.289934 l -386.293248 212.289934 l -386.32896 162.601022 l -386.32896 162.601022 l -386.32896 162.601022 l -386.364672 222.165612 l -386.364672 222.165612 l -386.364672 222.165612 l -386.436096 117.258085 l -386.471808 212.792289 l -386.614656 120.170088 l -386.721792 193.423121 l -386.757504 181.687717 l -386.793216 178.478279 l -386.828928 147.485065 l -386.828928 147.485065 l -386.828928 147.485065 l -386.86464 186.571239 l -386.86464 186.571239 l -386.86464 186.571239 l -386.900352 133.823432 l -386.900352 133.823432 l -386.900352 133.823432 l -386.936064 211.094771 l -387.007488 163.996128 l -387.0432 139.973044 l -387.0432 139.973044 l -387.0432 139.973044 l -387.114624 212.799343 l -387.186048 175.577702 l -387.22176 174.612462 l -387.257472 140.285801 l -387.257472 140.285801 l -387.257472 140.285801 l -387.293184 208.963009 l -387.364608 150.139456 l -387.436032 187.375044 l -387.543168 171.137116 l -387.614592 137.1383 l -387.650304 157.906148 l -387.721728 143.98469 l -387.793152 177.009734 l -387.793152 177.009734 l -387.793152 177.009734 l -387.900288 142.764122 l -387.971712 186.19354 l -388.007424 182.90152 l -388.078848 134.077784 l -388.11456 166.045406 l -388.150272 183.105082 l -388.150272 183.105082 l -388.150272 183.105082 l -388.185984 153.344995 l -388.185984 153.344995 l -388.185984 153.344995 l -388.221696 188.331067 l -388.29312 182.054083 l -388.328832 178.20712 l -388.328832 178.20712 l -388.328832 178.20712 l -388.364544 183.649269 l -388.47168 129.790666 l -388.614528 208.357916 l -388.685952 154.087985 l -388.757376 165.555116 l -388.864512 237.9368 l -388.900224 182.213626 l -388.971648 157.542163 l -389.00736 210.049769 l -389.078784 172.278134 l -389.114496 193.372223 l -389.114496 193.372223 l -389.114496 193.372223 l -389.257344 145.478115 l -389.400192 206.044842 l -389.435904 154.758141 l -389.507328 161.757203 l -389.54304 201.683283 l -389.54304 201.683283 l -389.54304 201.683283 l -389.578752 128.696497 l -389.650176 186.014316 l -389.685888 161.067647 l -389.7216 232.261904 l -389.757312 165.923723 l -389.793024 144.462362 l -389.828736 217.628831 l -389.90016 159.812817 l -389.935872 160.154662 l -389.971584 216.823446 l -390.043008 183.633112 l -390.07872 207.743097 l -390.07872 207.743097 l -390.07872 207.743097 l -390.221568 146.698769 l -390.364416 204.77089 l -390.400128 158.601886 l -390.400128 158.601886 l -390.400128 158.601886 l -390.43584 209.191561 l -390.507264 172.944664 l -390.578688 189.166946 l -390.6144 138.454945 l -390.6144 138.454945 l -390.6144 138.454945 l -390.650112 245.181378 l -390.721536 198.987613 l -390.864384 126.561218 l -391.007232 194.950082 l -391.042944 180.748879 l -391.042944 180.748879 l -391.042944 180.748879 l -391.078656 197.779893 l -391.078656 197.779893 l -391.078656 197.779893 l -391.15008 156.760937 l -391.185792 193.15586 l -391.257216 171.200561 l -391.292928 185.392203 l -391.32864 188.343143 l -391.364352 126.095021 l -391.435776 167.802982 l -391.471488 155.865803 l -391.471488 155.865803 l -391.471488 155.865803 l -391.614336 203.528149 l -391.650048 96.355238 l -391.721472 200.831023 l -391.757184 200.012303 l -391.86432 165.43058 l -391.900032 181.346794 l -391.900032 181.346794 l -391.900032 181.346794 l -392.007168 139.69663 l -392.150016 173.332708 l -392.185728 147.933146 l -392.22144 205.120787 l -392.22144 205.120787 l -392.22144 205.120787 l -392.257152 119.133903 l -392.257152 119.133903 l -392.257152 119.133903 l -392.292864 213.993081 l -392.292864 213.993081 l -392.292864 213.993081 l -392.328576 92.144257 l -392.4 169.789307 l -392.435712 174.528695 l -392.435712 174.528695 l -392.435712 174.528695 l -392.471424 169.254514 l -392.471424 169.254514 l -392.471424 169.254514 l -392.57856 189.581839 l -392.649984 153.950213 l -392.685696 161.927896 l -392.792832 199.790633 l -392.828544 125.411871 l -392.899968 188.564005 l -392.93568 154.41379 l -392.93568 154.41379 l -392.93568 154.41379 l -392.971392 195.835227 l -393.042816 181.329235 l -393.078528 155.20167 l -393.078528 155.20167 l -393.078528 155.20167 l -393.11424 192.259062 l -393.11424 192.259062 l -393.11424 192.259062 l -393.149952 132.381235 l -393.221376 162.2935 l -393.257088 201.434008 l -393.328512 195.559999 l -393.364224 190.405602 l -393.47136 137.875155 l -393.507072 182.48318 l -393.578496 151.528204 l -393.614208 152.95452 l -393.64992 211.121845 l -393.64992 211.121845 l -393.64992 211.121845 l -393.685632 140.245959 l -393.757056 166.266142 l -393.792768 185.450117 l -393.792768 185.450117 l -393.792768 185.450117 l -393.82848 150.054746 l -393.82848 150.054746 l -393.82848 150.054746 l -393.864192 192.51038 l -393.864192 192.51038 l -393.864192 192.51038 l -393.899904 137.274393 l -393.935616 177.025115 l -393.971328 201.353915 l -394.00704 89.34157 l -394.042752 146.893969 l -394.042752 146.893969 l -394.078464 203.58095 l -394.078464 203.58095 l -394.078464 203.58095 l -394.114176 126.835205 l -394.1856 148.714924 l -394.221312 153.847714 l -394.257024 134.358798 l -394.292736 199.652033 l -394.36416 171.089798 l -394.399872 171.996554 l -394.435584 191.376616 l -394.435584 191.376616 l -394.435584 191.376616 l -394.471296 167.374736 l -394.507008 175.955444 l -394.54272 212.450228 l -394.54272 212.450228 l -394.54272 212.450228 l -394.614144 111.872632 l -394.649856 183.720378 l -394.756992 217.956853 l -394.792704 153.998504 l -394.828416 203.898282 l -394.864128 228.976782 l -395.006976 143.004717 l -395.149824 201.463942 l -395.25696 114.219658 l -395.292672 198.388066 l -395.364096 144.26297 l -395.471232 220.259951 l -395.61408 142.675907 l -395.685504 210.968025 l -395.756928 179.496825 l -395.828352 130.575991 l -395.864064 131.286035 l -396.006912 204.080017 l -396.078336 190.095922 l -396.114048 153.556466 l -396.14976 154.397115 l -396.185472 206.167171 l -396.256896 184.710285 l -396.32832 166.578354 l -396.399744 170.467123 l -396.435456 211.526327 l -396.435456 211.526327 l -396.435456 211.526327 l -396.542592 132.311832 l -396.578304 156.087611 l -396.614016 226.29007 l -396.614016 226.29007 l -396.614016 226.29007 l -396.68544 140.71428 l -396.721152 170.927775 l -396.792576 159.336316 l -396.828288 142.111765 l -396.899712 186.591484 l -396.971136 180.740569 l -397.04256 111.942361 l -397.113984 124.944772 l -397.256832 192.862638 l -397.39968 144.817204 l -397.506816 208.382235 l -397.542528 172.995829 l -397.57824 146.304269 l -397.613952 162.595892 l -397.685376 219.935243 l -397.721088 164.958093 l -397.7568 160.025591 l -397.792512 191.016627 l -397.863936 174.81701 l -398.006784 119.349523 l -398.042496 216.777912 l -398.11392 184.822059 l -398.149632 185.699884 l -398.256768 141.633515 l -398.328192 227.102802 l -398.363904 187.658903 l -398.399616 165.15096 l -398.399616 165.15096 l -398.399616 165.15096 l -398.47104 201.152389 l -398.47104 201.152389 l -398.47104 201.152389 l -398.506752 164.18323 l -398.542464 199.86322 l -398.542464 199.86322 l -398.578176 203.068158 l -398.721024 147.565046 l -398.792448 206.024503 l -398.82816 119.392199 l -398.82816 119.392199 l -398.82816 119.392199 l -398.863872 232.453089 l -398.935296 176.313908 l -398.971008 196.24686 l -398.971008 196.24686 l -398.971008 196.24686 l -399.042432 96.077714 l -399.113856 146.746481 l -399.220992 186.049821 l -399.256704 165.441692 l -399.292416 131.892364 l -399.292416 131.892364 l -399.292416 131.892364 l -399.36384 213.987128 l -399.435264 187.988022 l -399.470976 137.985426 l -399.470976 137.985426 l -399.470976 137.985426 l -399.506688 222.642383 l -399.578112 199.267555 l -399.613824 149.164797 l -399.685248 174.071349 l -399.828096 143.355511 l -399.863808 184.332278 l -399.935232 169.278598 l -399.970944 176.954053 l -399.970944 176.954053 l -399.970944 176.954053 l -400.006656 165.406389 l -400.042368 217.0979 l -400.07808 210.705496 l -400.113792 150.149662 l -400.185216 183.679568 l -400.220928 223.973127 l -400.220928 223.973127 l -400.220928 223.973127 l -400.363776 111.35382 l -400.4352 168.105809 l -400.506624 155.556208 l -400.578048 144.021725 l -400.61376 144.861201 l -400.685184 184.068907 l -400.720896 158.530547 l -400.79232 173.921041 l -400.828032 133.469093 l -400.899456 155.191698 l -400.935168 161.669078 l -401.078016 204.784887 l -401.113728 196.31966 l -401.14944 156.736498 l -401.185152 169.015617 l -401.220864 202.197057 l -401.220864 202.197057 l -401.220864 202.197057 l -401.328 157.974024 l -401.363712 165.892026 l -401.435136 168.83376 l -401.470848 173.585477 l -401.577984 220.170617 l -401.68512 168.576034 l -401.720832 241.135004 l -401.756544 182.013212 l -401.756544 182.013212 l -401.792256 168.200124 l -401.792256 168.200124 l -401.792256 168.200124 l -401.827968 194.848512 l -401.827968 194.848512 l -401.827968 194.848512 l -401.86368 139.592854 l -401.899392 169.923876 l -401.899392 169.923876 l -401.935104 199.225028 l -401.970816 135.646993 l -402.006528 194.816479 l -402.04224 206.449661 l -402.077952 180.385277 l -402.077952 180.385277 l -402.077952 180.385277 l -402.113664 208.998035 l -402.113664 208.998035 l -402.113664 208.998035 l -402.2208 145.233951 l -402.256512 145.809598 l -402.435072 206.155349 l -402.470784 125.440851 l -402.542208 162.498124 l -402.57792 156.337811 l -402.720768 211.179632 l -402.792192 139.128341 l -402.899328 153.434577 l -402.93504 186.827406 l -403.006464 167.689017 l -403.042176 170.053034 l -403.077888 201.415177 l -403.1136 119.967753 l -403.1136 119.967753 l -403.1136 119.967753 l -403.149312 206.144838 l -403.220736 123.962733 l -403.256448 195.571048 l -403.327872 190.548211 l -403.363584 119.243643 l -403.363584 119.243643 l -403.363584 119.243643 l -403.47072 215.764105 l -403.506432 150.962244 l -403.613568 153.837633 l -403.64928 211.954735 l -403.684992 208.54873 l -403.720704 142.711116 l -403.720704 142.711116 l -403.720704 142.711116 l -403.82784 231.823098 l -403.863552 137.156607 l -403.934976 162.915637 l -404.042112 178.774653 l -404.113536 112.202616 l -404.149248 169.041575 l -404.18496 182.515974 l -404.18496 182.515974 l -404.18496 182.515974 l -404.256384 135.44645 l -404.292096 174.927268 l -404.327808 173.84526 l -404.470656 201.574197 l -404.54208 164.708864 l -404.577792 191.131555 l -404.613504 197.984382 l -404.649216 167.377983 l -404.756352 169.09658 l -404.827776 199.193866 l -404.8992 157.367716 l -404.934912 168.277515 l -404.970624 209.510517 l -405.042048 205.015067 l -405.184896 163.477261 l -405.220608 205.780474 l -405.25632 167.594073 l -405.292032 132.74106 l -405.327744 218.101729 l -405.363456 178.724546 l -405.363456 178.724546 l -405.470592 112.126394 l -405.61344 202.104235 l -405.827712 139.683815 l -405.863424 166.484827 l -405.899136 110.164331 l -405.97056 161.100772 l -406.006272 149.885773 l -406.041984 193.271191 l -406.113408 155.404654 l -406.14912 164.481619 l -406.184832 139.658661 l -406.291968 140.956299 l -406.32768 193.470799 l -406.32768 193.470799 l -406.32768 193.470799 l -406.363392 131.072329 l -406.399104 154.504543 l -406.399104 154.504543 l -406.434816 197.520563 l -406.434816 197.520563 l -406.434816 197.520563 l -406.470528 141.924945 l -406.541952 172.058206 l -406.613376 216.760508 l -406.6848 137.905628 l -406.720512 193.998962 l -406.791936 161.171811 l -406.827648 207.108069 l -406.827648 207.108069 l -406.827648 207.108069 l -406.86336 149.680826 l -406.899072 176.653842 l -406.899072 176.653842 l -406.934784 207.424219 l -406.934784 207.424219 l -406.934784 207.424219 l -406.970496 175.302906 l -407.04192 195.371796 l -407.077632 193.77833 l -407.113344 168.747845 l -407.184768 168.758092 l -407.22048 192.656507 l -407.256192 174.405191 l -407.291904 123.235632 l -407.291904 123.235632 l -407.291904 123.235632 l -407.39904 187.426221 l -407.541888 138.662607 l -407.5776 200.21241 l -407.613312 145.256003 l -407.613312 145.256003 l -407.649024 136.511421 l -407.791872 217.412163 l -407.827584 216.412847 l -407.899008 138.830573 l -407.93472 207.725698 l -407.970432 210.209924 l -408.11328 119.456402 l -408.148992 194.018767 l -408.220416 192.945842 l -408.398976 162.102353 l -408.434688 176.926466 l -408.4704 134.096256 l -408.4704 134.096256 l -408.4704 134.096256 l -408.577536 222.194555 l -408.684672 129.483071 l -408.720384 218.647758 l -408.791808 189.164827 l -408.82752 156.155257 l -408.898944 174.644904 l -409.041792 215.496175 l -409.077504 167.165492 l -409.113216 199.072108 l -409.113216 199.072108 l -409.148928 216.481806 l -409.220352 127.929762 l -409.220352 127.929762 l -409.220352 127.929762 l -409.256064 218.71229 l -409.327488 218.411014 l -409.434624 156.593647 l -409.470336 202.102325 l -409.54176 191.01357 l -409.613184 153.60966 l -409.648896 155.145316 l -409.684608 176.056172 l -409.684608 176.056172 l -409.684608 176.056172 l -409.72032 144.570275 l -409.72032 144.570275 l -409.72032 144.570275 l -409.791744 187.847737 l -409.827456 153.463529 l -409.89888 190.156953 l -410.006016 119.962621 l -410.041728 195.251139 l -410.113152 163.169249 l -410.148864 170.910243 l -410.184576 132.888421 l -410.184576 132.888421 l -410.184576 132.888421 l -410.220288 192.32929 l -410.256 189.128094 l -410.256 189.128094 l -410.291712 128.260954 l -410.363136 180.026986 l -410.470272 127.616354 l -410.505984 156.620556 l -410.577408 224.706054 l -410.61312 162.696804 l -410.648832 171.893156 l -410.684544 122.321306 l -410.720256 132.097266 l -410.755968 196.009413 l -410.827392 178.384562 l -410.898816 151.768922 l -410.934528 190.950561 l -410.934528 190.950561 l -410.934528 190.950561 l -410.97024 136.724677 l -411.041664 188.409053 l -411.113088 148.731266 l -411.1488 128.545169 l -411.255936 236.01836 l -411.291648 155.868664 l -411.363072 185.943769 l -411.398784 165.174951 l -411.398784 165.174951 l -411.398784 165.174951 l -411.434496 186.60144 l -411.470208 166.873049 l -411.577344 103.313556 l -411.68448 194.214977 l -411.791616 135.528604 l -411.827328 182.856675 l -411.86304 171.584835 l -411.86304 171.584835 l -411.898752 134.47061 l -411.970176 165.974772 l -412.0416 177.188984 l -412.077312 207.201318 l -412.077312 207.201318 l -412.077312 207.201318 l -412.255872 119.696885 l -412.291584 198.301944 l -412.363008 173.771807 l -412.39872 163.399953 l -412.434432 165.076975 l -412.505856 214.405184 l -412.541568 168.824645 l -412.57728 135.052593 l -412.57728 135.052593 l -412.57728 135.052593 l -412.648704 213.112619 l -412.720128 179.538544 l -412.75584 137.061149 l -412.75584 137.061149 l -412.75584 137.061149 l -412.791552 196.248314 l -412.862976 187.977101 l -412.898688 186.962605 l -412.9344 173.990237 l -412.9344 173.990237 l -412.9344 173.990237 l -412.970112 193.540117 l -413.005824 151.619437 l -413.077248 153.526781 l -413.148672 258.911128 l -413.184384 160.44984 l -413.220096 185.586056 l -413.29152 166.066774 l -413.327232 164.440737 l -413.362944 127.903286 l -413.434368 151.931418 l -413.505792 242.012251 l -413.541504 121.816522 l -413.612928 187.684487 l -413.64864 163.953049 l -413.64864 163.953049 l -413.64864 163.953049 l -413.720064 208.60477 l -413.755776 202.159495 l -413.791488 151.101046 l -413.862912 183.941148 l -413.898624 194.529198 l -413.970048 143.543826 l -414.00576 163.285994 l -414.041472 196.911718 l -414.041472 196.911718 l -414.041472 196.911718 l -414.18432 147.801963 l -414.220032 183.57012 l -414.255744 155.856591 l -414.255744 155.856591 l -414.291456 146.39004 l -414.327168 146.449723 l -414.470016 179.713197 l -414.505728 129.208539 l -414.505728 129.208539 l -414.505728 129.208539 l -414.577152 231.788324 l -414.648576 202.976132 l -414.684288 142.160638 l -414.684288 142.160638 l -stroke -grestore -0.000 0.000 1.000 setrgbcolor -gsave -357.1 266.1 57.6 38.02 clipbox -57.6 171.072 m -414.72 171.072 l -stroke -grestore -0 setlinecap -[5.6 2.4] 0 setdash -0.000 0.500 0.000 setrgbcolor -gsave -357.1 266.1 57.6 38.02 clipbox -57.6 197.6832 m -414.72 197.6832 l -stroke -grestore -gsave -357.1 266.1 57.6 38.02 clipbox -57.6 144.4608 m -414.72 144.4608 l -stroke -grestore -0.800 setlinewidth -0 setlinejoin -2 setlinecap -[] 0 setdash -0.000 setgray -gsave -57.6 38.016 m -57.6 304.128 l -stroke -grestore -gsave -414.72 38.016 m -414.72 304.128 l -stroke -grestore -gsave -57.6 38.016 m -414.72 38.016 l -stroke -grestore -gsave -57.6 304.128 m -414.72 304.128 l -stroke -grestore -/DejaVuSerif findfont -12.000 scalefont -setfont -gsave -208.394375 310.128000 translate -0.000000 rotate -0.000000 0.000000 m /G glyphshow -9.585938 0.000000 m /a glyphshow -16.740234 0.000000 m /u glyphshow -24.468750 0.000000 m /s glyphshow -30.626953 0.000000 m /s glyphshow -36.785156 0.000000 m /i glyphshow -40.623047 0.000000 m /a glyphshow -47.777344 0.000000 m /n glyphshow -grestore - -end -showpage diff --git a/doc/Programs/ResamplingAnalysisScripts/gaussian/data.png b/doc/Programs/ResamplingAnalysisScripts/gaussian/data.png deleted file mode 100644 index d39f6a8ddc2997131f4b40795188c40a9ff2b043..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32999 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 P64IsfS7nmU>OS}%@59R6bePAsDM>Nq451t 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 diff --git a/doc/pub/Regression/ipynb/Regression.ipynb b/doc/pub/Regression/ipynb/Regression.ipynb index f86beff59..bdde29e8d 100644 --- a/doc/pub/Regression/ipynb/Regression.ipynb +++ b/doc/pub/Regression/ipynb/Regression.ipynb @@ -919,9 +919,7 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -932,9 +930,7 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", @@ -980,9 +976,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Importing various packages\n", @@ -1064,9 +1058,7 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Importing various packages\n", @@ -1203,9 +1195,7 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", @@ -1250,9 +1240,7 @@ { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import numpy as np \n", @@ -1407,9 +1395,7 @@ { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -1461,9 +1447,7 @@ { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Importing various packages\n", @@ -1767,11 +1751,802 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('
          ');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
          ');\n", + " var titletext = $(\n", + " '
          ');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
          ');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
          ')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('
          ');\n", + " var button = $('');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Generate Test Data\n", "\n", @@ -1885,9 +3451,9 @@ "s_test = sigma_test*np.random.randn(N_test)\n", "\n", "#Linear\n", - "y_test=2*x_test+s_test\n", + "#y_test=2*x_test+s_test\n", "#Tenth order\n", - "#y_test=2*x_test-10*x_test**5+15*x_test**10+s_test\n", + "y_test=2*x_test-10*x_test**5+15*x_test**10+s_test\n", "\n", "#Make design matrices for prediction\n", "x_plot=np.linspace(0,max_x, 200)\n", @@ -1928,11 +3494,35 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X_train: (37, 1)\n", + "y_train: (37,)\n", + "X_test: (13, 1)\n", + "y_test: (13,)\n", + "------------------------------------\n", + "Ordinary Least Squares\n", + "Prediction Shape: (13,)\n", + "Coefficients: \n", + " [0.48493051]\n", + "Mean squared error: 2.55\n", + "Variance score: 0.53\n", + "------------------------------------\n", + "Ridge Regression\n", + "Ridge Coefficient: [0.48378356]\n", + "Ridge Intercept: 5.38546842215786\n", + "------------------------------------\n", + "Lasso\n", + "Lasso Coefficient: [0.48405332]\n", + "Lasso Intercept: 5.380612793763472\n" + ] + } + ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", @@ -2017,11 +3607,1630 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('
          ');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
          ');\n", + " var titletext = $(\n", + " '
          ');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
          ');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
          ')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('
          ');\n", + " var button = $('');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "lambda = 0.0001\n", + "r2 for scikit: 0.999716\n", + "r2 for own code, not centered: 0.999716\n", + "r2 for own, centered: 0.963648\n", + "\n", + "lambda = 0.001\n", + "r2 for scikit: 0.999716\n", + "r2 for own code, not centered: 0.999716\n", + "r2 for own, centered: 0.963648\n", + "\n", + "lambda = 0.01\n", + "r2 for scikit: 0.999699\n", + "r2 for own code, not centered: 0.999699\n", + "r2 for own, centered: 0.963646\n", + "\n", + "lambda = 10\n", + "r2 for scikit: 0.875174\n", + "r2 for own code, not centered: 0.875174\n", + "r2 for own, centered: 0.695243\n", + "\n", + "lambda = 100\n", + "r2 for scikit: 0.265902\n", + "r2 for own code, not centered: 0.265902\n", + "r2 for own, centered: 0.15429\n", + "\n", + "lambda = 10000\n", + "r2 for scikit: -1.05663\n", + "r2 for own code, not centered: -1.05663\n", + "r2 for own, centered: 0.00175797\n", + "\n" + ] + } + ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", @@ -2357,7 +5566,25 @@ ] } ], - "metadata": {}, + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.0" + } + }, "nbformat": 4, "nbformat_minor": 2 } diff --git a/doc/src/Projects/2018/Project1/Project1.do.txt b/doc/src/Projects/2018/Project1/Project1.do.txt index ac2a84a73..9b5e2939f 100644 --- a/doc/src/Projects/2018/Project1/Project1.do.txt +++ b/doc/src/Projects/2018/Project1/Project1.do.txt @@ -3,10 +3,19 @@ AUTHOR: "Data Analysis and Machine Learning FYS-STK3155/FYS4155":"http://www.uio DATE: May 2018 -===== Regression analysis and classification ===== +===== Regression analysis and resampling methods ===== === Introduction === +Det som var tanken, var å bruke verdier fra siden som representerer +høyde z(x,y), f.eks SRTM data som er en digital terreng modell tatt +utgangspunkt i radar data. Støy i målinger kan da unngås, samtidig som +en kan se hvordan representasjon av terreng (eller detaljerte digitale +terreng modeller) kan forenkles ved å bruke f.eks et kvadratisk +polynom i to dimensjoner. Da må studentene tilpasse dataene på formen +[1 x y x^2 x*y y^2] til høyden z(x,y) isteden, der z(x,y) blir da +målingene/estimeringene til høyden av et terrenget tatt fra f.eks +nettsiden. === Part a): The data === diff --git a/doc/src/Regression/Regression.do.txt b/doc/src/Regression/Regression.do.txt index 914eed14e..efab5bbc9 100644 --- a/doc/src/Regression/Regression.do.txt +++ b/doc/src/Regression/Regression.do.txt @@ -1582,8 +1582,14 @@ expressed analytically in terms of the known quantities derived from the design matrix and the parameters $\beta$. !eblock + !split -===== Bootstrap ===== +===== Resampling methods: Jackknife ===== + + + +!split +===== Resampling methods: Bootstrap ===== !bblock Bootstrapping is a nonparametric approach to statistical inference that substitutes computation for more traditional distributional @@ -1594,3 +1600,319 @@ o Because it does not require distributional assumptions (such as normally distr o It is possible to apply the bootstrap to statistics with sampling distributions that are difficult to derive, even asymptotically. o It is relatively simple to apply the bootstrap to complex data-collection plans (such as stratified and clustered samples). !eblock + + + + + +\textcite{efron_jackknife_1987} +explains that resampling methods +'scramble' the observations which describe the parameter +$\vec{\theta}$ in some way. The purpose of scrambling the data is to +obtain useful estimates of the probability distribution of the +estimator $\widehat{\vec{\theta}}$. This is often done if deriving the +distribution of $\widehat{\vec{\theta}}$ by analytical means is +impossible or inconvenient. The significance of this is reflected in +that Efron's original paper has more than 16 000 citations by early +spring 2018. Although these citations have come from all the sciences, +a lot of work has been done by statisticians and mathematicians. On +'Web of Science', a search for the topic \textit{bootstrap} returns +nearly 6 500 papers in journals on statistics and probability theory +alone. A similar search on 'Scopus' returns more than 7 000 papers in +the field of mathematics. In addition, there has been a renaissance in +the study of resampling methods in the 21st century, with more than 6 +000 papers in just 18 years in mathematics. Part of the reason is +that, even though the ideas which will be presented here seem innocent +and simple, the required mathematics is deep. In fact, there exists +conjectures too deep for present mathematics +\parencite{efron_jackknife_1987}. This will become apparent to us +because often we will only give intuitive explanations for why the +methods are valid. We could have done substantially more with measure +theory in place, but this is not economical in light of the present +results. However, using our introduction to real analysis, it is +possible to state and understand a few results in some detail. See for +example theorem \ref{thm:independent_strap_frechet}.\\ \\ Two famous +resampling methods are \textit{the independent bootstrap} and +\textit{the jackknife}. It would make most sense to start by +discussing the independent bootstrap, because the jackknife method +follows by making a linearization of the parameters of interest +\parencite{efron_jackknife_1987,efron_bootstrap_1979}. As such, the +jackknife is a special case of the independent bootstrap +\parencite{efron_jackknife_1987}. Still, the jackknife was made +popular prior to the independent bootstrap. And as the popularity of +the independent bootstrap soared, new variants, such as \textit{the + dependent bootstrap}\footnote{We will only consider non-parametric + bootstrap, but there exists a popular variant called parametric + bootstrap, which assumes knowledge of the probability distribution + of the observations} or stationary bootstrap were introduced, see +for example \textcite{politis_stationary_1994} or +\textcite{politis_automatic_2006}. There also exists textbooks on the +subject. The mathematical complexity of the latter variants is also +greater, and consequently it is pedagogical to introduce the methods +in this order.\\ \\ The Jackknife and independent bootstrap work for +independent, identically distributed random variables +\parencite{efron_jackknife_1987}. If these conditions are not +satisfied, the methods will fail. This is important for the results of +the thesis, because here the variables are dependent, and we will need +the dependent bootstrap. Yet, it should be said that if the data are +independent, identically distributed, and we only want to estimate the +variance of $\overline{X}$ (which often is the case), then there is no +need for bootstrapping. For if $X_1,X_2,\cdots,X_n$ are independent +identically distributed and come from an unknown distribution $F$, +then the standard error is easily computed by taking the square root +of the following expression: \eqref{eq:sigma2n} +\[ +V(\overline{X}) \stackrel{\eqref{eq:sigma2n} }{=} \frac{\sigma^2}{n} \approx \frac{\widehat{\sigma}^2}{n} \stackrel{ \eqref{eq:defn_var} }{=} \frac{1}{n^2} \sum_{i=1}^{n} (X_i - \overline{X})^2. +\] +And consequently, these methods are most useful when the data are dependent or the estimator is not the sample mean. +\subsubsection{The Jackknife} +The Jackknife works by making many replicas of the estimator $\widehat{\vec{\theta}}$. Since the jackknife is a resampling method, we explained that this happens by scrambling the data in some way. When using the jackknife, this is done by systematically leaving out one observation from the vector of observed values $\vec{X} = (X_1,X_2,\cdots,X_n)$ \parencite{tukey_abstracts_1958}. Let $\vec{X}_i$ denote the vector +\[ +\vec{X}_i = (X_1,X_2,\cdots,X_{i-1},X_{i+1},\cdots,X_n), +\] +which equals the vector $\vec{X}$ with the exception that observation number $i$ is left out. Using this notation, define $\widehat{\vec{\theta}}_i$ to be the estimator $\widehat{\vec{\theta}}$ computed using $\vec{X}_i$. According to \textcite{efron_jackknife_1987}, to get an estimate for the bias and standard error of $\widehat{\vec{\theta}}$, use the following estimators for each component of $\widehat{\vec{\theta}}$: +\[ +\widehat{\mathrm{Bias}}(\widehat \theta,\theta) = (n-1)\left( - \widehat{\theta} + \frac{1}{n}\sum_{i=1}^{n} \widehat \theta_i \right) \qquad \text{and} \qquad \widehat{\sigma}^2_{\widehat{\theta} } = \frac{n-1}{n}\sum_{i=1}^{n}( \widehat{\theta}_i - \frac{1}{n}\sum_{j=1}^{n}\widehat \theta_j )^2. +\] +Sample code is contained in figure \ref{fig:jack_code} and is available for download from the url \texttt{github.com/computative/resample} . +\begin{figure} +\begin{center} +\begin{lstlisting}[language=python] + # jack.py + + def jack(data, stat): + n = len(data);t = zeros(n); inds = arange(n); t0 = time() + # 'jackknifing' by leaving out an observation for each i + for i in range(n): + t[i] = stat(delete(data,i) ) + + return t + + # define a function which returns your chosen estimator theta-hat + def stat(data): + theta-hat = mean(data) + return theta-hat + + # boot returns the bootstrap sample + t = jack(X, stat) + +\end{lstlisting} \caption{The code follows the algorithm outlined in the text. Consider first the function \texttt{jack()}. In the \texttt{for}-loop, this function repeatedly estimates the function called \texttt{statistic()} under the resampled data by systematically leaving out one observation from the data. The function \texttt{stat()} is passed as an argument to \texttt{jack()}. The array \texttt{t} is eventually returned, which contains all the estimates $\widehat{\vec{\theta}}$, and can be plotted or analysed in other ways, such as by calling \texttt{std(t)} from \texttt{numpy} to estimate the standard error of $\widehat{\vec{\theta}}$. The function \texttt{std(t)} is just the estimator $\widehat{\sigma}^2$.}\label{fig:jack_code} +\end{center} +\end{figure} +\subsubsection{The independent bootstrap}\label{sec:ind_boot} +Many authors explain the bootstrap in an algebraic manner, similar to the way it was originally proposed by \textcite{efron_jackknife_1987}. In this thesis, I give a different view of the method; building our intuition upon \textcite{parr_bootstrap_1985}: Since $\widehat{\vec{\theta}} = \widehat{\vec{\theta}}(\vec{X})$ is a function of random variables, $\widehat{\vec{\theta}}$ itself must be a random variable. Thus it has a pdf, call this function $p(\vec{t})$. The aim of the bootstrap is to estimate $p(\vec{t})$ by the relative frequency of $\widehat{\vec{\theta}}$. You can think of this as using a histogram in the place of $p(\vec{t})$. If the relative frequency closely resembles $p(\vec{t})$, then using numerics, it is straight forward to estimate all the interesting parameters of $p(\vec{t})$ using point estimators. +%In the case that $\widehat{\vec{\theta}}$ has exactly one component, use for example the sample mean or the sample variance, as previously defined. In the case that $\widehat{\vec{\theta}}$ has more than one component, and the components are independent, use the same estimator on each component separately. +If the probability density function of $X_i$, $p(x)$, had been known, then it would have been straight forward to do this by: (1) Drawing lots of numbers from $p(x)$, suppose we call one such set of numbers $(X_1^*, X_2^*, \cdots, X_n^*)$. (2) Then using these numbers, we could compute a replica of $\widehat{\vec{\theta}}$ called $\widehat{\vec{\theta}}^*$. By repeated use of (1) and (2), many estimates of $\widehat{\vec{\theta}}$ could have been obtained. The idea is to use the relative frequency of $\widehat{\vec{\theta}}^*$ (think of a histogram again) as an estimate of $p(\vec{t})$.\\ +\\ +But unless there is enough information available about the process that generated $X_1,X_2,\cdots,X_n$, $p(x)$ is in general unknown. Therefore, Bradley \textcite{efron_bootstrap_1979} asked the natural question: What if we replace $p(x)$ by the relative frequency of the observation $X_i$; if we draw observations in accordance with the relative frequency of the observations, will we obtain the same result in some asymptotic sense? The answer is yes. The paper of \textcite{efron_bootstrap_1979} gave little in the way of general theory \parencite{efron_bootstrap_1979}. In contrast, he gave computational examples showing that in many cases, it was reasonable. It is standard to make a tweak that also speeds up computation: Instead of generating the histogram for the relative frequency of the observation $X_i$, just draw the values $(X_1^*,X_2^*,\cdots,X_n^*)$ with replacement from the vector $\vec{X}$. The end result is exactly the same, as bootstrapping is a demonstration of. \\ +\\ +See figure \ref{fig:distr_boot} for a pictorial explanation and figure \ref{fig:rithm_boot} for a concise summary and the final algorithm. Sample code for python is contained in figure \ref{fig:boot_code} and is available for download at \texttt{github.com/computative/resample} . +\begin{figure} +\begin{center} +\begin{lstlisting}[language=python] + # boot.py + + def boot(data, statistic, R): + t = zeros(R); n = len(data); inds = arange(n); t0 = time() + + # non-parametric bootstrap + for i in range(R): + t[i] = statistic(data[randint(0,n,n)]) + + return t + + # define a function which returns your chosen estimator theta-hat + def stat(data): + theta-hat = mean(data) + return theta-hat + + t = boot(X, stat, 2**9) +\end{lstlisting} \caption{The code follows the algorithm \ref{fig:rithm_boot}. Consider first the function \texttt{boot()}. In the \texttt{for}-loop, this function repeatedly estimates the function called \texttt{statistic()} under the resampled data \texttt{data[randint(0,n,n)]}. The function \texttt{statistic()} is passed as an argument to \texttt{boot()}. The array \texttt{t} is eventually returned, which contains all the estimates $\widehat{\vec{\theta}}$, and can be plotted or analysed in other ways, such as by calling \texttt{std(t)} from \texttt{numpy} to estimate the standard error of $\widehat{\vec{\theta}}$. The function \texttt{std(t)} is just the estimator $\widehat{\sigma}^2$.}\label{fig:boot_code} +\end{center} +\end{figure} +\begin{figure}[!htbp] +\center +Philosophy of the independent bootstrap \\ +\hspace{100px} +\hbox{\hspace{-1.5cm} +\input{/home/marius/Dokumenter/master/figures/bootdistr.tex} +} +\vspace{0px} +\caption{Suppose you wanted to estimate the probability distribution $p(t)$ of the estimator $\widehat{\theta}$. The obvious way to do this is to compute many replicas of some $\widehat \theta = \widehat \theta(\vec{X})$ by drawing lots of numbers from some pdf $p(x)$, such as the one of fig \ref{fig:distr_boot}(a). Then by plotting the histogram of the replicas $\widehat \theta$, you obtain the estimate of the pdf $p(t)$, namely (b). Bradley Efron asked the question: What happens if we replace the exact distribution $p(x)$ by an estimate, namely the histogram of the relative frequency (b)? It turns out that in an asymptotical sense, we still obtain the same estimate, (c). This is the philosophy of the independent bootstrap. After the estimate (c) has been obtained we can estimate any statistic thereof, for example $V(\widehat \theta)$ using $\widehat{S^2}$.}\label{fig:distr_boot} +\end{figure} +\begin{figure}[!htbp] +\center +Flow chart of the independent bootstrap \\ +\hspace{100px} +%\tikzstyle{decision} = [diamond, draw, text width=8em, text badly centered, node distance=3cm, inner sep=0pt, aspect=3] +%\tikzstyle{block} = [rectangle, draw, text width=8em, text centered, minimum height=2em] +%\tikzstyle{terminal} = [rectangle, draw, text width=8em, text centered, rounded corners, minimum height=2em] +%\tikzstyle{line} = [draw, -latex] +%\usetikzlibrary{shapes,arrows} + +\begin{tikzpicture}[node distance = 1cm, auto] + \node [terminal] (init) {\footnotesize Estimate $p(t)$}; + \node [block, below of=init, node distance=1.2cm] (index) {\footnotesize Set $i=1$}; + \node [block, below of=index, node distance=1.8cm] (pick) {\footnotesize Draw with replacement $n$ numbers from $\vec{X}$ called $\vec{X}^*$}; + \node [block, below of=pick, node distance=1.8cm] (estimator) {\footnotesize Compute $\widehat \theta^* = \widehat \theta (\vec{x}^*)$}; + \node [block, right of=estimator, node distance=4cm] (iterate) {\footnotesize Set $i = i+1$}; + \node [decision, below of=estimator, node distance=1.5cm] (decide) {\footnotesize Is $i\leq k$?}; + \node [terminal, below of=decide, node distance=1.65cm] (final) {\footnotesize Return histogram of $\widehat{\theta}^*$}; + % Draw edges + \path [line] (init) -- (index); + \path [line] (index) -- (pick); + \path [line] (pick) -- (estimator); + \path [line] (estimator) -- (decide); + \path [line] (decide) -- (final)node [near start] {no}; + \path [line] (decide) -| node [near start] {yes} (iterate); + \path [line] (iterate) |- (pick); +\end{tikzpicture} +\vspace{0px} +\caption{The independent bootstrap works like this: (1) Draw with replacement $n$ numbers for the observed variables $\vec{x} = (x_1,x_2,\cdots,x_n)$. (2) Define a vector $\vec{x}^*$ containing the values which were drawn from $\vec{x}$. (3) Using the vector $\vec{x}^*$ compute $\widehat{\theta}^*$ by evaluating $\widehat \theta$ under the observations $\vec{x}^*$. Repeat this process $k$ times. When you are done, you can draw a histogram of the relative frequency of $\widehat \theta^*$. This is your estimate of the probability distribution $p(t)$. Using this probability distribution you can estimate any statistic thereof. In principle you never draw the histogram of the relative frequency of $\widehat{\theta}^*$. Instead you use the estimators corresponding to the statistic of interest. For example, if you are interested in estimating the variance of $\widehat \theta$, apply the esimator $\widehat \sigma^2$ to the values $\widehat \theta ^*$.}\label{fig:rithm_boot} +\end{figure}\\ +\\ +As we explained, much theoretical work has gone into making the mathematics of the various types of bootstrap rigorous. However, some of the most important results were published relatively soon after. Only two years after \textcite{efron_bootstrap_1979}, proof in the case that $(\theta,\widehat{\theta}) = (\E{X}, \overline{X})$ came from \textcite{bickel_asymptotic_1981}. Despite the importance of these quantities, we will not be fully satisfied with this result. This is because bootstrapping is most useful when $\widehat{\vec{\theta}}$ is not the sample mean, as we discussed. Before formulating the theorem, some convenient notation is introduced. In ordinary real analysis, we are often interested in convergence of sequences of real numbers $\{a_n\}_{n=1}^\infty$ with limit $a \in \mathbb{R}$. In the case that the sequence $\{A_n\}_{n=1}^\infty$ is comprised of random variables, it is clearly nonsense to say that the limit is a real number. One could argue that it makes more sense to say that the limit is a random variable. However, due to amount of additional structure that comes with measure theory, there are many interesting ways of defining such limits. And \textcite{van_der_vaart_asymptotic_1998} covers some of the most useful modes of convergence: +\begin{itemize} +\item If $F_{A_n}$ is the cdf of $A_n$ and $F_A$ is the cdf of $A$, and $F_{A_n}$ converges pointwise to $F_{A}$ then we say that there is \defn{convergence in distribution}\index{convergence!{in distribution}} and denoted by $A_n \stackrel{\diff}{\to} A$.\index[s]{Ed@$\stackrel{\mathrm{d}}{\to} $ convergence in distribution} +\item If for every $\varepsilon >0$, the sequence of real numbers $a_n = P(\| A_n - A\| > \varepsilon)$ converge to zero, then we say that there is \defn{convergence in probability}\index{convergence!{in probability}}, denoted by $A_n \stackrel{P}{\to} A$\index[s]{EdP@$\stackrel{P}{\to} $ convergence in probability}. +\item If for every $\varepsilon>0$, there is an $N \in \mathbb{N}$ such that for all $n \geq N$ we have $\|A_n - A\|< \varepsilon$ with probability 1, then we say that there is \defn{almost sure convergence}\index{convergence!{almost surely}} denoted by $A_n \stackrel{\mathrm{a.s.}}{\to} A$.\index[s]{EAs@$\stackrel{\mathrm{a.s.}}{\to} $ almost sure convergence} +\end{itemize} +More generally, we will say that an event $B$ happens \defn{almost surely}\index{almost surely} if $P(B) = 1$ \parencite{oksendal_stochastic_2014,mcdonald_course_2012}. On that note we are ready for the theorem due to \textcite{bickel_asymptotic_1981}: +\begin{theorem}[Bickel-Freedman theorem] +Assume $X_1,X_2,\cdots$ are independent identically distributed random variables with variance $\sigma^2$, and assume $X \sim \mathrm{N}(0,\sigma^2)$, then given $X_1,X_2,\cdots,X_n$, +\begin{itemize} +\item $n^{1/2}(\overline{X}^* - \overline{X}) \stackrel{\diff}{\to} X $ as $n \to \infty$ almost surely. +\item $\widehat \sigma^* \stackrel{P}{\to} \sigma$ as $n \to \infty$ almost surely. +\end{itemize} +\end{theorem} +\noindent For more a general $\vec{\widehat \theta}$ the problem is harder because the assumptions are weaker. \textcite{parr_bootstrap_1985} established the result under relaxed conditions on $\widehat{\vec{\theta}}$. We will consider the case that $\vec{\widehat \theta} = {\widehat \theta}$ is one-dimensional and require the strong type of differentiability which was defined in section \ref{sec:real}; namely Fréchet differentiability. All estimators encountered thus far were expressed in terms of $\vec{X}$. However, \textcite{huber_robust_2009} explains that many estimators with practical use can also be expressed in terms of their cumulative distribution function. This area of estimation contains \defn{M-estimation}\index{estimate!estimator!M@$M$}, and is not economical to discuss in full generality. However, using our experience with real analysis, it is possible to tackle the theory relevant to maximum likelihood estimation on compact intervals $[a,b]$. Going back to the way justification was given for maximum likelihood estimators in section \ref{sec:Fisherians} it is clear that the maximum likelihood estimator is +\begin{equation} +\widehat{{\theta}} = \mathrm{argmin}_{{\theta}} \sum_{i=1}^{n} - \log(f(x_i; {\theta})) = \sum_{i=1}^{n} - \log\left( \frac{\partial F}{\partial x}(x_i; {\theta} )\right) = \widehat{{\theta}}(F). \label{eq:robust} +\end{equation} +This shows that the Maximum likelihood estimators are $M$-estimators. In fact $M$ estimation was motivated by maximum likelihood and is a generalization thereof \parencite{huber_robust_2009}. These estimators suffices for this thesis, since the maximum likelihood estimators are MVUE according to section \ref{sec:Fisherians} and is the best we can do with our present tools. We introduce the Fréchet derivative for this space of estimators. Let $H([a,b])$ be the largest open set of cdfs on $[a,b]$. It is well known that $[a,b]$ is compact \parencite{munkres_topology_2000}. Therefore, example \ref{ex:linearbounded} shows that $H([a,b])$ is contained in the Banach space $C([a,b],\mathbb{R})$ under the sup-norm, $\| \cdot \|_\infty$ from example \ref{ex:sup-norm}. Example \ref{ex:linearbounded} also shows that by letting $\psi$ be a continuous function on $X \equiv [a,b]$ such that (1) $\int_X \psi \ \diff F = 0$, (2) $\int_X \psi^2 \ \diff F < \infty$ and (3) $F \in H$ be the cdf of $X_i$ with pdf $f$, then +\[ +(A(F))({\theta}) = \Big(\int_X \psi \ \diff F\Big)({\theta}) = \int_X \psi(x;{\theta}) f(x;{\theta}) \ \diff x +\] +is a bounded linear functional on $H$. So if $T$ is any $H([a,b]) \to \mathbb{R}$ function, we say that $T$ is Fréchet differentiable at $F$ if +\[ +\lim_{C \to \textit{0}} \frac{|T(F) - T(F+C) - (A(C))(T)| }{\|C\|_\infty} = 0 \qquad\qquad \text{\parencite{parr_bootstrap_1985}}. +\] +You may wonder what the function $\psi$ is. According to \textcite{huber_robust_2009}, it defines the type of estimation equation used. In the case of maximum likelihood estimation with $F$ is twice continuously differentiable, +\[ +\psi(x;T) = - \frac{\partial \log f}{\partial {\theta}}(x;T) = - \Big(\frac{1}{\partial F / \partial x} \frac{\partial^2 F}{\partial x \partial \theta} \Big)(x;T) \quad \text{\parencite{huber_robust_2009}}. +\] +Using this definition, we are finally ready for a theorem due to \textcite{parr_bootstrap_1985} which explains consistency of the bootstrap estimator more generally. It says that if the Fréchet derivative of $\widehat{{\theta}}$ exists at $F \in H$, then the bootstrap estimator is consistent: +\begin{theorem}[Parr theorem]\label{thm:independent_strap_frechet} +Assume $X_1,X_2,\cdots,X_n$ are independent identically distributed with support $X=[a,b]$, $\widehat{{\theta}}$ is Fréchet differentiable at $F$, $\sigma^2 = V(n^{1/2}[\widehat{{\theta}}^* - \widehat{{\theta}} ])$ and $Z \sim \mathrm{N}(0,1)$, then given $X_1,X_2,\cdots,X_n$ we have $n^{1/2}(\widehat{{\theta}}^* - \widehat{{\theta}} ) \stackrel{P}{\to} \sigma Z$ as $n \to \infty$. +\end{theorem} +\subsubsection{The dependent bootstrap} +In the case that the variables $X_1,X_2,\cdots,X_n$ are dependent, the above procedure breaks down. At least one of the problems are: Independent bootstrapping assumes that $X_1,X_2,\cdots,X_n$ all come from the same marginal probability distribution, $p(x) = p(x_i)$ for all $1 \leq i \leq n$. This is clear because variables are independent, so it follows from the definitions of independence and conditional probability that $p(x_i) = p(x_i|x_j \neq x_i)$. Also the second definition given of independence says that the joint probability distribution of all the $X_i$ is $p(x_1,x_2,\cdots, x_n) = p(x)^n$ by the product rule. Since this does not carry over in the case that the variables are dependent, there are at least two problems: +\begin{enumerate} +\item Since there is dependence between the observation, observing $x_j$ reveal information about $x_i$ for some $1 \leq i \leq n$. The extra information supplied by observing $x_j$ means that $p(x_i) \neq p(x_i|x_j \neq x_i)$ as explained above. That means if we treated the variables as independent (i.e. let $p(x_i) = p(x_i|x_j \neq x_i)$), then all estimators which are sensitive to the difference between $p(x_i)$ and $p(x_i|x_j \neq x_i)$ estimate wrong systematically. Consider for example the case that $\{X_i\}$, is a time series where we wrongly assumed that the $X_i$ were independent, then the autocovariance estimator $\widehat{\gamma}(1) = \widehat{\cov}(X_i,X_{i+1}) = \widehat{0} = 0$ would estimate zero. In independent bootstrapping is induced by pick single observations with replacement as we explained. We explained above that this is equivalent to constructing the histogram for $X_i$ and drawing observations from the histogram. But by hypothesis, that is precisely the estimate of the marginal distribution $p(x)$. +\item If we do not assume that $p(x_i) = p(x_i|x_j \neq x_i)$, but instead assume that $p(x_i) \neq p(x_i|x_j \neq x_i)$, then the natural way to proceed is to treat the whole set $\{X_i\}$ as one observation $\vec{X} = (X_1,X_2,\cdots,x_n)$ and give it a multivariate probability distribution with covariance $\Sigma$ which encodes the dependence. But there is at least one problem, in this case we only have one observation, namely $\vec{X}$! This problem is however fixable in the case that the dependent data are a stationary time series, as explained by \textcite{politis_stationary_1994} and adapted here. +\end{enumerate} +That is to assume that the dependence in the data set can be related to the linear dependence, which is the covariance. In the case that the data are a stationary time series and the autocovariance $\gamma(h) \to 0$ as $h \to 0$. Since the autocovariance measures linear dependence, we assume that when the linear dependence is zero, the variables can be treated as independent. If $H \in \mathbb{N}$ a number such that $\gamma(h) \approx 0$ for all $h \geq H$, then we treat $X_{i}$ and $X_{i+h}$ as independent for all $h \geq H$ and all $1 \leq i \leq n-h$. If we split the observation and make the following definitions: +\[ +\vec{X} = (\underbrace{X_1,X_2,\cdots ,X_{H}}_{\equiv \vec{X}'_1},X_{H+1},\cdots,X_{2H},\underbrace{X_{2H+1},\cdots,X_{3H}}_{\equiv \vec{X}'_3},X_{3H+1},\cdots,X_{n} ). +\] +Then the components of $\vec{X}_1'$ and $\vec{X}_3'$ are almost independent, moreover section \ref{sec:time_series} explains that a stationary time series is identically distributed. So to these vectors can be treated as independent and identically distributed, so we can use the usual machinery of independent bootstrapping. But since the size of each vector $\vec{X}'_i$ is larger than one, we require to draw less than $n$ such vectors with replacement to compute $\widehat \theta^*$. Instead we concatenate the drawn observations $\vec{X}'_i$ into one long vector $\vec{X}^*$ of length $n$, and discard any observations left over. This procedure has the advantage that the vector $\vec{X}^*$ has the same autocovariance as $\vec{X}$, so it can be used to estimate $\gamma$ and consequently $V(\widehat \theta)$ according to chapter \ref{sec:time_series}. See figure \ref{fig:tsboot_code} for sample code which follows the description given above. The code is also available for download from \texttt{github.com/computative/resample} . +%Les mer på https://epubs.siam.org/doi/abs/10.1137/1.9781611970319.ch1 +\begin{figure} +\begin{center} +\begin{lstlisting}[language=python] + # tsboot.py + + def tsboot(data,statistic,R,l): + t = zeros(R); n = len(data); k = ceil(float(n)/l); + inds = arange(n); t0 = time() + + # time series bootstrap + for i in range(R): + # construct bootstrap sample from + # k chunks of data. The chunksize is l + _data = concatenate([data[j:j+l] for j in randint(0,n-l,k)])[0:n]; + t[i] = statistic(_data) + + return t + + # define a function which returns your chosen estimator theta-hat + def stat(data): + theta-hat = mean(data) + return theta-hat + + t = tsboot(X, stat, 2**12, 2**10) + + +\end{lstlisting} \caption{The code follows the algorithm outlined in the text. Consider first the function \texttt{tsboot()}. In the \texttt{for}-loop, this function repeatedly estimates the function called \texttt{statistic()} under the resampled data by concatenating chunks of the data which are uncorrelated by \texttt{concatenate([data[j:j+l] for j in randint(0,n-l,k)])[0:n]}. The function \texttt{statistic()} is passed as an argument to \texttt{tsboot()}. The array \texttt{t} is eventually returned, which contains all the estimates $\widehat{\vec{\theta}}$, and can be plotted or analysed in other ways, such as by calling \texttt{std(t)} from \texttt{numpy} to estimate the standard error of $\widehat{\vec{\theta}}$. The function \texttt{std(t)} is just the estimator $\widehat{\sigma}^2$.}\label{fig:tsboot_code} +\end{center} +\end{figure} +%\subsubsection{Cross validation} +\subsection{Manual blocking method} +The manual blocking method was made popular by Flyvbjerg and Pedersen (1989) and has become one of the standard ways to estimate $V(\widehat{\theta})$ for exactly one $\widehat{\theta}$, namely $\widehat{\theta} = \overline{X}$. Their paper has become a citation classic (cited more than 1000 times according to Google scholar). But the proof given by Flyvbjerg and Pedersen (1989) is not rigorous. I corresponded with Associate professor Flyvbjerg in the summer of 2017 and it became clear to me that a paper on the blocking method with rigorous modern mathematics and numerics could be useful. Thus the missing proof of the manual blocking method is one of the main results of this thesis, and contained in the results, see theorem \ref{thm:blocking}. But this begs the question: What can then be said about the blocking method in the methods of this thesis? I think it is appropriate to give the idea of the blocking method, analogous to the treatment given for bootstrapping, as well as an overview of the mathematics of \textcite{flyvbjerg_error_1989}. +\begin{figure}[!htbp] +\hbox{\hspace{-1.7cm}\input{/home/marius/Dokumenter/master/figures/block_cov.tex} } + %\vspace{-40px} +\caption{In the left panel: A typical autocovariance function $\gamma(h)$ plotted against $h$. The dashed lines illustrate how $\gamma_{k}(h) \leq \gamma_{k-1}(h)$ for all $1 \leq k \leq d-1$ in the case of applying blocking transformation. In fact, the results show that $\gamma_k$ converges to the zero-function of $\mathbb{N}$.\\ +\\ +In the right panel: It is a consequence of the behavior $\gamma_{k}(h) \leq \gamma_{k-1}(h)$ that for all $1 \leq k \leq d-1$ we have $\sigma_{k}^2/n_{k} \geq \sigma_{k-1}^2/n_{k-1}$ for all $1 \leq k \leq d-1$. The solid line is the "unestimated estimate", ${\sigma}^2_k/n_k$. That is, the estimate of $V(\overline{X})$ where the only source of error is the truncation error $e_k$. It is clear that this estimate initially is too optimistic (too small), and then as we apply blocking transformations, the estimate rises up to the correct value. By equation \eqref{eq:stationary}, it is clear that this means that ${\sigma}^2_k/n_k$ becomes constant, as we clearly see in the plot. \\ +\\ +The dashed line is the estimat\textit{or} $\widehat{\sigma}^2_k/n_k$ which contains an extra error since ${\sigma}^2_k$ itself is unknown and has to be estimated. As $k \to d$ (here $d=20$), we have $n_k\to 1$, and so the \textit{standard error} of $V(\widehat \sigma_k^2/n_k)$ becomes very large according to equation \eqref{eq:departure}. We see this in the figure, because the estimate starts to depart from the value ${\sigma}^2_k/n_k$. This is the reason it is important to stop the algorithm at the right time. This can done with a plot, like the one above, or using the automated scheme proposed here which takes care of everything for you. \\ +\\ +In this case it is relatively clear from the plot of $\widehat \sigma_k^2/n_k$ for which $k$ we have that $\sigma_k^2/n_k$ becomes constant. However if the amount of data is smaller, i.e. $n_k$ is small, this becomes more difficult to determine, because then the estimator $\widehat{\sigma}^2_k/n_k$ diverges sooner. Perhaps even before the graph of $\sigma_k^2/n_k$ becomes constant.} \label{fig:block_cov} +\end{figure}\\ +\\ +Assume $n = 2^d$ for some integer $d>1$ and $X_1,X_2,\cdots, X_n$ is a stationary time series to begin with. This guarantees that $\gamma(h)$ exists according to section \ref{sec:time_series}. Moreover, assume that the time series is asymptotically uncorrelated. We switch to vector notation by arranging $X_1,X_2,\cdots,X_n$ in an $n$-tuple. Define: +\begin{align*} +\vec{X} = (X_1,X_2,\cdots,X_n). +\end{align*} +The strength of the blocking method is evident when the number of observations, $n$ is large. For large $n$, the complexity of dependent bootstrapping scales poorly, but the blocking method does not, moreover, it becomes more accurate the larger $n$ is, as the results will show. As such the method is relatively ad-hoc. We now define blocking transformations. The idea is to take the mean of subsequent pair of elements from $\vec{X}$ and form a new vector $\vec{X}_1$. Continuing in the same way by taking the mean of subsequent pairs of elements of $\vec{X}_1$ we obtain $\vec{X}_2$, and so on. In accordance with \textcite{flyvbjerg_error_1989} define $\vec{X}_i$ recursively by: +\begin{align} +(\vec{X}_0)_k &\equiv (\vec{X})_k \nonumber \\ +(\vec{X}_{i+1})_k &\equiv \frac{1}{2}\Big( (\vec{X}_i)_{2k-1} + (\vec{X}_i)_{2k} \Big) \qquad \text{for all} \qquad 1 \leq i \leq d-1 \label{eq:blocking} +\end{align} +In this way, we say that $\vec{X}_k$ is subject to $k$ \defn{blocking transformations}\index{blocking transformation}. We now have $d$ vectors $\vec{X}_0, \vec{X}_1,\cdots,\vec X_{d-1}$ containing the subsequent averages of observations. It turns out that if the components of $\vec{X}$ is a stationary time series, then the components of $\vec{X}_i$ is a stationary time series for all $0 \leq i \leq d-1$ (see lemma \ref{lem:init} or \textcite{flyvbjerg_error_1989} ). And so we can compute the autocovariance, the variance, sample mean, and number of observations for each $i$. Let $\gamma_i, \sigma_i^2, \overline{X}_i$ denote the autocovariance, variance and average of the elements of $\vec{X}_i$ and let $n_i$ be the number of elements of $\vec{X}_i$. It follows by induction that $n_i = n/2^i$. Using the definition of the blocking transformation and the distributive property of the covariance, it is clear that since $h = |i-j|$\index[s]{gammak@$\gamma_k(h) $ autocovariance of $\vec{X}_k$}\index[s]{sigmak@$\sigma_k^2$ variance of elements in $\vec{X}_k$}\index[s]{Xk@$\overline{X}_k$ mean of elements of $\vec{X}_k$}\index[s]{Xk@$\vec{X}_k$ time series subject to $k$ blocking transformations}\index[s]{n@$n$ usually size of $\vec{X}$}\index[s]{nk@$n_k$ size of $\vec{X}_k$} +\begin{align} +\gamma_{k+1}(h) &= \cov\left( ({X}_{k+1})_{i}, ({X}_{k+1})_{j} \right) \nonumber \\ +&= \frac{1}{4}\cov\left( ({X}_{k})_{2i-1} + ({X}_{k})_{2i}, ({X}_{k})_{2j-1} + ({X}_{k})_{2j} \right) \nonumber \\ +&= +\begin{cases} +\frac{1}{2}\gamma_{k}(2h) + \frac{1}{2}\gamma_k(2h+1) \qquad\qquad\quad \ \ \text{if $h = 0$} \\ +\frac{1}{4}\gamma_k(2h-1) + \frac{1}{2}\gamma_k(2h) + \frac{1}{4}\gamma_k(2h+1) \quad \text{else} +\end{cases}. + \label{eq:gammas} +\end{align} +According to lemma \ref{lem:init}, since $\vec{X}$ is asymptotic uncorrelated by assumption, $\vec{X}_k$ is also asymptotic uncorrelated. Let's turn our attention to the variance of the sample mean $V(\overline{X})$. According to equation \eqref{eq:varepsilon} we have +\begin{align} +V(\overline{X}_k) = \frac{\sigma_k^2}{n_k} + \underbrace{\frac{2}{n_k} \sum_{h=1}^{n_k-1}\left( 1 - \frac{h}{n_k} \right)\gamma_k(h)}_{\equiv e_k} = \frac{\sigma^2_k}{n_k} + e_k \quad \text{if} \quad \gamma_k(0) = \sigma_k^2. \label{eq:varepsilon} +\end{align} +The term $e_k$ is called the \defn{truncation error}\index{truncation error}: +\begin{equation} +e_k = \frac{2}{n_k} \sum_{h=1}^{n_k-1}\left( 1 - \frac{h}{n_k} \right)\gamma_k(h). \label{eq:error} +\end{equation} +We show that $V(\overline{X}_i) = V(\overline{X}_j)$ for all $0 \leq i \leq d-1$ and $0 \leq j \leq d-1$. This follows by induction. For the induction step write: +\begin{align} +n_{j+1} \overline{X}_{j+1} &= \sum_{i=1}^{n_{j+1}} (\vec{X}_{j+1})_i \stackrel{ \eqref{eq:blocking} }{=} \frac{1}{2}\sum_{i=1}^{n_{j}/2} (\vec{X}_{j})_{2i-1} + (\vec{X}_{j})_{2i} \nonumber \\ +&= \frac{1}{2}\left[ (\vec{X}_j)_1 + (\vec{X}_j)_2 + \cdots + (\vec{X}_j)_{n_j} \right] = \underbrace{\frac{n_j}{2}}_{=n_{j+1}} \overline{X}_j = n_{j+1}\overline{X}_j. +\label{eq:means} +\end{align} +And so by repeated use of this equation we get $V(\overline{X}_i) = V(\overline{X}_0) = V(\overline{X})$ for all $0 \leq i \leq d-1$. This has the consequence that +\begin{align} +V(\overline{X}) = \frac{\sigma_k^2}{n_k} + e_k \qquad \text{for all} \qquad 0 \leq k \leq d-1. \label{eq:convergence} +\end{align} +\textcite{flyvbjerg_error_1989} claims that the sequence $\{e_k\}_{k=0}^{d-1}$ is decreasing, and conjecture that the term $e_k$ can be made as small as we would like by making $k$ (and hence $d$) sufficiently large. The sequence is decreasing because it is possible to show (as we will in proposition \ref{prop:uniform}) that $\gamma_k$ converges uniformly to the zero-function on $\mathbb{N}$. That means we can apply blocking transformations until $e_k$ is sufficiently small, and then estimate $V(\overline{X})$ by $\widehat{\sigma}^2_k/n_k$. Moreover, since $\gamma_k$ converges uniformly to the zero function on $\mathbb{N}$, see figure \ref{fig:block_cov} for an illustration.\\ +\\ +It is natural then to think the best estimate we could then make is $\widehat{\sigma}^2_{d-1}/n_{d-1}$. One could expect this because if $k = d-1$, then the truncation error $e_{d-1} \leq e_k$ for all $k \geq d-1$. But there is a problem with this, as we shall see next: If $k \to d-1$, then $V(\widehat{\sigma}^2_{d-1}/n_{d-1})$ grows to an appreciable size, and so the standard error of $\widehat{\sigma}^2_{d-1}/n_{d-1}$ can become unacceptably large. In that case, $\widehat{\sigma}^2_{d-1}/n_{d-1}$ is not very useful \parencite{flyvbjerg_error_1989}.\\ +\\ +The idea of \textcite{flyvbjerg_error_1989} is that if the conditions of the central limit theorem for dependent random variables are satisfied, see theorem \ref{thm:clt2}, then the components of $\vec{X}_k$ are asymptotically independent identically normal distributed as $k$ grows. The asymptotic independence follows by theorem \ref{thm:independent_iff_uncorrelated} because each elements of $\vec{X}_k$ is the mean of random variables which are asymptotic uncorrelated, as we explained above. In this case, it is immediate by theorem \ref{thm:S2chi} that +\begin{align} +V\left( \frac{\widehat{\sigma}_k^2}{n_k} \right) &= 2 \frac{\sigma_k^4}{n_k^4}(n-1) = \underbrace{\left(\frac{\sigma^2}{n_k} \right)^2}_{(V(\overline{X})- e_k)^2} 2\frac{n_k-1}{n_k^2} = \Big(V(\overline{X}) - e_k\Big)^2\frac{2}{n_k}\underbrace{\left( 1 - \frac{1}{n_k} \right)}_{\geq 1/n_k} \nonumber \\ +&\geq \Big(V(\overline{X}) - e_k\Big)^2\frac{2}{n_k^2}, \label{eq:departure} +\end{align} +since the truncation error $e_k$ is decreasing toward zero, this shows that the standard error of $\widehat \sigma_k^2/n_k$ grows as $n_k$ decreases. This may seem as bad news, because then the estimate of $V(\overline{X})$ has a relatively large error due to the standard error of $\widehat{\sigma}_k^2/n_k$ even though the truncation error $e_k$ is small. The question then is, how can we find the ideal $k$ such that essentially $e_k = 0$, but simultaneously ensure that the standard error of $\widehat{\sigma}^2_k/n_k$ is as small as possible? Assume $j \geq k$, and $e_k = 0$, then also $e_j$ must be zero and so it is possible to interpret from \textcite{flyvbjerg_error_1989} that +\begin{align} +0 &= |0| = |V(\overline{X}) - V(\overline{X})| = |V(\overline{X}_0) - V(\overline{X}_0)| \stackrel{ \eqref{eq:means} }{=} |V(\overline{X}_j) - V(\overline{X}_k)| \nonumber \\ +&\stackrel{ \eqref{eq:varepsilon} }{=} \Big|\frac{\sigma_j^2}{n_j} + \underbrace{e_k}_{=0} - \frac{\sigma_k^2}{n_k} - e_k \Big| = \Big|\frac{\sigma_j^2}{n_j} - \frac{\sigma_k^2}{n_k} \Big|. \label{eq:stationary} +\end{align} +That means that there could be some point on the graph of $\sigma_k^2/n_k$ where $\sigma_k^2/n_k$ become constant. See figure \ref{fig:block_cov} for a demonstration of what this looks like in practice. Manual blocking is exactly this, to plot the graph of $\sigma_k^2/n_k$ against $k$, and hope to find a stationary point where $\sigma_k^2/n_k$ becomes constant. The stationary point on this graph is where you stop increasing $k$. \\ +\\ +Despite using a few results from the present thesis to justify the claims, the above is my interpretation of \textcite{flyvbjerg_error_1989}. As you can see, it is not at all mathematically precise, but the results of this thesis will fix this and proposes an automated way to estimate $V(\overline{X})$.

    +Give an interpretation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. diff --git a/doc/Projects/2018/hw2/ipynb/ipynb-hw2-src.tar.gz b/doc/Projects/2018/hw2/ipynb/ipynb-hw2-src.tar.gz index eddf88e9ac632bd4f11a05b825b072182e4eb6a8..dda671634a7ce1694cfc77fac4167cf1504b5782 100644 GIT binary patch literal 207 zcmV;=05Ja_iwFQo?2lUj1MSbjY63A3#&OR+#XP~1?5^v%P!Api5nmv((M?+uO(ME) z-&LVK)ti*k|L^iK!!XROW-qUcS&=V!^fXGTrmp3h(`Ir@Ro?3xtxM5WRaeud(OQcd ziisMDdfrLjPAQu>oYK8npRE6JZW!BcAMClmB47DOtUH%vzU*@sy!epqCWLqC&Sl{a zz28V1Y`XR(+T+PZE5`R?+SX+ky!jX(V%SBqPsRARKLG#$0000000000004mhHG005Z`V@Lo1 literal 207 zcmb2|=3wZ#(;v;i{Pw(W7L%huTjKS3i~J0}{Mp6#;!vx?Bb|KnAcGJ4YZ#+4>WmpQ G7#INHYheoj diff --git a/doc/Projects/2018/hw2/pdf/hw2.p.tex b/doc/Projects/2018/hw2/pdf/hw2.p.tex index 7ba297184..101bd04f8 100644 --- a/doc/Projects/2018/hw2/pdf/hw2.p.tex +++ b/doc/Projects/2018/hw2/pdf/hw2.p.tex @@ -211,11 +211,13 @@ Discuss these quantities as functions of the variable $\lambda$ in the Ridge and \subsection{Exercise 5} Using the singular value decomposition, show that the variance of the direction vector -$\hat{z}_i=\hat{X}\hat{v}_i$ is equal to (equation (3.49) of Hastie \emph{et al.}) +$\hat{z}_i=\hat{X}\hat{v}_i=\hat{u}_1d_1$ is equal to (equation (3.49) of Hastie \emph{et al.}) \[ \mathrm{Var}(\hat{z}_i)=\frac{d_i^2}{N}, \] -where $d_i$ are the singular values of the matrix $\hat{X}$. Give an interpretation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. +where $d_i$ are the singular values of the matrix $\hat{X}$. In Hastie \emph{et al}, the matrix elements of $X$ are centered. The consequence is that the mean values of for example $\hat{u}_i$ are zero. + +Give an interpretation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. % ------------------- end of main content --------------- diff --git a/doc/Projects/2018/hw2/pdf/hw2.pdf b/doc/Projects/2018/hw2/pdf/hw2.pdf index fd9334f70031d9bec14058f19f6f1f9682f17753..7fbb0fe019d42440a70eb6064227153ad0e46a69 100644 GIT binary patch delta 14814 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 delta 14400 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 diff --git a/doc/Projects/2018/hw2/pdf/hw2.tex b/doc/Projects/2018/hw2/pdf/hw2.tex index bb1c897c9..8670ad27a 100644 --- a/doc/Projects/2018/hw2/pdf/hw2.tex +++ b/doc/Projects/2018/hw2/pdf/hw2.tex @@ -181,11 +181,13 @@ Discuss these quantities as functions of the variable $\lambda$ in the Ridge and \subsection*{Exercise 5} Using the singular value decomposition, show that the variance of the direction vector -$\hat{z}_i=\hat{X}\hat{v}_i$ is equal to (equation (3.49) of Hastie \emph{et al.}) +$\hat{z}_i=\hat{X}\hat{v}_i=\hat{u}_1d_1$ is equal to (equation (3.49) of Hastie \emph{et al.}) \[ \mathrm{Var}(\hat{z}_i)=\frac{d_i^2}{N}, \] -where $d_i$ are the singular values of the matrix $\hat{X}$. Give an interpretation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. +where $d_i$ are the singular values of the matrix $\hat{X}$. In Hastie \emph{et al}, the matrix elements of $X$ are centered. The consequence is that the mean values of for example $\hat{u}_i$ are zero. + +Give an interpretation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. % ------------------- end of main content --------------- diff --git a/doc/src/Projects/2018/Exercises/hw2.do.txt b/doc/src/Projects/2018/Exercises/hw2.do.txt index 2b6e8071f..987cef3ec 100644 --- a/doc/src/Projects/2018/Exercises/hw2.do.txt +++ b/doc/src/Projects/2018/Exercises/hw2.do.txt @@ -54,10 +54,12 @@ Discuss these quantities as functions of the variable $\lambda$ in the Ridge and ===== Exercise 5 ===== Using the singular value decomposition, show that the variance of the direction vector -$\hat{z}_i=\hat{X}\hat{v}_i$ is equal to (equation (3.49) of Hastie *et al.*) +$\hat{z}_i=\hat{X}\hat{v}_i=\hat{u}_1d_1$ is equal to (equation (3.49) of Hastie *et al.*) !bt \[ \mathrm{Var}(\hat{z}_i)=\frac{d_i^2}{N}, \] !et -where $d_i$ are the singular values of the matrix $\hat{X}$. Give an interpretation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. +where $d_i$ are the singular values of the matrix $\hat{X}$. In Hastie *et al*, the matrix elements of $X$ are centered. The consequence is that the mean values of for example $\hat{u}_i$ are zero. + +Give an interpretation of these results, in particular in connection with the variance of the coefficients you obtained in the previous exercise. From eb9bc8a6eae0eec4f717a23ee8ee393f97ada97e Mon Sep 17 00:00:00 2001 From: mhjensen Date: Wed, 5 Sep 2018 22:28:34 +0200 Subject: [PATCH 07/12] Update on regression slides --- doc/src/Regression/Regression.do.txt | 197 ++++++++++----------------- 1 file changed, 74 insertions(+), 123 deletions(-) diff --git a/doc/src/Regression/Regression.do.txt b/doc/src/Regression/Regression.do.txt index f57d66c11..216fda678 100644 --- a/doc/src/Regression/Regression.do.txt +++ b/doc/src/Regression/Regression.do.txt @@ -18,6 +18,39 @@ A regression model aims at finding a likelihood function $p(y\vert \hat{x})$, th !eblock + +Consider an experiment in which $p$ characteristics of $n$ samples are +measured. The data from this experiment are denoted $\mathbf{X}$, with +$\mathbf{X}$ as above. The matrix $\mathbf{X}$ is called the *design +matrix*. Additional information of the samples is available in the +form of $\mathbf{Y}$ (also as above). The variable $\mathbf{Y}$ is +generally referred to as the *response variable*. The aim of +regression analysis is to explain $\mathbf{Y}$ in terms of +$\mathbf{X}$ through a functional relationship like $Y_i = +f(\mathbf{X}_{i,\ast})$. When no prior knowledge on the form of +$f(\cdot)$ is available, it is common to assume a linear relationship +between $\mathbf{X}$ and $\mathbf{Y}$. This assumption gives rise to +the *linear regression model*: + +In model (ref{form.linRegressionModel}) $\beta = (\beta_1, \ldots, +\beta_p)^{\top}$ is the *regression parameter*. The parameter +$\beta_j$, $j=1, \ldots, p$, represents the effect size of covariate +$j$ on the response. That is, for each unit change in covariate $j$ +(while keeping the other covariates fixed) the observed change in the +response is equal to $\beta_j$. The second summand on the right-hand +side of the model, $\varepsilon_i$, is referred to as the error. It +represents the part of the response not explained by the functional +part $\mathbf{X}_{i,\ast} \, \beta$ of the model +(ref{form.linRegressionModel}). In contrast to the functional part, +which is considered to be systematic (i.e. non-random), the error is +assumed to be random. Consequently, $Y_{i_1,\ast}$ need not equal +$Y_{i_2,\ast}$ for $i_1 \not= i_2$, even if $\mathbf{X}_{i_1,\ast}= +\mathbf{X}_{i_2,\ast}$. To complete the formulation of model +(ref{form.linRegressionModel}) we need to specify the probability +distribution of $\varepsilon_i$. + + + !split ===== General linear models ===== !bblock @@ -1090,6 +1123,8 @@ probability plot. + + !split ===== The singular value decompostion ===== !bblock @@ -1109,9 +1144,6 @@ We have then !eblock -!split -===== Ridge regression ===== - !split ===== Lasso regression ===== @@ -1208,67 +1240,22 @@ plt.show() -Consider an experiment in which $p$ characteristics of $n$ samples are -measured. The data from this experiment are denoted $\mathbf{X}$, with -$\mathbf{X}$ as above. The matrix $\mathbf{X}$ is called the *design -matrix*. Additional information of the samples is available in the -form of $\mathbf{Y}$ (also as above). The variable $\mathbf{Y}$ is -generally referred to as the *response variable*. The aim of -regression analysis is to explain $\mathbf{Y}$ in terms of -$\mathbf{X}$ through a functional relationship like $Y_i = -f(\mathbf{X}_{i,\ast})$. When no prior knowledge on the form of -$f(\cdot)$ is available, it is common to assume a linear relationship -between $\mathbf{X}$ and $\mathbf{Y}$. This assumption gives rise to -the *linear regression model*: -!bt -\begin{align} -Y_{i} & = \mathbf{X}_{i,\ast} \, \beta + \varepsilon_i label{form.linRegressionModel} -\\ -\nonumber -& = \beta_1 \, X_{i,1} + \ldots + \beta_{p} \, X_{i, p} + \varepsilon_i. -\end{align} -!et - -In model (ref{form.linRegressionModel}) $\beta = (\beta_1, \ldots, -\beta_p)^{\top}$ is the *regression parameter*. The parameter -$\beta_j$, $j=1, \ldots, p$, represents the effect size of covariate -$j$ on the response. That is, for each unit change in covariate $j$ -(while keeping the other covariates fixed) the observed change in the -response is equal to $\beta_j$. The second summand on the right-hand -side of the model, $\varepsilon_i$, is referred to as the error. It -represents the part of the response not explained by the functional -part $\mathbf{X}_{i,\ast} \, \beta$ of the model -(ref{form.linRegressionModel}). In contrast to the functional part, -which is considered to be systematic (i.e. non-random), the error is -assumed to be random. Consequently, $Y_{i_1,\ast}$ need not equal -$Y_{i_2,\ast}$ for $i_1 \not= i_2$, even if $\mathbf{X}_{i_1,\ast}= -\mathbf{X}_{i_2,\ast}$. To complete the formulation of model -(ref{form.linRegressionModel}) we need to specify the probability -distribution of $\varepsilon_i$. - -======= Ridge regression ======= - -When the design matrix is high-dimensional, the covariates (the -columns of $\mathbf{X}$) are super-collinear. Recall *collinearity* in -regression analysis refers to the event of two (or multiple) -covariates being highly linearly related. Consequently, the subspace -spanned by collinear covariates may not be (or close to not being) of -full rank. When the subspace (onto which $\mathbf{Y}$ is projected) -is (close to) rank deficient, it is (almost) impossible to separate -the contribution of the individual covariates. The uncertainty with -respect to the covariate responsible for the variation explained in -$\mathbf{Y}$ is often reflected in the fit of the linear regression -model to data by a large error of the estimates of the regression -parameters corresponding to the collinear covariates. -Consider the design matrix: +!split +===== From standard regression to Ridge regressions ===== +One of the typical problems we encounter with linear regression, in particular +when the matrix $\hat{X}$ (our so-called design matrix) is high-dimensional, +are problems with near singular or singular matrices. The column vectors of $\hat{X}$ +may be linearly dependent, normally referred to as super-collinearity. +This means that the matrix may be rank deficient and it is basically impossible to +to model the data using linear regression. As an example, consider the matrix !bt \begin{align*} -\mathbf{X} & = \left( +\mathbf{X} & = \left[ \begin{array}{rrr} 1 & -1 & 2 \\ @@ -1277,92 +1264,56 @@ Consider the design matrix: 1 & 2 & -1 \\ 1 & 1 & 0 -\end{array} \right) +\end{array} \right] \end{align*} !et -The columns of $\mathbf{X}$ are linearly dependent: the first column -is the row-wise sum of the other two columns. The rank (more correct, -the column rank) of a matrix is the dimension of space spanned by the +The columns of $\hat{X}$ are linearly dependent. We se this easily since the +the first column is the row-wise sum of the other two columns. The rank (more correct, +the column rank) of a matrix is the dimension of the space spanned by the column vectors. Hence, the rank of $\mathbf{X}$ is equal to the number -of linearly independent columns: $\mbox{rank}(\mathbf{X}) = 2$. +of linearly independent columns. In this particular case the matrix has rank 2. - - - -Super-collinearity of an $(n \times p)$-dimensional design matrix $\mathbf{X}$ implies[^footnote1][^footnote1]: If the (column) rank of $\mathbf{X$ is smaller than $p$, there exists a non-trivial $\mathbf{v} \in \mathbb{R}^p$ such that $\mathbf{X} \mathbf{v} = \mathbf{0}_{p}$. Multiplication of this inequality by $\mathbf{X}^{\top}$ yields $\mathbf{X}^{\top} \mathbf{X} \mathbf{v} = \mathbf{0}_{p}$. As $\mathbf{v} \not= \mathbf{0}_{p}$, this implies that $\mathbf{X}^{\top} \mathbf{X}$ is not invertible.} that the rank of the $(p \times p)$-dimensional matrix $\mathbf{X}^{\top} \mathbf{X}$ is smaller than $p$, and, consequently, it is singular. A square matrix that does not have an inverse is called *singular*. A matrix $\mathbf{A}$ is singular if and only if its determinant is zero: $\mbox{det}(\mathbf{A}) = 0$. - - - -Consider the matrix $\mathbf{A}$ given by: +Super-collinearity of an $(n \times p)$-dimensional design matrix $\mathbf{X}$ implies +that the inverse of the matrix $\hat{X}^T\hat{x}$ (the matrix we needto invert to solve the linear regression equations) is non-invertible. If we have a square matrix that does not have an inverse, we say this matrix singular. The example here demonstrates this !bt \begin{align*} -\mathbf{A} & = \left( +\hat{X} & = \left[ \begin{array}{rr} -1 & 2 +1 & -1 \\ -2 & 4 -\end{array} \right) +1 & -1 +\end{array} \right]. \end{align*} !et -Clearly, $\mbox{det}(\mathbf{A}) = a_{11} a_{22} - a_{12} a_{21} = 1 \times 4 - 2 \times 2 = 0$. Hence, $\mathbf{A}$ is singular and its inverse is undefined. +We see easily that $\mbox{det}(\hat{X}) = x_{11} x_{22} - x_{12} x_{21} = 1 \times (-1) - 1 \times (-1) = 0$. Hence, $\mathbf{X}$ is singular and its inverse is undefined. +This equivalent to saying that the matrix $\hat{X}$ has at least an eigenvalue which is zero. -As $\mbox{det}(\mathbf{A})$ is equal to the product of the eigenvalues -$\nu_j$ of $\mathbf{A}$, the matrix $\mathbf{A}$ is singular if one -(or more) of the eigenvalues of $\mathbf{A}$ is zero. To see this, -consider the spectral decomposition of $\mathbf{A}$: - -!bt -\begin{align*} -\mathbf{A} & = \sum_{j=1}^p \nu_j \, \mathbf{v}_j \, \mathbf{v}_j^{\top}, -\end{align*} -!et -where $\mathbf{v}_j$ is the eigenvector corresponding to $\nu_j$. The inverse of $\mathbf{A}$ is then: -!bt -\begin{align*} -\mathbf{A}^{-1} & = \sum_{j=1}^p \nu_j^{-1} \, \mathbf{v}_j \, \mathbf{v}_j^{\top}. -\end{align*} -!et - -The right-hand side is undefined if $\nu_j =0$ for any $j$. - - -Matrix $\mathbf{A}$ has eigenvalues $\nu_1 =5$ and $\nu_2=0$. According to the spectral decomposition, the inverse of $\mathbf{A}$ is: -!bt -\begin{align*} -\mathbf{A}^{-1} & = \frac{1}{5} \, \mathbf{v}_1 \, \mathbf{v}_1^{\top} + \frac{1}{0} \, \mathbf{v}_2 \, \mathbf{v}_2^{\top}. -\end{align*} -!et - -This expression is undefined as we divide by zero in the second summand on the right-hand side. - - - -In summary, the columns of a high-dimensional design matrix -$\mathbf{X}$ are linearly dependent and this super-collinearity causes -$\mathbf{X}^{\top} \mathbf{X}$ to be singular. Now recall the ML -estimator of the parameter of the linear regression model: +!split +===== Fixing the singularity ===== +If our design matrix $\hat{X}$ which enters the linear regression problem !bt \begin{align} -\hat{\beta} & = (\mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}. +\hat{\beta} & = (\hat{X}^{T} \hat{X})^{-1} \hat{X}^{T} \hat{y}, \end{align} !et +has linearly dependent column vectors, we will not be able to compute the inverse +of $\hat{X}^T\hat{X}$ and we cannot find the parameters (estimators) $\beta_i$. +The estimators are only well-defined if $(\hat{X}^{T}\hat{X})^{-1}$ exits. +This is more likely to happen when the matrix $\hat{X}$ is high-dimensional. In this case it is likely to encounter a situation where +the regression parameters $\beta_i$ cannot be estimated. - -This estimator is only well-defined if $(\mathbf{X}^{\top} -\mathbf{X})^{-1}$ exits. Hence, when $\mathbf{X}$ is high-dimensional -the regression parameter $\beta$ cannot be estimated. - - -Above only the practical consequence of high-dimensionality is presented: the expression $( \mathbf{X}^{\top} \mathbf{X})^{-1} \mathbf{X}^{\top} \mathbf{Y}$ cannot be evaluated numerically. But the problem arising from the high-dimensionality of the data is more fundamental. To appreciate this, consider the normal equations: - +The *ad hoc* which was introduced in the 70s was simply to add a diagonal component to the matrix to invert, that is we change !bt -\begin{align*} -\mathbf{X}^{\top} \mathbf{X} \beta & = \mathbf{X}^{\top} \mathbf{Y}. -\end{align*} -!et +\[ +\hat{X}^{T} \hat{X} \rightarrow \hat{X}^{T} \hat{X}+\lambda \hat{I}, +\] +!et +where $\hat{I}$ is the identity matrix. +!split +===== The matrix $\mathbf{X}^{\top} \mathbf{X}$ is of rank $n$, while $\beta$ is a vector of length $p$. Hence, while there are $p$ unknowns, the system of linear equations from which these are to be solved effectively comprises $n$ degrees of freedom. If $p > n$, the vector $\beta$ cannot uniquely be determined from this system of equations. To make this more specific let $U$ be the $n$-dimensional space spanned by the columns of $\mathbf{X}$ and the $p-n$-dimensional space $V$ be orthogonal complement of $U$, i.e. $V = U^{\perp}$. Then, $\mathbf{X} \mathbf{v} = \mathbf{0}_{p}$ for all $\mathbf{v} \in V$. So, $V$ is the non-trivial null space of $\mathbf{X}$. Consequently, as $\mathbf{X}^{\top} \mathbf{X} \mathbf{v} = \mathbf{X}^{\top} \mathbf{0}_{p} = \mathbf{0}_{n}$, the solution of the normal equations is: From f5b9eb32a26d34cf37cd92f11df41a01da17a3df Mon Sep 17 00:00:00 2001 From: mhjensen Date: Thu, 6 Sep 2018 11:28:45 +0200 Subject: [PATCH 08/12] update on regression analysis --- .../Regression/html/._Regression-bs000.html | 155 +- .../Regression/html/._Regression-bs001.html | 153 +- .../Regression/html/._Regression-bs002.html | 179 +- .../Regression/html/._Regression-bs003.html | 172 +- .../Regression/html/._Regression-bs004.html | 192 +- .../Regression/html/._Regression-bs005.html | 195 +- .../Regression/html/._Regression-bs006.html | 180 +- .../Regression/html/._Regression-bs007.html | 181 +- .../Regression/html/._Regression-bs008.html | 177 +- .../Regression/html/._Regression-bs009.html | 182 +- .../Regression/html/._Regression-bs010.html | 178 +- .../Regression/html/._Regression-bs011.html | 167 +- .../Regression/html/._Regression-bs012.html | 176 +- .../Regression/html/._Regression-bs013.html | 172 +- .../Regression/html/._Regression-bs014.html | 167 +- .../Regression/html/._Regression-bs015.html | 170 +- .../Regression/html/._Regression-bs016.html | 172 +- .../Regression/html/._Regression-bs017.html | 187 +- .../Regression/html/._Regression-bs018.html | 224 +- .../Regression/html/._Regression-bs019.html | 178 +- .../Regression/html/._Regression-bs020.html | 206 +- .../Regression/html/._Regression-bs021.html | 221 +- .../Regression/html/._Regression-bs022.html | 176 +- .../Regression/html/._Regression-bs023.html | 176 +- .../Regression/html/._Regression-bs024.html | 184 +- .../Regression/html/._Regression-bs025.html | 202 +- .../Regression/html/._Regression-bs026.html | 204 +- .../Regression/html/._Regression-bs027.html | 199 +- .../Regression/html/._Regression-bs028.html | 178 +- .../Regression/html/._Regression-bs029.html | 187 +- .../Regression/html/._Regression-bs030.html | 212 +- .../Regression/html/._Regression-bs031.html | 226 +- .../Regression/html/._Regression-bs032.html | 185 +- .../Regression/html/._Regression-bs033.html | 204 +- .../Regression/html/._Regression-bs034.html | 258 +- .../Regression/html/._Regression-bs035.html | 180 +- .../Regression/html/._Regression-bs036.html | 236 +- .../Regression/html/._Regression-bs037.html | 207 +- .../Regression/html/._Regression-bs038.html | 307 +++ .../Regression/html/._Regression-bs039.html | 392 +++ .../Regression/html/._Regression-bs040.html | 304 +++ .../Regression/html/._Regression-bs041.html | 291 +++ .../Regression/html/._Regression-bs042.html | 365 +++ .../Regression/html/._Regression-bs043.html | 327 +++ .../Regression/html/._Regression-bs044.html | 278 +++ .../Regression/html/._Regression-bs045.html | 275 +++ doc/pub/Regression/html/Regression-bs.html | 155 +- .../Regression/html/Regression-reveal.html | 656 ++++- .../Regression/html/Regression-solarized.html | 725 ++++-- doc/pub/Regression/html/Regression.html | 725 ++++-- doc/pub/Regression/ipynb/Regression.ipynb | 916 ++++--- .../ipynb/ipynb-Regression-src.tar.gz | Bin 211 -> 211 bytes .../pdf/Regression-beamer-handouts2x3.pdf | Bin 345650 -> 389595 bytes doc/pub/Regression/pdf/Regression-beamer.pdf | Bin 324702 -> 351781 bytes doc/pub/Regression/pdf/Regression-minted.pdf | Bin 341147 -> 391306 bytes doc/src/Regression/Regression.do.txt | 2135 ++--------------- 56 files changed, 9374 insertions(+), 5675 deletions(-) create mode 100644 doc/pub/Regression/html/._Regression-bs038.html create mode 100644 doc/pub/Regression/html/._Regression-bs039.html create mode 100644 doc/pub/Regression/html/._Regression-bs040.html create mode 100644 doc/pub/Regression/html/._Regression-bs041.html create mode 100644 doc/pub/Regression/html/._Regression-bs042.html create mode 100644 doc/pub/Regression/html/._Regression-bs043.html create mode 100644 doc/pub/Regression/html/._Regression-bs044.html create mode 100644 doc/pub/Regression/html/._Regression-bs045.html diff --git a/doc/pub/Regression/html/._Regression-bs000.html b/doc/pub/Regression/html/._Regression-bs000.html index 9560a3323..c92c12f8a 100644 --- a/doc/pub/Regression/html/._Regression-bs000.html +++ b/doc/pub/Regression/html/._Regression-bs000.html @@ -41,17 +41,14 @@ Automatically generated HTML file from DocOnce source @@ -152,42 +173,50 @@ MathJax.Hub.Config({ Contents