Дивні кореляції у результатах SVD випадкових даних; вони мають математичне пояснення чи це помилка LAPACK?


21

Я спостерігаю дуже дивну поведінку за результатами SVD випадкових даних, які я можу відтворити як у Matlab, так і R. Це виглядає як чисельне числове питання в бібліотеці LAPACK; є це?

Я витягую зразків з мірних гауссів з нульовою середньою і коваріацією тотожності: . Я зібрати їх в даних матриця . (Я необов'язково можу централізувати чи ні, це не впливає на наступне.) Потім я виконую розкладання сингулярного значення (SVD), щоб отримати \ mathbf X = \ mathbf {USV} ^ \ top . Давайте візьмемо деякі два окремих елементів \ mathbf U , наприклад , и- {11} і и- {22} , і запитати , що кореляція між ними за різними розіграшів \ mathbf X . Я б очікував, що якщо числоk = 2 X N ( 0 , I ) 1000 × 2 X X X = U S VU U 11 U 22 X N r e pn=1000k=2XN(0,I)1000×2XXX=USVUU11U22XNrep розіграшів досить великий, тоді всі такі кореляції повинні бути приблизно нульовими (тобто кореляції сукупності повинні бути нульовими, а вибіркові кореляції - невеликими).

Однак я спостерігаю деякі дивно сильні кореляції (близько ±0.2 ) між U11 , U12 , U21 та U22 , і лише між цими елементами. Усі інші пари елементів мають кореляцію навколо нуля, як очікувалося. Ось як виглядає матриця кореляції для 20 "верхніх" елементів U (спочатку 10 елементів першого стовпця, потім перші 10 елементів другого стовпця):

СВД дивні кореляції

Помітьте дивно високі значення у верхньому лівому куті кожного квадранта.

Саме цей коментар @ whuber привернув цей ефект до моєї уваги. @whuber стверджував, що PC1 та PC2 не є незалежними, і представив це сильне співвідношення як доказ цього. Однак моє враження таке, що він випадково виявив числову помилку в бібліотеці LAPACK. Що тут відбувається?

Ось код R @ whuber:

stat <- function(x) {u <- svd(x)$u; c(u[1,1], u[2, 2])};
Sigma <- matrix(c(1,0,0,1), 2);
sim <- t(replicate(1e3, stat(MASS::mvrnorm(10, c(0,0), Sigma))));
cor.test(sim[,1], sim[,2]);

Ось мій код Matlab:

clear all
rng(7)

n = 1000;     %// Number of variables
k = 2;        %// Number of observations
Nrep = 1000;  %// Number of iterations (draws)

for rep = 1:Nrep
    X = randn(n,k);
    %// X = bsxfun(@minus, X, mean(X));
    [U,S,V] = svd(X,0);

    t(rep,:) = [U(1:10,1)' U(1:10,2)'];
end

figure
imagesc(corr(t), [-.5 .5])
axis square
hold on
plot(xlim, [10.5 10.5], 'k')
plot([10.5 10.5], ylim, 'k')

Якщо ви використовуєте n = 4 і k = 3, ви також побачите кореляції.
Аксакал

@Aksakal: так, справді, дякую. Я відредагував, щоб видалити заявлену різницю між k = 2 і k = 3.
амеба каже: Відновити Моніку

Відповіді:


23

Це не помилка.

Як ми вивчили (широко) в коментарях, відбувається дві речі. Перший полягає в тому, що стовпці обмежені для задоволення вимог SVD: кожна повинна мати одиницю довжини і бути ортогональною для всіх інших. Перегляд як випадкова величина , створена з випадковою матриці через конкретний алгоритм SVD, ми тим самим відзначити , що це функціонально незалежним обмеження створюють статистичні залежності між стовпцями .UUXk(k+1)/2U

Ці залежності можуть бути виявлені більшою чи меншою мірою, вивчаючи кореляції між компонентами , але виникає друге явище : рішення SVD не є унікальним. Як мінімум, кожен стовпчик можна незалежно заперечувати, даючи щонайменше чітких розв’язків з стовпцями. Сильні кореляції (що перевищують ) можуть бути викликані зміною знаків стовпців відповідним чином. (Один із способів зробити це наведено в моєму першому коментарі до відповіді Амеби в цій темі: я змушую всіUU2kk1/2uii,i=1,,kмати однаковий знак, роблячи всі негативні або всі позитивні з однаковою ймовірністю.) З іншого боку, всі кореляції можна зникнути, вибравши знаки випадковим чином, незалежно, з однаковою ймовірністю. (Я наводжу приклад нижче в розділі "Редагувати".)

З обережністю, ми можемо частково розрізнити обидва ці явища при читанні діаграми розсіювання матриці компонентів . Деякі характеристики - наприклад, поява точок, майже рівномірно розподілених у чітко визначених кругових регіонах - вважають відсутністю незалежності. Інші, наприклад, розсіювачі, що демонструють чіткі ненульові кореляції, очевидно, залежать від вибору, зробленого в алгоритмі - але такий вибір можливий лише через відсутність незалежності в першу чергу.U

Кінцева перевірка алгоритму розкладання типу SVD (або Чолеського, LR, LU тощо) - це те, чи робить він те, що вимагає. У цій обставині достатньо перевірити, що коли SVD повертає трійку матриць (U,D,V) , що X відновляється до очікуваної помилки з плаваючою комою продуктом UDV ; що стовпчики U і V є ортонормальними; і що D є діагональною, його діагональні елементи невід’ємні та розташовані у низхідному порядку. Я застосував такі тести до svdалгоритму вRі ніколи не виявили це помилково. Хоча це не впевненість, що це абсолютно правильно, такий досвід - який, на мою думку, поділяється багатьма людьми - говорить про те, що будь-яка помилка потребує певного вкладу, щоб проявити її.

Далі йде більш детальний аналіз конкретних моментів, порушених у питанні.


Використовуючи процедуру R' svdспершу, ви можете перевірити, що зі збільшенням k кореляції між коефіцієнтами U слабшають, але вони все ще не нульові. Якби ви просто мали виконати велике моделювання, ви виявили б, що вони значні. (Коли k=3 , має бути достатньо 50000 ітерацій.) Всупереч твердженню у питанні, кореляції не «повністю зникають».

По-друге, кращим способом вивчення цього явища є повернення до основного питання незалежності коефіцієнтів. Хоча кореляція, як правило, майже до нуля, відсутність незалежності чітко очевидна. Це стало найбільш очевидним при вивченні повного багатомірного розподілу коефіцієнтів U . Характер розподілу проявляється навіть у невеликих моделюваннях, в яких ненульові кореляції ще не можна виявити. Наприклад, вивчіть матрицю розсіювання коефіцієнтів. Щоб зробити це практично, я встановив розмір кожного модельованого набору даних на 4 і зберігав k=2 , таким чином малюючи 1000реалізація матриці 4×2U , створюючи матрицю 1000×8 . Ось його повна матриця розсіювання зі змінними, переліченими за їх положеннями в межах U :

Малюнок

Сканування першого стовпця виявляє цікаву відсутність незалежності між u11 та іншим uij : подивіться, як, наприклад, верхній квадрант розсіювача з u21 майже вакантний; або вивчіть еліптичну хмару вгору нахилу, що описує співвідношення (u11,u22) і хмару, що спадає вниз, для пари (u21,u12) . Уважний погляд виявляє явну відсутність незалежності майже всіх цих коефіцієнтів: мало хто з них виглядає віддалено незалежним, хоча більшість з них демонструє кореляцію майже до нуля.

(Примітка. Більшість кругових хмар - це проекції з гіперсфери, створеної умовою нормалізації, що змушує суму квадратів усіх компонентів кожного стовпця бути одиницею.)

Матриці Scatterplot з k=3 та k=4 демонструють подібні закономірності: ці явища не обмежуються k=2 , а також не залежать від розміру кожного модельованого набору даних: їх просто важче створити та вивчити.

Пояснення цих шаблонів стосуються алгоритму, який використовується для отримання U при розкладанні значення сингулярного значення, але ми знаємо, що такі закономірності незалежності повинні існувати за самими визначальними властивостями U : оскільки кожен наступний стовпчик (геометрично) є ортогональним попередньому ці умови ортогональності накладають функціональні залежності серед коефіцієнтів, які тим самим переводяться на статистичні залежності серед відповідних випадкових величин.


Редагувати

У відповідь на коментарі, можливо, варто зауважити, наскільки ці явища залежності відображають основний алгоритм (для обчислення СВД) та наскільки вони притаманні природі процесу.

У конкретних моделях кореляцій між коефіцієнтами залежать багато від довільних виборів , зроблених з допомогою алгоритму SVD, тому що рішення не є унікальним: стовпці U завжди можуть бути незалежно множаться на 1 або 1 . Немає внутрішнього способу вибору знаку. Таким чином, коли два алгоритми SVD роблять різний (довільний або, можливо, навіть випадковий) вибір знаку, вони можуть спричинити різні шаблони розсіювання значень (uij,uij) . Якщо ви хочете це побачити, замініть statфункцію в коді нижче на

stat <- function(x) {
  i <- sample.int(dim(x)[1]) # Make a random permutation of the rows of x
  u <- svd(x[i, ])$u         # Perform SVD
  as.vector(u[order(i), ])   # Unpermute the rows of u
}

Це спочатку випадковим чином xупорядковує спостереження , виконує SVD, потім застосовує зворотне впорядкування, uщоб відповідати початковій послідовності спостереження. Оскільки ефект полягає у формуванні сумішей відбитих та повернутих версій оригінальних розсіювачів, то розсіювачі в матриці будуть виглядати набагато рівномірніше. Всі співвідношення вибірки будуть надзвичайно близькі до нуля (за побудовою: основні кореляції точно до нуля). Проте, відсутність незалежності все одно буде очевидно (в рівномірних кругових формах , які з'являються, в зокрема , між ui,j і ui,j).

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

Нічого не змінюється щодо висновків. Оскільки другий стовпчик U є ортогональним для першого, він (розглядається як багатоваріантна випадкова величина) залежить від першого (також розглядається як багатоваріантна випадкова величина). Не можна, щоб усі компоненти одного стовпця були незалежними від усіх компонентів іншого; все, що ви можете зробити, це подивитися на дані способами, які затушовують залежності - але залежність збережеться.


Тут оновлений Rкод для обробки випадків k>2 та малювання частини матриці розсіювача.

k <- 2    # Number of variables
p <- 4    # Number of observations
n <- 1e3  # Number of iterations
stat <- function(x) as.vector(svd(x)$u)
Sigma <- diag(1, k, k); Mu <- rep(0, k)
set.seed(17)
sim <- t(replicate(n, stat(MASS::mvrnorm(p, Mu, Sigma))))
colnames(sim) <- as.vector(outer(1:p, 1:k, function(i,j) paste0(i,",",j)))
pairs(sim[, 1:min(11, p*k)], pch=".")

3
Кореляція відбувається між першими компонентами стовпців оскільки саме так працює алгоритм SVD. Те, що рядки X є гауссовими, не має значення: я впевнений, що ви помітили, що коефіцієнти U не є гауссовими. UXU
whuber

2
До речі, я тільки що виявив , що просто замінити svd(X,0)на svds(X)в моєму коді Matlab робить ефект зникне! Наскільки мені відомо, ці дві функції використовують різні алгоритми SVD (обидві - це підпрограми LAPACK, але, мабуть, різні). Я не знаю, чи має R функцію, схожу на функцію Матлаба svds, але мені цікаво, чи все ще ви стверджуєте, що це "справжній" ефект, а не чисельне питання.
Амеба каже: Відновити Моніку

4
Панове, почекайте хвилинку. Чому ви не говорите про знак? Знак власного вектора в основному довільний. Але програма svd не призначає її випадковим чином, знак залежить від реалізації svd та даних. Якщо після вилучення Uви вирішите випадковим чином, чи повинен кожен з його стовпців залишатись таким, який є, або змінити його знак, чи не зникнуть кореляції, про які ви говорите?
ttnphns

2
@ttnphns Це правильно, як пояснено в моїй редакції. Хоча через це кореляції зникають, залежності між стовпцями не зникають. (Удосконалена версія I постачається еквівалентно випадковому зміні знаків стовпців.)Ustat
whuber

2
Незначна точка (до цієї чудової нитки!) SVD не вимагає, щоб елементи, що знаходяться в діагоналі, Sбули в певному порядку; це питання зручності. Інші процедури гарантують це (наприклад, MATLAB svds), але це не є загальною вимогою. @amoeba: Дивлячись на svds(що здається вільним від цієї проблемної поведінки) обчислення засновані на фактичному обчисленні власних значень спочатку (тому він не використовує стандартні dgesdd/ dgesvdLAPACK процедури - я дуже підозрюю, що він використовує dsyevr/ dsyevxспочатку).
usεr11852 повідомляє Відновити Моніку

11

Ця відповідь представляє реплікацію результатів @ whuber у Matlab, а також пряму демонстрацію того, що кореляції є "артефактом" того, як реалізація SVD обирає знак для компонентів.

Враховуючи довгий ланцюжок потенційно заплутаних коментарів, я хочу підкреслити майбутніх читачів, що я повністю згоден з наступним:

  1. У контексті цієї дискусії, , звичайно , є випадковою величиною.U
  2. Стовпці мають бути довжиною 1 . Це означає, що елементи всередині кожного стовпця не є незалежними; їхні квадрати дорівнюють одному. Однак це не означає ніякої кореляції між U i 1 і U j 1 для i j , а вибіркова кореляція повинна бути крихітною для великої кількості N r e p випадкових малюнків.U1Ui1Uj1ijNrep
  3. Стовпці мають бути ортогональними. Це означає, що елементи з різних стовпців не є незалежними; їх крапковий добуток дорівнює нулю. Знову ж таки, це не означає жодної кореляції між U i 1 та U j 2 , і кореляція вибірки повинна бути крихітною.UUi1Uj2

Моє запитання було: чому ми бачимо високі співвідношення навіть для великої кількості випадкових малюнків N r e p = 1000 ?0.2Nrep=1000

Ось реплікація прикладу @ whuber з , k = 2 та N r e p = 1000 у Matlab:n=4k=2Nrep=1000

SVD

Зліва - кореляційна матриця, праворуч - розкидання ділянок, схожих на @ whuber's. Згода між нашими імітаціями здається ідеальною.

Тепер, виходячи з геніальної пропозиції @ttnphns, я призначаю випадкові знаки стовпцям , тобто після цього рядка:U

[U,S,V] = svd(X,0);

Додаю наступні два рядки:

U(:,1) = U(:,1) * sign(randn(1));
U(:,2) = U(:,2) * sign(randn(1));

Ось результат:

SVD зі випадковими ознаками

Усі кореляції зникають, саме так, як я сподівався від початку !

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

Підсумовуючи всю проблему, ми бачимо, що сильні кореляції з'являються, оскільки LAPACK вибирає знаки для стовпців певним чином, який, здається, залежить від перших двох точок даних. UЦе, звичайно, не помилка, оскільки розкладання є правильним. Але LAPACK по суті створює ці "артефакти" кореляції, використовуючи свободу присвоєння знаків. Ці кореляції не відображають залежність елементів ; натомість вони відображають свободу у рішенні SVD та певну конвенцію LAPACK для її виправлення.U

PS. Вітаємо @whuber за проходження репутації 100k сьогодні!


statstat <- function(x) { u <- svd(x)$u; as.vector(sign(runif(1) - 1/2)*u %*% diag(sign(diag(u)))) }U(u11,u22,,ukk)UU

svdssvdUU

R±2/30.2

1
U

1
Інтуїтивно, це справедливо. Як тільки перша провідна вісь буде визначена в просторі, решта pr. оси отримують зменшену свободу. У випадку двовимірних даних другий (останній) ПК повністю пов'язаний, крім знака. Я вважаю за краще обмеження, а не залежність у статистичному сенсі.
ttnphns

0

xy

x2+y2=1

Cov[x,y]=Var[xy]=E[x2y2]E[xy]2

xy


k(k+1)/2UUDUUDk(k1)/2

U1Unkn>kUnn=1000n=4x2+y2=1U

xUyx2+y2=1Cov(x,y)=0x=cos(θ)y=sin(θ)θ[0,2π)

UUij01/nnn1/n=1

1
UXU11U21ρn random variables with correlation matrix having all off-diagonal elements equal to ρ. Now, is ρ positive or negative? The problem doesn't seem to offer a choice, hence ρ=0.
amoeba says Reinstate Monica
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.