Variable transformation for a multivariate normal distribution

Click For Summary
SUMMARY

This discussion focuses on transforming random vectors sampled from an n-dimensional multivariate normal distribution using C++ and the GNU Scientific Library (GSL) function gsl_ran_multivariate_gaussian. The user seeks to convert vectors defined by the logarithmic transformation x = log(δ_i + 1) back to the original δ vectors. The transformation is achieved using the formula δ_i = e^(x_i) - 1, allowing for the generation of δ vectors directly from the sampled x vectors. The discussion also highlights the need for understanding covariance matrices in the context of variable transformations.

PREREQUISITES
  • Understanding of multivariate normal distributions
  • Familiarity with the GNU Scientific Library (GSL) version 2.6
  • Basic knowledge of C++ programming
  • Concept of covariance matrices in statistics
NEXT STEPS
  • Study the properties of multivariate normal distributions and their transformations
  • Learn how to use the GNU Scientific Library for statistical sampling
  • Research the derivation of covariance matrices for transformed variables
  • Explore literature on multivariate log-normal distributions and their applications
USEFUL FOR

This discussion is beneficial for undergraduate students in physics or statistics, C++ programmers working with statistical models, and researchers interested in multivariate distributions and their transformations.

nilsgeiger
Messages
6
Reaction score
0
TL;DR
I want to transform a multivariate normal [##log (\delta_i + 1)##] distribution to a multivariate normal distribution of the ##\delta_i## .
Besides, i'm looking for a way to transform the random vectors with the components ##log (\delta_i + 1)## to vectors with components ##\delta_i ##.
Hello.

I would like to draw (sample) several random vectors x from a n-dimensional multivariate normal distribution.
For this purpose I want to use C++ and the GNU Scientific Library function gsl_ran_multivariate_gaussian .

https://www.gnu.org/software/gsl/manual/html_node/The-Multivariate-Gaussian-Distribution.html


The distribution has the usual density
$$p(x_1,\dots,x_k) dx_1 \dots dx_k = {1 \over \sqrt{(2 \pi)^k |\Sigma|}} \exp \left(-{1 \over 2} (x - \mu)^T \Sigma^{-1} (x - \mu)\right) dx_1 \dots dx_k$$
with $$\mu = 0$$ but with
$$ x = \begin{pmatrix} log (\delta_1 + 1) \\
log (\delta_2+1) \\
log (\delta_3 + 1) \\
log (\delta_4 + 1) \\
... \\
log (\delta_n + 1) \\
\end{pmatrix}$$

As stated the ##log (\delta_i + 1)## follow the multivariate normal distribution.

But I am actually only interested in the ##\delta## -vectors.
$$ \delta = \begin{pmatrix} \delta_1 \\
\delta_1 \\
\delta_2 \\
\delta_3 \\
... \\
\delta_n \\
\end{pmatrix}$$
  1. How do you transform a x - vector to a ##\delta## - vector?
    With help of the covariances? But how exactly?
  2. Alternatively, can you do a change of variables to the multivariate distribution of the ##\delta_i## und draw ##\delta## - vectors directly with the gsl_ran_multivariate_gaussian?
    Could you please tell me the formula to compute the appropriate new covariance matrix?
    Or is this not possible?
    I am aware that the multiariate log-normal distribution exists, but GSL can only sample the multivariate normal.

I'm so sorry, this are probably really stupid questions.
But I'm just a not particularly good bachelor physics student in his fourth semester who also started programming c++ for the very first time.
I'm really overwhelmed and began learning about multivariate statistics for the first time because of this task no more than a week ago.

It would really help me a lot if you could answer and explain my two questions in great detail and for idiots.

For literature references for general variable transformations for multivaraite distributions and multivariate normal distributions I would also be very very thankful.
Especially for multivariate normal distributions of ##(log (x_i+1) )## there must be formulas together with a detailed derivation, right?
Normally distributed logarithms have to occur and ##+1## just ensures that for ##x_i## greater zero the logarithm always remains positive, so they should also be quite common?
 
Physics news on Phys.org
From what you've written it sounds like you already know how to randomly generate x vectors from the required multivariate normal distribution. That's the difficult bit done. From there it's easy. Since for ##i=1,2,...,n## we have ##x_i = \log(\delta_i+1)##, you can calculate a simulated ##\mathbf \delta## vector from its corresponding x vector by calculating ##\delta_i = e^{x_i}-1##, where ##\delta_i## and ##x_i## are the ##i##-th components of the ##\mathbf \delta## and x vectors respectively.
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 6 ·
Replies
6
Views
2K
Replies
1
Views
4K
Replies
5
Views
6K
  • · Replies 11 ·
Replies
11
Views
14K
  • · Replies 9 ·
Replies
9
Views
5K
  • · Replies 1 ·
Replies
1
Views
2K
Replies
2
Views
2K