引导程序分布的标准误差的使用


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。)

非常感谢,顺便说一句,我是一名工程师,所以请原谅我是这里的相对新手。

Answers:


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撰写的非常不错的论文《模型选择后的估计和准确性》提供了一种无需使用第二层引导程序即可估计袋装估计器标准误差的通用方法。本文并未明确涉及偶尔不可计算的估计量。


感谢您的出色回答。关于偏见的观点特别容易被接受。您可以想象一个极端的情况,其中点云是完全均匀的,只保留一组非常适合模型的遥远点。绝大多数nls拟合可能会失败,但是在收敛的拟合中,偏差会很大,并且预测的标准误差/ CI可能很小。nlsBoot使用了50%成功拟合的临时要求,但我同意您的观点,即条件分布的(不相似)同等重要。
约翰·科尔比

(如果该站点允许我像明天那样,我明天将尝试给您奖金)
John Colby
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.