从 R 中 p-1 < df < p 的 Wishart 分布中抽样
Sampling from Wishart distribution with p-1 < df < p in R
我需要从 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,我想从 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 =< df < 2
rWishart::rWishart(1, df = 1.5, Sigma = diag(2)) # does not works
我想在 R 中找到从自由度大于 p-1 但小于 p (p-1 < df < p) 的 Wishart 分布中采样的方法。采样矩阵是否奇异对我来说并不重要。
据我所知,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)
(老实说,我不记得我做了什么,但这应该更有效率)。
我需要从 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,我想从 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 =< df < 2
rWishart::rWishart(1, df = 1.5, Sigma = diag(2)) # does not works
我想在 R 中找到从自由度大于 p-1 但小于 p (p-1 < df < p) 的 Wishart 分布中采样的方法。采样矩阵是否奇异对我来说并不重要。
据我所知,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)
(老实说,我不记得我做了什么,但这应该更有效率)。