Commit 1aa72e8e authored by Houtan Bastani's avatar Houtan Bastani

update blog entry

parent 15f3a452
// --+ options: json=compute +--
path('../ols', path);
path(['..' filesep 'ols'], path);
/*
* Reproduces Table 1 OLS estimate from Angrist and Fernandez-Val (2013)
/* Reproduces Table 1 OLS estimate from Angrist and Fernandez-Val (2013)
* ExtrapoLATE-ing: External Validity and Overidentification in the LATE Framework
* Data obtained from: http://sites.bu.edu/ivanf/files/2014/03/m_d_806.dta_.zip
*
*/
var weeksm1, workedm;
......@@ -18,7 +16,9 @@ parameters a0, a1, a2, a3, a4, a5, a6, a7, a8,
b0, b1, b2, b3, b4, b5, b6, b7, b8;
model(linear);
[name='eq1']
weeksm1 = a0 + a1*morekids + a2*agem1 + a3*agefstm + a4*boy1st + a5*boy2nd + a6*blackm +a7*hispm + a8*othracem + resa;
[name='eq2']
workedm = b0 + b1*morekids + b2*agem1 + b3*agefstm + b4*boy1st + b5*boy2nd + b6*blackm +b7*hispm + b8*othracem + resb;
end;
......
This diff is collapsed.
This diff is collapsed.
function [lhs, rhs, linenum, sample, tagvalue] = getEquationsByTags(jsonmodel, varargin)
%function [lhs, rhs, linenum, sample] = getEquationByTag(jsonmodel, varargin)
% Return the lhs, rhs of an equation and the line it was defined
% on given its tag
function [jsonmodel] = getEquationsByTags(jsonmodel, tagname, tagvalue)
%function [jsonmodel] = getEquationsByTags(jsonmodel, tagname, tagvalue)
% Return the jsonmodel structure with the matching tags
%
% INPUTS
% jsonmodel [string] JSON representation of model block
% varargin [string or cellstring arrays] tagname and tagvalue for
% eqs to get
% jsonmodel [cell array] JSON representation of model block
% tagname [string] The name of the tag whos values are to
% be selected
% tagvalue [string] The values to be selected for the
% provided tagname
%
% OUTPUTS
% lhs [cellstring array] left hand side of eq
% rhs [cellstring array] right hand side of eq
% linenum [cellstring array] eq line in .mod file
% sample [cell array of dates] sample range
% tagvalue [cellstring array] tags associated with equations
% jsonmodel [cell array] JSON representation of model block,
% with equations removed that don't match
% eqtags
%
% SPECIAL REQUIREMENTS
% none
% Copyright (C) 2017 Dynare Team
% Copyright (C) 2017-2018 Dynare Team
%
% This file is part of Dynare.
%
......@@ -35,39 +34,9 @@ function [lhs, rhs, linenum, sample, tagvalue] = getEquationsByTags(jsonmodel, v
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
assert(nargin == 1 || nargin == 3, 'Incorrect number of arguments passed to getEquationsByTags');
if nargin == 1
lhs = cell(1, length(jsonmodel));
rhs = cell(1, length(jsonmodel));
linenum = cell(1, length(jsonmodel));
sample = cell(1, length(jsonmodel));
tagvalue = cell(1, length(jsonmodel));
for i=1:length(jsonmodel)
lhs{i} = jsonmodel{i}.lhs;
rhs{i} = jsonmodel{i}.rhs;
linenum{i} = jsonmodel{i}.line;
if isfield(jsonmodel{i}, 'tags') && ...
isfield(jsonmodel{i}.tags, 'name')
tagvalue{i} = jsonmodel{i}.tags.('name');
else
tagvalue{i} = ['eq_line_no_' num2str(linenum{i})];
end
if isfield(jsonmodel{i}, 'tags')
if isfield(jsonmodel{i}.tags, 'sample')
tmp = strsplit(jsonmodel{i}.tags.sample, ':');
sample{i} = dates(tmp{1}):dates(tmp{2});
end
else
tagvalue{i} = ['eq_line_no_' num2str(linenum{i})];
end
end
return
end
tagname = varargin{1};
tagvalue = varargin{2};
assert(nargin == 3, 'Incorrect number of arguments passed to getEquationsByTags');
assert(iscell(jsonmodel) && ~isempty(jsonmodel), ...
'the first argument must be a cell array of structs');
assert(ischar(tagname), 'Tag name must be a string');
assert(ischar(tagvalue) || iscell(tagvalue), 'Tag value must be a string or a cell string array');
......@@ -75,39 +44,23 @@ if ischar(tagvalue)
tagvalue = {tagvalue};
end
lhs = cell(1, length(tagvalue));
rhs = cell(1, length(tagvalue));
linenum = cell(1, length(tagvalue));
sample = cell(1, length(tagvalue));
idx2rm = [];
for j = 1:length(tagvalue)
for i=1:length(jsonmodel)
if isfield(jsonmodel{i}, 'tags') && ...
isfield(jsonmodel{i}.tags, tagname) && ...
strcmp(jsonmodel{i}.tags.(tagname), tagvalue{j})
lhs{j} = jsonmodel{i}.lhs;
rhs{j} = jsonmodel{i}.rhs;
linenum{j} = jsonmodel{i}.line;
if isfield(jsonmodel{i}.tags, 'sample')
tmp = strsplit(jsonmodel{i}.tags.sample, ':');
sample{j} = dates(tmp{1}):dates(tmp{2});
end
if ~any(cellfun(@isempty, lhs))
return
end
idx2keep = [];
for i=1:length(tagvalue)
found = false;
for j=1:length(jsonmodel)
assert(isstruct(jsonmodel{j}), 'Every entry in jsonmodel must be a struct');
if isfield(jsonmodel{j}, 'tags') && ...
isfield(jsonmodel{j}.tags, tagname) && ...
strcmp(jsonmodel{j}.tags.(tagname), tagvalue{i})
idx2keep = [idx2keep; j];
found = true;
break
end
end
if isempty(rhs{j})
warning(['getEquationsByTags: No equation tag found by the name of ''' tagvalue{j} ''''])
idx2rm = [idx2rm j];
if found == false
warning(['getEquationsByTags: no equation tag found by the name of ''' tagvalue{i} ''''])
end
end
if ~isempty(idx2rm)
lhs(:,idx2rm) = [];
rhs(:,idx2rm) = [];
linenum(:,idx2rm) = [];
sample(:,idx2rm) = [];
tagvalue(:,idx2rm) = [];
assert(~isempty(idx2keep), 'getEquationsByTags: no equations selected');
jsonmodel = jsonmodel(unique(idx2keep, 'stable'));
end
end
\ No newline at end of file
Markdown is supported
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