【问题标题】:Lag in multiindex time series panel data on RR上的多索引时间序列面板数据滞后
【发布时间】:2019-07-23 14:54:04
【问题描述】:

我有一个包含数百行这样结构的数据集

User    Date        Value1  Value2
A       2012-01-01  4       3
A       2012-01-02  5       7
A       2012-01-03  6       1
A       2012-01-04  7       4
B       2012-01-01  2       4
B       2012-01-02  3       2
B       2012-01-03  4       9
B       2012-01-04  5       3

由于面板数据有两个指数(用户=k,日期=t),我很难对 R 进行回归,其中因变量(值 1)仅滞后于时间指数。回归应按如下方式执行:

值1(k,t+1) ~ 值2(k,t) 要么 值1(k,t) ~ 值2(k,t-1)

有什么建议吗?

【问题讨论】:

  • group_by 有滞后?
  • 欢迎来到 Stack Overflow!您能否发布示例数据框的 dput() 以便我们可以给您一个可复制的示例?谢谢!

标签: r regression multi-index panel-data


【解决方案1】:

这是一个使用 dplyr 包的解决方案,您可能会注意到,在下面的代码中,我明确引用了 dplyr 的滞后函数,而不是基本 R(统计数据)。这是因为 dplyr 的滞后函数不需要时间序列输入。

我还要注意,您列出的两个公式可能会产生不同的回归结果,因为您将在不同的数据集上运行它们,即

Value1(k,t+1) ~ Value2(k,t) : 在 1-01-2012 到 1-03-2012 的时间段上运行

Value1(k,t) ~ Value2(k,t-1) : 在 1-02-2012 到 1-04-2012 的时间段上运行

library("tidyverse")

df <- data.frame(User = c(rep("A", 4), rep("B", 4)),
             Date = rep(seq.Date(as.Date("2012-01-01"), as.Date("2012-01-04"), by = "day"), 2),
             Value1 = c(4, 5, 6, 7, 2, 3, 4, 5),
             Value2 = c(3, 7, 1, 4, 4, 2, 9, 3))

df2 <- df %>% arrange(User,Date) %>%
  group_by(User) %>%
  mutate(lag_v2 = dplyr::lag(Value2), 
         lead_v1 = dplyr::lead(Value1))



df3<-df2[!is.na(df2$lag_v2),]
df4<-df2[!is.na(df2$lead_v1),]

summary(lm(Value1~lag_v2,data=df3))
summary(lm(lead_v1~Value2,data=df4))

【讨论】:

    【解决方案2】:

    对于每个用户,您可以这样做:

    > df <- data.frame(User = c(rep("A", 4), rep("B", 4)),
    +                  Date = rep(seq.Date(as.Date("2012-01-01"), as.Date("2012-01-04"), by = "day"), 2),
    +                  Value1 = c(4, 5, 6, 7, 2, 3, 4, 5),
    +                  Value2 = c(3, 7, 1, 4, 4, 2, 9, 3))
    >   
    > df_A <- df[df$User == "A", c("Value1", "Value2")]
    > ts_A <- ts(df_A, start = c(2012, 1, 1), frequency = 365)
    > ts_A <- ts.intersect(ts_A, lag(ts_A, -1))
    > colnames(ts_A) <- c("Value1", "Value2", "Value1_t_1", "Value2_t_1")
    > 
    > lm(Value1 ~ Value2_t_1, ts_A)
    
    Call:
    lm(formula = Value1 ~ Value2_t_1, data = ts_A)
    
    Coefficients:
    (Intercept)   Value2_t_1  
         6.3929      -0.1071  
    
    > 
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-13
      • 2020-09-30
      • 2012-09-08
      • 2021-07-06
      • 2017-12-08
      • 1970-01-01
      • 2013-11-17
      • 2018-04-15
      相关资源
      最近更新 更多