我正在尝试使用statsmodels.api在Python中进行一些回归,但是我的模型都存在自相关和异方差的问题。因此,我想到了尝试使用广义最小二乘(GLS)。我对运行这种最小二乘形式不是很熟悉,因此非常接近下一页上的说明:
https://www.statsmodels.org/dev/generated/statsmodels.regression.linear_model.GLS.html
具有以下代码:
X = b2_final_Train[explan_vars]
Y = b2_final_Train[[ExognVar]]
model = sm.OLS(Y, X).fit()
##GLS Component
ols_resid = model.resid
res_fit = sm.OLS(list(ols_resid[1:]), list(ols_resid[:-1])).fit()
rho = res_fit.params
from scipy.linalg import toeplitz
order = toeplitz(np.arange(50014))
sigma = rho**order
gls_model = sm.GLS(Y, X, sigma=sigma)
gls_results = gls_model.fit()
print(gls_results.summary())
我可能会通过查看代码来解决我的问题,即sigma是一个非常大的矩阵,这使我在运行50014 x 50014矩阵时运行的任何计算机超载。但是据我所知,GLS矩阵对于每个错误都足够大,这就是我在数据中拥有多少观察值,也就是我有多少错误。那么,关于运行GLS,我是否会缺少某些东西,从而使问题在计算上更易于管理?
谢谢
答案 0 :(得分:0)
GLS是使用整个观测值的全密集协方差矩阵实现的,大小为(点,点)。这仅适用于小样本。 (nobs
是观察次数)
作为替代方案,模型类具有whiten
方法,该方法可用于转换数据,以使数据不相关且均等。 WLS使用它进行加权,GLS的子类可以使用它来实现一种更有效的白化方法,该方法不需要完整的nobs乘以nobs协方差矩阵或cholesky分解。
例如,GLSAR https://www.statsmodels.org/dev/generated/statsmodels.regression.linear_model.GLSAR.html使用AR过滤器将数据白化以进行串行相关。但是,它并不能消除异方差性。
作为估算GLS模型的替代方法:
如果存在异方差和序列相关性,OLS仍然是一致的,尽管渐近地效率较低。通过在cov_type
中指定fit
参数,可以在这些情况下获得正确的标准错误。