Analisis Input-Output con R

Por: Francisco Parra Rodríguez franciscoparrod@gmail.com

Tablas input-output utilizadas como ejemplo :

a <- matrix(c(50,10,0,2,7,80,100,3,9,2,7,25,30,45,600,10),nrow=4)
z <- matrix(c(50,10,0,2,7,70,101,3,9,2,8,23,30,45,610,10),nrow=4)

Vector de Productos finales utilizados como ejemplo :

e <- matrix(c(70,200,45,800),nrow=1)

Vector de demanada exogena utilizada como ejemplo :

f <- matrix(c(1,0,0,0),nrow=4)

Función gras(z,a,d,0)

Realiza un RAS de la tabla z sobre la tabla a iterando d veces, si se pone opción 0, no se valida el RAS, en caso contrario se valida el RAS, la validación consiste en el test Chi-cuadrado.

El RAS es una técnica de ajuste automático de una matriz por filas y columnas que desarrollaron Stone y Brown (1962) como método de actualización temporal de matrices input-output. Aunque la técnica se concibió inicialmente para proyectar tablas input-output también es utilizada en los procedimientos de regionalización de tablas nacionales. La aplicación de esta técnica no requiere establecer ningún supuesto sobre el comportamiento de los agentes económicos, ya que las relaciones interindustriales son obtenidas mediante un proceso deductivo que ajusta la información de base a la información parcialmente disponible. A este respecto, hay que tener presente que la aplicación de la técnica RAS requiere de información actual sobre el output, los valores añadidos y la demanda final. Esta información es la necesaria para obtener los vectores de consumos intermedios por filas (\(x_{it+1}\)) y columnas (\(x_{jt+1}\)) que constituyen las variables sobre las que se va ha ir ajustando la matriz de coeficientes técnicos que se quiere proyectar:

Para analizar las diferencias entre las tablas estimadas a través del algoritmo RAS y las reales algunas de las medidas más habitualmente empleadas: como son la media de las diferencias absolutas, el índice de Theil, la medida Chi-cuadrado o el error cuadrático medio.

  1. Media de las diferencias absolutas La expresión de las diferencias absolutas para cada uno de los términos de la matriz es la siguiente: \[ d_{ij}=\frac{|a_{ij}-\tilde a_{ij}|}{a_{ij}} \] siendo \(\tilde a_{ij}\) los coeficientes técnicos que se pretenden estimar y $a{ij} los reales. La desviación media se calcula mediante la expresión siguiente: \[ \bar d = \frac {\sum \sum d_{ij}}{m} \] donde m representa el número de coeficientes considerados.

  2. índice de Theil

El cálculo de las diferencias mediante el índice de Theil se realiza mediante la siguiente fórmula:

\[I=\sum \sum \tilde a_{ij} ln \frac{\tilde a_{ij}}{a_{ij}}\]

  1. Chi-Cuadrado

La expresión del índice Chi-cuadrado para el cálculo de las divergencias entre la tabla real y la estimada es:

\[\chi^2 = \sum \sum \frac{(a_{ij}-\tilde a_{ij})^2}{a_{ij}} \]

La hipótesis de independencia se contrasta en los estadísticos del indice de Thail (I) y en la \(\chi^2\) con la distribución teórica de la \(\chi_{n-1,n-1}^2\) donde (n-1),(n-1) son los grados de libertad. Es decir, si el p-value \(1-\chi_{n-1,n-1}^2(\chi^2)\) y \(1-\chi_{n-1,n-1}^2(I)\) son mayores, por ejemplo, a 0,05, no se rechazaría la hipótesis de independencia.

gras <- function (z,a,d,o) {
if (o==0) {
if (round(sum(z),0)==round(sum(a),0)) {
B <- colSums(z)
C <- rowSums(z)
b <- colSums(a)
c <- rowSums(a)
R <- b/B
A <- t(t(z)*R)
B <- colSums(A)
C <- rowSums(A)
S <- c/C
A <- A*S
for (i in 1:d) {B <- colSums(A)
C <- rowSums(A)
R <- b/B
A <- t(t(A)*R)
B <- colSums(A)
C <- rowSums(A)
S <- c/C
A <- A*S
i <- i+1 }
A } else ("incompatibles") }
else {
if (round(sum(z),0)==round(sum(a),0)) {
B <- colSums(z)
C <- rowSums(z)
b <- colSums(a)
c <- rowSums(a)
R <- b/B
A <- t(t(z)*R)
B <- colSums(A)
C <- rowSums(A)
S <- c/C
A <- A*S
for (i in 1:d) {B <- colSums(A)
C <- rowSums(A)
R <- b/B
A <- t(t(A)*R)
B <- colSums(A)
C <- rowSums(A)
S <- c/C
A <- A*S
i <- i+1 }
A
M <- (A-a)^2/A
M[is.nan(M)]<-0
M <- colSums(M)
n <- length(M)
M <- sum(M)
if ( 1-pchisq(M, df=(n-1), lower.tail=FALSE) > 0.05) (A) else ("no significativo") 
} else ("incompatibles")  
}}

Fuction multiplicador(a,e,f)

Calcula el multiplicador de la demanda exogena f, utilizando la matriz a y la producción e

multiplicador <- function(a,e,f) {
n <-length(f)
n1 <- rep(1,n)
I <- diag(n1)
ie <- c(1/e)
E <- diag(ie)
CL <- a%*%E
AL <- I-CL
IL <- solve(AL)
IL%*%f}

Datos para la actualiación por el metodo euro

“act” es la matriz de tasas de crecimiento de los VAB sectoriales, demanda final, exportaciones, PIB e importaciones, a que hay que ajustar la tabla “T1”. Ambas son las que figuran en el ejemplo de la pagina 468 del “Eurostat Manual of Supply, Use and Input-Output Tables”. Eurostat 2008.

act<- c(0.9500,1.0200,1.0700,1.0525, 1.0164,1.0293,1.0483) # Tasas
  
MIO <- c(16.00,28.00,6.00,15.00,35.00,
 12.00, 144.00, 24.00, 90.00, 130.00, 
 9.00, 64.00, 16.00, 45.00, 66.00, 
 4.00, 6.00, 4.00, 15.00, 0.00, 
 8.00, 8.00, 16.00, 90.00, 0.00, 
 1.00, 8.00, 4.00, 45.00, 0.00, 
 50.00, 142.00, 130.00, 0.00, 0.00)
MIO1 <- matrix(MIO, ncol=7)
T1 <- t(MIO1) 

función mteuro(T1,act,f,m)

“f” es la elasticidad de ajuste y “m” el numero de iteraciones.

Función para iterar el método euro descrito en la pagina 461 del “Eurostat Manual of Supply, Use and Input-Output Tables”. Eurostat 2008.

Este método de actualización ha sido desarrollado por Beutel (Beutel; 2002, Beutel et all; 1994, Penzkofer, Schmalholz, Scholz y Beutel; 1989) para Eurostat. El ME aplica el algoritmo RAS, pero a diferencia de este que requiere conocer previamente las sumas por filas y columnas de las matrices objeto de ajuste, este otro solo precisa como datos exógenos las previsiones macroeconómicas oficiales sobre crecimiento del VAB y las globales importaciones y de la demanda final (consumo, FBC y exportaciones). Los vectores columna y la fila para el consumo intermedio y la demanda final se derivan como variables endógenas, en vez de aceptarse como exógenas. La idea básica es proyectar las tablas Input-Output de forma coherente con las estimaciones macroeconómicas oficiales, evitando ajustes arbitrarios de entrada para garantizar la coherencia de la oferta y la demanda.

Según Eurostat (2008), las principales ventajas del procedimiento de actualización de Euro son: . Procedimiento de actualización robusta de bajo coste, . Requisitos de datos limitados, . Sólo fuentes oficiales se utilizan para la actualización, . Estimación integrada de los cuatro cuadrantes de la tabla input-output, . Sin cambios arbitrarios de coeficientes de insumo, . Se obtienen filas y columnas totales de los consumos intermedios . Se estima la composición estructural de la demanda final durante la iteración y . La coherencia de la oferta y la demanda es proporcionado por el modelo de insumo-producto.

El ME no obstante tiene limitaciones; la composición estructural de los niveles de producción y de la demanda final en el procedimiento Euro no se basa en datos estadísticos, ya que es endógena, y en ocasiones se dispone de información estadística al respecto (encuestas sectoriales, encuestas de presupuestos familiares, comercio exterior, etc.) . Pereira et all (2010) apuntan el ME sólo se puede aplicar a matrices cuadradas y a veces no es convergente. Sin embargo, los requisitos de datos limitados, su fácil implementación y la posibilidad de un alto grado de automatización son las mayores ventajas del procedimiento.

mteuro <- function (T1,act,f,m) {
n <- length(act)-4
T1 <- as.matrix(T1)
act <- as.matrix(act)
# primera iteracción
wo<- c(act[1:n],act[1:n],act[n+3]) # tasas 1 a n y tasa va
rm <- diag(wo)  
T2 <- rm %*% T1
wi <- c(act[1:n],act[n+1],act[n+2]) # tasa 1 a n y tasa cons y export
cm <- diag(wi)
T3 <- T1 %*% cm
T4 <- (T3+T2)/2
T4 <- rbind(T4[1:(2*n),],T3[(2*n+1),])


# Saca (r1:r3, c1:c3) Cear funcion inversa de leotief

coef=t(T4)/colSums(T4) 
coef2=t(coef)
coef2[is.nan(coef2)]<-0 
coef4<-coef2[1:n,1:n] # n sectores
i <- c(rep(1,n))
Id <- diag(i)
leontief=Id-coef4
inversa=solve(leontief)
inversa[is.nan(inversa)]<-0  
Df <- T4[,(n+1)]+T4[,(n+2)] 
Dfinal <- matrix(Df[1:n],ncol=1)
O <- inversa %*% Dfinal
O2 <- colSums(T4) 
O3 <- c(O,O2[n+1],O2[n+2])
dou <- diag(O3) 
MIO2 <- coef2 %*% dou 


# iteracciones
for (i in 1:m) {
sum1 <- colSums(T1)
sum2 <- colSums(MIO2)
sum3 <- rowSums(T1)
sum4 <- rowSums(MIO2)
pro <- c(MIO2[(2*n+1),1:n]/T1[(2*n+1),1:n],sum2[(n+1)]/sum1[(n+1)],sum2[(n+2)]/sum1[(n+2)],sum4[(2*n+1)]/sum3[(2*n+1)],
sum(sum4[(n+1):(n+n)])/sum(sum3[(n+1):(n+n)]))  
pro[is.nan(pro)]<-0 
desv <- act/pro
desv[is.nan(desv)]<-1 
delta <- desv-1
coef <- ifelse(delta<0,1-(((1-desv)*100)^f)/100,1+(((desv-1)*100)^f)/100)
rev1 <- c(coef[1:n],rep(coef[(n+4)],n),coef[(n+3)])
wo <- rev1*wo
rm <- diag(wo)
IOW1 <- rm %*% T1
rev2 <- c(coef[1:(n+2)])
wi <- wi*rev2  
cm <- diag(wi)
IOW2 <- T1 %*% cm
IOW3 <- 0.5*IOW2+0.5*IOW1
IOW4 <- rbind(IOW3[1:(2*n),],IOW2[(2*n+1),])
IOW4[is.nan(IOW4)]<-0 
coef=t(IOW4)/colSums(IOW4) 
coef2=t(coef)
coef2[is.nan(coef2)]<-0 
coef4<-coef2[1:n,1:n] 
i <- c(rep(1,n))
Id <- diag(i)
leontief=Id-coef4
inversa=solve(leontief)
inversa[is.nan(inversa)]<-0  
Df <- IOW4[,(n+1)]+IOW4[,(n+2)]
Dfinal <- matrix(Df[1:n], ncol=1)
O <- inversa %*% Dfinal
O2 <- colSums(IOW4) 
O3 <- c(O,O2[n+1],O2[n+2])
dOu <- diag(O3)
MIO2 <- coef2 %*% dOu}
write.csv(MIO2,'mio2.csv')
act <- c(t(act))
desv <- c(t(desv))
print(cbind(act,pro,desv))}

Metodología del ME.

Punto de inicio del procedimiento de iteración es una tabla input-output, que consta de seis cuadrantes para producción nacional, las importaciones y el valor añadido. El procedimiento de iteración comienza con la suposición que, en la primera iteración, las tasas de crecimiento propuestas para el valor añadido son el punto de partida de las tasas de crecimiento desconocidas que caracterizan los diferentes niveles de producción, consumos intermedios, y demandas finales sectoriales.

Estas tasas de crecimiento de partida cambiarán ligeramente hasta que se alcancen los crecimientos de las variables exógenas proyectadas. El procedimiento iterativo se inicia proyectando los inputs empleados de bienes interiores e importados a partir de las tasas de los valores añadidos, y los output intermedios obtenidos con las tasas de crecimiento de los valores añadidos de cada sector, en tanto que los finales se proyectan con sus respectivas tasas de crecimiento. Se obtiene una medida ponderada para cada elemento de los tres cuadrantes que una vez agregada en terminos IO, ofrece una solución que no asegura el equilibrio contable de un marco input-output, por lo que se requiere de otra secuencia en donde partiendo de la tecnología derivada de la nueva situación se restaure el equilibrio input-output y se obtenga una tabla equilibrada.

Paso 1: Actualización de los inputs finales e intermedios. Todas las transacciones de los cuadrantes I a IV son ponderadas con la media aritmética correspondiente a las tasa de crecimiento de los output (z) y de los inputs (s).

  1. T2 = Z*T1

  2. T3 = T1*S

  3. T4 = (T2 + T3)/2 Media aritmética

  4. T4 = sqrt(T1* T2) Media geométrica

T1 = matriz de consumos intermedios y demanda final de bienes y servicios (r x p)

T2 = matriz de transacciones obtenida a partir de las tasas de crecimiento de los output (r x p)

T3 = matriz de transacciones obtenida a partir de las tasas de crecimiento de los input (r x p)

T4 = matriz de transacciones para los cuadrantes I to IV (r x p)

Z = matriz diagonal de diagonal de los crecimientos de los inputs, obtenida a partir de los crecimientos de los valores añadidos tanto para producciones interiores como para los bienes importados (r x r)

S = matriz diagonal de tasas de crecimiento de la producción (output) obtenida a partir de los crecimientos de los valores añadidos, del consumo final y las exportaciones por bienes (p x p)

r = numero de productos interiores e importados

p = numero de actividades (producción y demanda final)

Paso 2: Actualización de los valores añadidos por sector El valor añadido de cada sector se actualiza multiplicando el valor añadido del año base por la matriz diagonal de los crecimientos de los inputs. (wi).

  1. T5 = v * wi

T5 = Vector fila de los valores añadidos obtenidos con las tasas de crecimiento de los inputs (1 x p)

v = Vector de valores añadidos por sectores (1 x p)

Paso 3: Composición de la Tabla Input-Output Matriz A Una primera aproximación a la tabla input-output actualizada se obtiene con los resultados de los pasos 1 y dos, pero sin que se garantice el equilibrio input-output.

Paso 4: Cálculo de los coeficientes Input-Output En el paso 4, se asume la tecnología contenida la estructura de producciones interindustriales de la tabla A, calculándose las producciones interiores, las importaciones y valores añadidos derivados de los coeficientes técnicos de la tabla A.

  1. \(a_{ij} = \frac {x_{ij}}{x-{j}}\)

  2. \(b_{ij} = \frac {m_{ij}}{x_{j}}\)

  3. \(c_{j} = \frac {v_{j}}{x_{j}}\)

\(a_{ij}\) = coeficientes técnicos de los inputs interiores

\(b_{ij}\) = coeficientes técnicos de los inputs importados

\(c_{j}\) = Tasas de los valores añadidos

\(x_{ij}\)= consumos intermedios de los bienes y servicios interiores

\(m_{ij}\) = consumos intermedios de los bienes y servicios importados

\(v_{j}\) = valores añadidos

\(x_{j}\) = producción interior.

Paso 5: Elaboración del modelo input-output Utilizando los coeficientes del paso 4, se calcula la inversa de Leontief, que al ser multiplicada por el vector de la demanda final da como solución el vector de producción de la tabla A.

  1. \(x = (I-A)^{-1}y\)

X = vector del output (producción interior) A = matriz de coeficientes aij I = matriz unidad \((I-A)^{-1}\) = matriz inverse de Leontief y = vector columna de las demandas finales de la Tabla A.

Paso 6: Determinar las necesidades de inputs interiores e importados

Los inputs primarios e intermedios son calculados balanceando la tabla input-output table, según los siguientes pasos.

  1. \(Z = B(I-A)^{-1}y\) B = matriz de coeficientes intermedios interiores, importados y valores añadidos Z = matrix of necesidades de input

Paso 7: Composición de la Tabla Input-Output

Se compone una nueva tabla consistente, Tabla B , en donde los valores añadidos y demandas finales no corresponden con los valores de partida. Estos se obtendrán a través de iteraciones sucesivas

Paso 8: Iteración

Las tasas de crecimiento del output (wo) e input (wi) son cambiadas durante el proceso de iteración hasta obtener los valores de partida, los derivados del cuadro macroeconómico inicial. De tal forma que resulte una tabla B cuyos valores añadidos, importaciones y demandas finales permitan rescatar las tasas de crecimiento iniciales. El proceso se detiene en la iteración k que garantiza un 1% de margen de error entre las tasas de crecimiento obtenidas por el modelo y las del cuadro macroeconómico.

La desviación entre variables macroeconómicas a proyectar (las de partida) y las que se obtienen en el modelo es:

  1. \(dev = \frac {pro}{mod}\)

dev = desviacion

pro = variables macroeconómicas exogenas a proyectar

mod = proyecciones input-output (resultados del modelo)

Las desviaciones observadas se utilizan para corregir las tasas de crecimiento z y s en un procedimiento aditivo. En cuyo caso el multiplicador y la función de ajuste tipo

A se definen como:

Para dev > 0

  1. MULT = DEV - I

  2. Z = Z + MULT

  3. S = S + MULT

Par dev <0

  1. MULT = I - DEV

  2. Z = Z - MULT

  3. S = Z - MULT

MULT = matriz diagonal de multiplicadores de ajuste para las tasas de crecimiento.

DEV = matriz diagonal de factores de desviación

I = matriz unitaria

Z = matriz diagonal de las tasas de crecimiento de la producción interior e importada.

S = matriz diagonal de las tasas de crecimiento de la producción interior y demandas finales.

La funcion de ajuste A es eficiente para encontrar una solución sin demasiadas iteraciones pero las fluctuaciones cíclicas pueden originar un sistema inestable. Por ello un función convexa tipo B es la recomendada para ajustar las tasas de crecimiento durante el proceso de iteración. Si el modelo subestima (o sobreestima) el variable macroeconómica a proyectar, las correspondientes tasas de crecimiento wo y wi , son incrementadas (decrementadas) respectivamente, de acuerdo a una función de ajuste convexa.

En este otro tipo de ajuste la function es definida como: Para dev > 0

  1. \(mult = 1 + \frac {[(dev-1)100]^c}{100}\) para dev > 0

  2. wo = wo*mult

  3. wi = wi*mult

Para dev < 0

  1. \(mult = 1 - \frac {[(1-dev)100]^c}{100}\) para dev < 0

  2. wo = wo*mult

  3. wi = wi*mult

c = elasticidad del ajuste

output:

gras(z,a,100,0)
##           [,1]       [,2]      [,3]      [,4]
## [1,] 49.510255   7.308287  9.004785  30.17667
## [2,] 10.415130  76.869686  2.104749  47.61044
## [3,]  0.000000 102.540913  7.783575 596.67551
## [4,]  2.074616   3.281114 24.106891  10.53738
multiplicador (a,e,f)
##          [,1]
## [1,] 5.418754
## [2,] 1.585854
## [3,] 2.197804
## [4,] 1.417328
mteuro(T1,act,0.9,10)
##         act       pro      desv
## [1,] 0.9500 0.9500027 0.9999971
## [2,] 1.0200 1.0200026 0.9999975
## [3,] 1.0700 1.0700032 0.9999970
## [4,] 1.0525 1.0524958 1.0000040
## [5,] 1.0164 1.0163984 1.0000016
## [6,] 1.0293 1.0293196 0.9999809
## [7,] 1.0483 1.0483055 0.9999948