Сгенерируйте коррелированные данные, используя ранговую корреляцию

В этом примере показано, как использовать копулу и ранговую корреляцию для генерации коррелированных данных из распределений вероятностей, которые не имеют доступной обратной функции cdf, такой как гибкое семейство распределений Пирсона.

Шаг 1. Сгенерируйте случайные числа Пирсона.

Сгенерируйте 1000 случайных чисел из двух различных распределений Пирсона, используя pearsrnd функция. Первое распределение имеет значения параметров mu равные 0, сигма равные 1, перекос равный 1 и куртоз равный 4. Второе распределение имеет значения параметров mu равные 0, сигма равные 1, перекос равный 0,75 и куртоз равный 3.

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

На данном этапе p1 и p2 являются независимыми выборками из их соответствующих распределений Пирсона и являются некоррелированными.

Шаг 2. Постройте график случайных чисел Пирсона.

Создайте scatterhist постройте график, чтобы визуализировать случайные числа Пирсона.

figure
scatterhist(p1,p2)

Figure contains an axes. The axes contains an object of type line.

Гистограммы показывают маргинальные распределения для p1 и p2. scatterplot показывает распределение соединений для p1 и p2. Отсутствие шаблона для scatterplot показывает, что p1 и p2 являются независимыми.

Шаг 3. Сгенерируйте случайные числа, используя Гауссову копулу.

Использование copularnd сгенерировать 1000 коррелированных случайных чисел с коэффициентом корреляции, равным -0,8, используя Гауссову копулу. Создайте scatterhist график для визуализации случайных чисел, сгенерированных из копулы.

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

Figure contains an axes. The axes contains an object of type line.

Гистограммы показывают, что данные в каждом столбце копулы имеют маргинальное равномерное распределение. scatterplot показывает, что данные в двух столбцах отрицательно коррелируют.

Шаг 4. Отсортируйте случайные числа копулы.

Используя ранговую корреляцию Спирмана, преобразуйте две независимые выборки Пирсона в коррелированные данные.

Используйте sort функция для сортировки случайных чисел копулы с наименьших на самые большие и для возврата вектора индексов, описывающих переставленный порядок чисел.

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

s1 и s2 содержать числа из первого и второго столбцов копулы, u, отсортированный по порядку от наименьшего до наибольшего. i1 и i2 являются векторами индекса, которые описывают переставленный порядок элементов в s1 и s2. Для примера, если первое значение в отсортированном векторе s1 является третьим значением в исходном несортированном векторе, затем первым значением в векторе индекса i1 3.

Шаг 5. Преобразуйте выборки Пирсона, используя ранговую корреляцию Спирмана.

Создайте два нулевых векторов, x1 и x2, которые имеют тот же размер, что и отсортированные векторы копулы, s1 и s2. Отсортируйте значения в p1 и p2 от наименьшего до самого большого. Поместите значения в x1 и x2, в том же порядке, что и индексы i1 и i2 сгенерирован путем сортировки случайных чисел копулы.

x1 = zeros(size(s1));
x2 = zeros(size(s2));

x1(i1) = sort(p1);
x2(i2) = sort(p2);

Шаг 6. Постройте график коррелированных случайных чисел Пирсона.

Создайте scatterhist график, чтобы визуализировать коррелированные данные Пирсона.

figure
scatterhist(x1,x2)

Figure contains an axes. The axes contains an object of type line.

Гистограммы показывают маргинальные распределения Пирсона для каждого столбца данных. scatterplot показывает распределение p1 и p2, и указывает, что данные в настоящее время отрицательно коррелируют.

Шаг 7. Подтвердите значения коэффициентов ранга Спирмена.

Подтвердите, что коэффициент ранговой корреляции Спирмана является тем же самым для случайных чисел копулы и коррелированных случайных чисел Пирсона.

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

Корреляция рангов Спирмана одинаковая для копулы и случайных чисел Пирсона.

См. также

| |

Похожие темы