3 votos

Generación de un conjunto de datos gaussianos en MATLAB

Quiero generar un conjunto de datos gaussianos bivariados. El conjunto de datos incluye un total de 800 resultados extraídos aleatoriamente de cuatro clases gaussianas bidimensionales con medias $(-3,0)'$ , $(0,0)'$ , $(3,0)'$ y $(6,0)'$ , todos con la misma matriz de varianza-covarianza

$$\Sigma = \pmatrix{0.5 & 0.05 \\ 0.05 &0.5}.$$

¿Cómo puedo hacerlo en MATLAB? No soy experto en MATLAB.

6voto

kobame Puntos 352

Statistics Toolbox ofrece una función para tomar muestras de una gaussiana bivariante

% Specific a covariance matrix
SIGMA = [.5 .05; .05 .5 ];

% Generate four bivariate normal distributions with specified means
temp = mvnrnd([-3 0], SIGMA,800);
temp(:,3:4) = mvnrnd([-3 0],SIGMA,800);
temp(:,5:6) = mvnrnd([3 0], SIGMA, 800);
temp(:,7:8) = mvnrnd([6 0], SIGMA, 800);

5voto

Cyan Puntos 1965

Primero, los medios.

mu = 3*floor(rand(1,800)*4) - 3; % first dimension means
mu = [mu; zeros(1,800)]; % add second dimension

Información sobre generación de desviaciones aleatorias normales multivariantes , Factorización Cholesky y El generador de números aleatorios normal incorporado de MATLAB Podrás entender el código que aparece a continuación. Genera una matriz de 2 por 800, cada columna de la cual se muestrea a partir de la distribución de la mezcla que especificó en la pregunta.

SIGMA = [.5 .05; .05 .5];
A = chol(SIGMA); 
randvec = mu + A'*randn(2,800);

No he probado este código adecuadamente -- no tengo una copia local de MATLAB. Lo he probado en un Interfaz web de Octave y parecía funcionar.

1voto

David M. Karr Puntos 2210

Encontré la respuesta como sigue: (Gracias a todos)

Sigma=[0.5 0.05; 0.05 0.5];
z=mvnrnd([-3 0],Sigma,200);
x=mvnrnd([0 0],Sigma,200);
c=mvnrnd([3 0 ],Sigma,200);
v=mvnrnd([6 0 ],Sigma,200);
samples=[z; x; c; v];
plot(samples(:,1),samples(:,2),'*');

0voto

huisinro Puntos 111
% Specific a covariance matrix
SIGMA = [.5 .05; .05 .5 ];

% Generate four bivariate normal distributions with specified means
temp = mvnrnd([-3 0], SIGMA,800);
temp(:,3:4) = mvnrnd([-3 0],SIGMA,800);
temp(:,5:6) = mvnrnd([3 0], SIGMA, 800);
temp(:,7:8) = mvnrnd([6 0], SIGMA, 800);

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