我需要从Wishart分布中采样矩阵,其自由度小于比例矩阵的维数。我很难找到允许它的R功能。
对于Wishart分布,自由度(称为df或v)必须大于比例矩阵的维数(比如p)减1(即df> p - 1)(参见https://en.wikipedia.org/wiki/Wishart_distribution或Wishart分布的任何手册) )。然而,当我尝试从具有p-1 <df <p的Wishart分布中进行采样时,比如W(df = 1.1,I_p),其中I_p是pxp单位矩阵,我得到错误,表明自由度的不一致。
假设p = 2,我想从不同的Wishart分布中采样,df在1和2之间(排除)但是
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 = <df <2则不然
rWishart::rWishart(1, df = 1.5, Sigma = diag(2)) # does not works
我想在R中找到从Wishart分布中采样的方法,该分布具有大于p-1但小于p(p-1 <df <p)的任何自由度。对我来说,采样矩阵是否是单数并不严格。
据我所知,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)
(老实说,我不记得我做过什么,但这应该更有效率)。