2014-03-04 34 views
0

PLM模型的值I具有以下數據集墊裝有的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)) 

含有一些變量NA秒。我用的是plm包估計下面的模型:

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

現在,我想提取的擬合值。據我瞭解這樣做是減去我的反應變量var1殘值(由於沒有功能pml得到擬合值(See here)的最佳方式:

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 

,但它與NA小號不包括行。我想用NA s填充的擬合值,其中原始數據集有NA s。必須有一個聰明而簡單的方法來將NA s從dt保留到我的擬合值,但我看不到它。非常感謝!

+0

從現在起,plm不支持'na.action'參數,這會使這更容易。 – Helix123

回答

0

我發現下面的解決方案使用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 
+0

我看到這已被選爲答案,但在Millo Giovanni(「plm」軟件包作者之一)的帖子中提到「......輸入順序並不總是保留......」。如果您只需要一個具有擬合值的向量,此代碼就可以工作,但如果意圖將原始數據合併回來,則應該小心。看看我的建議答案在這個更[一般問題](http://stackoverflow.com/questions/23143428/merge-plm-fitted-values-to-dataset)。 – Peter