我试图理解以下关于逆变换采样的代码(离散示例)
discrete.inv.transform.sample <- function( p.vec ) {
U <- runif(1)
if(U <= p.vec[1]){
return(1)
}
for(state in 2:length(p.vec)) {
if(sum(p.vec[1:(state-1)]) < U && U <= sum(p.vec[1:state]) ) {
return(state)
}
}
}
num.samples <- 1000
p.vec <- c(0.1, 0.4, 0.2, 0.3)
names(p.vec) <- 1:4
samples <- numeric(num.samples)
for(i in seq_len(num.samples) ) {
samples[i] <- discrete.inv.transform.sample(p.vec)
}
barplot(p.vec, main='True Probability Mass Function')
我的第一个问题是在discrete.inv.transform.sample(p.vec)
第一部分的函数中return(1)
,返回时这个1
值在哪里?
在第二部分,return(state)
这个state
分配在哪里?
为什么这条线是
names(p.vec)<-1:4
为了?什么
seq_len
意思?为什么
samples[i]
不再在代码中使用?
我认为应该有一个独立的线路sample
有人可以解释一下吗?
先感谢您