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

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 « Оценка и точность после выбора модели » дает общий метод оценки стандартной ошибки оценки в пакетах без использования второго уровня начальной загрузки. В статье не рассматриваются явно оценки, которые иногда не вычисляются.

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