부트 스트랩 잔차 : 제대로하고 있습니까?


10

우선 : 내가 이해 한 바에 따르면 부트 스트랩 잔차는 다음과 같이 작동합니다.

  1. 모델을 데이터에 적합
  2. 잔차 계산
  3. 잔차를 다시 샘플링하여 1에 더합니다.
  4. 모델을 3의 새 데이터 세트에 맞 춥니 다.
  5. 반복 n횟수는 있지만 항상 재 표본 된 잔차를 1의 적합치에 추가하십시오.

지금까지는 맞습니까?


내가하고 싶은 것은 약간 다른 것입니다.

일부 환경 변수를 추정하는 알고리즘의 매개 변수 및 예측 불확실성을 추정하고 싶습니다.

내가 가진 것은 합성 데이터 세트를 생성하기 위해 x_true노이즈를 추가 하는 변수의 오류없는 시계열 (시뮬레이션에서)입니다 . 그런 다음 알고리즘을 목적 함수로 제곱합 (! not !)으로 피팅하여 최적의 매개 변수를 찾습니다 . 내 알고리즘의 성능을 확인하고 매개 변수 분포 샘플을 작성하기 위해 리샘플링 하고에 추가하고 모델을 다시 맞추고 헹구고 반복하고 싶습니다. 이것이 매개 변수 불확실성을 평가하기위한 올바른 접근법입니까? 부트 스트랩 된 데이터 세트에 대한 적합치를 예측 불확실성으로 해석 할 수 있습니까, 아니면 위에 게시 한 절차를 따라야합니까?x_noisexsum((x_estimate - x_true)^2)x_estimate - xx_noisex_true

/ 편집 : 내 모델이 실제로 무엇인지 명확하게 밝히지 않았다고 생각합니다. 본질적으로 노이즈 제거 방법과 같은 것으로 생각하십시오. 예측 모델이 아니며 시끄러운 시계열 환경 데이터의 기본 신호를 추출하려고하는 알고리즘입니다.

/ edit ^ 2 : MATLAB-Users를 위해, 나는 의미하는 것의 빠르고 더러운 선형 회귀 예제를 작성했습니다.

이것이 내가 잔존물을 "보통"부트 스트랩한다고 믿는 것입니다 (잘못되면 정정하십시오) : http://pastebin.com/C0CJp3d1

이것이 내가하고 싶은 일입니다 : http://pastebin.com/mbapsz4c


지금까지 수행 한 코드를 표시하면 더 명확 해집니다.
통계

나는 실제로 부트 스트래핑 측면에서 아무것도 코딩하지 않았다. 내 모델의 코드는 매우 복잡하므로 도움이 될 것입니다. 예를 들어, 모델을 이동 매개 변수로 사용하는 이동 평균과 같은 모델이 이동 평균과 같은 스무딩 절차라고 가정 할 수 있습니다. 나는 시간이 지남에 따라 일련의 (합성) 측정을하고 그에 오류 (동일한 등각 및 정규 분포는 아님)를 추가합니다. 그런 다음 내가 알고있는 기본 "진정한"에 가장 가까운 이동 창을 추정하고 합성 오류를 부트 스트랩하여 불확실성을 평가하려고합니다. 도움이 되나요?
Fred S

다음은 매우 나쁜 MATLAB 스타일의 의사 코드입니다. pastebin.com/yTRahzr5
Fred S

죄송합니다. Fred, Matlab을 모르겠습니다. 사용자로부터 입력을 받으려면 Matlab으로 태그를 지정하십시오.
통계

2
오, 내 질문은 실제로 MATLAB에만 국한되지 않습니다 (그리고 실제로 MATLAB 코드는 아니며, forloops 및 주석에 대한 MATLAB 구문을 기반으로하는 의사 코드 일뿐입니다.) 그러나 경우에 따라 태그를 지정할 수 있습니다.
Fred S

답변:


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 (:, 1) 대신 p_est (:, i) 여야 함), 그러나 매개 변수 분포가 여전히 엉뚱 해 보이는 것을 고치더라도 : click
Fred S

1
답변은 MATLAB에서 수정되고 확인됩니다. 이제는 잘 진행됩니다.
O_Devinyak

1
모든 맞춤에 대한 새로운 잔차-잔상 부트 스트랩에 대한 나의 첫 이해였습니다. 그러나 나는 다른 출처들이 그 목적을 위해 원본 데이터에 잔차를 사용하고 있음을 인정해야합니다. 여기 부트 스트랩 ( econ.pdx.edu/faculty/KPL/readings/mackinnon06.pdf ) 에 대한 유용한 자습서가 있습니다. 구현이 올바른 동안 내 접근 방식이 잘못된 것 같습니다. 주어진 답변을 삭제해야합니까?
O_Devinyak

1
후속 감사합니다. IMHO, 같은 질문을 가진 다른 사용자의 답변을 남겨주세요. 나는 (적어도 나에게 이용 가능한) 문헌이 그 주제에 대해 항상 명확하지는 않으며 상당히 혼란 스러울 수 있다는 것을 발견했다.
Fred S

1

예측 정확도 / 평균 제곱 오차 측면에서 알고리즘의 성능을 확인하려면 Efron-Gong "낙관론"부트 스트랩이 필요할 수 있습니다. 이것은 R rms패키지 에서 쉽게 사용할 수 있도록 구현되었습니다 . 그 기능을 참조하십시오 ols, validate.ols, calibrate.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.