R:避免summary.plm

我正在使用R来运行蒙特卡罗模拟,研究面板数据估计器的性能。因为我将进行大量的试验,所以我需要从我的代码中获得至少不错的性能。 在我的模拟的10次试验中使用
Rprof
表明,相当一部分时间用于调用
summary.plm
。下面提供了
Rprofsummary
的前几行:
$by.total
                            total.time total.pct self.time self.pct
"trial"                          54.48     100.0      0.00      0.0
"coefs"                          53.90      98.9      0.06      0.1
"model.matrix"                   36.72      67.4      0.10      0.2
"model.matrix.pFormula"          35.98      66.0      0.06      0.1
"summary"                        33.82      62.1      0.00      0.0
"summary.plm"                    33.80      62.0      0.08      0.1
"r.squared"                      29.00      53.2      0.02      0.0
"FUN"                            24.84      45.6      7.52     13.8
我在我的代码中调用
summary
因为我需要得到系数估计的标准误差以及系数本身(我可以从plm对象得到)。我的电话看起来像
regression <- plm(g ~ y0 + Xit, data=panel_data, model=model, index=c("country","period"))

coefficients_estimated <- summary(regression)$coefficients[,"Estimate"]
ses_estimated <- summary(regression)$coefficients[,"Std. Error"]
我有一种唠叨的感觉,这是一个巨大的浪费cpu时间,但我不知道R如何做的事情,以避免调用摘要。我很欣赏有关幕后发生的事情的任何信息,或者某些方法可以减少这种情况。     
已邀请:
你只需要看看里面
plm:::summary.plm
就能看到它在做什么。当你这样做时,你会发现你的模型适合调用
summary()
的两条线可以替换为:
coefficients_estimated <- coef(regression)
ses_estimated <- sqrt(diag(vcov(regression)))
例如:
require(plm)
data("Produc", package = "plm")
zz <- plm(log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp, 
          data = Produc, index = c("state","year"))
summary(zz)
给出:
> summary(zz)
Oneway (individual) effect Within Model

....

Coefficients :
             Estimate  Std. Error t-value  Pr(>|t|)    
log(pcap) -0.02614965  0.02900158 -0.9017    0.3675    
log(pc)    0.29200693  0.02511967 11.6246 < 2.2e-16 ***
log(emp)   0.76815947  0.03009174 25.5273 < 2.2e-16 ***
unemp     -0.00529774  0.00098873 -5.3582 1.114e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 
....
我显示的两行返回
zz
> coef(zz)
   log(pcap)      log(pc)     log(emp)        unemp 
-0.026149654  0.292006925  0.768159473 -0.005297741 
> sqrt(diag(vcov(zz)))
   log(pcap)      log(pc)     log(emp)        unemp 
0.0290015755 0.0251196728 0.0300917394 0.0009887257
你没有真正提供足够的信息(例如你的模拟代码或
Rprof()
的完整输出)来说明这是否有用 - 它肯定看起来并不像
summary()
花费了大量的时间;
FUN
比你展示的任何其他东西都贵得多,而且你所展示的元素中,
r.squared()
是唯一一个出现在
plm:::summary.plm()
中并且它似乎没有时间的东西。 因此,上述速度是否明显加快仍有待观察。     
如果你想更进一步,那么看看
plm:::plm
的实际功能代码你会注意到有很多参数检查,在最后一次调用之前
plm:::plm.fit
你可以(如果真的想要),直接跳到
plm.fit
。 最后一点。你提到你的问题是蒙特卡罗模拟。您可以利用并行计算来提高速度吗?     
只需使用
coeftest(zz)
coeftest
lmtest
包中;它会比
summary.plm
更快地给你
plm
物体的系数和标准误差。     

要回复问题请先登录注册