首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我对回归分析中滞后的R实现感到困惑。

我对回归分析中滞后的R实现感到困惑。
EN

Stack Overflow用户
提问于 2015-12-15 15:52:14
回答 2查看 4.7K关注 0票数 1

看看这个线性回归:y~X+滞后(X,1),意思非常清楚,它试图做一个线性回归。滞后( X,1)表示X的第一个滞后,使我感到困惑的是滞后函数的R实现。在R中,滞后(X,1)将X移动到以前的时间,例如

代码语言:javascript
运行
复制
>library(zoo) 
>
>str(zoo(x))
‘zoo’ series from 1 to 4 
Data: num [1:4] 11 12 13 14
Index:int [1:4] 1 2 3 4
>lag(zoo(x))
1  2  3
12 13 14

当你回归时,R在时间2中准确地使用了哪个值?我猜R是这样使用数据的:

代码语言:javascript
运行
复制
time 1   2   3   4
 Y      anything
 X   11  12  13  14
lagX 12  13  14

但这是胡说八道!因为我们应该在时间2(或任何特定的时间)使用X的裂变滞后和当前的X,即11和12,而不是上面的1312!X的裂变滞后应该是先验X,不是吗?我太困惑了!请向我解释,非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-15 16:21:00

问题首先是:

看看这个线性回归:y~X+滞后(X,1),意思非常清楚,它试图做一个线性回归。滞后(X,1)是指X的第一个滞后。

事实上,情况并非如此。它没有提到这一模式:

代码语言:javascript
运行
复制
Y[i] = a + b * X[i] + c * X[i-1] + error[i]

它实际上指的是这种模式:

代码语言:javascript
运行
复制
Y[i] = a + b * X[i] + c * X[i+1] + error[i]

这不太可能是你想要的。

很可能您需要的是lag(X, -1)而不是lag(X, 1)。在R中滞后一个系列意味着滞后的系列更早开始,这意味着该系列本身向前移动。

要注意的另一个事项是,lm不对齐序列。它对时间索引一无所知。您需要自己对齐这个系列,或者使用一个为您服务的包。

下面将更详细地介绍这些要点。

ts

首先,让我们从R的核心来考虑lag.ts,因为lag.zoolag.zooreg都是基于它并与它一致的。lag.ts滞后于系列的时间,因此滞后的系列更早开始。也就是说,如果我们有一个值分别为11、12、13和14的级数,其值分别为1、2、3和4,那么滞后级数的值是11、12、13和14,但在0、1、2、3的时间内是相同的。最初的级数从1开始,但滞后的级数从0开始。最初,值12是时间2,但在滞后序列中,值13是时间2。

代码语言:javascript
运行
复制
tt <- ts(11:14)
cbind(tt, lag(tt), lag(tt, 1), lag(tt, -1))

给予:

代码语言:javascript
运行
复制
Time Series:
Start = 0 
End = 5 
Frequency = 1 
  tt lag(tt) lag(tt, 1) lag(tt, -1)
0 NA      11         11          NA
1 11      12         12          NA
2 12      13         13          11
3 13      14         14          12
4 14      NA         NA          13
5 NA      NA         NA          14

动物园

lag.zoolag.ts是一致的。请注意,由于动物园代表的是间隔不长的系列,所以它不能假设时间0是在第1次之前,只有当我们知道该系列有规律地间隔时,我们才能做出这样的假设。因此,如果时间1是序列中最早的时间,则此时的值将被删除,因为无法确定延迟到哪一段时间。新的滞后序列现在从原始系列中的第二个时间值开始。这与lag.ts示例类似,除了在lag.ts中有0时间外,在这个示例中没有这样的时间。同样,我们也不能及时地延长时间尺度。

代码语言:javascript
运行
复制
library(zoo)
z <- zoo(11:14)
merge(z, lag(z), lag(z, 1), lag(z,-1))

给予:

代码语言:javascript
运行
复制
   z lag(z) lag(z, 1) lag(z, -1)
1 11     12        12         NA
2 12     13        13         11
3 13     14        14         12
4 14     NA        NA         13

zooreg

动物园包确实有一个zooreg类,它假定有规律的间隔序列,除了一些缺失的值之外,它可以推断出之前的情况,就像ts一样。用zooreg可以推断出时间0在前面,时间5在后面。

代码语言:javascript
运行
复制
library(zoo)
zr <- zooreg(11:14)
merge(zr, lag(zr), lag(zr, 1), lag(zr,-1))

给予:

代码语言:javascript
运行
复制
  zr lag(zr) lag(zr, 1) lag(zr, -1)
0 NA      11         11          NA
1 11      12         12          NA
2 12      13         13          11
3 13      14         14          12
4 14      NA         NA          13
5 NA      NA         NA          14

lm

lmzoo一无所知,将完全忽略时间索引。如果您不想忽略它,即您希望在运行回归之前对所涉及的序列,请使用dyn (或dynlm)包。使用前者:

代码语言:javascript
运行
复制
library(dyn)
set.seed(123)
zr <- zooreg(rnorm(10))
y <- 1 + 2 * zr + 3 * lag(zr, -1)
dyn$lm(y ~ zr + lag(zr, -1))

给予:

代码语言:javascript
运行
复制
Call:
lm(formula = dyn(y ~ zr + lag(zr, -1)))

Coefficients:
(Intercept)           zr  lag(zr, -1)  
          1            2            3  

注释1:一定要阅读帮助文件中的文档:?lag.ts?lag.zoo?lag.zooreghelp(package = dyn)

注2:,如果滞后的方向似乎令人困惑,您可以定义自己的函数并使用它来代替lag。例如,这给出了与上面显示的lm输出相同的系数:

代码语言:javascript
运行
复制
Lag <- function(x, k = 1) lag(x, -k)
dyn$lm(y ~ zr + Lag(zr))

另一个警告词是,与与R的核心一致的lag.zoolag.zooreg不同,xts包中的lag.xts是不一致的。而且,dplyr中的lag也是不一致的(如果加载dplyr,那么dplyr将用它自己不一致的lag版本在R中屏蔽lag,更糟糕的是)。还请注意,dynlm中的LLag一样工作,但明智地使用了不同的名称以避免混淆。

票数 2
EN

Stack Overflow用户

发布于 2015-12-15 16:22:18

请先咨询手册

描述 计算时间序列的滞后版本,将时间基移回给定数量的观测值。 默认S3方法: 滞后(x,k= 1,.) 参数 X向量或矩阵或单变量或多元时间序列 K滞后数(以观察单位为单位)。

因此,lag不返回滞后值。它返回整个滞后的时间序列,由一些k移回来。这不是一个简单的lm可以使用的东西,实际上也不是您想要使用的东西。然而,这对我来说是可行的:

代码语言:javascript
运行
复制
library(zoo)

x <- zoo(c(11, 12, 13, 14))
y <- c(1, 2.3, 3.8, 4.2)

lagged <- lag(x, -1)
lagged <- c(lagged, c=0) # first lag is defined as zero

model <- lm(y ~ x + lagged)
summary(model)

返回:

代码语言:javascript
运行
复制
Call:
lm(formula = y ~ x + lagged)

Residuals:
         1          2          3          4 
-8.327e-17 -1.833e-01  3.667e-01 -1.833e-01 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept) -8.86333    4.20149  -2.110    0.282
x            0.89667    0.38456   2.332    0.258
lagged       0.05333    0.08199   0.650    0.633

Residual standard error: 0.4491 on 1 degrees of freedom
Multiple R-squared:  0.9687,    Adjusted R-squared:  0.9062 
F-statistic: 15.49 on 2 and 1 DF,  p-value: 0.1769
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34293595

复制
相关文章

相似问题

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