📄 tsls_d.m
字号:
% PURPOSE: An example using tsls(),
% prt_reg()
% Two-stage Least-squares
%
%---------------------------------------------------
% USAGE: tsls_d
%---------------------------------------------------
clear all;
nobs = 200;
x1 = randn(nobs,1);
x2 = randn(nobs,1);
b1 = 1.0;
b2 = 1.0;
iota = ones(nobs,1);
y1 = zeros(nobs,1);
y2 = zeros(nobs,1);
evec = randn(nobs,1);
% create simultaneously determined variables y1,y2
for i=1:nobs;
y1(i,1) = iota(i,1)*1.0 + x1(i,1)*b1 + evec(i,1);
y2(i,1) = iota(i,1)*1.0 + y1(i,1)*1.0 + x2(i,1)*b2 + evec(i,1);
end;
vname1 = ['y1-eqn ',
'y2 var ',
'constant',
'x1 var '];
vname2 = ['y2-eqn ',
'y1 var ',
'constant',
'x2 var '];
% use all exogenous in the system as instruments
xall = [iota x1 x2];
% do ols regression
result1 = ols(y2,[y1 iota x2]);
prt_reg(result1,vname2);
% do tsls regression
result2 = tsls(y2,y1,[iota x2],xall);
prt_reg(result2,vname2);
% do Monte Carlo looping
niter = 100;
bols = result1.beta;
b2sls = result2.beta;
disp('patience -- doing 100 2sls regressions');
for iter=1:niter;
y1 = zeros(nobs,1);
y2 = zeros(nobs,1);
evec = randn(nobs,1);
% create simultaneously determined variables y1,y2
for i=1:nobs;
y1(i,1) = iota(i,1)*1.0 + x1(i,1)*b1 + evec(i,1);
y2(i,1) = iota(i,1)*1.0 + y1(i,1)*1.0 + x2(i,1)*b2 + evec(i,1);
end;
% do ols regression
result1 = ols(y2,[y1 iota x2]);
% do tsls regression
result2 = tsls(y2,y1,[iota x2],xall);
bols = bols + result1.beta;
b2sls = b2sls + result2.beta;
end;
% find averages over the niter runs
bols = bols*(1/niter);
b2sls = b2sls*(1/niter);
% print results based on averages
fprintf(['average OLS results over ',num2str(niter),' runs\n']);
mprint(bols);
fprintf(['average TSLS results over ',num2str(niter),' runs\n']);
mprint(b2sls);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -