我想对依赖于两个参数的统计过程进行多次模拟。我想模拟这些参数的多种组合。我正在尝试不同的方法但是我最终得到了太多的向量,或者只是最后一个向量的循环。
为简单起见,我的统计过程示例将是一个取决于rho
和sigma
的AR(1)。
我将发布两个代码:
第一个代码:错误,但是说
%Parameters and random walk process
rho=linspace(0.1,0.9,5);
sigma=linspace(0.1,1,5)';
T=100;
epsilon=randn(T+1,1);
%Interval for rhos and sigmas
rho_step=(rho(3)-rho(1))/3
sigma_step=(sigma(3)-sigma(1))/3
for rho=0.1:rho_step:0.95
for sigma=0.001:sigma_step:0.4
y=ones(T+1,1);
for i=2:T
y(i)=exp(rho*log(y(i-1))+sigma*epsilon(i));
end
end
end
第二个代码:有效,但效率不高
%Parameters and random walk process
rho=linspace(0.1,0.9,5);
sigma=linspace(0.1,1,5)';
T=100;
epsilon=randn(T+1,1);
%Interval for rhos and sigmas
rho_step=(rho(3)-rho(1))/5
sigma_step=(sigma(3)-sigma(1))/5
i=1;
for rho=0.1:rho_step:0.95
r(1,i)=rho;
j=1;
for sigma=0.001:sigma_step:0.4
s(j,1)=sigma;
y=ones(T+1,1);
for k=2:T
y(k)=exp(rho*log(y(k-1))+sigma*epsilon(k));
end
if i==1
s1(:,j)=y;
elseif i==2
s2(:,j)=y;
elseif i==3
s3(:,j)=y;
elseif i==4
s4(:,j)=y;
elseif i==5
s5(:,j)=y;
end
j=j+1;
end
i=i+1;
end
任何人都有更有效的方法吗?我期待着提示:)
答案 0 :(得分:0)
如果我理解正确,您希望对rho
和sigma
的所有组合进行网格搜索,然后产生不同的y
?
在这种情况下,我建议使用combvec
。好的一点是,这个代码很容易概括出更多参数的组合ifneedbe(但要注意组合爆炸;))。
%Param Init
rho=linspace(0.1,0.9,5);
sigma=linspace(0.1,1,5)';
T=100;
epsilon=randn(T+1,1);
rho_step=(rho(3)-rho(1))/5
sigma_step=(sigma(3)-sigma(1))/5
k=2:T;
rhos=0.1:rho_step:0.95;
sigmas=0.001:sigma_step:0.4;
%generate all combinations of input vectors:
V = combvec(rhos,sigmas);
res = [];
%gridsearch
for i = 1:size(V,2);
y=ones(T+1,1);
rho = V(1,i);
sigma = V(2,i);
for k=2:T
y(k) = exp(rho*log(y(k-1))+sigma*epsilon(k));
end
%store result along with parameters
res(i).y = y;
res(i).rho = rho;
res(i).sigma = sigma;
end
最佳, 星
答案 1 :(得分:0)
按照@excaza的建议,让我们使用与之前相同的初始化参数和间隔,但让我们有一个3D结果而不是长循环:
for j=1:5
for i=1:5
y=ones(T+1,j,i);
for k=2:T
y(k,j,i)=exp(rho(j)*log(y(k-1,j,i))+sigma(i)*epsilon(k));
end
end
end