필터 지우기
필터 지우기

Info

이 질문은 마감되었습니다. 편집하거나 답변을 올리려면 질문을 다시 여십시오.

Change script to apply on a different dataset.

조회 수: 1 (최근 30일)
Saptorshee Chakraborty
Saptorshee Chakraborty 2018년 7월 30일
마감: MATLAB Answer Bot 2021년 8월 20일
Hello, I want to apply a particular econometric methodology for my own research purpose. The script for the methodology has been made public by the author. How can I change it to apply it to my own data.
  댓글 수: 6
Rik
Rik 2018년 8월 1일
It is always best to include all relevant information in your question. That way everybody can help you instead of only the people you send your data by email. (just as a note: don't send me the files by email, it's more efficient to upload them here yourself)
Saptorshee Chakraborty
Saptorshee Chakraborty 2018년 8월 1일
Sorry,
The code:
clear global p T N d pi; IC_needed = 1; cvx_solver mosek load('balancedPanelX1995.mat') X = [lagsaving, cpi, interest, gdp]; y = saving;
p = size(X, 2); T = 15; N = 56; d = 2; % number of IVs
K_max = 5; lamb.grid = 10; lamb.min = .2; lamb.max = 2.0; lamb_const = lamb.min * (lamb.max / lamb.min ).^( ( (1:lamb.grid) - 1) /( lamb.grid -1 ) ); % the constant for lambda. very important!!
lambda = lamb_const* T^(-1/3); numlam = length(lambda);
tol = 0.0001; R = 80; W = 1;
%% scale the dependent variable and its lag term [Dy, DX, Z ] = IV_generate(y, X); std_yi = std(Dy); Dy = bsxfun(@rdivide, Dy, std_yi) ; DX = bsxfun(@rdivide, DX, std(DX, 1)); Z(:,:,3:5) = DX(:,:,2:4);
beta_hat0 = zeros(N, p); for i = 1:N DXi = permute( DX(:,i,:), [1 3 2]); Zi = permute( Z(:,i,:), [1 3 2]); Dyi = Dy(:, i); beta_hat0(i,:) = pinv(DXi' * (Zi * Zi') * DXi) * (DXi' * (Zi * Zi') * Dyi); %initial value end beta_hat00 = beta_hat0;
T = 13; ds = dataset( kron( (1:N)', ones(T,1) ), repmat( (1:T)', [N 1]),... reshape(Dy, [N*T 1]), reshape(DX, [N*T size(DX,3)] ), reshape(Z, [N*T size(Z,3)]) ); ds.Properties.VarNames = {'N' 'T' 'y' 'X', 'Z'};
%% if IC_needed == 1 IC_value = zeros(K_max, numlam); IC = IC_PGMM(ds, ones(N,1)); % K = 1 case IC_value(1, :) = log( IC/(N*T) );
for ll = 1:numlam
disp(ll)
for K = 2:K_max
lam = lambda(ll)*var(ds.y);
[b_K, hat.a] = PGMM_est(Dy, DX, Z, beta_hat0, W, K, lam, R, tol);
[~, hat.b, ~ , group] = report_b( T, b_K, hat.a, K );
sum(group)
IC_kk = zeros(1,K);
for kk = 1:K
IC_kk(kk) = IC_PGMM(ds, group(:,kk) );
end
IC_value(K,ll) = log( sum(IC_kk)/(N*T) )
end
end
pen = (2/3)*(N*T)^(-.5)* p*(1:K_max);
IC_final = IC_value + repmat( pen, [numlam, 1])';
[~, l_hat] = min(IC_final(2,:));
end
%% the information criterion selects % K = 2 and lambda(8)
K = 2; l_hat lam = lambda(l_hat)*var(ds.y);
[b_K, hat.a] = PGMM_est(Dy, DX, Z, beta_hat0, W, K, lam, R, tol); [~, hat.b, ~ , group] = report_b( T, b_K, hat.a, K ); H = hat_IC_PGMM( ds, hat.b, hat.a, K, group); sum(group)
est_post_lasso = zeros(p,6); pi = 0.05; for kk = 1:K this_group = group(:,kk); dat = ds; a_hat = hat.a(kk,:)';
index = 1:N;
g_index = index(this_group);
g_data = dat( ismember(dat.N, g_index), : ); % group-specific data
ky = g_data.y;
kX = g_data.X;
kZ = g_data.Z;
Nk = sum(this_group);
XZZX = (kX' * kZ) * pinv(kZ' * kZ) * (kZ' * kX)/(Nk*T)+ridge(pi, N, T);
XZZy = (kX' * kZ) * pinv(kZ' * kZ) * (kZ' * ky)/(Nk*T);
post_a = (pinv(XZZX) * XZZy)';
[vari] = var_post_GMM(T, post_a', ky, kX, kZ, pi); % no ridge used
se = sqrt(diag(vari));
est_post_lasso( :, (3 * ( kk-1 ) + 1) :3 * kk ) = [post_a; se'; post_a./se' ]';
end
est_post_lasso = mat2dataset( est_post_lasso, 'VarNames', ... {'g1_coef', 'g1_sd', 'g1_t', 'g2_coef', 'g2_sd', 'g2_t'}); disp(est_post_lasso)
load('country56.mat') country(group(:,1)) country(group(:,2)) sum(group)
%% pooled estimation % when the two groups are put together, we found the IV's is weak % this is the heterogeneity induced weak IV. % we add a positive value to the matrix to stablize the inverse, as in % ridge regression
XZZX = ds.X' * ds.Z * pinv(ds.Z' * ds.Z) * ds.Z' * ds.X/(N*T) + ridge(pi, N, T); XZZy = ds.X' * ds.Z * pinv(ds.Z' * ds.Z) * ds.Z' * ds.y/(N*T) ;
alpha1 = XZZX \ XZZy;
[vari] = var_post_GMM(T, alpha1, ds.y, ds.X, ds.Z,pi); se = sqrt(diag(vari)); [alpha1, se]
group_PGMM = group; save('group_PGMM.mat', 'group_PGMM');

답변 (0개)

이 질문은 마감되었습니다.

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by