2016-09-07 3 views
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 отсутствует наблюдение за т = 3)

Глядя на model.name $ модели я вижу, она включает в себя все наблюдения, в том числе т = 1 для каждого члена ID. В первом отличии t = 1 наблюдения будут удалены, поэтому в этом случае оба идентификатора со всеми временными периодами должны иметь 4 остатка от оставшихся периодов времени. ID = 3 должен иметь остаточное значение для t = 2, нет при t = 3, поскольку он отсутствует, нет для t = 4, поскольку нет значения для разности (из-за отсутствия значения t = 3), а затем остатка для t = 5.

От этого кажется, что должно быть 10 остатков, но у меня есть 11. Я был бы признателен за любую помощь в том, почему существует много остатков, и как подключить остатки к правильному индексу (ID и время).

ответ

2

Задержка с model="fd" основана на соседних строках, а не на фактическом значении индекса времени. Таким образом, если у вас есть не последовательные периоды времени, это даст вам неожиданные результаты. Чтобы этого избежать, сделайте различие самостоятельно, соблюдая период времени, когда запаздывание и оценка пула. Несбалансированность данных здесь не вызывает беспокойства.

В версии разработки пакета plm существует экспериментальная, неэкспортированная функция для задержки в зависимости от значения периода времени (https://r-forge.r-project.org/R/?group_id=406).

Продолжая свой пример:

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

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

Чтобы увеличить невязки к разностным данным (фактически используемым для вычисления модели), просто сделать что-то вроде: dat <- cbind(fdmod$model, residuals(fdmod))

Кроме того, вы можете быть заинтересованы в функция is.pconsecutive для проверки consectutiveness ваших данных:

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

Функция make.pconsecutive сделает ваши данные последовательными, вставив строки с NA значениями для отсутствующего периода.

+0

Спасибо, это очень полезно и отвечает на вопрос. Это может быть более уместным в качестве нового вопроса, но есть ли у вас предложение о том, как разрешить ту же проблему при использовании PLM с «fd» и «IV» или при использовании pgmm? – Misophist