8 R中的随机数函数(*) 您所在的位置:网站首页 r语言随机数取整 8 R中的随机数函数(*)

8 R中的随机数函数(*)

2023-05-13 21:36| 来源: 网络整理| 查看: 265

8 R中的随机数函数(*) 8.1 R语言中与分布有关的函数

R语言作为一个面向统计计算、数据分析、作图的语言, 提供了丰富的与概率分布有关的函数。 对一个概率分布xxx, 函数dxxx()计算分布密度函数或者概率质量函数, 函数pxxx()计算分布函数, 函数qxxx()计算分位数函数, 函数rxxx()生成该分布的若干个随机数。

在R命令行用

?Distributions

查看stats包给出的各种与分布有关的函数。

下面以正态分布为例介绍这些函数的用法。 设正态分布密度为\(f(x)\), 分布函数为\(F(x)\), 分位数函数为\(F^{-1}(x)\)。 密度函数\(f(x)\)用法为:

dnorm(x, mean=0, sd=1, log=FALSE)

计算标量或者向量x处的正态分布密度函数值, 可以用参数mean指定分布均值参数, 用参数sd指定分布的标准差参数, 如果加选项log=FALSE可以返回函数值的自然对数值, 这在计算对数似然函数时有用。 参数缺省为mu=0, sd=1。 调用时自变量x经常是向量, 结果返回各个元素处的密度函数值; 参数通常是标量,但是也允许取为向量, 这时一般与自变量x的向量一一对应, 但是也可以长度不相同, 短的循环使用。

例如,计算三个不同的正态密度,并作图:

muv > 11) #define TEMPERING_SHIFT_S(y) (y = N) { /* generate N words at one time */ int kk; if (mti == N+1) /* if sgenrand() has not been called, */ MT_sgenrand(4357); /* a default initial seed is used */ for (kk = 0; kk > 1) ^ mag01[y & 0x1]; } for (; kk > 1) ^ mag01[y & 0x1]; } y = (mt[N-1] & UPPER_MASK) | (mt[0] & LOWER_MASK); mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1]; mti = 0; } y = mt[mti++]; y ^= TEMPERING_SHIFT_U(y); y ^= TEMPERING_SHIFT_S(y) & TEMPERING_MASK_B; y ^= TEMPERING_SHIFT_T(y) & TEMPERING_MASK_C; y ^= TEMPERING_SHIFT_L(y); dummy[0] = mti; return ( (double)y * 2.3283064365386963e-10 ); /* reals: [0,1)-interval */ } 8.4.5 L’Ecuyer-CMRG与并行计算

是L’Ecuyer et al.在2002提出的,参见 L’Ecuyer (1999) 。 是两个发生器的混合: \[ \begin{aligned} x_n =& 1403580 x_{n-2} - 810728 x_{n-3} \pmod{2^{32} - 209} \\ y_n =& 527612 y_{n-1} - 1370589 y_{n-3} \pmod{2^{32} - 22853} \\ z_n =& (x_n - y_n) \pmod{4294967087} \\ u_n =& z_n / 4294967088 \end{aligned} \] 并检查\(u_n=0\)时以接近0的正值代替。

这个随机数发生器的优点是算法相对简单, 周期长达\(2^{191}\), 并可以很容易地切分成长度为\(2^{127}\)的不同段, 每一段的种子容易确定, 这样, 在并行计算时, 每个工人节点可以从不同段的种子出发进行模拟。 程序如:

RNGkind("L'Ecuyer-CMRG") set.seed(1) ## start M workers s


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有