ковариационная матрица невязок - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь определить матрицу ковариантности остатков.

Мне было интересно, могу ли я получить некоторую помощь по приведенному ниже коду.

Приведенный ниже код работает, как в это выводит значение. Я просто не уверен, правильное ли это значение.

Так мы вычисляем ковариацию невязок модели линейной регрессии -

import nonlinshrink as nls
import statsmodels.api as sm
import scipy

import yfinance as yf
import numpy as np
index = yf.download("SPY", start="2010-02-05", end="2019-05-31")
stock_data=yf.download("AMZN", start="2010-02-05", end="2019-05-31")

close_price_index=index['Close']
close_price_stock=stock_data['Close']

rets_index = close_price_index.pct_change().dropna()
rets_stock=close_price_stock.pct_change().dropna()


X=rets_index
y=rets_index

X = sm.add_constant(X)
model = sm.OLS(y, X).fit()
predictions = model.predict(X) # make the predictions by the model

alpha=model.params[0]

residuals=model.resid.to_numpy()


B = np.reshape(residuals, (-1, 2))

covry=nls.shrink_cov(B, k=2)

Ниже приведен пример, я не уверен, что моя математика верна

import numpy as np
import nonlinshrink as nls
p = 2
n = 14
sigma = np.eye(p, p)
data = np.random.multivariate_normal(np.zeros(p), sigma, n) + np.arange(n)[:, np.newaxis] + 1
x = np.vstack((np.ones(n).T, np.arange(n).T)).T
betahat = np.linalg.solve(np.dot(x.T, x), np.dot(x.T, data))
datahat = np.dot(x, betahat)
res = data - datahat
sigma_tilde = nls.shrink_cov(res, k=2)  # corresponding to 2 degrees of freedom
...