Introducción

Este documento compara tres índices: IPISF, Laspeyres encadenado y Pasinetti mediante simulación Monte Carlo. Se muestra cómo cada índice mide algo distinto pero compatible.

Simulación

# Tecnología base
A <- matrix(c(0.2,0.3,0.1,0.2),2,2,byrow=TRUE)
colnames(A)<-rownames(A)<-c("S","M")
a0 <- c(S=1,M=2)
B0 <- solve(diag(2)-A)
v0 <- as.numeric(a0 %*% B0)
v_M0 <- v0[2]

# Base
Q0 <- 100
x0 <- B0 %*% c(0,Q0)
H0 <- (a0 * as.numeric(x0))["M"]
L0 <- v_M0 * Q0

# Escenario con cambio tecnológico
T <- 200
Q_t <- a_Mt <- H_t <- L_t <- v_Mt <- numeric(T)
Q_t[1] <- Q0; a_Mt[1] <- a0["M"]
x1 <- B0 %*% c(0,Q_t[1])
H_t[1] <- (a0*as.numeric(x1))["M"]
v_Mt[1] <- v_M0; L_t[1] <- L0

for(t in 2:T){
  Q_t[t] <- max(Q_t[t-1]*(1+rnorm(1,0,0.05)),0)
  a_Mt[t] <- max(a_Mt[t-1]*(1+rnorm(1,-0.01,0.02)),0.2)
  a_t <- c(S=a0["S"],M=a_Mt[t])
  xt <- B0 %*% c(0,Q_t[t])
  H_t[t] <- (a_t*as.numeric(xt))["M"]
  v_Mt[t] <- as.numeric(a_t %*% B0)[2]
  L_t[t] <- v_Mt[t]*Q_t[t]
}

df <- tibble(t=1:T, Q=Q_t,H=H_t,L=L_t) |>
  mutate(I_true=Q/Q[1],
         I_IPISF=H/H[1],
         I_chain=I_true,
         I_Pas=L/L[1],
         Tec=v_Mt/v_Mt[1],
         Pas_recon=I_true*Tec,
         diff=I_Pas-Pas_recon)

Gráfico

df |> select(t,I_true,I_chain,I_Pas,Tec) |>
  pivot_longer(-t) |>
  ggplot(aes(t,value,color=name))+geom_line()+theme_minimal()

Tabla

df |> slice(c(1,50,100,150,200)) |>
  transmute(Periodo=t,
            I_true=round(I_true,4),
            I_Pas=round(I_Pas,4),
            Tec=round(Tec,4),
            Recon=round(Pas_recon,4),
            Dif=signif(diff,3)) |>
  gt()
Periodo I_true I_Pas Tec Recon Dif
1 1.0000 1.0000 1.0000 1.0000 0.00e+00
50 0.6503 0.4179 0.6426 0.4179 0.00e+00
100 0.8615 0.4241 0.4923 0.4241 -5.55e-17
150 1.1674 0.4306 0.3688 0.4306 5.55e-17
200 1.8297 0.4993 0.2729 0.4993 -5.55e-17

Conclusiones

Los resultados muestran: