Residuos de bootstrapping: ¿lo estoy haciendo bien?


10

En primer lugar: por lo que entendí, los residuos de arranque funcionan de la siguiente manera:

  1. Ajustar modelo a datos
  2. Calcular los residuos
  3. Vuelva a muestrear los residuos y agréguelos a 1.
  4. Ajustar modelo al nuevo conjunto de datos de 3.
  5. Repita los ntiempos, pero siempre agregue los residuos muestreados al ajuste desde 1.

¿Es eso correcto hasta ahora?


Lo que quiero hacer es algo ligeramente diferente:

Quiero estimar la incertidumbre de parámetros y predicciones para un algoritmo que estima alguna variable ambiental.

Lo que tengo es una serie de tiempo libre de errores (de una simulación) de esa variable x_true, a la que agrego algo de ruido, x_noisepara generar un conjunto de datos sintético x. Luego trato de encontrar parámetros óptimos ajustando mi algoritmo con la suma de cuadrados sum((x_estimate - x_true)^2)(! No x_estimate - x!) Como una función objetivo. Para ver cómo funciona mi algoritmo y crear muestras de las distribuciones de mis parámetros, quiero volver a muestrear x_noise, agregarlo x_true, ajustar mi modelo nuevamente, enjuagar y repetir. ¿Es ese un enfoque válido para evaluar la incertidumbre de los parámetros? ¿Puedo interpretar los ajustes a los conjuntos de datos de bootstrap como incertidumbre de predicción, o tengo que seguir el procedimiento que publiqué anteriormente?

/ edit: Creo que realmente no he dejado claro lo que hace mi modelo. Piense en ello esencialmente como un método de eliminación de ruido. No es un modelo predictivo, es un algoritmo que intenta extraer la señal subyacente de una serie temporal ruidosa de datos ambientales.

/ edit ^ 2: Para los usuarios de MATLAB , escribí un ejemplo de regresión lineal rápido y sucio de lo que quiero decir.

Esto es lo que creo que es el arranque "ordinario" de residuos (corríjame si me equivoco): http://pastebin.com/C0CJp3d1

Esto es lo que quiero hacer: http://pastebin.com/mbapsz4c


Será más claro si muestra el código que ha hecho hasta ahora.
Métricas

De hecho, no he codificado nada hasta ahora en términos de bootstrapping. El código para mi modelo es bastante complejo, no agradezco que eso ayude. Como ejemplo, podemos suponer que el modelo es un procedimiento de suavizado como un promedio móvil, con la ventana móvil como el único parámetro del modelo. Tengo una serie de mediciones (sintéticas) a lo largo del tiempo y agrego un error (no necesariamente homoscedastic y normalmente distribuido) a eso. Luego quiero estimar la ventana móvil que se acerca más a la "verdadera" subyacente que conozco y quiero evaluar la incertidumbre mediante el arranque de mi error sintético. ¿Eso ayuda?
Fred S

Aquí hay un pseudo código de estilo MATLAB muy malo, tal vez ayude a entender lo que me gustaría hacer: pastebin.com/yTRahzr5
Fred S

Lo siento, Fred, no conozco a Matlab. Etiqueta como Matlab para obtener aportes de los usuarios.
Métricas

2
Oh, mi pregunta realmente no se limita a MATLAB (y ese no es realmente el código MATLAB, es solo un pseudocódigo basado en la sintaxis de MATLAB para bucles for y comentarios que no funcionarían de todos modos). Pero puedo etiquetarlo por si acaso.
Fred S

Respuestas:


8

Aquí está el algoritmo general (semi-paramétrico-bootstrap) con más detalle:

B = número de bootstraps

el modelo:
y=xβ+ϵ

deja que sean los residuosϵ^

  1. Ejecute la regresión y obtenga los estimadores y resids . varepsilonβ^ϵ^
  2. Vuelva a muestrear los residuos con reemplazo y obtenga el vector residual bootstrapped .ϵ^B
  3. Obtenga la variable dependiente bootstrapped multiplicando los estimadores de (1) con los regresores originales y agregando el residual bootstrapped: .yB=xβ^+ϵ^B
  4. Ejecute la regresión con las variables dependientes bootstrapped y los regresores originales, esto proporciona el estimador bootstrapped, es decir, en , esto da . x β ByBxβ^B
  5. Repita el procedimiento -veces volviendo a (2).B

1

No estoy seguro de que mi comprensión sea correcta. Pero aquí está mi sugerencia para modificar su código ("arranque ordinario de residuos", líneas 28-34) en:

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  

La idea es que cada vez que use residuos no de la primera ejecución, sino del ajuste previo de arranque. En cuanto a mí, todo lo demás parece ser válido.

Esta es una versión revisada que se ha verificado en MATLAB. Se han corregido dos errores.


Oh, bueno, eso era nuevo para mí. bsxfun es algo complicado; Aquí hay una nueva versión que utiliza su idea y debería ser un poco más clara. Sin embargo, eso produce resultados algo extraños. Este es el resultado de siempre volver a muestrear los residuos del primer mejor ajuste y agregarlos al mismo (mi idea inicial), y esto es lo que sucede si vuelvo a muestrear los residuos de cada iteración y los agrego a cada nuevo mejor ajuste. ¿Algunas ideas?
Fred S

Vaya, pequeño error en la línea 25 (debería ser p_est (:, i) en lugar de p_est (:, 1)), pero incluso cuando soluciono que las distribuciones de parámetros todavía se ven inestables: haga clic
Fred S

1
La respuesta es fija y verificada en MATLAB. Ahora va bien.
O_Devinyak

1
Nuevos residuos para cada ajuste: esa fue mi primera comprensión de bootstrap residual. Pero debo admitir que diferentes fuentes están utilizando residuos de ajuste a los datos originales para ese propósito. Aquí hay un buen tutorial sobre bootstrap ( econ.pdx.edu/faculty/KPL/readings/mackinnon06.pdf ). Parece que mi enfoque es incorrecto mientras su implementación es correcta. ¿Debo eliminar la respuesta dada?
O_Devinyak

1
Gracias por el seguimiento. En mi humilde opinión, deje la respuesta para otros usuarios con la misma pregunta. Descubrí que la literatura (al menos la que está disponible para mí) no siempre es clara sobre ese tema y puede ser bastante confusa.
Fred S

1

Para ver cómo funciona un algoritmo en términos de precisión predictiva / error cuadrático medio, es probable que necesite el arranque de "optimismo" de Efron-Gong. Esto se implementa para facilitar su uso en el rmspaquete R. Ver sus funciones ols, validate.ols, calibrate.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.