Bootstrapping/Monte R 中的 Carlo 模拟
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条件?
抱歉,我是 bootstrapping/Monte Carlo 测试的新手。
我将不胜感激。
真诚的,
林兹
首先,重要的是要注意它们正在对 30 个频率 对 进行采样。由于它是引导程序,因此这些样本将被替换。
然后他们将平均活跃度与平均不活跃度进行比较。这相当于:
- 将 30 对中的活性总和与非活性总和进行比较,或
- 将 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 次重复中的 none 导致平均值 active_MJO
大于平均值 inactive_MJO
。在绘制自举差异总和的直方图后,这并不奇怪:
diff_MJO <- replicate(1e5, sum(sample(diff_MJO, 30, replace = TRUE)))
hist(diff_MJO)
我正在努力完成这个测试:
假设我有以下数据:
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条件?
抱歉,我是 bootstrapping/Monte Carlo 测试的新手。
我将不胜感激。
真诚的, 林兹
首先,重要的是要注意它们正在对 30 个频率 对 进行采样。由于它是引导程序,因此这些样本将被替换。
然后他们将平均活跃度与平均不活跃度进行比较。这相当于:
- 将 30 对中的活性总和与非活性总和进行比较,或
- 将 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 次重复中的 none 导致平均值 active_MJO
大于平均值 inactive_MJO
。在绘制自举差异总和的直方图后,这并不奇怪:
diff_MJO <- replicate(1e5, sum(sample(diff_MJO, 30, replace = TRUE)))
hist(diff_MJO)