R 重复取样,直至达到要求
我希望从一个具有特定条件的分布中重复采样。 我对四次迭代的50个值进行采样并保存结果。但是,我需要迭代的每个单独结果都小于相同位置的最后一个结果R 重复取样,直至达到要求,r,conditional-statements,sampling,R,Conditional Statements,Sampling,我希望从一个具有特定条件的分布中重复采样。 我对四次迭代的50个值进行采样并保存结果。但是,我需要迭代的每个单独结果都小于相同位置的最后一个结果 mu.c <- c(7,6,5,3) # Means of control chains chains.sim <- function(vector, N) { all.list <- list() for (i in 1:length(vector)) { Y <- MASS::rnegbin(n =
mu.c <- c(7,6,5,3) # Means of control chains
chains.sim <- function(vector, N) {
all.list <- list()
for (i in 1:length(vector)) {
Y <- MASS::rnegbin(n = N, mu = vector[i], theta = 4)
name <- paste('position:',i, sep = '')
all.list[[name]] <- Y
}
all.list
}
chains.sim(mu.c, 50)
mu.c我会在for循环中添加一个while循环,用于对数据集进行采样,直到满足条件为止
mu.c <- c(7,6,5,3) # Means of control chains
chain.sim <- function(vector, N) {
all.list <- list()
all.list[[1]] <- MASS::rnegbin(n = N, mu = vector[1], theta = 4)
for (i in 2:length(vector)) {
is_smaller <- FALSE
while(!is_smaller){
Y <- MASS::rnegbin(n = N, mu = vector[i], theta = 4)
if (all(all.list[[i-1]] >= Y)) is_smaller <- TRUE
}
all.list[[i]] <- Y
}
all.list
}
chain.sim(mu.c, 3)
如果在任何地方遇到0,则无需再进行模拟,因为我们知道下一个值只能是0。这使模拟速度大大加快感谢您的快速回答!我认为你的解决方案在某种意义上很有效。我只需要每个列表中的各个位置是不同的。基本上,在N=1的情况下运行函数400次就可以了。你也可以对每个位置进行采样,直到它比前一个位置小。是的,这正是我想做的:)不幸的是,我认为你的第二个版本不能正常工作,但我可以复制你的第一个函数!嗯,它确实给了我可靠的数字,哪一部分对你不起作用?
chain.sim <- function(vector, N) {
all.list <- list()
all.list[[1]] <- MASS::rnegbin(n = N, mu = vector[1], theta = 4)
for (i in 2:length(vector)) {
Y <- numeric(N)
for (j in 1:N){
previous_value <- all.list[[i-1]][j]
if (previous_value == 0){
Y[j] = 0
next
}
is_smaller <- FALSE
while(!is_smaller){
val <- MASS::rnegbin(1, mu = vector[i], theta = 4)
if (val <= previous_value) is_smaller <- TRUE
Y[j] <- val
}
}
all.list[[i]] <- Y
}
all.list
}
chain.sim(mu.c, 50)