当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R smooth.f 数据点上的平滑分布


R语言 smooth.f 位于 boot 包(package)。

说明

此函数使用频率平滑方法来查找数据集上的分布,该数据集具有所需的感兴趣统计值 theta 。该方法导致分布随 theta 平滑变化。

用法

smooth.f(theta, boot.out, index = 1, t = boot.out$t[, index],
         width = 0.5)

参数

theta

感兴趣的统计所需的值。如果 theta 是向量,则将为 theta 的每个元素找到单独的分布。

boot.out

通过调用 boot 返回的引导输出对象。

index

boot.out$statistic 输出中感兴趣的变量的索引。如果提供了t,则忽略此参数。 index 必须是标量。

t

感兴趣的统计量的引导值。这必须是长度为 boot.out$R 的向量,并且值的顺序必须与引导程序在 boot.out 中复制的顺序相同。

width

内核平滑的标准化宽度。平滑使用 width*s 值作为 epsilon,其中 s 是感兴趣统计量的标准误差的自举估计。 width 应采用 (0.2, 1) 范围内的值以产生合理的平滑分布。如果width太大,则分布变得更接近均匀。

细节

新的分布权重是通过将正态核平滑器应用于 t 的观测值(按自举模拟中观测到的频率加权)来找到的。生成的分布的参数值可能不完全等于所需值 theta,但它通常具有接近 theta 的值。有关此方法如何工作的详细信息,请参阅 Davison、Hinkley 和 Worton (1995) 以及 Davison 和 Hinkley (1997) 的第 3.9.2 节。

如果length(theta) 为1,则返回与数据集boot.out$data 长度相同的向量。位置i 中的值是赋予位置i 中的数据点的概率,使得分布的参数值大约等于theta 。如果 length(theta) 大于 1,则返回值是一个具有 length(theta) 行的矩阵,每行对应一个分布,参数值大约等于 theta 的对应值。

例子

# Example 9.8 of Davison and Hinkley (1997) requires tilting the resampling
# distribution of the studentized statistic to be centred at the observed
# value of the test statistic 1.84.  In the book exponential tilting was used
# but it is also possible to use smooth.f.
grav1 <- gravity[as.numeric(gravity[, 2]) >= 7, ]
grav.fun <- function(dat, w, orig) {
     strata <- tapply(dat[, 2], as.numeric(dat[, 2]))
     d <- dat[, 1]
     ns <- tabulate(strata)
     w <- w/tapply(w, strata, sum)[strata]
     mns <- as.vector(tapply(d * w, strata, sum)) # drop names
     mn2 <- tapply(d * d * w, strata, sum)
     s2hat <- sum((mn2 - mns^2)/ns)
     c(mns[2] - mns[1], s2hat, (mns[2]-mns[1]-orig)/sqrt(s2hat))
}
grav.z0 <- grav.fun(grav1, rep(1, 26), 0)
grav.boot <- boot(grav1, grav.fun, R = 499, stype = "w", 
                  strata = grav1[, 2], orig = grav.z0[1])
grav.sm <- smooth.f(grav.z0[3], grav.boot, index = 3)

# Now we can run another bootstrap using these weights
grav.boot2 <- boot(grav1, grav.fun, R = 499, stype = "w", 
                   strata = grav1[, 2], orig = grav.z0[1],
                   weights = grav.sm)

# Estimated p-values can be found from these as follows
mean(grav.boot$t[, 3] >= grav.z0[3])
imp.prob(grav.boot2, t0 = -grav.z0[3], t = -grav.boot2$t[, 3])


# Note that for the importance sampling probability we must 
# multiply everything by -1 to ensure that we find the correct
# probability.  Raw resampling is not reliable for probabilities
# greater than 0.5. Thus
1 - imp.prob(grav.boot2, index = 3, t0 = grav.z0[3])$raw
# can give very strange results (negative probabilities).

参考

Davison, A.C. and Hinkley, D.V. (1997) Bootstrap Methods and Their Application. Cambridge University Press.

Davison, A.C., Hinkley, D.V. and Worton, B.J. (1995) Accurate and efficient construction of bootstrap likelihoods. Statistics and Computing, 5, 257-264.

也可以看看

boot , exp.tilt , tilt.boot

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Smooth Distributions on Data Points。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。