3 votos

Estimación de la TFP en R utilizando los paquetes prodest y estprod.

Estoy escribiendo mi Tesis de Licenciatura y realmente necesito ayuda con la estimación de TFP. Hasta ahora tengo un conjunto de datos con valores logarítmicos de Valor Agregado (va), Trabajo (l), Capital (k), y Materiales (m). El conjunto de datos inicial está disponible aquí: https://drive.google.com/file/d/1aedWYABus1fQjKWxkOmYOmxv-qSja7hF/view?usp=sharing

Hasta ahora mi código es:

remove(list=ls())

library(plm)
library(dplyr)
library(ggplot2)
library(prodest)
library(estprod)
library(broom)

setwd("C:/Users/vadya/Desktop/baka")

Data <- read.csv("LV.csv", header=TRUE, sep=",")
str(Data)

summary(Data)

DataA <- Data %>% 
  filter(NACE == 'A') %>% 
  filter(VA > 0, L > 0, K > 0, M > 0) %>%
  mutate(l = log(L),
         va = log(VA),
         k = log(K),
         m = log(M))

wooldridge(data = DataA, va ~ l | k | m, id = "ID", time = "Year", bootstrap = TRUE, gross = FALSE)

levinsohn_petrin(data = DataA, va ~ l | k | m, id = "ID", time = "Year", bootstrap = TRUE, gross = FALSE)

olley_pakes(data = DataA, va ~ l | k | m, id = "ID", time = "Year", bootstrap = TRUE, gross = FALSE)

mod1 = estprod::levinsohn_petrin(data = DataA,
                                 formula = va ~ l | k | m, 
                                 id = "ID", 
                                 time = "Year", 
                                 reps = 20,
                                 gross = FALSE) 
mod1

mod2 = prodest::prodestLP(DataA$va,
                      fX = DataA$l,
                          sX = DataA$k, 
                      pX = DataA$m,
                          idvar = DataA$ID,
                      timevar = DataA$Year,
                          opt='optim',
                          exit = FALSE,
                          tol = 1e-100)  

omega = prodest::omega(mod2) 

Hasta ahora, el problema es el siguiente: con el paquete estprod solo obtengo coeficientes estimados para l y k, sin m estprod result

Con el paquete prodest, el problema es el siguiente: prodest result

Vi la misma discusión en otro tema en StackExchange donde un chico estaba haciendo la misma pregunta, pero él había proporcionado una parte de sus datos, y todo funcionó. Pero en mi caso, los problemas son diferentes.

¿Alguien ha enfrentado el mismo problema, y es posible resolver estos problemas, ya que apenas he comenzado a estudiar TFP en R, así que realmente apreciaría su ayuda y cualquier impacto proporcionado. ¡Gracias de antemano!

0 votos

No es una respuesta, pero en alguna parte de tu código, estás intentando unir dos marcos de datos de tamaños diferentes. Eso es lo que encuentras, encuentras el problema.

0 votos

Sí, entiendo que el error en el paquete prodest dice eso, pero el conjunto de datos tiene el tamaño que tiene, así que básicamente uso el mismo conjunto de datos (con las mismas variables) que el autor de la función prodest lo hizo

1voto

Matthias Benkard Puntos 11264

Obtienes el error porque tu ID es una cadena de texto y la función `prodestLP` tiene un problema con eso aquí, lo que conduce a especificar incorrectamente la matriz de reemplazo en este caso.

Puedes resolver este problema con:

 DataA$ID<-as.numeric(as.factor( DataA$ID))

una vez que declaras el ID como numérico, el código funciona:

     mod2 = prodest::prodestLP(DataA$va,
+                            fX = DataA$l,
+                            sX = DataA$k, 
+                            pX = DataA$m,
+                            idvar = DataA$ID,
+                            timevar = DataA$Year,
+                            opt='optim',
+                            exit = FALSE,
+                            tol = 1e-100)  
>  
>  omega = prodest::omega(mod2) 

con la salida:

    summary(mod2)

-------------------------------------------------------------
-    Estimación de la Función de Producción   -
-------------------------------------------------------------
                   Método :    LP              
-------------------------------------------------------------
                               fX1       sX1 
Parámetros Estimados      :   0.107     0.458 
                             (0.012)   (0.052)
-------------------------------------------------------------
N                         :  4397
-------------------------------------------------------------
Repetición de Bootstrap     :  20
Parámetros de la 1ra etapa      :  0.107     0.249 
Optimizador                 :  optim
-------------------------------------------------------------
Tiempo Transcurrido              :  0.02 mins

-------------------------------------------------------------

summary(omega)
       V1        
 Mínimo   :-3.452  
 1er Cuartil: 1.428  
 Mediana : 1.842  
 Promedio   : 1.778  
 3er Cuartil: 2.202  
 Máximo   : 4.492  

Actualización, estos son los paquetes que estoy ejecutando y el código antes del que se muestra arriba (también estoy ejecutando R versión 4.0.2 (2020-06-22)):

rm(list = ls())

Data <- read.csv("~/R studio/excercises in randomness/tfp2/Gmail/LV.csv")

 View(Data)

 pckg<-c("plm","readxl","dplyr","ggplot2", "broom","prodest", "estprod")
 #install.packages(c("plm","readxl","dplyr","ggplot2", "broom","prodest", "estprod"))
 lapply(pckg, require, character.only = TRUE)

 head(Data)

 summary(Data)

 DataA <- Data %>% 
         filter(NACE == 'A') %>% 
         filter(VA > 0, L > 0, K > 0, M > 0) %>%
         mutate(l = log(L),
                va = log(VA),
                k = log(K),
                m = log(M))

0 votos

1muflon1, muchas gracias por la aclaración, sin embargo, ¿puedo hacer dos preguntas más - 1. ¿es de alguna manera posible mostrar no solo la variable flotante y de estado, sino también las entradas intermedias? 2. ¿Sabes cómo interpretar estas t-estadísticas entre corchetes - quiero decir, es posible mostrar el valor p también, como en otras fórmulas de regresión con ***, **, *?

0 votos

@WadimiLchuk, de nada, si piensas que mi respuesta responde a tu pregunta, considérala como aceptada. En cuanto a esas preguntas adicionales: 1. Puedes recuperar todos los betas del modelo usando print(mod2@Model[["FSbetas"]]), pero solo el intercepción fX1 y sX1 están etiquetados. 2. Esos valores entre paréntesis no son estadísticas t, sino errores estándar bootstrap, puedes calcular las estadísticas t dividiendo los coeficientes por los errores estándar ($\beta/SE$). Los valores críticos para las estadísticas t con un gran número de observaciones son aproximadamente 1.65, 1.96 y 2.58 para una prueba bilateral para 90, 95 y 99 de confianza respectivamente.

0 votos

Puedes usar la función qt incorporada en R para obtener valores críticos precisos. También hay una función incorporada para el valor p basado en las estadísticas t (la función incorporada pt)

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X