簡體   English   中英

logit的R代碼生成大於1的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM