我需要在具有非标准依赖性的时间序列上运行引导程序.所以为了做到这一点,我需要创建一个通过时间调整来模拟时间序列的函数.
testing<-function(){
sampleData<-as.zoo(data.frame(index=1:1000,vol=(rnorm(1000))^2,x=NA))
sampleData[,"x"]<-sampleData[,"vol"]+rnorm(1000) #treat this is completely exognenous and unknown in connection to vol
sampleData<-cbind(sampleData,mean=rollmean(sampleData[,"vol"],k=3,align="right"))
sampleData<-cbind(sampleData,vol1=lag(sampleData[,"vol"],k=-1),x1=lag(sampleData[,"x"],k=-1),mean1=lag(sampleData[,"mean"],k=-1))
#get estimate
mod<-lm(vol~vol1+x1+mean1,data=sampleData)
res<-mod$residuals
for(i in 5:1000){
#recursively estimate
sampleData[i,"vol"]<-as.numeric(predict(mod,newdata=data.frame(sampleData[i-1,])))+res[i-3]
#now must update other paramaters
#first our rolled average
sampleData[i,"mean"]<-mean(sampleData[(i-3):i,"vol"])
#reupdate our lagged variables
sampleData[i,"vol1"]<-sampleData[i-1,"vol"]
sampleData[i,"mean1"]<-sampleData[i-1,"mean"]
}
lm(vol~vol1+x1+mean1,data=sampleData)
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码并测量运行时间时
system.time(testing())
user system elapsed
2.711 0.201 2.915
Run Code Online (Sandbox Code Playgroud)
这对我来说是一个小问题,因为将集成此代码来构建引导程序.这意味着每个步骤的任何时间乘以约100.而我正在更新这几千次.这意味着单次运行需要数小时(到几天)才能运行.
反正加速这段代码了吗?
亲切的问候,
马修
我希望通过boot.ci函数获得多个统计信息的bootstrap置信区间.这是我的MWE.
我有两个统计信息,out并希望找到这两个统计信息的bootstrap置信区间.但是,boot.ci函数仅为第一个统计量(t1*)提供自举置信区间,但不为第二个统计量(t2*)提供自举置信区间.
set.seed(12345)
df <- rnorm(n=10, mean = 0, sd = 1)
Boot.fun <-
function(data, idx) {
data1 <- sample(data[idx], replace=TRUE)
m1 <- mean(data1)
sd1 <- sd(data1)
out <- cbind(m1, sd1)
return(out)
}
Boot.fun(data = df)
library(boot)
boot.out <- boot(df, Boot.fun, R = 20)
boot.out
RDINARY NONPARAMETRIC BOOTSTRAP
Call:
boot(data = df, statistic = Boot.fun, R = 20)
Bootstrap Statistics :
original bias std. error
t1* -0.4815861 0.3190424 0.2309631
t2* 0.9189246 -0.1998455 0.2499412
boot.ci(boot.out=boot.out, …Run Code Online (Sandbox Code Playgroud) 我有一个包含 540 个观测值的时间序列,我使用以下代码对其进行了 999 次重新采样:
boot.mean = function(x,i){boot.mean = mean(x[i])}
z1 = boot(x1, boot.mean, R=999)
z1
ORDINARY NONPARAMETRIC BOOTSTRAP
Call:
boot(data = x1, statistic = boot.mean, R = 999)
Bootstrap Statistics :
original bias std. error
t1* -0.009381397 -5.903801e-05 0.002524366
Run Code Online (Sandbox Code Playgroud)
尝试导出结果给了我以下错误:
write.csv(z1, "z1.csv")
Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) :
cannot coerce class ""boot"" to a data.frame
Run Code Online (Sandbox Code Playgroud)
如何将结果导出到 .csv 文件?
我期望获得一个包含 540 个观察 999 次的文件,目标是应用包中的approx_entropy函数pracma,获得 999 个近似熵值并绘制 Latex 中的分布。
我知道如何引导向量的平均值:
library(boot)
samplemean <- function(x, d) {
return(mean(x[d]))
}
results_qsec <- boot(data=mtcars$qsec, statistic = samplemean, R=1000)
Run Code Online (Sandbox Code Playgroud)
mtcars$qsec但是,考虑到例如值是 in以及这些值的权重是 in ,我如何引导加权平均值mtcars$wt?
我正在寻找一种方法,使用引导结果向量(这是人口增长率的引导估计 - lambda)来计算 R 中的偏差校正加速置信区间。然而,我发现的包要么是使用特定的对象类型(如“boot”包中),要么不计算 BCa 类型置信区间。我使用 for 循环引导结果然后将结果存储在向量中的原因是,对于每个引导重新采样,我首先得到一个 80 x 33 的结果矩阵,它定义了每年采样中每个总体的参数,而这些参数又为每个群体定义 lambda。据我所知,这在引导包中会很麻烦,并且很容易作为 for 循环进行编程。实际的功能集相当复杂,无法包含在这里。
我确实尝试使用这个问题作为伪造“启动”对象的指南,但它不起作用:How can I use pre bootstrapped data to acquire a BCaconfidence Interval? 。
假设我有观察到的 lambda 估计值
lambda = 1.18
Run Code Online (Sandbox Code Playgroud)
我们模拟引导估计的向量
library(fGarch)
lambdaBS = rsnorm(999,mean=lambda-0.04,sd=0.11,xi=2.5)
plot(density(lambdaBS))
Run Code Online (Sandbox Code Playgroud)
这是右偏和有偏见的。
我希望,使用这些信息,当前存在一个函数可以计算 BCa 置信区间,否则很容易编写一个函数来执行此操作。到目前为止,我还没有发现这种情况。
我想知道如何使用复制权重和调查包的限制实现来构建引导置信区间/标准误差。
\n看看survey包的confint 实现,它似乎只是简单地采用了标准错误theta复制后生成的列表的标准误差,并将其乘以与给定 alpha 范围相对应的统计数据。
但这并不真正符合我所知道的任何引导程序实现。通常,您会使用 theta 分布的百分位数来获取样本均值分布的置信区间。T 和 BCa 间隔是另一回事。
\n这是我的 R 代码。我没有使用提供的权重,而是让repweights权重以相同的概率生成为“具有替换的样本”权重。
data(api)\nd <- apiclus1 %>% select(fpc, dnum,api99)\ndclus1<-svydesign(id=~dnum, data=d, fpc=~fpc)\nrclus1<-as.svrepdesign(dclus1,type="bootstrap", replicates=100)\nRun Code Online (Sandbox Code Playgroud)\n为了测试置信区间,我们可以使用:
\ntest_mean <- svymean(~api99, rclus1)\nconfint(test_mean, df=degf(rclus1))\nconfint(test_mean, df=degf(rclus1)) - mean(d$api99)\nRun Code Online (Sandbox Code Playgroud)\n哪些结果:
\n 2.5 % 97.5 %\napi99 554.2971 659.6592\n 2.5 % 97.5 %\napi99 -52.68107 52.68107\nRun Code Online (Sandbox Code Playgroud)\n很明显,该区间是对称的,这违背了使用引导程序的一些目的。
\n那么让我们试试这个:
\ntest_bs <- withReplicates(rclus1, function(w, data) weighted.mean(data$api99, w), return.replicates=T)\nRun Code Online (Sandbox Code Playgroud)\n这将引导重复,其中权重是重复权重(我假设是替换权重)。以下是在复制中使用 BCa 间隔的间隔:
\nbca(test$replicates) …Run Code Online (Sandbox Code Playgroud) 我想在 Matlab 中执行引导程序。我有 100 个原始数据点,我希望引导程序的每次迭代只选择 57 个随机替换点。我该如何实现?
我似乎无法在 Matlab 函数中找到此功能bootstrp。
问候,
因此,我正在抽取N个引导样本,并在这些样本上训练N个逻辑回归分类器。每个分类器都给我一些进入二元类的概率,然后我对这N个概率求平均以得出最终预测。
我的问题是我是否将N组回归系数取平均值并在logistic回归分类器中使用该组平均系数并将输出概率作为最终预测,这与取所得N概率的平均值相同吗?如上一段所述?
regression machine-learning resampling logistic-regression statistics-bootstrap
我开始使用该包,但boot在R理解参数的含义t和t*绘图时遇到了一些麻烦。
一个基本的代码如下:
library(boot)
mydata <- c(0.461, 3.243, 8.822, 3.442)
meanFunc <- function(mydata, i){mean(mydata[i])}
bootMean <- boot(mydata, meanFunc, 250)
plot(bootMean)
Run Code Online (Sandbox Code Playgroud)
使用命令时,plot.boot我获得了这个图形:
它代表什么t*。为什么标题说 t 的直方图但在 x 轴上我们有t*?
作为附加问题:如何修改此图形的属性,例如颜色、平铺或轴?
谢谢
我正在尝试在 R 中进行引导相关性。我有两个变量 Var1 和 Var2,我想获得 Pearson 相关性的引导 p.value。
my variables look like this:
x y
1 .6080522 1.707642
2 1.4307273 1.772616
3 0.8226198 1.768537
4 1.7714221 1.265276
5 1.5986213 1.855719
6 1.0000000 1.606106
7 1.1678940 1.671457
8 0.6630012 1.608428
9 1.0842423 1.670619
10 0.5592512 1.107783
11 1.6442616 1.492832
12 0.8326965 1.643923
13 1.1696954 1.763181
14 0.7484543 1.762921
15 1.0842423 1.591566
16 0.9014748 1.718669
17 0.7604917 1.782863
18 0.8566499 1.796216
19 1.4307273 1.913675
20 1.7579695 1.903155
Run Code Online (Sandbox Code Playgroud)
到目前为止我有这个:
data = as.data.frame(data) …Run Code Online (Sandbox Code Playgroud) r ×8
correlation ×1
graphics ×1
matlab ×1
plot ×1
regression ×1
resampling ×1
sampling ×1
statistics ×1
survey ×1
time-series ×1