Bootstrapping 示例意味着在 R 中使用 boot 包,为 boot() 函数创建统计函数
Bootstrapping sample means in R using boot Package, Creating the Statistic Function for boot() Function
我有一个包含 15 个密度计算的数据集,每个都来自不同的横断面。我想通过替换对这些进行重新采样,从 15 个样带中随机 select 抽取 15 个样本,然后获取这些重新采样的平均值。在这个过程中,每个样带都应该有自己的个人采样概率。这应该进行 5000 次。我有一个代码可以在不使用引导功能的情况下执行此操作,但如果我想使用引导包计算 BCa 95% CI,则需要先通过引导功能完成 bootstrapping。
我一直在尝试创建一个函数,但我无法获得任何似乎有效的函数。我想要某个列 (data$xs) 中的 bootstrap 到 select,并且要使用的概率在 data$prob 列中。
我认为可能有用的功能是;
library(boot)
meanfun <- function (data, i){
d<-data [i,]
return (mean (d)) }
bo<-boot (data$xs, statistic=meanfun, R=5000)
#boot.ci (bo, conf=0.95, type="bca") #obviously `bo` was not made
但这告诉我'incorrect number of dimensions'
我知道如何在正常意义上创建一个函数,但这个函数在启动时的工作方式似乎很奇怪。由于该函数仅按名称提供给引导,并且没有指定要传递给函数的参数,因此我似乎仅限于引导本身将作为参数传递的内容(例如,我无法将 data$xs 作为参数传递给数据,我无法传入 data$prob 作为概率的参数,等等)。它似乎真的限制了可以做的事情。也许我遗漏了什么?
感谢所有帮助
此错误的原因是,data$xs
returns 一个向量,然后您尝试通过 data [i, ]
对它进行子集化。
解决此问题的一种方法是将其更改为 data[i]
或改用 data[, "xs", drop = FALSE]
。 drop = FALSE
避免类型强制,即。将其保存为 data.frame
.
我们试试
data <- data.frame(xs = rnorm(15, 2))
library(boot)
meanfun <- function(data, i){
d <- data[i, ]
return(mean(d))
}
bo <- boot(data[, "xs", drop = FALSE], statistic=meanfun, R=5000)
boot.ci(bo, conf=0.95, type="bca")
并获得:
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 5000 bootstrap replicates
CALL :
boot.ci(boot.out = bo, conf = 0.95, type = "bca")
Intervals :
Level BCa
95% ( 1.555, 2.534 )
Calculations and Intervals on Original Scale
可以使用 boot.array 提取全部或部分重采样集。在这种情况下:
bo.ci<-boot.ci(boot.out = bo, conf = 0.95, type = "bca")
resampled.data<-boot.array(bo,1)
提取第一组和第二组重采样数据:
resample.1<-resampled.data[1,]
resample.2<-resampled.data[2,]
然后继续从任何子集中提取您想要的个人统计信息。例如,如果你假设正常,你可以 运行 学生的 t.test 第一个子集:
t.test(resample.1)
对于这个例子和特定的种子值给出:
数据:重采样.1
t = 6.5216,df = 14,p 值 = 1.353e-05
备择假设:真均值不等于 0
95% 置信区间:
5.234781 10.365219
样本估计:
x
的平均值
7.8
我有一个包含 15 个密度计算的数据集,每个都来自不同的横断面。我想通过替换对这些进行重新采样,从 15 个样带中随机 select 抽取 15 个样本,然后获取这些重新采样的平均值。在这个过程中,每个样带都应该有自己的个人采样概率。这应该进行 5000 次。我有一个代码可以在不使用引导功能的情况下执行此操作,但如果我想使用引导包计算 BCa 95% CI,则需要先通过引导功能完成 bootstrapping。 我一直在尝试创建一个函数,但我无法获得任何似乎有效的函数。我想要某个列 (data$xs) 中的 bootstrap 到 select,并且要使用的概率在 data$prob 列中。
我认为可能有用的功能是;
library(boot)
meanfun <- function (data, i){
d<-data [i,]
return (mean (d)) }
bo<-boot (data$xs, statistic=meanfun, R=5000)
#boot.ci (bo, conf=0.95, type="bca") #obviously `bo` was not made
但这告诉我'incorrect number of dimensions'
我知道如何在正常意义上创建一个函数,但这个函数在启动时的工作方式似乎很奇怪。由于该函数仅按名称提供给引导,并且没有指定要传递给函数的参数,因此我似乎仅限于引导本身将作为参数传递的内容(例如,我无法将 data$xs 作为参数传递给数据,我无法传入 data$prob 作为概率的参数,等等)。它似乎真的限制了可以做的事情。也许我遗漏了什么?
感谢所有帮助
此错误的原因是,data$xs
returns 一个向量,然后您尝试通过 data [i, ]
对它进行子集化。
解决此问题的一种方法是将其更改为 data[i]
或改用 data[, "xs", drop = FALSE]
。 drop = FALSE
避免类型强制,即。将其保存为 data.frame
.
我们试试
data <- data.frame(xs = rnorm(15, 2))
library(boot)
meanfun <- function(data, i){
d <- data[i, ]
return(mean(d))
}
bo <- boot(data[, "xs", drop = FALSE], statistic=meanfun, R=5000)
boot.ci(bo, conf=0.95, type="bca")
并获得:
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 5000 bootstrap replicates
CALL :
boot.ci(boot.out = bo, conf = 0.95, type = "bca")
Intervals :
Level BCa
95% ( 1.555, 2.534 )
Calculations and Intervals on Original Scale
可以使用 boot.array 提取全部或部分重采样集。在这种情况下:
bo.ci<-boot.ci(boot.out = bo, conf = 0.95, type = "bca")
resampled.data<-boot.array(bo,1)
提取第一组和第二组重采样数据:
resample.1<-resampled.data[1,]
resample.2<-resampled.data[2,]
然后继续从任何子集中提取您想要的个人统计信息。例如,如果你假设正常,你可以 运行 学生的 t.test 第一个子集:
t.test(resample.1)
对于这个例子和特定的种子值给出:
数据:重采样.1
t = 6.5216,df = 14,p 值 = 1.353e-05
备择假设:真均值不等于 0
95% 置信区间:
5.234781 10.365219
样本估计:
x
的平均值
7.8