Выразите распределение x i как линейную комбинацию некоторых независимых базисных распределений f j : x i = a i1 f 1 + a i2 f 2 + ... . Ограничим f j независимыми переменными, равномерно распределенными в 0..1 или в {0,1} (дискретно). Давайте теперь выразим все, что мы знаем в матричной форме:
Let X be the vector (x1, x2, .., xn)
Let A be the matrix (a_ij) of dimension (k,n) (n rows, k columns)
Let F be the vector (f1, f2, .., fk)
Let P be the vector (p1, p2, .., pn)
Let R be the matrix (E[x_i,x_j]) for i,j=1..n
Definition of the X distribution: X = A * F
Constraint on the mean of individual X variables: P = A * (1 ..k times.. 1)
Correlation constraint: AT*A = 3R or 2R in the discrete case (because E[x_i x_j] =
E[(a_i1*f_1 + a_i2*f_2 + ...)*(a_j1*f_1 + a_j2*f_2 + ...)] =
E[sum over p,q: a_ip*f_p*a_jq*f_q] = (since for p/=q holds E[f_p*f_q]=0)
E[sum over p: a_ip*a_jp*f_p^2] =
sum over p: a_ip*a_jp*E[f_p^2] = (since E[f_p^2] = 1/3 or 1/2 for the discrete case)
sum over p: 1/3 or 1/2*a_ip*a_jp
And the vector consisting of those sums over p: a_ip*a_jp is precisely AT*A.
Теперь вам нужно решить два уравнения:
AT*A = 3R (or 2R in the discrete case)
A*(1...1) = P
Решение первого уравнения соответствует нахождению квадратного корня матрицы 3R или 2R. См. Например http://en.wikipedia.org/wiki/Cholesky_factorization и обычно http://en.wikipedia.org/wiki/Square_root_of_a_matrix.
Что-то также должно быть сделано со вторым:)
Я прошу окружающих математиков поправить меня, потому что я вполне мог бы смешать AT A с A AT или сделать что-то еще более неправильное.
Чтобы сгенерировать значение x i в виде линейной смеси базисных распределений, используйте двухэтапный процесс: 1) используйте равномерную случайную величину, чтобы выбрать один из базисные распределения, взвешенные с соответствующей вероятностью, 2) генерируют результат, используя выбранное базисное распределение.