On this page I will keep a running list of computation/programming projects I work on from time to time.

When it comes to coding, my interests range from estimation of nonlinear moment condition models, approximate bayesian inference, large optimization problems, high-performance computing in econometrics and finance, and big data application to time time series econometrics. Below you will find a list of package I have developed recently. For details on each packages visit my github and/or visit the package page. For code related to publish paper, visit the publication section.

# Julia Packages

Notice that some of the Julia packages are “registered”, meaning that you can install them from Julia by Pkg.add-ing them. Others are at an early stage and are not yet registered. To install these packages use Pkg.clone.

## CovarianceMatrices.jl

CovarianceMatrices is a package for estimating variance covariance matrices in situations where the standard assumptions of independence is violated. It provides heteroskedasticity consistent (HC); heteroskedasticity and autocorrelation consistent (HAC); and cluster robust (CRVE) estimators of the variance matrices. An interface for GLM.jl is given so that they can be integrated easily into standard regression analysis. It is also easy to integrated these estimators into new inferential procedures or applications.

using CovarianceMatrices
## Simulated AR(1) and estimate it using OLS
srand(1)
y = zeros(Float64, 100)
rho = 0.8
y[1] = randn()
for j = 2:100
y[j] = rho * y[j-1] + randn()
end

data = DataFrame(y = y[2:100], yl = y[1:99])
AR1  = fit(GeneralizedLinearModel, y~yl, data, Normal())

## Truncated Kernel with optimal bandwidth
vcov(AR1, TruncatedKernel())


## Divergences.jl

Divergences is a Julia package that makes it easy to evaluate divergence measures between two vectors. The package allows calculating the gradient and the diagonal of the Hessian of several divergences.

• Komunjer, I.; Ragusa, G. “Existence and characterization of conditional density projections.” Econometric Theory 2016, 32, 947–987.
using Divergences
p = rand(20)
q = rand(20)
scale!(p, 1/sum(p))
scale!(q, 1/sum(q))


## Genoud.jl

GENetic Optimization Using Derivative.

using Genoud
using Calculus
function f8(xx)
x, y = xx
-x*sin(√abs(x)) - y*sin(√abs(y))
end

function gr!(x, stor)
end

dom = Genoud.Domain([-500  500.;
-500. 500.])
out = Genoud.genoud(f8, [1.0, -1.0],
sizepop = 5000,
sense = :Min,
domains = dom)

Results of Genoud Optimization Algorithm
* Minimizer: [420.96874636091724,420.9687462145861]
* Minimum: -8.379658e+02
* Pick generation: 20
* Convergence: true
* |f(x) - f(x')| / |f(x)| < 1.0e-03: true
* Number of Generations: 27


## CsminWel.jl

This package provides an interface to Chris Sims’ csminwel optimization code. The code borrows from DSGE.jl, but it is adapted to be compatibles with the Optim.jl’s API. When the derivative of the minimand is not supply either Finite Difference of Forward Automatic Differentiation derivatives are automatically supplied to the underlying code.

From the original author: > Uses a quasi-Newton method with BFGS update of the estimated inverse hessian. It is robust against certain pathologies common on likelihood functions. It attempts to be robust against “cliffs”, i.e. hyperplane discontinuities, though it is not really clear whether what it does in such cases succeeds reliably.

Differently from the solvers in Optim.jl, Csminwel returns an estimate of the inverse of the Hessian at the solution which may be used for standard errors calculations and/or to scale a Monte Carlo sampler.

#=
Maximizing loglikelihood of logistic models
=#
using CsminWel
using StatsFuns
## Generate fake data (true coefficient = 0)
srand(1)
x = [ones(200) randn(200,4)]
y = [rand() < 0.5 ? 1. : 0. for j in 1:200]

## log-likelihood
function loglik(beta)
xb = x*beta
sum(-y.*xb + log1pexp.(xb))
end

## Derivative of loglikelihood
function dloglik(beta)
xb = x*beta
px = logistic.(xb)
-x'*(y.-px)
end

## Optim uses a mutating function for deriv
function fg!(beta, stor)
stor[:] = dloglik(beta)
end

## With analytical derivative
res1 = optimize(loglik, fg!, zeros(5), BFGS())
res2 = optimize(loglik, fg!, zeros(5), Csminwel())

## With finite-difference derivative
res3 = optimize(loglik, zeros(5), Csminwel())

res4 = optimize(loglik, zeros(5), Csminwel(), OptimizationOptions(autodiff=true))

## Use approximation to the inverse Hessian for standard errors of estimated parameters
stderr = √diag(res2.invH)