从随机数据子集引导回归系数
Bootstrapping regression coefficients from random subsets of data
我正在尝试使用 IsoplotR 包中的 yorkfit() 函数对两个变量执行回归校准。我想根据这个模型估计 bootstrapped 斜率系数的置信区间;但是,我不想使用下面典型的 bootstrap 方法,而是一次只对 75% 的数据(随机选择)执行迭代。到目前为止,使用以下示例数据,我设法 bootstrap yorkfit() 函数的斜率结果:
library(boot)
library(IsoplotR)
X <- c(9.105,8.987,8.974,8.994,8.996,8.966,9.035,9.215,9.239,
9.307,9.227,9.17, 9.102)
Y <- c(28.1,28.9,29.6,29.5,29.0,28.8,28.5,27.3,27.1,26.5,
27.0,27.5,28.4)
n <- length(X)
sX <- X*0.02
sY <- Y*0.05
rXY <- rep(0.8,n)
dat <- cbind(X,sX,Y,sY,rXY)
fit <- york(dat)
boot.test <- function(data,indices){
sample = data[indices,]
mod = york(sample)
return (mod$b)
}
result <- boot(data=dat, statistic = boot.test, R=1000)
boot.ci(result, type = 'bca')
...但我不太确定从这里到哪里去。任何帮助我朝着正确方向前进的帮助将不胜感激。我是 R 的新手,所以如果问题不明确,我深表歉意。谢谢。
基于 package documentation,您应该能够使用 ran.gen 参数和 sim="parametric",使用自定义函数进行采样。在这种情况下,样本是随机选择的总观察值的一定百分比。像下面这样的东西应该可以完成你想要的:
result <- boot(
data=dat,
statistic =boot.test,
R=1000,
sim="parametric",
ran.gen=function(data, percent){
n=nrow(data)
indic=runif(n)
data[rank(indic, ties.method="random")<=round(n*percent,0),]
},
percent=0.75)
我正在尝试使用 IsoplotR 包中的 yorkfit() 函数对两个变量执行回归校准。我想根据这个模型估计 bootstrapped 斜率系数的置信区间;但是,我不想使用下面典型的 bootstrap 方法,而是一次只对 75% 的数据(随机选择)执行迭代。到目前为止,使用以下示例数据,我设法 bootstrap yorkfit() 函数的斜率结果:
library(boot)
library(IsoplotR)
X <- c(9.105,8.987,8.974,8.994,8.996,8.966,9.035,9.215,9.239,
9.307,9.227,9.17, 9.102)
Y <- c(28.1,28.9,29.6,29.5,29.0,28.8,28.5,27.3,27.1,26.5,
27.0,27.5,28.4)
n <- length(X)
sX <- X*0.02
sY <- Y*0.05
rXY <- rep(0.8,n)
dat <- cbind(X,sX,Y,sY,rXY)
fit <- york(dat)
boot.test <- function(data,indices){
sample = data[indices,]
mod = york(sample)
return (mod$b)
}
result <- boot(data=dat, statistic = boot.test, R=1000)
boot.ci(result, type = 'bca')
...但我不太确定从这里到哪里去。任何帮助我朝着正确方向前进的帮助将不胜感激。我是 R 的新手,所以如果问题不明确,我深表歉意。谢谢。
基于 package documentation,您应该能够使用 ran.gen 参数和 sim="parametric",使用自定义函数进行采样。在这种情况下,样本是随机选择的总观察值的一定百分比。像下面这样的东西应该可以完成你想要的:
result <- boot(
data=dat,
statistic =boot.test,
R=1000,
sim="parametric",
ran.gen=function(data, percent){
n=nrow(data)
indic=runif(n)
data[rank(indic, ties.method="random")<=round(n*percent,0),]
},
percent=0.75)