了解有关逆变换采样 R 的代码
Understanding code about inverse transform sampling R
我试图理解以下有关逆变换采样的代码(离散示例)
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')
我的第一个问题是第一部分return(1)
中的函数discrete.inv.transform.sample(p.vec)
,返回时这个1
值在哪里?
在第二部分,return(state)
这个state
分配在哪里?
为什么这一行 names(p.vec)<-1:4
是?
seq_len
是什么意思?
为什么代码中不再使用samples[i]
?
我认为应该有一个独立的行sample
有人可以解释一下吗?
提前致谢
看来您需要对 R 和一般编程进行一些基础研究。以下是对您的简单问题的简短回答,但请继续阅读以获取更广泛的建议。
- 返回时
1
值在哪里?无论分配到哪里。在这里,即在 samples[i]
中到达 i
那个分支。
- 这个
state
分配在哪里?在行 for(state in 2:length(p.vec))
- 这一行为什么是
names(p.vec)<-1:4
?好问题。 names()<-
只是为对象分配名称,我不确定为什么在您的上下文中使用与向量索引相等的名称很有用,尽管我可以想象在某些情况下会如此。
seq_len
是什么意思? seq_len(x)
创建一个整数向量,其中包含从 1
到 x
的所有数字。参见 help("seq_len")
- 为什么代码中不再使用
samples[i]
?因为它只在for循环中有用。
尽管所有这些都指向一个更大的问题:您不了解 R 的基础知识。我们都是从那里开始的,但这意味着您需要阅读一些基本信息并完成一些基本教程。 RStudio 提供了一些学习资源 here.
我试图理解以下有关逆变换采样的代码(离散示例)
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')
我的第一个问题是第一部分return(1)
中的函数discrete.inv.transform.sample(p.vec)
,返回时这个1
值在哪里?
在第二部分,return(state)
这个state
分配在哪里?
为什么这一行
names(p.vec)<-1:4
是?seq_len
是什么意思?为什么代码中不再使用
samples[i]
?
我认为应该有一个独立的行sample
有人可以解释一下吗?
提前致谢
看来您需要对 R 和一般编程进行一些基础研究。以下是对您的简单问题的简短回答,但请继续阅读以获取更广泛的建议。
- 返回时
1
值在哪里?无论分配到哪里。在这里,即在samples[i]
中到达i
那个分支。 - 这个
state
分配在哪里?在行for(state in 2:length(p.vec))
- 这一行为什么是
names(p.vec)<-1:4
?好问题。names()<-
只是为对象分配名称,我不确定为什么在您的上下文中使用与向量索引相等的名称很有用,尽管我可以想象在某些情况下会如此。 seq_len
是什么意思?seq_len(x)
创建一个整数向量,其中包含从1
到x
的所有数字。参见help("seq_len")
- 为什么代码中不再使用
samples[i]
?因为它只在for循环中有用。
尽管所有这些都指向一个更大的问题:您不了解 R 的基础知识。我们都是从那里开始的,但这意味着您需要阅读一些基本信息并完成一些基本教程。 RStudio 提供了一些学习资源 here.