是否有一种从Statsmodels的VAR包中提取R2的简单方法?
遵循statsmodels文档中的示例: http://www.statsmodels.org/dev/vector_ar.html
from statsmodels.tsa.api import VAR
model = VAR(data)
results = model.fit(2)
results.summary()
Summary of Regression Results
==================================
Model: VAR
Method: OLS
Date: Tue, 28, Feb, 2017
Time: 21:38:11
--------------------------------------------------------------------
No. of Equations: 3.00000 BIC: -27.5830
Nobs: 200.000 HQIC: -27.7892
Log likelihood: 1962.57 FPE: 7.42129e-13
AIC: -27.9293 Det(Omega_mle): 6.69358e-13
--------------------------------------------------------------------
.
.
然后继续显示每个方程的系数,最后显示残差的相关矩阵。但是,它没有显示每个方程的R平方。
有没有人知道是否有一种简单的方法可以从statsmodels VAR中提取R-square而无需从头开始工作?
答案 0 :(得分:1)
为每个方程式使用sklearn.metrics.r2_score将有效(不幸的是,超出了statsmodels)。该示例代码假定在数据帧'foobar'
中有一列名为data
的列,这将是我们提取的公式R2;显然,VAR()
和fit()
方法应适合您的特定情况
import statsmodels.api as sm
import sklearn.metrics as skm
estVAR = sm.tsa.VAR(data).fit(1)
skm.r2_score(estVAR.fittedvalues['foobar']+estVAR.resid['foobar'],
estVAR.fittedvalues['foobar'])
将拟合值添加到残差的原因是要获取VAR可以为其构建拟合值的实际数据(而不是整个样本,由于需要将其某些观测值未构建拟合值,因此滞后的观察结果在右侧)。顺便说一句,通过执行此操作,我们可以确认这就是我们想要的R2
y = estVAR.fittedvalues['foobar']+estVAR.resid['foobar']
R2 = 1 - np.sum(estVAR.resid['foobar'].values**2)/np.sum((y.values-y.mean())**2)