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.
# 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)
df |> select(t,I_true,I_chain,I_Pas,Tec) |>
pivot_longer(-t) |>
ggplot(aes(t,value,color=name))+geom_line()+theme_minimal()
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 |
Los resultados muestran: