boot
位于 boot
包(package)。 说明
生成应用于数据的统计数据的 R
引导复制。参数和非参数重采样都是可能的。对于非参数引导,可能的重采样方法有普通引导、平衡引导、对偶重采样和排列。对于非参数多样本问题,使用分层重采样:这是通过在 boot 调用中包含层向量来指定的。可以指定重要性重采样权重。
用法
boot(data, statistic, R, sim = "ordinary", stype = c("i", "f", "w"),
strata = rep(1,n), L = NULL, m = 0, weights = NULL,
ran.gen = function(d, p) d, mle = NULL, simple = FALSE, ...,
parallel = c("no", "multicore", "snow"),
ncpus = getOption("boot.ncpus", 1L), cl = NULL)
参数
data |
数据为向量、矩阵或 DataFrame 。如果它是矩阵或 DataFrame ,则每一行都被视为一个多变量观察。 |
statistic |
应用于数据时返回包含感兴趣统计数据的向量的函数。当 |
R |
引导程序重复的数量。通常这将是一个正整数。对于重要性重采样,一些重采样可能使用一组权重,而其他重采样则使用一组不同的权重。在这种情况下, |
sim |
指示所需模拟类型的字符串。可能的值为 |
stype |
指示 |
strata |
指定多样本问题的层的整数向量或因子。这可以为任何模拟指定,但在 |
L |
在观察中评估的影响值向量。仅当 |
m |
每次引导复制时要进行的预测数量。这对于(广义)线性模型最有用。仅当 |
weights |
重要性权重向量或矩阵。如果是向量,那么它应该具有与 |
ran.gen |
此函数仅在 |
mle |
要传递给 |
simple |
逻辑上,仅允许为 |
... |
|
parallel |
要使用的并行操作的类型(如果有)。如果缺少,则默认值取自选项 |
ncpus |
整数:并行操作中要使用的进程数:通常会选择可用 CPU 的数量。 |
cl |
如果 |
细节
要引导的统计数据可以根据需要简单或复杂,只要其参数对应于数据集和(对于非参数引导)索引、频率或权重向量。 statistic
被 boot
函数视为黑匣子,不会进行检查以确保满足这些条件。
Davison、Hinkley 和 Schechtman (1986) 说明了一阶平衡引导。 Hall (1989) 说明了对立引导程序,并且是实验性的,特别是与分层一起使用时。其他非参数模拟类型是普通引导程序(可能具有不等概率)和返回案例随机排列的排列。如果提供了该参数,所有这些方法都在层内独立工作。
对于参数引导程序,用户必须指定如何进行重采样。实现此目的的最佳方法是指定函数 ran.gen
,该函数将从观察到的数据集返回模拟数据集以及 mle
中指定的一组参数估计值。
值
返回的值是类 "boot"
的对象,包含以下组件:
t0 |
|
t |
具有 |
R |
|
data |
|
seed |
|
statistic |
函数 |
sim |
使用模拟类型。 |
stype |
传递给 |
call |
对 |
strata |
使用的地层。如果提供了的话,这是传递给 |
weights |
如果未指定重要性采样权重,则传递给 |
pred.i |
如果需要预测( |
L |
|
ran.gen |
如果 |
mle |
当 |
该类有 c
、 plot
和 print
方法。
并联运行
当使用parallel = "multicore"
时(在Windows上不可用),每个工作进程都会继承当前会话的环境,包括工作空间和加载的命名空间以及附加的包(但不包括随机数种子:见下文)。
当需要做更多的工作时parallel = "snow"
isused:工作进程是新创建的R流程,以及statistic
需要安排设置它需要的环境:通常一个好方法是使用词法作用域,因为什么时候statistic
被发送到工作进程,其封闭环境也被发送。 (例如,参见示例jack.after.boot
其中辅助函数嵌套在statistic
函数。)parallel = "snow"
主要用于多核 Windows 机器,其中parallel = "multicore"
不可用。
对于大多数 boot
方法,重采样是在主进程中完成的,但如果 simple = TRUE
或 sim =
"parametric"
则不会。在这些情况下(或者 statistic
本身使用随机数),如果结果需要可重现,则需要更加小心。重采样是通过 censboot(sim = "wierd")
和 tsboot
中的大多数方案在工作进程中完成的(sim == "fixed"
和 sim == "geom"
除外,默认为 ran.gen
)。
当随机数生成在工作进程中完成时,默认行为是每个工作进程选择一个单独的种子,且不可重复。但是,对于使用默认集群的parallel = "multicore"
或parallel = "snow"
,如果选择了RNGkind("L'Ecuyer-CMRG")
,则使用第二种方法。在这种方法中,每个工作人员根据生成工作人员时的种子获得 RNG 流的不同子序列,因此如果 ncpus
未更改,则结果将是可重现的,而对于 parallel = "multicore"
,如果调用 parallel::mc.reset.stream()
:请参阅 mclapply
的示例。
请注意,加载 parallel
命名空间可能会更改随机种子,因此为了获得最大的可重复性,应在调用此函数之前完成此操作。
例子
# Usual bootstrap of the ratio of means using the city data
ratio <- function(d, w) sum(d$x * w)/sum(d$u * w)
boot(city, ratio, R = 999, stype = "w")
# Stratified resampling for the difference of means. In this
# example we will look at the difference of means between the final
# two series in the gravity data.
diff.means <- function(d, f)
{ n <- nrow(d)
gp1 <- 1:table(as.numeric(d$series))[1]
m1 <- sum(d[gp1,1] * f[gp1])/sum(f[gp1])
m2 <- sum(d[-gp1,1] * f[-gp1])/sum(f[-gp1])
ss1 <- sum(d[gp1,1]^2 * f[gp1]) - (m1 * m1 * sum(f[gp1]))
ss2 <- sum(d[-gp1,1]^2 * f[-gp1]) - (m2 * m2 * sum(f[-gp1]))
c(m1 - m2, (ss1 + ss2)/(sum(f) - 2))
}
grav1 <- gravity[as.numeric(gravity[,2]) >= 7,]
boot(grav1, diff.means, R = 999, stype = "f", strata = grav1[,2])
# In this example we show the use of boot in a prediction from
# regression based on the nuclear data. This example is taken
# from Example 6.8 of Davison and Hinkley (1997). Notice also
# that two extra arguments to 'statistic' are passed through boot.
nuke <- nuclear[, c(1, 2, 5, 7, 8, 10, 11)]
nuke.lm <- glm(log(cost) ~ date+log(cap)+ne+ct+log(cum.n)+pt, data = nuke)
nuke.diag <- glm.diag(nuke.lm)
nuke.res <- nuke.diag$res * nuke.diag$sd
nuke.res <- nuke.res - mean(nuke.res)
# We set up a new data frame with the data, the standardized
# residuals and the fitted values for use in the bootstrap.
nuke.data <- data.frame(nuke, resid = nuke.res, fit = fitted(nuke.lm))
# Now we want a prediction of plant number 32 but at date 73.00
new.data <- data.frame(cost = 1, date = 73.00, cap = 886, ne = 0,
ct = 0, cum.n = 11, pt = 1)
new.fit <- predict(nuke.lm, new.data)
nuke.fun <- function(dat, inds, i.pred, fit.pred, x.pred)
{
lm.b <- glm(fit+resid[inds] ~ date+log(cap)+ne+ct+log(cum.n)+pt,
data = dat)
pred.b <- predict(lm.b, x.pred)
c(coef(lm.b), pred.b - (fit.pred + dat$resid[i.pred]))
}
nuke.boot <- boot(nuke.data, nuke.fun, R = 999, m = 1,
fit.pred = new.fit, x.pred = new.data)
# The bootstrap prediction squared error would then be found by
mean(nuke.boot$t[, 8]^2)
# Basic bootstrap prediction limits would be
new.fit - sort(nuke.boot$t[, 8])[c(975, 25)]
# Finally a parametric bootstrap. For this example we shall look
# at the air-conditioning data. In this example our aim is to test
# the hypothesis that the true value of the index is 1 (i.e. that
# the data come from an exponential distribution) against the
# alternative that the data come from a gamma distribution with
# index not equal to 1.
air.fun <- function(data) {
ybar <- mean(data$hours)
para <- c(log(ybar), mean(log(data$hours)))
ll <- function(k) {
if (k <= 0) 1e200 else lgamma(k)-k*(log(k)-1-para[1]+para[2])
}
khat <- nlm(ll, ybar^2/var(data$hours))$estimate
c(ybar, khat)
}
air.rg <- function(data, mle) {
# Function to generate random exponential variates.
# mle will contain the mean of the original data
out <- data
out$hours <- rexp(nrow(out), 1/mle)
out
}
air.boot <- boot(aircondit, air.fun, R = 999, sim = "parametric",
ran.gen = air.rg, mle = mean(aircondit$hours))
# The bootstrap p-value can then be approximated by
sum(abs(air.boot$t[,2]-1) > abs(air.boot$t0[2]-1))/(1+air.boot$R)
参考
There are many references explaining the bootstrap and its variations. Among them are :
Booth, J.G., Hall, P. and Wood, A.T.A. (1993) Balanced importance resampling for the bootstrap. Annals of Statistics, 21, 286-298.
Davison, A.C. and Hinkley, D.V. (1997) Bootstrap Methods and Their Application. Cambridge University Press.
Davison, A.C., Hinkley, D.V. and Schechtman, E. (1986) Efficient bootstrap simulation. Biometrika, 73, 555-566.
Efron, B. and Tibshirani, R. (1993) An Introduction to the Bootstrap. Chapman & Hall.
Gleason, J.R. (1988) Algorithms for balanced bootstrap simulations. American Statistician, 42, 263-266.
Hall, P. (1989) Antithetic resampling for the bootstrap. Biometrika, 73, 713-724.
Hinkley, D.V. (1988) Bootstrap methods (with Discussion). Journal of the Royal Statistical Society, B, 50, 312-337, 355-370.
Hinkley, D.V. and Shi, S. (1989) Importance sampling and the nested bootstrap. Biometrika, 76, 435-446.
Johns M.V. (1988) Importance sampling for bootstrap confidence intervals. Journal of the American Statistical Association, 83, 709-714.
Noreen, E.W. (1989) Computer Intensive Methods for Testing Hypotheses. John Wiley & Sons.
也可以看看
boot.array
、boot.ci
、censboot
、empinf
、jack.after.boot
、tilt.boot
、tsboot
。
相关用法
- R boot.ci 非参数引导置信区间
- R boot.array 自举重采样数组
- R beaver 海狸体温数据
- R bigcity 美国城市人口
- R breslow 医生因吸烟死亡
- R brambles 荆棘藤的空间位置
- R poisons 动物生存时间
- R ducks 杂交鸭的行为和羽毛特征
- R nodal 前列腺癌的淋巴结受累
- R cloth 布料瑕疵数量
- R polar 新喀里多尼亚红土的极点位置
- R capability 模拟制造过程数据
- R saddle.distn Bootstrap 统计的鞍点分布近似
- R tsboot 时间序列的引导
- R logit 比例的逻辑
- R EEF.profile 经验可能性
- R tau Tau 粒子衰变模式
- R gravity 重力加速度
- R plot.boot Bootstrap 模拟的输出图
- R tilt.boot 非参数倾斜引导
- R envelope 曲线的置信区间
- R co.transfer 一氧化碳转移
- R imp.weights 重要性采样权重
- R acme 每月超额返回
- R glm.diag.plots 广义线性模型的诊断图
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Bootstrap Resampling。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。