在Python中运行广义的最小二乘



我正在尝试使用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的一些事情,这使问题在计算上更易于管理?

谢谢

gls使用跨观测的全密集协方差矩阵实现,大小为(nobs,nobs(。这仅在小样本中起作用。(nobs是观察次数(

作为替代方案,模型类具有whiten方法,该方法可用于转换数据,以使其不相关且均匀。WLS用于加权,可以由GL的子类使用,以实现一种更有效的美白方法,该方法不需要完整的NOBS Times NOBS NOBS协方差矩阵或其Cholesky的分解。

例如,GLSAR https://www.statsmodels.org/dev/generated/statsmodels.regression.linear_model.glsar.html使用AR滤波器使用AR滤波器来增白数据以串行相关性。但是,它不会消除异质性。

作为估计GLS模型的替代方法:
如果存在异质性和串行相关性,尽管效率降低了,但OLS仍然是一致的。可以通过在fit中指定cov_type参数来获得正确的标准错误。

最新更新