python加权最小二乘_【量化工具系列】Barra加权最小二乘的python实现

BARRA USE4 page 13中写道,Factor returns in USE4 are estimated using weighted least-squares regression, assuming that the variance of specific returns is inversely proportional to the square root of the total market.

因子收益率的回归是利用加权最小二乘的方法,股票残差收益的方差反比与总市值的平方根。

这里我也做了一些测试,对于Barra风险因子的回归,确实存在异方差,股票的残差收益的方差和市值确实存在反向关系,但是至于是不是和市值的平方根成反比,这个可以再讨论,但是Barra毕竟经典,还是沿用这个结论比较好,而且其实WLS的结果和OLS的结果不会相差很多,具体用市值的平方根成反比,还是其他形式的差距就更小了,应该可以忽略。

如果回归的残差的方差还和自变量存在线性关系的话,那么就可以用WLS(加权最小二乘的方法)来进行参数估计,进而消除异方差带来的影响。

考虑回归如下,

如果残差和第一个变量

线性相关

考虑如下,

,

,

,

本来回归方程如下,为了构造一个同方差的U*,两边左乘

在BARRA中

,加权最小二乘的权是

)

这个权重的意思是说,市值越大,其残差的方法越小,约需要更大的权重

具体代码如下,可以直接调用statsmodel, 或者自己用矩阵计算

import statsmodel.spi as sm

# 第一种方法

model = sm.WLS(y, x_add, weights=np.sqrt(today_size)).fit()

print(model.params[])

# 第二种方法

w = np.diag((1.0 / np.sqrt(today_size)))

w_inv = np.linalg.inv(w)

mat = np.linalg.inv(np.dot(np.dot(np.transpose(x_add), w_inv), x_add))

param = np.dot(np.dot(np.dot(mat, np.transpose(x_add)), w_inv), y)

你可能感兴趣的:(python加权最小二乘)