matlab - 为什么 matlab Bootstrap 评估 N+1 次?

标签 matlab statistics-bootstrap

我想使用内置命令“bootstrp”通过 matlab 进行引导。我注意到,当我只要求 N 次迭代时,该过程进行了 N+1 次迭代。这是为什么?当我建立一个手动循环来进行引导时,它实际上只运行 N 次,然后它会更快。这是问题的一个最小示例:

clear all

global iterationcounter

tic

iterationcounter=0;
data=unifrnd(0,1,1,1000); %draw vector of 1000 random numbers

bootstat = bootstrp(100,@testmean,data); %evaluate function for 100 bootstrap samples
toc

使用函数

function [ m ] = testmean( data )
global iterationcounter

m=mean(data);

iterationcounter=iterationcounter+1

end

函数应该评估 100 个样本,但是当我运行脚本时,它将评估函数 101 次:

...

iterationcounter =

101

Elapsed time is 0.102291 seconds.

那么为什么要使用这种看似浪费时间的内置 Matlab 函数呢?

最佳答案

bootstrp 调用 bootfun(函数参数)进行完整性检查(来自源代码,在 MATLAB 2015b 中,bootstrp.m, l.167 ff) :

% Sanity check bootfun call and determine dimension and type of result
try
    % Get result of bootfun on actual data, force to a row.
    bootstat = feval(bootfun,bootargs{:});
    bootstat = bootstat(:)';
catch ME
    m = message('stats:bootstrp:BadBootFun');
    MEboot =  MException(m.Identifier,'%s',getString(m));
    ME = addCause(ME,MEboot);
    rethrow(ME);
end

我认为在一个现实的应用程序中,N>>100,所以额外的开销(远)小于总运行时间的百分之一(不考虑可能的并行化带来的速度增益) ), 所以这应该没那么重要吧?

关于matlab - 为什么 matlab Bootstrap 评估 N+1 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35894224/

相关文章:

java - 使用 mongo-java-driver 在 Matlab 中进行高级 mongoDB 查询

python - 将 matlab 循环转换为 python 循环

matlab - 在MATLAB中从结构中删除字段

matlab - 如何检查向量b是否在A列中?

r - R中的引导变量相关性

matlab - 为什么 && 运算符在 Matlab/Octave 中似乎不起作用?

r - 函数可以工作( boot.stepAIC ),但在另一个函数中抛出错误 - 环境问题?

r - 如何从 elrm 摘要输出中提取系数

r - 如何在 R 中执行自举配对 t 检验?

R启动函数-plot中t和t*的解释-标准图形的修改