Когда я применяю statsmodels.multivariate.pca.PCA
к некоторым данным, я обнаруживаю, что сумма полученных собственных значений не равна общей дисперсии данных. Я использую следующий код
import numpy as np
import statsmodels.api as sm
corr_matrix = np.array([
[1, 0.8, 0.4],
[0.8, 1, 0.6],
[0.4, 0.6, 1]])
Z = np.random.multivariate_normal([0,0,0], corr, 1000)
pc = sm.PCA(Z, standardize=False, demean=False, normalize=False)
pc.eigenvals.sum()
, и результат (в данной случайной выборке) равен 2994.51488403581
, в то время как я ожидал, что это добавит к 3
.
Чего мне не хватает?
Добавить 1
Кажется, что когда PCA выполняется на данных X
(то есть с использованием матрицы X^TX
), связь между суммой дисперсий и собственными значениями больше не сохраняется, и только когда PCA выполняется на ковариационной матрице (то есть на X^TX/n
), когда сумма собственных значений равна сумме дисперсий, то есть trace(X^TX/n) = sum(eigenvalues)
. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 109