问题描述
我有一个可以平稳运行的预先指定的模型。问题是我有两个相同模型的数据集。这两个数据集仅基于行进行更改:数据集1从1到60,数据集2从61到115。所有变量都相同。我想避免两次计算相同的代码。我宁愿很好地编写它并一口气计算出来。
我将为您的模型提供一个示例数据集:
data = rand(115,5)
Y_data = data(1:60,:) % dataset 1
Y_data = data(61:115,:) % dataset 2
% This is the model that runs nicely on dataset Y_data. I wanted to avoid to run the model twice,% first with Y_data from row 1 to 60 and then from row to 61 to 100. I would like to do it in one shot
% the code for the model is fully automated so it's just a matter of making it work first on dataset 1 and then
% on dataset 2 in one unique code
T = size(Y_data,1);
P = 3; % number of lags used in LP for controls
H_min = 1;
H_max = 25;
y = Y_data(:,1); % endogenous variable
x = Y_data(:,2); % shock
w = lagmatrix(Y_data(:,[3:5]),1:P );
newData = cat(2,y,x,w)
% Remove missings from data
newData(any(isnan(newData),2),:) = [];
% Re-declare variables after removing missings
y = newData(:,1); % endogenous variable
x = newData(:,2); % shock
w = newData(:,3:size(newData,2)); % control variables and lags
r = 3;
lambda = 10000;
slp = locproj(y,w,H_min,H_max,'smooth',r,lambda);
%% cross-validation Choice of Lambda
slp = locproj(y,0.01);
lambda = [1:10:1000] * T;
slp = locproj_cv(slp,5,lambda);
lambda_opt = lambda( min( slp.RSS ) == slp.RSS );
%% Confidence Intervals
r = 3;
slp = locproj(y,lambda_opt);
slp = locproj_conf(slp,lambda_opt/2);
我认为可以解决的问题是使用if / else,例如:
% This is wrong but it gives you an idea of what I was trying to do and get
% trying to tell MATLAB,fun the code first from dataset 1 (row 1:60) and then the same on dataset 2 (from row 61:115)
k = 1:60
if k == 1
Y_data = Y_data;
else
Y_data = data(61:115,:);
end
% model code as above just here - not to make it too long
% the output therefore should save both results for dataset1 and dataset2
我被卡住了,无法继续前进。谁能帮我?这会让我开心。
非常感谢您!
解决方法
有很多方法可以实现这一目标。这是两个简单的。
使功能dataAnalysis(Y_data)
并简单地完成
[slp,lambdaOpt] = dataAnalysis(data(1:60,:))
[slp2,lambdaOpt2] = dataAnalysis(data(61:115,:))
您的功能看起来像
function [slp,lambdaOpt] = dataAnalysis(data)
% This is the model that runs nicely on dataset Y_data. I wanted to avoid to run the model twice,% first with Y_data from row 1 to 60 and then from row to 61 to 100. I would like to do it in one shot
% the code for the model is fully automated so it's just a matter of making it work first on dataset 1 and then
% on dataset 2 in one unique code
T = size(Y_data,1);
P = 3; % number of lags used in LP for controls
H_min = 1;
H_max = 25;
% etc. etc...
% Add in whatever output variables are important
或者,像您尝试的那样使用循环:
indices = {1:60,61:115};
for k = 1:2
Y_Data = data(indices{k},:);
% your model code operating on Y_data
% store any results here as either variable(k) (scalar data)
% or variable {k} (non-scalar data)
end