2 votos

crear una distribución gaussiana con una covarianza personalizada en Matlab

La función de Matlab 'randn' aleatoriza una distribución gaussiana con $\mu= \begin {pmatrix} 0\\0\end{pmatrix}$ y $cov= \begin {pmatrix} 1&0\\0&1\end{pmatrix}$ Ineed para aleatorizar un vector de distribución gaussiana con $cov= \begin {pmatrix} 3&1\\1&3\end{pmatrix}$ . ¿cómo puedo cambiar la matriz de covarianza?

2voto

ih8ie8 Puntos 126

El Caja de herramientas de estadística tiene una función mvnrnd (ver su documentación ) para generar conjuntamente variables aleatorias gaussianas con medias y matriz de covarianza especificadas:

N = 10; % desired number of samples of each variable
mu = [10; 10]; % vector of means
cov = [3 1; 1 3]; % covariance matrix
samples = mvnrnd(mu, cov, N);

Si quieres hacerlo manualmente se pueden generar RV gaussianas estándar independientes (con randn ) y aplicar una transformación afín que dará el vector medio y la matriz de covarianza deseados. Para ello es necesario calcular la descomposición de Cholesy de esta última. Vea los detalles del ejemplo aquí . Obsérvese que la salida del programa de Matlab chol (véase su documentación ) necesita ser (conjugado-)transpuesto para ajustarse al procedimiento descrito en el enlace.

El código sería:

N = 10; % desired number of samples of each variable
mu = [10; 10]; % vector of means
cov = [3 1; 1 3]; % covariance matrix
independent_samples = randn(N, size(cov,1));
A = chol(cov)';
samples = bsxfun(@plus, mu, A*independent_samples.').';

Ejemplo de realización con sus entradas y N=1e5 muestras, trazadas con

plot(samples(:,1), samples(:,2), '.', 'markersize', .1)
axis square

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X