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