【发布时间】:2015-04-02 04:10:17
【问题描述】:
假设我想生成 X 和概率 (F) 的前一个对象的 X 和 Y 条件。我的算法:在特定的一天,一个人的状态为 1/0。如果状态为 0,则第二天的状态为rbinom(1,1,0.5);如果状态为 1,那么第二天的状态将是 rbinom(1,1,F[this day])。在这里,我想为 N 个人和 d 天生成此数据。
我的代码:
N <- 10 # number of individual
d <- 10 # days
F <- c(0.9,0.8, 0.7, 0.6, 0.5, 0.4) # Probabilities
for(j in 1:N){
x <- NULL
x[1] <- rbinom(1,1,0.5)
y <- NULL
y[1] <- ifelse(x[1]==1, 1, 0)
for(i in 2:d){
if(x[i-1]==0)
{
y[i] <- x[i-1]
x[i] <- rbinom(1,1,0.05)
}
if(x[i-1]==1)
{
y[i] <- y[i-1]+x[i-1]
x[i] <- rbinom(1,1,F[y[i]])
}
}
}
这段代码产生类似的数据,
> x
[1] 1 1 0 0 0 0 0 0 0 1
> y
[1] 1 2 3 0 0 0 0 0 0 0
但我想像这样生成 X 和 Y:
> x
[1] 1 1 0 0 0 0 0 0 0 1
> y
[1] 1 2 0 0 0 0 0 0 0 1
我不知道代码的哪一部分是错误的。有人可以帮忙吗?
【问题讨论】:
-
如果您使用的是
rbinom,那么输出在某种程度上将是....“随机”。所以问题变成了:在什么意义上,你得到的输出不像你期望的输出?您尚未(尚未)解释此过程应该做什么,并且只生成了您认为错误的代码,因此尝试与“Fortran-mind”融合以生成高效的 R 代码似乎没有什么意义。跨度> -
谢谢。我在上面修改了我的问题。
-
首先要意识到的是,外部循环正在执行此过程 10 次,但只留下最后一个待检查。您可以删除外部循环,并且似乎没有任何变化。我将对代码进行一些更改,你可以看看你是否真的已经在做你想做的事情了。
-
能否请您发布您尝试过的代码?