Resíduos de inicialização: estou fazendo certo?


10

Primeiro de tudo: Pelo que entendi, os resíduos de autoinicialização funcionam da seguinte maneira:

  1. Ajustar modelo aos dados
  2. Calcular os resíduos
  3. Amostra novamente os resíduos e adicione-os a 1.
  4. Ajuste o modelo ao novo conjunto de dados de 3.
  5. Repita os ntempos, mas sempre adicione os resíduos reamostrados ao ajuste de 1.

Isso está correto até agora?


O que eu quero fazer é algo um pouco diferente:

Quero estimar a incerteza de parâmetro e previsão para um algoritmo que estima alguma variável ambiental.

O que eu tenho é uma série temporal livre de erros (de uma simulação) dessa variável x_true, à qual adiciono algum ruído, x_noisepara gerar um conjunto de dados sintético x. Em seguida, tento encontrar parâmetros ideais ajustando meu algoritmo com a soma dos quadrados sum((x_estimate - x_true)^2)(! Não x_estimate - x!) Como uma função objetiva. Para ver o desempenho do meu algoritmo e criar amostras das distribuições dos meus parâmetros, quero reamostrar x_noise, adicioná-lo x_true, ajustar meu modelo novamente, enxaguar e repetir. Essa é uma abordagem válida para avaliar a incerteza dos parâmetros? Posso interpretar os ajustes nos conjuntos de dados iniciados como incerteza de previsão ou tenho que seguir o procedimento publicado acima?

/ edit: Eu acho que realmente não deixei claro o que meu modelo faz. Pense nisso como algo essencialmente como um método anti-ruído. Não é um modelo preditivo, é um algoritmo que tenta extrair o sinal subjacente de uma série temporal ruidosa de dados ambientais.

/ edit ^ 2: Para os usuários do MATLAB , escrevi alguns exemplos de regressão linear rápida e suja do que quero dizer.

Isto é o que eu acredito que o bootstrapping "comum" de resíduos é (por favor, corrija-me se estiver errado): http://pastebin.com/C0CJp3d1

Isto é o que eu quero fazer: http://pastebin.com/mbapsz4c


Será mais claro se você mostrar o código que você fez até agora.
Metrics

Na verdade, não codifiquei nada até agora em termos de inicialização. O código para o meu modelo é bastante complexo, não agradeço por isso ajudaria. Como exemplo, podemos assumir que o modelo é um procedimento de suavização como uma média móvel, com a janela móvel como o único parâmetro do modelo. Eu tenho uma série de medidas (sintéticas) ao longo do tempo e adiciono um erro (não necessariamente homosquástico e normalmente distribuído) a isso. Desejo, então, estimar a janela em movimento que mais se aproxima do "verdadeiro" subjacente que conheço e desejo avaliar a incerteza inicializando meu erro sintético. Isso ajuda?
Fred S

Aqui está algum código pseudo-style MATLAB muito ruim, talvez ele ajuda a entender o que eu gostaria de fazer: pastebin.com/yTRahzr5
Fred S

Desculpe Fred, eu não conheço o Matlab.Por favor, marque como Matlab para obter informações dos usuários.
Metrics

2
Oh, minha pergunta realmente não se limita ao MATLAB (e isso não é realmente o código do MATLAB, são apenas alguns pseudo-códigos baseados na sintaxe do MATLAB para for-loops e comentários que não funcionariam de qualquer maneira). Mas eu posso marcar isso por precaução.
Fred S

Respostas:


8

Aqui está o algoritmo geral (semi-paramétrico-bootstrap) com mais detalhes:

B = número de autoinicializações

o modelo:
y=xβ+ϵ

que sejam os resíduosϵ^

  1. Execute a regressão e obtenha os estimadores e resíduos . £β^ϵ^
  2. Amostra novamente os resíduos com a substituição e obtenha o vetor residual com boot .ϵ^B
  3. Obtenha a variável dependente de inicialização multiplicando o (s) estimador (es) de (1) pelos regressores originais e adicionando o resíduo inicial: .yB=xβ^+ϵ^B
  4. Execute a regressão com as variáveis ​​dependentes de inicialização e os regressores originais, isso fornece ao estimador de inicialização, ou seja, regressão em , isso fornece . x β ByBxβ^B
  5. Repita o procedimento -vezes, retornando para (2).B

1

Não tenho certeza se meu entendimento está correto. Mas aqui está minha sugestão para modificar seu código ("inicialização comum de resíduos", linhas 28-34) em:

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  

A idéia é que, toda vez que você estiver usando resíduos, não da primeira execução, mas do ajuste de inicialização anterior. Quanto a mim, todos os outros parecem válidos.

Esta é uma versão revisada que foi verificada no MATLAB. Dois erros foram corrigidos.


Oh, bem, isso era novo para mim. bsxfun é um pouco complicado; Aqui está uma nova versão que usa sua ideia e deve ser um pouco mais clara. No entanto, isso produz resultados um tanto estranhos. Esse é o resultado de sempre reamostrar os resíduos do primeiro melhor ajuste e adicioná-los à mesma (minha ideia inicial), e é isso que acontece se eu reamostrar os resíduos de cada iteração e adicioná-los a cada novo melhor ajuste. Alguma ideia?
Fred S

Opa, pequeno erro na linha 25 (deve ser p_est (:, i) em vez de p_est (:, 1)), mas mesmo quando eu corrijo que as distribuições de parâmetros ainda parecem instáveis: clique em
Fred S

1
A resposta é fixa e verificada no MATLAB. Agora vai bem.
O_Devinyak

1
Novos resíduos para cada ajuste - esse foi meu primeiro entendimento sobre o bootstrap residual. Mas devo admitir que fontes diferentes estão usando resíduos de ajuste aos dados originais para esse fim. Aqui está um bom tutorial sobre o bootstrap ( econ.pdx.edu/faculty/KPL/readings/mackinnon06.pdf ). Parece que minha abordagem está errada enquanto sua implementação está correta. Devo excluir a resposta dada?
O_Devinyak

1
Obrigado pelo seguimento. IMHO, deixe a resposta para outros usuários com a mesma pergunta. Eu descobri que a literatura (pelo menos a que está disponível para mim) nem sempre é clara sobre esse assunto e pode ser bastante confusa.
Fred S

1

Para ver o desempenho de um algoritmo em termos de precisão preditiva / erro ao quadrado médio, você provavelmente precisará da inicialização do "otimismo" do Efron-Gong. Isso é implementado para facilitar o uso no rmspacote R. Veja suas funções ols, validate.ols, calibrate.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.