我希望有人可以评估这段代码,我正在寻求使用统一变量U和求和中的众多常量变量来创建随机变量Z.
我有U(0,1)和常数a 0 = 2.51 ..., 2 = 0.01,b 0 = 1 ... b'的子> 3 子> = 0.0013。
并且基于如果U是>或者<如果超过0.5,我们得到Z 1 或Z 2 。我的代码在下面!
w <- (sqrt((-2)*(log(U))))
a[1] <- 2.515517
a[2] <- 0.802853
a[3] <- 0.010328
b[1] <- 1
b[2] <- 1.432788
b[3] <- 0.189269
b[4] <- 0.001308
U <- runif(1)
if(U<=0.5) {
print(ZOne <- ((-w)+((sum(((a[i])*(w^[i])), i=1, 3))/(sum(((b[j])*(w^[j])), j=1, 4)))))
} else {
print(ZTwo <- ((1)-(((-w)+((sum(((a[i])*(w^[i])), i=1, 3))/(sum(((b[j])*(w^[j])), j=1, 4)))))))
}
希望这是有道理的,仅供参考ZOne = ,当U = <0.5时。 当U> = 0.5时,ZTwo是(1-ZOne)。
如果您需要任何澄清,请告诉我。谢谢!
* PS,我不知何故需要创建1000个这些变量(Z),并认为我只会使用replicate
。
答案 0 :(得分:0)
a <- numeric(3)
b <- numeric(4)
a[1] <- 2.515517
a[2] <- 0.802853
a[3] <- 0.010328
b[1] <- 1
b[2] <- 1.432788
b[3] <- 0.189269
b[4] <- 0.001308
U <- runif(1)
# You can't use U before it exists!
w <- (sqrt((-2)*(log(U))))
# Here assuming w^2 in your equation is w * w etc.
# if not, remove ^(1 : length(a)) and ^(1 : length(b))
ZOne <- (-w) + sum(a * w^(1 : length(a)))/sum(b * w^(1 : length(b)))
if (U<=0.5) {
print(ZOne)
} else {
print(ZTwo <- 1 - ZOne)
}