Commit f89edf47 authored by Sébastien Villemot's avatar Sébastien Villemot
Browse files

Start refactoring of penalty handling

Handle all events that lead to a penalty through an exception.
Next steps:
- make all exceptions derive from a common class containing info code and
  penalty value
- catch these exceptions at the top-level, and construct the penalty-adjusted
  likelihood
parent 82930ee2
......@@ -37,8 +37,7 @@ InitializeKalmanFilter::InitializeKalmanFilter(const std::string &basename, size
const std::vector<size_t> &varobs_arg,
double qz_criterium_arg,
double lyapunov_tol_arg,
bool noconstant_arg,
int &info) :
bool noconstant_arg) :
lyapunov_tol(lyapunov_tol_arg),
zeta_varobs_back_mixed(zeta_varobs_back_mixed_arg),
detrendData(varobs_arg, noconstant_arg),
......@@ -60,7 +59,7 @@ InitializeKalmanFilter::InitializeKalmanFilter(const std::string &basename, size
}
void
InitializeKalmanFilter::setT(Matrix &T, int &info)
InitializeKalmanFilter::setT(Matrix &T)
{
// Initialize the empty columns of T to zero
T.setAll(0.0);
......@@ -68,31 +67,11 @@ InitializeKalmanFilter::setT(Matrix &T, int &info)
}
void
InitializeKalmanFilter::setPstar(Matrix &Pstar, Matrix &Pinf, const Matrix &T, const Matrix &RQRt, int &info)
InitializeKalmanFilter::setPstar(Matrix &Pstar, Matrix &Pinf, const Matrix &T, const Matrix &RQRt) throw (DiscLyapFast::DLPException)
{
try
{
// disclyap_fast(T, RQR, Pstar, lyapunov_tol, 0 or 1 to check chol)
discLyapFast.solve_lyap(T, RQRt, Pstar, lyapunov_tol, 0);
discLyapFast.solve_lyap(T, RQRt, Pstar, lyapunov_tol, 0);
Pinf.setAll(0.0);
}
catch (const DiscLyapFast::DLPException &e)
{
if (e.info > 0) // The matrix is not positive definite in NormCholesky calculator
{
puts(e.message.c_str());
info = -1; //likelihood = penalty;
return;
}
else if (e.info < 0)
{
printf("Caugth unhandled TS exception with Pstar matrix: ");
puts(e.message.c_str());
info = -1; //likelihood = penalty;
throw;
}
}
Pinf.setAll(0.0);
}
......@@ -48,31 +48,31 @@ public:
const std::vector<size_t> &zeta_varobs_back_mixed_arg,
const std::vector<size_t> &varobs_arg,
double qz_criterium_arg, double lyapunov_tol_arg,
bool noconstant_arg, int &info);
bool noconstant_arg);
virtual ~InitializeKalmanFilter();
// initialise parameter dependent KF matrices only but not Ps
template <class Vec1, class Vec2, class Mat1, class Mat2>
void initialize(Vec1 &steadyState, const Vec2 &deepParams, Mat1 &R,
const Mat2 &Q, Matrix &RQRt, Matrix &T,
double &penalty, const MatrixConstView &dataView,
MatrixView &detrendedDataView, int &info)
const MatrixConstView &dataView,
MatrixView &detrendedDataView)
{
modelSolution.compute(steadyState, deepParams, g_x, g_u);
detrendData.detrend(steadyState, dataView, detrendedDataView);
setT(T, info);
setRQR(R, Q, RQRt, info);
setT(T);
setRQR(R, Q, RQRt);
}
// initialise all KF matrices
template <class Vec1, class Vec2, class Mat1, class Mat2>
void initialize(Vec1 &steadyState, const Vec2 &deepParams, Mat1 &R,
const Mat2 &Q, Matrix &RQRt, Matrix &T, Matrix &Pstar, Matrix &Pinf,
double &penalty, const MatrixConstView &dataView,
MatrixView &detrendedDataView, int &info)
const MatrixConstView &dataView,
MatrixView &detrendedDataView)
{
initialize(steadyState, deepParams, R, Q, RQRt, T, penalty, dataView, detrendedDataView, info);
setPstar(Pstar, Pinf, T, RQRt, info);
initialize(steadyState, deepParams, R, Q, RQRt, T, dataView, detrendedDataView);
setPstar(Pstar, Pinf, T, RQRt);
}
private:
......@@ -87,10 +87,10 @@ private:
Matrix g_x;
Matrix g_u;
Matrix Rt, RQ;
void setT(Matrix &T, int &info);
void setT(Matrix &T);
template <class Mat1, class Mat2>
void setRQR(Mat1 &R, const Mat2 &Q, Matrix &RQRt, int &info)
void setRQR(Mat1 &R, const Mat2 &Q, Matrix &RQRt)
{
mat::assignByVectors(R, mat::nullVec, mat::nullVec, g_u, zeta_varobs_back_mixed, mat::nullVec);
......@@ -98,7 +98,7 @@ private:
blas::gemm("N", "N", 1.0, R, Q, 0.0, RQ); // R*Q
blas::gemm("N", "T", 1.0, RQ, R, 0.0, RQRt); // R*Q*R'
}
void setPstar(Matrix &Pstar, Matrix &Pinf, const Matrix &T, const Matrix &RQRt, int &info);
void setPstar(Matrix &Pstar, Matrix &Pinf, const Matrix &T, const Matrix &RQRt) throw (DiscLyapFast::DLPException);
};
......
/*
* Copyright (C) 2009-2012 Dynare Team
* Copyright (C) 2009-2013 Dynare Team
*
* This file is part of Dynare.
*
......@@ -36,7 +36,7 @@ KalmanFilter::KalmanFilter(const std::string &basename, size_t n_endo, size_t n_
const std::vector<size_t> &zeta_mixed_arg, const std::vector<size_t> &zeta_static_arg,
double qz_criterium_arg, const std::vector<size_t> &varobs_arg,
double riccati_tol_arg, double lyapunov_tol_arg,
bool noconstant_arg, int &info) :
bool noconstant_arg) :
zeta_varobs_back_mixed(compute_zeta_varobs_back_mixed(zeta_back_arg, zeta_mixed_arg, varobs_arg)),
Z(varobs_arg.size(), zeta_varobs_back_mixed.size()), Zt(Z.getCols(), Z.getRows()), T(zeta_varobs_back_mixed.size()), R(zeta_varobs_back_mixed.size(), n_exo),
Pstar(zeta_varobs_back_mixed.size(), zeta_varobs_back_mixed.size()), Pinf(zeta_varobs_back_mixed.size(), zeta_varobs_back_mixed.size()),
......@@ -45,7 +45,7 @@ KalmanFilter::KalmanFilter(const std::string &basename, size_t n_endo, size_t n_
oldKFinv(zeta_varobs_back_mixed.size(), varobs_arg.size()), a_init(zeta_varobs_back_mixed.size()),
a_new(zeta_varobs_back_mixed.size()), vt(varobs_arg.size()), vtFinv(varobs_arg.size()), riccati_tol(riccati_tol_arg),
initKalmanFilter(basename, n_endo, n_exo, zeta_fwrd_arg, zeta_back_arg, zeta_mixed_arg,
zeta_static_arg, zeta_varobs_back_mixed, varobs_arg, qz_criterium_arg, lyapunov_tol_arg, noconstant_arg, info),
zeta_static_arg, zeta_varobs_back_mixed, varobs_arg, qz_criterium_arg, lyapunov_tol_arg, noconstant_arg),
FUTP(varobs_arg.size()*(varobs_arg.size()+1)/2)
{
Z.setAll(0.0);
......@@ -79,12 +79,14 @@ KalmanFilter::compute_zeta_varobs_back_mixed(const std::vector<size_t> &zeta_bac
* Multi-variate standard Kalman Filter
*/
double
KalmanFilter::filter(const MatrixView &detrendedDataView, const Matrix &H, VectorView &vll, size_t start, int &info)
KalmanFilter::filter(const MatrixView &detrendedDataView, const Matrix &H, VectorView &vll, size_t start)
{
double loglik = 0.0, ll, logFdet = 0.0, Fdet, dvtFinvVt;
size_t p = Finv.getRows();
bool nonstationary = true;
a_init.setAll(0.0);
int info;
for (size_t t = 0; t < detrendedDataView.getCols(); ++t)
{
if (nonstationary)
......@@ -106,12 +108,8 @@ KalmanFilter::filter(const MatrixView &detrendedDataView, const Matrix &H, Vect
FUTP(i + (j-1)*j/2 -1) = F(i-1, j-1);
info = lapack::choleskySolver(FUTP, Finv, "U"); // F now contains its Chol decomposition!
if (info < 0)
{
std::cout << "Info:" << info << std::endl;
std::cout << "t:" << t << std::endl;
return 0;
}
assert(info >= 0);
if (info > 0)
{
//enforce Pstar symmetry with P=(P+P')/2=0.5P+0.5P'
......@@ -136,11 +134,10 @@ KalmanFilter::filter(const MatrixView &detrendedDataView, const Matrix &H, Vect
for (size_t j = i; j <= p; ++j)
FUTP(i + (j-1)*j/2 -1) = F(i-1, j-1);
info = lapack::choleskySolver(FUTP, Finv, "U"); // F now contains its Chol decomposition!
if (info != 0)
{
return 0;
}
info = lapack::choleskySolver(FUTP, Finv, "U"); // F now contains
// its Chol
// decomposition!
assert(info == 0);
}
// KFinv gain matrix
blas::symm("R", "U", 1.0, Finv, K, 0.0, KFinv);
......
......@@ -53,38 +53,24 @@ public:
const std::vector<size_t> &zeta_back_arg, const std::vector<size_t> &zeta_mixed_arg, const std::vector<size_t> &zeta_static_arg,
double qz_criterium_arg, const std::vector<size_t> &varobs_arg,
double riccati_tol_arg, double lyapunov_tol_arg,
bool noconstant_arg, int &info);
bool noconstant_arg);
template <class Vec1, class Vec2, class Mat1>
double compute(const MatrixConstView &dataView, Vec1 &steadyState,
const Mat1 &Q, const Matrix &H, const Vec2 &deepParams,
VectorView &vll, MatrixView &detrendedDataView, size_t start, size_t period,
double &penalty, int &info)
VectorView &vll, MatrixView &detrendedDataView, size_t start, size_t period)
{
double lik = INFINITY;
try
{
if (period == 0) // initialise all KF matrices
initKalmanFilter.initialize(steadyState, deepParams, R, Q, RQRt, T, Pstar, Pinf,
penalty, dataView, detrendedDataView, info);
dataView, detrendedDataView);
else // initialise parameter dependent KF matrices only but not Ps
initKalmanFilter.initialize(steadyState, deepParams, R, Q, RQRt, T,
penalty, dataView, detrendedDataView, info);
lik = filter(detrendedDataView, H, vll, start, info);
}
catch (const DecisionRules::BlanchardKahnException &bke)
{
info = 22;
return penalty;
}
if (info != 0)
return penalty;
else
return lik;
dataView, detrendedDataView);
};
return filter(detrendedDataView, H, vll, start);
}
private:
const std::vector<size_t> zeta_varobs_back_mixed;
......@@ -106,7 +92,7 @@ private:
Vector FUTP; // F upper triangle packed as vector FUTP(i + (j-1)*j/2) = F(i,j) for 1<=i<=j;
// Method
double filter(const MatrixView &detrendedDataView, const Matrix &H, VectorView &vll, size_t start, int &info);
double filter(const MatrixView &detrendedDataView, const Matrix &H, VectorView &vll, size_t start);
};
......
......@@ -29,11 +29,11 @@ LogLikelihoodMain::LogLikelihoodMain(const std::string &basename, EstimatedParam
const std::vector<size_t> &zeta_fwrd_arg, const std::vector<size_t> &zeta_back_arg,
const std::vector<size_t> &zeta_mixed_arg, const std::vector<size_t> &zeta_static_arg, const double qz_criterium,
const std::vector<size_t> &varobs, double riccati_tol, double lyapunov_tol,
bool noconstant_arg, int &info_arg)
bool noconstant_arg)
: estSubsamples(estiParDesc.estSubsamples),
logLikelihoodSubSample(basename, estiParDesc, n_endo, n_exo, zeta_fwrd_arg, zeta_back_arg, zeta_mixed_arg, zeta_static_arg, qz_criterium,
varobs, riccati_tol, lyapunov_tol, noconstant_arg, info_arg),
varobs, riccati_tol, lyapunov_tol, noconstant_arg),
vll(estiParDesc.getNumberOfPeriods()), // time dimension size of data
detrendedData(varobs.size(), estiParDesc.getNumberOfPeriods())
{
......
......@@ -41,7 +41,7 @@ public:
const std::vector<size_t> &zeta_fwrd_arg, const std::vector<size_t> &zeta_back_arg, const std::vector<size_t> &zeta_mixed_arg,
const std::vector<size_t> &zeta_static_arg, const double qz_criterium_arg, const std::vector<size_t> &varobs_arg,
double riccati_tol_arg, double lyapunov_tol_arg,
bool noconstant_arg, int &info);
bool noconstant_arg);
/**
* Compute method Inputs:
......@@ -54,7 +54,7 @@ public:
template <class VEC1, class VEC2>
double compute(VEC1 &steadyState, VEC2 &estParams, VectorView &deepParams, const MatrixConstView &data,
MatrixView &Q, Matrix &H, size_t start, int &info)
MatrixView &Q, Matrix &H, size_t start)
{
double logLikelihood = 0;
for (size_t i = 0; i < estSubsamples.size(); ++i)
......@@ -68,7 +68,7 @@ public:
VectorView vllView(vll, estSubsamples[i].startPeriod, estSubsamples[i].endPeriod-estSubsamples[i].startPeriod+1);
logLikelihood += logLikelihoodSubSample.compute(vSteadyState, dataView, estParams, deepParams,
Q, H, vllView, detrendedDataView, info, start, i);
Q, H, vllView, detrendedDataView, start, i);
}
return logLikelihood;
};
......
......@@ -32,10 +32,10 @@ LogLikelihoodSubSample::~LogLikelihoodSubSample()
LogLikelihoodSubSample::LogLikelihoodSubSample(const std::string &basename, EstimatedParametersDescription &INestiParDesc, size_t n_endo, size_t n_exo,
const std::vector<size_t> &zeta_fwrd_arg, const std::vector<size_t> &zeta_back_arg,
const std::vector<size_t> &zeta_mixed_arg, const std::vector<size_t> &zeta_static_arg, const double qz_criterium,
const std::vector<size_t> &varobs, double riccati_tol, double lyapunov_tol, bool noconstant_arg, int &INinfo) :
startPenalty(-1e8), estiParDesc(INestiParDesc),
const std::vector<size_t> &varobs, double riccati_tol, double lyapunov_tol, bool noconstant_arg) :
estiParDesc(INestiParDesc),
kalmanFilter(basename, n_endo, n_exo, zeta_fwrd_arg, zeta_back_arg, zeta_mixed_arg, zeta_static_arg, qz_criterium,
varobs, riccati_tol, lyapunov_tol, noconstant_arg, INinfo), eigQ(n_exo), eigH(varobs.size()), info(INinfo)
varobs, riccati_tol, lyapunov_tol, noconstant_arg), eigQ(n_exo), eigH(varobs.size())
{
};
......@@ -39,35 +39,33 @@ public:
LogLikelihoodSubSample(const std::string &basename, EstimatedParametersDescription &estiParDesc, size_t n_endo, size_t n_exo,
const std::vector<size_t> &zeta_fwrd_arg, const std::vector<size_t> &zeta_back_arg,
const std::vector<size_t> &zeta_mixed_arg, const std::vector<size_t> &zeta_static_arg, const double qz_criterium,
const std::vector<size_t> &varobs_arg, double riccati_tol_in, double lyapunov_tol, bool noconstant_arg, int &info);
const std::vector<size_t> &varobs_arg, double riccati_tol_in, double lyapunov_tol, bool noconstant_arg);
template <class VEC1, class VEC2>
double compute(VEC1 &steadyState, const MatrixConstView &dataView, VEC2 &estParams, VectorView &deepParams,
MatrixView &Q, Matrix &H, VectorView &vll, MatrixView &detrendedDataView, int &info, size_t start, size_t period)
MatrixView &Q, Matrix &H, VectorView &vll, MatrixView &detrendedDataView, size_t start, size_t period)
{
penalty = startPenalty;
logLikelihood = startPenalty;
updateParams(estParams, deepParams, Q, H, period);
if (info == 0)
logLikelihood = kalmanFilter.compute(dataView, steadyState, Q, H, deepParams, vll, detrendedDataView, start, period, penalty, info);
// else
// logLikelihood+=penalty;
return logLikelihood;
};
return kalmanFilter.compute(dataView, steadyState, Q, H, deepParams, vll, detrendedDataView, start, period);
}
virtual ~LogLikelihoodSubSample();
class UpdateParamsException
{
public:
double penalty;
UpdateParamsException(double penalty_arg) : penalty(penalty_arg)
{
}
};
private:
double startPenalty, penalty;
double logLikelihood;
EstimatedParametersDescription &estiParDesc;
KalmanFilter kalmanFilter;
VDVEigDecomposition eigQ;
VDVEigDecomposition eigH;
int &info;
// methods
template <class VEC>
......@@ -78,7 +76,6 @@ private:
int test;
bool found;
std::vector<size_t>::const_iterator it;
info = 0;
for (i = 0; i < estParams.getSize(); ++i)
{
......@@ -108,13 +105,9 @@ private:
Q(k2, k1) = Q(k1, k2);
// [CholQ,testQ] = chol(Q);
test = lapack::choleskyDecomp(Q, "L");
assert(test >= 0);
if (test > 0)
{
mexPrintf("Caught unhandled exception with cholesky of Q matrix: ");
logLikelihood = penalty;
info = 1;
}
else if (test < 0)
{
// The variance-covariance matrix of the structural innovations is not definite positive.
// We have to compute the eigenvalues of this matrix in order to build the penalty.
......@@ -129,8 +122,7 @@ private:
delta -= evQ(i);
}
logLikelihood = penalty+delta;
info = 43;
throw UpdateParamsException(delta);
} // if
break;
......@@ -144,13 +136,9 @@ private:
//[CholH,testH] = chol(H);
test = lapack::choleskyDecomp(H, "L");
assert(test >= 0);
if (test > 0)
{
mexPrintf("Caught unhandled exception with cholesky of Q matrix: ");
logLikelihood = penalty;
info = 1;
}
else if (test < 0)
{
// The variance-covariance matrix of the measurement errors is not definite positive.
// We have to compute the eigenvalues of this matrix in order to build the penalty.
......@@ -165,8 +153,7 @@ private:
if (evH(i) < 0)
delta -= evH(i);
}
logLikelihood = penalty+delta;
info = 44;
throw UpdateParamsException(delta);
} // end if
break;
......@@ -176,8 +163,7 @@ private:
deepParams(k) = estParams(i);
break;
default:
logLikelihood = penalty;
info = 1;
assert(false);
} // end switch
} // end found
} //end for
......
......@@ -33,10 +33,10 @@ LogPosteriorDensity::LogPosteriorDensity(const std::string &modName, EstimatedPa
const std::vector<size_t> &zeta_fwrd_arg, const std::vector<size_t> &zeta_back_arg, const std::vector<size_t> &zeta_mixed_arg,
const std::vector<size_t> &zeta_static_arg, const double qz_criterium_arg, const std::vector<size_t> &varobs_arg,
double riccati_tol_arg, double lyapunov_tol_arg,
bool noconstant_arg, int &info_arg) :
bool noconstant_arg) :
logPriorDensity(estParamsDesc),
logLikelihoodMain(modName, estParamsDesc, n_endo, n_exo, zeta_fwrd_arg, zeta_back_arg, zeta_mixed_arg,
zeta_static_arg, qz_criterium_arg, varobs_arg, riccati_tol_arg, lyapunov_tol_arg, noconstant_arg, info_arg)
zeta_static_arg, qz_criterium_arg, varobs_arg, riccati_tol_arg, lyapunov_tol_arg, noconstant_arg)
{
}
......
......@@ -48,13 +48,13 @@ public:
const std::vector<size_t> &zeta_fwrd_arg, const std::vector<size_t> &zeta_back_arg, const std::vector<size_t> &zeta_mixed_arg,
const std::vector<size_t> &zeta_static_arg, const double qz_criterium_arg, const std::vector<size_t> &varobs_arg,
double riccati_tol_arg, double lyapunov_tol_arg,
bool noconstant_arg, int &info_arg);
bool noconstant_arg);
template <class VEC1, class VEC2>
double
compute(VEC1 &steadyState, VEC2 &estParams, VectorView &deepParams, const MatrixConstView &data, MatrixView &Q, Matrix &H, size_t presampleStart, int &info)
compute(VEC1 &steadyState, VEC2 &estParams, VectorView &deepParams, const MatrixConstView &data, MatrixView &Q, Matrix &H, size_t presampleStart)
{
return -logLikelihoodMain.compute(steadyState, estParams, deepParams, data, Q, H, presampleStart, info)
return -logLikelihoodMain.compute(steadyState, estParams, deepParams, data, Q, H, presampleStart)
-logPriorDensity.compute(estParams);
}
......
/*
* Copyright (C) 2010-2012 Dynare Team
* Copyright (C) 2010-2013 Dynare Team
*
* This file is part of Dynare.
*
......@@ -47,7 +47,7 @@ public:
template<class VEC1>
double compute(VectorView &mhLogPostDens, MatrixView &mhParams, VEC1 &steadyState,
Vector &estParams, VectorView &deepParams, const MatrixConstView &data, MatrixView &Q, Matrix &H,
const size_t presampleStart, int &info, const size_t startDraw, size_t nMHruns,
const size_t presampleStart, const size_t startDraw, size_t nMHruns,
LogPosteriorDensity &lpd, Proposal &pDD, EstimatedParametersDescription &epd)
{
//streambuf *likbuf, *drawbuf *backup;
......@@ -60,7 +60,7 @@ public:
size_t count, accepted = 0;
parDraw = estParams;
logpost = -lpd.compute(steadyState, estParams, deepParams, data, Q, H, presampleStart, info);
logpost = -lpd.compute(steadyState, estParams, deepParams, data, Q, H, presampleStart);
for (size_t run = startDraw - 1; run < nMHruns; ++run)
{
......@@ -79,7 +79,7 @@ public:
{
try
{
newLogpost = -lpd.compute(steadyState, newParDraw, deepParams, data, Q, H, presampleStart, info);
newLogpost = -lpd.compute(steadyState, newParDraw, deepParams, data, Q, H, presampleStart);
}
catch (const std::exception &e)
{
......
......@@ -114,7 +114,7 @@ fillEstParamsInfo(const mxArray *estim_params_info, EstimatedParameter::pType ty
int
sampleMHMC(LogPosteriorDensity &lpd, RandomWalkMetropolisHastings &rwmh,
VectorView &steadyState, VectorConstView &estParams, VectorView &deepParams, const MatrixConstView &data,
MatrixView &Q, Matrix &H, size_t presampleStart, int &info, const VectorConstView &nruns,
MatrixView &Q, Matrix &H, size_t presampleStart, const VectorConstView &nruns,
size_t fblock, size_t nBlocks, Proposal pdd, EstimatedParametersDescription &epd,
const std::string &resultsFileStem, size_t console_mode, size_t load_mh_file)
{
......@@ -397,7 +397,7 @@ sampleMHMC(LogPosteriorDensity &lpd, RandomWalkMetropolisHastings &rwmh,
try
{
jsux = rwmh.compute(mhLogPostDens, mhParamDraws, steadyState, startParams, deepParams, data, Q, H,
presampleStart, info, irun, currInitSizeArray, lpd, pdd, epd);
presampleStart, irun, currInitSizeArray, lpd, pdd, epd);
irun = currInitSizeArray;
sux += jsux*currInitSizeArray;
j += currInitSizeArray; //j=j+1;
......@@ -715,7 +715,7 @@ logMCMCposterior(VectorConstView &estParams, const MatrixConstView &data,
// Allocate LogPosteriorDensity object
int info;
LogPosteriorDensity lpd(basename, epd, n_endo, n_exo, zeta_fwrd, zeta_back, zeta_mixed, zeta_static,
qz_criterium, varobs, riccati_tol, lyapunov_tol, noconstant, info);
qz_criterium, varobs, riccati_tol, lyapunov_tol, noconstant);
// Construct MHMCMC Sampler
RandomWalkMetropolisHastings rwmh(estParams.getSize());
......@@ -727,7 +727,7 @@ logMCMCposterior(VectorConstView &estParams, const MatrixConstView &data,
Proposal pdd(vJscale, D);
//sample MHMCMC draws and get get last line run in the last MH block sub-array
int lastMHblockArrayLine = sampleMHMC(lpd, rwmh, steadyState, estParams, deepParams, data, Q, H, presample, info,
int lastMHblockArrayLine = sampleMHMC(lpd, rwmh, steadyState, estParams, deepParams, data, Q, H, presample,
nMHruns, fblock, nBlocks, pdd, epd, resultsFileStem, console_mode, load_mh_file);
// Cleanups
......
......@@ -104,7 +104,7 @@ double
logposterior(VEC1 &estParams, const MatrixConstView &data,
const mxArray *options_, const mxArray *M_, const mxArray *estim_params_,
const mxArray *bayestopt_, const mxArray *oo_, VEC2 &steadyState, double *trend_coeff,
int &info, VectorView &deepParams, Matrix &H, MatrixView &Q)
VectorView &deepParams, Matrix &H, MatrixView &Q)
{
double loglinear = *mxGetPr(mxGetField(options_, 0, "loglinear"));
if (loglinear == 1)
......@@ -183,12 +183,12 @@ logposterior(VEC1 &estParams, const MatrixConstView &data,
// Allocate LogPosteriorDensity object
LogPosteriorDensity lpd(basename, epd, n_endo, n_exo, zeta_fwrd, zeta_back, zeta_mixed, zeta_static,
qz_criterium, varobs, riccati_tol, lyapunov_tol, noconstant, info);
qz_criterium, varobs, riccati_tol, lyapunov_tol, noconstant);
// Construct arguments of compute() method
// Compute the posterior
double logPD = lpd.compute(steadyState, estParams, deepParams, data, Q, H, presample, info);
double logPD = lpd.compute(steadyState, estParams, deepParams, data, Q, H, presample);
// Cleanups
for (std::vector<EstimatedParameter>::iterator it = estParamsInfo.begin();
......@@ -268,11 +268,10 @@ mexFunction(int nlhs, mxArray *plhs[],
// Compute and return the value
try
{
int info;
*lik = logposterior(estParams, data, options_, M_, estim_params_, bayestopt_, oo_,
steadyState, trend_coeff, info, deepParams, H, Q);
*info_mx = info;
*exit_flag = info;
steadyState, trend_coeff, deepParams, H, Q);
*info_mx = 0;
*exit_flag = 0;
}
catch (LogposteriorMexErrMsgTxtException e)
{
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment