Значения с подгонкой для модели PLM с NA

У меня есть следующий набор данных

seed(1)
dt <- data.frame(name= rep(c("A", "B", "C"), c(9,11,10)), 
                 year=c(2001:2009,2000,2002:2011,2001:2010),
                 var1=c(NA,rnorm(10),NA,rnorm(18)),
                 var2=c(rnorm(10),NA,NA,rnorm(18)), var3=rnorm(30))

содержащие NAs в некоторых переменных. Я использую пакет plm для оценки следующей модели:

fit.plm <- plm(var1 ~ var2 + var3, data=dt, model = "within", index=c("name","year"), na.action = na.exclude)

Теперь я хотел бы извлечь подходящие значения. Насколько я понимаю, лучший способ сделать это — вычесть остатки из моей переменной ответа var1 (поскольку нет функции для получения подходящих значений в pml (см. здесь):

fit.plm$model[[1]]-fit.plm$residuals
          2           3           4           5           6 
-0.18364082  0.36118823  0.02070257  0.78060817  0.05237859 
          7           8           9          10          13 
 0.12783116  0.03599601 -0.17847569  0.11584831  0.21904021 
         14          15          16          17          18 
 0.75298182  0.18605829 -0.15536450  0.30810595 -0.13921289 
         19          20          21          22          23 
-0.35047492  0.08139121 -0.02019619  0.14397486  0.07854582 
         24          25          26          27          28 
-0.01082184 -0.05211639 -0.02904097  0.43262570 -0.46925312 
         29          30 
 0.37524551  0.35541691

но он исключает строки с NAs. Я хотел бы, чтобы подогнанные значения были дополнены NAs, где исходный набор данных имеет NAs. Должен быть умный и простой способ сохранить NAs от dt до моих подогнанных значений, но я не вижу его. Любая помощь высоко ценится!


person Mace    schedule 04.03.2014    source источник
comment
Аргумент na.action, упрощающий задачу, на данный момент не поддерживается в plm.   -  person Helix123    schedule 29.06.2016


Ответы (1)


Я нашел следующее решение, используя complete.cases. Это работает, но, вероятно, есть лучшие способы:

fited.values <- rep(NA,nrow(dt))
fited.values[complete.cases(dt)] <- fit.plm$model[[1]]-fit.plm$residuals

fited.values
 [1]           NA  0.044116999 -0.001511951  0.182792055 -0.136758888
 [6] -0.009162091  0.220851814  0.221807764  0.228046083  0.297558446
[11]           NA           NA  0.130133821  0.211737223  0.339328498
[16]  0.379826505  0.102156480  0.024129950  0.213088736  0.235454141
[21]  0.321319682  0.420673101  0.474030175  0.497573470  0.205056353
[26]  0.168080225  0.309537308  0.010202845  0.082264514  0.260143856
person Mace    schedule 05.03.2014
comment
Я вижу, что это уже выбрано как ответ, но в сообщении, связанном с вопросом, Милло Джованни (один из авторов пакета plm) говорит... порядок ввода не всегда сохраняется... Этот код работает, если вы только нужен вектор с подобранными значениями, но следует быть осторожным, если намерение состоит в том, чтобы объединиться обратно с исходными данными. См., например, мой предложенный ответ в этом более общем вопросе. - person Peter; 13.11.2015