2016-01-06 4 views
0

Я новичок в bayesm package (и вообще байесовское моделирование). У меня есть прецедент, который мотивировал текущие усилия: необходимость в многомерной модели пробит, которую я могу обернуть в Python. Упаковка bayesm обеспечивает такой метод, rmvpGibbs(). У меня есть некоторые трудности с его запуском, потому что я продолжаю получать исключение, жалуясь на то, что параметр определения дисперсии (V) имеет «неправильное измерение».R: Ошибка измерения входного сигнала (байесм: `rmvpGibbs()`)

Я просто пытаюсь установить игрушку с данными 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

Обратите внимание, что если вы предоставили фактический набор входных данных «Scotch» для тестирования и устранения неполадок, это было бы полезно при воспроизведении проблемы. – Roger

ответ

0

Я думаю, что вам нужно изменить:

nu3<-(n-1)+3 

Для этого:

nu3<-(p-1)+3 

Поскольку определение ню является:

nu d.f. parm for IWishart prior (def: (p-1) + 3) 

Для получения дополнительной информации, пожалуйста, см https://cran.r-project.org/web/packages/bayesm/bayesm.pdf

Смежные вопросы