Як зробити факторний аналіз, коли коваріаційна матриця не є позитивно визначеною?


11

У мене є набір даних, який складається з 717 спостережень (рядків), які описуються 33 змінними (стовпцями). Дані стандартизуються за допомогою z-оцінка всіх змінних. Немає двох змінних лінійно залежних ( ). Я також видалив усі змінні з дуже низькою дисперсією (менше ). На малюнку нижче показана відповідна кореляційна матриця (в абсолютних значеннях).0,1r=10.1

Коли я намагаюся запустити факторний аналіз, використовуючи factoranв Matlab наступне:

[Loadings1,specVar1,T,stats] = factoran(Z2,1);

Я отримую таку помилку:

The data X must have a covariance matrix that is positive definite.

Скажіть, будь ласка, де проблема? Це пов'язано з низькою взаємною залежністю серед використаних змінних? Крім того, що я можу з цим зробити?


Моя кореляційна матриця:

введіть тут опис зображення


3
Я думаю, що це проблема навпаки низької взаємної залежності . Напевно, у вас є деякі змінні, які лінійно залежать між собою, і це призводить до того, що ваша матриця коваріації є напіввизначеною (тобто має кілька нульових власних величин).
usεr11852

3
Для людей, які голосують, питання закривається: Чому питання про позитивну визначеність матриці коваріації вибірки тут не є темою ? Користувача хвилює, чому стандартна програма Факторного аналізу не працює. Попросіть додаткову інформацію, якщо хочете!
usεr11852

2
Чи можете ви обчислити та подати власні значення зразкової коваріаційної матриці? (напр. eig(cov(Z2))). Я сильно підозрюю, що деякі з них дуже малі.
usεr11852

3
Я погоджуюся з @ usεr11852: схоже, це питання було неправильно закритим як поза темою (я проголосував, щоб закрити його сам). Це виглядало як питання програмування, але насправді це ідеально тематичне та розумне питання. Я відредагував це і проголосував за повторне відкриття. Шкода, що ОП, здається, щезла.
амеба

3
Я зауважу, що це питання може мати статистичний зміст, з яким громада Matlab не зможе допомогти. Як обчислити Z2матрицю? Якщо у ваших даних відсутні значення, то попарне видалення може призвести до того, що матриця стане неперевернутою, коли різні кореляції в цій матриці обчислюються за допомогою різних підпроборів даних.
Стаск

Відповіді:


1

Давайте визначимо матрицю кореляції з допомогою . Оскільки це позитивне , але не позитивне певне, його спектральне розкладання виглядає приблизно як де стовпці складаються з ортонормальних власних векторів і 0 \ кінець {pmatrix} є діагональною матрицею , що містить власні значень , що відповідають власних векторів в . Деякі з них єC

C=QDQ1,
QC
D=(λ1000λ2λn00000)
Q0 . Крім того, є ранг .nC

Простим способом відновлення позитивної визначеності є встановлення -значних значень для деякого значення, яке чисельно є не нульовим, наприкладОтже, встановіть де Потім,0

λn+1,λn+2,...=1015.
C~=QD~Q1,
D~=(λ1000λ2λn10150001015)

У Matlab можна отримати за допомогою команди:Q,D

[Q,D] = eig(C)

Побудова - це просто прості маніпуляції з матрицею.C~

Зауваження: Важко сказати, як це впливає на аналіз факторів; отже, слід, мабуть, бути обережними з цим методом. Більше того, навіть якщо це є кореляційною матрицею, цілком може бути. Отже, може знадобитися інша нормалізація записів.CC~


0

Цілком можливо, що у вас є матричні проблеми з вашою матрицею. Це, можливо, фактично позитивно, але числові обчислення говорять інакше.

Дуже поширеним рішенням у цьому випадку є додавання дуже низького значення (наприклад, 1.E-10) до всіх елементів діагоналі. Якщо це не вирішує проблему, спробуйте поступово збільшувати це значення.


Діагональні записи здаються вже досить домінуючими. Як ви думаєте, це допомогло б?
Йонас

Мене хвилює 8-й і 10-й записи, якщо деякі лінійно залежні, це повинні бути ці два. Я не знаю достатньо про власне обчислення власного розкладу, але я думаю, що це рішення могло б спрацювати: додавання 1e-10 до діагоналі не дуже впливає на лінійну залежність, але це може просто додати все необхідне чисельно, щоб обчислення власних значень є фіксованим (тобто немає 0 власних значень). І все ж, якщо моє рішення не працює, я вважаю ваше досить елегантним.
Ромен Ребульо

-2

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


Мене здивує ця відповідь. Який сенс робити FA з некорельованими даними?
ttnphns

@ttnphns Я думаю, ти маєш рацію! Немає сенсу застосовувати ФА до декоррельованих даних! Моя пропозиція походить від конкретного виду FA, де PCA застосовується при попередній обробці створення векторних уявлень з даних, в якій ви будете застосовувати FA на. Вихідні дані, як правило, проектуються PCA, перш ніж трансформуються у векторне подання. І FA застосовується для векторного подання, а не проектованих даних PCA. Моє ліжко! Я оновлю свою відповідь. Хоча в деяких випадках імовірнісний PCA може працювати так само добре, як FA, якщо модель FA не зможе конвергуватися. Ви не згодні?
PickleRick
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.