Начальная загрузка остатков: я делаю это правильно?

10

Прежде всего: Из того, что я понял, остатки начальной загрузки работают следующим образом:

  1. Подгоните модель к данным
  2. Рассчитать остатки
  3. Пересчитайте остатки и добавьте их к 1.
  4. Подгоните модель к новому набору данных из 3.
  5. Повторите nвремя, но всегда добавляйте пересчитанные остатки к подгонке от 1.

Пока это правильно?


Я хочу сделать что-то немного другое:

Я хочу оценить параметр и неопределенность прогноза для алгоритма, который оценивает некоторую переменную среды.

У меня есть безошибочный временной ряд (из симуляции) этой переменной x_true, к которому я добавляю некоторый шум x_noise, для генерации синтетического набора данных x. Затем я пытаюсь найти оптимальные параметры, подбирая в своем алгоритме сумму квадратов sum((x_estimate - x_true)^2)(! Не x_estimate - x!) В качестве целевой функции. Чтобы увидеть, как работает мой алгоритм и создать образцы распределений моих параметров, я хочу сделать повторную выборку x_noise, добавить ее x_true, снова подогнать мою модель, промыть и повторить. Это правильный подход для оценки неопределенности параметров? Могу ли я интерпретировать совпадения для загруженных наборов данных как неопределенность прогноза, или я должен следовать процедуре, которую я опубликовал выше?

/ edit: я думаю, что я не совсем понял, что делает моя модель. Думайте об этом как о чем-то вроде шумоподавляющего метода. Это не прогнозирующая модель, это алгоритм, который пытается извлечь основной сигнал из шумного временного ряда данных об окружающей среде.

/ edit ^ 2: Для пользователей MATLAB я написал несколько быстрых и грязных примеров линейной регрессии того, что я имею в виду.

Это то, что я считаю "обычной" начальной загрузкой остатков (пожалуйста, исправьте меня, если я ошибаюсь): http://pastebin.com/C0CJp3d1

Это то, что я хочу сделать: http://pastebin.com/mbapsz4c

Фред С
источник
Будет понятнее, если вы покажете код, который вы сделали до сих пор.
Показатели
На самом деле я пока ничего не кодировал с точки зрения начальной загрузки. Код для моей модели довольно сложный, я не благодарен, что это поможет. В качестве примера можно предположить, что модель представляет собой процедуру сглаживания, подобную скользящей средней, с движущимся окном в качестве единственного параметра модели. У меня есть ряд (синтетических) измерений с течением времени, и я добавляю к этому ошибку (не обязательно гомоскедастичную и нормально распределенную). Затем я хочу оценить движущееся окно, которое ближе всего подходит к основному «истинному», которое я знаю, и хочу оценить неопределенность, загрузив мою синтетическую ошибку. Это помогает?
Фред С
Вот очень плохой псевдокод в стиле MATLAB, может быть, он помогает понять, что я хотел бы сделать: pastebin.com/yTRahzr5
Фред С
Извините, Фред, я не знаю Matlab. Пожалуйста, пометьте Matlab, чтобы получать отзывы от пользователей.
Метрики
2
О, мой вопрос на самом деле не ограничивается MATLAB (и это на самом деле не код MATLAB, это просто какой-то псевдокод, основанный на синтаксисе MATLAB для циклов for и комментариев, которые все равно не будут работать). Но я могу пометить это на всякий случай.
Фред С

Ответы:

8

Вот более общий алгоритм (полупараметрический-бутстрап):

B


y=xβ+ϵ

ϵ^

  1. β^ϵ^
  2. ϵ^B
  3. yB=xβ^+ϵ^B
  4. yBxβ^B
  5. B
Sweetbabyjesus
источник
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. Две ошибки были исправлены.

O_Devinyak
источник
О, это было ново для меня. bsxfun несколько сложен; Вот новая версия, которая использует вашу идею и должна быть немного понятнее. Однако это дает несколько странные результаты. Это результат всегда повторной выборки остатков первого наилучшего соответствия и добавления их к одному и тому же (моя первоначальная идея), и это то, что происходит, если я повторно измеряю остатки каждой итерации и добавляю их к каждому новому наилучшему соответствию. Любые идеи?
Фред С
Ой, маленькая ошибка в строке 25 (должно быть p_est (:, i) вместо p_est (:, 1)), но даже когда я исправляю, что распределения параметров выглядят странно: click
Fred S
1
Ответ исправлен и проверен в MATLAB. Теперь все идет хорошо.
О_Девиняк
1
Новые остатки для каждой посадки - это было мое первое понимание остаточного бутстрапа. Но я должен признать, что для этой цели разные источники используют остатки соответствия исходным данным. Вот хороший учебник по начальной загрузке ( econ.pdx.edu/faculty/KPL/readings/mackinnon06.pdf ). Кажется, мой подход неверен, а ваша реализация верна. Должен ли я удалить данный ответ?
О_Девиняк
1
Спасибо за продолжение. ИМХО, оставьте ответ другим пользователям с таким же вопросом. Я обнаружил, что литература (по крайней мере та, которая мне доступна) не всегда ясна по этому вопросу и может быть довольно запутанной.
Фред С
1

Чтобы увидеть, как алгоритм работает с точки зрения точности прогнозирования / среднеквадратичной ошибки, вам, вероятно, понадобится загрузчик «оптимизма» Эфрона-Гонга. Это реализовано для удобства использования в rmsпакете R. См своих функций ols, validate.ols, calibrate.

Фрэнк Харрелл
источник