目录

  • 0引言
  • 1、函数名
  • 2、示例
  • 2.1正态分布随机数
  • 2.2偏正态分布
  • 2.3对数正态分布
  • 写在最后的话


0引言

最近在看偏正态分布相关的东西,偏正态分布的定义形式还是挺多样的,在偏态分布及其数字特征(R语言可视化)中我介绍的最初的一种定义。在平时做模型做随机模拟的时候的需要产生随机数来检验自己模型估计的有效性,我们可以通过各种分层表示用已知的分布去近似,也可以通过筛法使用均匀分布去生成、也可以用MCMC去采样。但是最为一个专业的统计软件——R语言肯定是有内置函数或者内置包去做的。大家感兴趣原理的也可以自行打开R函数查看。
本文的主要目的是介绍R语言内部的产生下面分布的随机数的函数。
– 一元正态分布随机数
– 一元偏正态分布随机数
– 一元对数正态随机数
– 多元正态分布随机数
– 多元偏正态分布随机数
– 多元对数正态随机数

1、函数名

对于熟悉R语言的人只有函数名字和包名即可,下面列出具体名字。

维度

分布

函数


一维度

正态分布

rnorm

stats

一维度

偏正态分布

rsn

sn

一维度

对数正态

rlnorm

stats

多维度

正态分布

mvrnorm

MASS

多维度

偏正态分布

rmsn

sn

多维度

对数正态

mvlognormal

MethylCapSig

但是对于很多R小白的科研大佬来说只有一个名字是比较浪费时间的,下面给出具体案例。

2、示例

先把该安装的包岸上并且载入,后面有备注大家按需安装载入。

install.packages("MethylCapSig")  # 多元对数正态包
install.packages("MASS")  # 多元正态分布包
install.packages("sn")  # 偏态数据包
library(MASS)
library(sn)
library(MethylCapSig)

2.1正态分布随机数

这块介绍如何生成一元和多元的正态分布随机数。生成正态分布的随机数的函数是rnorm,多元正态随机数用mvrnorm

#生成n个均值0标准差1的正态随机数
> n = 10
> rnorm(n, mean = 0, sd = 1)
 [1]  0.6035027 -0.9081701  1.5303255  0.3761588 -1.6406858 -1.5728766
 [7] -1.6586157  0.8287051  1.7688131  1.1472097
mvrnorm(n = 1, mu, Sigma, tol = 1e-6, empirical = FALSE, EISPACK = FALSE)
# 生成均值为mu,协方差矩阵为Sigma的10次观测的多元正态随机数
> mu <- rep(0, 2)
> mu
[1] 0 0
> Sigma <- matrix(c(5,1,1,2),2,2)
> Sigma
     [,1] [,2]
[1,]    5    1
[2,]    1    2
> mvrnorm(n, mu, Sigma)
            [,1]       [,2]
 [1,]  0.3458454  0.3552218
 [2,] -4.9145503 -2.2932391
 [3,]  2.3285543  1.7957570
 [4,]  2.6422543  1.4493042
 [5,] -2.0447422 -0.5195390
 [6,] -0.5682730 -0.1557601
 [7,] -0.0560933  0.6941458
 [8,]  3.5873361  2.1324344
 [9,] -0.3522617 -1.0535145
[10,]  1.9490186 -1.7155158

2.2偏正态分布

这块介绍如何生成一元和多元的偏正态分布随机数。生成偏正态分布的随机数的函数是rsn,多元正态用rmsn

rsn(n=1, xi=0, omega=1, alpha=0, tau=0,  dp=NULL)
# 生成10个位置参数为5,标准差为2,偏度为5的一元偏正态分布
> n = 10
> rsn(n, 5, 2, 5)
 [1] 6.366628 4.622272 4.973537 5.716082 6.438601 7.489781 5.034990 5.762948
 [9] 9.547775 8.470482
attr(,"family")
[1] "SN"
attr(,"parameters")
[1] 5 2 5 0
rmsn(n=1, xi=rep(0,length(alpha)), Omega, alpha,  tau=0, dp=NULL)
# 生成多元偏态分布,均值向量xi,协方差矩阵,偏度向量 alpha
> xi <- c(0, 0)
> xi
[1] 0 0
> Omega <- matrix(c(5,1,1,2),2,2)
> Omega
     [,1] [,2]
[1,]    5    1
[2,]    1    2
> alpha <- c(2,-2)
> alpha
[1]  2 -2
> rmsn(10, xi, Omega, alpha)
             [,1]       [,2]
 [1,] -0.65320266  0.6861521
 [2,]  1.37481687 -0.1659318
 [3,]  3.14522100  0.4529551
 [4,] -0.07057607 -0.6608571
 [5,] -2.68493331 -2.9035422
 [6,]  2.19216656  0.7597699
 [7,]  1.50244323  0.7730602
 [8,] -1.81347772 -1.4717120
 [9,] -0.56875748 -0.8176260
[10,]  0.88476306 -0.3663496
attr(,"family")
[1] "SN"
attr(,"parameters")
attr(,"parameters")$xi
[1] 0 0

attr(,"parameters")$Omega
     [,1] [,2]
[1,]    5    1
[2,]    1    2

attr(,"parameters")$alpha
[1]  2 -2

attr(,"parameters")$tau
[1] 0

2.3对数正态分布

这块介绍如何生成一元和多元的对数正态分布随机数。生成对数正态分布的随机数的函数是rlnorm,多元对数正态用mvlognormal

生成10个对数均值为0,对数标准差为1的对数随机数。
> n = 10
> rlnorm(n, meanlog = 0, sdlog = 1)
 [1] 1.5638173 0.7085567 0.9552697 0.7990129 0.3913724 2.3829746 2.7009141
 [8] 2.3251721 4.7090633 0.5284348
mvlognormal(n, Mu, Sigma, R)
# 生成10个 5维度的多元对数正态分布
> n = 10
> p = 5
> Mu = runif(p, 0, 1)
> mvlognormal(n, Mu, Sigma = rep(2, p), R = toeplitz(0.5^(0:(p-1))))
            [,1]       [,2]       [,3]       [,4]       [,5]
 [1,] 0.19001058 1.03046394 0.96453695 0.82259809 0.15816013
 [2,] 0.17443047 0.06155735 0.37621382 0.33498919 0.27119953
 [3,] 0.34553546 0.28509934 0.29120016 0.04141813 0.22553617
 [4,] 0.11498941 0.35994614 0.23380755 0.15672124 0.04621199
 [5,] 0.32452033 0.11553876 0.55283657 0.26637357 0.11062302
 [6,] 0.04953786 0.16264098 1.75032911 6.34862167 1.38340544
 [7,] 0.32886451 0.30378793 0.02375825 0.02375620 0.89213319
 [8,] 0.16846539 0.03653899 0.11298382 0.22751003 0.09530435
 [9,] 0.07762988 0.31748557 0.05862739 0.03529833 0.12301490
[10,] 0.18367711 2.58261427 0.03078996 0.01153906 0.07951331
>

写在最后的话

希望可以帮助大家学习R语言。水平有限发现错误还望及时评论区指正,您的意见和批评是我不断前进的动力。