Created
August 18, 2016 13:39
-
-
Save rparatodxs/9b1a0c73151717b93003b5015a9bc74c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.