宏觀經濟學

R中的全要素生產率(TFP)估計

  • August 14, 2020

我正在嘗試使用estprodR 中的包計算 TFP,因為該包允許我使用 Gross-Output 進行計算(例如使用 levinsohn petrin),但我無法獲得omega

雖然prodest包可以計算 omega 但我不能添加Gross-Output

有人用R計算過TFP嗎?

**$$ updated $$**可重現的例子

library(prodest)
library(estprod)

data = structure(list(Y = c(12.8268952320028, 12.8521337216858, 12.8297798993317, 12.6357098405348, 
                           12.4004643557221, 12.3600068590732, 12.826153741752, 12.8990697648315, 
                           12.8393196511736, 12.7619091581355), 
                     Labor = c(18.2268433780233, 18.1280743937883, 
                           16.2004953940248, 18.4010948157752, 16.1374389570964, 18.3902253199657, 
                           16.2359220634517, 16.2468898407345, 16.2720069307031, 16.2673373011924), 
                     Capital = c(12.1642906069818, 12.088450259469, 
                          12.0237634086603, 12.0750443461238, 12.0098651639831, 12.0601371534517, 
                          11.9679864443247, 11.9299321784366, 12.0016971178669, 12.1209493577051), 
                     Materials = c(18.1472736836291, 17.7735308597061, 
                         17.1908332586684, 18.3914858811768, 18.2747180360049, 16.9304018090212, 
                         18.4414110290762, 18.0188590654862, 18.1427756804037, 15.805209131618), 
                     id = c(1070101, 1070101, 1070101, 1070101, 
                             1070101, 1070101, 1070102, 1070102, 1070102, 1070102), 
                     year = c(2013,2014, 2015, 2016, 2017, 2018, 2013, 2014, 2015, 2016)), 
                class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -10L))

# Y, Labor, Capital, Materials are in logarithms
mod1 = estprod::levinsohn_petrin(data,
                                formula = Y ~ Labor | Capital | Materials, 
                                id = "id", 
                                time = "year", 
                                reps = 20,
                                gross = T) #estprod with Gross-Output = T

#how can i calculate omega with estprod?

mod2 = prodest::prodestLP(data$Y, # prodest does not have the parameter Gross-Output
fX = data$Labor,
                sX = data$Capital, 
pX = data$Materials,
                idvar = data$id,
timevar = data$year,
                opt='optim',
                exit = F,
                tol = 1e-100)  

omega = prodest::omega(mod2) #with 'prodest' I can calculate omega

按照prodtest手冊,他們將 omega 定義為模型的殘差,即

$$ \omega_{it} = y_{it} − (\alpha + w_{it} \beta + k_{it}\gamma)=y_{it}-\hat{y}_{it} $$

estprod 沒有任何可理解的文件,但我們獲得上述資訊的一種方法是從模型中提取係數,然後計算 $ y-\hat{y} $ 手動。

我們可以使用 broom 包做到這一點:

install.packages("broom")
require(broom) 
coefs<-tidy(mod1)
# A tibble: 3 x 3
 statistic   bias std.error
     <dbl>  <dbl>     <dbl>
1     -3.71   4.77      2.35
2     10.5  -11.8       4.26
3      1.73  -2.14      1.64

名稱已關閉,但第一列給出的係數與我使用摘要檢查模型時的係數相同,因此它們是正確的。

接下來我們就可以計算了 $ y-\hat{y} $ 作為

omega_1 = (data$Y - data$Labor*coefs$statistic[1] - data$Capital*coefs$statistic[2] - data$Materials*coefs$statistic[3])  

程式碼不優雅,但它應該可以完成這項工作。

附帶說明一下,在沒有這些包的情況下估計 TFP 可能是值得的。通常,包是 R 的最大優勢,但在這種情況下,estprod 沒有任何好的隨附文件或手冊,並且 prodest 還沒有像開發人員提到的連結中那樣添加總輸出的可能性。在這種情況下,最好只編寫自己的函式。

引用自:https://economics.stackexchange.com/questions/39184