如何使用 R 计算带有 arima 误差的回归的 R 平方?

机器算法验证 r 回归 时间序列 有马 r平方
2022-03-04 01:02:09

如果我有一个 arima 对象,例如a

set.seed(100)
x1 <- cumsum(runif(100))
x2 <- c(rnorm(25, 20), rep(0, 75))
x3 <- x1 + x2

dummy = c(rep(1, 25), rep(0, 75))

a <- arima(x3, order=c(0, 1, 0), xreg=dummy)
print(a)

.

Series: x3 
ARIMA(0,1,0)                    

Call: arima(x = x3, order = c(0, 1, 0), xreg = dummy) 

Coefficients:
        dummy
      17.7665
s.e.   1.1434

sigma^2 estimated as 1.307:  log likelihood = -153.74
AIC = 311.48   AICc = 311.6   BIC = 316.67

如何计算此回归的 R 平方?

1个回答

一旦出现 ARMA 错误,它就不再是简单的线性回归。所以你必须定义你的意思R2. 也许拟合到实际值的平方相关?在这种情况下:

cor(fitted(a),x3)^2

fitted()功能仅在您已加载forecast包时才有效,但从您的问题中的输出来看,您似乎已经完成了该操作。

在您的情况下,您没有 ARMA 错误,但确实存在差异。所以它等价于线性模型

b <- lm(diff(x3) ~ diff(dummy) - 1)
summary(b)

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
diff(dummy)   17.766      1.149   15.46   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 1.149 on 98 degrees of freedom
Multiple R-squared: 0.7092,     Adjusted R-squared: 0.7062 
F-statistic:   239 on 1 and 98 DF,  p-value: < 2.2e-16 

当然,这是一个非常不同的值R2而不仅仅是使用上面的相关性,因为它现在是根据差异计算的。

你需要定义你的意思R2,以及你想用它做什么。一旦您摆脱了带有截距和 iid 错误的通常回归设置,R2不再被唯一定义并且不是特别有用。