부트 스트랩 배포의 표준 오류 사용


19

(필요한 경우 R 코드를 무시하십시오. 주된 질문은 언어 독립적이므로)

간단한 통계 (예 : 평균)의 변동성을보고 싶다면 다음과 같은 이론을 통해 할 수 있다는 것을 알고 있습니다.

x = rnorm(50)

# Estimate standard error from theory
summary(lm(x~1))
# same as...
sd(x) / sqrt(length(x))

또는 부트 스트랩으로 다음과 같이하십시오.

library(boot)

# Estimate standard error from bootstrap
(x.bs = boot(x, function(x, inds) mean(x[inds]), 1000))
# which is simply the standard *deviation* of the bootstrap distribution...
sd(x.bs$t)

그러나 내가 궁금한 점은 특정 상황에서 부트 스트랩 배포 의 표준 오류 를 보는 것이 유용 / 유효 할 수 있습니까? 내가 다루고있는 상황은 다음과 같이 비교적 시끄러운 비선형 함수입니다.

# Simulate dataset
set.seed(12345)
n   = 100
x   = runif(n, 0, 20)
y   = SSasymp(x, 5, 1, -1) + rnorm(n, sd=2)
dat = data.frame(x, y)

여기서 모델은 원래 데이터 세트를 사용하여 수렴하지 않습니다.

> (fit = nls(y ~ SSasymp(x, Asym, R0, lrc), dat))
Error in numericDeriv(form[[3L]], names(ind), env) : 
  Missing value or an infinity produced when evaluating the model

따라서 내가 관심있는 통계 는 이러한 nls 매개 변수에 대한 보다 안정된 추정치입니다. 아마도 여러 부트 스트랩 복제에 대한 수단입니다.

# Obtain mean bootstrap nls parameter estimates
fit.bs = boot(dat, function(dat, inds)
              tryCatch(coef(nls(y ~ SSasymp(x, Asym, R0, lrc), dat[inds, ])),
                       error=function(e) c(NA, NA, NA)), 100)
pars = colMeans(fit.bs$t, na.rm=T)

다음은 실제로 원래 데이터를 시뮬레이션하는 데 사용한 볼 파크에 있습니다.

> pars
[1]  5.606190  1.859591 -1.390816

플롯 된 버전은 다음과 같습니다.

# Plot
with(dat, plot(x, y))

newx = seq(min(x), max(x), len=100)
lines(newx, SSasymp(newx, pars[1], pars[2], pars[3]))

lines(newx, SSasymp(newx, 5, 1, -1), col='red')
legend('bottomright', c('Actual', 'Predicted'), bty='n', lty=1, col=2:1)

여기에 이미지 설명을 입력하십시오

안정화 된 모수 추정값 의 변동성을 원한다면 이 부트 스트랩 분포의 정규성을 가정하여 표준 오차를 계산할 수 있다고 생각합니다.

> apply(fit.bs$t, 2, function(x) sd(x, na.rm=T) / sqrt(length(na.omit(x))))
[1] 0.08369921 0.17230957 0.08386824

이것은 합리적인 접근입니까? 이와 같이 불안정한 비선형 모델의 매개 변수에 대한 추론에 대한 더 일반적인 접근 방법이 있습니까? (마지막 비트에 대한 이론에 의존하는 대신 여기에서 리샘플링의 두 번째 레이어를 대신 수행 할 수 있다고 가정하지만 모델에 따라 시간이 오래 걸릴 수 있습니다. 그럼에도 불구하고 이러한 표준 오류가 부트 스트랩 복제 수를 늘리면 0에 가까워 지므로 무엇이든 유용합니다.)

감사합니다. 그런데 저는 엔지니어입니다.이 주변의 상대 초보자 인 것을 용서해주십시오.

답변:


13

이 질문에는 몇 가지 문제가 있습니다. 첫째, 개별 부트 스트랩 추정기 중 일부가 계산 가능하지 않은 경우에도 (부록 부족, 솔루션의 존재하지 않음) 부트 스트랩 평균이 합리적인 추정기인지 여부에 대한 의문이 있습니다. 둘째, 부트 스트랩 추정값이 합리적이라는 점을 감안할 때 이러한 추정값에 대한 신뢰 구간 또는 표준 오차를 얻는 방법에 대한 의문이 있습니다.

그러나 문제의 목적은 추정치를 계산하는 알고리즘이 때때로 실패하거나 추정기가 정의되지 않은 경우에도 추정치를 생성하는 것입니다. 일반적인 접근 방식으로 문제가 있습니다.

  • 부트 스트랩 된 추정치의 평균을 계산하는 동안 추정치가 계산 될 수없는 부트 스트랩 된 샘플을 맹목적으로 버리는 것은 일반적으로 편향된 결과를 제공합니다.

일반적인 문제의 심각성은 여러 가지에 달려 있습니다. 예를 들어, 추정치는 계산 가능하고, 시료의 조건부 분포 추정인지 여부를 지정하는 빈도 아니다 하지 추정값은 계산 가능하다 주어진 샘플의 조건부 분포로부터 계산 가능한 다르다. 이 방법을 사용하지 않는 것이 좋습니다.

질문의 두 번째 부분에는 약간의 표기법이 필요합니다. 원래 데이터 세트를 나타내는 경우Xθ^θ^(X)Y

θ~(X)=E(θ^(Y)X,A(X))
A(X)Xθ^(Y)NAXA(X)θ~(X)

θ^(Y)XA(X)θ~(X)

A(X)θ~(X)

편집 :

Efron의 모델 선택 후 매우 훌륭한 논문 추정 및 정확도 는 부트 스트랩의 두 번째 레이어를 사용하지 않고 bagged 추정기의 표준 오차를 추정하는 일반적인 방법을 제공합니다. 이 백서는 때때로 계산할 수없는 추정량을 명시 적으로 다루지 않습니다.


훌륭한 답변에 감사드립니다. 편견 에 대한 요점 은 특히 ​​잘 활용됩니다. 포인트 클라우드가 완전히 균일 한 극단적 인 경우를 상상할 수 있습니다. 모델에 매우 적합한 단일 멀리 떨어진 포인트 세트를 절약하십시오. 대부분의 nls적합치가 실패 할 수 있지만 수렴되는 크기의 편차는 크며 예측 된 표준 오류 / CI는 의심 할 정도로 작습니다. nlsBoot는 50 % 성공적인 적합치의 특별 요구 사항을 사용하지만 조건부 분포의 (비) 유사성이 똑같이 우려된다는 것에 동의합니다.
John Colby

(이 사이트는 SO처럼 저를 허용하는 경우 당신에게 보너스 내일을 제공하기 위해 노력할 것입니다)
존 콜비
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.