我正在尝试使用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使用它进行加权,GLS的子类可以使用它来实现更高效的白化方法,该方法不需要完整的nobs乘以nobs协方差矩阵或其cholesky分解。

例如,GLSAR https://www.statsmodels.org/dev/generated/statsmodels.regression.linear_model.GLSAR.html使用AR过滤器将数据白化以进行串行相关。但是,它不能消除异方差性。

作为估算GLS模型的替代方法:
如果存在异方差性和序列相关性,OLS仍然保持一致,尽管渐近效率较低。通过在cov_type中指定fit参数,可以在这些情况下获得正确的标准错误。

关于python - 在Python中运行广义最小二乘法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56304549/

10-10 11:01