R语言生成随机数问题

Python021

R语言生成随机数问题,第1张

一般地,如果你已知一个连续随机变量X的cdf F_X(x)(=P(X<=x))的话,那么F^(-1)(U)(F^(-1)为F的反函数)就符合这个分布(U为(0,1)上的均匀分布),反之亦然。证明很简单,就是直接套定义。

所以你可以写出来F^(-1)这个函数(比如说自定义函数名为FInverse),然后生成随机数组:

randomSequence<-FInverse(runif(n))

对于指数分布来说,

FInverse<-function(p,lambda=1){

-log(1-p)/lambda

}

离散随机变量类似吧。。。

当然,前提是你能写出来F^(-1)。。。(所以我老师说这个方法没啥用。。。)有的分布不好写F^(-1),但是有一些比较巧妙的办法(比如正态分布),这种应该就只能具体问题具体分析了。

x<-runif(10,min=0,max=1)#生成10个0到1的均匀分布

x<-x/sum(x)#每个随机数除以这十个数的总和

这样得到的10个随机数的和就是1了。

这里为了方便最初采用了0到1的均匀分布,实际上你可以采用任意的分布,只要将得到的十个数先平移至均为正数,再除以总和,就得到10个和为1的随机数。

当然,这10个数具体是什么分布就不讨论了。