R中p-1 <df <p的Wishart分布抽样

时间:2019-04-14 15:03:10

标签: r matrix distribution sampling

我需要从Wishart分布中采样一个矩阵,其自由度小于比例矩阵的维数。我正在努力寻找允许它的R函数。

对于Wishart分布,自由度(称为df或v)必须大于比例矩阵的维数(例如p)减去1(即 df> p -1 )(请参阅https://en.wikipedia.org/wiki/Wishart_distribution或有关Wishart发行版的任何手册)。但是,当我尝试使用 p-1 从wishart分布中采样时,说W(df = 1.1,I_p),其中I_p是pxp单位矩阵,我得到错误,指出<自由度的strong>不一致

假设p = 2,我想从df在1和2之间的Wishart分布(不包括在内)进行采样,但

stats::rWishart(n = 1, df = 1.1, Sigma = diag(2)) # does not work
MCMCpack::rwish(v = 1.1, S = diag(2)) # does not work

不起作用。

我认为问题可能出在非整数自由度上,但是

stats::rWishart(n = 1, df = 2.1, Sigma = diag(2))
MCMCpack::rwish(v = 2.1, S = diag(2))

工作没问题。

我确实找到了

  rWishart::rWishart(1, df = 1.1, Sigma = diag(2)) # works

有效,但如果1.5 = 则无效

  rWishart::rWishart(1, df = 1.5, Sigma = diag(2)) # does not works

我想在R中从Wishart分布中采样,该分布的自由度大于p-1但小于p(p-1

1 个答案:

答案 0 :(得分:0)

据我所知,matrixsampling是唯一提供这种可能性的软件包(我是它的作者)。

library(matrixsampling)
rwishart(3, nu = 1.1, Sigma = diag(2))
# , , 1
# 
#            [,1]      [,2]
# [1,]  0.7679333 -1.051319
# [2,] -1.0513191  1.439281
# 
# , , 2
# 
#            [,1]       [,2]
# [1,]  1.8536154 -0.9059983
# [2,] -0.9059983  0.4449708
# 
# , , 3
# 
#           [,1]      [,2]
# [1,] 0.9309460 0.6026472
# [2,] 0.6026472 0.3901232

如果您真的想使用单位矩阵作为比例矩阵Sigma进行采样,则可以执行以下操作:

matrixsampling:::rwishart_I(3, nu = 1.1, p = 2)

(老实说,我不记得自己做了什么,但这应该更有效)。