大家好。我的任务是在过去的两周内试图解决这个问题,而我的教授几乎没有帮助。我并不是真的要求确切的代码,但我无法解决问题......
我们给出了一组变量数据(M,R,Y),并要求我们运行图像中显示的回归。我现在的问题是我似乎无法创建一个滞后变量。我被告知1)我们不需要使用时间序列对象2)我应该使用时间序列对象(基于我的研究)。此外,当我们到达要求我们运行t = 2及之后的回归以得到p_hat的部分时,我能得到的唯一系数是1.0000而我们应该得到的B1最终会变成像3.14e这样的-11,一些令人难以置信的错误。根据给出的数据,这是我目前的变量。如果有人能够帮助指导我朝着正确的方向发展,我将非常感激。
#Creates Time Series Objects Which Can Be Lagged using lag()
Mt2 <- ts(data=DATA$M, start=1,end=180,frequency=1)
Mt1 <- ts(data=DATA$M, start=1,end=180,frequency=1)
Rt2 <- ts(data=DATA$R, start=1,end=180,frequency=1)
Yt2 <- ts(data=DATA$Y, start=1,end=180,frequency=1)
#Dependent Variable starts at t=2 and ends at t=181
#Lag Variable starts at t=1 and ends at t=180
Model_A <- lm( Mt2 ~ lag(Mt2,1) + Rt2 + Yt2, data=DATA)
bgtest(Model_A) #Conclude there is Autocorrelation
e <- resid(Model_A)
et <- ts(e,start=2,end=180,frequency=1)
et2 <- ts(e,start=1, end=179, frequency=1)
Model_e <- lm(et ~ et2)
答案 0 :(得分:1)
在普通lag()
公式中使用lm()
不起作用,因为lag()
只是移动时间索引但保持数据向量不变。并且当lm()
(或者更确切地说model.frame()
)忽略时间索引时,这导致将响应变量包括为回归量之一,因此回归系数为1.作为说明:
lm(Nile ~ lag(Nile, -1))
## Call:
## lm(formula = Nile ~ lag(Nile, -1))
##
## Coefficients:
## (Intercept) lag(Nile, -1)
## -1.819e-13 1.000e+00
此问题有多种解决方案,包括:
使用ar()
或arima()
等专用时间序列基础结构。后者还可以通过xreg
轻松合并其他回归量:
arima(Nile, c(1, 0, 0))
## Call:
## arima(x = Nile, order = c(1, 0, 0))
##
## Coefficients:
## ar1 intercept
## 0.5063 919.5685
## s.e. 0.0867 29.1410
##
## sigma^2 estimated as 21125: log likelihood = -639.95, aic = 1285.9
将lm()
的便捷界面与model.frame
一起使用
dyn
或dynlm
:
library("dynlm")
dynlm(Nile ~ L(Nile, 1))
## Time series regression with "ts" data:
## Start = 1872, End = 1970
##
## Call:
## dynlm(formula = Nile ~ L(Nile, 1))
##
## Coefficients:
## (Intercept) L(Nile, 1)
## 452.7668 0.5043
在致电lm()
之前“手动”执行延迟预处理:
nile <- ts.intersect(Nile = Nile, NileLag = lag(Nile, -1))
lm(Nile ~ NileLag, data = nile)
## Call:
## lm(formula = Nile ~ NileLag, data = nile)
##
## Coefficients:
## (Intercept) NileLag
## 452.7668 0.5043
根据您是否需要特定的估算方法或返回的模型类进行进一步计算,一种或另一种策略可能更方便。在您的特定情况下,我会推荐最后一个解决方案,然后使用普通lm()
完成练习中的不同步骤。
答案 1 :(得分:0)
使用data.frame并“手动”创建滞后变量或使用dplyr :: lag之类的东西。像这样:
X <- 1:10
Xlag <- c(NA, X[1:9])
基本R lag函数对除ts对象以外的任何其他函数都没有用,除了支持它们的特定建模函数外,它们不是很有用。