逻辑变换应该生成(0,1)中的值。但是,如果您看下面的逻辑转换,您会发现它创建的值大于1。我要去哪里错了?

lambda1=0
out=matrix(NA,400,1)
for (i in 1:400){
  lambda1[i+1]=((exp(0.8*lambda1[i]+rnorm(1)))/(1+exp(0.8*lambda1[i]+rnorm(1))))
  out[i]=lambda1[i]
}

最佳答案

每次调用rnorm(1)都会得到不同的随机抽取,因此分子和分母中的随机值可能会有所不同。

请注意,exp(x) / (1+exp(x))等效于1 / (1 + exp(-x)),因此您可以执行以下操作:

lambda1=0
out=matrix(NA,400,1)
for (i in 1:400){
  lambda1[i+1]=(1/(1+exp(-(0.8*lambda1[i]+rnorm(1)))))
  out[i]=lambda1[i]
}
summary(lambda1)
#    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
#  0.0000  0.4523  0.6352  0.6119  0.7719  0.9682


注意:对于非常大的向量,您可能会发现预分配lambda1并在最后一次计算out时效率更高(我假设您实际上是希望out中的元素2到401代替元素1至400):

lambda1 <- rep(0, 401)
for (i in 1:400) lambda1[i+1]=(1/(1+exp(-(0.8*lambda1[i]+rnorm(1)))))
out <- matrix(tail(lambda1, -1))

08-25 05:35