从多变量t分布生成随机变量

时间:2013-08-09 17:29:13

标签: r

我想从R中的多变量t分布生成随机变量。我正在使用mvtnorm包,其具有命令rmvt,用于从多变量t分布生成随机变量。现在我的问题是关于函数的语法,并能够操纵它来做我想要的。该功能需要以下

rmvt(n, sigma = diag(2), df = 1, delta = rep(0, nrow(sigma)),
     type = c("shifted", "Kshirsagar"), ...)

其中sigma是相关矩阵。现在我遇到的问题是如何从具有均值m和协方差矩阵S的多元t分布中进行采样。以下是适当的语法吗?

rmvt(1,S,df=n) + m

rmvt(1,R,df=n)*sigma + m

其中我的协方差矩阵可以被分解为S = sigma * R(即,R是我的相关矩阵)。当我运行两行代码时,我得到了不同的结果,这是我的困惑源于此的部分原因。

1 个答案:

答案 0 :(得分:4)

查看help file for rmvt。有人说sigma是比例(非相关)矩阵,而且仅为df>2定义的相关矩阵由sigma * df/(df-2)给出。因此,您有一个预先指定的协方差矩阵S,那么您应该设置

sigma=S*(D-2)/D

其中D是自由度。要使用均值n和协方差矩阵m从多变量t分布生成S个样本,您可以在调用之外添加rmvt的均值,如您所示:< / p>

rmvt(n, sigma=S*(D-2)/D, df=D) + m 

或使用mu参数:

rmvt(n, mu=m, sigma=S*(D-2)/D, df=D)

编辑:无论出于何种原因,rmvt无法在我的机器上正确加载,因此我必须首先输入以正确加载该功能:

rmvt <- bfp:::rmvt