[英]Bootstrapping/Monte Carlo Simulation in R
我正在尝试遵循此测试:
假设我有以下数据:
set.seed(123)
active_MJO <-c(6L, 2L, 11L, 20L, 62L, 15L, 2L, 51L, 58L, 100L, 45L, 44L, 49L,
86L, 28L, 1L, 1L, 40L, 79L, 99L, 86L, 50L, 9L, 78L, 45L, 100L,
77L, 44L, 45L, 93L)
inactive_MJO <-c(83L, 170L, 26L, 66L, 156L, 40L, 29L, 72L, 109L, 169L, 153L,
136L, 169L, 133L, 153L, 13L, 24L, 148L, 121L, 80L, 125L, 21L,
135L, 155L, 161L, 171L, 124L, 177L, 167L, 162L)
我不知道如何在 R 中实现上述测试。
我尝试了以下方法,但我不确定这是否正确。
sig.test <- function (x){
a <- sample(active_MJO)
b <- sample(inactive_MJO)
sum(a > b)
}
runs <- 1000
sim <- sum(replicate(runs,sig.test(dat))+1)/(runs+1)
我认为上面的说法是不正确的。 我在哪里可以放置 950/1000 条件?
抱歉,我是引导/蒙特卡洛测试的新手。
我会很感激这方面的任何帮助。
真诚的,林兹
首先,重要的是要注意他们正在采样 30 个频率对。 由于它是自举的,因此这些样本将被替换。
然后他们比较平均活跃和平均不活跃。 这相当于:
他们重复该过程 1000 次,然后将 1000 次比较的结果与 950 次进行比较。
以下代码执行#2:
set.seed(123)
active_MJO <-c(6L, 2L, 11L, 20L, 62L, 15L, 2L, 51L, 58L, 100L, 45L, 44L, 49L,
86L, 28L, 1L, 1L, 40L, 79L, 99L, 86L, 50L, 9L, 78L, 45L, 100L,
77L, 44L, 45L, 93L)
inactive_MJO <-c(83L, 170L, 26L, 66L, 156L, 40L, 29L, 72L, 109L, 169L, 153L,
136L, 169L, 133L, 153L, 13L, 24L, 148L, 121L, 80L, 125L, 21L,
135L, 155L, 161L, 171L, 124L, 177L, 167L, 162L)
diff_MJO <- active_MJO - inactive_MJO
sim <- sum(replicate(1e3, sum(sample(diff_MJO, 30, replace = TRUE)) > 0))
> sim
[1] 0
在这种情况下,1000 次复制中没有一个导致平均active_MJO
大于平均inactive_MJO
。 在绘制自举差异之和的直方图后,这并不奇怪:
diff_MJO <- replicate(1e5, sum(sample(diff_MJO, 30, replace = TRUE)))
hist(diff_MJO)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.