不平衡小组的第一次差异回归的残差

问题描述 投票:2回答:1

我试图使用plm估计一些不平衡面板数据的第一个差异模型。我的模型似乎工作,我得到系数估计,但我想知道是否有办法获得每个观察使用的残差(或拟合值)。

我遇到了两个问题,我不知道如何将残差附加到它们所关联的观察中,并且我似乎得到了不正确的残差数量。

如果我使用model.name $ residuals从估计模型中检索残差,我会得到一个比model.name $ model更短的向量。

require(plm)
X <- rnorm(14)
Y <- c(.4,1,1.5,1.3,1,4,5,6.5,7.3,3.7,5,.7,4,6)
Time <- rep(1:5,times=2)
Time <- c(Time, c(1,2,4,5))
ID <- rep(1:2,each=5)
ID <- c(ID,c(3,3,3,3))
TestData <- data.frame("Y"=Y,"X"=X,"ID"=ID,"Time"=Time)
model.name <- plm(Y~X,data=TestData,index = c("ID","Time"),model="fd")

> length(model.name$residuals)
[1] 11
> nrow(model.name$model)
[1] 14

(注意:ID = 3缺少对t = 3的观察)

查看model.name $ model我看到它包括所有观察结果,包括每个ID成员的t = 1。在第一个差分中,将删除t = 1个观测值,因此在这种情况下,具有所有时间段的两个ID应该具有来自剩余时间段的4个残差。 ID = 3应该有t = 2的残差,没有t = 3因为它缺失,没有t = 4因为没有差值(由于缺少t = 3值)然后是t的残差= 5。

从这看起来应该有10个残差,但我有11个。我很感激为什么有这么多残差,以及如何将残差连接到正确的索引(ID和时间)。

r output panel-data plm
1个回答
3
投票

使用model="fd"进行的滞后是基于相邻行,而不是时间索引的实际值。因此,如果您有非连续的时间段,这将给您意想不到的结果。为了避免这种情况,请在尊重滞后时间段并估计合并模型时自己进行差异处理。这里不关心数据的不平衡性。

从包plm的1.7.0版本开始,lag()函数根据默认时间段的值执行滞后(先前的默认值是相邻行)。使用此功能自己做滞后。

继续你的例子:

pTestData <- pdata.frame(TestData, index=c("ID", "Time"))

pTestData$Y_diff <- plm::lag(pTestData$Y) - pTestData$Y
pTestData$X_diff <- plm::lag(pTestData$X) - pTestData$X
fdmod <- plm(Y_diff ~ X_diff, data = pTestData, model = "pooling")
length(residuals(fdmod)) # 10
nrow(fdmod$model)        # 10

当我提到滞后函数时,我明确地使用了plm::,因为其他几个包也有滞后函数(最值得注意的是statsdplyr),你想在这里使用包plm中的那个。要将残差增加到差异数据(实际用于计算模型),只需执行以下操作:dat <- cbind(fdmod$model, residuals(fdmod))

此外,您可能对is.pconsecutive函数感兴趣,以检查数据的连续性:

is.pconsecutive(pTestData)
#    1     2     3 
# TRUE  TRUE FALSE 

函数make.pconsecutive将通过插入缺少时间段的NA值的行来使您的数据连续。

© www.soinside.com 2019 - 2024. All rights reserved.