2016-07-29 34 views
0

Derzeit arbeite ich durch die oben in der RStudio Hilfedatei, die die folgende Probe enthält:Gibbs Sampler (Albert und Chib) für Binary Probit (rbprobitGibbs) ein Präzisions Matrix

## 
## rbprobitGibbs example 
## 
if(nchar(Sys.getenv("LONG_TEST")) != 0) {R=2000} else {R=10} 

set.seed(66)  
simbprobit = function(X,beta) { 
    ## function to simulate from binary probit including x variable 
    y=ifelse((X%*%beta+rnorm(nrow(X)))<0,0,1) 
    list(X=X,y=y,beta=beta) 
} 

nobs=200 
X=cbind(rep(1,nobs),runif(nobs),runif(nobs)) 
beta=c(0,1,-1) 
nvar=ncol(X) 
simout=simbprobit(X,beta) 

Data1=list(X=simout$X,y=simout$y) 
Mcmc1=list(R=R,keep=1) 

out=rbprobitGibbs(Data=Data1,Mcmc=Mcmc1) 

summary(out$betadraw,tvalues=beta) 

if(0){ 
    ## plotting example 
    plot(out$betadraw,tvalues=beta) 
} 

Wenn ich durch Schritt Der Code, ich sehe nirgends, dass die A-Matrix gesetzt ist. Es ist nur, wenn ich diese Zeile erreichen:

out=rbprobitGibbs(Data=Data1,Mcmc=Mcmc1) 

Dass ich die A-Matrix in der Ausgabe angezeigt zu sehen, die ich verstehe eine k * k Matrix sein muss, wo betabar k * 1 Matrix ist.

Prior Parms: 
betabar 
# [1] 0 0 0 
A 
#  [,1] [,2] [,3] 
# [1,] 0.01 0.00 0.00 
# [2,] 0.00 0.01 0.00 
# [3,] 0.00 0.00 0.01 

So kann ich verstehen, wie A seine Dimensionen erhält; Was mir jedoch nicht klar ist, ist, wie die Werte in A auf 0.01 gesetzt sind. Ich versuche herauszufinden, wie ich einem Benutzer, der die Funktion rbprobitGibbs aufruft, erlauben kann, die Genauigkeit über A auf das zu setzen, was sie wollen. Ich kann sehen, wo A ausgegeben wird, aber wie basieren seine Werte auf einigen Eingaben? Hat jemand irgendwelche Vorschläge? TIA.

UPDATE:

Hier ist die Ausgabe produziert, aber soweit ich feststellen kann, ist es gleich, ob ich prior = list(rep(0,3), .2*diag(3)) verwenden oder nicht:

> out 
$betadraw 
      [,1]  [,2]  [,3] 
[1,] 0.3565099 0.6369436 -0.9859025 
[2,] 0.4705437 0.7211755 -1.1955608 
[3,] 0.1478930 0.6538157 -0.6989660 
[4,] 0.4118663 0.7910846 -1.3919411 
[5,] 0.0385419 0.9421720 -0.7359932 
[6,] 0.1091359 0.7991905 -0.7731041 
[7,] 0.4072556 0.5183280 -0.7993501 
[8,] 0.3869478 0.8116237 -1.2831395 
[9,] 0.8893555 0.5448905 -1.8526630 
[10,] 0.3165972 0.6484716 -0.9857531 
attr(,"class") 
[1] "bayesm.mat" "mcmc"  
attr(,"mcpar") 
[1] 1 10 1 

Antwort

1

Es wird diesen Faktor durch eine Skalierungskonstante auf der vorherigen Präzisionsmatrix. In der Quelle werden Sie feststellen, dass, wenn Sie keine vorherige Genauigkeit angeben, eine quadratische k-Matrix erzeugt und mit 0,1 multipliziert wird. Nichts Besonderes hier. Diese Skalierungsparameter für alle verschiedenen Funktionen in bayesm finden Sie in der ./bayesm/R/bayesmConstants.R file.

if (is.null(Prior$A)) { 
     A = BayesmConstant.A * diag(nvar) 
    } 

Sollten Sie gerne können Sie Ihre eigene Konstante liefern könnte, sagen .2, könnten Sie dies tun, wie folgt, prior = list(rep(0,k), .2*diag(k)) oder sogar einige relationalen Informationen in die vor einzuführen.

+0

Wenn ich Ihre Zeile direkt vor meinem "out = rbprobitGibbs (Daten = Daten1, vorher, Mcmc = Mcmc1)" mit "Prior = Liste (rep (0,3), .2 * diag (3))" dann Mein A sieht immer noch gleich aus. Soweit ich das beurteilen kann, sieht Betadraw genauso aus. Was vermisse ich? – Roger

+0

Dies wurde natürlich vorher erstellt, aber A hat sich überhaupt nicht geändert. – Roger

+0

Also, muss ich einen Weg finden, um den "BayesmConstant.A" zu ändern? – Roger