使用R生成具有独立同分布正态随机变量的矩阵

22

有没有一种不使用循环的方法在R中生成具有正态分布随机值的数据集?每个条目都将表示一个独立的正态分布随机变量。


6
使用独立同分布的标准正态分布随机变量填充 $n \times p$ 矩阵,可以使用 matrix(rnorm(n*p),n) 实现。 - cardinal
4个回答

35

要创建一个NM列的独立同分布正态分布随机变量矩阵,请键入以下代码:

matrix( rnorm(N*M,mean=0,sd=1), N, M) 

根据需要微调均值和标准差。


1
只要提问者明白N是行数,M是列数,那么他就能从这个答案中受益匪浅。 - IRTFM
@DWin,同意。不过在任何情况下,这都是引用矩阵的传统符号表示法,对吧? - Macro
我不太确定。但我知道有些人对R中在调用matrix函数时,矩阵是按列主序填充的事实感到惊讶,除非设置byrow=TRUE。这让我想到不同语言之间可能存在矩阵规范的差异。 - IRTFM
对于 matrix,您可以指定其中一个参数 nrowncol - qwr

2

mu成为均值向量,sigma成为标准差向量。

mu<-1:10
sigma<-10:1
sample.size<-100
norm.mat<-mapply(function(x,y){rnorm(x,y,n=sample.size)},x=mu,y=sigma)

这将产生一个矩阵,其中列保留相关样本。


1

您可以使用:

replicate(NumbOfColumns,rnorm(NumbOfLines))

你可以将rnorm替换为其他分布函数,例如runif,以生成其他分布的矩阵。

-3

注意:每个条目都是独立的。因此,您不能避免使用for循环,因为您必须为每个独立变量调用rnorm一次。如果您只调用rnorm(n*m),那么这是从同一随机变量中抽取的n*m个样本!


这是错误的,也很令人困惑... rnorm(n*m)确实生成了n*m独立的随机样本,正如OP所请求的那样。 - Ben Bolker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接