R:runif产生NAN

时间:2017-07-05 11:32:31

标签: r

我想生成一些与分位数函数相对应的数据。但数据需要minmax值。

set.seed(30)
a1<-950 ; a2<-0; a3<-2.48; a4<-1.92
invcdf<-function (x)(a1+a2*a3*((-log(x))^(1/a4)))/(a3*((-log(x))^(1/a4))+1)
t<-invcdf(runif(2000,min=80,max=800))

当我在runif函数NaN中使用min和max时,会生成{}。 如何改进此代码以避免NaN?我无法更改参数。

1 个答案:

答案 0 :(得分:2)

既然你没有解释你到底想要做什么(你试图采样哪种分布?),我所能做的就是将其解释为尝试根据某些分布生成随机变量CDF功能。因为我不知道它是什么,所以我不能评论你的实施是否正确。

但是,当您使用此方法时,您应该知道CDF函数的值介于0和1之间,因为它是累积密度,从0开始,在某个限制内变为1。

只有在0到1之间输入值时,该函数的反函数才有意义,这就是可能的错误所在。 runif(2000,min=80,max=800)生成80到800之间的随机值,超出(0,1)间隔。

如果您改为这样做:

t <- invcdf(runif(2000))

我们确实得到了结果(主要发生在80到800之间):

enter image description here