有没有一种简单的方法从Statsmodels的VAR包中提取R2?
遵循statsmodel文档中的示例: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中提取R平方图,而不需要从头开始计算?
发布于 2019-11-13 23:01:47
对每个方程使用sklearn.metrics.r2_score都是可行的(不幸的是超出了统计模型)。示例代码假设在数据帧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)https://stackoverflow.com/questions/48063798
复制相似问题