Я пытаюсь прогнозировать многовариантные временные ряды с использованием анализа главных компонентов и векторной авторегрессии.
Мои данные содержатся в кадре данных pandas с 4 переменными формы (14193, 4).
Итак, я нашел ПК, спроецировал их вперед, используя VAR, и теперь я пытаюсь преобразовать эти ПК обратно в мои исходные 4 переменные, используя метод .transform()
, как указано в этом посте на statsexchange * 1007. *
У меня есть следующий код:
from sklearn.decomposition import PCA
from statsmodels.tsa.vector_ar.var_model import VAR
# first PCA
df = df #obviously not exact code; shown for completeness)
pca = PCA(n_components=3, copy=True, whiten=False)
pca.fit(df)
dpca = pd.DataFrame(pca.transform(df)) #dataframe of 3 component values for each historical data point
# now VAR
model = VAR(dpca)
model_fit = model.fit()
yhat = model_fit.forecast(model_fit.y, steps=10)
Это прекрасно работает и обеспечивает (10,3)
вывод проектируемых ПК. Теперь я хочу взять значения yhat для ПК и преобразовать их в исходные переменные. Однако, когда я делаю это:
mu = np.mean(dpca, axis=0)
new_vars = np.dot(pca.transform(yhat), pca.components_)
new_vars += mu
Я получаю следующую ошибку:
ValueError: operands could not be broadcast together with shapes (10,3) (4,)
Ошибка на линии pca.transform(yhat)
и, в частности, X = X - self.mean_
. Итак, ясно, что упомянутое «среднее» имеет форму (4,)
.
Полагаю, мой вопрос: как мне выполнить преобразование, чтобы оно включало мой новый набор данных dpca
на основе ПК, который имеет среднюю форму (3,)