Генерування даних за допомогою заданої матриці коваріації вибірки


22

З огляду на матрицю коваріації , як генерувати такі дані, щоб у них була матриця зразкової коваріації \ hat {\ boldsymbol \ Sigma} = \ boldsymbol \ Sigma_s ?ΣsΣ^=Σs


Більш загально: нас часто цікавить генерування даних із щільності f(x|θ) , при цьому дані x задають деякий вектор параметрів θ . Це призводить до вибірки, з якої ми можемо знову оцінити значення θ^ . Мене цікавить зворотна проблема: що робити, якщо нам задають набір параметрів θs , і ми хотіли б створити зразок x такий, що θ^=θs .

Це відома проблема? Чи корисний такий метод? Чи доступні алгоритми?


Масштабоване рішення надає Attilio Meucci. Дивіться цю статтю про ризик та код матлаб
Пітер Коттон

Відповіді:


16

Існують дві різні типові ситуації для подібних проблем:

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

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

Ви хочете другий випадок - але ви отримуєте його, дотримуючись того ж підходу, що і перший випадок, з додатковим кроком стандартизації.

Отже, для багатоваріантних нормалів це може бути зроблено досить просто:

У першому випадку ви можете використати випадкові нормали без структури популяції (наприклад, стандартний нормальний стандарт, у якого очікування 0 та матриця коваріації ідентичності), а потім накласти це - перетворити, щоб отримати матрицю коваріації та означає, що ви хочете. Якщо і Σ - це середнє значення сукупності, а вам потрібна коваріація, а z є стандартним нормальним, ви обчислюєте y = L z + μ , для деяких L, де L L ' = Σ (наприклад, відповідний L можна отримати при розкладанні Холеського). Тоді y має бажані популяційні характеристики.μΣzy=Lz+μLLL=ΣLy

З другим, ви повинні спочатку перетворити свої випадкові нормали, щоб видалити навіть випадкову зміну від нульової середньої та ідентичності коваріації (зробити вибірку середньою нулевою та коваріантність вибірки ), а потім продовжити, як і раніше. Але той початковий крок усунення відхилення вибірки від точного середнього значення 0 , дисперсія IIn0I заважає розподілу. (У невеликих пробах це може бути досить важко.)

Це можна зробити, віднявши середнє вибіркове значення ( z = z - ˉ z ) і обчисливши розклад Холеського z . Якщо L - лівий коефіцієнт Холеського, то z ( 0 ) = ( L ) - 1 z повинен мати середнє значення вибірки 0 та коваріацію вибірки ідентичності. Потім можна обчислити y = L z ( 0 ) + μzz=zz¯zLz(0)=(L)1zy=Lz(0)+μі мати вибірку з бажаними моментами вибірки. (Залежно від того, як визначено кількість вашої вибірки, може бути додаткова невелика скрипка, пов'язана з множенням / діленням на такі фактори, як , але визначити цю потребу досить просто.)n1n


1
+1. Днями мені потрібно було згенерувати деякі дані за допомогою заданої матриці коваріації вибірки, я не знав, як це зробити, і мені чомусь знадобилося багато часу, щоб знайти вашу відповідь. Щоб збільшити видимість цього потоку та проілюструвати ваші пропозиції, я опублікував тут ще одну відповідь з деяким кодом Matlab.
амеба каже: Відновити Моніку

@amoeba Цікаво, чи є можливість розмістити один із використаних пошукових термінів, які тут вже відсутні в тегах запитань (або, можливо, вставити декілька в невелике редагування до тексту питання, що все-таки допоможе його знайти ). Мені зараз цікаво, чи варто мені робити те ж саме в R ... але чи піде це краще в моїй відповіді, або як додаток до вашої?
Glen_b -Встановіть Моніку

1
Я вже взяв на себе можливість редагувати питання, а також спробував сформулювати свою відповідь таким чином, щоб вона включала якомога більше ключових слів. Сподіваюсь, це допоможе. Мене, до речі, здивувало, що цей простий підказки (відбілювання генерованих даних перед перетворенням на необхідну коваріацію) настільки важко було гуглювати; не змогли знайти нічого (на резюме чи в іншому місці), поки я нарешті не знайшов вашої відповіді.
амеба каже, що поверніть Моніку

1
@amoeba О, добре, дякую. Так, насправді я не можу сказати, що я пригадую, щоб я коли-небудь бачила його для багатоваріантної справи (без сумніву, це було, оскільки це досить очевидна ідея, особливо якщо ви вже думали про це для одноманітної справи, або вже бачили це в однозначній справі).
Glen_b -Встановити Моніку

@Glen_b Як ви кажете, отриманий розподіл цих "очищених" зразків не може бути нормальним. Чи маєте ви якесь уявлення про те, яким може бути розподіл у результаті? Або, може, він дорівнює / не дорівнює умовному розподілу Zz¯=μ,Cov(z)=Σ
gg

17

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

Як генерувати вибірок із d -вимірного багатовимірного гауссового розподілу із заданою коваріаційною матрицею Σ ? Це легко зробити, генеруючи зразки зі стандартного Гаусса і множивши їх на квадратний корінь матриці коваріації, наприклад, на c h o l ( Σ ) . Це висвітлено у багатьох потоках резюме, наприклад, тут: Як я можу генерувати дані заздалегідь визначеною кореляційною матрицею? Ось проста реалізація Matlab: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

Як генерувати дані за попередньо заданим зразком кореляцією або коваріаційною матрицею?

Як писав @Glen_b, після генерування даних зі стандартного Гаусса, центр відбілює і стандартизує їх, щоб він мав зразок коваріантної матриці ; лише тоді помножте його на c h o l ( Σ ) .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. Якось це питання є в різних формах у різних місцях резюме. Чи є спосіб продовжити, якщо ми усвідомлюємо, що багатоваріантний розподіл не є гауссовим?
rgk

Якщо ви знаєте форму багатоваріантного розподілу, ви хочете, щоб вона виглядала, можливо, в деяких випадках.
Glen_b -Встановіть Моніку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.