首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自Statsmodels的R2

来自Statsmodels的R2
EN

Stack Overflow用户
提问于 2018-01-02 23:44:10
回答 1查看 827关注 0票数 2

有没有一种简单的方法从Statsmodels的VAR包中提取R2?

遵循statsmodel文档中的示例:http://www.statsmodels.org/dev/vector_ar.html

代码语言:javascript
复制
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平方图,而不需要从头开始计算?

EN

回答 1

Stack Overflow用户

发布于 2019-11-13 23:01:47

对每个方程使用sklearn.metrics.r2_score都是可行的(不幸的是超出了统计模型)。示例代码假设在数据帧data中有一个名为'foobar'的列,这将是我们提取的等式R2;显然,VAR()fit()方法应该根据您的特定情况进行调整

代码语言:javascript
复制
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。

代码语言:javascript
复制
y = estVAR.fittedvalues['foobar']+estVAR.resid['foobar']
R2 = 1 - np.sum(estVAR.resid['foobar'].values**2)/np.sum((y.values-y.mean())**2)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48063798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档