Как провести факторный анализ, если ковариационная матрица не является положительно определенной?

11

У меня есть набор данных, который состоит из 717 наблюдений (строк), которые описываются 33 переменными (столбцами). Данные стандартизируются путем z-оценки всех переменных. Нет двух переменных линейно зависимых ( ). Я также удалил все переменные с очень низкой дисперсией (менее ). На рисунке ниже показана соответствующая матрица корреляции (в абсолютных значениях).r=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матрицу? Если в ваших данных отсутствуют значения, то парное удаление может привести к тому, что матрица станет необратимой, когда различные корреляции в этой матрице будут вычислены с использованием разных подвыборок данных.
StasK

Ответы:

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~

Jonas
источник
0

Возможно, вы столкнулись с числовыми проблемами с вашей матрицей. Это, возможно, на самом деле положительно определено, но численное вычисление говорит об обратном.

В этом случае очень распространенным решением является добавление очень низкого значения (например, 1.E-10) ко всем диагональным элементам. Если это не решит проблему, попробуйте постепенно увеличивать это значение.

Ромен Ребулло
источник
Диагональные записи кажутся уже довольно доминирующими. Как вы думаете, это поможет?
Джонас
Я беспокоюсь о 8-й и 10-й записи, если некоторые из них линейно зависимы, это должны быть эти два. Я не знаю достаточно о фактических вычислениях собственного разложения, но я думаю, что это решение могло бы сработать: добавление 1e-10 к диагонали не сильно влияет на линейную зависимость, но может просто добавить все, что необходимо в численном выражении, чтобы вычисление собственных значений является фиксированным (т. е. нет 0 собственных значений). Тем не менее, если мое решение не работает, я нахожу ваше довольно элегантным.
Romain Reboulleau
-2

FA работает лучше всего, когда ваши данные гауссовы, поэтому вы можете попробовать некоторые подходы предварительной обработки, чтобы получить данные, более похожие на гауссовские.

PickleRick
источник
Я озадачен этим ответом. Какой смысл делать FA некоррелированных данных?
ttnphns
@ttnphns Я думаю, ты прав! Не имеет никакого смысла применять FA на декоррелированных данных! Мое предложение исходит от конкретного вида FA, где PCA применяет предварительную обработку для создания векторных представлений из данных, в которых вы будете применять FA. Исходные данные обычно проецируются PCA перед преобразованием в векторное представление. И FA применяется к векторному представлению, а не к прогнозируемым данным PCA. Виноват! Я обновлю свой ответ. Хотя в некоторых случаях вероятностный PCA может работать так же хорошо, как FA, если модель FA не сходится. Ты не согласен?
PickleRick