首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与包装‘and’和‘`plm`’的第一次差异的回归

与包装‘and’和‘`plm`’的第一次差异的回归
EN

Stack Overflow用户
提问于 2022-05-16 22:26:34
回答 1查看 65关注 0票数 0

我从教科书中直接估计出第一个差异的线性回归:

Edition.

首先,我从plm()包中估计模型与plm函数的差异,并从broom包中提取augment()函数的残差。我收到了一条错误消息,并怀疑我可能没有正确使用"fd"选项和/或误用augment()。对model="pooling"的类似尝试似乎奏效了。帮助感激!

代码语言:javascript
复制
library(AER)
data(Fatalities)
Fatalities$fatality <- Fatalities$fatal / Fatalities$pop * 10000

library(plm)
library(broom)

plm.pool <- plm(fatality ~ beertax, data=Fatalities, model="pooling")
tidy(plm.pool)  # ok
augment(plm.pool)  # ok


plm.fd <- plm(fatality ~ beertax, data=Fatalities, 
              index=c("state", "year"), 
              model="fd")
tidy(plm.fd)  # looks ok
# A tibble: 2 × 5
  term        estimate std.error statistic p.value
  <chr>          <dbl>     <dbl>     <dbl>   <dbl>
1 (Intercept) -0.00314    0.0119   -0.263    0.792
2 beertax      0.0137     0.285     0.0480   0.962


augment(plm.fd)  # not ok

Error in `$<-.data.frame`(`*tmp*`, ".resid", value = c(`2` = 0.219840293582125,  : 
  replacement has 288 rows, data has 336
In addition: Warning message:
In get(.Generic)(e1, e2) :
  longer object length is not a multiple of shorter object length

编辑:一个解决的方法

因此,我怀疑这个问题与plm返回的模型和残差没有相同的行数有关:

length(row.names(plm.fd$model))是336号

length(names(plm.fd$residuals))是288个。

有人能告诉我,以下是否是从第一次差分估计中得到残差和拟合值的正确方法?

代码语言:javascript
复制
data.frame(".rownames" = row.names(plm.fd$model), plm.fd$model) %>%
  left_join(data.frame(".rownames" = names(resid(plm.fd)), 
                       ".fitted" = fitted(plm.fd),
                       ".resid" = resid(plm.fd)
                       )) -> Fatalities.augmented
head(Fatalities.augmented)

  .rownames fatality  beertax       .fitted       .resid
1         1  2.12836 1.539379            NA           NA
2         2  2.34848 1.788991  0.0034166261  0.219840294
3         3  2.33643 1.714286 -0.0010225479 -0.007890716
4         4  2.19348 1.652542 -0.0008451287 -0.138968054
5         5  2.66914 1.609907 -0.0005835833  0.479380363
6         6  2.71859 1.560000 -0.0006831177  0.053269973

参考文献:

编辑参考资料:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-18 19:19:14

这是由于误解或非特殊的套管,第一差分( FD )面板模型在broom::augment_columns:函数假定FD模型的残值有相同的预测值。

更具体地说,这一行:ret$.resid <- residuals0(x) (https://github.com/tidymodels/broom/blob/069c21e903174fcf5d491091b7c347a9fdcd2999/R/utilities.R#L256)

FD模型对数据进行压缩,因此残差的个数低于模型估计所用的观测数。您可以在summary输出中看到这一点:

代码语言:javascript
复制
summary(panel3) # FD model
Oneway (individual) effect First-Difference Model

[...]
Balanced Panel: n = 90, T = 7, N = 630
Observations used in estimation: 540
[...]

当该模型输入630个观测值时,在FD变换后,仅使用540个变换观测值,因为每组(个体维) -> 630 - 90 = 540个观测值损失一次。

broom:augment_columns希望将预测值(630)和剩余值(540)放在相同的数据帧中,这必然会失败。如果他们想这样做,他们可以用NA填充值(例如,每一个设置为NA的第一行)。

我的建议是让开发人员/扫帚的维护者意识到这个问题(也许还有这篇文章)。plm的FD面板模型是通过plm_object$args$model == "fd"识别的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72266256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档