Генерация двух коррелированных равномерных переменных

Я думаю, что самый мощный способ сделать это - записать пользовательское хранилище файлов

. Это не так сложно (но может быть излишним для ваших нужд). Затем вы можете привязать свое пользовательское хранилище к своей модели следующим образом:

from django.db import models
from django.db.models.fields.files import FileField
from myapp.storage import MyCustomStorage

class MyModel(models.Model):
    path = FileField( ... , storage=MyCustomStorage(), blank=False)

Затем вы можете реализовать бизнес-логику в своем пользовательском классе хранения. В этом случае вы можете хранить ваши личные файлы в локальной файловой системе, базе данных или в удаленной системе, например, в Google AppEngine.

Приветствия!

-1
задан SecretAgentMan 8 March 2019 в 01:59
поделиться

1 ответ

Генерация коррелированных равномерных случайных величин с гауссовой копулой

rho = .75; % Desired target correlation
N = 1000;  % Number of samples
Z = mvnrnd([0 0],[1 rho; rho 1], N);
U = normcdf(Z);  % Correlated U(0,1) random variables

scatterhist(U(:,1),U(:,2),'Direction','out') % Visualize (change `rho` to see impact)

Примечание: Метод не гарантирует точного достижения целевой корреляции, но должен быть достаточно близким для многих приложений .

3 Scatter plots with marginal histograms. First plot has target correlation of 0.25; second plot has target correlation of 0.75, third plot has target correlation of -0.95.

Это может быть очень полезно для быстрой генерации коррелированных распределений с использованием метода обратного преобразования (аналитически или численно). Оба варианта использования показаны ниже.

Аналитический подход

lambda = 2; alpha = 2; beta = 3;
rho = -.35; N = 1000;
Z = mvnrnd([0 0],[1 rho; rho 1], N);
U = normcdf(Z);
X = (-1/lambda)*log(U(:,1)); % Inverse Transform for Exponential
Y = beta*(-log(U(:,2))).^(1/alpha); % Inverse Transform for Weibull
corr(X,Y)
scatterhist(X,Y,'Direction','out')  

Численный подход

% Parameters
alpha = 6.7; lambda = 3;
mu = 0.1; sigma = 0.5;
rho = 0.75; N = 1000;
% Make distributions
pd_X = makedist('Gamma',alpha,lambda);
pd_Y = makedist('Lognormal',mu,sigma);
Z = mvnrnd([0 0],[1 rho; rho 1], N);
U = normcdf(Z);
% Use Inverse Transform for marginal distributions (numerically)
X = icdf(pd_X,U(:,1)); % Inverse CDF for X
Y = icdf(pd_Y,U(:,2)); % Inverse CDF for Y
corr(X,Y)
scatterhist(X,Y,'Direction','out')  

Ссылки: [118 ]
Обратное преобразование
Копулы

Гауссова связка:
Росс, Шелдон. (2013). Моделирование . Academic Press, Сан-Диего, Калифорния, 5-е издание. 103--105.

Модифицированный связанный ответ из здесь .

0
ответ дан SecretAgentMan 8 March 2019 в 01:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: