我是 bayesm 包的新手(通常是贝叶斯建模)。我有一个用例激发了当前的努力:需要一个我可以用Python包装的多变量概率模型。 bayesm 包提供了这样一种方法rmvpGibbs()
。但是我遇到了一些困难,因为我一直抱怨异常位置参数(V
)是“不正确的维度”。
我只是尝试使用库中的 Scotch 数据进行玩具设置,然后再转到我的用例。这是我的设置。
#Capture number of equations (scotches)
p<-ncol(Scotch)
#Capture number of observations
n<-nrow(Scotch)
#Capture the number of covariates (coefficients to be estimated)
d<-1
#Capture regressor data
z<-matrix(d)
#Construct design matrix (kronecker product of d-dimensional array of regressors and Ip for each equation)
X3_tmp<-z %x% diag(p)
X3<-X3_tmp
for(i in 2:n) {X3=rbind(X3,X3_tmp)}
#Capture number of columns k
k<-ncol(X3)
#Convert to long format
scotch_long<-melt(Scotch)
#Capture dependent data
y3<-scotch_long$value
#Capture regressors
#X3<-matrix(1,length(y3),1)
#Consolidate in list
Data3=list(p=nrow(Scotch),y=y3,X=X3)
#Capture priors for coefficients
betabar3<-c(rep(0,k))
A3<-0.01*diag(k)
#Capture priors for variance (start with default)
nu3<-(n-1)+3
V3<-nu3*diag(p)
#Consolidate in list
Prior3=list(betabar=betabar3,A=A3,nu=nu3,V=V3)
#Define initial values
beta0_3<-rep(0,p)
sigma0_3<-diag(p)
sigma0_3[lower.tri(sigma0_3)]<-.5
sigma0_3[upper.tri(sigma0_3)]<-.5
#Define number of iterations
R3<-10000
#Define keep behavior
keep3=1
#Consolidate in list
MCMC3=list(beta0=beta0_3,sigma0=sigma0_3,R=R3,keep=keep3)
#Fit model
simOut3=rmvpGibbs(Data3,Prior3,MCMC3)
对rmvpGibbs()
的调用失败,异常为"V is of incorrect dimension"
。但是,当我直接检查条件时(来自源头)......
if(sum(dim(V)==c(p,p)) != 2) pandterm("V is of incorrect dimension")
...我发现sum(dim(V)==c(p,p))
确实等于2(如预期的那样)。任何关于为什么失败的建议将不胜感激。 (如果您有这种倾向,请随意批评该设置。)
答案 0 :(得分:0)
我认为你需要改变这个:
nu3<-(n-1)+3
对此:
nu3<-(p-1)+3
由于nu的定义是:
nu d.f. parm for IWishart prior (def: (p-1) + 3)
有关详细信息,请参阅https://cran.r-project.org/web/packages/bayesm/bayesm.pdf