R 中的 plm() 函数和 Python 中的 panelOLS() 如何处理缺失值
How does plm() function in R and panelOLS() in Python handle missing values
我正在构建模型,使用 plm
包中的函数 plm()
。
我的一个 x 变量包含 NA
s,因为我使用了 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
值的观测值(线)。您引用的文档与此行为无关。
比较您的数据预估(df
、panel_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
我正在构建模型,使用 plm
包中的函数 plm()
。
我的一个 x 变量包含 NA
s,因为我使用了 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
值的观测值(线)。您引用的文档与此行为无关。
比较您的数据预估(df
、panel_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