Генерация данных с заданной выборочной ковариационной матрицей

22

Учитывая ковариационную матрицу , как сгенерировать данные таким образом, чтобы они имели образец ковариационной матрицы \ hat {\ boldsymbol \ Sigma} = \ boldsymbol \ Sigma_s ?ΣsΣ^=Σs


В более общем плане: мы часто заинтересованы в создании данных из плотности f(x|θ) , причем данным x дан некоторый параметр vector θ . Это приводит к выборке, из которой мы можем снова оценить значение θ^ . Что меня интересует, так это обратная проблема: что если нам дан набор параметров θs , и мы хотели бы создать образец x такой, что θ^=θs .

Это известная проблема? Такой метод полезен? Доступны ли алгоритмы?

Кис Малдер
источник
Масштабируемое решение предоставлено Attilio Meucci. См. Эту статью риска и код Matlab
Питер Коттон

Ответы:

16

Для таких проблем есть две типичные ситуации:

i) вы хотите сгенерировать выборку из заданного распределения, характеристики населения которой соответствуют указанным (но из-за вариации выборки у вас нет точно совпадающих характеристик выборки).

ii) вы хотите сгенерировать выборку, характеристики выборки которой соответствуют указанным (но из-за ограничений точного сопоставления количеств выборки с заранее заданным набором значений на самом деле вы не получите желаемого распределения).

Вы хотите второй случай - но вы получите его, следуя тому же подходу, что и первый случай, с дополнительным этапом стандартизации.

Таким образом, для многомерных нормалей любой из них может быть выполнен довольно простым способом:

В первом случае вы можете использовать случайные нормали без структуры совокупности (такие как стандартная норма iid, которые имеют ожидание 0 и ковариационную матрицу идентичности), а затем наложить ее - преобразовать, чтобы получить ковариационную матрицу и означать, что вы хотите. Если и - это среднее значение для популяции и ковариация, которые вам нужны, а - это стандартное нормальное значение, то для некоторого вычисляетсяΣ z y = L z + μ L L yμΣzy=Lz+μL где (например, подходящий можно получить с помощью разложения Холецкого) , Тогда есть желаемые характеристики населения.LL=ΣLy

Со вторым вы должны сначала преобразовать свои случайные нормали, чтобы удалить даже случайное отклонение от нулевого среднего и тождественной ковариации (делая выборочное среднее ноль и ковариационную выборку ), а затем действовать как прежде. Но этот начальный шаг по удалению выборочного отклонения от точного среднего 0 , дисперсия I мешает распределению. (В небольших образцах это может быть довольно серьезным.)In0I

Это может быть сделано путем вычитания среднего значения выборки из ( z z ) и вычисления разложения Холецкого z . Если L является левым фактором Холецкого, то z ( 0 ) = ( L ) - 1 z должно иметь выборочное среднее значение 0 и ковариационную единицу выборочной выборки. Затем вы можете рассчитать y = L z ( 0 ) + μz=zz¯zLz(0)=(L)1zy=Lz(0)+μи есть образец с желаемыми моментами образца. (В зависимости от того, как определены количества пробы, может быть очень маленькая скрипка, связанная с умножением / делением на такие факторы, как , но это достаточно легко определить, что нужно.)n1n

Glen_b - Восстановить Монику
источник
1
+1. На днях мне нужно было сгенерировать некоторые данные с заданной выборочной ковариационной матрицей, я не знал, как это сделать, и по какой-то причине мне потребовалось много времени, чтобы найти ваш ответ. Чтобы улучшить видимость этой темы и проиллюстрировать ваши предложения, я разместил здесь еще один ответ с некоторым кодом Matlab.
говорит амеба, восстанови Монику
@amoeba Интересно, есть ли возможность добавить в теги вопроса один из использованных вами поисковых терминов, которых здесь еще нет (или, возможно, вставить несколько текстов в небольшом правке для текста вопроса, который все же должен помочь найти его?). ). Теперь я задаюсь вопросом, должен ли я сделать то же самое в R ... но лучше ли это в моем ответе или как дополнение к вашему?
Glen_b
1
Я уже позволил себе отредактировать вопрос, а также попытался сформулировать свой ответ так, чтобы в него входило как можно больше ключевых слов. Надеюсь, это поможет. Между прочим, я был удивлен, что этот простой совет (отбеливание сгенерированных данных перед преобразованием в требуемую ковариацию) был настолько трудным для Google; ничего не мог найти (в резюме или в другом месте), пока я наконец не нашел ваш ответ.
говорит амеба, восстанови Монику
1
@amoeba О, хорошо, спасибо. Да, на самом деле, я не могу вспомнить, чтобы когда-либо видел упомянутое где-либо в случае многовариантного случая (без сомнения, так и было, поскольку это довольно очевидная идея, особенно если вы уже думали об этом для одномерного случая, или уже видел это в одномерном случае).
Glen_b
Zz¯=μ,Cov(z)=Σ
17

@Glen_b дал хороший ответ (+1), который я хочу проиллюстрировать некоторым кодом.

ndΣchol(Σ)

n = 100;
d = 2;
Sigma = [ 1    0.7  ; ...
          0.7   1   ];
rng(42)
X = randn(n, d) * chol(Sigma);

Σcov(X)

1.0690    0.7296
0.7296    1.0720

Как генерировать данные с заранее заданной выборкой корреляционной или ковариационной матрицы?

Ichol(Σ)

Вот продолжение моего примера Matlab:

X = randn(n, d);
X = bsxfun(@minus, X, mean(X));
X = X * inv(chol(cov(X)));
X = X * chol(Sigma);

Теперь по cov(X)мере необходимости возвращается

1.0000    0.7000
0.7000    1.0000
амеба говорит восстановить монику
источник
+1. Почему-то этот вопрос в разных формах в разных местах в резюме. Есть ли способ продолжить, если мы знаем, что многомерное распределение негауссово?
ргк
Если вы знаете форму многомерного дистрибутива, вы хотите, чтобы он выглядел, возможно, в некоторых случаях.
Glen_b