вчера я реализовал свой первый бутстрап в MATLab. (и да, я знаю, что циклы — это зло.):
%data is an mxn matrix where the data should be sampled per column but there
can be a NaNs Elements
%from the array (a column of data) n values are sampled nReps times
function result = bootstrap_std(data, n, nReps,quantil)
result = zeros(1,size(data,2));
for i=1:size(data,2)
bootstrap_data = zeros(n,nReps);
values = find(~isnan(data(:,i)));
if isempty(values)
bootstrap_data(:,:) = NaN;
else
for k=1:nReps
bootstrap_data(:,k) = datasample(data(values,i),n);
end
end
stat = zeros(1,nReps);
for k=1:nReps
stat(k) = nanstd(bootstrap_data(:,k));
end
sort(stat);
result(i) = quantile(stat,quantil);
end
end
Как видите, эта версия работает по столбцам. Алгоритм делает то, что должен, но очень медленно, когда размер данных увеличивается. Теперь у меня вопрос: можно ли реализовать эту логику без использования циклов for? Моя проблема в том, что я не смог найти версию datasample, которая выполняет выборку по столбцам. Или есть более удобная функция?
Я рад любому намеку или идее, как я могу ускорить эту реализацию.
Спасибо и всего наилучшего!
Стефан