import pandas as pd
import numpy as np
data = pd.read_csv('3-B_EXAM4.csv', encoding='GB2312')
data
p1 = data.iloc[:, 2].values
p2 = data.iloc[:, 3].values
p3 = data.iloc[:, 4].values
p4 = data.iloc[:, 5].values
p5 = data.iloc[:, 6].values
rf = data.iloc[:, 7].values
mkt = data.iloc[:, 8].values
p1
r1 = np.log(p1[1:]) - np.log(p1[:-1])
r2 = np.log(p2[1:]) - np.log(p2[:-1])
r3 = np.log(p3[1:]) - np.log(p3[:-1])
r4 = np.log(p4[1:]) - np.log(p4[:-1])
r5 = np.log(p5[1:]) - np.log(p5[:-1])
r1
rexc1 = r1 - rf[1:]
rexc2 = r2 - rf[1:]
rexc3 = r3 - rf[1:]
rexc4 = r4 - rf[1:]
rexc5 = r5 - rf[1:]
rexc1
R = np.concatenate([rexc1[:, None],
rexc2[:, None],
rexc3[:, None],
rexc4[:, None],
rexc5[:, None]],
axis=1)
R
Cov_Sample = np.mat(np.cov(R, rowvar=False))
Cov_Sample ##方法1:样本方差-协方差矩阵
X = np.mat(np.concatenate([np.ones((len(mkt)-1, 1)), mkt[1:, None]], axis=1))
X 这里就是的X就是常数项和市场超额收益率的系数
Y = np.mat(R)
AB_hat = (X.T*X).I*(X.T*Y)
ALPHA = AB_hat[0]这里取的是AB_hat的第一行,总之就是常数项的系数
BETA = AB_hat[1]这里取的是AB_hat的第二行,总之就是市场超额收益率的系数
RESD = Y - X*AB_hat
covfactor = np.cov(mkt[1:])
covresidual = np.diag(np.diag(np.cov(RESD, rowvar=False)))
Cov_Factor = BETA.T*covfactor*BETA + covresidual
Cov_Factor##方法3:因子模型估计法
c = 0.5
Cov_Shrink = c*Cov_Sample + (1-c)*Cov_Factor
##这里要注意c是加反的
Cov_Shrink
uhat = np.mean(R, axis=0)
A = np.mat(np.concatenate([uhat[:, None], np.ones((len(uhat), 1))], axis=1)).T
up = np.mean(uhat)
b = np.mat(np.array([up, 1])[:, None])
omega_Shrink = Cov_Shrink.I*A.T*(A*Cov_Shrink.I*A.T).I*b
print(omega_Shrink)
omega_Sample = Cov_Sample.I*A.T*(A*Cov_Sample.I*A.T).I*b
print()
print(omega_Sample)