(多元)偏正态分布正态分布对数正态分布的随机数的产生(R语言)

Posted 统计学小王子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(多元)偏正态分布正态分布对数正态分布的随机数的产生(R语言)相关的知识,希望对你有一定的参考价值。

0引言

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

1、函数名

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

维度分布函数
一维度正态分布rnormstats
一维度偏正态分布rsnsn
一维度对数正态rlnormstats
多维度正态分布mvrnormMASS
多维度偏正态分布rmsnsn
多维度对数正态mvlognormalMethylCapSig

但是对于很多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语言。水平有限发现错误还望及时评论区指正,您的意见和批评是我不断前进的动力。

以上是关于(多元)偏正态分布正态分布对数正态分布的随机数的产生(R语言)的主要内容,如果未能解决你的问题,请参考以下文章

偏正态分布中的随机数(相当于 NORMINV())

MATLAB生成多元正态分布随机数(指定均值及协方差)——mvnrnd函数详解

[定理证明]正态随机过程又是马尔科夫过程的充要条件

多元线性回归中自变量减少预测误差变大回归平方怎么变化

随机过程8 - 多元高斯分布及其线性性质

随机过程8 - 多元高斯分布及其线性性质