Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Generar datos correlacionados mediante correlación de rangos

En este ejemplo se muestra cómo utilizar una correlación de cópula y de clasificación para generar datos correlacionados de distribuciones de probabilidad que no tienen una función CDF inversa disponible, como la familia de distribución flexible de Pearson.

Paso 1. Genere números aleatorios de Pearson.

Genere 1000 números aleatorios de dos distribuciones diferentes de Pearson, utilizando la función.pearsrnd La primera distribución tiene los valores de parámetro MU igual a 0, Sigma igual a 1, sesgado igual a 1, y curtosis igual a 4. La segunda distribución tiene los valores de parámetro MU igual a 0, Sigma igual a 1, sesgado igual a 0,75, y curtosis igual a 3.

rng default  % For reproducibility p1 = pearsrnd(0,1,-1,4,1000,1); p2 = pearsrnd(0,1,0.75,3,1000,1);

En esta etapa, y son muestras independientes de sus respectivas distribuciones de Pearson, y no están correlacionadas.p1p2

Paso 2. Trace los números aleatorios de Pearson.

Cree un trazado para visualizar los números aleatorios de Pearson.scatterhist

figure scatterhist(p1,p2)

Los histogramas muestran las distribuciones marginales para y.p1p2 La gráfica de dispersión muestra la distribución conjunta para y.p1p2 La falta de patrón en la gráfica de dispersión muestra que y son independientes.p1p2

Paso 3. Genere números aleatorios usando una cópula Gaussiana.

Se utiliza para generar 1000 números aleatorios correlacionados con un coeficiente de correlación igual a – 0,8, utilizando una cópula Gaussiana.copularnd Cree un trazado para visualizar los números aleatorios generados a partir de la cópula.scatterhist

u = copularnd('Gaussian',-0.8,1000); figure scatterhist(u(:,1),u(:,2))

Los histogramas muestran que los datos de cada columna de la cópula tienen una distribución uniforme marginal. La gráfica de dispersión muestra que los datos de las dos columnas están correlacionados negativamente.

Paso 4. Ordena los números aleatorios de la cópula.

Utilizando la correlación de rango de Spearman, transforme los dos ejemplos de Pearson independientes en datos correlacionados.

Utilice la función para clasificar los números aleatorios de cópula de menor a mayor, y para devolver un vector de índices que describa el orden reorganizado de los números.sort

[s1,i1] = sort(u(:,1)); [s2,i2] = sort(u(:,2));

y contienen los números de la primera y segunda columnas de la cópula, ordenados en orden de menor a mayor. y son vectores de índice que describen el orden reorganizado de los elementos en y.s1s2ui1i2s1s2 Por ejemplo, si el primer valor del vector ordenado es el tercer valor del vector sin clasificar original, el primer valor del vector de índice es 3.s1i1

Paso 5. Transforme los ejemplos de Pearson utilizando la correlación de rangos de Spearman.

Cree dos vectores de ceros y, que tengan el mismo tamaño que los vectores de cópula ordenados, y.x1x2s1s2 Ordene los valores en y desde el más pequeño al más grande.p1p2 Coloque los valores en y, en el mismo orden que los índices y generados ordenando los números aleatorios de la cópula.x1x2i1i2

x1 = zeros(size(s1)); x2 = zeros(size(s2));  x1(i1) = sort(p1); x2(i2) = sort(p2);

Paso 6. Trace los números aleatorios correlacionados de Pearson.

Cree un trazado para visualizar los datos de Pearson correlacionados.scatterhist

figure scatterhist(x1,x2)

Los histogramas muestran las distribuciones marginales de Pearson para cada columna de datos. La gráfica de dispersión muestra la distribución conjunta de e e indica que los datos ahora están correlacionados negativamente.p1p2

Paso 7. Confirme los valores del coeficiente de correlación de Spearman.

Confirme que el coeficiente de correlación de rango de Spearman es el mismo para los números aleatorios de cópula y los números aleatorios de Pearson correlacionados.

copula_corr = corr(u,'Type','spearman')
copula_corr = 2×2

    1.0000   -0.7858
   -0.7858    1.0000

pearson_corr = corr([x1,x2],'Type','spearman')
pearson_corr = 2×2

    1.0000   -0.7858
   -0.7858    1.0000

La correlación de rango de Spearman es la misma para la cópula y los números aleatorios de Pearson.

Consulte también

| |

Temas relacionados