Skip to content

Instantly share code, notes, and snippets.

@rparatodxs
Created August 18, 2016 13:39
Show Gist options
  • Save rparatodxs/9b1a0c73151717b93003b5015a9bc74c to your computer and use it in GitHub Desktop.
Save rparatodxs/9b1a0c73151717b93003b5015a9bc74c to your computer and use it in GitHub Desktop.
BNCH <- function(a,s,rho) {
## Statistics Department - IMF
## Based on the regression method proposed by Cholette-Dagum (2006)
## Comments and/or suggestions to: STARE@imf.org
lmd <- 1
B <- 3
M <- dim(a)
T <- dim(s)
ad <- a[,5]
sd <- s[,3]
J <- matrix(0,M[1],T[1])
J2 <- t(J)
s_i <- cbind(s[,1] + s[,2]/100)
a_i <- cbind(a[,1] + a[,2]/100, a[,3] + a[,4]/100)
for (i in 1:M[1]) {
for (j in 1:T[1]) {
if (s_i[j,1]>=a_i[i,1] & s_i[j,1]<=a_i[i,2]) J[i,j]<-1 else J[i,j]<-0
}
}
OneM <- rep(1,M[1])
OneT <- rep(1,T[1])
if (lmd==0) b <- (OneM %*% (ad-J%*%sd))/(OneM %*% J %*% OneT) else b <- (OneM %*% ad)/(OneM %*% J %*% sd)
if (B==3) c <- b else c <- 1
if (lmd==0) ss <- c + sd else ss <- c*sd
C <- diag(ss^lmd)
if (rho<1) {
pol <- cbind(-rho,1)
Ds <- matrix(0,T[1]-1,T[1])
for (i in 1:T[1]-1) {
Ds[i,i] <- -rho
Ds[i,i+1]<- 1
}
D2 <- t(Ds) %*% Ds
D2[1,1] <- D2[T[1],T[1]]
D2_1 <- solve(D2)
Oe <- D2_1/D2_1[1,1]
Ve <- C %*% Oe %*% C
Vd <- J %*% Ve %*% t(J)
Vd_1 <- solve(Vd)
Sol <- ss + Ve %*% t(J) %*% Vd_1 %*% (ad-J%*%ss)
} else {
Dn <- matrix(0,T-1,T)
for (i in 1:T-1) {
Dn[i,i] <- -1
Dn[i,i+1]<- 1}
D2 <- t(Dn) %*% Dn
sS <- diag(ss/mean(ss))
sS_1 <- solve(sS)
m1 <- sS_1 %*% D2 %*% sS_1
flt1 <- rbind(cbind(m1,t(J)), cbind(J,diag(rep(0,M[1]))))
flt2 <- rbind(cbind(m1,J2), cbind(J,diag(M[1])))
flt1_1 <- solve(flt1)
FLT <- flt1_1 %*% flt2
FD <- FLT[1:T[1],(T[1]+1):(T[1]+M[1])]
Dist <- (FD %*% (ad-J%*%ss))
Sol <- ss + Dist
}
}
@rparatodxs
Copy link
Author

El procedimiento de Benchmarking en R adjunto es una función que ejecuta tanto el
procedimiento Denton proporcional o el procedimiento de regresión propuesto por CholetteDagum. La función R [function(a, s, rho)] requiere 3 inputs:
a; s; y rho [inputs deben ser en formato de matriz]
a: representa las referencias de baja frecuencia. Estos serán datos anuales/trimestrales para
indicadores mensuales o trimestrales. Pero pueden ser también datos sin una frecuencia
especifica (semestral, o cada cinco años).
b: representa la serie de indicadores de corto plazo –o alta frecuencia– a partir de los cuales se
generará la serie a ajustada a las referencias. Los indicadores deben, al menos cubrir todo el
periodo para el cual hay referencias. Para los periodos en los que no hay referencia, pero hay
indicador, el procedimiento realizara extrapolación, retropolación o interpolación dependiendo
de las referencias faltantes.
rho: representa el coeficiente de ajuste (para mayor referencia revisar Cholette-Dagum 2006). En
la práctica, un valor igual a 1 emulara el resultado del procedimiento proporcional de Denton.
Para utilizar de acuerdo a las propuestas de Cholette-Dagum, el valor debe ser de 0.9 para
procesos con indicadores mensuales y referencias anuales; y de 0.73 para procesos con
indicadores trimestrales y referencias anuales. Utilizar 0.9 de manera genérica entregara en
general, buenos resultados.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment