引导残差:我做对了吗?


10

首先:据 我了解,引导残差的工作方式如下:

  1. 使模型适合数据
  2. 计算残差
  3. 重新采样残差并将其添加到1。
  4. 使模型适合3中的新数据集。
  5. 重复n次数,但始终将重新采样的残差添加到从1开始的拟合中。

到目前为止,对吗?


我想做的是稍微不同的事情:

我想为估计一些环境变量的算法估计参数和预测不确定性。

我所拥有的是该变量的无错误时间序列(来自模拟)x_true,在其中添加了一些噪声,x_noise以生成综合数据集x。然后,我尝试通过将平方和sum((x_estimate - x_true)^2)(!not x_estimate - x!)作为目标函数拟合我的算法来找到最佳参数。为了查看我的算法如何执行并创建参数分布的样本,我想重新采样x_noise,将其添加到x_true,再次拟合我的模型,冲洗并重复。这是评估参数不确定性的有效方法吗?我可以将自举数据集的拟合解释为预测不确定性,还是必须遵循上面发布的过程?

/ edit:我认为我还没有真正弄清楚模型的作用。可以认为它本质上类似于降噪方法。它不是预测模型,而是一种试图提取嘈杂的环境数据时间序列的基础信号的算法。

/ edit ^ 2:对于在那里的MATLAB用户,我写下了一些我所要表达的快速且肮脏的线性回归示例。

我认为这是残差的“常规”自举(如果我错了,请纠正我):http : //pastebin.com/C0CJp3d1

这就是我想做的:http : //pastebin.com/mbapsz4c


如果显示到目前为止已完成的代码,将会更加清楚。
Metrics

到目前为止,我实际上还没有编写任何关于自举的代码。我的模型的代码非常复杂,我不感谢这样做会有帮助。例如,我们可以假设该模型是像移动平均线一样的平滑过程,其中移动窗口是唯一的模型参数。随着时间的推移,我进行了一系列(综合)测量,并为此添加了一个错误(不一定是同方差和正态分布)。然后,我想估计最接近我所知道的基础“真实”的移动窗口,并想通过引导综合误差来评估不确定性。有帮助吗?
Fred S

这是一些非常糟糕的MATLAB风格的伪代码,也许可以帮助理解我想做的事情:pastebin.com/yTRahzr5
Fred S

抱歉,弗雷德,我不认识Matlab。请标记为Matlab,以获取用户的输入。
Metrics

2
哦,我的问题确实不仅仅局限于MATLAB(那也不是MATLAB代码),它只是一些基于MATLAB语法的伪代码(对于for循环和注释仍然无效)。但是我可以标记它以防万一。
Fred S

Answers:


8

这是更详细的常规(半参数引导)算法:

B =引导程序数

模型:
y=xβ+ϵ

令为残差ϵ^

  1. 运行回归并获得估算器和残差。β^ϵ^
  2. 通过替换对残差重新采样,并获得自举残差向量。ϵ^B
  3. 通过将(1)中的估计值与原始回归变量相乘并加上自举残差来获得自举因变量:。yB=xβ^+ϵ^B
  4. 运行带有自举因变量和原始回归变量回归,这给自举估计,即回归在,这给。yBxβ^B
  5. 返回(2),重复过程B

1

我不确定我的理解是正确的。但是,我建议将您的代码(“残差的普通自举”,第28-34行)修改为:

for i = 2:n_boot  
x_res_boot = x_residuals( randi(n_data,n_data,1) );  
x_boot = x_res_boot+ x_best_fit;  
p_est(:, i) = polyfit( t, x_boot, 1 );  
x_best_fit2 = polyval( p_est(:, i), t );  
x_residuals = x_best_fit2 - x_boot;
x_best_fit=x_best_fit2;
end  

这个想法是,您每次使用残差都不是第一次运行,而是以前的自举拟合。对我来说,所有其他似乎都有效。

这是已在MATLAB中检查的修订版本。两个错误已得到修复。


哦,那对我来说是新的。bsxfun有点复杂;是一个使用您的想法的新版本,应该更清晰一些。但是,这会产生一些奇怪的结果。是因为总是对第一个最佳拟合的残差进行重新采样并将其添加到相同的位置(我的最初想法),如果我对每个迭代的残差进行重新采样并将其添加到每个新的最佳拟合中,就会发生这种情况。有任何想法吗?
Fred S

糟糕,第25行出现了小错误(应该是p_est(:, i)而不是p_est(:, 1)),但是即使我修复了参数分布仍然看起来很奇怪的情况,请执行以下操作:单击
Fred S

1
答案是固定的,并在MATLAB中进行了检查。现在进展顺利。
O_Devinyak

1
每次拟合都会产生新的残差-这是我对残差自举的最初了解。但是我必须承认,为此目的,不同的来源都在使用原始数据的拟合残差。这是有关引导程序的不错的教程(econ.pdx.edu/faculty/KPL/readings/mackinnon06.pdf)。当您的实现正确时,似乎我的方法是错误的。我应该删除给出的答案吗?
O_Devinyak

1
感谢您的跟进。恕我直言,答案留给其他用户同样的问题。我发现有关该主题的文献(至少对我而言是可用的)并不总是很清楚,并且可能会造成混乱。
Fred S

1

要查看算法在预测准确性/均方误差方面的表现,您可能需要使用Efron-Gong的“乐观”引导程序。这是为了易于在R rms包中使用而实现的。看到它的功能olsvalidate.olscalibrate

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.