В этом примере показано, как использовать копулу и ранговую корреляцию для генерации коррелированных данных из вероятностных распределений, которые не имеют доступной обратной cdf-функции, такой как семейство гибких распределений Пирсона.
Создайте 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 являются независимыми выборками из их соответствующих распределений Пирсона и являются некоррелированными.
Создать scatterhist график для визуализации случайных чисел Пирсона.
figure scatterhist(p1,p2)

Гистограммы показывают предельные распределения для p1 и p2. Точечная диаграмма показывает распределение соединения для p1 и p2. Отсутствие узора для точечной диаграммы показывает, что p1 и p2 независимы.
Использовать copularnd для генерации 1000 коррелированных случайных чисел с коэффициентом корреляции, равным -0,8, используя гауссову копулу. Создать scatterhist график для визуализации случайных чисел, сгенерированных из копулы.
u = copularnd('Gaussian',-0.8,1000);
figure
scatterhist(u(:,1),u(:,2))
Гистограммы показывают, что данные в каждом столбце копулы имеют маргинальное равномерное распределение. Скеттерплот показывает, что данные в двух столбцах отрицательно коррелированы.
Используя ранговую корреляцию Спирмена, преобразуйте две независимые выборки Пирсона в коррелированные данные.
Используйте sort функция для сортировки совокупных случайных чисел от наименьшего к наибольшему и для возврата вектора индексов, описывающих переупорядоченный порядок чисел.
[s1,i1] = sort(u(:,1)); [s2,i2] = sort(u(:,2));
s1 и s2 содержат числа из первого и второго столбцов копулы, u, отсортирован по порядку от наименьшего до наибольшего. i1 и i2 - индексные векторы, которые описывают переупорядоченный порядок элементов в s1 и s2. Например, если первое значение в отсортированном векторе s1 третье значение в исходном несортированном векторе, затем первое значение в индексном векторе i1 равно 3.
Создайте два вектора нулей, 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);
Создать scatterhist график для визуализации коррелированных данных Пирсона.
figure scatterhist(x1,x2)

Гистограммы показывают предельные распределения Пирсона для каждого столбца данных. Точечная диаграмма показывает совместное распределение p1 и p2и указывает, что данные теперь отрицательно коррелированы.
Подтвердите, что коэффициент ранговой корреляции Спирмана одинаков для случайных чисел копулы и коррелированных случайных чисел Пирсона.
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
Ранговая корреляция Спирмена одинакова для копулы и случайных чисел Пирсона.