代码之家  ›  专栏  ›  技术社区  ›  Anakin Skywalker

R中的plm()函数和Python中的panelOLS()函数如何处理丢失的值

  •  0
  • Anakin Skywalker  · 技术社区  · 3 年前

    我正在构建一个模型,使用函数 plm() 来自 plm 包裹

    我的一个x变量包含 NA 因为我使用了t-1滞后计算。

    我的R代码如下

    panel_df <- pdata.frame(df, index = c("AUTHOR_ID", "Year"), drop.index = TRUE, row.names = TRUE)
    
    plmFit1 <- plm(y~ x1 + x2 + x3_t_1, data = panel_df, effect = 'twoways')
    

    我发现的最好的东西 documentation online

    数据不一定是连续的(距离为1的规则时间序列),因为平衡性并不意味着连续性。要使数据连续,请使用make.pconsecutive()(也可以选择将参数balanced=TRUE设置为连续和平衡,另请参阅两个函数的比较示例。注意:在使数据平衡之前,不会检查单个或时间索引中具有NA值的(p)data.frame(pseries的元素)行,而是静默地删除这些行。在这种情况下,无法推断缺失值指的是哪个个体或时间段(另请参见示例)。特别是,这意味着:一个人原始时间段的第一个/最后一个位置的NA值被删除,这通常是为了描述该个人时间序列的开始和结束。因此,在应用make.pbalanced之前,可能需要检查索引变量中是否有NA值,尤其是检查原始数据中每个个体的第一个和最后一个位置的NA值,如果是,可以将这些值设置为时间序列的某个有意义的开始/结束值。

    我也没有找到任何东西 panelOLS

    默认情况下,他们如何处理丢失的值,因为我收到的是带系数的输出?

    0 回复  |  直到 2 年前
        1
  •  1
  •   Helix123    3 年前

    我不能评论Python panelOLS 但会假设它是相似的。

    plm 遵循标准 lm 行为:落差观测(线) NA 估计之前的值。你引用的文件与这种行为无关。

    比较您的数据预估计( df , panel_df )和数据后估计(在中的模型对象中找到 $model )。

    你也可以看看 ?na.omit 并阅读所描述的行为 na.omit (此处描述的其他方法不支持 plm )。

    以下是一个示例:

    library(plm)
    data(Grunfeld) 
    pdf <- pdata.frame(Grunfeld)
    
    head(pdf)
    #>        firm year   inv  value capital
    #> 1-1935    1 1935 317.6 3078.5     2.8
    #> 1-1936    1 1936 391.8 4661.7    52.6
    #> 1-1937    1 1937 410.6 5387.1   156.9
    #> 1-1938    1 1938 257.7 2792.2   209.2
    #> 1-1939    1 1939 330.8 4313.2   203.4
    #> 1-1940    1 1940 461.2 4643.9   207.2
    
    pdf[3, "inv"] <- NA # set one value to NA in 3rd row (1-1937)
    head(pdf)
    #>        firm year   inv  value capital
    #> 1-1935    1 1935 317.6 3078.5     2.8
    #> 1-1936    1 1936 391.8 4661.7    52.6
    #> 1-1937    1 1937    NA 5387.1   156.9
    #> 1-1938    1 1938 257.7 2792.2   209.2
    #> 1-1939    1 1939 330.8 4313.2   203.4
    #> 1-1940    1 1940 461.2 4643.9   207.2
    
    nrow(pdf) # 200
    #> [1] 200
    
    # estimate model    
    mod <- plm(inv ~ value + capital, data = pdf, model = "within")
    
    head(mod$model) # no entry for 1-1937
    #>          inv  value capital
    #> 1-1935 317.6 3078.5     2.8
    #> 1-1936 391.8 4661.7    52.6
    #> 1-1938 257.7 2792.2   209.2
    #> 1-1939 330.8 4313.2   203.4
    #> 1-1940 461.2 4643.9   207.2
    #> 1-1941 512.0 4551.2   255.2
    
    nrow(mod$model) # 199 rows
    #> [1] 199