Print

Print


Hello again, WinBugs users!

I am trying to model a data generation process in which no observations on
out-of-sample i's are available, and the sample inclusion is
non-deterministic (more poor-quality social science data). Bloom and
Killingsworth (1985) propose a stochastic truncation model in which an
unobserved random threshold variable Ci and the dependent variable Yi are
distributed bivariate normal with  parameters mu Y mu Y sigma2 Y sigma2 C
and sigma YC. This is not implementable as written in WinBugs, of course,
because of the limitation on missing data in a multivariate node (and all
Ci's are missing). DeGroot (1986) points out that it is possible to
calculate a univariate truncated distribution that takes into account the
relationship between Y and C:

f(yi|ci>0,...) = normal(y[i]|mu,sigma2) * Pr(C[i]>0|y[i]) / Pr(C[i] >0)

The tricky part is Pr(C[i]>0|y[i]) which is equal to:

1-CDFnormal(0|D[i],P[i]) where

D[i] = muC[i] + (sigmayc/sigma2y)*(y[i] - muY[i]) and

P[i] = sigma2c - (sigma2yc/sigma2y) [Note: sigma2c is set equal to 1 to
identify/scale the model]

I have been trying, without success, to implement this function in WinBugs
using the "ones trick." Currently, Bugs is reporting an undefined variable,
which I am unable to locate. My code, complete with 10 fake observations on
the covariates, is included below. Any help or hints would be greatly
appreciated,as always!

Thanks,
___________________
Jack Buckley
SUNY Stony Brook
Department of Political Science
[log in to unmask]
(631) 632-4353

---------------------
WinBugs code follows
---------------------

Model

        Cbar <- mean(C)
        Ybar <- mean(Y)


        for(i in 1:N){

                product[i] <- (Y[i]-Ybar)*(C[i]-Cbar)

                d[i] <- muC[i] + ((sigmayc/pow(sigmay,2))*(Y[i]-muY[i]))

                muY[i] <-alpha1 + beta1 * x1[i] + beta2 * x2[i] + beta3 * x3[i]

                muC[i] <-alpha2 + gamma1 * x1[i] + gamma2 * x2[i]

                C[i] ~ dnorm(0,1)

                comp1[i] ~ dnorm(muY[i], tau1)
                temp1[i] ~ dnorm(d[i], p)
                temp2[i] ~ dnorm(muC[i], 1)
                comp2[i] <- pow((1-temp1[i]),-1)
                comp3[i] <- pow((1-temp2[i]),-1)

                ones[i] <- 1
                ones[i] ~ dbern( prob[i] )
                prob[i] <- comp1[i]*comp2[i]/comp3[i] / K


                }

                p <- 1 - (pow(sigmayc,2)/pow(sigmay,2))

                alpha ~ dnorm(0, 1.0E-6)
                beta1 ~ dnorm(0, 1.0E-6)
                beta2 ~ dnorm(0, 1.0E-6)
                beta3 ~ dnorm(0, 1.0E-6)

                alpha2 ~ dnorm(0, 1.0E-6)
                gamma1 ~ dnorm(0, 1.0E-6)
                gamma2 ~ dnorm(0, 1.0E-6)


                tau1 ~ dgamma(.001, .001)
                sigmay <- 1/sqrt(tau1)


                productsum <- sum(product)
                sigmayc <-mean(productsum)

                K <-100


        list(Y=c(1,2,3,4,5,6,7,8,9,10),

        x1=c(4,6,6,8,9,10,10,14,12,17),

        x2=c(0,0,1,0,0,1,1,1,0,1),

        x3=c(100,80,78,60,58,43,33,23,30,10),

        C=c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA),

        comp1=c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA),

        temp1=c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA),

        temp2=c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA),


        N=10)

        list(alpha1=0, alpha2=0, beta1=0, beta2=0, beta3=0, gamma1=0, gamma2=0,
tau1 =1)

-------------------------------------------------------------------
To mail the BUGS list, mail to [log in to unmask]
You can search old messages at www.jiscmail.ac.uk/lists/bugs.html
To leave the BUGS list, send LEAVE BUGS to [log in to unmask]
If this fails, mail [log in to unmask], NOT the whole list

This list is for discussion of modelling issues and the BUGS
software.  For help with crashes and error messages, first mail
[log in to unmask]