У меня есть набор данных, который состоит из 717 наблюдений (строк), которые описываются 33 переменными (столбцами). Данные стандартизируются путем z-оценки всех переменных. Нет двух переменных линейно зависимых ( ). Я также удалил все переменные с очень низкой дисперсией (менее ). На рисунке ниже показана соответствующая матрица корреляции (в абсолютных значениях).
Когда я пытаюсь запустить факторный анализ с использованием factoran
в Matlab следующим образом:
[Loadings1,specVar1,T,stats] = factoran(Z2,1);
Я получаю следующую ошибку:
The data X must have a covariance matrix that is positive definite.
Не могли бы вы сказать мне, где проблема? Это связано с низкой взаимозависимостью между используемыми переменными? Кроме того, что я могу с этим поделать?
Моя корреляционная матрица:
eig(cov(Z2))
) Я сильно подозреваю, что некоторые из них очень маленькие.Z2
матрицу? Если в ваших данных отсутствуют значения, то парное удаление может привести к тому, что матрица станет необратимой, когда различные корреляции в этой матрице будут вычислены с использованием разных подвыборок данных.Ответы:
Давайте определим матрицу корреляции с помощью . Поскольку оно положительно полуопределено, но не положительно определено, его спектральное разложение выглядит примерно так: где столбцы состоят из ортонормированных собственных векторов и 0 \ конец {pmatrix} является диагональной матрицей , содержащей собственные значений , соответствующих собственных векторов в . Некоторые из нихC C=QDQ−1, Q C D=⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜λ10⋮⋮⋮⋮00λ2⋱⋯⋯⋱⋱⋱⋯⋯⋱λn⋱⋯⋯⋱0⋱⋯⋯⋱⋱00⋮⋮⋮⋮00⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟ Q 0 . Кроме того, есть ранг .n C
Простой способ восстановить положительную определенность состоит в том, чтобы установить значения в какое-либо числовое значение, отличное от нуля, например,Следовательно, установите где Тогда0 λn+1,λn+2,...=10−15. C~=QD~Q−1, D~=⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜λ10⋮⋮⋮⋮00λ2⋱⋯⋯⋱⋱⋱⋯⋯⋱λn⋱⋯⋯⋱10−15⋱⋯⋯⋱⋱00⋮⋮⋮⋮010−15⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
В Matlab можно получить с помощью команды:Q,D
Создание - это просто простые манипуляции с матрицей.C~
Примечание: было бы трудно сказать, как это влияет на факторный анализ; следовательно, вероятно, следует быть осторожным с этим методом. Более того, даже если это является корреляционной матрицей, вполне может не быть. Следовательно, может потребоваться другая нормализация записей.C C~
источник
Возможно, вы столкнулись с числовыми проблемами с вашей матрицей. Это, возможно, на самом деле положительно определено, но численное вычисление говорит об обратном.
В этом случае очень распространенным решением является добавление очень низкого значения (например, 1.E-10) ко всем диагональным элементам. Если это не решит проблему, попробуйте постепенно увеличивать это значение.
источник
FA работает лучше всего, когда ваши данные гауссовы, поэтому вы можете попробовать некоторые подходы предварительной обработки, чтобы получить данные, более похожие на гауссовские.
источник