normalized gaussian random matrix preserves geometry in expectation

[[concept]]

[!themes] Topics

Evaluation Error: SyntaxError: Unexpected token '>'

at DataviewInlineApi.eval (plugin:dataview:19027:21)
at evalInContext (plugin:dataview:19028:7)
at asyncEvalInContext (plugin:dataview:19038:32)
at DataviewJSRenderer.render (plugin:dataview:19064:19)
at DataviewJSRenderer.onload (plugin:dataview:18606:14)
at DataviewJSRenderer.load (app://obsidian.md/app.js:1:1182416)
at DataviewApi.executeJs (plugin:dataview:19607:18)
at DataviewCompiler.eval (plugin:digitalgarden:10763:23)
at Generator.next (<anonymous>)
at eval (plugin:digitalgarden:90:61)

Important

Let GN(0,1)d×m and YRm×n. Now, define

G^:=1dG,Law(G^)=N(0,1d)d×m

Then

\begin{align} \mathbb{E}[\,\lvert \lvert \hat{G}y \rvert \rvert { #2} \,] &= \lvert \lvert y \rvert \rvert { #2} \\ \mathbb{E}[\,\langle \hat{G}y_{1}, \hat{G}y_{2} \rangle \,] &= \langle y_{1}, y_{2} \rangle \\ \mathbb{E}\left[ \,(\hat{G}Y)^{\intercal}(\hat{G}Y)\, \right] &= Y^{\intercal}Y \end{align}

ie, in expectation, G^ preserves the lengths, angles, and Gram matrices. That is, it preserves all the geometry of Rm

Line of Reasoning

Note that for any column of Y, say y=yi, we have

Expected Magnitude

\begin{align} \mathbb{E}[\lvert \lvert Gy \rvert \rvert { #2} ] &= \mathrm{Tr}(\text{Cov}(Gy) ) \\ &= d \lvert \lvert y \rvert \rvert { #2}

\end{align}$$

and for any y1,y2 columns of Y

Expected Direction

E[Gy1,Gy2]=Tr(Cov(Gy1,Gy2))=dy1,y2

And, looking at the Gram matrix,

Expected Gram Matrix

E[(GY)(GY)]=dYY

Caveats

Note

Note that this holds for any d, including dm and d=1. This is because we are taking expectations.

If y is selected first before we realize G^, then we hope that ||G^y|| will concentrate about ||y||. Our calculations for the joint show that

\text{Law}(\hat{G}y) = {\cal N}\left( 0, \frac{1}{d}\lvert \lvert y \rvert \rvert { #2} I_{d} \right)

So (with rescaling, obviously), our concentration inequality for magnitude of standard gaussian random vector holds and we should see the desired behavior.

If y does not depend on G^

Assuming we ensure G^y, the probability of actually preserving geometry depends on d.

Example

If d=1, then G^=g for some gN(0,Id). We still have

\mathbb{E}[\lvert \lvert \hat{G}y_{i} \rvert \rvert { #2} ] = \mathbb{E}[\langle g,y_{i} \rangle { #2} ] =\lvert \lvert y_{i} \rvert \rvert { #2}

But clearly g,yi2||yi||2 cannot hold simultaneously for many yi regardless of if we choose them before realizing G^.

Exercise

Construct some examples of this case

If y depends on G^...

If dm, then once G^ is realized, we can pick yNull(G^) so that 0=||G^y||||y||.

Review

#flashcards/math/rmt

Normalized gaussian random matrices preserve geometry (in expectation), BUT

Assuming we ensure G^y, the probability of {1||preserving geometry} depends on {2||the "output" dimension d}.

For G^N(0,1d)d×m and yRm, what is the (co)variance matrix of G^y?
-?-

\frac{1}{d} \lvert \lvert y \rvert \rvert { #2} I_{d}$$ <!--SR:!2025-11-21,14,170--> If $\hat{G} \sim {\cal N}\left( 0, \frac{1}{d} \right)^{\otimes d\times m}$, why do we need $y\in \mathbb{R}^m$ to be independent of $\hat{G}$ to preserve geometry if $d<m$? -?- Otherwise, we can choose $y \in \text{Null}(\hat{G})$ and then the norm is not preserved. <!--SR:!2025-12-05,48,250--> # References >[!references] ## See Also - ### Mentions > [!mentions]+ > > ```datacorejsx > const modules = await cJS() > > const COLUMNS = [ > { id: "Name", value: page => page.$link }, > { id: "Last Modified", value: page => modules.dateTime.getLastMod(page) }, > ]; > > return function View() { > const current = dc.useCurrentFile(); > // Selecting `#game` pages, for example. > let queryString = `@page and linksto(${current.$link})`; > let pages = dc.useQuery(queryString); > > // check types > pages = pages.filter( (p) => !modules.typeCheck.checkAll(p, current) ).sort() > > > return <dc.Table columns={COLUMNS} rows={pages} paging={20}/>; > } > ``` > ```datacorejsx const { dateTime } = await cJS() return function View() { const file = dc.useCurrentFile(); return <p class="dv-modified">Created {dateTime.getCreated(file)} ֍ Last Modified {dateTime.getLastMod(file)}</p> } ```