首页 > 编程知识 正文

多元正态分布的分布函数,生成正态分布的随机数R

时间:2023-05-03 05:26:07 阅读:205063 作者:2730

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

0引言

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

1、函数名

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

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

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

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.470482attr(,"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.3663496attr(,"family")[1] "SN"attr(,"parameters")attr(,"parameters")$xi[1] 0 0attr(,"parameters")$Omega [,1] [,2][1,] 5 1[2,] 1 2attr(,"parameters")$alpha[1] 2 -2attr(,"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语言。水平有限发现错误还望及时评论区指正,您的意见和批评是我不断前进的动力。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。