我想从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是我的相关矩阵)。当我运行两行代码时,我得到了不同的结果,这是我的困惑源于此的部分原因。
答案 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