5 votos

Error al estimar una función de producción con el paquete prodest en R

Tengo un panel desequilibrado con 15063 empresas entre 2012 y 2018.

Estoy utilizando este código para estimar la función de producción con el método de Levinsohn & Petrin:

levpet <- prodestLP(Y=base$c_y,
 fX=base$c_l,
 sX=base$c_k,
 pX=base$c_m,
 idvar=base$ruc,
 timevar = base$year,
 R=100  )

donde

  • c_y es el logaritmo del valor añadido
  • c_l es el logaritmo de los salarios
  • c_k es el logaritmo del capital
  • c_m es el registro de materiales
  • ruc es el identificador de la empresa (una cadena)
  • year es un número.

El error que recibo es el siguiente:

Error in `[[<-.data.frame`(`*tmp*`, i, value = c(42719L, 82109L, 82678L,  : 
  replacement has 469326 rows, data has 78221

No sé qué significa ni qué tengo que hacer al respecto.

¿Cómo puedo solucionarlo? Mis datos son muy parecidos a estos:

data(chilean)

datos y prodestLP están dentro de library(prodest)


Estas son todas las bibliotecas que tengo en el actual script

library(tidyverse)
library(dplyr)
library(foreign)
library(haven)
library(readxl)
library(stringr)
library(expss)
library(lubridate)
library(prodest)
library(plm)

Gracias de antemano.


Edición: Con el conjunto de datos que hay en el paquete prodest funciona perfectamente. Aquí hay un ejemplo: https://rpubs.com/hacamvan/319728

Mi conjunto de datos es muy similar, sólo que con muchas más observaciones y una cadena idvar.


Creo que lo he conseguido.

Tuve que asignar un identificador numérico para cada firma. luego funcionó.

Ahora sólo espero poder exportar las regresiones.

1 votos

Puedes publicar tu propia solución como respuesta y aceptarla y entonces se puede cerrar la pregunta.

3voto

mchid Puntos 121

Bueno, me he dado cuenta de que el error se refería a algo que no encajaba en el conjunto de datos. Mi conjunto de datos tenía 78221 obs.

Todo era como data(chilean) la única diferencia debía ser la identificación de cada empresa.

Así que hice esto:

list <- data.frame(table(base$ruc)) # so here i got the string id for every firm
list$idvar <- seq(1:nrow(list)) # here i put a number for each firm from 1.
list <- select(list, ruc, idvar) # We don't need freq var

base <- base %>% left_join(y=list, by=c("ruc"="ruc")) #join it to the original dataset

Y luego funcionó usando base$idvar en lugar de utilizar base$ruc .

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