Прогноз с помощью метода plm

Я использую пакет plm для оценки модели случайных эффектов на панельных данных. Чтение этот вопрос насчёт предсказания в пакете plm вызывает у меня некоторые сомнения. Как именно это работает? Я попробовал 3 альтернативных метода, и они дают разные решения. Почему ?

library(data.table); library(plm)

set.seed(100)
DT <- data.table(CJ(id=c(1,2,3,4), time=c(1:10)))
DT[, x1:=rnorm(40)]
DT[, x2:=rnorm(40)]
DT[, y:=x1 + 2*x2 + rnorm(40)/10 + id]
DT <- DT[!(id=="a" & time==4)] # just to make it an unbalanced panel
setkey(DT, id, time)    

summary(plmFEit <- plm(data=DT, id=c("id","time"), formula=y ~ x1 + x2, model="random"))    
    ###################
    #method 1
    ###################
    # Extract the fitted values from the plm object
    FV <- data.table(plmFEit$model, residuals=as.numeric(plmFEit$residuals))
    FV[, y := as.numeric(y)]
    FV[, x1 := as.numeric(x1)]
    FV[, x2 := as.numeric(x2)]

    DT <- merge(x=DT, y=FV, by=c("y","x1","x2"), all=TRUE)
    DT[, fitted.plm_1 := as.numeric(y) - as.numeric(residuals)]                
    ###################
    #method 2
    ###################        
    # calculate the fitted values 
    DT[, fitted.plm_2 := as.numeric(coef(plmFEit)[1]+coef(plmFEit)[2] * x1 + coef(plmFEit)[3]*x2)]                
    ###################
    #method 3
    ###################
    # using pmodel.response 
    DT$fitted.plm_3 <-pmodel.response(plmFEit,model='random') 

person dax90    schedule 16.02.2015    source источник


Ответы (1)


Способ 1. Это можно сделать проще:

FV <- data.table(plmFEit$model, residuals=as.numeric(plmFEit$residuals))
FV[ , fitted := y - residuals]

Однако он дает те же подходящие значения, что и в вашем подходе с merge()

Метод 2: вы подбираете модель со случайными эффектами (хотя вы и называете ее plmFEit, где FE обычно подразумевает фиксированные эффекты). По сравнению с методом 1 вам не хватает термина идиосинкразической ошибки.

Метод 3: pmodel.response() дает вам переменную ответа (в данном случае это будет y), но с указанным преобразованием (преобразование со случайными эффектами («квазиунизительное»)), примененным к ней (см. pmodel.response()).

Я думаю, то, что вы хотите, дается методом 1.

person Helix123    schedule 06.07.2015