[英]R code for logit generates values greater than 1?
逻辑变换应该在(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
在一个镜头结束时(我假设你真正想要的元件2至401 out
,而不是元素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))
我不完全清楚你想要在这里完成什么。 但是你得到超出区间[0,1]的值的原因是你有两次调用rnorm()
,它给你两个不同的值。
你可以通过替换来解决这个问题(我认为得到(接近)你想要的)
lambda1[i+1]=((exp(0.8*lambda1[i]+rnorm(1)))/(1+exp(0.8*lambda1[i]+rnorm(1))))
同
r = exp(0.8*lambda1[i] + rnorm(1))
lambda1[i+1] = r/(1+r)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.