【问题标题】:R2 from Statsmodels VAR来自 Statsmodels VAR 的 R2
【发布时间】:2019-11-13 23:01:46
【问题描述】:

有没有一种简单的方法可以从 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 方,而无需从头开始计算?

【问题讨论】:

    标签: python statsmodels


    【解决方案1】:

    对每个方程使用 sklearn.metrics.r2_score 是可行的(不幸的是超出了 statsmodels)。示例代码假设数据帧data 中有一个名为'foobar' 的列,这将是我们提取的方程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)
    
    

    【讨论】:

    • 非常感谢 sjp。我最终做了你在第二个代码块中所做的事情。
    猜你喜欢
    • 2018-10-10
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    相关资源
    最近更新 更多