在R中创建具有求和和常数的等式

时间:2017-11-23 01:23:16

标签: r

我希望有人可以评估这段代码,我正在寻求使用统一变量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 = ZOne,当U = <0.5时。 当U> = 0.5时,ZTwo是(1-ZOne)。

如果您需要任何澄清,请告诉我。谢谢!

* PS,我不知何故需要创建1000个这些变量(Z),并认为我只会使用replicate

1 个答案:

答案 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)
}