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

How does plm() function in R and panelOLS() in Python handle missing values

我正在构建模型,使用 plm 包中的函数 plm()

我的一个 x 变量包含 NAs,因为我使用了 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 以进行连续和平衡,另请参见两个函数比较的示例。注意: (p)[= 的行36=](pseries 的元素)在个体或时间索引中具有 NA 值不被检查,而是在数据平衡之前静默删除。在这种情况下,无法推断缺失值(s)是指哪个个体或时间段)(另请参阅示例)。特别是,这意味着:个体原始时间段 first/last 位置的 NA 值被删除,这通常意味着描述该个体时间序列的开始和结束. 因此,在应用 make.pbalanced 之前,可能需要检查索引变量中是否有任何 NA 值,尤其是检查原始数据中每个个体的第一个和最后一个位置的 NA 值,如果是,也许将它们设置为时间序列的一些有意义的 begin/end 值。

我也没有找到 panelOLS 的任何内容。

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

我无法对 Python 的 panelOLS 发表评论,但我认为它是相似的。

plm 遵循标准 lm 行为:在估计之前删除具有 NA 值的观测值(线)。您引用的文档与此行为无关。

比较您的数据预估(dfpanel_df)和数据 post 预估(在 $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