Использование стандартной ошибки дистрибутива начальной загрузки


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

В этом вопросе есть несколько проблем. Во-первых, возникает вопрос о том, будут ли загруженные средние значения разумными оценщиками, даже если некоторые из индивидуальных загруженных оценок не являются вычислимыми (отсутствие сходимости, отсутствие решений). Во-вторых, учитывая, что загруженные оценки являются разумными, возникает вопрос о том, как получить доверительные интервалы или, возможно, просто стандартные ошибки для этих оценок.

--

Однако цель в этом вопросе состоит в том, чтобы производить оценки даже в тех случаях, когда алгоритм вычисления оценок может иногда терпеть неудачу или когда оценщик иногда не определен. В качестве общего подхода существует проблема:

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

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

Иксθ^θ^(Икс)Y

θ~(Икс)знак равноЕ(θ^(Y)|Икс,A(Икс))
A(Икс)Иксθ^(Y)Не Доступно, То есть мы вычисляем условное ожидание оценки на загрузочной выборке-ИксA(Икс)θ~(Икс)

θ^(Y)ИксA(Икс)θ~(Икс)

A(Икс)θ~(Икс)

Редактировать :

Очень хорошая статья Efron « Оценка и точность после выбора модели » дает общий метод оценки стандартной ошибки оценки в пакетах без использования второго уровня начальной загрузки. В статье не рассматриваются явно оценки, которые иногда не вычисляются.


Спасибо за потрясающий ответ. Вопрос о предвзятости особенно уместен. Вы можете представить себе экстремальный случай, когда облако точек полностью однородно, за исключением одного набора удаленных точек, которые очень хорошо подходят к модели. Подавляющее большинство nlsподгонок может потерпеть неудачу, но из тех, которые сходятся, смещение будет огромным, а прогнозируемые стандартные ошибки / КИ крайне малы. nlsBootиспользует специальное требование 50% успешных совпадений, но я согласен с вами, что (не) сходство условных распределений также вызывает озабоченность.
Джон Колби

(Я постараюсь дать вам бонус завтра, если этот сайт мне так нравится)
Джон Колби
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.