Método Euro función en R

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

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.

“`{r}
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+2]) # 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))}

“`

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.

“`{r}
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)
“`

Metodología:

Analisis input_output R

Análisis Input-Output en R

Autor: Francisco Parra Rodríguez

Doctor Economía UNED

Leer librerias/datos/ crear nuevas variables

Tablas input-output 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 como ejemplo:

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

Vector de demandas finales 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 que las diferencias absolutas entre la tabla z ajustada a la tabla a, sean independientes de filas (productos) y sectores (ramas).

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 <- abs(A - a)
            h <- chisq.test(M)
            if (h$p.value > 0.05)
                (A) else ("no significativo")
        } else ("incompatibles")
    }
}

Fuction impacto(a,e,f)

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

impacto <- 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
}

Función dimpacto (a,e,f,d,m,g)

Calcula una distribución de impactos para la matriz a, la produccion e, la demanda final e, utilizando d iteraciones para generar el RAS, y simulando m muestras uniformes entre valores cero y g. La salida es un grafica por ramas en donde se represenas la distribución de los impactos

dimpacto <- function(a, e, f, d, m, g) {
    n <- length(e)
    datos <- impacto(a, e, f)
    for (i in 1:m) {
        a1 <- matrix(c(runif(n^2, 0, g)), nrow = n)
        a2 <- a1 + a
        R <- sum(a2)/sum(a)
        a2 <- a2/R
        a3 <- gras(a2, a, d, 0)
        datos1 <- impacto(a3, e, f)
        datos <- cbind(datos, datos1)
    }
    par(mfrow = c(n/2, n/2))
    for (i in 1:n) hist(datos[i, ])
}

output

dimpacto(a, e, f, 10, 100, 2)

Rplot
Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 42 seguidores