【问题标题】:R - plm regression with time in posix-formatR - posix 格式的 plm 随时间回归
【发布时间】:2015-10-24 18:13:15
【问题描述】:

我对 R 中的面板数据几乎没有经验,我正在尝试使用 plm-package 运行简单的面板回归。但是,将我的数据帧转换为 pdata.frame 时,我的时间索引变量将转换为因子变量。这意味着,如果我想将因变量作为时间的函数进行回归,则回归会生成一长串时间的虚拟变量,并为每个变量计算单独的系数。我只想要每个时间单位的平均效果(即平均每月增加/减少点数)。

示例数据框:

ID    Date        Points
1     1/11/2014   2
1     1/12/2014   4
1     1/1/2015    6
1     1/2/2015    8
2     1/11/2014   1
2     1/12/2014   2
2     1/1/2015    3
2     1/2/2015    4

假设示例数据帧结构是 ID = int,Date = POSIXct,Points = int。 然后我将其转换为带有索引 ID 和日期的 pdata.frame:

panel <- pdata.frame(dataframe, c("ID", "Date"))

并运行 plm 固定效应回归:

fixed <- plm(Points ~ Date, data=panel, model="within")
summary(fixed)

然后将得到的系数按每个月细分为虚拟变量。 我想将我的时间变量视为一个连续变量,所以我只得到一个日期系数。我怎样才能做到这一点?有没有办法避免将时间索引变量格式化为面板数据帧中的一个因素?

【问题讨论】:

    标签: r panel-data plm


    【解决方案1】:

    我认为您需要从 panel$Date 创建一个单独的时钟或时间计数器以在您的模型中使用。例如:

    library(dplyr)
    dataframe <- dataframe %>%
        group_by(ID) %>%
        mutate(clock = seq_along(ID))
    panel <- pdata.frame(dataframe, c("ID", "Date"))
    

    产生这些数据:

                 ID       Date Points clock
    1-2014-11-01  1 2014-11-01      2     1
    1-2014-12-01  1 2014-12-01      4     2
    1-2015-01-01  1 2015-01-01      6     3
    1-2015-02-01  1 2015-02-01      8     4
    2-2014-11-01  2 2014-11-01      1     1
    2-2014-12-01  2 2014-12-01      2     2
    2-2015-01-01  2 2015-01-01      3     3
    2-2015-02-01  2 2015-02-01      4     4
    

    产生这个输出:

    > fixed <- plm(Points ~ clock, data=panel, model="within")
    > summary(fixed)
    Oneway (individual) effect Within Model
    
    Call:
    plm(formula = points ~ clock, data = panel, model = "within")
    
    Balanced Panel: n=2, T=4, N=8
    
    Residuals :
       Min. 1st Qu.  Median 3rd Qu.    Max. 
     -0.750  -0.375   0.000   0.375   0.750 
    
    Coefficients :
          Estimate Std. Error t-value Pr(>|t|)   
    clock  1.50000    0.22361  6.7082 0.001114 **
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    
    Total Sum of Squares:    25
    Residual Sum of Squares: 2.5
    R-Squared      :  0.9 
          Adj. R-Squared :  0.5625 
    F-statistic: 45 on 1 and 5 DF, p-value: 0.0011144
    

    【讨论】:

    • 能否对这个答案投反对票,请解释原因?
    • 感谢您的回答,尽管似乎整个线程都被否决了。 seq_along 解决方案是一个好主意,适用于我的简单示例数据集,但如果数据集有不同的开始和停止时间怎么办?假设 id=2 是在 2014 年 1 月 12 日首次观察到,最后在 2014 年 1 月 3 日观察到,那么时钟变量将同时设置 (id=1, date=2014-11-01) 和 (id=2, date =2014-12-01)作为时钟=1。有没有更好的办法?
    • 这取决于您要探索的时间和点之间的关系。如果您认为具体日期很重要,那么您的原始模型实际上是正确的。如果从观察开始已经过去了一段时间,那么即使开始日期不同,我建议的方法也可以正常工作。如果是别的东西,那么您将需要一种不同的方法。
    • 好点。实际上,我认为具体的日期很重要,因为更高的分数更有可能在以后的日期。目前我只是想重新创建我在 Stata 中得到的结果。您的方法非常接近这些结果,但 Stata 似乎能够处理不同的开始/结束时间,而不会创建我认为会产生影响的时间虚拟机。
    • @ulfeledr 看来您对 R 中的两种 Stata 都非常了解。您能帮我将类似的 Stata 代码翻译成 R 吗?非常感谢。
    猜你喜欢
    • 2017-09-25
    • 1970-01-01
    • 2017-08-15
    • 2021-12-30
    • 1970-01-01
    • 2020-07-01
    • 2015-04-06
    • 2020-06-15
    • 2021-11-07
    相关资源
    最近更新 更多